Theorem: Cardinal.isRegular_succ
File: Mathlib/SetTheory/Cardinal/Cofinality.lean

Proof steps:
state_before: α : Type u_1
r : α → α → Prop
c : Cardinal.{u}
h : ℵ₀ ≤ c
⊢ c < (succ c).ord.cof
state_after: case intro
α✝ : Type u_1
r : α✝ → α✝ → Prop
c : Cardinal.{u}
h : ℵ₀ ≤ c
α : Type u
αe : ⟦α⟧ = succ c
⊢ c < (succ c).ord.cof
tactic: cases' Quotient.exists_rep (@succ Cardinal _ _ c) with α αe
state_before: case intro
α✝ : Type u_1
r : α✝ → α✝ → Prop
c : Cardinal.{u}
h : ℵ₀ ≤ c
α : Type u
αe : ⟦α⟧ = succ c
⊢ c < (succ c).ord.cof
state_after: case intro
α✝ : Type u_1
r : α✝ → α✝ → Prop
c : Cardinal.{u}
h : ℵ₀ ≤ c
α : Type u
αe : #α = succ c
⊢ c < (succ c).ord.cof
tactic: simp only [mk'_def] at αe
state_before: case intro
α✝ : Type u_1
r : α✝ → α✝ → Prop
c : Cardinal.{u}
h : ℵ₀ ≤ c
α : Type u
αe : #α = succ c
⊢ c < (succ c).ord.cof
state_after: case intro.intro.intro
α✝ : Type u_1
r✝ : α✝ → α✝ → Prop
c : Cardinal.{u}
h : ℵ₀ ≤ c
α : Type u
αe : #α = succ c
r : α → α → Prop
wo : IsWellOrder α r
re : (#α).ord = type r
⊢ c < (succ c).ord.cof
tactic: rcases ord_eq α with ⟨r, wo, re⟩
state_before: case intro.intro.intro
α✝ : Type u_1
r✝ : α✝ → α✝ → Prop
c : Cardinal.{u}
h : ℵ₀ ≤ c
α : Type u
αe : #α = succ c
r : α → α → Prop
wo : IsWellOrder α r
re : (#α).ord = type r
⊢ c < (succ c).ord.cof
state_after: case intro.intro.intro
α✝ : Type u_1
r✝ : α✝ → α✝ → Prop
c : Cardinal.{u}
h : ℵ₀ ≤ c
α : Type u
αe : #α = succ c
r : α → α → Prop
wo : IsWellOrder α r
re : (#α).ord = type r
this : (succ c).ord.IsLimit
⊢ c < (succ c).ord.cof
tactic: have := ord_isLimit (h.trans (le_succ _))
state_before: case intro.intro.intro
α✝ : Type u_1
r✝ : α✝ → α✝ → Prop
c : Cardinal.{u}
h : ℵ₀ ≤ c
α : Type u
αe : #α = succ c
r : α → α → Prop
wo : IsWellOrder α r
re : (#α).ord = type r
this : (succ c).ord.IsLimit
⊢ c < (succ c).ord.cof
state_after: case intro.intro.intro
α✝ : Type u_1
r✝ : α✝ → α✝ → Prop
c : Cardinal.{u}
h : ℵ₀ ≤ c
α : Type u
αe : #α = succ c
r : α → α → Prop
wo : IsWellOrder α r
re : (#α).ord = type r
this : (type r).IsLimit
⊢ c < (type r).cof
tactic: rw [← αe, re] at this ⊢
state_before: case intro.intro.intro
α✝ : Type u_1
r✝ : α✝ → α✝ → Prop
c : Cardinal.{u}
h : ℵ₀ ≤ c
α : Type u
αe : #α = succ c
r : α → α → Prop
wo : IsWellOrder α r
re : (#α).ord = type r
this : (type r).IsLimit
⊢ c < (type r).cof
state_after: case intro.intro.intro.intro.intro
α✝ : Type u_1
r✝ : α✝ → α✝ → Prop
c : Cardinal.{u}
h : ℵ₀ ≤ c
α : Type u
αe : #α = succ c
r : α → α → Prop
wo : IsWellOrder α r
re : (#α).ord = type r
this : (type r).IsLimit
S : Set α
H : ∀ (a : α), ∃ b ∈ S, r a b
Se : #↑S = (type r).cof
⊢ c < (type r).cof
tactic: rcases cof_eq' r this with ⟨S, H, Se⟩
state_before: case intro.intro.intro.intro.intro
α✝ : Type u_1
r✝ : α✝ → α✝ → Prop
c : Cardinal.{u}
h : ℵ₀ ≤ c
α : Type u
αe : #α = succ c
r : α → α → Prop
wo : IsWellOrder α r
re : (#α).ord = type r
this : (type r).IsLimit
S : Set α
H : ∀ (a : α), ∃ b ∈ S, r a b
Se : #↑S = (type r).cof
⊢ c < (type r).cof
state_after: case intro.intro.intro.intro.intro
α✝ : Type u_1
r✝ : α✝ → α✝ → Prop
c : Cardinal.{u}
h : ℵ₀ ≤ c
α : Type u
αe : #α = succ c
r : α → α → Prop
wo : IsWellOrder α r
re : (#α).ord = type r
this : (type r).IsLimit
S : Set α
H : ∀ (a : α), ∃ b ∈ S, r a b
Se : #↑S = (type r).cof
⊢ c < #↑S
tactic: rw [← Se]
state_before: case intro.intro.intro.intro.intro
α✝ : Type u_1
r✝ : α✝ → α✝ → Prop
c : Cardinal.{u}
h : ℵ₀ ≤ c
α : Type u
αe : #α = succ c
r : α → α → Prop
wo : IsWellOrder α r
re : (#α).ord = type r
this : (type r).IsLimit
S : Set α
H : ∀ (a : α), ∃ b ∈ S, r a b
Se : #↑S = (type r).cof
⊢ c < #↑S
state_after: case intro.intro.intro.intro.intro
α✝ : Type u_1
r✝ : α✝ → α✝ → Prop
c : Cardinal.{u}
h : ℵ₀ ≤ c
α : Type u
αe : #α = succ c
r : α → α → Prop
wo : IsWellOrder α r
re : (#α).ord = type r
this : (type r).IsLimit
S : Set α
H : ∀ (a : α), ∃ b ∈ S, r a b
Se : #↑S = (type r).cof
⊢ c * c < #↑S * c
tactic: apply lt_imp_lt_of_le_imp_le fun h => mul_le_mul_right' h c
state_before: case intro.intro.intro.intro.intro
α✝ : Type u_1
r✝ : α✝ → α✝ → Prop
c : Cardinal.{u}
h : ℵ₀ ≤ c
α : Type u
αe : #α = succ c
r : α → α → Prop
wo : IsWellOrder α r
re : (#α).ord = type r
this : (type r).IsLimit
S : Set α
H : ∀ (a : α), ∃ b ∈ S, r a b
Se : #↑S = (type r).cof
⊢ c * c < #↑S * c
state_after: case intro.intro.intro.intro.intro
α✝ : Type u_1
r✝ : α✝ → α✝ → Prop
c : Cardinal.{u}
h : ℵ₀ ≤ c
α : Type u
αe : #α = succ c
r : α → α → Prop
wo : IsWellOrder α r
re : (#α).ord = type r
this : (type r).IsLimit
S : Set α
H : ∀ (a : α), ∃ b ∈ S, r a b
Se : #↑S = (type r).cof
⊢ #α ≤ sum fun x => c
tactic: rw [mul_eq_self h, ← succ_le_iff, ← αe, ← sum_const']
state_before: case intro.intro.intro.intro.intro
α✝ : Type u_1
r✝ : α✝ → α✝ → Prop
c : Cardinal.{u}
h : ℵ₀ ≤ c
α : Type u
αe : #α = succ c
r : α → α → Prop
wo : IsWellOrder α r
re : (#α).ord = type r
this : (type r).IsLimit
S : Set α
H : ∀ (a : α), ∃ b ∈ S, r a b
Se : #↑S = (type r).cof
⊢ #α ≤ sum fun x => c
state_after: case intro.intro.intro.intro.intro.refine_1
α✝ : Type u_1
r✝ : α✝ → α✝ → Prop
c : Cardinal.{u}
h : ℵ₀ ≤ c
α : Type u
αe : #α = succ c
r : α → α → Prop
wo : IsWellOrder α r
re : (#α).ord = type r
this : (type r).IsLimit
S : Set α
H : ∀ (a : α), ∃ b ∈ S, r a b
Se : #↑S = (type r).cof
⊢ #α ≤ sum fun x => (typein r ↑x).card

case intro.intro.intro.intro.intro.refine_2
α✝ : Type u_1
r✝ : α✝ → α✝ → Prop
c : Cardinal.{u}
h : ℵ₀ ≤ c
α : Type u
αe : #α = succ c
r : α → α → Prop
wo : IsWellOrder α r
re : (#α).ord = type r
this : (type r).IsLimit
S : Set α
H : ∀ (a : α), ∃ b ∈ S, r a b
Se : #↑S = (type r).cof
i : ↑S
⊢ (fun x => (typein r ↑x).card) i ≤ c
tactic: refine le_trans ?_ (sum_le_sum (fun (x : S) => card (typein r (x : α))) _ fun i => ?_)