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

tactic: cases' Quotient.exists_rep (@succ Cardinal _ _ c) with α αe
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: simp 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
α✝ : Type u_1
r : α✝ → α✝ → Prop
c : Cardinal.{u}
h : ℵ₀ ≤ c
α : Type u
αe : #α = succ c
⊢ c < (succ c).ord.cof

tactic: rcases ord_eq α with ⟨r, wo, re⟩
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: 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
⊢ 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: 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 : (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: rcases cof_eq' r this with ⟨S, H, Se⟩
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: 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 < (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: 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 < #↑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: 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
⊢ 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: refine le_trans ?_ (sum_le_sum (fun (x : S) => card (typein r (x : α))) _ fun i => ?_)
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: simp only [← card_typein, ← mk_sigma]
state_before: 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
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
⊢ #α ≤ #((i : ↑S) × { y // r y ↑i })

tactic: exact
  ⟨Embedding.ofSurjective (fun x => x.2.1) fun a =>
      let ⟨b, h, ab⟩ := H a
      ⟨⟨⟨_, h⟩, _, ab⟩, rfl⟩⟩
state_before: 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
⊢ #α ≤ #((i : ↑S) × { y // r y ↑i })
state_after: no goals

tactic: rw [← lt_succ_iff, ← lt_ord, ← αe, re]
state_before: 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
state_after: 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
⊢ typein r ↑i < type r

tactic: apply typein_lt_type
state_before: 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
⊢ typein r ↑i < type r
state_after: no goals