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

tactic: refine le_of_forall_lt fun c h => ?_
state_before: α : Type u_1
r : α → α → Prop
⊢ Cardinal.univ.{u, v} ≤ univ.{u, v}.cof
state_after: α : Type u_1
r : α → α → Prop
c : Cardinal.{max (u + 1) v}
h : c < Cardinal.univ.{u, v}
⊢ c < univ.{u, v}.cof

tactic: rcases lt_univ'.1 h with ⟨c, rfl⟩
state_before: α : Type u_1
r : α → α → Prop
c : Cardinal.{max (u + 1) v}
h : c < Cardinal.univ.{u, v}
⊢ c < univ.{u, v}.cof
state_after: case intro
α : Type u_1
r : α → α → Prop
c : Cardinal.{u}
h : Cardinal.lift.{max (u + 1) v, u} c < Cardinal.univ.{u, v}
⊢ Cardinal.lift.{max (u + 1) v, u} c < univ.{u, v}.cof

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

tactic: refine lt_of_not_ge fun h => ?_
state_before: case intro.intro.intro
α : Type u_1
r : α → α → Prop
c : Cardinal.{u}
h : Cardinal.lift.{max (u + 1) v, u} c < Cardinal.univ.{u, v}
S : Set Ordinal.{u}
H : Unbounded (fun x x_1 => x < x_1) S
Se : #↑S = (type fun x x_1 => x < x_1).cof
⊢ Cardinal.lift.{u + 1, u} c < #↑S
state_after: case intro.intro.intro
α : Type u_1
r : α → α → Prop
c : Cardinal.{u}
h✝ : Cardinal.lift.{max (u + 1) v, u} c < Cardinal.univ.{u, v}
S : Set Ordinal.{u}
H : Unbounded (fun x x_1 => x < x_1) S
Se : #↑S = (type fun x x_1 => x < x_1).cof
h : Cardinal.lift.{u + 1, u} c ≥ #↑S
⊢ False

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

tactic: refine Quotient.inductionOn a (fun α e => ?_) e
state_before: case intro.intro.intro.intro
α : Type u_1
r : α → α → Prop
c : Cardinal.{u}
h✝ : Cardinal.lift.{max (u + 1) v, u} c < Cardinal.univ.{u, v}
S : Set Ordinal.{u}
H : Unbounded (fun x x_1 => x < x_1) S
Se : #↑S = (type fun x x_1 => x < x_1).cof
h : Cardinal.lift.{u + 1, u} c ≥ #↑S
a : Cardinal.{u}
e : Cardinal.lift.{u + 1, u} a = #↑S
⊢ False
state_after: case intro.intro.intro.intro
α✝ : Type u_1
r : α✝ → α✝ → Prop
c : Cardinal.{u}
h✝ : Cardinal.lift.{max (u + 1) v, u} c < Cardinal.univ.{u, v}
S : Set Ordinal.{u}
H : Unbounded (fun x x_1 => x < x_1) S
Se : #↑S = (type fun x x_1 => x < x_1).cof
h : Cardinal.lift.{u + 1, u} c ≥ #↑S
a : Cardinal.{u}
e✝ : Cardinal.lift.{u + 1, u} a = #↑S
α : Type u
e : Cardinal.lift.{u + 1, u} ⟦α⟧ = #↑S
⊢ False

tactic: cases' Quotient.exact e with f
state_before: case intro.intro.intro.intro
α✝ : Type u_1
r : α✝ → α✝ → Prop
c : Cardinal.{u}
h✝ : Cardinal.lift.{max (u + 1) v, u} c < Cardinal.univ.{u, v}
S : Set Ordinal.{u}
H : Unbounded (fun x x_1 => x < x_1) S
Se : #↑S = (type fun x x_1 => x < x_1).cof
h : Cardinal.lift.{u + 1, u} c ≥ #↑S
a : Cardinal.{u}
e✝ : Cardinal.lift.{u + 1, u} a = #↑S
α : Type u
e : Cardinal.lift.{u + 1, u} ⟦α⟧ = #↑S
⊢ False
state_after: case intro.intro.intro.intro.intro
α✝ : Type u_1
r : α✝ → α✝ → Prop
c : Cardinal.{u}
h✝ : Cardinal.lift.{max (u + 1) v, u} c < Cardinal.univ.{u, v}
S : Set Ordinal.{u}
H : Unbounded (fun x x_1 => x < x_1) S
Se : #↑S = (type fun x x_1 => x < x_1).cof
h : Cardinal.lift.{u + 1, u} c ≥ #↑S
a : Cardinal.{u}
e✝ : Cardinal.lift.{u + 1, u} a = #↑S
α : Type u
e : Cardinal.lift.{u + 1, u} ⟦α⟧ = #↑S
f : ULift.{u + 1, u} α ≃ ↑S
⊢ False

tactic: have f := Equiv.ulift.symm.trans f
state_before: case intro.intro.intro.intro.intro
α✝ : Type u_1
r : α✝ → α✝ → Prop
c : Cardinal.{u}
h✝ : Cardinal.lift.{max (u + 1) v, u} c < Cardinal.univ.{u, v}
S : Set Ordinal.{u}
H : Unbounded (fun x x_1 => x < x_1) S
Se : #↑S = (type fun x x_1 => x < x_1).cof
h : Cardinal.lift.{u + 1, u} c ≥ #↑S
a : Cardinal.{u}
e✝ : Cardinal.lift.{u + 1, u} a = #↑S
α : Type u
e : Cardinal.lift.{u + 1, u} ⟦α⟧ = #↑S
f : ULift.{u + 1, u} α ≃ ↑S
⊢ False
state_after: case intro.intro.intro.intro.intro
α✝ : Type u_1
r : α✝ → α✝ → Prop
c : Cardinal.{u}
h✝ : Cardinal.lift.{max (u + 1) v, u} c < Cardinal.univ.{u, v}
S : Set Ordinal.{u}
H : Unbounded (fun x x_1 => x < x_1) S
Se : #↑S = (type fun x x_1 => x < x_1).cof
h : Cardinal.lift.{u + 1, u} c ≥ #↑S
a : Cardinal.{u}
e✝ : Cardinal.lift.{u + 1, u} a = #↑S
α : Type u
e : Cardinal.lift.{u + 1, u} ⟦α⟧ = #↑S
f✝ : ULift.{u + 1, u} α ≃ ↑S
f : α ≃ ↑S
⊢ False

tactic: let g a := (f a).1
state_before: case intro.intro.intro.intro.intro
α✝ : Type u_1
r : α✝ → α✝ → Prop
c : Cardinal.{u}
h✝ : Cardinal.lift.{max (u + 1) v, u} c < Cardinal.univ.{u, v}
S : Set Ordinal.{u}
H : Unbounded (fun x x_1 => x < x_1) S
Se : #↑S = (type fun x x_1 => x < x_1).cof
h : Cardinal.lift.{u + 1, u} c ≥ #↑S
a : Cardinal.{u}
e✝ : Cardinal.lift.{u + 1, u} a = #↑S
α : Type u
e : Cardinal.lift.{u + 1, u} ⟦α⟧ = #↑S
f✝ : ULift.{u + 1, u} α ≃ ↑S
f : α ≃ ↑S
⊢ False
state_after: case intro.intro.intro.intro.intro
α✝ : Type u_1
r : α✝ → α✝ → Prop
c : Cardinal.{u}
h✝ : Cardinal.lift.{max (u + 1) v, u} c < Cardinal.univ.{u, v}
S : Set Ordinal.{u}
H : Unbounded (fun x x_1 => x < x_1) S
Se : #↑S = (type fun x x_1 => x < x_1).cof
h : Cardinal.lift.{u + 1, u} c ≥ #↑S
a : Cardinal.{u}
e✝ : Cardinal.lift.{u + 1, u} a = #↑S
α : Type u
e : Cardinal.lift.{u + 1, u} ⟦α⟧ = #↑S
f✝ : ULift.{u + 1, u} α ≃ ↑S
f : α ≃ ↑S
g : α → Ordinal.{u} := fun a => ↑(f a)
⊢ False

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

tactic: rcases H o with ⟨b, h, l⟩
state_before: case intro.intro.intro.intro.intro
α✝ : Type u_1
r : α✝ → α✝ → Prop
c : Cardinal.{u}
h✝ : Cardinal.lift.{max (u + 1) v, u} c < Cardinal.univ.{u, v}
S : Set Ordinal.{u}
H : Unbounded (fun x x_1 => x < x_1) S
Se : #↑S = (type fun x x_1 => x < x_1).cof
h : Cardinal.lift.{u + 1, u} c ≥ #↑S
a : Cardinal.{u}
e✝ : Cardinal.lift.{u + 1, u} a = #↑S
α : Type u
e : Cardinal.lift.{u + 1, u} ⟦α⟧ = #↑S
f✝ : ULift.{u + 1, u} α ≃ ↑S
f : α ≃ ↑S
g : α → Ordinal.{u} := fun a => ↑(f a)
o : Ordinal.{u} := succ (sup g)
⊢ False
state_after: case intro.intro.intro.intro.intro.intro.intro
α✝ : Type u_1
r : α✝ → α✝ → Prop
c : Cardinal.{u}
h✝¹ : Cardinal.lift.{max (u + 1) v, u} c < Cardinal.univ.{u, v}
S : Set Ordinal.{u}
H : Unbounded (fun x x_1 => x < x_1) S
Se : #↑S = (type fun x x_1 => x < x_1).cof
h✝ : Cardinal.lift.{u + 1, u} c ≥ #↑S
a : Cardinal.{u}
e✝ : Cardinal.lift.{u + 1, u} a = #↑S
α : Type u
e : Cardinal.lift.{u + 1, u} ⟦α⟧ = #↑S
f✝ : ULift.{u + 1, u} α ≃ ↑S
f : α ≃ ↑S
g : α → Ordinal.{u} := fun a => ↑(f a)
o : Ordinal.{u} := succ (sup g)
b : Ordinal.{u}
h : b ∈ S
l : ¬(fun x x_1 => x < x_1) b o
⊢ False

tactic: refine l (lt_succ_iff.2 ?_)
state_before: case intro.intro.intro.intro.intro.intro.intro
α✝ : Type u_1
r : α✝ → α✝ → Prop
c : Cardinal.{u}
h✝¹ : Cardinal.lift.{max (u + 1) v, u} c < Cardinal.univ.{u, v}
S : Set Ordinal.{u}
H : Unbounded (fun x x_1 => x < x_1) S
Se : #↑S = (type fun x x_1 => x < x_1).cof
h✝ : Cardinal.lift.{u + 1, u} c ≥ #↑S
a : Cardinal.{u}
e✝ : Cardinal.lift.{u + 1, u} a = #↑S
α : Type u
e : Cardinal.lift.{u + 1, u} ⟦α⟧ = #↑S
f✝ : ULift.{u + 1, u} α ≃ ↑S
f : α ≃ ↑S
g : α → Ordinal.{u} := fun a => ↑(f a)
o : Ordinal.{u} := succ (sup g)
b : Ordinal.{u}
h : b ∈ S
l : ¬(fun x x_1 => x < x_1) b o
⊢ False
state_after: case intro.intro.intro.intro.intro.intro.intro
α✝ : Type u_1
r : α✝ → α✝ → Prop
c : Cardinal.{u}
h✝¹ : Cardinal.lift.{max (u + 1) v, u} c < Cardinal.univ.{u, v}
S : Set Ordinal.{u}
H : Unbounded (fun x x_1 => x < x_1) S
Se : #↑S = (type fun x x_1 => x < x_1).cof
h✝ : Cardinal.lift.{u + 1, u} c ≥ #↑S
a : Cardinal.{u}
e✝ : Cardinal.lift.{u + 1, u} a = #↑S
α : Type u
e : Cardinal.lift.{u + 1, u} ⟦α⟧ = #↑S
f✝ : ULift.{u + 1, u} α ≃ ↑S
f : α ≃ ↑S
g : α → Ordinal.{u} := fun a => ↑(f a)
o : Ordinal.{u} := succ (sup g)
b : Ordinal.{u}
h : b ∈ S
l : ¬(fun x x_1 => x < x_1) b o
⊢ b ≤ sup g

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

tactic: apply le_sup
state_before: case intro.intro.intro.intro.intro.intro.intro
α✝ : Type u_1
r : α✝ → α✝ → Prop
c : Cardinal.{u}
h✝¹ : Cardinal.lift.{max (u + 1) v, u} c < Cardinal.univ.{u, v}
S : Set Ordinal.{u}
H : Unbounded (fun x x_1 => x < x_1) S
Se : #↑S = (type fun x x_1 => x < x_1).cof
h✝ : Cardinal.lift.{u + 1, u} c ≥ #↑S
a : Cardinal.{u}
e✝ : Cardinal.lift.{u + 1, u} a = #↑S
α : Type u
e : Cardinal.lift.{u + 1, u} ⟦α⟧ = #↑S
f✝ : ULift.{u + 1, u} α ≃ ↑S
f : α ≃ ↑S
g : α → Ordinal.{u} := fun a => ↑(f a)
o : Ordinal.{u} := succ (sup g)
b : Ordinal.{u}
h : b ∈ S
l : ¬(fun x x_1 => x < x_1) b o
⊢ g (f.symm ⟨b, h⟩) ≤ sup g
state_after: no goals

tactic: simp [g]
state_before: α✝ : Type u_1
r : α✝ → α✝ → Prop
c : Cardinal.{u}
h✝¹ : Cardinal.lift.{max (u + 1) v, u} c < Cardinal.univ.{u, v}
S : Set Ordinal.{u}
H : Unbounded (fun x x_1 => x < x_1) S
Se : #↑S = (type fun x x_1 => x < x_1).cof
h✝ : Cardinal.lift.{u + 1, u} c ≥ #↑S
a : Cardinal.{u}
e✝ : Cardinal.lift.{u + 1, u} a = #↑S
α : Type u
e : Cardinal.lift.{u + 1, u} ⟦α⟧ = #↑S
f✝ : ULift.{u + 1, u} α ≃ ↑S
f : α ≃ ↑S
g : α → Ordinal.{u} := fun a => ↑(f a)
o : Ordinal.{u} := succ (sup g)
b : Ordinal.{u}
h : b ∈ S
l : ¬(fun x x_1 => x < x_1) b o
⊢ g (f.symm ⟨b, h⟩) = b
state_after: no goals