Theorem: Cardinal.add_one_le_succ
File: Mathlib/SetTheory/Cardinal/Basic.lean

tactic: have : Set.Nonempty { c' | c < c' } := exists_gt c
state_before: α β : Type u
c : Cardinal.{u}
⊢ c + 1 ≤ succ c
state_after: α β : Type u
c : Cardinal.{u}
this : {c' | c < c'}.Nonempty
⊢ c + 1 ≤ succ c

tactic: simp_rw [succ_def, le_csInf_iff'' this, mem_setOf]
state_before: α β : Type u
c : Cardinal.{u}
this : {c' | c < c'}.Nonempty
⊢ c + 1 ≤ succ c
state_after: α β : Type u
c : Cardinal.{u}
this : {c' | c < c'}.Nonempty
⊢ ∀ (b : Cardinal.{u}), c < b → c + 1 ≤ b

tactic: intro b hlt
state_before: α β : Type u
c : Cardinal.{u}
this : {c' | c < c'}.Nonempty
⊢ ∀ (b : Cardinal.{u}), c < b → c + 1 ≤ b
state_after: α β : Type u
c : Cardinal.{u}
this : {c' | c < c'}.Nonempty
b : Cardinal.{u}
hlt : c < b
⊢ c + 1 ≤ b

tactic: rcases b, c with ⟨⟨β⟩, ⟨γ⟩⟩
state_before: α β : Type u
c : Cardinal.{u}
this : {c' | c < c'}.Nonempty
b : Cardinal.{u}
hlt : c < b
⊢ c + 1 ≤ b
state_after: case mk.mk
α β✝ : Type u
c b : Cardinal.{u}
β γ : Type u
this : {c' | Quot.mk Setoid.r γ < c'}.Nonempty
hlt : Quot.mk Setoid.r γ < Quot.mk Setoid.r β
⊢ Quot.mk Setoid.r γ + 1 ≤ Quot.mk Setoid.r β

tactic: cases' le_of_lt hlt with f
state_before: case mk.mk
α β✝ : Type u
c b : Cardinal.{u}
β γ : Type u
this : {c' | Quot.mk Setoid.r γ < c'}.Nonempty
hlt : Quot.mk Setoid.r γ < Quot.mk Setoid.r β
⊢ Quot.mk Setoid.r γ + 1 ≤ Quot.mk Setoid.r β
state_after: case mk.mk.intro
α β✝ : Type u
c b : Cardinal.{u}
β γ : Type u
this : {c' | Quot.mk Setoid.r γ < c'}.Nonempty
hlt : Quot.mk Setoid.r γ < Quot.mk Setoid.r β
f : γ ↪ β
⊢ Quot.mk Setoid.r γ + 1 ≤ Quot.mk Setoid.r β

tactic: have : ¬Surjective f := fun hn => (not_le_of_lt hlt) (mk_le_of_surjective hn)
state_before: case mk.mk.intro
α β✝ : Type u
c b : Cardinal.{u}
β γ : Type u
this : {c' | Quot.mk Setoid.r γ < c'}.Nonempty
hlt : Quot.mk Setoid.r γ < Quot.mk Setoid.r β
f : γ ↪ β
⊢ Quot.mk Setoid.r γ + 1 ≤ Quot.mk Setoid.r β
state_after: case mk.mk.intro
α β✝ : Type u
c b : Cardinal.{u}
β γ : Type u
this✝ : {c' | Quot.mk Setoid.r γ < c'}.Nonempty
hlt : Quot.mk Setoid.r γ < Quot.mk Setoid.r β
f : γ ↪ β
this : ¬Surjective ⇑f
⊢ Quot.mk Setoid.r γ + 1 ≤ Quot.mk Setoid.r β

tactic: simp only [Surjective, not_forall] at this
state_before: case mk.mk.intro
α β✝ : Type u
c b : Cardinal.{u}
β γ : Type u
this✝ : {c' | Quot.mk Setoid.r γ < c'}.Nonempty
hlt : Quot.mk Setoid.r γ < Quot.mk Setoid.r β
f : γ ↪ β
this : ¬Surjective ⇑f
⊢ Quot.mk Setoid.r γ + 1 ≤ Quot.mk Setoid.r β
state_after: case mk.mk.intro
α β✝ : Type u
c b : Cardinal.{u}
β γ : Type u
this✝ : {c' | Quot.mk Setoid.r γ < c'}.Nonempty
hlt : Quot.mk Setoid.r γ < Quot.mk Setoid.r β
f : γ ↪ β
this : ∃ x, ¬∃ a, f a = x
⊢ Quot.mk Setoid.r γ + 1 ≤ Quot.mk Setoid.r β

tactic: rcases this with ⟨b, hb⟩
state_before: case mk.mk.intro
α β✝ : Type u
c b : Cardinal.{u}
β γ : Type u
this✝ : {c' | Quot.mk Setoid.r γ < c'}.Nonempty
hlt : Quot.mk Setoid.r γ < Quot.mk Setoid.r β
f : γ ↪ β
this : ∃ x, ¬∃ a, f a = x
⊢ Quot.mk Setoid.r γ + 1 ≤ Quot.mk Setoid.r β
state_after: case mk.mk.intro.intro
α β✝ : Type u
c b✝ : Cardinal.{u}
β γ : Type u
this : {c' | Quot.mk Setoid.r γ < c'}.Nonempty
hlt : Quot.mk Setoid.r γ < Quot.mk Setoid.r β
f : γ ↪ β
b : β
hb : ¬∃ a, f a = b
⊢ Quot.mk Setoid.r γ + 1 ≤ Quot.mk Setoid.r β

tactic: calc
  #γ + 1 = #(Option γ) := mk_option.symm
  _ ≤ #β := (f.optionElim b hb).cardinal_le
state_before: case mk.mk.intro.intro
α β✝ : Type u
c b✝ : Cardinal.{u}
β γ : Type u
this : {c' | Quot.mk Setoid.r γ < c'}.Nonempty
hlt : Quot.mk Setoid.r γ < Quot.mk Setoid.r β
f : γ ↪ β
b : β
hb : ¬∃ a, f a = b
⊢ Quot.mk Setoid.r γ + 1 ≤ Quot.mk Setoid.r β
state_after: no goals