Theorem: Ordinal.principal_nfp_blsub₂
File: Mathlib/SetTheory/Ordinal/Principal.lean

tactic: rw [lt_nfp] at *
state_before: op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}
o a b : Ordinal.{u}
ha : a < nfp (fun o' => o'.blsub₂ o' fun a x b x => op a b) o
hb : b < nfp (fun o' => o'.blsub₂ o' fun a x b x => op a b) o
⊢ op a b < nfp (fun o' => o'.blsub₂ o' fun a x b x => op a b) o
state_after: op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}
o a b : Ordinal.{u}
ha : ∃ n, a < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
hb : ∃ n, b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
⊢ ∃ n, op a b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o

tactic: cases' ha with m hm
state_before: op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}
o a b : Ordinal.{u}
ha : ∃ n, a < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
hb : ∃ n, b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
⊢ ∃ n, op a b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
state_after: case intro
op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}
o a b : Ordinal.{u}
hb : ∃ n, b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
m : ℕ
hm : a < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o
⊢ ∃ n, op a b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o

tactic: cases' hb with n hn
state_before: case intro
op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}
o a b : Ordinal.{u}
hb : ∃ n, b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
m : ℕ
hm : a < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o
⊢ ∃ n, op a b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
state_after: case intro.intro
op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}
o a b : Ordinal.{u}
m : ℕ
hm : a < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o
n : ℕ
hn : b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
⊢ ∃ n, op a b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o

tactic: cases' le_total
  ((fun o' => blsub₂.{u, u, u} o' o' (@fun a _ b _ => op a b))^[m] o)
  ((fun o' => blsub₂.{u, u, u} o' o' (@fun a _ b _ => op a b))^[n] o) with h h
state_before: case intro.intro
op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}
o a b : Ordinal.{u}
m : ℕ
hm : a < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o
n : ℕ
hn : b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
⊢ ∃ n, op a b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
state_after: case intro.intro.inl
op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}
o a b : Ordinal.{u}
m : ℕ
hm : a < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o
n : ℕ
hn : b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
h : (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o ≤ (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
⊢ ∃ n, op a b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o

case intro.intro.inr
op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}
o a b : Ordinal.{u}
m : ℕ
hm : a < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o
n : ℕ
hn : b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
h : (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o ≤ (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o
⊢ ∃ n, op a b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o

tactic: use n + 1
state_before: case intro.intro.inl
op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}
o a b : Ordinal.{u}
m : ℕ
hm : a < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o
n : ℕ
hn : b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
h : (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o ≤ (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
⊢ ∃ n, op a b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
state_after: case h
op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}
o a b : Ordinal.{u}
m : ℕ
hm : a < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o
n : ℕ
hn : b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
h : (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o ≤ (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
⊢ op a b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n + 1] o

tactic: rw [Function.iterate_succ']
state_before: case h
op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}
o a b : Ordinal.{u}
m : ℕ
hm : a < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o
n : ℕ
hn : b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
h : (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o ≤ (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
⊢ op a b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n + 1] o
state_after: case h
op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}
o a b : Ordinal.{u}
m : ℕ
hm : a < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o
n : ℕ
hn : b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
h : (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o ≤ (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
⊢ op a b < ((fun o' => o'.blsub₂ o' fun a x b x => op a b) ∘ (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n]) o

tactic: exact lt_blsub₂.{u} (@fun a _ b _ => op a b) (hm.trans_le h) hn
state_before: case h
op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}
o a b : Ordinal.{u}
m : ℕ
hm : a < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o
n : ℕ
hn : b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
h : (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o ≤ (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
⊢ op a b < ((fun o' => o'.blsub₂ o' fun a x b x => op a b) ∘ (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n]) o
state_after: no goals

tactic: use m + 1
state_before: case intro.intro.inr
op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}
o a b : Ordinal.{u}
m : ℕ
hm : a < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o
n : ℕ
hn : b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
h : (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o ≤ (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o
⊢ ∃ n, op a b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
state_after: case h
op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}
o a b : Ordinal.{u}
m : ℕ
hm : a < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o
n : ℕ
hn : b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
h : (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o ≤ (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o
⊢ op a b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m + 1] o

tactic: rw [Function.iterate_succ']
state_before: case h
op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}
o a b : Ordinal.{u}
m : ℕ
hm : a < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o
n : ℕ
hn : b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
h : (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o ≤ (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o
⊢ op a b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m + 1] o
state_after: case h
op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}
o a b : Ordinal.{u}
m : ℕ
hm : a < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o
n : ℕ
hn : b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
h : (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o ≤ (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o
⊢ op a b < ((fun o' => o'.blsub₂ o' fun a x b x => op a b) ∘ (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m]) o

tactic: exact lt_blsub₂.{u} (@fun a _ b _ => op a b) hm (hn.trans_le h)
state_before: case h
op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}
o a b : Ordinal.{u}
m : ℕ
hm : a < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o
n : ℕ
hn : b < (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o
h : (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[n] o ≤ (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m] o
⊢ op a b < ((fun o' => o'.blsub₂ o' fun a x b x => op a b) ∘ (fun o' => o'.blsub₂ o' fun a x b x => op a b)^[m]) o
state_after: no goals