Theorem: LO.FirstOrder.Arith.Model.Exponential.exponential_elim (Arithmetization/ISigmaZero/Exponential/Exp.lean)

State before:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
x y : M
⊢ Exponential x y → x = 0 ∧ y = 1 ∨ ∃ x' y', x = x' + 1 ∧ y = 2 * y' ∧ Exponential x' y'
Tactic:
intro h
State after:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
x y : M
h : Exponential x y
⊢ x = 0 ∧ y = 1 ∨ ∃ x' y', x = x' + 1 ∧ y = 2 * y' ∧ Exponential x' y'

State before:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
x y : M
h : Exponential x y
⊢ x = 0 ∧ y = 1 ∨ ∃ x' y', x = x' + 1 ∧ y = 2 * y' ∧ Exponential x' y'
Tactic:
rcases zero_or_succ x with (rfl | ⟨x', rfl⟩)
State after:
case inl
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
y : M
h : Exponential 0 y
⊢ 0 = 0 ∧ y = 1 ∨ ∃ x' y', 0 = x' + 1 ∧ y = 2 * y' ∧ Exponential x' y'

case inr.intro
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
y x' : M
h : Exponential (x' + 1) y
⊢ x' + 1 = 0 ∧ y = 1 ∨ ∃ x'_1 y', x' + 1 = x'_1 + 1 ∧ y = 2 * y' ∧ Exponential x'_1 y'

State before:
case inl
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
y : M
h : Exponential 0 y
⊢ 0 = 0 ∧ y = 1 ∨ ∃ x' y', 0 = x' + 1 ∧ y = 2 * y' ∧ Exponential x' y'
Tactic:
simp [h.zero_uniq]
State after:
no goals

State before:
case inr.intro
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
y x' : M
h : Exponential (x' + 1) y
⊢ x' + 1 = 0 ∧ y = 1 ∨ ∃ x'_1 y', x' + 1 = x'_1 + 1 ∧ y = 2 * y' ∧ Exponential x'_1 y'
Tactic:
right
State after:
case inr.intro.h
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
y x' : M
h : Exponential (x' + 1) y
⊢ ∃ x'_1 y', x' + 1 = x'_1 + 1 ∧ y = 2 * y' ∧ Exponential x'_1 y'

State before:
case inr.intro.h
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
y x' : M
h : Exponential (x' + 1) y
⊢ ∃ x'_1 y', x' + 1 = x'_1 + 1 ∧ y = 2 * y' ∧ Exponential x'_1 y'
Tactic:
rcases exponential_succ.mp h with ⟨y', rfl, H⟩
State after:
case inr.intro.h.intro.intro
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
x' y' : M
H : Exponential x' y'
h : Exponential (x' + 1) (2 * y')
⊢ ∃ x'_1 y'_1, x' + 1 = x'_1 + 1 ∧ 2 * y' = 2 * y'_1 ∧ Exponential x'_1 y'_1

State before:
case inr.intro.h.intro.intro
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
x' y' : M
H : Exponential x' y'
h : Exponential (x' + 1) (2 * y')
⊢ ∃ x'_1 y'_1, x' + 1 = x'_1 + 1 ∧ 2 * y' = 2 * y'_1 ∧ Exponential x'_1 y'_1
Tactic:
exact ⟨x', y', rfl, rfl, H⟩
State after:
no goals

State before:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
x y : M
⊢ (x = 0 ∧ y = 1 ∨ ∃ x' y', x = x' + 1 ∧ y = 2 * y' ∧ Exponential x' y') → Exponential x y
Tactic:
rintro (⟨rfl, rfl⟩ | ⟨x, y, rfl, rfl, h⟩)
State after:
case inl.intro
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
⊢ Exponential 0 1

case inr.intro.intro.intro.intro
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
x y : M
h : Exponential x y
⊢ Exponential (x + 1) (2 * y)

State before:
case inl.intro
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
⊢ Exponential 0 1
Tactic:
simp
State after:
no goals

State before:
case inr.intro.intro.intro.intro
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
x y : M
h : Exponential x y
⊢ Exponential (x + 1) (2 * y)
Tactic:
exact h.succ
State after:
no goals