Theorem: LO.FirstOrder.Arith.Model.Nuon.ext_graph_aux (Arithmetization/OmegaOne/Nuon.lean)

State before:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
z S L i : M
⊢ z = S{L}[i] ↔ (‖S‖ ≤ i * ‖L‖ → z = 0) ∧ (i * ‖L‖ < ‖S‖ → ∃ b ≤ S, Exponential (i * ‖L‖) b ∧ z = S / b % L # 1)
Tactic:
rcases show ‖S‖ ≤ i * ‖L‖ ∨ i * ‖L‖ < ‖S‖ from le_or_lt _ _ with (le | lt)
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 ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
z S L i : M
le : ‖S‖ ≤ i * ‖L‖
⊢ z = S{L}[i] ↔ (‖S‖ ≤ i * ‖L‖ → z = 0) ∧ (i * ‖L‖ < ‖S‖ → ∃ b ≤ S, Exponential (i * ‖L‖) b ∧ z = S / b % L # 1)

case inr
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
z S L i : M
lt : i * ‖L‖ < ‖S‖
⊢ z = S{L}[i] ↔ (‖S‖ ≤ i * ‖L‖ → z = 0) ∧ (i * ‖L‖ < ‖S‖ → ∃ b ≤ S, Exponential (i * ‖L‖) b ∧ z = S / b % L # 1)

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 ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
z S L i : M
le : ‖S‖ ≤ i * ‖L‖
⊢ z = S{L}[i] ↔ (‖S‖ ≤ i * ‖L‖ → z = 0) ∧ (i * ‖L‖ < ‖S‖ → ∃ b ≤ S, Exponential (i * ‖L‖) b ∧ z = S / b % L # 1)
Tactic:
simp [ext_eq_zero_of_lt le, le, not_lt.mpr le]
State after:
no goals

State before:
case inr
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
z S L i : M
lt : i * ‖L‖ < ‖S‖
⊢ z = S{L}[i] ↔ (‖S‖ ≤ i * ‖L‖ → z = 0) ∧ (i * ‖L‖ < ‖S‖ → ∃ b ≤ S, Exponential (i * ‖L‖) b ∧ z = S / b % L # 1)
Tactic:
simp [lt, not_le.mpr lt, ext]
State after:
case inr
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
z S L i : M
lt : i * ‖L‖ < ‖S‖
⊢ z = S / bexp S (i * ‖L‖) % L # 1 ↔ ∃ b ≤ S, Exponential (i * ‖L‖) b ∧ z = S / b % L # 1

State before:
case inr
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
z S L i : M
lt : i * ‖L‖ < ‖S‖
⊢ z = S / bexp S (i * ‖L‖) % L # 1 ↔ ∃ b ≤ S, Exponential (i * ‖L‖) b ∧ z = S / b % L # 1
Tactic:
have := exp_bexp_of_lt lt
State after:
case inr
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
z S L i : M
lt : i * ‖L‖ < ‖S‖
this : Exponential (i * ‖L‖) (bexp S (i * ‖L‖))
⊢ z = S / bexp S (i * ‖L‖) % L # 1 ↔ ∃ b ≤ S, Exponential (i * ‖L‖) b ∧ z = S / b % L # 1

State before:
case inr
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
z S L i : M
lt : i * ‖L‖ < ‖S‖
this : Exponential (i * ‖L‖) (bexp S (i * ‖L‖))
⊢ z = S / bexp S (i * ‖L‖) % L # 1 ↔ ∃ b ≤ S, Exponential (i * ‖L‖) b ∧ z = S / b % L # 1
Tactic:
constructor
State after:
case inr.mp
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
z S L i : M
lt : i * ‖L‖ < ‖S‖
this : Exponential (i * ‖L‖) (bexp S (i * ‖L‖))
⊢ z = S / bexp S (i * ‖L‖) % L # 1 → ∃ b ≤ S, Exponential (i * ‖L‖) b ∧ z = S / b % L # 1

case inr.mpr
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
z S L i : M
lt : i * ‖L‖ < ‖S‖
this : Exponential (i * ‖L‖) (bexp S (i * ‖L‖))
⊢ (∃ b ≤ S, Exponential (i * ‖L‖) b ∧ z = S / b % L # 1) → z = S / bexp S (i * ‖L‖) % L # 1

State before:
case inr.mp
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
z S L i : M
lt : i * ‖L‖ < ‖S‖
this : Exponential (i * ‖L‖) (bexp S (i * ‖L‖))
⊢ z = S / bexp S (i * ‖L‖) % L # 1 → ∃ b ≤ S, Exponential (i * ‖L‖) b ∧ z = S / b % L # 1
Tactic:
rintro rfl
State after:
case inr.mp
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
S L i : M
lt : i * ‖L‖ < ‖S‖
this : Exponential (i * ‖L‖) (bexp S (i * ‖L‖))
⊢ ∃ b ≤ S, Exponential (i * ‖L‖) b ∧ S / bexp S (i * ‖L‖) % L # 1 = S / b % L # 1

State before:
case inr.mp
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
S L i : M
lt : i * ‖L‖ < ‖S‖
this : Exponential (i * ‖L‖) (bexp S (i * ‖L‖))
⊢ ∃ b ≤ S, Exponential (i * ‖L‖) b ∧ S / bexp S (i * ‖L‖) % L # 1 = S / b % L # 1
Tactic:
exact ⟨bexp S (i * ‖L‖), by simp, exp_bexp_of_lt lt, rfl⟩
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 ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
S L i : M
lt : i * ‖L‖ < ‖S‖
this : Exponential (i * ‖L‖) (bexp S (i * ‖L‖))
⊢ bexp S (i * ‖L‖) ≤ S
Tactic:
simp
State after:
no goals

State before:
case inr.mpr
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
z S L i : M
lt : i * ‖L‖ < ‖S‖
this : Exponential (i * ‖L‖) (bexp S (i * ‖L‖))
⊢ (∃ b ≤ S, Exponential (i * ‖L‖) b ∧ z = S / b % L # 1) → z = S / bexp S (i * ‖L‖) % L # 1
Tactic:
rintro ⟨b, _, H, rfl⟩
State after:
case inr.mpr.intro.intro.intro
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
S L i : M
lt : i * ‖L‖ < ‖S‖
this : Exponential (i * ‖L‖) (bexp S (i * ‖L‖))
b : M
left✝ : b ≤ S
H : Exponential (i * ‖L‖) b
⊢ S / b % L # 1 = S / bexp S (i * ‖L‖) % L # 1

State before:
case inr.mpr.intro.intro.intro
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
S L i : M
lt : i * ‖L‖ < ‖S‖
this : Exponential (i * ‖L‖) (bexp S (i * ‖L‖))
b : M
left✝ : b ≤ S
H : Exponential (i * ‖L‖) b
⊢ S / b % L # 1 = S / bexp S (i * ‖L‖) % L # 1
Tactic:
rcases H.uniq (exp_bexp_of_lt lt)
State after:
case inr.mpr.intro.intro.intro.refl
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
S L i : M
lt : i * ‖L‖ < ‖S‖
this : Exponential (i * ‖L‖) (bexp S (i * ‖L‖))
left✝ : bexp S (i * ‖L‖) ≤ S
H : Exponential (i * ‖L‖) (bexp S (i * ‖L‖))
⊢ S / bexp S (i * ‖L‖) % L # 1 = S / bexp S (i * ‖L‖) % L # 1

State before:
case inr.mpr.intro.intro.intro.refl
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
S L i : M
lt : i * ‖L‖ < ‖S‖
this : Exponential (i * ‖L‖) (bexp S (i * ‖L‖))
left✝ : bexp S (i * ‖L‖) ≤ S
H : Exponential (i * ‖L‖) (bexp S (i * ‖L‖))
⊢ S / bexp S (i * ‖L‖) % L # 1 = S / bexp S (i * ‖L‖) % L # 1
Tactic:
rfl
State after:
no goals