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

tactic: linear_combination (norm := (rw [negAddY, negY, hPz]; ring1))
  (W'.negY Q - Q y) * Q z ^ 3 * (equation_of_Z_eq_zero hPz).mp hP
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
hP : W'.Equation P
hPz : P z = 0
⊢ W'.negAddY P Q = (P x * Q z) ^ 3 * W'.negY Q
state_after: no goals

tactic: rw [negAddY, negY, hPz]
state_before: case a
R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P Q : Fin 3 → R
hP : W'.Equation P
hPz : P z = 0
⊢ W'.negAddY P Q - (P x * Q z) ^ 3 * W'.negY Q -
      ((W'.negY Q - Q y) * Q z ^ 3 * P y ^ 2 - (W'.negY Q - Q y) * Q z ^ 3 * P x ^ 3) =
    0
state_after: case a
R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P Q : Fin 3 → R
hP : W'.Equation P
hPz : P z = 0
⊢ -P y * Q x ^ 3 * 0 ^ 3 + 2 * P y * Q y ^ 2 * 0 ^ 3 - 3 * P x ^ 2 * Q x * Q y * 0 ^ 2 * Q z +
                                          3 * P x * P y * Q x ^ 2 * 0 * 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 * 0 ^ 4 +
                                  W'.a₁ * P y * Q x * Q y * 0 ^ 3 * Q z -
                                W'.a₁ * P x * P y * Q y * 0 * Q z ^ 3 -
                              W'.a₁ * P y ^ 2 * Q x * Q z ^ 4 -
                            2 * W'.a₂ * P x * Q x * Q y * 0 ^ 4 * Q z +
                          2 * W'.a₂ * P x * P y * Q x * 0 * Q z ^ 4 +
                        W'.a₃ * Q y ^ 2 * 0 ^ 6 -
                      W'.a₃ * P y ^ 2 * Q z ^ 6 -
                    W'.a₄ * Q x * Q y * 0 ^ 6 * Q z -
                  W'.a₄ * P x * Q y * 0 ^ 4 * Q z ^ 3 +
                W'.a₄ * P y * Q x * 0 ^ 3 * Q z ^ 4 +
              W'.a₄ * P x * P y * 0 * Q z ^ 6 -
            2 * W'.a₆ * Q y * 0 ^ 6 * Q z ^ 3 +
          2 * W'.a₆ * P y * 0 ^ 3 * Q z ^ 6 -
        (P x * Q z) ^ 3 * (-Q y - W'.a₁ * Q x * Q z - W'.a₃ * Q z ^ 3) -
      ((-Q y - W'.a₁ * Q x * Q z - W'.a₃ * Q z ^ 3 - Q y) * Q z ^ 3 * P y ^ 2 -
        (-Q y - W'.a₁ * Q x * Q z - W'.a₃ * Q z ^ 3 - Q y) * Q z ^ 3 * P x ^ 3) =
    0

tactic: ring1
state_before: case a
R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P Q : Fin 3 → R
hP : W'.Equation P
hPz : P z = 0
⊢ -P y * Q x ^ 3 * 0 ^ 3 + 2 * P y * Q y ^ 2 * 0 ^ 3 - 3 * P x ^ 2 * Q x * Q y * 0 ^ 2 * Q z +
                                          3 * P x * P y * Q x ^ 2 * 0 * 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 * 0 ^ 4 +
                                  W'.a₁ * P y * Q x * Q y * 0 ^ 3 * Q z -
                                W'.a₁ * P x * P y * Q y * 0 * Q z ^ 3 -
                              W'.a₁ * P y ^ 2 * Q x * Q z ^ 4 -
                            2 * W'.a₂ * P x * Q x * Q y * 0 ^ 4 * Q z +
                          2 * W'.a₂ * P x * P y * Q x * 0 * Q z ^ 4 +
                        W'.a₃ * Q y ^ 2 * 0 ^ 6 -
                      W'.a₃ * P y ^ 2 * Q z ^ 6 -
                    W'.a₄ * Q x * Q y * 0 ^ 6 * Q z -
                  W'.a₄ * P x * Q y * 0 ^ 4 * Q z ^ 3 +
                W'.a₄ * P y * Q x * 0 ^ 3 * Q z ^ 4 +
              W'.a₄ * P x * P y * 0 * Q z ^ 6 -
            2 * W'.a₆ * Q y * 0 ^ 6 * Q z ^ 3 +
          2 * W'.a₆ * P y * 0 ^ 3 * Q z ^ 6 -
        (P x * Q z) ^ 3 * (-Q y - W'.a₁ * Q x * Q z - W'.a₃ * Q z ^ 3) -
      ((-Q y - W'.a₁ * Q x * Q z - W'.a₃ * Q z ^ 3 - Q y) * Q z ^ 3 * P y ^ 2 -
        (-Q y - W'.a₁ * Q x * Q z - W'.a₃ * Q z ^ 3 - Q y) * Q z ^ 3 * P x ^ 3) =
    0
state_after: no goals