-- Module: Mathlib.AlgebraicGeometry.EllipticCurve.Jacobian.Formula
Goal:
R : Type r
inst : CommRing R
W' : Jacobian R
P Q : Fin 3 → R
hP : W'.Equation P
hQ : W'.Equation Q
a :
  (P x * HPow.hPow (β := ℕ) (Q x) 2 * HPow.hPow (β := ℕ) (P z) 2 - 2 * P y * Q y * P z * Q z +
                            HPow.hPow (β := ℕ) (P x) 2 * Q x * HPow.hPow (β := ℕ) (Q z) 2 -
                          W'.a₁ * P x * Q y * HPow.hPow (β := ℕ) (P z) 2 * Q z -
                        W'.a₁ * P y * Q x * P z * HPow.hPow (β := ℕ) (Q z) 2 +
                      2 * W'.a₂ * P x * Q x * HPow.hPow (β := ℕ) (P z) 2 * HPow.hPow (β := ℕ) (Q z) 2 -
                    W'.a₃ * Q y * HPow.hPow (β := ℕ) (P z) 4 * Q z -
                  W'.a₃ * P y * P z * HPow.hPow (β := ℕ) (Q z) 4 +
                W'.a₄ * Q x * HPow.hPow (β := ℕ) (P z) 4 * HPow.hPow (β := ℕ) (Q z) 2 +
              W'.a₄ * P x * HPow.hPow (β := ℕ) (P z) 2 * HPow.hPow (β := ℕ) (Q z) 4 +
            2 * W'.a₆ * HPow.hPow (β := ℕ) (P z) 4 * HPow.hPow (β := ℕ) (Q z) 4) *
          HPow.hPow (β := ℕ) (P z * Q z) 2 +
        (-HPow.hPow (β := ℕ) (Q z) 6 * 0 +
          HPow.hPow (β := ℕ) (P z) 6 *
            (HPow.hPow (β := ℕ) (Q y) 2 + W'.a₁ * Q x * Q y * Q z + W'.a₃ * Q y * HPow.hPow (β := ℕ) (Q z) 3 -
              (HPow.hPow (β := ℕ) (Q x) 3 + W'.a₂ * HPow.hPow (β := ℕ) (Q x) 2 * HPow.hPow (β := ℕ) (Q z) 2 +
                  W'.a₄ * Q x * HPow.hPow (β := ℕ) (Q z) 4 +
                W'.a₆ * HPow.hPow (β := ℕ) (Q z) 6))) -
      (HPow.hPow (β := ℕ) (P y * HPow.hPow (β := ℕ) (Q z) 3 - Q y * HPow.hPow (β := ℕ) (P z) 3) 2 +
                W'.a₁ * (P y * HPow.hPow (β := ℕ) (Q z) 3 - Q y * HPow.hPow (β := ℕ) (P z) 3) * P z * Q z *
                  (P x * HPow.hPow (β := ℕ) (Q z) 2 - Q x * HPow.hPow (β := ℕ) (P z) 2) -
              W'.a₂ * HPow.hPow (β := ℕ) (P z) 2 * HPow.hPow (β := ℕ) (Q z) 2 *
                HPow.hPow (β := ℕ) (P x * HPow.hPow (β := ℕ) (Q z) 2 - Q x * HPow.hPow (β := ℕ) (P z) 2) 2 -
            P x * HPow.hPow (β := ℕ) (Q z) 2 *
              HPow.hPow (β := ℕ) (P x * HPow.hPow (β := ℕ) (Q z) 2 - Q x * HPow.hPow (β := ℕ) (P z) 2) 2 -
          Q x * HPow.hPow (β := ℕ) (P z) 2 *
            HPow.hPow (β := ℕ) (P x * HPow.hPow (β := ℕ) (Q z) 2 - Q x * HPow.hPow (β := ℕ) (P z) 2) 2 +
        (-HPow.hPow (β := ℕ) (Q z) 6 *
            (HPow.hPow (β := ℕ) (P y) 2 + W'.a₁ * P x * P y * P z + W'.a₃ * P y * HPow.hPow (β := ℕ) (P z) 3 -
              (HPow.hPow (β := ℕ) (P x) 3 + W'.a₂ * HPow.hPow (β := ℕ) (P x) 2 * HPow.hPow (β := ℕ) (P z) 2 +
                  W'.a₄ * P x * HPow.hPow (β := ℕ) (P z) 4 +
                W'.a₆ * HPow.hPow (β := ℕ) (P z) 6)) +
          HPow.hPow (β := ℕ) (P z) 6 * 0)) =
    0
⊢ W'.addX P Q * HPow.hPow (β := ℕ) (P z * Q z) 2 +
        (-HPow.hPow (β := ℕ) (Q z) 6 * 0 +
          HPow.hPow (β := ℕ) (P z) 6 *
            (HPow.hPow (β := ℕ) (Q y) 2 + W'.a₁ * Q x * Q y * Q z + W'.a₃ * Q y * HPow.hPow (β := ℕ) (Q z) 3 -
              (HPow.hPow (β := ℕ) (Q x) 3 + W'.a₂ * HPow.hPow (β := ℕ) (Q x) 2 * HPow.hPow (β := ℕ) (Q z) 2 +
                  W'.a₄ * Q x * HPow.hPow (β := ℕ) (Q z) 4 +
                W'.a₆ * HPow.hPow (β := ℕ) (Q z) 6))) -
      (HPow.hPow (β := ℕ) (P y * HPow.hPow (β := ℕ) (Q z) 3 - Q y * HPow.hPow (β := ℕ) (P z) 3) 2 +
                W'.a₁ * (P y * HPow.hPow (β := ℕ) (Q z) 3 - Q y * HPow.hPow (β := ℕ) (P z) 3) * P z * Q z * addZ P Q -
              W'.a₂ * HPow.hPow (β := ℕ) (P z) 2 * HPow.hPow (β := ℕ) (Q z) 2 * HPow.hPow (β := ℕ) (addZ P Q) 2 -
            P x * HPow.hPow (β := ℕ) (Q z) 2 * HPow.hPow (β := ℕ) (addZ P Q) 2 -
          Q x * HPow.hPow (β := ℕ) (P z) 2 * HPow.hPow (β := ℕ) (addZ P Q) 2 +
        (-HPow.hPow (β := ℕ) (Q z) 6 *
            (HPow.hPow (β := ℕ) (P y) 2 + W'.a₁ * P x * P y * P z + W'.a₃ * P y * HPow.hPow (β := ℕ) (P z) 3 -
              (HPow.hPow (β := ℕ) (P x) 3 + W'.a₂ * HPow.hPow (β := ℕ) (P x) 2 * HPow.hPow (β := ℕ) (P z) 2 +
                  W'.a₄ * P x * HPow.hPow (β := ℕ) (P z) 4 +
                W'.a₆ * HPow.hPow (β := ℕ) (P z) 6)) +
          HPow.hPow (β := ℕ) (P z) 6 * 0)) =
    0

Tactic:
rw [addX, addZ]

Premises used: WeierstrassCurve.Jacobian.addZ, WeierstrassCurve.Jacobian.addX