Theorem: Polynomial.Chebyshev.mul_T
File: Mathlib/RingTheory/Polynomial/Chebyshev.lean

tactic: simp [two_mul, add_mul]
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
⊢ ∀ (k : ℕ), 2 * T R 0 * T R (0 + k) = T R (2 * 0 + k) + T R k

tactic: simp [add_comm]
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
⊢ ∀ (k : ℕ), 2 * T R 1 * T R (1 + k) = T R (2 * 1 + k) + T R k

tactic: intro k
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
m : ℕ
⊢ ∀ (k : ℕ), 2 * T R (m + 2) * T R (m + 2 + k) = T R (2 * (m + 2) + k) + T R k

tactic: suffices 2 * T R (m + 2) * T R (m + k + 2) = T R (2 * m + k + 4) + T R k by
  have h_nat₁ : 2 * (m + 2) + k = 2 * m + k + 4 := by ring
  have h_nat₂ : m + 2 + k = m + k + 2 := by ring
  simpa [h_nat₁, h_nat₂] using this
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
m k : ℕ
⊢ 2 * T R (m + 2) * T R (m + 2 + k) = T R (2 * (m + 2) + k) + T R k

tactic: have H₁ : 2 * T R (m + 1) * T R (m + k + 2) = T R (2 * m + k + 3) + T R (k + 1) := by
  have h_nat₁ : m + 1 + (k + 1) = m + k + 2 := by ring
  have h_nat₂ : 2 * (m + 1) + (k + 1) = 2 * m + k + 3 := by ring
  simpa [h_nat₁, h_nat₂] using mul_T (m + 1) (k + 1)
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
m k : ℕ
⊢ 2 * T R (m + 2) * T R (m + k + 2) = T R (2 * m + k + 4) + T R k

tactic: have H₂ : 2 * T R m * T R (m + k + 2) = T R (2 * m + k + 2) + T R (k + 2) := by
  have h_nat₁ : 2 * m + (k + 2) = 2 * m + k + 2 := by simp [add_assoc]
  have h_nat₂ : m + (k + 2) = m + k + 2 := by simp [add_assoc]
  simpa [h_nat₁, h_nat₂] using mul_T m (k + 2)
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
m k : ℕ
H₁ : 2 * T R (m + 1) * T R (m + k + 2) = T R (2 * m + k + 3) + T R (k + 1)
⊢ 2 * T R (m + 2) * T R (m + k + 2) = T R (2 * m + k + 4) + T R k

tactic: have h₁ := T_add_two R m
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
m k : ℕ
H₁ : 2 * T R (m + 1) * T R (m + k + 2) = T R (2 * m + k + 3) + T R (k + 1)
H₂ : 2 * T R m * T R (m + k + 2) = T R (2 * m + k + 2) + T R (k + 2)
⊢ 2 * T R (m + 2) * T R (m + k + 2) = T R (2 * m + k + 4) + T R k

tactic: have h₂ : T R (2 * m + k + 4) = 2 * X * T R (2 * m + k + 3) - T R (2 * m + k + 2) :=
  T_add_two R (2 * m + k + 2)
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
m k : ℕ
H₁ : 2 * T R (m + 1) * T R (m + k + 2) = T R (2 * m + k + 3) + T R (k + 1)
H₂ : 2 * T R m * T R (m + k + 2) = T R (2 * m + k + 2) + T R (k + 2)
h₁ : T R (m + 2) = 2 * X * T R (m + 1) - T R m
⊢ 2 * T R (m + 2) * T R (m + k + 2) = T R (2 * m + k + 4) + T R k

tactic: have h₃ := T_add_two R k
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
m k : ℕ
H₁ : 2 * T R (m + 1) * T R (m + k + 2) = T R (2 * m + k + 3) + T R (k + 1)
H₂ : 2 * T R m * T R (m + k + 2) = T R (2 * m + k + 2) + T R (k + 2)
h₁ : T R (m + 2) = 2 * X * T R (m + 1) - T R m
h₂ : T R (2 * m + k + 4) = 2 * X * T R (2 * m + k + 3) - T R (2 * m + k + 2)
⊢ 2 * T R (m + 2) * T R (m + k + 2) = T R (2 * m + k + 4) + T R k

tactic: linear_combination 2 * T R (m + k + 2) * h₁ + 2 * (X : R[X]) * H₁ - H₂ - h₂ - h₃
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
m k : ℕ
H₁ : 2 * T R (m + 1) * T R (m + k + 2) = T R (2 * m + k + 3) + T R (k + 1)
H₂ : 2 * T R m * T R (m + k + 2) = T R (2 * m + k + 2) + T R (k + 2)
h₁ : T R (m + 2) = 2 * X * T R (m + 1) - T R m
h₂ : T R (2 * m + k + 4) = 2 * X * T R (2 * m + k + 3) - T R (2 * m + k + 2)
h₃ : T R (k + 2) = 2 * X * T R (k + 1) - T R k
⊢ 2 * T R (m + 2) * T R (m + k + 2) = T R (2 * m + k + 4) + T R k

tactic: have h_nat₁ : 2 * (m + 2) + k = 2 * m + k + 4 := by ring
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
m k : ℕ
this : 2 * T R (m + 2) * T R (m + k + 2) = T R (2 * m + k + 4) + T R k
⊢ 2 * T R (m + 2) * T R (m + 2 + k) = T R (2 * (m + 2) + k) + T R k

tactic: have h_nat₂ : m + 2 + k = m + k + 2 := by ring
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
m k : ℕ
this : 2 * T R (m + 2) * T R (m + k + 2) = T R (2 * m + k + 4) + T R k
h_nat₁ : 2 * (m + 2) + k = 2 * m + k + 4
⊢ 2 * T R (m + 2) * T R (m + 2 + k) = T R (2 * (m + 2) + k) + T R k

tactic: simpa [h_nat₁, h_nat₂] using this
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
m k : ℕ
this : 2 * T R (m + 2) * T R (m + k + 2) = T R (2 * m + k + 4) + T R k
h_nat₁ : 2 * (m + 2) + k = 2 * m + k + 4
h_nat₂ : m + 2 + k = m + k + 2
⊢ 2 * T R (m + 2) * T R (m + 2 + k) = T R (2 * (m + 2) + k) + T R k

tactic: ring
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
m k : ℕ
this : 2 * T R (m + 2) * T R (m + k + 2) = T R (2 * m + k + 4) + T R k
⊢ 2 * (m + 2) + k = 2 * m + k + 4

tactic: ring
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
m k : ℕ
this : 2 * T R (m + 2) * T R (m + k + 2) = T R (2 * m + k + 4) + T R k
h_nat₁ : 2 * (m + 2) + k = 2 * m + k + 4
⊢ m + 2 + k = m + k + 2

tactic: have h_nat₁ : m + 1 + (k + 1) = m + k + 2 := by ring
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
m k : ℕ
⊢ 2 * T R (m + 1) * T R (m + k + 2) = T R (2 * m + k + 3) + T R (k + 1)

tactic: have h_nat₂ : 2 * (m + 1) + (k + 1) = 2 * m + k + 3 := by ring
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
m k : ℕ
h_nat₁ : m + 1 + (k + 1) = m + k + 2
⊢ 2 * T R (m + 1) * T R (m + k + 2) = T R (2 * m + k + 3) + T R (k + 1)

tactic: simpa [h_nat₁, h_nat₂] using mul_T (m + 1) (k + 1)
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
m k : ℕ
h_nat₁ : m + 1 + (k + 1) = m + k + 2
h_nat₂ : 2 * (m + 1) + (k + 1) = 2 * m + k + 3
⊢ 2 * T R (m + 1) * T R (m + k + 2) = T R (2 * m + k + 3) + T R (k + 1)

tactic: ring
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
m k : ℕ
⊢ m + 1 + (k + 1) = m + k + 2

tactic: ring
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
m k : ℕ
h_nat₁ : m + 1 + (k + 1) = m + k + 2
⊢ 2 * (m + 1) + (k + 1) = 2 * m + k + 3

tactic: have h_nat₁ : 2 * m + (k + 2) = 2 * m + k + 2 := by simp [add_assoc]
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
m k : ℕ
H₁ : 2 * T R (m + 1) * T R (m + k + 2) = T R (2 * m + k + 3) + T R (k + 1)
⊢ 2 * T R m * T R (m + k + 2) = T R (2 * m + k + 2) + T R (k + 2)

tactic: have h_nat₂ : m + (k + 2) = m + k + 2 := by simp [add_assoc]
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
m k : ℕ
H₁ : 2 * T R (m + 1) * T R (m + k + 2) = T R (2 * m + k + 3) + T R (k + 1)
h_nat₁ : 2 * m + (k + 2) = 2 * m + k + 2
⊢ 2 * T R m * T R (m + k + 2) = T R (2 * m + k + 2) + T R (k + 2)

tactic: simpa [h_nat₁, h_nat₂] using mul_T m (k + 2)
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
m k : ℕ
H₁ : 2 * T R (m + 1) * T R (m + k + 2) = T R (2 * m + k + 3) + T R (k + 1)
h_nat₁ : 2 * m + (k + 2) = 2 * m + k + 2
h_nat₂ : m + (k + 2) = m + k + 2
⊢ 2 * T R m * T R (m + k + 2) = T R (2 * m + k + 2) + T R (k + 2)

tactic: simp [add_assoc]
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
m k : ℕ
H₁ : 2 * T R (m + 1) * T R (m + k + 2) = T R (2 * m + k + 3) + T R (k + 1)
⊢ 2 * m + (k + 2) = 2 * m + k + 2

tactic: simp [add_assoc]
state_before: R : Type u_1
S : Type ?u.100205
inst✝¹ : CommRing R
inst✝ : CommRing S
m k : ℕ
H₁ : 2 * T R (m + 1) * T R (m + k + 2) = T R (2 * m + k + 3) + T R (k + 1)
h_nat₁ : 2 * m + (k + 2) = 2 * m + k + 2
⊢ m + (k + 2) = m + k + 2