Theorem: Ordinal.cof_univ
File: Mathlib/SetTheory/Cardinal/Cofinality.lean

tactic: refine' le_of_forall_lt fun c h => _
state_before: α : Type ?u.103379
r : α → α → Prop
⊢ Cardinal.univ ≤ cof univ

tactic: rcases lt_univ'.1 h with ⟨c, rfl⟩
state_before: α : Type ?u.103379
r : α → α → Prop
c : Cardinal
h : c < Cardinal.univ
⊢ c < cof univ

tactic: rw [univ, ← lift_cof, ← Cardinal.lift_lift.{u+1, v, u}, Cardinal.lift_lt, ← Se]
state_before: case intro.intro.intro
α : Type ?u.103379
r : α → α → Prop
c : Cardinal
h : Cardinal.lift c < Cardinal.univ
S : Set Ordinal
H : Unbounded (fun x x_1 => x < x_1) S
Se : (#↑S) = cof (type fun x x_1 => x < x_1)
⊢ Cardinal.lift c < cof univ

tactic: refine' lt_of_not_ge fun h => _
state_before: case intro.intro.intro
α : Type ?u.103379
r : α → α → Prop
c : Cardinal
h : Cardinal.lift c < Cardinal.univ
S : Set Ordinal
H : Unbounded (fun x x_1 => x < x_1) S
Se : (#↑S) = cof (type fun x x_1 => x < x_1)
⊢ Cardinal.lift c < (#↑S)

tactic: cases' Cardinal.lift_down h with a e
state_before: case intro.intro.intro
α : Type ?u.103379
r : α → α → Prop
c : Cardinal
h✝ : Cardinal.lift c < Cardinal.univ
S : Set Ordinal
H : Unbounded (fun x x_1 => x < x_1) S
Se : (#↑S) = cof (type fun x x_1 => x < x_1)
h : Cardinal.lift c ≥ (#↑S)
⊢ False

tactic: refine' Quotient.inductionOn a (fun α e => _) e
state_before: case intro.intro.intro.intro
α : Type ?u.103379
r : α → α → Prop
c : Cardinal
h✝ : Cardinal.lift c < Cardinal.univ
S : Set Ordinal
H : Unbounded (fun x x_1 => x < x_1) S
Se : (#↑S) = cof (type fun x x_1 => x < x_1)
h : Cardinal.lift c ≥ (#↑S)
a : Cardinal
e : Cardinal.lift a = (#↑S)
⊢ False

tactic: cases' Quotient.exact e with f
state_before: case intro.intro.intro.intro
α✝ : Type ?u.103379
r : α✝ → α✝ → Prop
c : Cardinal
h✝ : Cardinal.lift c < Cardinal.univ
S : Set Ordinal
H : Unbounded (fun x x_1 => x < x_1) S
Se : (#↑S) = cof (type fun x x_1 => x < x_1)
h : Cardinal.lift c ≥ (#↑S)
a : Cardinal
e✝ : Cardinal.lift a = (#↑S)
α : Type u
e : Cardinal.lift (Quotient.mk Cardinal.isEquivalent α) = (#↑S)
⊢ False

tactic: have f := Equiv.ulift.symm.trans f
state_before: case intro.intro.intro.intro.intro
α✝ : Type ?u.103379
r : α✝ → α✝ → Prop
c : Cardinal
h✝ : Cardinal.lift c < Cardinal.univ
S : Set Ordinal
H : Unbounded (fun x x_1 => x < x_1) S
Se : (#↑S) = cof (type fun x x_1 => x < x_1)
h : Cardinal.lift c ≥ (#↑S)
a : Cardinal
e✝ : Cardinal.lift a = (#↑S)
α : Type u
e : Cardinal.lift (Quotient.mk Cardinal.isEquivalent α) = (#↑S)
f : ULift α ≃ ↑S
⊢ False

tactic: let g a := (f a).1
state_before: case intro.intro.intro.intro.intro
α✝ : Type ?u.103379
r : α✝ → α✝ → Prop
c : Cardinal
h✝ : Cardinal.lift c < Cardinal.univ
S : Set Ordinal
H : Unbounded (fun x x_1 => x < x_1) S
Se : (#↑S) = cof (type fun x x_1 => x < x_1)
h : Cardinal.lift c ≥ (#↑S)
a : Cardinal
e✝ : Cardinal.lift a = (#↑S)
α : Type u
e : Cardinal.lift (Quotient.mk Cardinal.isEquivalent α) = (#↑S)
f✝ : ULift α ≃ ↑S
f : α ≃ ↑S
⊢ False

tactic: let o := succ (sup.{u, u} g)
state_before: case intro.intro.intro.intro.intro
α✝ : Type ?u.103379
r : α✝ → α✝ → Prop
c : Cardinal
h✝ : Cardinal.lift c < Cardinal.univ
S : Set Ordinal
H : Unbounded (fun x x_1 => x < x_1) S
Se : (#↑S) = cof (type fun x x_1 => x < x_1)
h : Cardinal.lift c ≥ (#↑S)
a : Cardinal
e✝ : Cardinal.lift a = (#↑S)
α : Type u
e : Cardinal.lift (Quotient.mk Cardinal.isEquivalent α) = (#↑S)
f✝ : ULift α ≃ ↑S
f : α ≃ ↑S
g : α → Ordinal := fun a => ↑(↑f a)
⊢ False

tactic: rcases H o with ⟨b, h, l⟩
state_before: case intro.intro.intro.intro.intro
α✝ : Type ?u.103379
r : α✝ → α✝ → Prop
c : Cardinal
h✝ : Cardinal.lift c < Cardinal.univ
S : Set Ordinal
H : Unbounded (fun x x_1 => x < x_1) S
Se : (#↑S) = cof (type fun x x_1 => x < x_1)
h : Cardinal.lift c ≥ (#↑S)
a : Cardinal
e✝ : Cardinal.lift a = (#↑S)
α : Type u
e : Cardinal.lift (Quotient.mk Cardinal.isEquivalent α) = (#↑S)
f✝ : ULift α ≃ ↑S
f : α ≃ ↑S
g : α → Ordinal := fun a => ↑(↑f a)
o : Ordinal := succ (sup g)
⊢ False

tactic: refine' l (lt_succ_iff.2 _)
state_before: case intro.intro.intro.intro.intro.intro.intro
α✝ : Type ?u.103379
r : α✝ → α✝ → Prop
c : Cardinal
h✝¹ : Cardinal.lift c < Cardinal.univ
S : Set Ordinal
H : Unbounded (fun x x_1 => x < x_1) S
Se : (#↑S) = cof (type fun x x_1 => x < x_1)
h✝ : Cardinal.lift c ≥ (#↑S)
a : Cardinal
e✝ : Cardinal.lift a = (#↑S)
α : Type u
e : Cardinal.lift (Quotient.mk Cardinal.isEquivalent α) = (#↑S)
f✝ : ULift α ≃ ↑S
f : α ≃ ↑S
g : α → Ordinal := fun a => ↑(↑f a)
o : Ordinal := succ (sup g)
b : Ordinal
h : b ∈ S
l : ¬(fun x x_1 => x < x_1) b o
⊢ False

tactic: rw [← show g (f.symm ⟨b, h⟩) = b by simp]
state_before: case intro.intro.intro.intro.intro.intro.intro
α✝ : Type ?u.103379
r : α✝ → α✝ → Prop
c : Cardinal
h✝¹ : Cardinal.lift c < Cardinal.univ
S : Set Ordinal
H : Unbounded (fun x x_1 => x < x_1) S
Se : (#↑S) = cof (type fun x x_1 => x < x_1)
h✝ : Cardinal.lift c ≥ (#↑S)
a : Cardinal
e✝ : Cardinal.lift a = (#↑S)
α : Type u
e : Cardinal.lift (Quotient.mk Cardinal.isEquivalent α) = (#↑S)
f✝ : ULift α ≃ ↑S
f : α ≃ ↑S
g : α → Ordinal := fun a => ↑(↑f a)
o : Ordinal := succ (sup g)
b : Ordinal
h : b ∈ S
l : ¬(fun x x_1 => x < x_1) b o
⊢ b ≤ sup g

tactic: apply le_sup
state_before: case intro.intro.intro.intro.intro.intro.intro
α✝ : Type ?u.103379
r : α✝ → α✝ → Prop
c : Cardinal
h✝¹ : Cardinal.lift c < Cardinal.univ
S : Set Ordinal
H : Unbounded (fun x x_1 => x < x_1) S
Se : (#↑S) = cof (type fun x x_1 => x < x_1)
h✝ : Cardinal.lift c ≥ (#↑S)
a : Cardinal
e✝ : Cardinal.lift a = (#↑S)
α : Type u
e : Cardinal.lift (Quotient.mk Cardinal.isEquivalent α) = (#↑S)
f✝ : ULift α ≃ ↑S
f : α ≃ ↑S
g : α → Ordinal := fun a => ↑(↑f a)
o : Ordinal := succ (sup g)
b : Ordinal
h : b ∈ S
l : ¬(fun x x_1 => x < x_1) b o
⊢ g (↑f.symm { val := b, property := h }) ≤ sup g

tactic: simp
state_before: α✝ : Type ?u.103379
r : α✝ → α✝ → Prop
c : Cardinal
h✝¹ : Cardinal.lift c < Cardinal.univ
S : Set Ordinal
H : Unbounded (fun x x_1 => x < x_1) S
Se : (#↑S) = cof (type fun x x_1 => x < x_1)
h✝ : Cardinal.lift c ≥ (#↑S)
a : Cardinal
e✝ : Cardinal.lift a = (#↑S)
α : Type u
e : Cardinal.lift (Quotient.mk Cardinal.isEquivalent α) = (#↑S)
f✝ : ULift α ≃ ↑S
f : α ≃ ↑S
g : α → Ordinal := fun a => ↑(↑f a)
o : Ordinal := succ (sup g)
b : Ordinal
h : b ∈ S
l : ¬(fun x x_1 => x < x_1) b o
⊢ g (↑f.symm { val := b, property := h }) = b