Theorem: Ordinal.IsNormal.eq_iff_zero_and_succ
File: Mathlib/SetTheory/Ordinal/Arithmetic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f g : Ordinal.{u} → Ordinal.{u}
hf : IsNormal f
hg : IsNormal g
h : f = g
⊢ f 0 = g 0 ∧ ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
state_after: no goals
tactic: simp [h]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f g : Ordinal.{u} → Ordinal.{u}
hf : IsNormal f
hg : IsNormal g
x✝ : f 0 = g 0 ∧ ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
h₁ : f 0 = g 0
h₂ : ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
a : Ordinal.{u}
⊢ f a = g a
state_after: case H₁
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f g : Ordinal.{u} → Ordinal.{u}
hf : IsNormal f
hg : IsNormal g
x✝ : f 0 = g 0 ∧ ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
h₁ : f 0 = g 0
h₂ : ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
⊢ f 0 = g 0

case H₂
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f g : Ordinal.{u} → Ordinal.{u}
hf : IsNormal f
hg : IsNormal g
x✝ : f 0 = g 0 ∧ ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
h₁ : f 0 = g 0
h₂ : ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
o✝ : Ordinal.{u}
a✝ : f o✝ = g o✝
⊢ f (succ o✝) = g (succ o✝)

case H₃
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f g : Ordinal.{u} → Ordinal.{u}
hf : IsNormal f
hg : IsNormal g
x✝ : f 0 = g 0 ∧ ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
h₁ : f 0 = g 0
h₂ : ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
o✝ : Ordinal.{u}
ho : o✝.IsLimit
H : ∀ o' < o✝, f o' = g o'
⊢ f o✝ = g o✝
tactic: induction' a using limitRecOn with _ _ _ ho H
state_before: case H₁
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f g : Ordinal.{u} → Ordinal.{u}
hf : IsNormal f
hg : IsNormal g
x✝ : f 0 = g 0 ∧ ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
h₁ : f 0 = g 0
h₂ : ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
⊢ f 0 = g 0

case H₂
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f g : Ordinal.{u} → Ordinal.{u}
hf : IsNormal f
hg : IsNormal g
x✝ : f 0 = g 0 ∧ ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
h₁ : f 0 = g 0
h₂ : ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
o✝ : Ordinal.{u}
a✝ : f o✝ = g o✝
⊢ f (succ o✝) = g (succ o✝)

case H₃
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f g : Ordinal.{u} → Ordinal.{u}
hf : IsNormal f
hg : IsNormal g
x✝ : f 0 = g 0 ∧ ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
h₁ : f 0 = g 0
h₂ : ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
o✝ : Ordinal.{u}
ho : o✝.IsLimit
H : ∀ o' < o✝, f o' = g o'
⊢ f o✝ = g o✝
state_after: case H₃
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f g : Ordinal.{u} → Ordinal.{u}
hf : IsNormal f
hg : IsNormal g
x✝ : f 0 = g 0 ∧ ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
h₁ : f 0 = g 0
h₂ : ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
o✝ : Ordinal.{u}
ho : o✝.IsLimit
H : ∀ o' < o✝, f o' = g o'
⊢ f o✝ = g o✝
tactic: any_goals solve_by_elim
state_before: case H₃
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f g : Ordinal.{u} → Ordinal.{u}
hf : IsNormal f
hg : IsNormal g
x✝ : f 0 = g 0 ∧ ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
h₁ : f 0 = g 0
h₂ : ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
o✝ : Ordinal.{u}
ho : o✝.IsLimit
H : ∀ o' < o✝, f o' = g o'
⊢ f o✝ = g o✝
state_after: case H₃
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f g : Ordinal.{u} → Ordinal.{u}
hf : IsNormal f
hg : IsNormal g
x✝ : f 0 = g 0 ∧ ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
h₁ : f 0 = g 0
h₂ : ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
o✝ : Ordinal.{u}
ho : o✝.IsLimit
H : ∀ o' < o✝, f o' = g o'
⊢ (o✝.bsup fun x x_1 => f x) = o✝.bsup fun x x_1 => g x
tactic: rw [← IsNormal.bsup_eq.{u, u} hf ho, ← IsNormal.bsup_eq.{u, u} hg ho]
state_before: case H₃
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f g : Ordinal.{u} → Ordinal.{u}
hf : IsNormal f
hg : IsNormal g
x✝ : f 0 = g 0 ∧ ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
h₁ : f 0 = g 0
h₂ : ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
o✝ : Ordinal.{u}
ho : o✝.IsLimit
H : ∀ o' < o✝, f o' = g o'
⊢ (o✝.bsup fun x x_1 => f x) = o✝.bsup fun x x_1 => g x
state_after: case H₃.e_f
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f g : Ordinal.{u} → Ordinal.{u}
hf : IsNormal f
hg : IsNormal g
x✝ : f 0 = g 0 ∧ ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
h₁ : f 0 = g 0
h₂ : ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
o✝ : Ordinal.{u}
ho : o✝.IsLimit
H : ∀ o' < o✝, f o' = g o'
⊢ (fun x x_1 => f x) = fun x x_1 => g x
tactic: congr
state_before: case H₃.e_f
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f g : Ordinal.{u} → Ordinal.{u}
hf : IsNormal f
hg : IsNormal g
x✝ : f 0 = g 0 ∧ ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
h₁ : f 0 = g 0
h₂ : ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
o✝ : Ordinal.{u}
ho : o✝.IsLimit
H : ∀ o' < o✝, f o' = g o'
⊢ (fun x x_1 => f x) = fun x x_1 => g x
state_after: case H₃.e_f.h.h
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f g : Ordinal.{u} → Ordinal.{u}
hf : IsNormal f
hg : IsNormal g
x✝ : f 0 = g 0 ∧ ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
h₁ : f 0 = g 0
h₂ : ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
o✝ : Ordinal.{u}
ho : o✝.IsLimit
H : ∀ o' < o✝, f o' = g o'
b : Ordinal.{u}
hb : b < o✝
⊢ f b = g b
tactic: ext b hb
state_before: case H₃.e_f.h.h
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f g : Ordinal.{u} → Ordinal.{u}
hf : IsNormal f
hg : IsNormal g
x✝ : f 0 = g 0 ∧ ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
h₁ : f 0 = g 0
h₂ : ∀ (a : Ordinal.{u}), f a = g a → f (succ a) = g (succ a)
o✝ : Ordinal.{u}
ho : o✝.IsLimit
H : ∀ o' < o✝, f o' = g o'
b : Ordinal.{u}
hb : b < o✝
⊢ f b = g b
state_after: no goals
tactic: exact H b hb