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

tactic: suffices : ∀ (o) (_ : a ≤ derivFamily.{u, v} f o), ∃ o, derivFamily.{u, v} f o = a
state_before: ι : Type u
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a : Ordinal
ha : ∀ (i : ι), f i a ≤ a
⊢ ∃ o, derivFamily f o = a

tactic: exact this a ((derivFamily_isNormal _).self_le _)
state_before: ι : Type u
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a : Ordinal
ha : ∀ (i : ι), f i a ≤ a
this : ∀ (o : Ordinal), a ≤ derivFamily f o → ∃ o, derivFamily f o = a
⊢ ∃ o, derivFamily f o = a

case this
ι : Type u
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a : Ordinal
ha : ∀ (i : ι), f i a ≤ a
⊢ ∀ (o : Ordinal), a ≤ derivFamily f o → ∃ o, derivFamily f o = a

tactic: intro o
state_before: case this
ι : Type u
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a : Ordinal
ha : ∀ (i : ι), f i a ≤ a
⊢ ∀ (o : Ordinal), a ≤ derivFamily f o → ∃ o, derivFamily f o = a

tactic: induction' o using limitRecOn with o IH o l IH
state_before: case this
ι : Type u
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a : Ordinal
ha : ∀ (i : ι), f i a ≤ a
o : Ordinal
⊢ a ≤ derivFamily f o → ∃ o, derivFamily f o = a

tactic: intro h₁
state_before: case this.H₁
ι : Type u
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a : Ordinal
ha : ∀ (i : ι), f i a ≤ a
⊢ a ≤ derivFamily f 0 → ∃ o, derivFamily f o = a

tactic: refine' ⟨0, le_antisymm _ h₁⟩
state_before: case this.H₁
ι : Type u
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a : Ordinal
ha : ∀ (i : ι), f i a ≤ a
h₁ : a ≤ derivFamily f 0
⊢ ∃ o, derivFamily f o = a

tactic: rw [derivFamily_zero]
state_before: case this.H₁
ι : Type u
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a : Ordinal
ha : ∀ (i : ι), f i a ≤ a
h₁ : a ≤ derivFamily f 0
⊢ derivFamily f 0 ≤ a

tactic: exact nfpFamily_le_fp (fun i => (H i).monotone) (Ordinal.zero_le _) ha
state_before: case this.H₁
ι : Type u
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a : Ordinal
ha : ∀ (i : ι), f i a ≤ a
h₁ : a ≤ derivFamily f 0
⊢ nfpFamily f 0 ≤ a

tactic: intro h₁
state_before: case this.H₂
ι : Type u
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a : Ordinal
ha : ∀ (i : ι), f i a ≤ a
o : Ordinal
IH : a ≤ derivFamily f o → ∃ o, derivFamily f o = a
⊢ a ≤ derivFamily f (succ o) → ∃ o, derivFamily f o = a

tactic: cases' le_or_lt a (derivFamily.{u, v} f o) with h h
state_before: case this.H₂
ι : Type u
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a : Ordinal
ha : ∀ (i : ι), f i a ≤ a
o : Ordinal
IH : a ≤ derivFamily f o → ∃ o, derivFamily f o = a
h₁ : a ≤ derivFamily f (succ o)
⊢ ∃ o, derivFamily f o = a

tactic: refine' ⟨succ o, le_antisymm _ h₁⟩
state_before: case this.H₂.inr
ι : Type u
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a : Ordinal
ha : ∀ (i : ι), f i a ≤ a
o : Ordinal
IH : a ≤ derivFamily f o → ∃ o, derivFamily f o = a
h₁ : a ≤ derivFamily f (succ o)
h : derivFamily f o < a
⊢ ∃ o, derivFamily f o = a

tactic: rw [derivFamily_succ]
state_before: case this.H₂.inr
ι : Type u
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a : Ordinal
ha : ∀ (i : ι), f i a ≤ a
o : Ordinal
IH : a ≤ derivFamily f o → ∃ o, derivFamily f o = a
h₁ : a ≤ derivFamily f (succ o)
h : derivFamily f o < a
⊢ derivFamily f (succ o) ≤ a

tactic: exact nfpFamily_le_fp (fun i => (H i).monotone) (succ_le_of_lt h) ha
state_before: case this.H₂.inr
ι : Type u
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a : Ordinal
ha : ∀ (i : ι), f i a ≤ a
o : Ordinal
IH : a ≤ derivFamily f o → ∃ o, derivFamily f o = a
h₁ : a ≤ derivFamily f (succ o)
h : derivFamily f o < a
⊢ nfpFamily f (succ (derivFamily f o)) ≤ a

tactic: exact IH h
state_before: case this.H₂.inl
ι : Type u
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a : Ordinal
ha : ∀ (i : ι), f i a ≤ a
o : Ordinal
IH : a ≤ derivFamily f o → ∃ o, derivFamily f o = a
h₁ : a ≤ derivFamily f (succ o)
h : a ≤ derivFamily f o
⊢ ∃ o, derivFamily f o = a

tactic: intro h₁
state_before: case this.H₃
ι : Type u
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a : Ordinal
ha : ∀ (i : ι), f i a ≤ a
o : Ordinal
l : IsLimit o
IH : ∀ (o' : Ordinal), o' < o → a ≤ derivFamily f o' → ∃ o, derivFamily f o = a
⊢ a ≤ derivFamily f o → ∃ o, derivFamily f o = a

tactic: cases' eq_or_lt_of_le h₁ with h h
state_before: case this.H₃
ι : Type u
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a : Ordinal
ha : ∀ (i : ι), f i a ≤ a
o : Ordinal
l : IsLimit o
IH : ∀ (o' : Ordinal), o' < o → a ≤ derivFamily f o' → ∃ o, derivFamily f o = a
h₁ : a ≤ derivFamily f o
⊢ ∃ o, derivFamily f o = a

tactic: rw [derivFamily_limit _ l, ← not_le, bsup_le_iff, not_ball] at h
state_before: case this.H₃.inr
ι : Type u
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a : Ordinal
ha : ∀ (i : ι), f i a ≤ a
o : Ordinal
l : IsLimit o
IH : ∀ (o' : Ordinal), o' < o → a ≤ derivFamily f o' → ∃ o, derivFamily f o = a
h₁ : a ≤ derivFamily f o
h : a < derivFamily f o
⊢ ∃ o, derivFamily f o = a

tactic: exact
  let ⟨o', h, hl⟩ := h
  IH o' h (le_of_not_le hl)
state_before: case this.H₃.inr
ι : Type u
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a : Ordinal
ha : ∀ (i : ι), f i a ≤ a
o : Ordinal
l : IsLimit o
IH : ∀ (o' : Ordinal), o' < o → a ≤ derivFamily f o' → ∃ o, derivFamily f o = a
h₁ : a ≤ derivFamily f o
h : ∃ x h, ¬derivFamily f x ≤ a
⊢ ∃ o, derivFamily f o = a

tactic: exact ⟨_, h.symm⟩
state_before: case this.H₃.inl
ι : Type u
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a : Ordinal
ha : ∀ (i : ι), f i a ≤ a
o : Ordinal
l : IsLimit o
IH : ∀ (o' : Ordinal), o' < o → a ≤ derivFamily f o' → ∃ o, derivFamily f o = a
h₁ : a ≤ derivFamily f o
h : a = derivFamily f o
⊢ ∃ o, derivFamily f o = a