ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- WeierstrassCurve.Jacobian.X_ne_zero_of_Z_eq_zero
lemma X_ne_zero_of_Z_eq_zero [NoZeroDivisors R] {P : Fin 3 → R} (hP : W'.Nonsingular P)
    (hPz : P z = 0) : P x ≠ 0 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} [NoZeroDivisors R] {P : Fin 3 → R} (hP : W'.Nonsingular P) (hPz : P z = 0)
Goal: P x ≠ 0
-- WeierstrassCurve.Jacobian.isUnit_X_of_Z_eq_zero
lemma isUnit_X_of_Z_eq_zero {P : Fin 3 → F} (hP : W.Nonsingular P) (hPz : P z = 0) : IsUnit (P x) 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P : Fin 3 → F} (hP : W.Nonsingular P) (hPz : P z = 0)
Goal: IsUnit (P x)
-- WeierstrassCurve.Jacobian.Y_ne_zero_of_Z_eq_zero
lemma Y_ne_zero_of_Z_eq_zero [NoZeroDivisors R] {P : Fin 3 → R} (hP : W'.Nonsingular P)
    (hPz : P z = 0) : P y ≠ 0 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} [NoZeroDivisors R] {P : Fin 3 → R} (hP : W'.Nonsingular P) (hPz : P z = 0)
Goal: P y ≠ 0
-- WeierstrassCurve.Jacobian.isUnit_Y_of_Z_eq_zero
lemma isUnit_Y_of_Z_eq_zero {P : Fin 3 → F} (hP : W.Nonsingular P) (hPz : P z = 0) : IsUnit (P y) 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P : Fin 3 → F} (hP : W.Nonsingular P) (hPz : P z = 0)
Goal: IsUnit (P y)
-- WeierstrassCurve.Jacobian.equiv_of_Z_eq_zero
lemma equiv_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) : 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) (hPz : P z = 0) (hQz : Q z = 0)
Goal: P ≈ Q
-- WeierstrassCurve.Jacobian.equiv_zero_of_Z_eq_zero
lemma equiv_zero_of_Z_eq_zero {P : Fin 3 → F} (hP : W.Nonsingular P) (hPz : P z = 0) :
    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: P ≈ ![1, 1, 0]
-- WeierstrassCurve.Jacobian.nonsingularLift_iff
lemma nonsingularLift_iff (P : Fin 3 → R) : W'.NonsingularLift ⟦P⟧ ↔ W'.Nonsingular P 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P : Fin 3 → R)
Goal: W'.NonsingularLift ⟦P⟧ ↔ W'.Nonsingular P
-- WeierstrassCurve.Jacobian.nonsingularLift_zero
lemma nonsingularLift_zero [Nontrivial R] : W'.NonsingularLift ⟦![1, 1, 0]⟧ 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} [Nontrivial R]
Goal: W'.NonsingularLift ⟦![1, 1, 0]⟧
-- WeierstrassCurve.Jacobian.nonsingularLift_some
lemma nonsingularLift_some (X Y : R) :
    W'.NonsingularLift ⟦![X, Y, 1]⟧ ↔ W'.toAffine.Nonsingular X Y 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (X Y : R)
Goal: W'.NonsingularLift ⟦![X, Y, 1]⟧ ↔ W'.toAffine.Nonsingular X Y
-- WeierstrassCurve.Jacobian.negY_smul
lemma negY_smul (P : Fin 3 → R) {u : R} : W'.negY (u • P) = u ^ 3 * W'.negY P 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P : Fin 3 → R) {u : R}
Goal: W'.negY (u • P) = u ^ 3 * W'.negY P
-- WeierstrassCurve.Jacobian.negY_of_Z_eq_zero
lemma negY_of_Z_eq_zero {P : Fin 3 → R} (hPz : P z = 0) : W'.negY P = -P y 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P : Fin 3 → R} (hPz : P z = 0)
Goal: W'.negY P = -P y
-- WeierstrassCurve.Jacobian.negY_of_Z_ne_zero
lemma negY_of_Z_ne_zero {P : Fin 3 → F} (hPz : P z ≠ 0) :
    W.negY P / P z ^ 3 = W.toAffine.negY (P x / P z ^ 2) (P y / P z ^ 3) 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P : Fin 3 → F} (hPz : P z ≠ 0)
Goal: W.negY P / P z ^ 3 = W.toAffine.negY (P x / P z ^ 2) (P y / P z ^ 3)
-- WeierstrassCurve.Jacobian.Y_sub_Y_mul_Y_sub_negY
lemma Y_sub_Y_mul_Y_sub_negY {P Q : Fin 3 → R} (hP : W'.Equation P) (hQ : W'.Equation Q)
    (hx : P x * Q z ^ 2 = Q x * P z ^ 2) :
    (P y * Q z ^ 3 - Q y * P z ^ 3) * (P y * Q z ^ 3 - W'.negY Q * P z ^ 3) = 0 
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: (P y * Q z ^ 3 - Q y * P z ^ 3) * (P y * Q z ^ 3 - W'.negY Q * P z ^ 3) = 0
-- WeierstrassCurve.Jacobian.Y_eq_of_Y_ne
lemma Y_eq_of_Y_ne {P Q : Fin 3 → F} (hP : W.Equation P) (hQ : W.Equation Q)
    (hx : P x * Q z ^ 2 = Q x * P z ^ 2) (hy : P y * Q z ^ 3 ≠ Q y * P z ^ 3) :
    P y * Q z ^ 3 = W.negY Q * P 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) (hx : P x * Q z ^ 2 = Q x * P z ^ 2) (hy : P y * Q z ^ 3 ≠ Q y * P z ^ 3)
Goal: P y * Q z ^ 3 = W.negY Q * P z ^ 3
-- WeierstrassCurve.Jacobian.Y_eq_of_Y_ne'
lemma Y_eq_of_Y_ne' {P Q : Fin 3 → F} (hP : W.Equation P) (hQ : W.Equation Q)
    (hx : P x * Q z ^ 2 = Q x * P z ^ 2) (hy : P y * Q z ^ 3 ≠ W.negY Q * P z ^ 3) :
    P y * Q z ^ 3 = Q y * P 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) (hx : P x * Q z ^ 2 = Q x * P z ^ 2) (hy : P y * Q z ^ 3 ≠ W.negY Q * P z ^ 3)
Goal: P y * Q z ^ 3 = Q y * P z ^ 3
-- WeierstrassCurve.Jacobian.Y_eq_iff'
lemma Y_eq_iff' {P Q : Fin 3 → F} (hPz : P z ≠ 0) (hQz : Q z ≠ 0) :
    P y * Q z ^ 3 = W.negY Q * P z ^ 3 ↔
      P y / P z ^ 3 = W.toAffine.negY (Q x / Q z ^ 2) (Q y / 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: P y * Q z ^ 3 = W.negY Q * P z ^ 3 ↔ P y / P z ^ 3 = W.toAffine.negY (Q x / Q z ^ 2) (Q y / Q z ^ 3)
-- WeierstrassCurve.Jacobian.Y_sub_Y_add_Y_sub_negY
lemma Y_sub_Y_add_Y_sub_negY (P Q : Fin 3 → R) (hx : P x * Q z ^ 2 = Q x * P z ^ 2) :
    (P y * Q z ^ 3 - Q y * P z ^ 3) + (P y * Q z ^ 3 - W'.negY Q * P z ^ 3) =
      (P y - W'.negY P) * Q z ^ 3 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P Q : Fin 3 → R) (hx : P x * Q z ^ 2 = Q x * P z ^ 2)
Goal: P y * Q z ^ 3 - Q y * P z ^ 3 + (P y * Q z ^ 3 - W'.negY Q * P z ^ 3) = (P y - W'.negY P) * Q z ^ 3
-- WeierstrassCurve.Jacobian.Y_ne_negY_of_Y_ne
lemma Y_ne_negY_of_Y_ne [NoZeroDivisors 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) (hy : P y * Q z ^ 3 ≠ Q y * P z ^ 3) :
    P y ≠ W'.negY P 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} [NoZeroDivisors 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) (hy : P y * Q z ^ 3 ≠ Q y * P z ^ 3)
Goal: P y ≠ W'.negY P
-- WeierstrassCurve.Jacobian.Y_ne_negY_of_Y_ne'
lemma Y_ne_negY_of_Y_ne' [NoZeroDivisors 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)
    (hy : P y * Q z ^ 3 ≠ W'.negY Q * P z ^ 3) : P y ≠ W'.negY P 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} [NoZeroDivisors 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) (hy : P y * Q z ^ 3 ≠ W'.negY Q * P z ^ 3)
Goal: P y ≠ W'.negY P
-- WeierstrassCurve.Jacobian.Y_eq_negY_of_Y_eq
lemma Y_eq_negY_of_Y_eq [NoZeroDivisors R] {P Q : Fin 3 → R} (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) : P y = W'.negY P 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} [NoZeroDivisors R] {P Q : Fin 3 → R} (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: P y = W'.negY P
-- WeierstrassCurve.Jacobian.nonsingular_iff_of_Y_eq_negY
lemma nonsingular_iff_of_Y_eq_negY {P : Fin 3 → F} (hPz : P z ≠ 0) (hy : P y = W.negY P) :
    W.Nonsingular P ↔ W.Equation P ∧ eval P W.polynomialX ≠ 0 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P : Fin 3 → F} (hPz : P z ≠ 0) (hy : P y = W.negY P)
Goal: W.Nonsingular P ↔ W.Equation P ∧ (MvPolynomial.eval P) W.polynomialX ≠ 0
-- WeierstrassCurve.Jacobian.dblU_eq
lemma dblU_eq (P : Fin 3 → R) : W'.dblU P =
    W'.a₁ * P y * P z - (3 * P x ^ 2 + 2 * W'.a₂ * P x * P z ^ 2 + W'.a₄ * P z ^ 4) 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P : Fin 3 → R)
Goal: W'.dblU P = W'.a₁ * P y * P z - (3 * P x ^ 2 + 2 * W'.a₂ * P x * P z ^ 2 + W'.a₄ * P z ^ 4)
-- WeierstrassCurve.Jacobian.dblU_smul
lemma dblU_smul (P : Fin 3 → R) (u : R) : W'.dblU (u • P) = u ^ 4 * W'.dblU P 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P : Fin 3 → R) (u : R)
Goal: W'.dblU (u • P) = u ^ 4 * W'.dblU P
-- WeierstrassCurve.Jacobian.dblU_of_Z_eq_zero
lemma dblU_of_Z_eq_zero {P : Fin 3 → R} (hPz : P z = 0) : W'.dblU P = -3 * P x ^ 2 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P : Fin 3 → R} (hPz : P z = 0)
Goal: W'.dblU P = -3 * P x ^ 2
-- WeierstrassCurve.Jacobian.dblU_ne_zero_of_Y_eq
lemma dblU_ne_zero_of_Y_eq {P Q : Fin 3 → F} (hP : W.Nonsingular P) (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.dblU P ≠ 0 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P Q : Fin 3 → F} (hP : W.Nonsingular P) (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.dblU P ≠ 0
-- WeierstrassCurve.Jacobian.isUnit_dblU_of_Y_eq
lemma isUnit_dblU_of_Y_eq {P Q : Fin 3 → F} (hP : W.Nonsingular P) (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) : IsUnit (W.dblU P) 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P Q : Fin 3 → F} (hP : W.Nonsingular P) (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: IsUnit (W.dblU P)
-- WeierstrassCurve.Jacobian.dblZ_smul
lemma dblZ_smul (P : Fin 3 → R) (u : R) : W'.dblZ (u • P) = u ^ 4 * W'.dblZ P 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P : Fin 3 → R) (u : R)
Goal: W'.dblZ (u • P) = u ^ 4 * W'.dblZ P
-- WeierstrassCurve.Jacobian.dblZ_of_Z_eq_zero
lemma dblZ_of_Z_eq_zero {P : Fin 3 → R} (hPz : P z = 0) : W'.dblZ P = 0 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P : Fin 3 → R} (hPz : P z = 0)
Goal: W'.dblZ P = 0
-- WeierstrassCurve.Jacobian.dblZ_of_Y_eq
lemma dblZ_of_Y_eq [NoZeroDivisors R] {P Q : Fin 3 → R} (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'.dblZ P = 0 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} [NoZeroDivisors R] {P Q : Fin 3 → R} (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'.dblZ P = 0
-- WeierstrassCurve.Jacobian.dblZ_ne_zero_of_Y_ne
lemma dblZ_ne_zero_of_Y_ne [NoZeroDivisors R] {P Q : Fin 3 → R} (hP : W'.Equation P)
    (hQ : W'.Equation Q) (hPz : P 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'.dblZ P ≠ 0 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} [NoZeroDivisors R] {P Q : Fin 3 → R} (hP : W'.Equation P) (hQ : W'.Equation Q) (hPz : P 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'.dblZ P ≠ 0
-- WeierstrassCurve.Jacobian.isUnit_dblZ_of_Y_ne
lemma isUnit_dblZ_of_Y_ne {P Q : Fin 3 → F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P z ≠ 0)
    (hx : P x * Q z ^ 2 = Q x * P z ^ 2) (hy : P y * Q z ^ 3 ≠ Q y * P z ^ 3) : IsUnit (W.dblZ P) 
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) (hx : P x * Q z ^ 2 = Q x * P z ^ 2) (hy : P y * Q z ^ 3 ≠ Q y * P z ^ 3)
Goal: IsUnit (W.dblZ P)
-- WeierstrassCurve.Jacobian.dblZ_ne_zero_of_Y_ne'
lemma dblZ_ne_zero_of_Y_ne' [NoZeroDivisors R] {P Q : Fin 3 → R} (hP : W'.Equation P)
    (hQ : W'.Equation Q) (hPz : P 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'.dblZ P ≠ 0 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} [NoZeroDivisors R] {P Q : Fin 3 → R} (hP : W'.Equation P) (hQ : W'.Equation Q) (hPz : P 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'.dblZ P ≠ 0
-- WeierstrassCurve.Jacobian.isUnit_dblZ_of_Y_ne'
lemma isUnit_dblZ_of_Y_ne' {P Q : Fin 3 → F} (hP : W.Equation P) (hQ : W.Equation Q) (hPz : P 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) :
    IsUnit (W.dblZ P) 
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) (hx : P x * Q z ^ 2 = Q x * P z ^ 2) (hy : P y * Q z ^ 3 ≠ W.negY Q * P z ^ 3)
Goal: IsUnit (W.dblZ P)
-- _private.Mathlib.AlgebraicGeometry.EllipticCurve.Jacobian.0.WeierstrassCurve.Jacobian.toAffine_slope_of_eq
private lemma toAffine_slope_of_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)
    (hy : P y * Q z ^ 3 ≠ W.negY Q * 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) =
      -W.dblU P / W.dblZ P 
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.toAffine.slope (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3) (Q y / Q z ^ 3) = -W.dblU P / W.dblZ P
-- WeierstrassCurve.Jacobian.dblX_smul
lemma dblX_smul (P : Fin 3 → R) (u : R) : W'.dblX (u • P) = (u ^ 4) ^ 2 * W'.dblX P 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P : Fin 3 → R) (u : R)
Goal: W'.dblX (u • P) = (u ^ 4) ^ 2 * W'.dblX P
-- WeierstrassCurve.Jacobian.dblX_of_Z_eq_zero
lemma dblX_of_Z_eq_zero {P : Fin 3 → R} (hP : W'.Equation P) (hPz : P z = 0) :
    W'.dblX P = (P x ^ 2) ^ 2 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P : Fin 3 → R} (hP : W'.Equation P) (hPz : P z = 0)
Goal: W'.dblX P = (P x ^ 2) ^ 2
-- WeierstrassCurve.Jacobian.dblX_of_Y_eq
lemma dblX_of_Y_eq [NoZeroDivisors R] {P Q : Fin 3 → R} (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'.dblX P = W'.dblU P ^ 2 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} [NoZeroDivisors R] {P Q : Fin 3 → R} (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'.dblX P = W'.dblU P ^ 2
-- _private.Mathlib.AlgebraicGeometry.EllipticCurve.Jacobian.0.WeierstrassCurve.Jacobian.toAffine_addX_of_eq
private lemma toAffine_addX_of_eq {P : Fin 3 → F} {n d : F} (hPz : P z ≠ 0) (hd : d ≠ 0) :
    W.toAffine.addX (P x / P z ^ 2) (P x / P z ^ 2) (-n / (P z * d)) =
      (n ^ 2 - W.a₁ * n * P z * d - W.a₂ * P z ^ 2 * d ^ 2 - 2 * P x * d ^ 2) / (P z * d) ^ 2 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P : Fin 3 → F} {n d : F} (hPz : P z ≠ 0) (hd : d ≠ 0)
Goal: W.toAffine.addX (P x / P z ^ 2) (P x / P z ^ 2) (-n / (P z * d)) =
  (n ^ 2 - W.a₁ * n * P z * d - W.a₂ * P z ^ 2 * d ^ 2 - 2 * P x * d ^ 2) / (P z * d) ^ 2
-- WeierstrassCurve.Jacobian.dblX_of_Z_ne_zero
lemma dblX_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) (hy : P y * Q z ^ 3 ≠ W.negY Q * P z ^ 3) :
    W.dblX P / W.dblZ P ^ 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) (hy : P y * Q z ^ 3 ≠ W.negY Q * P z ^ 3)
Goal: W.dblX P / W.dblZ P ^ 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.negDblY_smul
lemma negDblY_smul (P : Fin 3 → R) (u : R) : W'.negDblY (u • P) = (u ^ 4) ^ 3 * W'.negDblY P 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P : Fin 3 → R) (u : R)
Goal: W'.negDblY (u • P) = (u ^ 4) ^ 3 * W'.negDblY P
-- WeierstrassCurve.Jacobian.negDblY_of_Z_eq_zero
lemma negDblY_of_Z_eq_zero {P : Fin 3 → R} (hP : W'.Equation P) (hPz : P z = 0) :
    W'.negDblY P = -(P x ^ 2) ^ 3 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P : Fin 3 → R} (hP : W'.Equation P) (hPz : P z = 0)
Goal: W'.negDblY P = -(P x ^ 2) ^ 3
-- WeierstrassCurve.Jacobian.negDblY_of_Y_eq
lemma negDblY_of_Y_eq [NoZeroDivisors R] {P Q : Fin 3 → R} (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'.negDblY P = (-W'.dblU P) ^ 3 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} [NoZeroDivisors R] {P Q : Fin 3 → R} (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'.negDblY P = (-W'.dblU P) ^ 3
-- _private.Mathlib.AlgebraicGeometry.EllipticCurve.Jacobian.0.WeierstrassCurve.Jacobian.toAffine_negAddY_of_eq
private lemma toAffine_negAddY_of_eq {P : Fin 3 → F} {n d : F} (hPz : P z ≠ 0) (hd : d ≠ 0) :
    W.toAffine.negAddY (P x / P z ^ 2) (P x / P z ^ 2) (P y / P z ^ 3) (-n / (P z * d)) =
      (-n * (n ^ 2 - W.a₁ * n * P z * d - W.a₂ * P z ^ 2 * d ^ 2 - 2 * P x * d ^ 2 - P x * d ^ 2)
        + P y * d ^ 3) / (P z * d) ^ 3 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P : Fin 3 → F} {n d : F} (hPz : P z ≠ 0) (hd : d ≠ 0)
Goal: W.toAffine.negAddY (P x / P z ^ 2) (P x / P z ^ 2) (P y / P z ^ 3) (-n / (P z * d)) =
  (-n * (n ^ 2 - W.a₁ * n * P z * d - W.a₂ * P z ^ 2 * d ^ 2 - 2 * P x * d ^ 2 - P x * d ^ 2) + P y * d ^ 3) /
    (P z * d) ^ 3
-- WeierstrassCurve.Jacobian.negDblY_of_Z_ne_zero
lemma negDblY_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)
    (hy : P y * Q z ^ 3 ≠ W.negY Q * P z ^ 3) : W.negDblY P / W.dblZ P ^ 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) (hy : P y * Q z ^ 3 ≠ W.negY Q * P z ^ 3)
Goal: W.negDblY P / W.dblZ P ^ 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.dblY_smul
lemma dblY_smul (P : Fin 3 → R) (u : R) : W'.dblY (u • P) = (u ^ 4) ^ 3 * W'.dblY P 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P : Fin 3 → R) (u : R)
Goal: W'.dblY (u • P) = (u ^ 4) ^ 3 * W'.dblY P
-- WeierstrassCurve.Jacobian.dblY_of_Z_eq_zero
lemma dblY_of_Z_eq_zero {P : Fin 3 → R} (hP : W'.Equation P) (hPz : P z = 0) :
    W'.dblY P = (P x ^ 2) ^ 3 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P : Fin 3 → R} (hP : W'.Equation P) (hPz : P z = 0)
Goal: W'.dblY P = (P x ^ 2) ^ 3
-- WeierstrassCurve.Jacobian.dblY_of_Y_eq
lemma dblY_of_Y_eq [NoZeroDivisors R] {P Q : Fin 3 → R} (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'.dblY P = W'.dblU P ^ 3 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} [NoZeroDivisors R] {P Q : Fin 3 → R} (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'.dblY P = W'.dblU P ^ 3
-- WeierstrassCurve.Jacobian.dblY_of_Z_ne_zero
lemma dblY_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) (hy : P y * Q z ^ 3 ≠ W.negY Q * P z ^ 3) :
    W.dblY P / W.dblZ P ^ 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) (hy : P y * Q z ^ 3 ≠ W.negY Q * P z ^ 3)
Goal: W.dblY P / W.dblZ P ^ 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.dblXYZ_smul
lemma dblXYZ_smul (P : Fin 3 → R) (u : R) : W'.dblXYZ (u • P) = (u ^ 4) • W'.dblXYZ P 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P : Fin 3 → R) (u : R)
Goal: W'.dblXYZ (u • P) = u ^ 4 • W'.dblXYZ P
-- WeierstrassCurve.Jacobian.dblXYZ_of_Z_eq_zero
lemma dblXYZ_of_Z_eq_zero {P : Fin 3 → R} (hP : W'.Equation P) (hPz : P z = 0) :
    W'.dblXYZ P = P x ^ 2 • ![1, 1, 0] 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P : Fin 3 → R} (hP : W'.Equation P) (hPz : P z = 0)
Goal: W'.dblXYZ P = P x ^ 2 • ![1, 1, 0]
-- WeierstrassCurve.Jacobian.dblXYZ_of_Y_eq'
lemma dblXYZ_of_Y_eq' [NoZeroDivisors R] {P Q : Fin 3 → R} (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'.dblXYZ P = ![W'.dblU P ^ 2, W'.dblU P ^ 3, 0] 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} [NoZeroDivisors R] {P Q : Fin 3 → R} (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'.dblXYZ P = ![W'.dblU P ^ 2, W'.dblU P ^ 3, 0]
-- WeierstrassCurve.Jacobian.dblXYZ_of_Y_eq
lemma dblXYZ_of_Y_eq {P Q : Fin 3 → F} (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.dblXYZ P = W.dblU P • ![1, 1, 0] 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P Q : Fin 3 → F} (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.dblXYZ P = W.dblU P • ![1, 1, 0]
-- WeierstrassCurve.Jacobian.dblXYZ_of_Z_ne_zero
lemma dblXYZ_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) (hy : P y * Q z ^ 3 ≠ W.negY Q * P z ^ 3) :
    W.dblXYZ P = 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.dblXYZ P =
  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]