Theorem: Cardinal.beth_strictMono
File: Mathlib/SetTheory/Cardinal/Ordinal.lean

tactic: intro a b
state_before: ⊢ StrictMono beth
state_after: a b : Ordinal.{u_1}
⊢ a < b → beth a < beth b

tactic: induction' b using Ordinal.induction with b IH generalizing a
state_before: a b : Ordinal.{u_1}
⊢ a < b → beth a < beth b
state_after: case h
b : Ordinal.{u_1}
IH : ∀ k < b, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
a : Ordinal.{u_1}
⊢ a < b → beth a < beth b

tactic: intro h
state_before: case h
b : Ordinal.{u_1}
IH : ∀ k < b, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
a : Ordinal.{u_1}
⊢ a < b → beth a < beth b
state_after: case h
b : Ordinal.{u_1}
IH : ∀ k < b, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
a : Ordinal.{u_1}
h : a < b
⊢ beth a < beth b

tactic: rcases zero_or_succ_or_limit b with (rfl | ⟨c, rfl⟩ | hb)
state_before: case h
b : Ordinal.{u_1}
IH : ∀ k < b, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
a : Ordinal.{u_1}
h : a < b
⊢ beth a < beth b
state_after: case h.inl
a : Ordinal.{u_1}
IH : ∀ k < 0, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
h : a < 0
⊢ beth a < beth 0

case h.inr.inl.intro
a c : Ordinal.{u_1}
IH : ∀ k < succ c, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
h : a < succ c
⊢ beth a < beth (succ c)

case h.inr.inr
b : Ordinal.{u_1}
IH : ∀ k < b, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
a : Ordinal.{u_1}
h : a < b
hb : b.IsLimit
⊢ beth a < beth b

tactic: exact (Ordinal.not_lt_zero a h).elim
state_before: case h.inl
a : Ordinal.{u_1}
IH : ∀ k < 0, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
h : a < 0
⊢ beth a < beth 0
state_after: no goals

tactic: rw [lt_succ_iff] at h
state_before: case h.inr.inl.intro
a c : Ordinal.{u_1}
IH : ∀ k < succ c, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
h : a < succ c
⊢ beth a < beth (succ c)
state_after: case h.inr.inl.intro
a c : Ordinal.{u_1}
IH : ∀ k < succ c, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
h : a ≤ c
⊢ beth a < beth (succ c)

tactic: rw [beth_succ]
state_before: case h.inr.inl.intro
a c : Ordinal.{u_1}
IH : ∀ k < succ c, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
h : a ≤ c
⊢ beth a < beth (succ c)
state_after: case h.inr.inl.intro
a c : Ordinal.{u_1}
IH : ∀ k < succ c, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
h : a ≤ c
⊢ beth a < 2 ^ beth c

tactic: apply lt_of_le_of_lt _ (cantor _)
state_before: case h.inr.inl.intro
a c : Ordinal.{u_1}
IH : ∀ k < succ c, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
h : a ≤ c
⊢ beth a < 2 ^ beth c
state_after: a c : Ordinal.{u_1}
IH : ∀ k < succ c, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
h : a ≤ c
⊢ beth a ≤ beth c

tactic: rcases eq_or_lt_of_le h with (rfl | h)
state_before: a c : Ordinal.{u_1}
IH : ∀ k < succ c, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
h : a ≤ c
⊢ beth a ≤ beth c
state_after: case inl
a : Ordinal.{u_1}
IH : ∀ k < succ a, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
h : a ≤ a
⊢ beth a ≤ beth a

case inr
a c : Ordinal.{u_1}
IH : ∀ k < succ c, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
h✝ : a ≤ c
h : a < c
⊢ beth a ≤ beth c

tactic: exact (IH c (lt_succ c) h).le
state_before: case inr
a c : Ordinal.{u_1}
IH : ∀ k < succ c, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
h✝ : a ≤ c
h : a < c
⊢ beth a ≤ beth c
state_after: no goals

tactic: rfl
state_before: case inl
a : Ordinal.{u_1}
IH : ∀ k < succ a, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
h : a ≤ a
⊢ beth a ≤ beth a
state_after: no goals

tactic: apply (cantor _).trans_le
state_before: case h.inr.inr
b : Ordinal.{u_1}
IH : ∀ k < b, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
a : Ordinal.{u_1}
h : a < b
hb : b.IsLimit
⊢ beth a < beth b
state_after: case h.inr.inr
b : Ordinal.{u_1}
IH : ∀ k < b, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
a : Ordinal.{u_1}
h : a < b
hb : b.IsLimit
⊢ 2 ^ beth a ≤ beth b

tactic: rw [beth_limit hb, ← beth_succ]
state_before: case h.inr.inr
b : Ordinal.{u_1}
IH : ∀ k < b, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
a : Ordinal.{u_1}
h : a < b
hb : b.IsLimit
⊢ 2 ^ beth a ≤ beth b
state_after: case h.inr.inr
b : Ordinal.{u_1}
IH : ∀ k < b, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
a : Ordinal.{u_1}
h : a < b
hb : b.IsLimit
⊢ beth (succ a) ≤ ⨆ a, beth ↑a

tactic: exact le_ciSup (bddAbove_of_small _) (⟨_, hb.succ_lt h⟩ : Iio b)
state_before: case h.inr.inr
b : Ordinal.{u_1}
IH : ∀ k < b, ∀ ⦃a : Ordinal.{u_1}⦄, a < k → beth a < beth k
a : Ordinal.{u_1}
h : a < b
hb : b.IsLimit
⊢ beth (succ a) ≤ ⨆ a, beth ↑a
state_after: no goals