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

tactic: rcases zero_or_succ_or_limit o with (rfl | ⟨o, rfl⟩ | l)
state_before: α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
⊢ ℵ₀ ≤ o.cof ↔ o.IsLimit
state_after: case inl
α : Type u_1
r : α → α → Prop
⊢ ℵ₀ ≤ cof 0 ↔ IsLimit 0

case inr.inl.intro
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
⊢ ℵ₀ ≤ (succ o).cof ↔ (succ o).IsLimit

case inr.inr
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
l : o.IsLimit
⊢ ℵ₀ ≤ o.cof ↔ o.IsLimit

tactic: simp [not_zero_isLimit, Cardinal.aleph0_ne_zero]
state_before: case inl
α : Type u_1
r : α → α → Prop
⊢ ℵ₀ ≤ cof 0 ↔ IsLimit 0
state_after: no goals

tactic: simp [not_succ_isLimit, Cardinal.one_lt_aleph0]
state_before: case inr.inl.intro
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
⊢ ℵ₀ ≤ (succ o).cof ↔ (succ o).IsLimit
state_after: no goals

tactic: simp [l]
state_before: case inr.inr
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
l : o.IsLimit
⊢ ℵ₀ ≤ o.cof ↔ o.IsLimit
state_after: case inr.inr
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
l : o.IsLimit
⊢ ℵ₀ ≤ o.cof

tactic: refine le_of_not_lt fun h => ?_
state_before: case inr.inr
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
l : o.IsLimit
⊢ ℵ₀ ≤ o.cof
state_after: case inr.inr
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
l : o.IsLimit
h : o.cof < ℵ₀
⊢ False

tactic: cases' Cardinal.lt_aleph0.1 h with n e
state_before: case inr.inr
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
l : o.IsLimit
h : o.cof < ℵ₀
⊢ False
state_after: case inr.inr.intro
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
l : o.IsLimit
h : o.cof < ℵ₀
n : ℕ
e : o.cof = ↑n
⊢ False

tactic: have := cof_cof o
state_before: case inr.inr.intro
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
l : o.IsLimit
h : o.cof < ℵ₀
n : ℕ
e : o.cof = ↑n
⊢ False
state_after: case inr.inr.intro
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
l : o.IsLimit
h : o.cof < ℵ₀
n : ℕ
e : o.cof = ↑n
this : o.cof.ord.cof = o.cof
⊢ False

tactic: rw [e, ord_nat] at this
state_before: case inr.inr.intro
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
l : o.IsLimit
h : o.cof < ℵ₀
n : ℕ
e : o.cof = ↑n
this : o.cof.ord.cof = o.cof
⊢ False
state_after: case inr.inr.intro
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
l : o.IsLimit
h : o.cof < ℵ₀
n : ℕ
e : o.cof = ↑n
this : (↑n).cof = ↑n
⊢ False

tactic: cases n
state_before: case inr.inr.intro
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
l : o.IsLimit
h : o.cof < ℵ₀
n : ℕ
e : o.cof = ↑n
this : (↑n).cof = ↑n
⊢ False
state_after: case inr.inr.intro.zero
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
l : o.IsLimit
h : o.cof < ℵ₀
e : o.cof = ↑0
this : (↑0).cof = ↑0
⊢ False

case inr.inr.intro.succ
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
l : o.IsLimit
h : o.cof < ℵ₀
n✝ : ℕ
e : o.cof = ↑(n✝ + 1)
this : (↑(n✝ + 1)).cof = ↑(n✝ + 1)
⊢ False

tactic: simp at e
state_before: case inr.inr.intro.zero
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
l : o.IsLimit
h : o.cof < ℵ₀
e : o.cof = ↑0
this : (↑0).cof = ↑0
⊢ False
state_after: case inr.inr.intro.zero
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
l : o.IsLimit
h : o.cof < ℵ₀
this : (↑0).cof = ↑0
e : o = 0
⊢ False

tactic: simp [e, not_zero_isLimit] at l
state_before: case inr.inr.intro.zero
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
l : o.IsLimit
h : o.cof < ℵ₀
this : (↑0).cof = ↑0
e : o = 0
⊢ False
state_after: no goals

tactic: rw [natCast_succ, cof_succ] at this
state_before: case inr.inr.intro.succ
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
l : o.IsLimit
h : o.cof < ℵ₀
n✝ : ℕ
e : o.cof = ↑(n✝ + 1)
this : (↑(n✝ + 1)).cof = ↑(n✝ + 1)
⊢ False
state_after: case inr.inr.intro.succ
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
l : o.IsLimit
h : o.cof < ℵ₀
n✝ : ℕ
e : o.cof = ↑(n✝ + 1)
this : 1 = ↑(n✝ + 1)
⊢ False

tactic: rw [← this, cof_eq_one_iff_is_succ] at e
state_before: case inr.inr.intro.succ
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
l : o.IsLimit
h : o.cof < ℵ₀
n✝ : ℕ
e : o.cof = ↑(n✝ + 1)
this : 1 = ↑(n✝ + 1)
⊢ False
state_after: case inr.inr.intro.succ
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
l : o.IsLimit
h : o.cof < ℵ₀
n✝ : ℕ
e : ∃ a, o = succ a
this : 1 = ↑(n✝ + 1)
⊢ False

tactic: rcases e with ⟨a, rfl⟩
state_before: case inr.inr.intro.succ
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
l : o.IsLimit
h : o.cof < ℵ₀
n✝ : ℕ
e : ∃ a, o = succ a
this : 1 = ↑(n✝ + 1)
⊢ False
state_after: case inr.inr.intro.succ.intro
α : Type u_1
r : α → α → Prop
n✝ : ℕ
this : 1 = ↑(n✝ + 1)
a : Ordinal.{u_2}
l : (succ a).IsLimit
h : (succ a).cof < ℵ₀
⊢ False

tactic: exact not_succ_isLimit _ l
state_before: case inr.inr.intro.succ.intro
α : Type u_1
r : α → α → Prop
n✝ : ℕ
this : 1 = ↑(n✝ + 1)
a : Ordinal.{u_2}
l : (succ a).IsLimit
h : (succ a).cof < ℵ₀
⊢ False
state_after: no goals