-- Module: Mathlib.AlgebraicGeometry.EllipticCurve.Projective.Formula
Goal:
R : Type r
S : Type s
inst : CommRing R
inst_1 : CommRing S
W' : Projective R
f : R →+* S
P Q : Fin 3 → R
simp :
  -3 * HPow.hPow (α := S) (β := ℕ) (((⇑f : (a : R) → S) ∘ P) x) 2 * ((⇑f : (a : R) → S) ∘ Q) x *
                            ((⇑f : (a : R) → S) ∘ Q) z +
                          HMul.hMul (α := S) 3 (((⇑f : (a : R) → S) ∘ P) x) *
                              HPow.hPow (α := S) (β := ℕ) (((⇑f : (a : R) → S) ∘ Q) x) 2 *
                            ((⇑f : (a : R) → S) ∘ P) z +
                        HPow.hPow (α := S) (β := ℕ) (((⇑f : (a : R) → S) ∘ P) y) 2 *
                          HPow.hPow (α := S) (β := ℕ) (((⇑f : (a : R) → S) ∘ Q) z) 2 -
                      HPow.hPow (α := S) (β := ℕ) (((⇑f : (a : R) → S) ∘ Q) y) 2 *
                        HPow.hPow (α := S) (β := ℕ) (((⇑f : (a : R) → S) ∘ P) z) 2 +
                    (W'.map f).a₁ * ((⇑f : (a : R) → S) ∘ P) x * ((⇑f : (a : R) → S) ∘ P) y *
                      HPow.hPow (α := S) (β := ℕ) (((⇑f : (a : R) → S) ∘ Q) z) 2 -
                  (W'.map f).a₁ * ((⇑f : (a : R) → S) ∘ Q) x * ((⇑f : (a : R) → S) ∘ Q) y *
                    HPow.hPow (α := S) (β := ℕ) (((⇑f : (a : R) → S) ∘ P) z) 2 -
                (W'.map f).a₂ * HPow.hPow (α := S) (β := ℕ) (((⇑f : (a : R) → S) ∘ P) x) 2 *
                  HPow.hPow (α := S) (β := ℕ) (((⇑f : (a : R) → S) ∘ Q) z) 2 +
              (W'.map f).a₂ * HPow.hPow (α := S) (β := ℕ) (((⇑f : (a : R) → S) ∘ Q) x) 2 *
                HPow.hPow (α := S) (β := ℕ) (((⇑f : (a : R) → S) ∘ P) z) 2 +
            (W'.map f).a₃ * ((⇑f : (a : R) → S) ∘ P) y * ((⇑f : (a : R) → S) ∘ P) z *
              HPow.hPow (α := S) (β := ℕ) (((⇑f : (a : R) → S) ∘ Q) z) 2 -
          (W'.map f).a₃ * ((⇑f : (a : R) → S) ∘ Q) y * HPow.hPow (α := S) (β := ℕ) (((⇑f : (a : R) → S) ∘ P) z) 2 *
            ((⇑f : (a : R) → S) ∘ Q) z -
        (W'.map f).a₄ * ((⇑f : (a : R) → S) ∘ P) x * ((⇑f : (a : R) → S) ∘ P) z *
          HPow.hPow (α := S) (β := ℕ) (((⇑f : (a : R) → S) ∘ Q) z) 2 +
      (W'.map f).a₄ * ((⇑f : (a : R) → S) ∘ Q) x * HPow.hPow (α := S) (β := ℕ) (((⇑f : (a : R) → S) ∘ P) z) 2 *
        ((⇑f : (a : R) → S) ∘ Q) z =
    (f : (a : R) → S)
      (-3 * HPow.hPow (β := ℕ) (P x) 2 * Q x * Q z + 3 * P x * HPow.hPow (β := ℕ) (Q x) 2 * P z +
                          HPow.hPow (β := ℕ) (P y) 2 * HPow.hPow (β := ℕ) (Q z) 2 -
                        HPow.hPow (β := ℕ) (Q y) 2 * HPow.hPow (β := ℕ) (P z) 2 +
                      W'.a₁ * P x * P y * HPow.hPow (β := ℕ) (Q z) 2 -
                    W'.a₁ * Q x * Q y * HPow.hPow (β := ℕ) (P z) 2 -
                  W'.a₂ * HPow.hPow (β := ℕ) (P x) 2 * HPow.hPow (β := ℕ) (Q z) 2 +
                W'.a₂ * HPow.hPow (β := ℕ) (Q x) 2 * HPow.hPow (β := ℕ) (P z) 2 +
              W'.a₃ * P y * P z * HPow.hPow (β := ℕ) (Q z) 2 -
            W'.a₃ * Q y * HPow.hPow (β := ℕ) (P z) 2 * Q z -
          W'.a₄ * P x * P z * HPow.hPow (β := ℕ) (Q z) 2 +
        W'.a₄ * Q x * HPow.hPow (β := ℕ) (P z) 2 * Q z)
⊢ (W'.map f).addZ ((⇑f : (a : R) → S) ∘ P) ((⇑f : (a : R) → S) ∘ Q) = (f : (a : R) → S) (W'.addZ P Q)

Tactic:
simp only [addZ]

Premises used: WeierstrassCurve.Projective.addZ