Theorem: LO.FirstOrder.Arith.Model.Exponential.Seqₛ.append (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 ⊧ₘ* 𝐈𝚫₀
z x y X Y i : M
h : Seqₛ z X Y
ppi : PPow2 i
hz : z < i
⊢ Seqₛ z (Exponential.append (i ^ 2) X x) (Exponential.append (i ^ 2) Y y)
Tactic:
intro j hj ne2 ppj
State after:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
z x y X Y i : M
h : Seqₛ z X Y
ppi : PPow2 i
hz : z < i
j : M
hj : j ≤ z
ne2 : j ≠ 2
ppj : PPow2 j
⊢ Even (Exponential.append (i ^ 2) X x) (Exponential.append (i ^ 2) Y y) j ∨
    Odd (Exponential.append (i ^ 2) X x) (Exponential.append (i ^ 2) Y y) j

State before:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
z x y X Y i : M
h : Seqₛ z X Y
ppi : PPow2 i
hz : z < i
j : M
hj : j ≤ z
ne2 : j ≠ 2
ppj : PPow2 j
⊢ Even (Exponential.append (i ^ 2) X x) (Exponential.append (i ^ 2) Y y) j ∨
    Odd (Exponential.append (i ^ 2) X x) (Exponential.append (i ^ 2) Y y) j
Tactic:
have : j < i^2 := lt_of_lt_of_le (lt_of_le_of_lt hj hz) (by simp)
State after:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
z x y X Y i : M
h : Seqₛ z X Y
ppi : PPow2 i
hz : z < i
j : M
hj : j ≤ z
ne2 : j ≠ 2
ppj : PPow2 j
this : j < i ^ 2
⊢ Even (Exponential.append (i ^ 2) X x) (Exponential.append (i ^ 2) Y y) j ∨
    Odd (Exponential.append (i ^ 2) X x) (Exponential.append (i ^ 2) Y y) j

State before:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
z x y X Y i : M
h : Seqₛ z X Y
ppi : PPow2 i
hz : z < i
j : M
hj : j ≤ z
ne2 : j ≠ 2
ppj : PPow2 j
this : j < i ^ 2
⊢ Even (Exponential.append (i ^ 2) X x) (Exponential.append (i ^ 2) Y y) j ∨
    Odd (Exponential.append (i ^ 2) X x) (Exponential.append (i ^ 2) Y y) j
Tactic:
have : j^2 < i^2 := sq_lt_sq.mpr (lt_of_le_of_lt hj hz)
State after:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
z x y X Y i : M
h : Seqₛ z X Y
ppi : PPow2 i
hz : z < i
j : M
hj : j ≤ z
ne2 : j ≠ 2
ppj : PPow2 j
this✝ : j < i ^ 2
this : j ^ 2 < i ^ 2
⊢ Even (Exponential.append (i ^ 2) X x) (Exponential.append (i ^ 2) Y y) j ∨
    Odd (Exponential.append (i ^ 2) X x) (Exponential.append (i ^ 2) Y y) j

State before:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
z x y X Y i : M
h : Seqₛ z X Y
ppi : PPow2 i
hz : z < i
j : M
hj : j ≤ z
ne2 : j ≠ 2
ppj : PPow2 j
this✝ : j < i ^ 2
this : j ^ 2 < i ^ 2
⊢ Even (Exponential.append (i ^ 2) X x) (Exponential.append (i ^ 2) Y y) j ∨
    Odd (Exponential.append (i ^ 2) X x) (Exponential.append (i ^ 2) Y y) j
Tactic:
rcases h j hj ne2 ppj with (H | H) <;> simp [Even, Odd]
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 x y X Y i : M
h : Seqₛ z X Y
ppi : PPow2 i
hz : z < i
j : M
hj : j ≤ z
ne2 : j ≠ 2
ppj : PPow2 j
this✝ : j < i ^ 2
this : j ^ 2 < i ^ 2
H : Even X Y j
⊢ ext (j ^ 2) (Exponential.append (i ^ 2) X x) = 2 * ext j (Exponential.append (i ^ 2) X x) ∧
      ext (j ^ 2) (Exponential.append (i ^ 2) Y y) = ext j (Exponential.append (i ^ 2) Y y) ^ 2 ∨
    ext (j ^ 2) (Exponential.append (i ^ 2) X x) = 2 * ext j (Exponential.append (i ^ 2) X x) + 1 ∧
      ext (j ^ 2) (Exponential.append (i ^ 2) Y y) = 2 * ext j (Exponential.append (i ^ 2) Y y) ^ 2

case inr
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
z x y X Y i : M
h : Seqₛ z X Y
ppi : PPow2 i
hz : z < i
j : M
hj : j ≤ z
ne2 : j ≠ 2
ppj : PPow2 j
this✝ : j < i ^ 2
this : j ^ 2 < i ^ 2
H : Odd X Y j
⊢ ext (j ^ 2) (Exponential.append (i ^ 2) X x) = 2 * ext j (Exponential.append (i ^ 2) X x) ∧
      ext (j ^ 2) (Exponential.append (i ^ 2) Y y) = ext j (Exponential.append (i ^ 2) Y y) ^ 2 ∨
    ext (j ^ 2) (Exponential.append (i ^ 2) X x) = 2 * ext j (Exponential.append (i ^ 2) X x) + 1 ∧
      ext (j ^ 2) (Exponential.append (i ^ 2) Y y) = 2 * ext j (Exponential.append (i ^ 2) Y y) ^ 2

State before:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
z x y X Y i : M
h : Seqₛ z X Y
ppi : PPow2 i
hz : z < i
j : M
hj : j ≤ z
ne2 : j ≠ 2
ppj : PPow2 j
⊢ i ≤ i ^ 2
Tactic:
simp
State after:
no goals

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 x y X Y i : M
h : Seqₛ z X Y
ppi : PPow2 i
hz : z < i
j : M
hj : j ≤ z
ne2 : j ≠ 2
ppj : PPow2 j
this✝ : j < i ^ 2
this : j ^ 2 < i ^ 2
H : Even X Y j
⊢ ext (j ^ 2) (Exponential.append (i ^ 2) X x) = 2 * ext j (Exponential.append (i ^ 2) X x) ∧
      ext (j ^ 2) (Exponential.append (i ^ 2) Y y) = ext j (Exponential.append (i ^ 2) Y y) ^ 2 ∨
    ext (j ^ 2) (Exponential.append (i ^ 2) X x) = 2 * ext j (Exponential.append (i ^ 2) X x) + 1 ∧
      ext (j ^ 2) (Exponential.append (i ^ 2) Y y) = 2 * ext j (Exponential.append (i ^ 2) Y y) ^ 2
Tactic:
left
State after:
case inl.h
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
z x y X Y i : M
h : Seqₛ z X Y
ppi : PPow2 i
hz : z < i
j : M
hj : j ≤ z
ne2 : j ≠ 2
ppj : PPow2 j
this✝ : j < i ^ 2
this : j ^ 2 < i ^ 2
H : Even X Y j
⊢ ext (j ^ 2) (Exponential.append (i ^ 2) X x) = 2 * ext j (Exponential.append (i ^ 2) X x) ∧
    ext (j ^ 2) (Exponential.append (i ^ 2) Y y) = ext j (Exponential.append (i ^ 2) Y y) ^ 2

State before:
case inl.h
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
z x y X Y i : M
h : Seqₛ z X Y
ppi : PPow2 i
hz : z < i
j : M
hj : j ≤ z
ne2 : j ≠ 2
ppj : PPow2 j
this✝ : j < i ^ 2
this : j ^ 2 < i ^ 2
H : Even X Y j
⊢ ext (j ^ 2) (Exponential.append (i ^ 2) X x) = 2 * ext j (Exponential.append (i ^ 2) X x) ∧
    ext (j ^ 2) (Exponential.append (i ^ 2) Y y) = ext j (Exponential.append (i ^ 2) Y y) ^ 2
Tactic:
rw [ext_append_of_lt, ext_append_of_lt, ext_append_of_lt, ext_append_of_lt] <;> try simp [ppi.sq, ppj.sq, lt_of_le_of_lt hj hz, *]
State after:
case inl.h
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
z x y X Y i : M
h : Seqₛ z X Y
ppi : PPow2 i
hz : z < i
j : M
hj : j ≤ z
ne2 : j ≠ 2
ppj : PPow2 j
this✝ : j < i ^ 2
this : j ^ 2 < i ^ 2
H : Even X Y j
⊢ ext (j ^ 2) X = 2 * ext j X ∧ ext (j ^ 2) Y = ext j Y ^ 2

State before:
case inl.h
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
z x y X Y i : M
h : Seqₛ z X Y
ppi : PPow2 i
hz : z < i
j : M
hj : j ≤ z
ne2 : j ≠ 2
ppj : PPow2 j
this✝ : j < i ^ 2
this : j ^ 2 < i ^ 2
H : Even X Y j
⊢ ext (j ^ 2) X = 2 * ext j X ∧ ext (j ^ 2) Y = ext j Y ^ 2
Tactic:
exact H
State after:
no goals

State before:
case inl.h.hij
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
z x y X Y i : M
h : Seqₛ z X Y
ppi : PPow2 i
hz : z < i
j : M
hj : j ≤ z
ne2 : j ≠ 2
ppj : PPow2 j
this✝ : j < i ^ 2
this : j ^ 2 < i ^ 2
H : Even X Y j
⊢ j ^ 2 < i ^ 2
Tactic:
simp [ppi.sq, ppj.sq, lt_of_le_of_lt hj hz, *]
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 x y X Y i : M
h : Seqₛ z X Y
ppi : PPow2 i
hz : z < i
j : M
hj : j ≤ z
ne2 : j ≠ 2
ppj : PPow2 j
this✝ : j < i ^ 2
this : j ^ 2 < i ^ 2
H : Odd X Y j
⊢ ext (j ^ 2) (Exponential.append (i ^ 2) X x) = 2 * ext j (Exponential.append (i ^ 2) X x) ∧
      ext (j ^ 2) (Exponential.append (i ^ 2) Y y) = ext j (Exponential.append (i ^ 2) Y y) ^ 2 ∨
    ext (j ^ 2) (Exponential.append (i ^ 2) X x) = 2 * ext j (Exponential.append (i ^ 2) X x) + 1 ∧
      ext (j ^ 2) (Exponential.append (i ^ 2) Y y) = 2 * ext j (Exponential.append (i ^ 2) Y y) ^ 2
Tactic:
right
State after:
case inr.h
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
z x y X Y i : M
h : Seqₛ z X Y
ppi : PPow2 i
hz : z < i
j : M
hj : j ≤ z
ne2 : j ≠ 2
ppj : PPow2 j
this✝ : j < i ^ 2
this : j ^ 2 < i ^ 2
H : Odd X Y j
⊢ ext (j ^ 2) (Exponential.append (i ^ 2) X x) = 2 * ext j (Exponential.append (i ^ 2) X x) + 1 ∧
    ext (j ^ 2) (Exponential.append (i ^ 2) Y y) = 2 * ext j (Exponential.append (i ^ 2) Y y) ^ 2

State before:
case inr.h
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
z x y X Y i : M
h : Seqₛ z X Y
ppi : PPow2 i
hz : z < i
j : M
hj : j ≤ z
ne2 : j ≠ 2
ppj : PPow2 j
this✝ : j < i ^ 2
this : j ^ 2 < i ^ 2
H : Odd X Y j
⊢ ext (j ^ 2) (Exponential.append (i ^ 2) X x) = 2 * ext j (Exponential.append (i ^ 2) X x) + 1 ∧
    ext (j ^ 2) (Exponential.append (i ^ 2) Y y) = 2 * ext j (Exponential.append (i ^ 2) Y y) ^ 2
Tactic:
rw [ext_append_of_lt, ext_append_of_lt, ext_append_of_lt, ext_append_of_lt] <;> try simp [ppi.sq, ppj.sq, lt_of_le_of_lt hj hz, *]
State after:
case inr.h
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
z x y X Y i : M
h : Seqₛ z X Y
ppi : PPow2 i
hz : z < i
j : M
hj : j ≤ z
ne2 : j ≠ 2
ppj : PPow2 j
this✝ : j < i ^ 2
this : j ^ 2 < i ^ 2
H : Odd X Y j
⊢ ext (j ^ 2) X = 2 * ext j X + 1 ∧ ext (j ^ 2) Y = 2 * ext j Y ^ 2

State before:
case inr.h
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
z x y X Y i : M
h : Seqₛ z X Y
ppi : PPow2 i
hz : z < i
j : M
hj : j ≤ z
ne2 : j ≠ 2
ppj : PPow2 j
this✝ : j < i ^ 2
this : j ^ 2 < i ^ 2
H : Odd X Y j
⊢ ext (j ^ 2) X = 2 * ext j X + 1 ∧ ext (j ^ 2) Y = 2 * ext j Y ^ 2
Tactic:
exact H
State after:
no goals

State before:
case inr.h.hij
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚫₀
z x y X Y i : M
h : Seqₛ z X Y
ppi : PPow2 i
hz : z < i
j : M
hj : j ≤ z
ne2 : j ≠ 2
ppj : PPow2 j
this✝ : j < i ^ 2
this : j ^ 2 < i ^ 2
H : Odd X Y j
⊢ j ^ 2 < i ^ 2
Tactic:
simp [ppi.sq, ppj.sq, lt_of_le_of_lt hj hz, *]
State after:
no goals