-- Mathlib/AlgebraicGeometry/EllipticCurve/Jacobian.lean
lemma negAddY_of_Z_eq_zero_right {P Q : Fin 3 → R} (hQ : W'.Equation Q) (hQz : Q z = 0) :
    W'.negAddY P Q = (-(Q x * P z)) ^ 3 * W'.negY P

Proof state:
case a.a
R : Type r
inst✝ : CommRing R
W' : Jacobian R
P Q : Fin 3 → R
hQ : W'.Equation Q
hQz : Q z = 0
⊢ W'.negAddY P Q + (P y - W'.negY P) * P z ^ 3 * Q x ^ 3 -
      ((-(Q x * P z)) ^ 3 * W'.negY P + (P y - W'.negY P) * P z ^ 3 * Q y ^ 2) =
    0

Tactic:
rw [negAddY, negY, hQz]

Result:
case a.a
R : Type r
inst✝ : CommRing R
W' : Jacobian R
P Q : Fin 3 → R
hQ : W'.Equation Q
hQz : Q z = 0
⊢ -P y * Q x ^ 3 * P z ^ 3 + 2 * P y * Q y ^ 2 * P z ^ 3 - 3 * P x ^ 2 * Q x * Q y * P z ^ 2 * 0 +
                                          3 * P x * P y * Q x ^ 2 * P z * 0 ^ 2 +
                                        P x ^ 3 * Q y * 0 ^ 3 -
                                      2 * P y ^ 2 * Q y * 0 ^ 3 +
                                    W'.a₁ * P x * Q y ^ 2 * P z ^ 4 +
                                  W'.a₁ * P y * Q x * Q y * P z ^ 3 * 0 -
                                W'.a₁ * P x * P y * Q y * P z * 0 ^ 3 -
                              W'.a₁ * P y ^ 2 * Q x * 0 ^ 4 -
                            2 * W'.a₂ * P x * Q x * Q y * P z ^ 4 * 0 +
                          2 * W'.a₂ * P x * P y * Q x * P z * 0 ^ 4 +
                        W'.a₃ * Q y ^ 2 * P z ^ 6 -
                      W'.a₃ * P y ^ 2 * 0 ^ 6 -
                    W'.a₄ * Q x * Q y * P z ^ 6 * 0 -
                  W'.a₄ * P x * Q y * P z ^ 4 * 0 ^ 3 +
                W'.a₄ * P y * Q x * P z ^ 3 * 0 ^ 4 +
              W'.a₄ * P x * P y * P z * 0 ^ 6 -
            2 * W'.a₆ * Q y * P z ^ 6 * 0 ^ 3 +
          2 * W'.a₆ * P y * P z ^ 3 * 0 ^ 6 +
        (P y - (-P y - W'.a₁ * P x * P z - W'.a₃ * P z ^ 3)) * P z ^ 3 * Q x ^ 3 -
      ((-(Q x * P z)) ^ 3 * (-P y - W'.a₁ * P x * P z - W'.a₃ * P z ^ 3) +
        (P y - (-P y - W'.a₁ * P x * P z - W'.a₃ * P z ^ 3)) * P z ^ 3 * Q y ^ 2) =
    0

Proof state:
R : Type r
inst✝ : CommRing R
W' : Jacobian R
P Q : Fin 3 → R
hQ : W'.Equation Q
hQz : Q z = 0
⊢ W'.negAddY P Q = (-(Q x * P z)) ^ 3 * W'.negY P

Tactic:
linear_combination (norm := (rw [negAddY, negY, hQz]; ring1))
  (P y - W'.negY P) * P z ^ 3 * (equation_of_Z_eq_zero hQz).mp hQ

Result:
no goals

Proof state:
case a.a
R : Type r
inst✝ : CommRing R
W' : Jacobian R
P Q : Fin 3 → R
hQ : W'.Equation Q
hQz : Q z = 0
⊢ -P y * Q x ^ 3 * P z ^ 3 + 2 * P y * Q y ^ 2 * P z ^ 3 - 3 * P x ^ 2 * Q x * Q y * P z ^ 2 * 0 +
                                          3 * P x * P y * Q x ^ 2 * P z * 0 ^ 2 +
                                        P x ^ 3 * Q y * 0 ^ 3 -
                                      2 * P y ^ 2 * Q y * 0 ^ 3 +
                                    W'.a₁ * P x * Q y ^ 2 * P z ^ 4 +
                                  W'.a₁ * P y * Q x * Q y * P z ^ 3 * 0 -
                                W'.a₁ * P x * P y * Q y * P z * 0 ^ 3 -
                              W'.a₁ * P y ^ 2 * Q x * 0 ^ 4 -
                            2 * W'.a₂ * P x * Q x * Q y * P z ^ 4 * 0 +
                          2 * W'.a₂ * P x * P y * Q x * P z * 0 ^ 4 +
                        W'.a₃ * Q y ^ 2 * P z ^ 6 -
                      W'.a₃ * P y ^ 2 * 0 ^ 6 -
                    W'.a₄ * Q x * Q y * P z ^ 6 * 0 -
                  W'.a₄ * P x * Q y * P z ^ 4 * 0 ^ 3 +
                W'.a₄ * P y * Q x * P z ^ 3 * 0 ^ 4 +
              W'.a₄ * P x * P y * P z * 0 ^ 6 -
            2 * W'.a₆ * Q y * P z ^ 6 * 0 ^ 3 +
          2 * W'.a₆ * P y * P z ^ 3 * 0 ^ 6 +
        (P y - (-P y - W'.a₁ * P x * P z - W'.a₃ * P z ^ 3)) * P z ^ 3 * Q x ^ 3 -
      ((-(Q x * P z)) ^ 3 * (-P y - W'.a₁ * P x * P z - W'.a₃ * P z ^ 3) +
        (P y - (-P y - W'.a₁ * P x * P z - W'.a₃ * P z ^ 3)) * P z ^ 3 * Q y ^ 2) =
    0

Tactic:
ring1

Result:
no goals