Module: Mathlib.LinearAlgebra.Reflection

Goal state before:
pp: case succ
R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
f g : Dual R M
hf : f x = 2
hg : g y = 2
z : M
t : R
ht : t = f y * g x - 2
m : ℕ
S_eval_t_sub_two :
  ∀ (k : ℤ), Polynomial.eval t (S R (k - 2)) = t * Polynomial.eval t (S R (k - 1)) - Polynomial.eval t (S R k)
S_eval_t_sq_add_S_eval_t_sq :
  ∀ (k : ℤ),
    Polynomial.eval t (S R k) ^ 2 + Polynomial.eval t (S R (k + 1)) ^ 2 -
        t * Polynomial.eval t (S R k) * Polynomial.eval t (S R (k + 1)) =
      1
k : ℤ := ↑m / 2
ih :
  ((reflection hf * reflection hg) ^ m) z =
    z +
        (Polynomial.eval t (S R ((↑m - 2) / 2)) *
            (Polynomial.eval t (S R ((↑m - 1) / 2)) + Polynomial.eval t (S R ((↑m - 3) / 2)))) •
          ((g x * f z - g z) • y - f z • x) +
      (Polynomial.eval t (S R ((↑m - 1) / 2)) * (Polynomial.eval t (S R k) + Polynomial.eval t (S R ((↑m - 2) / 2)))) •
        ((f y * g z - f z) • x - g z • y)
e : ℤ := ↑m % 2
⊢ z - f z • x - g z • (y - f y • x) +
        (Polynomial.eval t (S R ((2 * k + e - 2) / 2)) *
            (Polynomial.eval t (S R ((2 * k + e - 1) / 2)) + Polynomial.eval t (S R ((2 * k + e - 3) / 2)))) •
          ((g x * f z - g z) • (y - f y • x - 2 • (y - f y • x)) - f z • (x - 2 • x - g x • (y - f y • x))) +
      (Polynomial.eval t (S R ((2 * k + e - 1) / 2)) *
          (Polynomial.eval t (S R ((2 * k + e) / 2)) + Polynomial.eval t (S R ((2 * k + e - 2) / 2)))) •
        ((f y * g z - f z) • (x - 2 • x - g x • (y - f y • x)) - g z • (y - f y • x - 2 • (y - f y • x))) =
    z +
        (Polynomial.eval t (S R ((2 * k + e + 1 - 2) / 2)) *
            (Polynomial.eval t (S R ((2 * k + e + 1 - 1) / 2)) + Polynomial.eval t (S R ((2 * k + e + 1 - 3) / 2)))) •
          ((g x * f z - g z) • y - f z • x) +
      (Polynomial.eval t (S R ((2 * k + e + 1 - 1) / 2)) *
          (Polynomial.eval t (S R ((2 * k + e + 1) / 2)) + Polynomial.eval t (S R ((2 * k + e + 1 - 2) / 2)))) •
        ((f y * g z - f z) • x - g z • y)

Tactic:
simp_rw [add_assoc (2 * k), add_sub_assoc (2 * k), add_comm (2 * k),
      add_mul_ediv_left _ k (by simp : (2 : ℤ) ≠ 0)]

Goal state after:
case succ
R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
f g : Dual R M
hf : f x = 2
hg : g y = 2
z : M
t : R
ht : t = f y * g x - 2
m : ℕ
S_eval_t_sub_two :
  ∀ (k : ℤ), Polynomial.eval t (S R (k - 2)) = t * Polynomial.eval t (S R (k - 1)) - Polynomial.eval t (S R k)
S_eval_t_sq_add_S_eval_t_sq :
  ∀ (k : ℤ),
    Polynomial.eval t (S R k) ^ 2 + Polynomial.eval t (S R (k + 1)) ^ 2 -
        t * Polynomial.eval t (S R k) * Polynomial.eval t (S R (k + 1)) =
      1
k : ℤ := ↑m / 2
ih :
  ((reflection hf * reflection hg) ^ m) z =
    z +
        (Polynomial.eval t (S R ((↑m - 2) / 2)) *
            (Polynomial.eval t (S R ((↑m - 1) / 2)) + Polynomial.eval t (S R ((↑m - 3) / 2)))) •
          ((g x * f z - g z) • y - f z • x) +
      (Polynomial.eval t (S R ((↑m - 1) / 2)) * (Polynomial.eval t (S R k) + Polynomial.eval t (S R ((↑m - 2) / 2)))) •
        ((f y * g z - f z) • x - g z • y)
e : ℤ := ↑m % 2
⊢ z - f z • x - g z • (y - f y • x) +
        (Polynomial.eval t (S R ((e - 2) / 2 + k)) *
            (Polynomial.eval t (S R ((e - 1) / 2 + k)) + Polynomial.eval t (S R ((e - 3) / 2 + k)))) •
          ((g x * f z - g z) • (y - f y • x - 2 • (y - f y • x)) - f z • (x - 2 • x - g x • (y - f y • x))) +
      (Polynomial.eval t (S R ((e - 1) / 2 + k)) *
          (Polynomial.eval t (S R (e / 2 + k)) + Polynomial.eval t (S R ((e - 2) / 2 + k)))) •
        ((f y * g z - f z) • (x - 2 • x - g x • (y - f y • x)) - g z • (y - f y • x - 2 • (y - f y • x))) =
    z +
        (Polynomial.eval t (S R ((e + 1 - 2) / 2 + k)) *
            (Polynomial.eval t (S R ((e + 1 - 1) / 2 + k)) + Polynomial.eval t (S R ((e + 1 - 3) / 2 + k)))) •
          ((g x * f z - g z) • y - f z • x) +
      (Polynomial.eval t (S R ((e + 1 - 1) / 2 + k)) *
          (Polynomial.eval t (S R ((e + 1) / 2 + k)) + Polynomial.eval t (S R ((e + 1 - 2) / 2 + k)))) •
        ((f y * g z - f z) • x - g z • y)