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

tactic: linear_combination (norm := (rw [eval_polynomial, Affine.evalEval_polynomial]; ring1))
  W.a₁ * P x * P y / P z ^ 5 * div_self hPz + W.a₃ * P y / P z ^ 3 * div_self (pow_ne_zero 3 hPz)
    - W.a₂ * P x ^ 2 / P z ^ 4 * div_self (pow_ne_zero 2 hPz)
    - W.a₄ * P x / P z ^ 2 * div_self (pow_ne_zero 4 hPz) - W.a₆ * div_self (pow_ne_zero 6 hPz)
state_before: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P : Fin 3 → F
hPz : P z ≠ 0
⊢ (eval P) W.polynomial / P z ^ 6 = Polynomial.evalEval (P x / P z ^ 2) (P y / P z ^ 3) W.toAffine.polynomial
state_after: no goals

tactic: rw [eval_polynomial, Affine.evalEval_polynomial]
state_before: case a
R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P : Fin 3 → F
hPz : P z ≠ 0
⊢ (eval P) W.polynomial / P z ^ 6 - Polynomial.evalEval (P x / P z ^ 2) (P y / P z ^ 3) W.toAffine.polynomial -
      (W.a₁ * P x * P y / P z ^ 5 * (P z / P z) + W.a₃ * P y / P z ^ 3 * (P z ^ 3 / P z ^ 3) -
              W.a₂ * P x ^ 2 / P z ^ 4 * (P z ^ 2 / P z ^ 2) -
            W.a₄ * P x / P z ^ 2 * (P z ^ 4 / P z ^ 4) -
          W.a₆ * (P z ^ 6 / P z ^ 6) -
        (W.a₁ * P x * P y / P z ^ 5 * 1 + W.a₃ * P y / P z ^ 3 * 1 - W.a₂ * P x ^ 2 / P z ^ 4 * 1 -
            W.a₄ * P x / P z ^ 2 * 1 -
          W.a₆ * 1)) =
    0
state_after: case a
R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P : Fin 3 → F
hPz : P z ≠ 0
⊢ (P y ^ 2 + W.a₁ * P x * P y * P z + W.a₃ * P y * P z ^ 3 -
            (P x ^ 3 + W.a₂ * P x ^ 2 * P z ^ 2 + W.a₄ * P x * P z ^ 4 + W.a₆ * P z ^ 6)) /
          P z ^ 6 -
        ((P y / P z ^ 3) ^ 2 + W.toAffine.a₁ * (P x / P z ^ 2) * (P y / P z ^ 3) + W.toAffine.a₃ * (P y / P z ^ 3) -
          ((P x / P z ^ 2) ^ 3 + W.toAffine.a₂ * (P x / P z ^ 2) ^ 2 + W.toAffine.a₄ * (P x / P z ^ 2) +
            W.toAffine.a₆)) -
      (W.a₁ * P x * P y / P z ^ 5 * (P z / P z) + W.a₃ * P y / P z ^ 3 * (P z ^ 3 / P z ^ 3) -
              W.a₂ * P x ^ 2 / P z ^ 4 * (P z ^ 2 / P z ^ 2) -
            W.a₄ * P x / P z ^ 2 * (P z ^ 4 / P z ^ 4) -
          W.a₆ * (P z ^ 6 / P z ^ 6) -
        (W.a₁ * P x * P y / P z ^ 5 * 1 + W.a₃ * P y / P z ^ 3 * 1 - W.a₂ * P x ^ 2 / P z ^ 4 * 1 -
            W.a₄ * P x / P z ^ 2 * 1 -
          W.a₆ * 1)) =
    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 : Fin 3 → F
hPz : P z ≠ 0
⊢ (P y ^ 2 + W.a₁ * P x * P y * P z + W.a₃ * P y * P z ^ 3 -
            (P x ^ 3 + W.a₂ * P x ^ 2 * P z ^ 2 + W.a₄ * P x * P z ^ 4 + W.a₆ * P z ^ 6)) /
          P z ^ 6 -
        ((P y / P z ^ 3) ^ 2 + W.toAffine.a₁ * (P x / P z ^ 2) * (P y / P z ^ 3) + W.toAffine.a₃ * (P y / P z ^ 3) -
          ((P x / P z ^ 2) ^ 3 + W.toAffine.a₂ * (P x / P z ^ 2) ^ 2 + W.toAffine.a₄ * (P x / P z ^ 2) +
            W.toAffine.a₆)) -
      (W.a₁ * P x * P y / P z ^ 5 * (P z / P z) + W.a₃ * P y / P z ^ 3 * (P z ^ 3 / P z ^ 3) -
              W.a₂ * P x ^ 2 / P z ^ 4 * (P z ^ 2 / P z ^ 2) -
            W.a₄ * P x / P z ^ 2 * (P z ^ 4 / P z ^ 4) -
          W.a₆ * (P z ^ 6 / P z ^ 6) -
        (W.a₁ * P x * P y / P z ^ 5 * 1 + W.a₃ * P y / P z ^ 3 * 1 - W.a₂ * P x ^ 2 / P z ^ 4 * 1 -
            W.a₄ * P x / P z ^ 2 * 1 -
          W.a₆ * 1)) =
    0
state_after: no goals