lemma variableChange_comp (C C' : VariableChange R) (W : WeierstrassCurve R) :
    W.variableChange (C.comp C') = (W.variableChange C').variableChange C := by
  simp only [VariableChange.comp, variableChange]
  ext <;> simp only [mul_inv, Units.val_mul]
  · linear_combination (norm := ring1) ↑C.u⁻¹ * C.s * 2 * C'.u.inv_mul
  · linear_combination (norm := ring1)
      C.s * (-C'.s * 2 - W.a₁) * (↑C.u⁻¹ : R) ^ 2 * ↑C'.u⁻¹ * C'.u.inv_mul
        + (C.r * 3 - C.s ^ 2) * (↑C.u⁻¹ : R) ^ 2 * pow_mul_pow_eq_one 2 C'.u.inv_mul
  · linear_combination (norm := ring1)
      C.r * (C'.s * 2 + W.a₁) * (↑C.u⁻¹ : R) ^ 3 * ↑C'.u⁻¹ * pow_mul_pow_eq_one 2 C'.u.inv_mul
        + C.t * 2 * (↑C.u⁻¹ : R) ^ 3 * pow_mul_pow_eq_one 3 C'.u.inv_mul
  · linear_combination (norm := ring1)
      C.s * (-W.a₃ - C'.r * W.a₁ - C'.t * 2) * (↑C.u⁻¹ : R) ^ 4 * (↑C'.u⁻¹ : R) ^ 3 * C'.u.inv_mul
        + (↑C.u⁻¹ : R) ^ 4 * (↑C'.u⁻¹ : R) ^ 2
          * (C.r * C'.r * 6 + C.r * W.a₂ * 2 - C'.s * C.r * W.a₁ * 2 - C'.s ^ 2 * C.r * 2)
          * pow_mul_pow_eq_one 2 C'.u.inv_mul
        + -(↑C.u⁻¹ : R) ^ 4
          * ↑C'.u⁻¹ * (C.s * C'.s * C.r * 2 + C.s * C.r * W.a₁ + C'.s * C.t * 2 + C.t * W.a₁)
          * pow_mul_pow_eq_one 3 C'.u.inv_mul
        + (↑C.u⁻¹ : R) ^ 4 * (C.r ^ 2 * 3 - C.s * C.t * 2) * pow_mul_pow_eq_one 4 C'.u.inv_mul
  · linear_combination (norm := 

Proof state:
case a
R : Type u
inst✝ : CommRing R
W✝ : WeierstrassCurve R
C✝ C C' : VariableChange R
W : WeierstrassCurve R
⊢ (↑C.u⁻¹ * ↑C'.u⁻¹) ^ 6 *
          (W.a₆ + (C.r * ↑C'.u ^ 2 + C'.r) * W.a₄ + (C.r * ↑C'.u ^ 2 + C'.r) ^ 2 * W.a₂ + (C.r * ↑C'.u ^ 2 + C'.r) ^ 3 -
                (C.t * ↑C'.u ^ 3 + C.r * C'.s * ↑C'.u ^ 2 + C'.t) * W.a₃ -
              (C.t * ↑C'.u ^ 3 + C.r * C'.s * ↑C'.u ^ 2 + C'.t) ^ 2 -
            (C.r * ↑C'.u ^ 2 + C'.r) * (C.t * ↑C'.u ^ 3 + C.r * C'.s * ↑C'.u ^ 2 + C'.t) * W.a₁) -
        ↑C.u⁻¹ ^ 6 *
          (↑C'.u⁻¹ ^ 6 *
                        (W.a₆ + C'.r * W.a₄ + C'.r ^ 2 * W.a₂ + C'.r ^ 3 - C'.t * W.a₃ - C'.t ^ 2 -
                          C'.r * C'.t * W.a₁) +
                      C.r *
                        (↑C'.u⁻¹ ^ 4 *
                          (W.a₄ - C'.s * W.a₃ + 2 * C'.r * W.a₂ - (C'.t + C'.r * C'.s) * W.a₁ + 3 * C'.r ^ 2 -
                            2 * C'.s * C'.t)) +
                    C.r ^ 2 * (↑C'.u⁻¹ ^ 2 * (W.a₂ - C'.s * W.a₁ + 3 * C'.r - C'.s ^ 2)) +
                  C.r ^ 3 -
                C.t * (↑C'.u⁻¹ ^ 3 * (W.a₃ + C'.r * W.a₁ + 2 * C'.t)) -
              C.t ^ 2 -
            C.r * C.t * (↑C'.u⁻¹ * (W.a₁ + 2 * C'.s))) -
      (C.r * ↑C.u⁻¹ ^ 6 * ↑C'.u⁻¹ ^ 4 *
                    (C'.r * W.a₂ * 2 - C'.r * C'.s * W.a₁ + C'.r ^ 2 * 3 + W.a₄ - C'.s * C'.t * 2 - C'.s * W.a₃ -
                      C'.t * W.a₁) *
                  (↑C'.u⁻¹ ^ 2 * ↑C'.u ^ 2) +
                -↑C.u⁻¹ ^ 6 * ↑C'.u⁻¹ ^ 3 * C.t * (C'.r * W.a₁ + C'.t * 2 + W.a₃) * (↑C'.u⁻¹ ^ 3 * ↑C'.u ^ 3) +
              C.r ^ 2 * ↑C.u⁻¹ ^ 6 * ↑C'.u⁻¹ ^ 2 * (C'.r * 3 + W.a₂ - C'.s * W.a₁ - C'.s ^ 2) *
                (↑C'.u⁻¹ ^ 4 * ↑C'.u ^ 4) +
            -C.r * C.t * ↑C.u⁻¹ ^ 6 * ↑C'.u⁻¹ * (C'.s * 2 + W.a₁) * (↑C'.u⁻¹ ^ 5 * ↑C'.u ^ 5) +
          ↑C.u⁻¹ ^ 6 * (C.r ^ 3 - C.t ^ 2) * (↑C'.u⁻¹ ^ 6 * ↑C'.u ^ 6) -
        (C.r * ↑C.u⁻¹ ^ 6 * ↑C'.u⁻¹ ^ 4 *
                    (C'.r * W.a₂ * 2 - C'.r * C'.s * W.a₁ + C'.r ^ 2 * 3 + W.a₄ - C'.s * C'.t * 2 - C'.s * W.a₃ -
                      C'.t * W.a₁) *
                  1 +
                -↑C.u⁻¹ ^ 6 * ↑C'.u⁻¹ ^ 3 * C.t * (C'.r * W.a₁ + C'.t * 2 + W.a₃) * 1 +
              C.r ^ 2 * ↑C.u⁻¹ ^ 6 * ↑C'.u⁻¹ ^ 2 * (C'.r * 3 + W.a₂ - C'.s * W.a₁ - C'.s ^ 2) * 1 +
            -C.r * C.t * ↑C.u⁻¹ ^ 6 * ↑C'.u⁻¹ * (C'.s * 2 + W.a₁) * 1 +
          ↑C.u⁻¹ ^ 6 * (C.r ^ 3 - C.t ^ 2) * 1)) =
    0

Next tactic:
ring1