ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- WeierstrassCurve.Jacobian.addU_smul
lemma addU_smul {P Q : Fin 3 → F} (hPz : P z ≠ 0) (hQz : Q z ≠ 0) {u v : F} (hu : u ≠ 0)
    (hv : v ≠ 0) : addU (u • P) (v • Q) = (u * v) ^ 2 * addU P Q 
Arguments: {F : Type v} [Field F] {P Q : Fin 3 → F} (hPz : P z ≠ 0) (hQz : Q z ≠ 0) {u v : F} (hu : u ≠ 0) (hv : v ≠ 0)
Goal: WeierstrassCurve.Jacobian.addU (u • P) (v • Q) = (u * v) ^ 2 * WeierstrassCurve.Jacobian.addU P Q
-- WeierstrassCurve.Jacobian.addU_of_Z_eq_zero_left
lemma addU_of_Z_eq_zero_left {P Q : Fin 3 → F} (hPz : P z = 0) : addU P Q = 0 
Arguments: {F : Type v} [Field F] {P Q : Fin 3 → F} (hPz : P z = 0)
Goal: WeierstrassCurve.Jacobian.addU P Q = 0
-- WeierstrassCurve.Jacobian.addU_of_Z_eq_zero_right
lemma addU_of_Z_eq_zero_right {P Q : Fin 3 → F} (hQz : Q z = 0) : addU P Q = 0 
Arguments: {F : Type v} [Field F] {P Q : Fin 3 → F} (hQz : Q z = 0)
Goal: WeierstrassCurve.Jacobian.addU P Q = 0
-- WeierstrassCurve.Jacobian.addU_ne_zero_of_Y_ne
lemma addU_ne_zero_of_Y_ne {P Q : Fin 3 → F} (hPz : P z ≠ 0) (hQz : Q z ≠ 0)
    (hy : P y * Q z ^ 3 ≠ Q y * P z ^ 3) : addU P Q ≠ 0 
Arguments: {F : Type v} [Field F] {P Q : Fin 3 → F} (hPz : P z ≠ 0) (hQz : Q z ≠ 0) (hy : P y * Q z ^ 3 ≠ Q y * P z ^ 3)
Goal: WeierstrassCurve.Jacobian.addU P Q ≠ 0
-- WeierstrassCurve.Jacobian.isUnit_addU_of_Y_ne
lemma isUnit_addU_of_Y_ne {P Q : Fin 3 → F} (hPz : P z ≠ 0) (hQz : Q z ≠ 0)
    (hy : P y * Q z ^ 3 ≠ Q y * P z ^ 3) : IsUnit (addU P Q) 
Arguments: {F : Type v} [Field F] {P Q : Fin 3 → F} (hPz : P z ≠ 0) (hQz : Q z ≠ 0) (hy : P y * Q z ^ 3 ≠ Q y * P z ^ 3)
Goal: IsUnit (WeierstrassCurve.Jacobian.addU P Q)
-- WeierstrassCurve.Jacobian.addZ_self
lemma addZ_self {P : Fin 3 → R} : addZ P P = 0 
Arguments: {R : Type u} [CommRing R] {P : Fin 3 → R}
Goal: WeierstrassCurve.Jacobian.addZ P P = 0
-- WeierstrassCurve.Jacobian.addZ_smul
lemma addZ_smul (P Q : Fin 3 → R) (u v : R) : addZ (u • P) (v • Q) = (u * v) ^ 2 * addZ P Q 
Arguments: {R : Type u} [CommRing R] (P Q : Fin 3 → R) (u v : R)
Goal: WeierstrassCurve.Jacobian.addZ (u • P) (v • Q) = (u * v) ^ 2 * WeierstrassCurve.Jacobian.addZ P Q
-- WeierstrassCurve.Jacobian.addZ_of_Z_eq_zero_left
lemma addZ_of_Z_eq_zero_left {P Q : Fin 3 → R} (hPz : P z = 0) : addZ P Q = P x * Q z * Q z 
Arguments: {R : Type u} [CommRing R] {P Q : Fin 3 → R} (hPz : P z = 0)
Goal: WeierstrassCurve.Jacobian.addZ P Q = P x * Q z * Q z
-- WeierstrassCurve.Jacobian.addZ_of_Z_eq_zero_right
lemma addZ_of_Z_eq_zero_right {P Q : Fin 3 → R} (hQz : Q z = 0) :
    addZ P Q = -(Q x * P z) * P z 
Arguments: {R : Type u} [CommRing R] {P Q : Fin 3 → R} (hQz : Q z = 0)
Goal: WeierstrassCurve.Jacobian.addZ P Q = -(Q x * P z) * P z
-- WeierstrassCurve.Jacobian.addZ_of_X_eq
lemma addZ_of_X_eq {P Q : Fin 3 → R} (hx : P x * Q z ^ 2 = Q x * P z ^ 2) : addZ P Q = 0 
Arguments: {R : Type u} [CommRing R] {P Q : Fin 3 → R} (hx : P x * Q z ^ 2 = Q x * P z ^ 2)
Goal: WeierstrassCurve.Jacobian.addZ P Q = 0
-- WeierstrassCurve.Jacobian.addZ_ne_zero_of_X_ne
lemma addZ_ne_zero_of_X_ne {P Q : Fin 3 → R} (hx : P x * Q z ^ 2 ≠ Q x * P z ^ 2) : addZ P Q ≠ 0 
Arguments: {R : Type u} [CommRing R] {P Q : Fin 3 → R} (hx : P x * Q z ^ 2 ≠ Q x * P z ^ 2)
Goal: WeierstrassCurve.Jacobian.addZ P Q ≠ 0
-- WeierstrassCurve.Jacobian.isUnit_addZ_of_X_ne
lemma isUnit_addZ_of_X_ne {P Q : Fin 3 → F} (hx : P x * Q z ^ 2 ≠ Q x * P z ^ 2) :
    IsUnit <| addZ P Q 
Arguments: {F : Type v} [Field F] {P Q : Fin 3 → F} (hx : P x * Q z ^ 2 ≠ Q x * P z ^ 2)
Goal: IsUnit (WeierstrassCurve.Jacobian.addZ P Q)
-- _private.Mathlib.AlgebraicGeometry.EllipticCurve.Jacobian.0.WeierstrassCurve.Jacobian.toAffine_slope_of_ne
private lemma toAffine_slope_of_ne {P Q : Fin 3 → F} (hPz : P z ≠ 0) (hQz : Q z ≠ 0)
    (hx : P x * Q z ^ 2 ≠ Q x * P z ^ 2) :
    W.toAffine.slope (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3) (Q y / Q z ^ 3) =
      (P y * Q z ^ 3 - Q y * P z ^ 3) / (P z * Q z * addZ P Q) 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P Q : Fin 3 → F} (hPz : P z ≠ 0) (hQz : Q z ≠ 0) (hx : P x * Q z ^ 2 ≠ Q x * P z ^ 2)
Goal: W.toAffine.slope (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3) (Q y / Q z ^ 3) =
  (P y * Q z ^ 3 - Q y * P z ^ 3) / (P z * Q z * WeierstrassCurve.Jacobian.addZ P Q)
-- WeierstrassCurve.Jacobian.addX_self
lemma addX_self {P : Fin 3 → R} (hP : W'.Equation P) : W'.addX P P = 0 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P : Fin 3 → R} (hP : W'.Equation P)
Goal: W'.addX P P = 0
-- WeierstrassCurve.Jacobian.addX_eq'
lemma addX_eq' {P Q : Fin 3 → R} (hP : W'.Equation P) (hQ : W'.Equation Q) :
    W'.addX P Q * (P z * Q z) ^ 2 =
      (P y * Q z ^ 3 - Q y * P z ^ 3) ^ 2
        + W'.a₁ * (P y * Q z ^ 3 - Q y * P z ^ 3) * P z * Q z * addZ P Q
        - W'.a₂ * P z ^ 2 * Q z ^ 2 * addZ P Q ^ 2 - P x * Q z ^ 2 * addZ P Q ^ 2
        - Q x * P z ^ 2 * addZ P Q ^ 2 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P Q : Fin 3 → R} (hP : W'.Equation P) (hQ : W'.Equation Q)
Goal: W'.addX P Q * (P z * Q z) ^ 2 =
  (P y * Q z ^ 3 - Q y * P z ^ 3) ^ 2 +
          W'.a₁ * (P y * Q z ^ 3 - Q y * P z ^ 3) * P z * Q z * WeierstrassCurve.Jacobian.addZ P Q -
        W'.a₂ * P z ^ 2 * Q z ^ 2 * WeierstrassCurve.Jacobian.addZ P Q ^ 2 -
      P x * Q z ^ 2 * WeierstrassCurve.Jacobian.addZ P Q ^ 2 -
    Q x * P z ^ 2 * WeierstrassCurve.Jacobian.addZ P Q ^ 2
-- WeierstrassCurve.Jacobian.addX_eq
lemma addX_eq {P Q : Fin 3 → F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P z ≠ 0)
    (hQz : Q z ≠ 0) : W.addX P Q =
      ((P y * Q z ^ 3 - Q y * P z ^ 3) ^ 2
        + W.a₁ * (P y * Q z ^ 3 - Q y * P z ^ 3) * P z * Q z * addZ P Q
        - W.a₂ * P z ^ 2 * Q z ^ 2 * addZ P Q ^ 2 - P x * Q z ^ 2 * addZ P Q ^ 2
        - Q x * P z ^ 2 * addZ P Q ^ 2) / (P z * Q z) ^ 2 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P Q : Fin 3 → F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P z ≠ 0) (hQz : Q z ≠ 0)
Goal: W.addX P Q =
  ((P y * Q z ^ 3 - Q y * P z ^ 3) ^ 2 +
            W.a₁ * (P y * Q z ^ 3 - Q y * P z ^ 3) * P z * Q z * WeierstrassCurve.Jacobian.addZ P Q -
          W.a₂ * P z ^ 2 * Q z ^ 2 * WeierstrassCurve.Jacobian.addZ P Q ^ 2 -
        P x * Q z ^ 2 * WeierstrassCurve.Jacobian.addZ P Q ^ 2 -
      Q x * P z ^ 2 * WeierstrassCurve.Jacobian.addZ P Q ^ 2) /
    (P z * Q z) ^ 2
-- WeierstrassCurve.Jacobian.addX_smul
lemma addX_smul (P Q : Fin 3 → R) (u v : R) :
    W'.addX (u • P) (v • Q) = ((u * v) ^ 2) ^ 2 * W'.addX P Q 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P Q : Fin 3 → R) (u v : R)
Goal: W'.addX (u • P) (v • Q) = ((u * v) ^ 2) ^ 2 * W'.addX P Q
-- WeierstrassCurve.Jacobian.addX_of_Z_eq_zero_left
lemma addX_of_Z_eq_zero_left {P Q : Fin 3 → R} (hPz : P z = 0) :
    W'.addX P Q = (P x * Q z) ^ 2 * Q x 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P Q : Fin 3 → R} (hPz : P z = 0)
Goal: W'.addX P Q = (P x * Q z) ^ 2 * Q x
-- WeierstrassCurve.Jacobian.addX_of_Z_eq_zero_right
lemma addX_of_Z_eq_zero_right {P Q : Fin 3 → R} (hQz : Q z = 0) :
    W'.addX P Q = (-(Q x * P z)) ^ 2 * P x 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P Q : Fin 3 → R} (hQz : Q z = 0)
Goal: W'.addX P Q = (-(Q x * P z)) ^ 2 * P x
-- WeierstrassCurve.Jacobian.addX_of_X_eq'
lemma addX_of_X_eq' {P Q : Fin 3 → R} (hP : W'.Equation P) (hQ : W'.Equation Q)
    (hx : P x * Q z ^ 2 = Q x * P z ^ 2) :
    W'.addX P Q * (P z * Q z) ^ 2 = (P y * Q z ^ 3 - Q y * P z ^ 3) ^ 2 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P Q : Fin 3 → R} (hP : W'.Equation P) (hQ : W'.Equation Q) (hx : P x * Q z ^ 2 = Q x * P z ^ 2)
Goal: W'.addX P Q * (P z * Q z) ^ 2 = (P y * Q z ^ 3 - Q y * P z ^ 3) ^ 2
-- WeierstrassCurve.Jacobian.addX_of_X_eq
lemma addX_of_X_eq {P Q : Fin 3 → F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P z ≠ 0)
    (hQz : Q z ≠ 0) (hx : P x * Q z ^ 2 = Q x * P z ^ 2) : W.addX P Q = addU P Q ^ 2 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P Q : Fin 3 → F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P z ≠ 0) (hQz : Q z ≠ 0) (hx : P x * Q z ^ 2 = Q x * P z ^ 2)
Goal: W.addX P Q = WeierstrassCurve.Jacobian.addU P Q ^ 2
-- _private.Mathlib.AlgebraicGeometry.EllipticCurve.Jacobian.0.WeierstrassCurve.Jacobian.toAffine_addX_of_ne
private lemma toAffine_addX_of_ne {P Q : Fin 3 → F} {n d : F} (hPz : P z ≠ 0) (hQz : Q z ≠ 0)
    (hd : d ≠ 0) : W.toAffine.addX (P x / P z ^ 2) (Q x / Q z ^ 2) (n / (P z * Q z * d)) =
      (n ^ 2 + W.a₁ * n * P z * Q z * d - W.a₂ * P z ^ 2 * Q z ^ 2 * d ^ 2 - P x * Q z ^ 2 * d ^ 2
        - Q x * P z ^ 2 * d ^ 2) / (P z * Q z * d) ^ 2 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P Q : Fin 3 → F} {n d : F} (hPz : P z ≠ 0) (hQz : Q z ≠ 0) (hd : d ≠ 0)
Goal: W.toAffine.addX (P x / P z ^ 2) (Q x / Q z ^ 2) (n / (P z * Q z * d)) =
  (n ^ 2 + W.a₁ * n * P z * Q z * d - W.a₂ * P z ^ 2 * Q z ^ 2 * d ^ 2 - P x * Q z ^ 2 * d ^ 2 -
      Q x * P z ^ 2 * d ^ 2) /
    (P z * Q z * d) ^ 2
-- WeierstrassCurve.Jacobian.addX_of_Z_ne_zero
lemma addX_of_Z_ne_zero {P Q : Fin 3 → F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P z ≠ 0)
    (hQz : Q z ≠ 0) (hx : P x * Q z ^ 2 ≠ Q x * P z ^ 2) :
    W.addX P Q / addZ P Q ^ 2 = W.toAffine.addX (P x / P z ^ 2) (Q x / Q z ^ 2)
      (W.toAffine.slope (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3) (Q y / Q z ^ 3)) 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P Q : Fin 3 → F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P z ≠ 0) (hQz : Q z ≠ 0) (hx : P x * Q z ^ 2 ≠ Q x * P z ^ 2)
Goal: W.addX P Q / WeierstrassCurve.Jacobian.addZ P Q ^ 2 =
  W.toAffine.addX (P x / P z ^ 2) (Q x / Q z ^ 2)
    (W.toAffine.slope (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3) (Q y / Q z ^ 3))
-- WeierstrassCurve.Jacobian.negAddY_self
lemma negAddY_self {P : Fin 3 → R} : W'.negAddY P P = 0 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P : Fin 3 → R}
Goal: W'.negAddY P P = 0
-- WeierstrassCurve.Jacobian.negAddY_eq'
lemma negAddY_eq' {P Q : Fin 3 → R} : W'.negAddY P Q * (P z * Q z) ^ 3 =
    (P y * Q z ^ 3 - Q y * P z ^ 3) * (W'.addX P Q * (P z * Q z) ^ 2 - P x * Q z ^ 2 * addZ P Q ^ 2)
      + P y * Q z ^ 3 * addZ P Q ^ 3 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P Q : Fin 3 → R}
Goal: W'.negAddY P Q * (P z * Q z) ^ 3 =
  (P y * Q z ^ 3 - Q y * P z ^ 3) *
      (W'.addX P Q * (P z * Q z) ^ 2 - P x * Q z ^ 2 * WeierstrassCurve.Jacobian.addZ P Q ^ 2) +
    P y * Q z ^ 3 * WeierstrassCurve.Jacobian.addZ P Q ^ 3
-- WeierstrassCurve.Jacobian.negAddY_eq
lemma negAddY_eq {P Q : Fin 3 → F} (hPz : P z ≠ 0) (hQz : Q z ≠ 0) : W.negAddY P Q =
    ((P y * Q z ^ 3 - Q y * P z ^ 3) * (W.addX P Q * (P z * Q z) ^ 2 - P x * Q z ^ 2 * addZ P Q ^ 2)
      + P y * Q z ^ 3 * addZ P Q ^ 3) / (P z * Q z) ^ 3 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P Q : Fin 3 → F} (hPz : P z ≠ 0) (hQz : Q z ≠ 0)
Goal: W.negAddY P Q =
  ((P y * Q z ^ 3 - Q y * P z ^ 3) *
        (W.addX P Q * (P z * Q z) ^ 2 - P x * Q z ^ 2 * WeierstrassCurve.Jacobian.addZ P Q ^ 2) +
      P y * Q z ^ 3 * WeierstrassCurve.Jacobian.addZ P Q ^ 3) /
    (P z * Q z) ^ 3
-- WeierstrassCurve.Jacobian.negAddY_smul
lemma negAddY_smul (P Q : Fin 3 → R) (u v : R) :
    W'.negAddY (u • P) (v • Q) = ((u * v) ^ 2) ^ 3 * W'.negAddY P Q 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P Q : Fin 3 → R) (u v : R)
Goal: W'.negAddY (u • P) (v • Q) = ((u * v) ^ 2) ^ 3 * W'.negAddY P Q
-- WeierstrassCurve.Jacobian.negAddY_of_Z_eq_zero_left
lemma negAddY_of_Z_eq_zero_left {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 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P Q : Fin 3 → R} (hP : W'.Equation P) (hPz : P z = 0)
Goal: W'.negAddY P Q = (P x * Q z) ^ 3 * W'.negY Q
-- WeierstrassCurve.Jacobian.negAddY_of_Z_eq_zero_right
lemma negAddY_of_Z_eq_zero_right {P Q : Fin 3 → R} (hQ : W'.Equation Q) (hQz : Q z = 0) :
    W'.negAddY P Q = (-(Q x * P z)) ^ 3 * W'.negY P 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P Q : Fin 3 → R} (hQ : W'.Equation Q) (hQz : Q z = 0)
Goal: W'.negAddY P Q = (-(Q x * P z)) ^ 3 * W'.negY P
-- WeierstrassCurve.Jacobian.negAddY_of_X_eq'
lemma negAddY_of_X_eq' {P Q : Fin 3 → R} (hP : W'.Equation P) (hQ : W'.Equation Q)
    (hx : P x * Q z ^ 2 = Q x * P z ^ 2) :
    W'.negAddY P Q * (P z * Q z) ^ 3 = (P y * Q z ^ 3 - Q y * P z ^ 3) ^ 3 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P Q : Fin 3 → R} (hP : W'.Equation P) (hQ : W'.Equation Q) (hx : P x * Q z ^ 2 = Q x * P z ^ 2)
Goal: W'.negAddY P Q * (P z * Q z) ^ 3 = (P y * Q z ^ 3 - Q y * P z ^ 3) ^ 3
-- WeierstrassCurve.Jacobian.negAddY_of_X_eq
lemma negAddY_of_X_eq {P Q : Fin 3 → F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P z ≠ 0)
    (hQz : Q z ≠ 0) (hx : P x * Q z ^ 2 = Q x * P z ^ 2) : W.negAddY P Q = (-addU P Q) ^ 3 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P Q : Fin 3 → F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P z ≠ 0) (hQz : Q z ≠ 0) (hx : P x * Q z ^ 2 = Q x * P z ^ 2)
Goal: W.negAddY P Q = (-WeierstrassCurve.Jacobian.addU P Q) ^ 3
-- _private.Mathlib.AlgebraicGeometry.EllipticCurve.Jacobian.0.WeierstrassCurve.Jacobian.toAffine_negAddY_of_ne
private lemma toAffine_negAddY_of_ne {P Q : Fin 3 → F} {n d : F} (hPz : P z ≠ 0) (hQz : Q z ≠ 0)
    (hd : d ≠ 0) :
    W.toAffine.negAddY (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3) (n / (P z * Q z * d)) =
      (n * (n ^ 2 + W.a₁ * n * P z * Q z * d - W.a₂ * P z ^ 2 * Q z ^ 2 * d ^ 2
          - P x * Q z ^ 2 * d ^ 2 - Q x * P z ^ 2 * d ^ 2 - P x * Q z ^ 2 * d ^ 2)
        + P y * Q z ^ 3 * d ^ 3) / (P z * Q z * d) ^ 3 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P Q : Fin 3 → F} {n d : F} (hPz : P z ≠ 0) (hQz : Q z ≠ 0) (hd : d ≠ 0)
Goal: W.toAffine.negAddY (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3) (n / (P z * Q z * d)) =
  (n *
        (n ^ 2 + W.a₁ * n * P z * Q z * d - W.a₂ * P z ^ 2 * Q z ^ 2 * d ^ 2 - P x * Q z ^ 2 * d ^ 2 -
            Q x * P z ^ 2 * d ^ 2 -
          P x * Q z ^ 2 * d ^ 2) +
      P y * Q z ^ 3 * d ^ 3) /
    (P z * Q z * d) ^ 3
-- WeierstrassCurve.Jacobian.negAddY_of_Z_ne_zero
lemma negAddY_of_Z_ne_zero {P Q : Fin 3 → F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P z ≠ 0)
    (hQz : Q z ≠ 0) (hx : P x * Q z ^ 2 ≠ Q x * P z ^ 2) : W.negAddY P Q / addZ P Q ^ 3 =
      W.toAffine.negAddY (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3)
        (W.toAffine.slope (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3) (Q y / Q z ^ 3)) 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P Q : Fin 3 → F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P z ≠ 0) (hQz : Q z ≠ 0) (hx : P x * Q z ^ 2 ≠ Q x * P z ^ 2)
Goal: W.negAddY P Q / WeierstrassCurve.Jacobian.addZ P Q ^ 3 =
  W.toAffine.negAddY (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3)
    (W.toAffine.slope (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3) (Q y / Q z ^ 3))
-- WeierstrassCurve.Jacobian.addY_self
lemma addY_self {P : Fin 3 → R} (hP : W'.Equation P) : W'.addY P P = 0 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P : Fin 3 → R} (hP : W'.Equation P)
Goal: W'.addY P P = 0
-- WeierstrassCurve.Jacobian.addY_smul
lemma addY_smul (P Q : Fin 3 → R) (u v : R) :
    W'.addY (u • P) (v • Q) = ((u * v) ^ 2) ^ 3 * W'.addY P Q 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P Q : Fin 3 → R) (u v : R)
Goal: W'.addY (u • P) (v • Q) = ((u * v) ^ 2) ^ 3 * W'.addY P Q
-- WeierstrassCurve.Jacobian.addY_of_Z_eq_zero_left
lemma addY_of_Z_eq_zero_left {P Q : Fin 3 → R} (hP : W'.Equation P) (hPz : P z = 0) :
    W'.addY P Q = (P x * Q z) ^ 3 * Q y 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P Q : Fin 3 → R} (hP : W'.Equation P) (hPz : P z = 0)
Goal: W'.addY P Q = (P x * Q z) ^ 3 * Q y
-- WeierstrassCurve.Jacobian.addY_of_Z_eq_zero_right
lemma addY_of_Z_eq_zero_right {P Q : Fin 3 → R} (hQ : W'.Equation Q) (hQz : Q z = 0) :
    W'.addY P Q = (-(Q x * P z)) ^ 3 * P y 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P Q : Fin 3 → R} (hQ : W'.Equation Q) (hQz : Q z = 0)
Goal: W'.addY P Q = (-(Q x * P z)) ^ 3 * P y
-- WeierstrassCurve.Jacobian.addY_of_X_eq'
lemma addY_of_X_eq' {P Q : Fin 3 → R} (hP : W'.Equation P) (hQ : W'.Equation Q)
    (hx : P x * Q z ^ 2 = Q x * P z ^ 2) :
    W'.addY P Q * (P z * Q z) ^ 3 = (-(P y * Q z ^ 3 - Q y * P z ^ 3)) ^ 3 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P Q : Fin 3 → R} (hP : W'.Equation P) (hQ : W'.Equation Q) (hx : P x * Q z ^ 2 = Q x * P z ^ 2)
Goal: W'.addY P Q * (P z * Q z) ^ 3 = (-(P y * Q z ^ 3 - Q y * P z ^ 3)) ^ 3
-- WeierstrassCurve.Jacobian.addY_of_X_eq
lemma addY_of_X_eq {P Q : Fin 3 → F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P z ≠ 0)
    (hQz : Q z ≠ 0) (hx : P x * Q z ^ 2 = Q x * P z ^ 2) : W.addY P Q = addU P Q ^ 3 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P Q : Fin 3 → F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P z ≠ 0) (hQz : Q z ≠ 0) (hx : P x * Q z ^ 2 = Q x * P z ^ 2)
Goal: W.addY P Q = WeierstrassCurve.Jacobian.addU P Q ^ 3
-- WeierstrassCurve.Jacobian.addY_of_Z_ne_zero
lemma addY_of_Z_ne_zero {P Q : Fin 3 → F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P z ≠ 0)
    (hQz : Q z ≠ 0) (hx : P x * Q z ^ 2 ≠ Q x * P z ^ 2) :
    W.addY P Q / addZ P Q ^ 3 = W.toAffine.addY (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3)
      (W.toAffine.slope (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3) (Q y / Q z ^ 3)) 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P Q : Fin 3 → F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P z ≠ 0) (hQz : Q z ≠ 0) (hx : P x * Q z ^ 2 ≠ Q x * P z ^ 2)
Goal: W.addY P Q / WeierstrassCurve.Jacobian.addZ P Q ^ 3 =
  W.toAffine.addY (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3)
    (W.toAffine.slope (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3) (Q y / Q z ^ 3))
-- WeierstrassCurve.Jacobian.addXYZ_self
lemma addXYZ_self {P : Fin 3 → R} (hP : W'.Equation P) : W'.addXYZ P P = ![0, 0, 0] 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P : Fin 3 → R} (hP : W'.Equation P)
Goal: W'.addXYZ P P = ![0, 0, 0]
-- WeierstrassCurve.Jacobian.addXYZ_smul
lemma addXYZ_smul (P Q : Fin 3 → R) (u v : R) :
    W'.addXYZ (u • P) (v • Q) = (u * v) ^ 2 • W'.addXYZ P Q 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P Q : Fin 3 → R) (u v : R)
Goal: W'.addXYZ (u • P) (v • Q) = (u * v) ^ 2 • W'.addXYZ P Q
-- WeierstrassCurve.Jacobian.addXYZ_of_Z_eq_zero_left
lemma addXYZ_of_Z_eq_zero_left {P Q : Fin 3 → R} (hP : W'.Equation P) (hPz : P z = 0) :
    W'.addXYZ P Q = (P x * Q z) • Q 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P Q : Fin 3 → R} (hP : W'.Equation P) (hPz : P z = 0)
Goal: W'.addXYZ P Q = (P x * Q z) • Q
-- WeierstrassCurve.Jacobian.addXYZ_of_Z_eq_zero_right
lemma addXYZ_of_Z_eq_zero_right {P Q : Fin 3 → R} (hQ : W'.Equation Q) (hQz : Q z = 0) :
    W'.addXYZ P Q = -(Q x * P z) • P 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P Q : Fin 3 → R} (hQ : W'.Equation Q) (hQz : Q z = 0)
Goal: W'.addXYZ P Q = -(Q x * P z) • P
-- WeierstrassCurve.Jacobian.addXYZ_of_X_eq
lemma addXYZ_of_X_eq {P Q : Fin 3 → F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P z ≠ 0)
    (hQz : Q z ≠ 0) (hx : P x * Q z ^ 2 = Q x * P z ^ 2) :
    W.addXYZ P Q = addU P Q • ![1, 1, 0] 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P Q : Fin 3 → F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P z ≠ 0) (hQz : Q z ≠ 0) (hx : P x * Q z ^ 2 = Q x * P z ^ 2)
Goal: W.addXYZ P Q = WeierstrassCurve.Jacobian.addU P Q • ![1, 1, 0]
-- WeierstrassCurve.Jacobian.addXYZ_of_Z_ne_zero
lemma addXYZ_of_Z_ne_zero {P Q : Fin 3 → F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P z ≠ 0)
    (hQz : Q z ≠ 0) (hx : P x * Q z ^ 2 ≠ Q x * P z ^ 2) :
    W.addXYZ P Q = addZ P Q •
      ![W.toAffine.addX (P x / P z ^ 2) (Q x / Q z ^ 2)
          (W.toAffine.slope (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3) (Q y / Q z ^ 3)),
        W.toAffine.addY (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3)
          (W.toAffine.slope (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3) (Q y / Q z ^ 3)),
        1] 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P Q : Fin 3 → F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P z ≠ 0) (hQz : Q z ≠ 0) (hx : P x * Q z ^ 2 ≠ Q x * P z ^ 2)
Goal: W.addXYZ P Q =
  WeierstrassCurve.Jacobian.addZ P Q •
    ![W.toAffine.addX (P x / P z ^ 2) (Q x / Q z ^ 2)
        (W.toAffine.slope (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3) (Q y / Q z ^ 3)),
      W.toAffine.addY (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3)
        (W.toAffine.slope (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3) (Q y / Q z ^ 3)),
      1]
-- WeierstrassCurve.Jacobian.neg_smul
lemma neg_smul (P : Fin 3 → R) (u : R) : W'.neg (u • P) = u • W'.neg P 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P : Fin 3 → R) (u : R)
Goal: W'.neg (u • P) = u • W'.neg P
-- WeierstrassCurve.Jacobian.neg_smul_equiv
lemma neg_smul_equiv (P : Fin 3 → R) {u : R} (hu : IsUnit u) : W'.neg (u • P) ≈ W'.neg P 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P : Fin 3 → R) {u : R} (hu : IsUnit u)
Goal: W'.neg (u • P) ≈ W'.neg P
-- WeierstrassCurve.Jacobian.neg_equiv
lemma neg_equiv {P Q : Fin 3 → R} (h : P ≈ Q) : W'.neg P ≈ W'.neg Q 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P Q : Fin 3 → R} (h : P ≈ Q)
Goal: W'.neg P ≈ W'.neg Q
-- WeierstrassCurve.Jacobian.neg_of_Z_eq_zero'
lemma neg_of_Z_eq_zero' {P : Fin 3 → R} (hPz : P z = 0) : W'.neg P = ![P x, -P y, 0] 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P : Fin 3 → R} (hPz : P z = 0)
Goal: W'.neg P = ![P x, -P y, 0]
-- WeierstrassCurve.Jacobian.neg_of_Z_eq_zero
lemma neg_of_Z_eq_zero {P : Fin 3 → F} (hP : W.Nonsingular P) (hPz : P z = 0) :
    W.neg P = -(P y / P x) • ![1, 1, 0] 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P : Fin 3 → F} (hP : W.Nonsingular P) (hPz : P z = 0)
Goal: W.neg P = -(P y / P x) • ![1, 1, 0]
-- WeierstrassCurve.Jacobian.neg_of_Z_ne_zero
lemma neg_of_Z_ne_zero {P : Fin 3 → F} (hPz : P z ≠ 0) :
    W.neg P = P z • ![P x / P z ^ 2, W.toAffine.negY (P x / P z ^ 2) (P y / P z ^ 3), 1] 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P : Fin 3 → F} (hPz : P z ≠ 0)
Goal: W.neg P = P z • ![P x / P z ^ 2, W.toAffine.negY (P x / P z ^ 2) (P y / P z ^ 3), 1]
-- _private.Mathlib.AlgebraicGeometry.EllipticCurve.Jacobian.0.WeierstrassCurve.Jacobian.nonsingular_neg_of_Z_ne_zero
private lemma nonsingular_neg_of_Z_ne_zero {P : Fin 3 → F} (hP : W.Nonsingular P) (hPz : P z ≠ 0) :
    W.Nonsingular ![P x / P z ^ 2, W.toAffine.negY (P x / P z ^ 2) (P y / P z ^ 3), 1] 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P : Fin 3 → F} (hP : W.Nonsingular P) (hPz : P z ≠ 0)
Goal: W.Nonsingular ![P x / P z ^ 2, W.toAffine.negY (P x / P z ^ 2) (P y / P z ^ 3), 1]
-- WeierstrassCurve.Jacobian.nonsingular_neg
lemma nonsingular_neg {P : Fin 3 → F} (hP : W.Nonsingular P) : W.Nonsingular <| W.neg P 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P : Fin 3 → F} (hP : W.Nonsingular P)
Goal: W.Nonsingular (W.neg P)
-- WeierstrassCurve.Jacobian.addZ_neg
lemma addZ_neg {P : Fin 3 → R} : addZ P (W'.neg P) = 0 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P : Fin 3 → R}
Goal: WeierstrassCurve.Jacobian.addZ P (W'.neg P) = 0
-- WeierstrassCurve.Jacobian.addX_neg
lemma addX_neg {P : Fin 3 → R} (hP : W'.Equation P) : W'.addX P (W'.neg P) = W'.dblZ P ^ 2 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P : Fin 3 → R} (hP : W'.Equation P)
Goal: W'.addX P (W'.neg P) = W'.dblZ P ^ 2
-- WeierstrassCurve.Jacobian.negAddY_neg
lemma negAddY_neg {P : Fin 3 → R} (hP : W'.Equation P) :
    W'.negAddY P (W'.neg P) = W'.dblZ P ^ 3 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P : Fin 3 → R} (hP : W'.Equation P)
Goal: W'.negAddY P (W'.neg P) = W'.dblZ P ^ 3