ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- WeierstrassCurve.Jacobian.addY_neg
lemma addY_neg {P : Fin 3 → R} (hP : W'.Equation P) : W'.addY 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'.addY P (W'.neg P) = -W'.dblZ P ^ 3
-- WeierstrassCurve.Jacobian.addXYZ_neg
lemma addXYZ_neg {P : Fin 3 → R} (hP : W'.Equation P) :
    W'.addXYZ P (W'.neg P) = -W'.dblZ P • ![1, 1, 0] 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P : Fin 3 → R} (hP : W'.Equation P)
Goal: W'.addXYZ P (W'.neg P) = -W'.dblZ P • ![1, 1, 0]
-- WeierstrassCurve.Jacobian.negMap_eq
lemma negMap_eq {P : Fin 3 → R} : W'.negMap ⟦P⟧ = ⟦W'.neg P⟧ 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P : Fin 3 → R}
Goal: W'.negMap ⟦P⟧ = ⟦W'.neg P⟧
-- WeierstrassCurve.Jacobian.negMap_of_Z_eq_zero
lemma negMap_of_Z_eq_zero {P : Fin 3 → F} (hP : W.Nonsingular P) (hPz : P z = 0) :
    W.negMap ⟦P⟧ = ⟦![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.negMap ⟦P⟧ = ⟦![1, 1, 0]⟧
-- WeierstrassCurve.Jacobian.negMap_of_Z_ne_zero
lemma negMap_of_Z_ne_zero {P : Fin 3 → F} (hPz : P z ≠ 0) :
    W.negMap ⟦P⟧ = ⟦![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.negMap ⟦P⟧ = ⟦![P x / P z ^ 2, W.toAffine.negY (P x / P z ^ 2) (P y / P z ^ 3), 1]⟧
-- WeierstrassCurve.Jacobian.nonsingularLift_negMap
lemma nonsingularLift_negMap {P : PointClass F} (hP : W.NonsingularLift P) :
    W.NonsingularLift <| W.negMap P 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P : WeierstrassCurve.Jacobian.PointClass F} (hP : W.NonsingularLift P)
Goal: W.NonsingularLift (W.negMap P)
-- WeierstrassCurve.Jacobian.add_of_equiv
lemma add_of_equiv {P Q : Fin 3 → R} (h : P ≈ Q) : W'.add P Q = W'.dblXYZ P 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P Q : Fin 3 → R} (h : P ≈ Q)
Goal: W'.add P Q = W'.dblXYZ P
-- WeierstrassCurve.Jacobian.add_smul_of_equiv
lemma add_smul_of_equiv {P Q : Fin 3 → R} (h : P ≈ Q) {u v : R} (hu : IsUnit u) (hv : IsUnit v) :
    W'.add (u • P) (v • Q) = u ^ 4 • W'.add P Q 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P Q : Fin 3 → R} (h : P ≈ Q) {u v : R} (hu : IsUnit u) (hv : IsUnit v)
Goal: W'.add (u • P) (v • Q) = u ^ 4 • W'.add P Q
-- WeierstrassCurve.Jacobian.add_self
lemma add_self (P : Fin 3 → R) : W'.add P P = W'.dblXYZ P 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P : Fin 3 → R)
Goal: W'.add P P = W'.dblXYZ P
-- WeierstrassCurve.Jacobian.add_of_eq
lemma add_of_eq {P Q : Fin 3 → R} (h : P = Q) : W'.add P Q = W'.dblXYZ P 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P Q : Fin 3 → R} (h : P = Q)
Goal: W'.add P Q = W'.dblXYZ P
-- WeierstrassCurve.Jacobian.add_of_not_equiv
lemma add_of_not_equiv {P Q : Fin 3 → R} (h : ¬P ≈ Q) : W'.add P Q = W'.addXYZ P Q 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P Q : Fin 3 → R} (h : ¬P ≈ Q)
Goal: W'.add P Q = W'.addXYZ P Q
-- WeierstrassCurve.Jacobian.add_smul_of_not_equiv
lemma add_smul_of_not_equiv {P Q : Fin 3 → R} (h : ¬P ≈ Q) {u v : R} (hu : IsUnit u)
    (hv : IsUnit v) : W'.add (u • P) (v • Q) = (u * v) ^ 2 • W'.add P Q 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P Q : Fin 3 → R} (h : ¬P ≈ Q) {u v : R} (hu : IsUnit u) (hv : IsUnit v)
Goal: W'.add (u • P) (v • Q) = (u * v) ^ 2 • W'.add P Q
-- WeierstrassCurve.Jacobian.add_smul_equiv
lemma add_smul_equiv (P Q : Fin 3 → R) {u v : R} (hu : IsUnit u) (hv : IsUnit v) :
    W'.add (u • P) (v • Q) ≈ W'.add P Q 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P Q : Fin 3 → R) {u v : R} (hu : IsUnit u) (hv : IsUnit v)
Goal: W'.add (u • P) (v • Q) ≈ W'.add P Q
-- WeierstrassCurve.Jacobian.add_equiv
lemma add_equiv {P P' Q Q' : Fin 3 → R} (hP : P ≈ P') (hQ : Q ≈ Q') :
    W'.add P Q ≈ W'.add P' Q' 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P P' Q Q' : Fin 3 → R} (hP : P ≈ P') (hQ : Q ≈ Q')
Goal: W'.add P Q ≈ W'.add P' Q'
-- WeierstrassCurve.Jacobian.add_of_Z_eq_zero
lemma add_of_Z_eq_zero {P Q : Fin 3 → F} (hP : W.Nonsingular P) (hQ : W.Nonsingular Q)
    (hPz : P z = 0) (hQz : Q z = 0) : W.add P Q = P x ^ 2 • ![1, 1, 0] 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P Q : Fin 3 → F} (hP : W.Nonsingular P) (hQ : W.Nonsingular Q) (hPz : P z = 0) (hQz : Q z = 0)
Goal: W.add P Q = P x ^ 2 • ![1, 1, 0]
-- WeierstrassCurve.Jacobian.add_of_Z_eq_zero_left
lemma add_of_Z_eq_zero_left {P Q : Fin 3 → R} (hP : W'.Equation P) (hPz : P z = 0) (hQz : Q z ≠ 0) :
    W'.add 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) (hQz : Q z ≠ 0)
Goal: W'.add P Q = (P x * Q z) • Q
-- WeierstrassCurve.Jacobian.add_of_Z_eq_zero_right
lemma add_of_Z_eq_zero_right {P Q : Fin 3 → R} (hQ : W'.Equation Q) (hPz : P z ≠ 0)
    (hQz : Q z = 0) : W'.add 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) (hPz : P z ≠ 0) (hQz : Q z = 0)
Goal: W'.add P Q = -(Q x * P z) • P
-- WeierstrassCurve.Jacobian.add_of_Y_eq
lemma add_of_Y_eq {P Q : Fin 3 → F} (hPz : P z ≠ 0) (hQz : Q z ≠ 0)
    (hx : P x * Q z ^ 2 = Q x * P z ^ 2) (hy : P y * Q z ^ 3 = Q y * P z ^ 3)
    (hy' : P y * Q z ^ 3 = W.negY Q * P z ^ 3) : W.add P Q = W.dblU P • ![1, 1, 0] 
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) (hy : P y * Q z ^ 3 = Q y * P z ^ 3) (hy' : P y * Q z ^ 3 = W.negY Q * P z ^ 3)
Goal: W.add P Q = W.dblU P • ![1, 1, 0]
-- WeierstrassCurve.Jacobian.add_of_Y_ne
lemma add_of_Y_ne {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) (hy : P y * Q z ^ 3 ≠ Q y * P z ^ 3) :
    W.add 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) (hy : P y * Q z ^ 3 ≠ Q y * P z ^ 3)
Goal: W.add P Q = WeierstrassCurve.Jacobian.addU P Q • ![1, 1, 0]
-- WeierstrassCurve.Jacobian.add_of_Y_ne'
lemma add_of_Y_ne' {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) (hy : P y * Q z ^ 3 ≠ W.negY Q * P z ^ 3) :
    W.add P Q = W.dblZ P •
      ![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) (hy : P y * Q z ^ 3 ≠ W.negY Q * P z ^ 3)
Goal: W.add P Q =
  W.dblZ P •
    ![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.add_of_X_ne
lemma add_of_X_ne {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.add 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.add 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]
-- _private.Mathlib.AlgebraicGeometry.EllipticCurve.Jacobian.0.WeierstrassCurve.Jacobian.nonsingular_add_of_Z_ne_zero
private lemma nonsingular_add_of_Z_ne_zero {P Q : Fin 3 → F} (hP : W.Nonsingular P)
    (hQ : W.Nonsingular Q) (hPz : P z ≠ 0) (hQz : Q z ≠ 0)
    (hxy : P x * Q z ^ 2 = Q x * P z ^ 2 → P y * Q z ^ 3 ≠ W.negY Q * P z ^ 3) : W.Nonsingular
      ![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.Nonsingular P) (hQ : W.Nonsingular Q) (hPz : P z ≠ 0) (hQz : Q z ≠ 0) (hxy : P x * Q z ^ 2 = Q x * P z ^ 2 → P y * Q z ^ 3 ≠ W.negY Q * P z ^ 3)
Goal: W.Nonsingular
  ![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.nonsingular_add
lemma nonsingular_add {P Q : Fin 3 → F} (hP : W.Nonsingular P) (hQ : W.Nonsingular Q) :
    W.Nonsingular <| W.add P Q 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P Q : Fin 3 → F} (hP : W.Nonsingular P) (hQ : W.Nonsingular Q)
Goal: W.Nonsingular (W.add P Q)
-- WeierstrassCurve.Jacobian.addMap_eq
lemma addMap_eq (P Q : Fin 3 → R) : W'.addMap ⟦P⟧ ⟦Q⟧ = ⟦W'.add P Q⟧ 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P Q : Fin 3 → R)
Goal: W'.addMap ⟦P⟧ ⟦Q⟧ = ⟦W'.add P Q⟧
-- WeierstrassCurve.Jacobian.addMap_of_Z_eq_zero_left
lemma addMap_of_Z_eq_zero_left {P : Fin 3 → F} {Q : PointClass F} (hP : W.Nonsingular P)
    (hQ : W.NonsingularLift Q) (hPz : P z = 0) : W.addMap ⟦P⟧ Q = Q 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P : Fin 3 → F} {Q : WeierstrassCurve.Jacobian.PointClass F} (hP : W.Nonsingular P) (hQ : W.NonsingularLift Q) (hPz : P z = 0)
Goal: W.addMap ⟦P⟧ Q = Q
-- WeierstrassCurve.Jacobian.addMap_of_Z_eq_zero_right
lemma addMap_of_Z_eq_zero_right {P : PointClass F} {Q : Fin 3 → F} (hP : W.NonsingularLift P)
    (hQ : W.Nonsingular Q) (hQz : Q z = 0) : W.addMap P ⟦Q⟧ = P 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P : WeierstrassCurve.Jacobian.PointClass F} {Q : Fin 3 → F} (hP : W.NonsingularLift P) (hQ : W.Nonsingular Q) (hQz : Q z = 0)
Goal: W.addMap P ⟦Q⟧ = P
-- WeierstrassCurve.Jacobian.addMap_of_Y_eq
lemma addMap_of_Y_eq {P Q : Fin 3 → F} (hP : W.Nonsingular P) (hQ : W.Equation Q) (hPz : P z ≠ 0)
    (hQz : Q z ≠ 0) (hx : P x * Q z ^ 2 = Q x * P z ^ 2)
    (hy' : P y * Q z ^ 3 = W.negY Q * P z ^ 3) : W.addMap ⟦P⟧ ⟦Q⟧ = ⟦![1, 1, 0]⟧ 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P Q : Fin 3 → F} (hP : W.Nonsingular P) (hQ : W.Equation Q) (hPz : P z ≠ 0) (hQz : Q z ≠ 0) (hx : P x * Q z ^ 2 = Q x * P z ^ 2) (hy' : P y * Q z ^ 3 = W.negY Q * P z ^ 3)
Goal: W.addMap ⟦P⟧ ⟦Q⟧ = ⟦![1, 1, 0]⟧
-- WeierstrassCurve.Jacobian.addMap_of_Z_ne_zero
lemma addMap_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) (hxy : P x * Q z ^ 2 = Q x * P z ^ 2 → P y * Q z ^ 3 ≠ W.negY Q * P z ^ 3) :
    W.addMap ⟦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) (hxy : P x * Q z ^ 2 = Q x * P z ^ 2 → P y * Q z ^ 3 ≠ W.negY Q * P z ^ 3)
Goal: W.addMap ⟦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.nonsingularLift_addMap
lemma nonsingularLift_addMap {P Q : PointClass F} (hP : W.NonsingularLift P)
    (hQ : W.NonsingularLift Q) : W.NonsingularLift <| W.addMap P Q 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P Q : WeierstrassCurve.Jacobian.PointClass F} (hP : W.NonsingularLift P) (hQ : W.NonsingularLift Q)
Goal: W.NonsingularLift (W.addMap P Q)
-- WeierstrassCurve.Jacobian.Point.nonsingular
@[ext]
structure Point where
    {point : PointClass R}
    (nonsingular : W'.NonsingularLift point)
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (self : W'.Point)
Goal: W'.NonsingularLift self.point
-- WeierstrassCurve.Jacobian.Point.mk_point
lemma mk_point {P : PointClass R} (h : W'.NonsingularLift P) : (mk h).point = P 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P : WeierstrassCurve.Jacobian.PointClass R} (h : W'.NonsingularLift P)
Goal: (WeierstrassCurve.Jacobian.Point.mk h).point = P
-- WeierstrassCurve.Jacobian.Point.zero_def
lemma zero_def [Nontrivial R] : (0 : W'.Point) = ⟨nonsingularLift_zero⟩ 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} [Nontrivial R]
Goal: 0 = WeierstrassCurve.Jacobian.Point.mk ⋯
-- WeierstrassCurve.Jacobian.Point.zero_point
lemma zero_point [Nontrivial R] : (0 : W'.Point).point = ⟦![1, 1, 0]⟧ 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} [Nontrivial R]
Goal: WeierstrassCurve.Jacobian.Point.point 0 = ⟦![1, 1, 0]⟧
-- WeierstrassCurve.Jacobian.Point.fromAffine_zero
lemma fromAffine_zero [Nontrivial R] : fromAffine 0 = (0 : W'.Point) 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} [Nontrivial R]
Goal: WeierstrassCurve.Jacobian.Point.fromAffine 0 = 0
-- WeierstrassCurve.Jacobian.Point.fromAffine_some
lemma fromAffine_some [Nontrivial R] {X Y : R} (h : W'.toAffine.Nonsingular X Y) :
    fromAffine (.some h) = ⟨(nonsingularLift_some ..).mpr h⟩ 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} [Nontrivial R] {X Y : R} (h : W'.toAffine.Nonsingular X Y)
Goal: WeierstrassCurve.Jacobian.Point.fromAffine (WeierstrassCurve.Affine.Point.some h) = WeierstrassCurve.Jacobian.Point.mk ⋯
-- WeierstrassCurve.Jacobian.Point.fromAffine_ne_zero
lemma fromAffine_ne_zero [Nontrivial R] {X Y : R} (h : W'.toAffine.Nonsingular X Y) :
    fromAffine (.some h) ≠ 0 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} [Nontrivial R] {X Y : R} (h : W'.toAffine.Nonsingular X Y)
Goal: WeierstrassCurve.Jacobian.Point.fromAffine (WeierstrassCurve.Affine.Point.some h) ≠ 0
-- WeierstrassCurve.Jacobian.Point.neg_def
lemma neg_def (P : W.Point) : -P = P.neg 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} (P : W.Point)
Goal: -P = P.neg
-- WeierstrassCurve.Jacobian.Point.neg_point
lemma neg_point (P : W.Point) : (-P).point = W.negMap P.point 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} (P : W.Point)
Goal: (-P).point = W.negMap P.point
-- WeierstrassCurve.Jacobian.Point.add_def
lemma add_def (P Q : W.Point) : P + Q = P.add Q 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} (P Q : W.Point)
Goal: P + Q = P.add Q
-- WeierstrassCurve.Jacobian.Point.add_point
lemma add_point (P Q : W.Point) : (P + Q).point = W.addMap P.point Q.point 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} (P Q : W.Point)
Goal: (P + Q).point = W.addMap P.point Q.point
-- WeierstrassCurve.Jacobian.Point.toAffine_of_singular
lemma toAffine_of_singular {P : Fin 3 → F} (hP : ¬W.Nonsingular P) : toAffine W P = 0 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P : Fin 3 → F} (hP : ¬W.Nonsingular P)
Goal: WeierstrassCurve.Jacobian.Point.toAffine W P = 0
-- WeierstrassCurve.Jacobian.Point.toAffine_of_Z_eq_zero
lemma toAffine_of_Z_eq_zero {P : Fin 3 → F} (hPz : P z = 0) :
    toAffine W P = 0 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P : Fin 3 → F} (hPz : P z = 0)
Goal: WeierstrassCurve.Jacobian.Point.toAffine W P = 0
-- WeierstrassCurve.Jacobian.Point.toAffine_zero
lemma toAffine_zero : toAffine W ![1, 1, 0] = 0 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F}
Goal: WeierstrassCurve.Jacobian.Point.toAffine W ![1, 1, 0] = 0
-- WeierstrassCurve.Jacobian.Point.toAffine_of_Z_ne_zero
lemma toAffine_of_Z_ne_zero {P : Fin 3 → F} (hP : W.Nonsingular P) (hPz : P z ≠ 0) :
    toAffine W P = .some ((nonsingular_of_Z_ne_zero hPz).mp hP) 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P : Fin 3 → F} (hP : W.Nonsingular P) (hPz : P z ≠ 0)
Goal: WeierstrassCurve.Jacobian.Point.toAffine W P = WeierstrassCurve.Affine.Point.some ⋯
-- WeierstrassCurve.Jacobian.Point.toAffine_some
lemma toAffine_some {X Y : F} (h : W.Nonsingular ![X, Y, 1]) :
    toAffine W ![X, Y, 1] = .some ((nonsingular_some ..).mp h) 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {X Y : F} (h : W.Nonsingular ![X, Y, 1])
Goal: WeierstrassCurve.Jacobian.Point.toAffine W ![X, Y, 1] = WeierstrassCurve.Affine.Point.some ⋯
-- WeierstrassCurve.Jacobian.Point.toAffine_smul
lemma toAffine_smul (P : Fin 3 → F) {u : F} (hu : IsUnit u) :
    toAffine W (u • P) = toAffine W P 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} (P : Fin 3 → F) {u : F} (hu : IsUnit u)
Goal: WeierstrassCurve.Jacobian.Point.toAffine W (u • P) = WeierstrassCurve.Jacobian.Point.toAffine W P
-- WeierstrassCurve.Jacobian.Point.toAffine_of_equiv
lemma toAffine_of_equiv {P Q : Fin 3 → F} (h : P ≈ Q) : toAffine W P = toAffine W Q 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P Q : Fin 3 → F} (h : P ≈ Q)
Goal: WeierstrassCurve.Jacobian.Point.toAffine W P = WeierstrassCurve.Jacobian.Point.toAffine W Q
-- WeierstrassCurve.Jacobian.Point.toAffine_neg
lemma toAffine_neg {P : Fin 3 → F} (hP : W.Nonsingular P) :
    toAffine W (W.neg P) = -toAffine W P 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P : Fin 3 → F} (hP : W.Nonsingular P)
Goal: WeierstrassCurve.Jacobian.Point.toAffine W (W.neg P) = -WeierstrassCurve.Jacobian.Point.toAffine W P
-- _private.Mathlib.AlgebraicGeometry.EllipticCurve.Jacobian.0.WeierstrassCurve.Jacobian.Point.toAffine_add_of_Z_ne_zero
private lemma toAffine_add_of_Z_ne_zero {P Q : Fin 3 → F} (hP : W.Nonsingular P)
    (hQ : W.Nonsingular Q) (hPz : P z ≠ 0) (hQz : Q z ≠ 0)
    (hxy : P x * Q z ^ 2 = Q x * P z ^ 2 → P y * Q z ^ 3 ≠ W.negY Q * P z ^ 3) :
    toAffine W
      ![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] = toAffine W P + toAffine W Q 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P Q : Fin 3 → F} (hP : W.Nonsingular P) (hQ : W.Nonsingular Q) (hPz : P z ≠ 0) (hQz : Q z ≠ 0) (hxy : P x * Q z ^ 2 = Q x * P z ^ 2 → P y * Q z ^ 3 ≠ W.negY Q * P z ^ 3)
Goal: WeierstrassCurve.Jacobian.Point.toAffine W
    ![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.Point.toAffine W P + WeierstrassCurve.Jacobian.Point.toAffine W Q
-- WeierstrassCurve.Jacobian.Point.toAffine_add
lemma toAffine_add {P Q : Fin 3 → F} (hP : W.Nonsingular P) (hQ : W.Nonsingular Q) :
    toAffine W (W.add P Q) = toAffine W P + toAffine W Q 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P Q : Fin 3 → F} (hP : W.Nonsingular P) (hQ : W.Nonsingular Q)
Goal: WeierstrassCurve.Jacobian.Point.toAffine W (W.add P Q) =
  WeierstrassCurve.Jacobian.Point.toAffine W P + WeierstrassCurve.Jacobian.Point.toAffine W Q
-- WeierstrassCurve.Jacobian.Point.toAffineLift_eq
lemma toAffineLift_eq {P : Fin 3 → F} (hP : W.NonsingularLift ⟦P⟧) :
    toAffineLift ⟨hP⟩ = toAffine W P 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P : Fin 3 → F} (hP : W.NonsingularLift ⟦P⟧)
Goal: (WeierstrassCurve.Jacobian.Point.mk hP).toAffineLift = WeierstrassCurve.Jacobian.Point.toAffine W P
-- WeierstrassCurve.Jacobian.Point.toAffineLift_of_Z_eq_zero
lemma toAffineLift_of_Z_eq_zero {P : Fin 3 → F} (hP : W.NonsingularLift ⟦P⟧) (hPz : P z = 0) :
    toAffineLift ⟨hP⟩ = 0 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P : Fin 3 → F} (hP : W.NonsingularLift ⟦P⟧) (hPz : P z = 0)
Goal: (WeierstrassCurve.Jacobian.Point.mk hP).toAffineLift = 0
-- WeierstrassCurve.Jacobian.Point.toAffineLift_zero
lemma toAffineLift_zero : toAffineLift (0 : W.Point) = 0 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F}
Goal: WeierstrassCurve.Jacobian.Point.toAffineLift 0 = 0
-- WeierstrassCurve.Jacobian.Point.toAffineLift_of_Z_ne_zero
lemma toAffineLift_of_Z_ne_zero {P : Fin 3 → F} {hP : W.NonsingularLift ⟦P⟧} (hPz : P z ≠ 0) :
    toAffineLift ⟨hP⟩ = .some ((nonsingular_of_Z_ne_zero hPz).mp hP) 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P : Fin 3 → F} {hP : W.NonsingularLift ⟦P⟧} (hPz : P z ≠ 0)
Goal: (WeierstrassCurve.Jacobian.Point.mk hP).toAffineLift = WeierstrassCurve.Affine.Point.some ⋯
-- WeierstrassCurve.Jacobian.Point.toAffineLift_some
lemma toAffineLift_some {X Y : F} (h : W.NonsingularLift ⟦![X, Y, 1]⟧) :
    toAffineLift ⟨h⟩ = .some ((nonsingular_some ..).mp h) 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {X Y : F} (h : W.NonsingularLift ⟦![X, Y, 1]⟧)
Goal: (WeierstrassCurve.Jacobian.Point.mk h).toAffineLift = WeierstrassCurve.Affine.Point.some ⋯
-- WeierstrassCurve.Jacobian.Point.toAffineLift_neg
lemma toAffineLift_neg (P : W.Point) : (-P).toAffineLift = -P.toAffineLift 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} (P : W.Point)
Goal: (-P).toAffineLift = -P.toAffineLift
-- WeierstrassCurve.Jacobian.Point.toAffineLift_add
lemma toAffineLift_add (P Q : W.Point) :
    (P + Q).toAffineLift = P.toAffineLift + Q.toAffineLift 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} (P Q : W.Point)
Goal: (P + Q).toAffineLift = P.toAffineLift + Q.toAffineLift
-- WeierstrassCurve.Jacobian.Point.toAffineAddEquiv_apply
@[simps]
noncomputable def toAffineAddEquiv : W.Point ≃+ W.toAffine.Point 
Arguments: {F : Type v} [Field F] (W : WeierstrassCurve.Jacobian F) (P : W.Point)
Goal: (WeierstrassCurve.Jacobian.Point.toAffineAddEquiv W) P = P.toAffineLift
-- WeierstrassCurve.Jacobian.Point.toAffineAddEquiv_symm_apply
@[simps]
noncomputable def toAffineAddEquiv : W.Point ≃+ W.toAffine.Point 
Arguments: {F : Type v} [Field F] (W : WeierstrassCurve.Jacobian F)
Goal: ∀ (a : W.toAffine.Point),
  (WeierstrassCurve.Jacobian.Point.toAffineAddEquiv W).symm a = WeierstrassCurve.Jacobian.Point.fromAffine a