-- Mathlib/AlgebraicGeometry/EllipticCurve/Projective.lean
lemma dblX_eq' {P : Fin 3 → R} (hP : W'.Equation P) : W'.dblX P * P z =
    (eval P W'.polynomialX ^ 2 - W'.a₁ * eval P W'.polynomialX * P z * (P y - W'.negY P)
      - W'.a₂ * P z ^ 2 * (P y - W'.negY P) ^ 2 - 2 * P x * P z * (P y - W'.negY P) ^ 2)
      * (P y - W'.negY P)

Proof state:
case a.a
R : Type r
inst✝ : CommRing R
W' : Projective R
P : Fin 3 → R
hP : W'.Equation P
⊢ W'.dblX P * P z + 9 * (W'.a₁ * P x ^ 2 + 2 * P x * P y) * 0 -
      (((eval P) W'.polynomialX ^ 2 - W'.a₁ * (eval P) W'.polynomialX * P z * (P y - W'.negY P) -
              W'.a₂ * P z ^ 2 * (P y - W'.negY P) ^ 2 -
            2 * P x * P z * (P y - W'.negY P) ^ 2) *
          (P y - W'.negY P) +
        9 * (W'.a₁ * P x ^ 2 + 2 * P x * P y) *
          (P y ^ 2 * P z + W'.a₁ * P x * P y * P z + W'.a₃ * P y * P z ^ 2 -
            (P x ^ 3 + W'.a₂ * P x ^ 2 * P z + W'.a₄ * P x * P z ^ 2 + W'.a₆ * P z ^ 3))) =
    0

Tactic:
rw [dblX, eval_polynomialX, negY]

Result:
case a.a
R : Type r
inst✝ : CommRing R
W' : Projective R
P : Fin 3 → R
hP : W'.Equation P
⊢ (⋯ + ⋯ + ⋯ * P y - 8 * W'.a₂ * P y ^ 3 * P z + 9 * W'.a₃ * P x ^ 4 - 6 * W'.a₃ * P x * P y ^ 2 * P z -
                                                                                              6 * W'.a₄ * P x ^ 2 *
                                                                                                  P y *
                                                                                                P z -
                                                                                            18 * W'.a₆ * P x * P y *
                                                                                              P z ^ 2 +
                                                                                          3 * W'.a₁ ^ 2 * P x ^ 3 *
                                                                                            P y -
                                                                                        2 * W'.a₁ ^ 2 * P y ^ 3 * P z +
                                                                                      3 * W'.a₁ * W'.a₂ * P x ^ 4 -
                                                                                    12 * W'.a₁ * W'.a₂ * P x * P y ^ 2 *
                                                                                      P z -
                                                                                  9 * W'.a₁ * W'.a₃ * P x ^ 2 * P y *
                                                                                    P z -
                                                                                3 * W'.a₁ * W'.a₄ * P x ^ 3 * P z -
                                                                              9 * W'.a₁ * W'.a₆ * P x ^ 2 * P z ^ 2 +
                                                                            8 * W'.a₂ ^ 2 * P x ^ 2 * P y * P z +
                                                                          12 * W'.a₂ * W'.a₃ * P x ^ 3 * P z -
                                                                        12 * W'.a₂ * W'.a₃ * P y ^ 2 * P z ^ 2 +
                                                                      8 * W'.a₂ * W'.a₄ * P x * P y * P z ^ 2 -
                                                                    12 * W'.a₃ ^ 2 * P x * P y * P z ^ 2 +
                                                                  6 * W'.a₃ * W'.a₄ * P x ^ 2 * P z ^ 2 +
                                                                2 * W'.a₄ ^ 2 * P y * P z ^ 3 +
                                                              W'.a₁ ^ 3 * P x ^ 4 -
                                                            3 * W'.a₁ ^ 3 * P x * P y ^ 2 * P z -
                                                          2 * W'.a₁ ^ 2 * W'.a₂ * P x ^ 2 * P y * P z -
                                                        3 * W'.a₁ ^ 2 * W'.a₃ * P y ^ 2 * P z ^ 2 +
                                                      2 * W'.a₁ ^ 2 * W'.a₄ * P x * P y * P z ^ 2 +
                                                    4 * W'.a₁ * W'.a₂ ^ 2 * P x ^ 3 * P z -
                                                  8 * W'.a₁ * W'.a₂ * W'.a₃ * P x * P y * P z ^ 2 +
                                                4 * W'.a₁ * W'.a₂ * W'.a₄ * P x ^ 2 * P z ^ 2 -
                                              3 * W'.a₁ * W'.a₃ ^ 2 * P x ^ 2 * P z ^ 2 +
                                            2 * W'.a₁ * W'.a₃ * W'.a₄ * P y * P z ^ 3 +
                                          W'.a₁ * W'.a₄ ^ 2 * P x * P z ^ 3 +
                                        4 * W'.a₂ ^ 2 * W'.a₃ * P x ^ 2 * P z ^ 2 -
                                      6 * W'.a₂ * W'.a₃ ^ 2 * P y * P z ^ 3 +
                                    4 * W'.a₂ * W'.a₃ * W'.a₄ * P x * P z ^ 3 -
                                  2 * W'.a₃ ^ 3 * P x * P z ^ 3 +
                                W'.a₃ * W'.a₄ ^ 2 * P z ^ 4 -
                              W'.a₁ ^ 4 * P x ^ 2 * P y * P z +
                            W'.a₁ ^ 3 * W'.a₂ * P x ^ 3 * P z -
                          2 * W'.a₁ ^ 3 * W'.a₃ * P x * P y * P z ^ 2 +
                        W'.a₁ ^ 3 * W'.a₄ * P x ^ 2 * P z ^ 2 +
                      W'.a₁ ^ 2 * W'.a₂ * W'.a₃ * P x ^ 2 * P z ^ 2 -
                    W'.a₁ ^ 2 * W'.a₃ ^ 2 * P y * P z ^ 3 +
                  2 * W'.a₁ ^ 2 * W'.a₃ * W'.a₄ * P x * P z ^ 3 -
                W'.a₁ * W'.a₂ * W'.a₃ ^ 2 * P x * P z ^ 3 -
              W'.a₂ * W'.a₃ ^ 3 * P z ^ 4 +
            W'.a₁ * W'.a₃ ^ 2 * W'.a₄ * P z ^ 4) *
          P z +
        9 * (W'.a₁ * P x ^ 2 + 2 * P x * P y) * 0 -
      (((W'.a₁ * P y * P z - (3 * P x ^ 2 + 2 * W'.a₂ * P x * P z + W'.a₄ * P z ^ 2)) ^ 2 -
                W'.a₁ * (W'.a₁ * P y * P z - (3 * P x ^ 2 + 2 * W'.a₂ * P x * P z + W'.a₄ * P z ^ 2)) * P z *
                  (P y - (-P y - W'.a₁ * P x - W'.a₃ * P z)) -
              W'.a₂ * P z ^ 2 * (P y - (-P y - W'.a₁ * P x - W'.a₃ * P z)) ^ 2 -
            2 * P x * P z * (P y - (-P y - W'.a₁ * P x - W'.a₃ * P z)) ^ 2) *
          (P y - (-P y - W'.a₁ * P x - W'.a₃ * P z)) +
        9 * (W'.a₁ * P x ^ 2 + 2 * P x * P y) *
          (P y ^ 2 * P z + W'.a₁ * P x * P y * P z + W'.a₃ * P y * P z ^ 2 -
            (P x ^ 3 + W'.a₂ * P x ^ 2 * P z + W'.a₄ * P x * P z ^ 2 + W'.a₆ * P z ^ 3))) =
    0

Proof state:
R : Type r
inst✝ : CommRing R
W' : Projective R
P : Fin 3 → R
hP : W'.Equation P
⊢ W'.dblX P * P z =
    ((eval P) W'.polynomialX ^ 2 - W'.a₁ * (eval P) W'.polynomialX * P z * (P y - W'.negY P) -
          W'.a₂ * P z ^ 2 * (P y - W'.negY P) ^ 2 -
        2 * P x * P z * (P y - W'.negY P) ^ 2) *
      (P y - W'.negY P)

Tactic:
linear_combination (norm := (rw [dblX, eval_polynomialX, negY]; ring1))
  9 * (W'.a₁ * P x ^ 2 + 2 * P x * P y) * (equation_iff _).mp hP

Result:
no goals