Theorem: LO.FirstOrder.Arith.Model.Nuon.NuonAux.two_mul_add_one (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 ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A k n : M
hk : k ≤ ‖A‖
⊢ NuonAux A k n → NuonAux (2 * A + 1) (k + 1) (n + 1)
Tactic:
revert n hk
State after:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A k : M
⊢ ∀ {n : M}, k ≤ ‖A‖ → NuonAux A k n → NuonAux (2 * A + 1) (k + 1) (n + 1)

State before:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A k : M
⊢ ∀ {n : M}, k ≤ ‖A‖ → NuonAux A k n → NuonAux (2 * A + 1) (k + 1) (n + 1)
Tactic:
suffices ∀ n ≤ k, k ≤ ‖A‖ → NuonAux A k n → NuonAux (2 * A + 1) (k + 1) (n + 1) by
  intro n hk H
  exact this n H.le hk H
State after:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A k : M
⊢ ∀ n ≤ k, k ≤ ‖A‖ → NuonAux A k n → NuonAux (2 * A + 1) (k + 1) (n + 1)

State before:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A k : M
⊢ ∀ n ≤ k, k ≤ ‖A‖ → NuonAux A k n → NuonAux (2 * A + 1) (k + 1) (n + 1)
Tactic:
induction k using induction_iSigmaZero
State after:
case hP
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A : M
⊢ 𝚺₀-Predicate fun {k} => ∀ n ≤ k, k ≤ ‖A‖ → NuonAux A k n → NuonAux (2 * A + 1) (k + 1) (n + 1)

case zero
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A : M
⊢ ∀ n ≤ 0, 0 ≤ ‖A‖ → NuonAux A 0 n → NuonAux (2 * A + 1) (0 + 1) (n + 1)

case succ
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A x✝ : M
a✝ : ∀ n ≤ x✝, x✝ ≤ ‖A‖ → NuonAux A x✝ n → NuonAux (2 * A + 1) (x✝ + 1) (n + 1)
⊢ ∀ n ≤ x✝ + 1, x✝ + 1 ≤ ‖A‖ → NuonAux A (x✝ + 1) n → NuonAux (2 * A + 1) (x✝ + 1 + 1) (n + 1)

State before:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A : M
⊢ ∀ n ≤ 0, 0 ≤ ‖A‖ → NuonAux A 0 n → NuonAux (2 * A + 1) (0 + 1) (n + 1)
Tactic:
case zero =>
  simpa using (NuonAux.initial (2 * A + 1)).succ (by simp)
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 ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A k : M
IH : ∀ n ≤ k, k ≤ ‖A‖ → NuonAux A k n → NuonAux (2 * A + 1) (k + 1) (n + 1)
⊢ ∀ n ≤ k + 1, k + 1 ≤ ‖A‖ → NuonAux A (k + 1) n → NuonAux (2 * A + 1) (k + 1 + 1) (n + 1)
Tactic:
case succ k IH =>
  intro n hn hk H
  rcases H.succ_elim (le_trans (by simp) hk) with ⟨n', rfl, H'⟩
  have IH : NuonAux (2 * A + 1) (k + 1) (n' + 1) := IH n' H'.le (le_trans (by simp) hk) H'
  simpa [add_right_comm n' 1] using IH.succ (le_trans hk (by simp [length_two_mul_add_one]))
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 ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A k : M
this : ∀ n ≤ k, k ≤ ‖A‖ → NuonAux A k n → NuonAux (2 * A + 1) (k + 1) (n + 1)
⊢ ∀ {n : M}, k ≤ ‖A‖ → NuonAux A k n → NuonAux (2 * A + 1) (k + 1) (n + 1)
Tactic:
intro n hk H
State after:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A k : M
this : ∀ n ≤ k, k ≤ ‖A‖ → NuonAux A k n → NuonAux (2 * A + 1) (k + 1) (n + 1)
n : M
hk : k ≤ ‖A‖
H : NuonAux A k n
⊢ NuonAux (2 * A + 1) (k + 1) (n + 1)

State before:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A k : M
this : ∀ n ≤ k, k ≤ ‖A‖ → NuonAux A k n → NuonAux (2 * A + 1) (k + 1) (n + 1)
n : M
hk : k ≤ ‖A‖
H : NuonAux A k n
⊢ NuonAux (2 * A + 1) (k + 1) (n + 1)
Tactic:
exact this n H.le hk H
State after:
no goals

State before:
case hP
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A : M
⊢ 𝚺₀-Predicate fun {k} => ∀ n ≤ k, k ≤ ‖A‖ → NuonAux A k n → NuonAux (2 * A + 1) (k + 1) (n + 1)
Tactic:
definability
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 ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A : M
⊢ ∀ n ≤ 0, 0 ≤ ‖A‖ → NuonAux A 0 n → NuonAux (2 * A + 1) (0 + 1) (n + 1)
Tactic:
simpa using (NuonAux.initial (2 * A + 1)).succ (by simp)
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 ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A : M
⊢ 0 ≤ ‖2 * A + 1‖
Tactic:
simp
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 ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A k : M
IH : ∀ n ≤ k, k ≤ ‖A‖ → NuonAux A k n → NuonAux (2 * A + 1) (k + 1) (n + 1)
⊢ ∀ n ≤ k + 1, k + 1 ≤ ‖A‖ → NuonAux A (k + 1) n → NuonAux (2 * A + 1) (k + 1 + 1) (n + 1)
Tactic:
intro n hn hk H
State after:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A k : M
IH : ∀ n ≤ k, k ≤ ‖A‖ → NuonAux A k n → NuonAux (2 * A + 1) (k + 1) (n + 1)
n : M
hn : n ≤ k + 1
hk : k + 1 ≤ ‖A‖
H : NuonAux A (k + 1) n
⊢ NuonAux (2 * A + 1) (k + 1 + 1) (n + 1)

State before:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A k : M
IH : ∀ n ≤ k, k ≤ ‖A‖ → NuonAux A k n → NuonAux (2 * A + 1) (k + 1) (n + 1)
n : M
hn : n ≤ k + 1
hk : k + 1 ≤ ‖A‖
H : NuonAux A (k + 1) n
⊢ NuonAux (2 * A + 1) (k + 1 + 1) (n + 1)
Tactic:
rcases H.succ_elim (le_trans (by simp) hk) with ⟨n', rfl, H'⟩
State after:
case intro.intro
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A k : M
IH : ∀ n ≤ k, k ≤ ‖A‖ → NuonAux A k n → NuonAux (2 * A + 1) (k + 1) (n + 1)
hk : k + 1 ≤ ‖A‖
n' : M
H' : NuonAux A k n'
hn : n' + fbit A k ≤ k + 1
H : NuonAux A (k + 1) (n' + fbit A k)
⊢ NuonAux (2 * A + 1) (k + 1 + 1) (n' + fbit A k + 1)

State before:
case intro.intro
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A k : M
IH : ∀ n ≤ k, k ≤ ‖A‖ → NuonAux A k n → NuonAux (2 * A + 1) (k + 1) (n + 1)
hk : k + 1 ≤ ‖A‖
n' : M
H' : NuonAux A k n'
hn : n' + fbit A k ≤ k + 1
H : NuonAux A (k + 1) (n' + fbit A k)
⊢ NuonAux (2 * A + 1) (k + 1 + 1) (n' + fbit A k + 1)
Tactic:
have IH : NuonAux (2 * A + 1) (k + 1) (n' + 1) := IH n' H'.le (le_trans (by simp) hk) H'
State after:
case intro.intro
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A k : M
IH✝ : ∀ n ≤ k, k ≤ ‖A‖ → NuonAux A k n → NuonAux (2 * A + 1) (k + 1) (n + 1)
hk : k + 1 ≤ ‖A‖
n' : M
H' : NuonAux A k n'
hn : n' + fbit A k ≤ k + 1
H : NuonAux A (k + 1) (n' + fbit A k)
IH : NuonAux (2 * A + 1) (k + 1) (n' + 1)
⊢ NuonAux (2 * A + 1) (k + 1 + 1) (n' + fbit A k + 1)

State before:
case intro.intro
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A k : M
IH✝ : ∀ n ≤ k, k ≤ ‖A‖ → NuonAux A k n → NuonAux (2 * A + 1) (k + 1) (n + 1)
hk : k + 1 ≤ ‖A‖
n' : M
H' : NuonAux A k n'
hn : n' + fbit A k ≤ k + 1
H : NuonAux A (k + 1) (n' + fbit A k)
IH : NuonAux (2 * A + 1) (k + 1) (n' + 1)
⊢ NuonAux (2 * A + 1) (k + 1 + 1) (n' + fbit A k + 1)
Tactic:
simpa [add_right_comm n' 1] using IH.succ (le_trans hk (by simp [length_two_mul_add_one]))
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 ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A k : M
IH : ∀ n ≤ k, k ≤ ‖A‖ → NuonAux A k n → NuonAux (2 * A + 1) (k + 1) (n + 1)
n : M
hn : n ≤ k + 1
hk : k + 1 ≤ ‖A‖
H : NuonAux A (k + 1) n
⊢ k ≤ k + 1
Tactic:
simp
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 ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A k : M
IH : ∀ n ≤ k, k ≤ ‖A‖ → NuonAux A k n → NuonAux (2 * A + 1) (k + 1) (n + 1)
hk : k + 1 ≤ ‖A‖
n' : M
H' : NuonAux A k n'
hn : n' + fbit A k ≤ k + 1
H : NuonAux A (k + 1) (n' + fbit A k)
⊢ k ≤ k + 1
Tactic:
simp
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 ⊧ₘ* 𝐈𝚫₀ + 𝛀₁
A k : M
IH✝ : ∀ n ≤ k, k ≤ ‖A‖ → NuonAux A k n → NuonAux (2 * A + 1) (k + 1) (n + 1)
hk : k + 1 ≤ ‖A‖
n' : M
H' : NuonAux A k n'
hn : n' + fbit A k ≤ k + 1
H : NuonAux A (k + 1) (n' + fbit A k)
IH : NuonAux (2 * A + 1) (k + 1) (n' + 1)
⊢ ‖A‖ ≤ ‖2 * A + 1‖
Tactic:
simp [length_two_mul_add_one]
State after:
no goals