Theorem: Ordinal.nfp_mul_opow_omega_add
File: Mathlib/SetTheory/Ordinal/FixedPoint.lean

tactic: apply le_antisymm
state_before: a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
⊢ nfp (fun x => a * x) (a ^ ω * b + c) = a ^ ω * succ b
state_after: case a
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
⊢ nfp (fun x => a * x) (a ^ ω * b + c) ≤ a ^ ω * succ b

case a
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
⊢ a ^ ω * succ b ≤ nfp (fun x => a * x) (a ^ ω * b + c)

tactic: apply nfp_le_fp (mul_isNormal ha).monotone
state_before: case a
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
⊢ nfp (fun x => a * x) (a ^ ω * b + c) ≤ a ^ ω * succ b
state_after: case a.ab
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
⊢ a ^ ω * b + c ≤ a ^ ω * succ b

case a.h
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
⊢ a * (a ^ ω * succ b) ≤ a ^ ω * succ b

tactic: rw [mul_succ]
state_before: case a.ab
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
⊢ a ^ ω * b + c ≤ a ^ ω * succ b
state_after: case a.ab
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
⊢ a ^ ω * b + c ≤ a ^ ω * b + a ^ ω

tactic: apply add_le_add_left hca
state_before: case a.ab
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
⊢ a ^ ω * b + c ≤ a ^ ω * b + a ^ ω
state_after: no goals

tactic: rw [← mul_assoc, ← opow_one_add, one_add_omega]
state_before: case a.h
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
⊢ a * (a ^ ω * succ b) ≤ a ^ ω * succ b
state_after: no goals

tactic: cases' mul_eq_right_iff_opow_omega_dvd.1 ((mul_isNormal ha).nfp_fp ((a^omega) * b + c)) with
  d hd
state_before: case a
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
⊢ a ^ ω * succ b ≤ nfp (fun x => a * x) (a ^ ω * b + c)
state_after: case a.intro
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
d : Ordinal.{u}
hd : nfp (fun x => a * x) (a ^ ω * b + c) = a ^ ω * d
⊢ a ^ ω * succ b ≤ nfp (fun x => a * x) (a ^ ω * b + c)

tactic: rw [hd]
state_before: case a.intro
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
d : Ordinal.{u}
hd : nfp (fun x => a * x) (a ^ ω * b + c) = a ^ ω * d
⊢ a ^ ω * succ b ≤ nfp (fun x => a * x) (a ^ ω * b + c)
state_after: case a.intro
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
d : Ordinal.{u}
hd : nfp (fun x => a * x) (a ^ ω * b + c) = a ^ ω * d
⊢ a ^ ω * succ b ≤ a ^ ω * d

tactic: apply mul_le_mul_left'
state_before: case a.intro
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
d : Ordinal.{u}
hd : nfp (fun x => a * x) (a ^ ω * b + c) = a ^ ω * d
⊢ a ^ ω * succ b ≤ a ^ ω * d
state_after: case a.intro.bc
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
d : Ordinal.{u}
hd : nfp (fun x => a * x) (a ^ ω * b + c) = a ^ ω * d
⊢ succ b ≤ d

tactic: have := le_nfp (Mul.mul a) ((a^omega) * b + c)
state_before: case a.intro.bc
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
d : Ordinal.{u}
hd : nfp (fun x => a * x) (a ^ ω * b + c) = a ^ ω * d
⊢ succ b ≤ d
state_after: case a.intro.bc
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
d : Ordinal.{u}
hd : nfp (fun x => a * x) (a ^ ω * b + c) = a ^ ω * d
this : a ^ ω * b + c ≤ nfp (Mul.mul a) (a ^ ω * b + c)
⊢ succ b ≤ d

tactic: erw [hd] at this
state_before: case a.intro.bc
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
d : Ordinal.{u}
hd : nfp (fun x => a * x) (a ^ ω * b + c) = a ^ ω * d
this : a ^ ω * b + c ≤ nfp (Mul.mul a) (a ^ ω * b + c)
⊢ succ b ≤ d
state_after: case a.intro.bc
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
d : Ordinal.{u}
hd : nfp (fun x => a * x) (a ^ ω * b + c) = a ^ ω * d
this : a ^ ω * b + c ≤ a ^ ω * d
⊢ succ b ≤ d

tactic: have := (add_lt_add_left hc ((a^omega) * b)).trans_le this
state_before: case a.intro.bc
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
d : Ordinal.{u}
hd : nfp (fun x => a * x) (a ^ ω * b + c) = a ^ ω * d
this : a ^ ω * b + c ≤ a ^ ω * d
⊢ succ b ≤ d
state_after: case a.intro.bc
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
d : Ordinal.{u}
hd : nfp (fun x => a * x) (a ^ ω * b + c) = a ^ ω * d
this✝ : a ^ ω * b + c ≤ a ^ ω * d
this : a ^ ω * b + 0 < a ^ ω * d
⊢ succ b ≤ d

tactic: rw [add_zero, mul_lt_mul_iff_left (opow_pos omega ha)] at this
state_before: case a.intro.bc
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
d : Ordinal.{u}
hd : nfp (fun x => a * x) (a ^ ω * b + c) = a ^ ω * d
this✝ : a ^ ω * b + c ≤ a ^ ω * d
this : a ^ ω * b + 0 < a ^ ω * d
⊢ succ b ≤ d
state_after: case a.intro.bc
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
d : Ordinal.{u}
hd : nfp (fun x => a * x) (a ^ ω * b + c) = a ^ ω * d
this✝ : a ^ ω * b + c ≤ a ^ ω * d
this : b < d
⊢ succ b ≤ d

tactic: rwa [succ_le_iff]
state_before: case a.intro.bc
a c b : Ordinal.{u}
ha : 0 < a
hc : 0 < c
hca : c ≤ a ^ ω
d : Ordinal.{u}
hd : nfp (fun x => a * x) (a ^ ω * b + c) = a ^ ω * d
this✝ : a ^ ω * b + c ≤ a ^ ω * d
this : b < d
⊢ succ b ≤ d
state_after: no goals