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

tactic: induction b using limitRecOn with
| H₁ =>
  cases' p0 with x px
  have := Ordinal.le_zero.1 ((H₂ _).1 (Ordinal.zero_le _) _ px)
  rw [this] at px
  exact h _ px
| H₂ S _ =>
  rcases not_forall₂.1 (mt (H₂ S).2 <| (lt_succ S).not_le) with ⟨a, h₁, h₂⟩
  exact (H.le_iff.2 <| succ_le_of_lt <| not_le.1 h₂).trans (h _ h₁)
| H₃ S L _ =>
  refine (H.2 _ L _).2 fun a h' => ?_
  rcases not_forall₂.1 (mt (H₂ a).2 h'.not_le) with ⟨b, h₁, h₂⟩
  exact (H.le_iff.2 <| (not_le.1 h₂).le).trans (h _ h₁)
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{u_4} → Ordinal.{u_5}
o : Ordinal.{u_5}
H : IsNormal f
p : Set Ordinal.{u_4}
p0 : p.Nonempty
b : Ordinal.{u_4}
H₂ : ∀ (o : Ordinal.{u_4}), b ≤ o ↔ ∀ a ∈ p, a ≤ o
h : ∀ a ∈ p, f a ≤ o
⊢ f b ≤ o
state_after: no goals

tactic: cases' p0 with x px
state_before: case H₁
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{u_4} → Ordinal.{u_5}
o : Ordinal.{u_5}
H : IsNormal f
p : Set Ordinal.{u_4}
p0 : p.Nonempty
h : ∀ a ∈ p, f a ≤ o
H₂ : ∀ (o : Ordinal.{u_4}), 0 ≤ o ↔ ∀ a ∈ p, a ≤ o
⊢ f 0 ≤ o
state_after: case H₁.intro
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{u_4} → Ordinal.{u_5}
o : Ordinal.{u_5}
H : IsNormal f
p : Set Ordinal.{u_4}
h : ∀ a ∈ p, f a ≤ o
H₂ : ∀ (o : Ordinal.{u_4}), 0 ≤ o ↔ ∀ a ∈ p, a ≤ o
x : Ordinal.{u_4}
px : x ∈ p
⊢ f 0 ≤ o

tactic: have := Ordinal.le_zero.1 ((H₂ _).1 (Ordinal.zero_le _) _ px)
state_before: case H₁.intro
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{u_4} → Ordinal.{u_5}
o : Ordinal.{u_5}
H : IsNormal f
p : Set Ordinal.{u_4}
h : ∀ a ∈ p, f a ≤ o
H₂ : ∀ (o : Ordinal.{u_4}), 0 ≤ o ↔ ∀ a ∈ p, a ≤ o
x : Ordinal.{u_4}
px : x ∈ p
⊢ f 0 ≤ o
state_after: case H₁.intro
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{u_4} → Ordinal.{u_5}
o : Ordinal.{u_5}
H : IsNormal f
p : Set Ordinal.{u_4}
h : ∀ a ∈ p, f a ≤ o
H₂ : ∀ (o : Ordinal.{u_4}), 0 ≤ o ↔ ∀ a ∈ p, a ≤ o
x : Ordinal.{u_4}
px : x ∈ p
this : x = 0
⊢ f 0 ≤ o

tactic: rw [this] at px
state_before: case H₁.intro
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{u_4} → Ordinal.{u_5}
o : Ordinal.{u_5}
H : IsNormal f
p : Set Ordinal.{u_4}
h : ∀ a ∈ p, f a ≤ o
H₂ : ∀ (o : Ordinal.{u_4}), 0 ≤ o ↔ ∀ a ∈ p, a ≤ o
x : Ordinal.{u_4}
px : x ∈ p
this : x = 0
⊢ f 0 ≤ o
state_after: case H₁.intro
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{u_4} → Ordinal.{u_5}
o : Ordinal.{u_5}
H : IsNormal f
p : Set Ordinal.{u_4}
h : ∀ a ∈ p, f a ≤ o
H₂ : ∀ (o : Ordinal.{u_4}), 0 ≤ o ↔ ∀ a ∈ p, a ≤ o
x : Ordinal.{u_4}
px : 0 ∈ p
this : x = 0
⊢ f 0 ≤ o

tactic: exact h _ px
state_before: case H₁.intro
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{u_4} → Ordinal.{u_5}
o : Ordinal.{u_5}
H : IsNormal f
p : Set Ordinal.{u_4}
h : ∀ a ∈ p, f a ≤ o
H₂ : ∀ (o : Ordinal.{u_4}), 0 ≤ o ↔ ∀ a ∈ p, a ≤ o
x : Ordinal.{u_4}
px : 0 ∈ p
this : x = 0
⊢ f 0 ≤ o
state_after: no goals

tactic: rcases not_forall₂.1 (mt (H₂ S).2 <| (lt_succ S).not_le) with ⟨a, h₁, h₂⟩
state_before: case H₂
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{u_4} → Ordinal.{u_5}
o : Ordinal.{u_5}
H : IsNormal f
p : Set Ordinal.{u_4}
p0 : p.Nonempty
h : ∀ a ∈ p, f a ≤ o
S : Ordinal.{u_4}
a✝ : (∀ (o : Ordinal.{u_4}), S ≤ o ↔ ∀ a ∈ p, a ≤ o) → f S ≤ o
H₂ : ∀ (o : Ordinal.{u_4}), succ S ≤ o ↔ ∀ a ∈ p, a ≤ o
⊢ f (succ S) ≤ o
state_after: case H₂.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{u_4} → Ordinal.{u_5}
o : Ordinal.{u_5}
H : IsNormal f
p : Set Ordinal.{u_4}
p0 : p.Nonempty
h : ∀ a ∈ p, f a ≤ o
S : Ordinal.{u_4}
a✝ : (∀ (o : Ordinal.{u_4}), S ≤ o ↔ ∀ a ∈ p, a ≤ o) → f S ≤ o
H₂ : ∀ (o : Ordinal.{u_4}), succ S ≤ o ↔ ∀ a ∈ p, a ≤ o
a : Ordinal.{u_4}
h₁ : a ∈ p
h₂ : ¬a ≤ S
⊢ f (succ S) ≤ o

tactic: exact (H.le_iff.2 <| succ_le_of_lt <| not_le.1 h₂).trans (h _ h₁)
state_before: case H₂.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{u_4} → Ordinal.{u_5}
o : Ordinal.{u_5}
H : IsNormal f
p : Set Ordinal.{u_4}
p0 : p.Nonempty
h : ∀ a ∈ p, f a ≤ o
S : Ordinal.{u_4}
a✝ : (∀ (o : Ordinal.{u_4}), S ≤ o ↔ ∀ a ∈ p, a ≤ o) → f S ≤ o
H₂ : ∀ (o : Ordinal.{u_4}), succ S ≤ o ↔ ∀ a ∈ p, a ≤ o
a : Ordinal.{u_4}
h₁ : a ∈ p
h₂ : ¬a ≤ S
⊢ f (succ S) ≤ o
state_after: no goals

tactic: refine (H.2 _ L _).2 fun a h' => ?_
state_before: case H₃
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{u_4} → Ordinal.{u_5}
o : Ordinal.{u_5}
H : IsNormal f
p : Set Ordinal.{u_4}
p0 : p.Nonempty
h : ∀ a ∈ p, f a ≤ o
S : Ordinal.{u_4}
L : S.IsLimit
a✝ : ∀ o' < S, (∀ (o : Ordinal.{u_4}), o' ≤ o ↔ ∀ a ∈ p, a ≤ o) → f o' ≤ o
H₂ : ∀ (o : Ordinal.{u_4}), S ≤ o ↔ ∀ a ∈ p, a ≤ o
⊢ f S ≤ o
state_after: case H₃
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{u_4} → Ordinal.{u_5}
o : Ordinal.{u_5}
H : IsNormal f
p : Set Ordinal.{u_4}
p0 : p.Nonempty
h : ∀ a ∈ p, f a ≤ o
S : Ordinal.{u_4}
L : S.IsLimit
a✝ : ∀ o' < S, (∀ (o : Ordinal.{u_4}), o' ≤ o ↔ ∀ a ∈ p, a ≤ o) → f o' ≤ o
H₂ : ∀ (o : Ordinal.{u_4}), S ≤ o ↔ ∀ a ∈ p, a ≤ o
a : Ordinal.{u_4}
h' : a < S
⊢ f a ≤ o

tactic: rcases not_forall₂.1 (mt (H₂ a).2 h'.not_le) with ⟨b, h₁, h₂⟩
state_before: case H₃
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{u_4} → Ordinal.{u_5}
o : Ordinal.{u_5}
H : IsNormal f
p : Set Ordinal.{u_4}
p0 : p.Nonempty
h : ∀ a ∈ p, f a ≤ o
S : Ordinal.{u_4}
L : S.IsLimit
a✝ : ∀ o' < S, (∀ (o : Ordinal.{u_4}), o' ≤ o ↔ ∀ a ∈ p, a ≤ o) → f o' ≤ o
H₂ : ∀ (o : Ordinal.{u_4}), S ≤ o ↔ ∀ a ∈ p, a ≤ o
a : Ordinal.{u_4}
h' : a < S
⊢ f a ≤ o
state_after: case H₃.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{u_4} → Ordinal.{u_5}
o : Ordinal.{u_5}
H : IsNormal f
p : Set Ordinal.{u_4}
p0 : p.Nonempty
h : ∀ a ∈ p, f a ≤ o
S : Ordinal.{u_4}
L : S.IsLimit
a✝ : ∀ o' < S, (∀ (o : Ordinal.{u_4}), o' ≤ o ↔ ∀ a ∈ p, a ≤ o) → f o' ≤ o
H₂ : ∀ (o : Ordinal.{u_4}), S ≤ o ↔ ∀ a ∈ p, a ≤ o
a : Ordinal.{u_4}
h' : a < S
b : Ordinal.{u_4}
h₁ : b ∈ p
h₂ : ¬b ≤ a
⊢ f a ≤ o

tactic: exact (H.le_iff.2 <| (not_le.1 h₂).le).trans (h _ h₁)
state_before: case H₃.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{u_4} → Ordinal.{u_5}
o : Ordinal.{u_5}
H : IsNormal f
p : Set Ordinal.{u_4}
p0 : p.Nonempty
h : ∀ a ∈ p, f a ≤ o
S : Ordinal.{u_4}
L : S.IsLimit
a✝ : ∀ o' < S, (∀ (o : Ordinal.{u_4}), o' ≤ o ↔ ∀ a ∈ p, a ≤ o) → f o' ≤ o
H₂ : ∀ (o : Ordinal.{u_4}), S ≤ o ↔ ∀ a ∈ p, a ≤ o
a : Ordinal.{u_4}
h' : a < S
b : Ordinal.{u_4}
h₁ : b ∈ p
h₂ : ¬b ≤ a
⊢ f a ≤ o
state_after: no goals