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

Proof steps:
state_before: α : Type u_1
r✝ r : α → α → Prop
inst✝ : IsWellOrder α r
⊢ ∃ S, Unbounded r S ∧ type (Subrel r S) = (type r).cof.ord
state_after: α : Type u_1
r✝ r : α → α → Prop
inst✝ : IsWellOrder α r
S : Set α
hS : Unbounded r S
e : #↑S = (type r).cof
⊢ ∃ S, Unbounded r S ∧ type (Subrel r S) = (type r).cof.ord
tactic: let ⟨S, hS, e⟩ := cof_eq r
state_before: α : Type u_1
r✝ r : α → α → Prop
inst✝ : IsWellOrder α r
S : Set α
hS : Unbounded r S
e : #↑S = (type r).cof
⊢ ∃ S, Unbounded r S ∧ type (Subrel r S) = (type r).cof.ord
state_after: α : Type u_1
r✝ r : α → α → Prop
inst✝ : IsWellOrder α r
S : Set α
hS : Unbounded r S
e : #↑S = (type r).cof
s : ↑S → ↑S → Prop
w✝ : IsWellOrder (↑S) s
e' : (#↑S).ord = type s
⊢ ∃ S, Unbounded r S ∧ type (Subrel r S) = (type r).cof.ord
tactic: let ⟨s, _, e'⟩ := Cardinal.ord_eq S
state_before: α : Type u_1
r✝ r : α → α → Prop
inst✝ : IsWellOrder α r
S : Set α
hS : Unbounded r S
e : #↑S = (type r).cof
s : ↑S → ↑S → Prop
w✝ : IsWellOrder (↑S) s
e' : (#↑S).ord = type s
⊢ ∃ S, Unbounded r S ∧ type (Subrel r S) = (type r).cof.ord
state_after: α : Type u_1
r✝ r : α → α → Prop
inst✝ : IsWellOrder α r
S : Set α
hS : Unbounded r S
e : #↑S = (type r).cof
s : ↑S → ↑S → Prop
w✝ : IsWellOrder (↑S) s
e' : (#↑S).ord = type s
T : Set α := {a | ∃ (aS : a ∈ S), ∀ (b : ↑S), s b ⟨a, aS⟩ → r (↑b) a}
⊢ ∃ S, Unbounded r S ∧ type (Subrel r S) = (type r).cof.ord
tactic: let T : Set α := { a | ∃ aS : a ∈ S, ∀ b : S, s b ⟨_, aS⟩ → r b a }
state_before: α : Type u_1
r✝ r : α → α → Prop
inst✝ : IsWellOrder α r
S : Set α
hS : Unbounded r S
e : #↑S = (type r).cof
s : ↑S → ↑S → Prop
w✝ : IsWellOrder (↑S) s
e' : (#↑S).ord = type s
T : Set α := {a | ∃ (aS : a ∈ S), ∀ (b : ↑S), s b ⟨a, aS⟩ → r (↑b) a}
⊢ Unbounded r T
state_after: α : Type u_1
r✝ r : α → α → Prop
inst✝ : IsWellOrder α r
S : Set α
hS : Unbounded r S
e : #↑S = (type r).cof
s : ↑S → ↑S → Prop
w✝ : IsWellOrder (↑S) s
e' : (#↑S).ord = type s
T : Set α := {a | ∃ (aS : a ∈ S), ∀ (b : ↑S), s b ⟨a, aS⟩ → r (↑b) a}
a : α
⊢ ∃ b ∈ T, ¬r b a
tactic: intro a
state_before: α : Type u_1
r✝ r : α → α → Prop
inst✝ : IsWellOrder α r
S : Set α
hS : Unbounded r S
e : #↑S = (type r).cof
s : ↑S → ↑S → Prop
w✝ : IsWellOrder (↑S) s
e' : (#↑S).ord = type s
T : Set α := {a | ∃ (aS : a ∈ S), ∀ (b : ↑S), s b ⟨a, aS⟩ → r (↑b) a}
a : α
⊢ ∃ b ∈ T, ¬r b a
state_after: α : Type u_1
r✝ r : α → α → Prop
inst✝ : IsWellOrder α r
S : Set α
hS : Unbounded r S
e : #↑S = (type r).cof
s : ↑S → ↑S → Prop
w✝ : IsWellOrder (↑S) s
e' : (#↑S).ord = type s
T : Set α := {a | ∃ (aS : a ∈ S), ∀ (b : ↑S), s b ⟨a, aS⟩ → r (↑b) a}
a : α
this : {b | ¬r (↑b) a}.Nonempty
⊢ ∃ b ∈ T, ¬r b a
tactic: have : { b : S | ¬r b a }.Nonempty :=
    let ⟨b, bS, ba⟩ := hS a
    ⟨⟨b, bS⟩, ba⟩
state_before: α : Type u_1
r✝ r : α → α → Prop
inst✝ : IsWellOrder α r
S : Set α
hS : Unbounded r S
e : #↑S = (type r).cof
s : ↑S → ↑S → Prop
w✝ : IsWellOrder (↑S) s
e' : (#↑S).ord = type s
T : Set α := {a | ∃ (aS : a ∈ S), ∀ (b : ↑S), s b ⟨a, aS⟩ → r (↑b) a}
a : α
this : {b | ¬r (↑b) a}.Nonempty
⊢ ∃ b ∈ T, ¬r b a
state_after: α : Type u_1
r✝ r : α → α → Prop
inst✝ : IsWellOrder α r
S : Set α
hS : Unbounded r S
e : #↑S = (type r).cof
s : ↑S → ↑S → Prop
w✝ : IsWellOrder (↑S) s
e' : (#↑S).ord = type s
T : Set α := {a | ∃ (aS : a ∈ S), ∀ (b : ↑S), s b ⟨a, aS⟩ → r (↑b) a}
a : α
this : {b | ¬r (↑b) a}.Nonempty
b : ↑S := ⋯.min {b | ¬r (↑b) a} this
⊢ ∃ b ∈ T, ¬r b a
tactic: let b := (IsWellFounded.wf : WellFounded s).min _ this
state_before: α : Type u_1
r✝ r : α → α → Prop
inst✝ : IsWellOrder α r
S : Set α
hS : Unbounded r S
e : #↑S = (type r).cof
s : ↑S → ↑S → Prop
w✝ : IsWellOrder (↑S) s
e' : (#↑S).ord = type s
T : Set α := {a | ∃ (aS : a ∈ S), ∀ (b : ↑S), s b ⟨a, aS⟩ → r (↑b) a}
a : α
this : {b | ¬r (↑b) a}.Nonempty
b : ↑S := ⋯.min {b | ¬r (↑b) a} this
⊢ ∃ b ∈ T, ¬r b a
state_after: α : Type u_1
r✝ r : α → α → Prop
inst✝ : IsWellOrder α r
S : Set α
hS : Unbounded r S
e : #↑S = (type r).cof
s : ↑S → ↑S → Prop
w✝ : IsWellOrder (↑S) s
e' : (#↑S).ord = type s
T : Set α := {a | ∃ (aS : a ∈ S), ∀ (b : ↑S), s b ⟨a, aS⟩ → r (↑b) a}
a : α
this : {b | ¬r (↑b) a}.Nonempty
b : ↑S := ⋯.min {b | ¬r (↑b) a} this
ba : ¬r (↑b) a
⊢ ∃ b ∈ T, ¬r b a
tactic: have ba : ¬r b a := IsWellFounded.wf.min_mem _ this
state_before: α : Type u_1
r✝ r : α → α → Prop
inst✝ : IsWellOrder α r
S : Set α
hS : Unbounded r S
e : #↑S = (type r).cof
s : ↑S → ↑S → Prop
w✝ : IsWellOrder (↑S) s
e' : (#↑S).ord = type s
T : Set α := {a | ∃ (aS : a ∈ S), ∀ (b : ↑S), s b ⟨a, aS⟩ → r (↑b) a}
a : α
this : {b | ¬r (↑b) a}.Nonempty
b : ↑S := ⋯.min {b | ¬r (↑b) a} this
ba : ¬r (↑b) a
⊢ ∃ b ∈ T, ¬r b a
state_after: α : Type u_1
r✝ r : α → α → Prop
inst✝ : IsWellOrder α r
S : Set α
hS : Unbounded r S
e : #↑S = (type r).cof
s : ↑S → ↑S → Prop
w✝ : IsWellOrder (↑S) s
e' : (#↑S).ord = type s
T : Set α := {a | ∃ (aS : a ∈ S), ∀ (b : ↑S), s b ⟨a, aS⟩ → r (↑b) a}
a : α
this : {b | ¬r (↑b) a}.Nonempty
b : ↑S := ⋯.min {b | ¬r (↑b) a} this
ba : ¬r (↑b) a
c : ↑S
h : ¬r ↑c ↑b
⊢ ¬s c ⟨↑b, ⋯⟩
tactic: refine ⟨b, ⟨b.2, fun c => not_imp_not.1 fun h => ?_⟩, ba⟩
state_before: α : Type u_1
r✝ r : α → α → Prop
inst✝ : IsWellOrder α r
S : Set α
hS : Unbounded r S
e : #↑S = (type r).cof
s : ↑S → ↑S → Prop
w✝ : IsWellOrder (↑S) s
e' : (#↑S).ord = type s
T : Set α := {a | ∃ (aS : a ∈ S), ∀ (b : ↑S), s b ⟨a, aS⟩ → r (↑b) a}
a : α
this : {b | ¬r (↑b) a}.Nonempty
b : ↑S := ⋯.min {b | ¬r (↑b) a} this
ba : ¬r (↑b) a
c : ↑S
h : ¬r ↑c ↑b
⊢ ¬s c ⟨↑b, ⋯⟩
state_after: α : Type u_1
r✝ r : α → α → Prop
inst✝ : IsWellOrder α r
S : Set α
hS : Unbounded r S
e : #↑S = (type r).cof
s : ↑S → ↑S → Prop
w✝ : IsWellOrder (↑S) s
e' : (#↑S).ord = type s
T : Set α := {a | ∃ (aS : a ∈ S), ∀ (b : ↑S), s b ⟨a, aS⟩ → r (↑b) a}
a : α
this : {b | ¬r (↑b) a}.Nonempty
b : ↑S := ⋯.min {b | ¬r (↑b) a} this
ba : ¬r (↑b) a
c : ↑S
h : ¬r ↑c ↑b
⊢ ¬s c b
tactic: rw [show ∀ b : S, (⟨b, b.2⟩ : S) = b by intro b; cases b; rfl]
state_before: α : Type u_1
r✝ r : α → α → Prop
inst✝ : IsWellOrder α r
S : Set α
hS : Unbounded r S
e : #↑S = (type r).cof
s : ↑S → ↑S → Prop
w✝ : IsWellOrder (↑S) s
e' : (#↑S).ord = type s
T : Set α := {a | ∃ (aS : a ∈ S), ∀ (b : ↑S), s b ⟨a, aS⟩ → r (↑b) a}
a : α
this : {b | ¬r (↑b) a}.Nonempty
b : ↑S := ⋯.min {b | ¬r (↑b) a} this
ba : ¬r (↑b) a
c : ↑S
h : ¬r ↑c ↑b
⊢ ¬s c b
state_after: no goals
tactic: exact IsWellFounded.wf.not_lt_min _ this (IsOrderConnected.neg_trans h ba)