Theorem: Ordinal.mex_lt_ord_succ_mk
File: Mathlib/SetTheory/Ordinal/Arithmetic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
ι : Type u
f : ι → Ordinal.{u}
⊢ mex f < (succ #ι).ord
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
ι : Type u
f : ι → Ordinal.{u}
h : (succ #ι).ord ≤ mex f
⊢ False
tactic: by_contra! h
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
ι : Type u
f : ι → Ordinal.{u}
h : (succ #ι).ord ≤ mex f
⊢ False
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
ι : Type u
f : ι → Ordinal.{u}
h : (succ #ι).ord ≤ mex f
⊢ succ #ι ≤ #ι
tactic: apply (lt_succ #ι).not_le
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
ι : Type u
f : ι → Ordinal.{u}
h : (succ #ι).ord ≤ mex f
⊢ succ #ι ≤ #ι
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
ι : Type u
f : ι → Ordinal.{u}
h : (succ #ι).ord ≤ mex f
H : ∀ (a : (Quotient.out (succ #ι).ord).α), ∃ i, f i = typein (fun x x_1 => x < x_1) a
⊢ succ #ι ≤ #ι
tactic: have H := fun a => exists_of_lt_mex ((typein_lt_self a).trans_le h)
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
ι : Type u
f : ι → Ordinal.{u}
h : (succ #ι).ord ≤ mex f
H : ∀ (a : (Quotient.out (succ #ι).ord).α), ∃ i, f i = typein (fun x x_1 => x < x_1) a
⊢ succ #ι ≤ #ι
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
ι : Type u
f : ι → Ordinal.{u}
h : (succ #ι).ord ≤ mex f
H : ∀ (a : (Quotient.out (succ #ι).ord).α), ∃ i, f i = typein (fun x x_1 => x < x_1) a
g : (Quotient.out (succ #ι).ord).α → ι := fun a => Classical.choose ⋯
⊢ succ #ι ≤ #ι
tactic: let g : (succ #ι).ord.out.α → ι := fun a => Classical.choose (H a)
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
ι : Type u
f : ι → Ordinal.{u}
h : (succ #ι).ord ≤ mex f
H : ∀ (a : (Quotient.out (succ #ι).ord).α), ∃ i, f i = typein (fun x x_1 => x < x_1) a
g : (Quotient.out (succ #ι).ord).α → ι := fun a => Classical.choose ⋯
hg : Injective g
⊢ succ #ι ≤ #ι
state_after: case h.e'_3
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
ι : Type u
f : ι → Ordinal.{u}
h : (succ #ι).ord ≤ mex f
H : ∀ (a : (Quotient.out (succ #ι).ord).α), ∃ i, f i = typein (fun x x_1 => x < x_1) a
g : (Quotient.out (succ #ι).ord).α → ι := fun a => Classical.choose ⋯
hg : Injective g
⊢ succ #ι = #(Quotient.out (succ #ι).ord).α
tactic: convert Cardinal.mk_le_of_injective hg
state_before: case h.e'_3
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
ι : Type u
f : ι → Ordinal.{u}
h : (succ #ι).ord ≤ mex f
H : ∀ (a : (Quotient.out (succ #ι).ord).α), ∃ i, f i = typein (fun x x_1 => x < x_1) a
g : (Quotient.out (succ #ι).ord).α → ι := fun a => Classical.choose ⋯
hg : Injective g
⊢ succ #ι = #(Quotient.out (succ #ι).ord).α
state_after: no goals
tactic: rw [Cardinal.mk_ord_out (succ #ι)]