-- 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
hx : P x * HPow.hPow (β := ℕ) (Q z) 2 = Q x * HPow.hPow (β := ℕ) (P z) 2
a :
  (P y * HPow.hPow (β := ℕ) (Q z) 3 - Q y * HPow.hPow (β := ℕ) (P z) 3) *
          (P y * HPow.hPow (β := ℕ) (Q z) 3 - W'.negY Q * HPow.hPow (β := ℕ) (P z) 3) +
        (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 x) 2 * HPow.hPow (β := ℕ) (Q z) 4 +
                        P x * Q x * HPow.hPow (β := ℕ) (P z) 2 * HPow.hPow (β := ℕ) (Q z) 2 +
                      HPow.hPow (β := ℕ) (Q x) 2 * HPow.hPow (β := ℕ) (P z) 4 -
                    W'.a₁ * P y * P z * HPow.hPow (β := ℕ) (Q z) 4 +
                  W'.a₂ * P x * HPow.hPow (β := ℕ) (P z) 2 * HPow.hPow (β := ℕ) (Q z) 4 +
                W'.a₂ * Q x * HPow.hPow (β := ℕ) (P z) 4 * HPow.hPow (β := ℕ) (Q z) 2 +
              W'.a₄ * HPow.hPow (β := ℕ) (P z) 4 * HPow.hPow (β := ℕ) (Q z) 4) *
            (Q x * HPow.hPow (β := ℕ) (P z) 2)) -
      (0 +
        (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 +
          (HPow.hPow (β := ℕ) (P x) 2 * HPow.hPow (β := ℕ) (Q z) 4 +
                        P x * Q x * HPow.hPow (β := ℕ) (P z) 2 * HPow.hPow (β := ℕ) (Q z) 2 +
                      HPow.hPow (β := ℕ) (Q x) 2 * HPow.hPow (β := ℕ) (P z) 4 -
                    W'.a₁ * P y * P z * HPow.hPow (β := ℕ) (Q z) 4 +
                  W'.a₂ * P x * HPow.hPow (β := ℕ) (P z) 2 * HPow.hPow (β := ℕ) (Q z) 4 +
                W'.a₂ * Q x * HPow.hPow (β := ℕ) (P z) 4 * HPow.hPow (β := ℕ) (Q z) 2 +
              W'.a₄ * HPow.hPow (β := ℕ) (P z) 4 * HPow.hPow (β := ℕ) (Q z) 4) *
            (P x * HPow.hPow (β := ℕ) (Q z) 2))) =
    0
⊢ (P y * HPow.hPow (β := ℕ) (Q z) 3 - Q y * HPow.hPow (β := ℕ) (P z) 3) *
      (P y * HPow.hPow (β := ℕ) (Q z) 3 - W'.negY Q * HPow.hPow (β := ℕ) (P z) 3) =
    0

Tactic:
linear_combination (norm := (rw [negY]; ring1)) Q z ^ 6 * (equation_iff P).mp hP
    - P z ^ 6 * (equation_iff Q).mp hQ + (P x ^ 2 * Q z ^ 4 + P x * Q x * P z ^ 2 * Q z ^ 2
      + Q x ^ 2 * P z ^ 4 - W'.a₁ * P y * P z * Q z ^ 4 + W'.a₂ * P x * P z ^ 2 * Q z ^ 4
      + W'.a₂ * Q x * P z ^ 4 * Q z ^ 2 + W'.a₄ * P z ^ 4 * Q z ^ 4) * hx

Premises used: HMul.hMul, WeierstrassCurve.Jacobian.negY, HSub.hSub, WeierstrassCurve.a₂, HPow.hPow, WeierstrassCurve.Jacobian.equation_iff, HAdd.hAdd, Iff.mp, WeierstrassCurve.a₄, OfNat.ofNat, WeierstrassCurve.a₁