Theorem: WeierstrassCurve.Jacobian.negAddY_smul
File: Mathlib/AlgebraicGeometry/EllipticCurve/Jacobian.lean

Proof steps:
state_before: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P Q : Fin 3 → R
u v : R
⊢ W'.negAddY (u • P) (v • Q) = ((u * v) ^ 2) ^ 3 * W'.negAddY P Q
state_after: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P Q : Fin 3 → R
u v : R
⊢ -(u ^ 3 * P y) * (v ^ 2 * Q x) ^ 3 * (u * P z) ^ 3 + 2 * (u ^ 3 * P y) * (v ^ 3 * Q y) ^ 2 * (u * P z) ^ 3 -
                                        3 * (u ^ 2 * P x) ^ 2 * (v ^ 2 * Q x) * (v ^ 3 * Q y) * (u * P z) ^ 2 *
                                          (v * Q z) +
                                      3 * (u ^ 2 * P x) * (u ^ 3 * P y) * (v ^ 2 * Q x) ^ 2 * (u * P z) *
                                        (v * Q z) ^ 2 +
                                    (u ^ 2 * P x) ^ 3 * (v ^ 3 * Q y) * (v * Q z) ^ 3 -
                                  2 * (u ^ 3 * P y) ^ 2 * (v ^ 3 * Q y) * (v * Q z) ^ 3 +
                                W'.a₁ * (u ^ 2 * P x) * (v ^ 3 * Q y) ^ 2 * (u * P z) ^ 4 +
                              W'.a₁ * (u ^ 3 * P y) * (v ^ 2 * Q x) * (v ^ 3 * Q y) * (u * P z) ^ 3 * (v * Q z) -
                            W'.a₁ * (u ^ 2 * P x) * (u ^ 3 * P y) * (v ^ 3 * Q y) * (u * P z) * (v * Q z) ^ 3 -
                          W'.a₁ * (u ^ 3 * P y) ^ 2 * (v ^ 2 * Q x) * (v * Q z) ^ 4 -
                        2 * W'.a₂ * (u ^ 2 * P x) * (v ^ 2 * Q x) * (v ^ 3 * Q y) * (u * P z) ^ 4 * (v * Q z) +
                      2 * W'.a₂ * (u ^ 2 * P x) * (u ^ 3 * P y) * (v ^ 2 * Q x) * (u * P z) * (v * Q z) ^ 4 +
                    W'.a₃ * (v ^ 3 * Q y) ^ 2 * (u * P z) ^ 6 -
                  W'.a₃ * (u ^ 3 * P y) ^ 2 * (v * Q z) ^ 6 -
                W'.a₄ * (v ^ 2 * Q x) * (v ^ 3 * Q y) * (u * P z) ^ 6 * (v * Q z) -
              W'.a₄ * (u ^ 2 * P x) * (v ^ 3 * Q y) * (u * P z) ^ 4 * (v * Q z) ^ 3 +
            W'.a₄ * (u ^ 3 * P y) * (v ^ 2 * Q x) * (u * P z) ^ 3 * (v * Q z) ^ 4 +
          W'.a₄ * (u ^ 2 * P x) * (u ^ 3 * P y) * (u * P z) * (v * Q z) ^ 6 -
        2 * W'.a₆ * (v ^ 3 * Q y) * (u * P z) ^ 6 * (v * Q z) ^ 3 +
      2 * W'.a₆ * (u ^ 3 * P y) * (u * P z) ^ 3 * (v * Q z) ^ 6 =
    ((u * v) ^ 2) ^ 3 *
      (-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 * Q z +
                                        3 * P x * P y * Q x ^ 2 * P z * Q z ^ 2 +
                                      P x ^ 3 * Q y * Q z ^ 3 -
                                    2 * P y ^ 2 * Q y * Q z ^ 3 +
                                  W'.a₁ * P x * Q y ^ 2 * P z ^ 4 +
                                W'.a₁ * P y * Q x * Q y * P z ^ 3 * Q z -
                              W'.a₁ * P x * P y * Q y * P z * Q z ^ 3 -
                            W'.a₁ * P y ^ 2 * Q x * Q z ^ 4 -
                          2 * W'.a₂ * P x * Q x * Q y * P z ^ 4 * Q z +
                        2 * W'.a₂ * P x * P y * Q x * P z * Q z ^ 4 +
                      W'.a₃ * Q y ^ 2 * P z ^ 6 -
                    W'.a₃ * P y ^ 2 * Q z ^ 6 -
                  W'.a₄ * Q x * Q y * P z ^ 6 * Q z -
                W'.a₄ * P x * Q y * P z ^ 4 * Q z ^ 3 +
              W'.a₄ * P y * Q x * P z ^ 3 * Q z ^ 4 +
            W'.a₄ * P x * P y * P z * Q z ^ 6 -
          2 * W'.a₆ * Q y * P z ^ 6 * Q z ^ 3 +
        2 * W'.a₆ * P y * P z ^ 3 * Q z ^ 6)
tactic: simp only [negAddY, smul_fin3_ext]
state_before: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P Q : Fin 3 → R
u v : R
⊢ -(u ^ 3 * P y) * (v ^ 2 * Q x) ^ 3 * (u * P z) ^ 3 + 2 * (u ^ 3 * P y) * (v ^ 3 * Q y) ^ 2 * (u * P z) ^ 3 -
                                        3 * (u ^ 2 * P x) ^ 2 * (v ^ 2 * Q x) * (v ^ 3 * Q y) * (u * P z) ^ 2 *
                                          (v * Q z) +
                                      3 * (u ^ 2 * P x) * (u ^ 3 * P y) * (v ^ 2 * Q x) ^ 2 * (u * P z) *
                                        (v * Q z) ^ 2 +
                                    (u ^ 2 * P x) ^ 3 * (v ^ 3 * Q y) * (v * Q z) ^ 3 -
                                  2 * (u ^ 3 * P y) ^ 2 * (v ^ 3 * Q y) * (v * Q z) ^ 3 +
                                W'.a₁ * (u ^ 2 * P x) * (v ^ 3 * Q y) ^ 2 * (u * P z) ^ 4 +
                              W'.a₁ * (u ^ 3 * P y) * (v ^ 2 * Q x) * (v ^ 3 * Q y) * (u * P z) ^ 3 * (v * Q z) -
                            W'.a₁ * (u ^ 2 * P x) * (u ^ 3 * P y) * (v ^ 3 * Q y) * (u * P z) * (v * Q z) ^ 3 -
                          W'.a₁ * (u ^ 3 * P y) ^ 2 * (v ^ 2 * Q x) * (v * Q z) ^ 4 -
                        2 * W'.a₂ * (u ^ 2 * P x) * (v ^ 2 * Q x) * (v ^ 3 * Q y) * (u * P z) ^ 4 * (v * Q z) +
                      2 * W'.a₂ * (u ^ 2 * P x) * (u ^ 3 * P y) * (v ^ 2 * Q x) * (u * P z) * (v * Q z) ^ 4 +
                    W'.a₃ * (v ^ 3 * Q y) ^ 2 * (u * P z) ^ 6 -
                  W'.a₃ * (u ^ 3 * P y) ^ 2 * (v * Q z) ^ 6 -
                W'.a₄ * (v ^ 2 * Q x) * (v ^ 3 * Q y) * (u * P z) ^ 6 * (v * Q z) -
              W'.a₄ * (u ^ 2 * P x) * (v ^ 3 * Q y) * (u * P z) ^ 4 * (v * Q z) ^ 3 +
            W'.a₄ * (u ^ 3 * P y) * (v ^ 2 * Q x) * (u * P z) ^ 3 * (v * Q z) ^ 4 +
          W'.a₄ * (u ^ 2 * P x) * (u ^ 3 * P y) * (u * P z) * (v * Q z) ^ 6 -
        2 * W'.a₆ * (v ^ 3 * Q y) * (u * P z) ^ 6 * (v * Q z) ^ 3 +
      2 * W'.a₆ * (u ^ 3 * P y) * (u * P z) ^ 3 * (v * Q z) ^ 6 =
    ((u * v) ^ 2) ^ 3 *
      (-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 * Q z +
                                        3 * P x * P y * Q x ^ 2 * P z * Q z ^ 2 +
                                      P x ^ 3 * Q y * Q z ^ 3 -
                                    2 * P y ^ 2 * Q y * Q z ^ 3 +
                                  W'.a₁ * P x * Q y ^ 2 * P z ^ 4 +
                                W'.a₁ * P y * Q x * Q y * P z ^ 3 * Q z -
                              W'.a₁ * P x * P y * Q y * P z * Q z ^ 3 -
                            W'.a₁ * P y ^ 2 * Q x * Q z ^ 4 -
                          2 * W'.a₂ * P x * Q x * Q y * P z ^ 4 * Q z +
                        2 * W'.a₂ * P x * P y * Q x * P z * Q z ^ 4 +
                      W'.a₃ * Q y ^ 2 * P z ^ 6 -
                    W'.a₃ * P y ^ 2 * Q z ^ 6 -
                  W'.a₄ * Q x * Q y * P z ^ 6 * Q z -
                W'.a₄ * P x * Q y * P z ^ 4 * Q z ^ 3 +
              W'.a₄ * P y * Q x * P z ^ 3 * Q z ^ 4 +
            W'.a₄ * P x * P y * P z * Q z ^ 6 -
          2 * W'.a₆ * Q y * P z ^ 6 * Q z ^ 3 +
        2 * W'.a₆ * P y * P z ^ 3 * Q z ^ 6)
state_after: no goals
tactic: ring1