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

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}
⊢ 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: 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
⊢ 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: 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
⊢ 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: 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
⊢ 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: convert Cardinal.mk_le_of_injective hg
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: rw [Cardinal.mk_ord_out (succ #ι)]
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: apply_fun f at 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
g : (Quotient.out (succ #ι).ord).α → ι := fun a => Classical.choose ⋯
a b : (Quotient.out (succ #ι).ord).α
h' : g a = g b
Hf : ∀ (x : (Quotient.out (succ #ι).ord).α), f (g x) = typein (fun x x_1 => x < x_1) x
⊢ a = b
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 ⋯
a b : (Quotient.out (succ #ι).ord).α
Hf : ∀ (x : (Quotient.out (succ #ι).ord).α), f (g x) = typein (fun x x_1 => x < x_1) x
h' : f (g a) = f (g b)
⊢ a = b

tactic: rwa [Hf, Hf, typein_inj] at 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
g : (Quotient.out (succ #ι).ord).α → ι := fun a => Classical.choose ⋯
a b : (Quotient.out (succ #ι).ord).α
Hf : ∀ (x : (Quotient.out (succ #ι).ord).α), f (g x) = typein (fun x x_1 => x < x_1) x
h' : f (g a) = f (g b)
⊢ a = b
state_after: no goals