ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- Real.IsConjExponent.toNNReal
protected lemma Real.IsConjExponent.toNNReal {p q : ℝ} (hpq : p.IsConjExponent q) :
    p.toNNReal.IsConjExponent q.toNNReal 
Arguments: {p q : ℝ} (hpq : p.IsConjExponent q)
Goal: p.toNNReal.IsConjExponent q.toNNReal
-- WType.cardinal_mk_eq_sum'
theorem cardinal_mk_eq_sum' : #(WType β) = sum (fun a : α => #(WType β) ^ lift.{u} #(β a)) 
Arguments: {α : Type u} {β : α → Type v}
Goal: Cardinal.mk (WType β) = Cardinal.sum fun a => Cardinal.mk (WType β) ^ Cardinal.lift.{u, v} (Cardinal.mk (β a))
-- WType.cardinal_mk_le_of_le'
theorem cardinal_mk_le_of_le' {κ : Cardinal.{max u v}}
    (hκ : (sum fun a : α => κ ^ lift.{u} #(β a)) ≤ κ) :
    #(WType β) ≤ κ 
Arguments: {α : Type u} {β : α → Type v} {κ : Cardinal.{max u v}} (hκ : (Cardinal.sum fun a => κ ^ Cardinal.lift.{u, v} (Cardinal.mk (β a))) ≤ κ)
Goal: Cardinal.mk (WType β) ≤ κ
-- WType.cardinal_mk_le_max_aleph0_of_finite'
theorem cardinal_mk_le_max_aleph0_of_finite' [∀ a, Finite (β a)] :
    #(WType β) ≤ max (lift.{v} #α) ℵ₀ 
Arguments: {α : Type u} {β : α → Type v} [∀ (a : α), Finite (β a)]
Goal: Cardinal.mk (WType β) ≤ max (Cardinal.lift.{v, u} (Cardinal.mk α)) Cardinal.aleph0
-- WType.cardinal_mk_eq_sum
theorem cardinal_mk_eq_sum : #(WType β) = sum (fun a : α => #(WType β) ^ #(β a)) 
Arguments: {α : Type u} {β : α → Type u}
Goal: Cardinal.mk (WType β) = Cardinal.sum fun a => Cardinal.mk (WType β) ^ Cardinal.mk (β a)
-- WType.cardinal_mk_le_of_le
theorem cardinal_mk_le_of_le {κ : Cardinal.{u}} (hκ : (sum fun a : α => κ ^ #(β a)) ≤ κ) :
    #(WType β) ≤ κ 
Arguments: {α : Type u} {β : α → Type u} {κ : Cardinal.{u}} (hκ : (Cardinal.sum fun a => κ ^ Cardinal.mk (β a)) ≤ κ)
Goal: Cardinal.mk (WType β) ≤ κ
-- WType.cardinal_mk_le_max_aleph0_of_finite
theorem cardinal_mk_le_max_aleph0_of_finite [∀ a, Finite (β a)] : #(WType β) ≤ max #α ℵ₀ 
Arguments: {α : Type u} {β : α → Type u} [∀ (a : α), Finite (β a)]
Goal: Cardinal.mk (WType β) ≤ max (Cardinal.mk α) Cardinal.aleph0
-- WType.ofSigma_toSigma
@[simp]
theorem ofSigma_toSigma : ∀ w : WType β, ofSigma (toSigma w) = w
  
Arguments: {α : Type u_1} {β : α → Type u_2} (w : WType β)
Goal: WType.ofSigma w.toSigma = w
-- WType.toSigma_ofSigma
@[simp]
theorem toSigma_ofSigma : ∀ s : Σa : α, β a → WType β, toSigma (ofSigma s) = s
  
Arguments: {α : Type u_1} {β : α → Type u_2} (s : (a : α) × (β a → WType β))
Goal: (WType.ofSigma s).toSigma = s
-- WType.equivSigma_apply
@[simps]
def equivSigma : WType β ≃ Σa : α, β a → WType β 
Arguments: {α : Type u_1} (β : α → Type u_2)
Goal: ∀ (a : WType β), (WType.equivSigma β) a = a.toSigma
-- WType.equivSigma_symm_apply
@[simps]
def equivSigma : WType β ≃ Σa : α, β a → WType β 
Arguments: {α : Type u_1} (β : α → Type u_2)
Goal: ∀ (a : (a : α) × (β a → WType β)), (WType.equivSigma β).symm a = WType.ofSigma a
-- WType.elim_injective
theorem elim_injective (γ : Type*) (fγ : (Σa : α, β a → γ) → γ)
    (fγ_injective : Function.Injective fγ) : Function.Injective (elim γ fγ)
  
Arguments: {α : Type u_1} {β : α → Type u_2} (γ : Type u_3) (fγ : (a : α) × (β a → γ) → γ) (fγ_injective : Function.Injective fγ)
Goal: Function.Injective (WType.elim γ fγ)
-- WType.infinite_of_nonempty_of_isEmpty
theorem infinite_of_nonempty_of_isEmpty (a b : α) [ha : Nonempty (β a)] [he : IsEmpty (β b)] :
    Infinite (WType β) 
Arguments: {α : Type u_1} {β : α → Type u_2} (a b : α) [ha : Nonempty (β a)] [he : IsEmpty (β b)]
Goal: Infinite (WType β)
-- WType.depth_pos
theorem depth_pos (t : WType β) : 0 < t.depth 
Arguments: {α : Type u_1} {β : α → Type u_2} [(a : α) → Fintype (β a)] (t : WType β)
Goal: 0 < t.depth
-- WType.depth_lt_depth_mk
theorem depth_lt_depth_mk (a : α) (f : β a → WType β) (i : β a) : depth (f i) < depth ⟨a, f⟩ 
Arguments: {α : Type u_1} {β : α → Type u_2} [(a : α) → Fintype (β a)] (a : α) (f : β a → WType β) (i : β a)
Goal: (f i).depth < (WType.mk a f).depth
-- String.congr_append
lemma congr_append : ∀ (a b : String), a ++ b = String.mk (a.data ++ b.data)
  
Arguments: (a b : String)
Goal: a ++ b = { data := a.data ++ b.data }
-- String.length_replicate
@[simp] lemma length_replicate (n : ℕ) (c : Char) : (replicate n c).length = n 
Arguments: (n : ℕ) (c : Char)
Goal: (String.replicate n c).length = n
-- String.length_eq_list_length
lemma length_eq_list_length (l : List Char) : (String.mk l).length = l.length 
Arguments: (l : List Char)
Goal: { data := l }.length = l.length
-- String.leftpad_length
@[simp] lemma leftpad_length (n : ℕ) (c : Char) :
    ∀ (s : String), (leftpad n c s).length = max n s.length
  
Arguments: (n : ℕ) (c : Char) (s : String)
Goal: (String.leftpad n c s).length = max n s.length
-- String.leftpad_prefix
lemma leftpad_prefix (n : ℕ) (c : Char) : ∀ s, IsPrefix (replicate (n - length s) c) (leftpad n c s)
  
Arguments: (n : ℕ) (c : Char) (s : String)
Goal: (String.replicate (n - s.length) c).IsPrefix (String.leftpad n c s)
-- String.leftpad_suffix
lemma leftpad_suffix (n : ℕ) (c : Char) : ∀ s, IsSuffix s (leftpad n c s)
  
Arguments: (n : ℕ) (c : Char) (s : String)
Goal: s.IsSuffix (String.leftpad n c s)
-- Real.sInf_smul_of_nonneg
theorem Real.sInf_smul_of_nonneg (ha : 0 ≤ a) (s : Set ℝ) : sInf (a • s) = a • sInf s 
Arguments: {α : Type u_2} [LinearOrderedField α] [MulActionWithZero α ℝ] [OrderedSMul α ℝ] {a : α} (ha : 0 ≤ a) (s : Set ℝ)
Goal: sInf (a • s) = a • sInf s
-- Real.smul_iInf_of_nonneg
theorem Real.smul_iInf_of_nonneg (ha : 0 ≤ a) (f : ι → ℝ) : (a • ⨅ i, f i) = ⨅ i, a • f i 
Arguments: {ι : Sort u_1} {α : Type u_2} [LinearOrderedField α] [MulActionWithZero α ℝ] [OrderedSMul α ℝ] {a : α} (ha : 0 ≤ a) (f : ι → ℝ)
Goal: a • ⨅ i, f i = ⨅ i, a • f i
-- Real.sSup_smul_of_nonneg
theorem Real.sSup_smul_of_nonneg (ha : 0 ≤ a) (s : Set ℝ) : sSup (a • s) = a • sSup s 
Arguments: {α : Type u_2} [LinearOrderedField α] [MulActionWithZero α ℝ] [OrderedSMul α ℝ] {a : α} (ha : 0 ≤ a) (s : Set ℝ)
Goal: sSup (a • s) = a • sSup s
-- Real.smul_iSup_of_nonneg
theorem Real.smul_iSup_of_nonneg (ha : 0 ≤ a) (f : ι → ℝ) : (a • ⨆ i, f i) = ⨆ i, a • f i 
Arguments: {ι : Sort u_1} {α : Type u_2} [LinearOrderedField α] [MulActionWithZero α ℝ] [OrderedSMul α ℝ] {a : α} (ha : 0 ≤ a) (f : ι → ℝ)
Goal: a • ⨆ i, f i = ⨆ i, a • f i
-- Real.sInf_smul_of_nonpos
theorem Real.sInf_smul_of_nonpos (ha : a ≤ 0) (s : Set ℝ) : sInf (a • s) = a • sSup s 
Arguments: {α : Type u_2} [LinearOrderedField α] [Module α ℝ] [OrderedSMul α ℝ] {a : α} (ha : a ≤ 0) (s : Set ℝ)
Goal: sInf (a • s) = a • sSup s
-- Real.smul_iSup_of_nonpos
theorem Real.smul_iSup_of_nonpos (ha : a ≤ 0) (f : ι → ℝ) : (a • ⨆ i, f i) = ⨅ i, a • f i 
Arguments: {ι : Sort u_1} {α : Type u_2} [LinearOrderedField α] [Module α ℝ] [OrderedSMul α ℝ] {a : α} (ha : a ≤ 0) (f : ι → ℝ)
Goal: a • ⨆ i, f i = ⨅ i, a • f i
-- Real.sSup_smul_of_nonpos
theorem Real.sSup_smul_of_nonpos (ha : a ≤ 0) (s : Set ℝ) : sSup (a • s) = a • sInf s 
Arguments: {α : Type u_2} [LinearOrderedField α] [Module α ℝ] [OrderedSMul α ℝ] {a : α} (ha : a ≤ 0) (s : Set ℝ)
Goal: sSup (a • s) = a • sInf s
-- Real.smul_iInf_of_nonpos
theorem Real.smul_iInf_of_nonpos (ha : a ≤ 0) (f : ι → ℝ) : (a • ⨅ i, f i) = ⨆ i, a • f i 
Arguments: {ι : Sort u_1} {α : Type u_2} [LinearOrderedField α] [Module α ℝ] [OrderedSMul α ℝ] {a : α} (ha : a ≤ 0) (f : ι → ℝ)
Goal: a • ⨅ i, f i = ⨆ i, a • f i
-- Real.mul_iInf_of_nonneg
theorem Real.mul_iInf_of_nonneg (ha : 0 ≤ r) (f : ι → ℝ) : (r * ⨅ i, f i) = ⨅ i, r * f i 
Arguments: {ι : Sort u_1} {r : ℝ} (ha : 0 ≤ r) (f : ι → ℝ)
Goal: r * ⨅ i, f i = ⨅ i, r * f i
-- Real.mul_iSup_of_nonneg
theorem Real.mul_iSup_of_nonneg (ha : 0 ≤ r) (f : ι → ℝ) : (r * ⨆ i, f i) = ⨆ i, r * f i 
Arguments: {ι : Sort u_1} {r : ℝ} (ha : 0 ≤ r) (f : ι → ℝ)
Goal: r * ⨆ i, f i = ⨆ i, r * f i
-- Real.mul_iInf_of_nonpos
theorem Real.mul_iInf_of_nonpos (ha : r ≤ 0) (f : ι → ℝ) : (r * ⨅ i, f i) = ⨆ i, r * f i 
Arguments: {ι : Sort u_1} {r : ℝ} (ha : r ≤ 0) (f : ι → ℝ)
Goal: r * ⨅ i, f i = ⨆ i, r * f i
-- Real.mul_iSup_of_nonpos
theorem Real.mul_iSup_of_nonpos (ha : r ≤ 0) (f : ι → ℝ) : (r * ⨆ i, f i) = ⨅ i, r * f i 
Arguments: {ι : Sort u_1} {r : ℝ} (ha : r ≤ 0) (f : ι → ℝ)
Goal: r * ⨆ i, f i = ⨅ i, r * f i
-- Real.iInf_mul_of_nonneg
theorem Real.iInf_mul_of_nonneg (ha : 0 ≤ r) (f : ι → ℝ) : (⨅ i, f i) * r = ⨅ i, f i * r 
Arguments: {ι : Sort u_1} {r : ℝ} (ha : 0 ≤ r) (f : ι → ℝ)
Goal: (⨅ i, f i) * r = ⨅ i, f i * r
-- Real.iSup_mul_of_nonneg
theorem Real.iSup_mul_of_nonneg (ha : 0 ≤ r) (f : ι → ℝ) : (⨆ i, f i) * r = ⨆ i, f i * r 
Arguments: {ι : Sort u_1} {r : ℝ} (ha : 0 ≤ r) (f : ι → ℝ)
Goal: (⨆ i, f i) * r = ⨆ i, f i * r
-- Real.iInf_mul_of_nonpos
theorem Real.iInf_mul_of_nonpos (ha : r ≤ 0) (f : ι → ℝ) : (⨅ i, f i) * r = ⨆ i, f i * r 
Arguments: {ι : Sort u_1} {r : ℝ} (ha : r ≤ 0) (f : ι → ℝ)
Goal: (⨅ i, f i) * r = ⨆ i, f i * r
-- Real.iSup_mul_of_nonpos
theorem Real.iSup_mul_of_nonpos (ha : r ≤ 0) (f : ι → ℝ) : (⨆ i, f i) * r = ⨅ i, f i * r 
Arguments: {ι : Sort u_1} {r : ℝ} (ha : r ≤ 0) (f : ι → ℝ)
Goal: (⨆ i, f i) * r = ⨅ i, f i * r
-- WeierstrassCurve.Jacobian.fin3_def
lemma fin3_def (P : Fin 3 → R) : ![P x, P y, P z] = P 
Arguments: {R : Type u} (P : Fin 3 → R)
Goal: ![P x, P y, P z] = P
-- WeierstrassCurve.Jacobian.fin3_def_ext
lemma fin3_def_ext (X Y Z : R) : ![X, Y, Z] x = X ∧ ![X, Y, Z] y = Y ∧ ![X, Y, Z] z = Z 
Arguments: {R : Type u} (X Y Z : R)
Goal: ![X, Y, Z] x = X ∧ ![X, Y, Z] y = Y ∧ ![X, Y, Z] z = Z
-- WeierstrassCurve.Jacobian.comp_fin3
lemma comp_fin3 {S} (f : R → S) (X Y Z : R) : f ∘ ![X, Y, Z] = ![f X, f Y, f Z] 
Arguments: {R : Type u} {S : Type u_1} (f : R → S) (X Y Z : R)
Goal: f ∘ ![X, Y, Z] = ![f X, f Y, f Z]
-- WeierstrassCurve.Jacobian.smul_fin3
lemma smul_fin3 (P : Fin 3 → R) (u : R) : u • P = ![u ^ 2 * P x, u ^ 3 * P y, u * P z] 
Arguments: {R : Type u} [CommRing R] (P : Fin 3 → R) (u : R)
Goal: u • P = ![u ^ 2 * P x, u ^ 3 * P y, u * P z]
-- WeierstrassCurve.Jacobian.smul_fin3_ext
lemma smul_fin3_ext (P : Fin 3 → R) (u : R) :
    (u • P) x = u ^ 2 * P x ∧ (u • P) y = u ^ 3 * P y ∧ (u • P) z = u * P z 
Arguments: {R : Type u} [CommRing R] (P : Fin 3 → R) (u : R)
Goal: (u • P) x = u ^ 2 * P x ∧ (u • P) y = u ^ 3 * P y ∧ (u • P) z = u * P z
-- WeierstrassCurve.Jacobian.smul_equiv
lemma smul_equiv (P : Fin 3 → R) {u : R} (hu : IsUnit u) : u • P ≈ P 
Arguments: {R : Type u} [CommRing R] (P : Fin 3 → R) {u : R} (hu : IsUnit u)
Goal: u • P ≈ P
-- WeierstrassCurve.Jacobian.smul_eq
@[simp]
lemma smul_eq (P : Fin 3 → R) {u : R} (hu : IsUnit u) : (⟦u • P⟧ : PointClass R) = ⟦P⟧ 
Arguments: {R : Type u} [CommRing R] (P : Fin 3 → R) {u : R} (hu : IsUnit u)
Goal: ⟦u • P⟧ = ⟦P⟧
-- WeierstrassCurve.Jacobian.equiv_iff_eq_of_Z_eq'
lemma equiv_iff_eq_of_Z_eq' {P Q : Fin 3 → R} (hz : P z = Q z) (mem : Q z ∈ nonZeroDivisors R) :
    P ≈ Q ↔ P = Q 
Arguments: {R : Type u} [CommRing R] {P Q : Fin 3 → R} (hz : P z = Q z) (mem : Q z ∈ nonZeroDivisors R)
Goal: P ≈ Q ↔ P = Q
-- WeierstrassCurve.Jacobian.equiv_iff_eq_of_Z_eq
lemma equiv_iff_eq_of_Z_eq [NoZeroDivisors R] {P Q : Fin 3 → R} (hz : P z = Q z) (hQz : Q z ≠ 0) :
    P ≈ Q ↔ P = Q 
Arguments: {R : Type u} [CommRing R] [NoZeroDivisors R] {P Q : Fin 3 → R} (hz : P z = Q z) (hQz : Q z ≠ 0)
Goal: P ≈ Q ↔ P = Q
-- WeierstrassCurve.Jacobian.Z_eq_zero_of_equiv
lemma Z_eq_zero_of_equiv {P Q : Fin 3 → R} (h : P ≈ Q) : P z = 0 ↔ Q z = 0 
Arguments: {R : Type u} [CommRing R] {P Q : Fin 3 → R} (h : P ≈ Q)
Goal: P z = 0 ↔ Q z = 0
-- WeierstrassCurve.Jacobian.X_eq_of_equiv
lemma X_eq_of_equiv {P Q : Fin 3 → R} (h : P ≈ Q) : P x * Q z ^ 2 = Q x * P z ^ 2 
Arguments: {R : Type u} [CommRing R] {P Q : Fin 3 → R} (h : P ≈ Q)
Goal: P x * Q z ^ 2 = Q x * P z ^ 2
-- WeierstrassCurve.Jacobian.Y_eq_of_equiv
lemma Y_eq_of_equiv {P Q : Fin 3 → R} (h : P ≈ Q) : P y * Q z ^ 3 = Q y * P z ^ 3 
Arguments: {R : Type u} [CommRing R] {P Q : Fin 3 → R} (h : P ≈ Q)
Goal: P y * Q z ^ 3 = Q y * P z ^ 3
-- WeierstrassCurve.Jacobian.not_equiv_of_Z_eq_zero_left
lemma not_equiv_of_Z_eq_zero_left {P Q : Fin 3 → R} (hPz : P z = 0) (hQz : Q z ≠ 0) : ¬P ≈ Q 
Arguments: {R : Type u} [CommRing R] {P Q : Fin 3 → R} (hPz : P z = 0) (hQz : Q z ≠ 0)
Goal: ¬P ≈ Q
-- WeierstrassCurve.Jacobian.not_equiv_of_Z_eq_zero_right
lemma not_equiv_of_Z_eq_zero_right {P Q : Fin 3 → R} (hPz : P z ≠ 0) (hQz : Q z = 0) : ¬P ≈ Q 
Arguments: {R : Type u} [CommRing R] {P Q : Fin 3 → R} (hPz : P z ≠ 0) (hQz : Q z = 0)
Goal: ¬P ≈ Q
-- WeierstrassCurve.Jacobian.not_equiv_of_X_ne
lemma not_equiv_of_X_ne {P Q : Fin 3 → R} (hx : P x * Q z ^ 2 ≠ Q x * P z ^ 2) : ¬P ≈ Q 
Arguments: {R : Type u} [CommRing R] {P Q : Fin 3 → R} (hx : P x * Q z ^ 2 ≠ Q x * P z ^ 2)
Goal: ¬P ≈ Q
-- WeierstrassCurve.Jacobian.not_equiv_of_Y_ne
lemma not_equiv_of_Y_ne {P Q : Fin 3 → R} (hy : P y * Q z ^ 3 ≠ Q y * P z ^ 3) : ¬P ≈ Q 
Arguments: {R : Type u} [CommRing R] {P Q : Fin 3 → R} (hy : P y * Q z ^ 3 ≠ Q y * P z ^ 3)
Goal: ¬P ≈ Q
-- WeierstrassCurve.Jacobian.equiv_of_X_eq_of_Y_eq
lemma equiv_of_X_eq_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) : P ≈ Q 
Arguments: {F : Type v} [Field 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)
Goal: P ≈ Q
-- WeierstrassCurve.Jacobian.equiv_some_of_Z_ne_zero
lemma equiv_some_of_Z_ne_zero {P : Fin 3 → F} (hPz : P z ≠ 0) :
    P ≈ ![P x / P z ^ 2, P y / P z ^ 3, 1] 
Arguments: {F : Type v} [Field F] {P : Fin 3 → F} (hPz : P z ≠ 0)
Goal: P ≈ ![P x / P z ^ 2, P y / P z ^ 3, 1]
-- WeierstrassCurve.Jacobian.X_eq_iff
lemma X_eq_iff {P Q : Fin 3 → F} (hPz : P z ≠ 0) (hQz : Q z ≠ 0) :
    P x * Q z ^ 2 = Q x * P z ^ 2 ↔ P x / P z ^ 2 = Q x / Q z ^ 2 
Arguments: {F : Type v} [Field F] {P Q : Fin 3 → F} (hPz : P z ≠ 0) (hQz : Q z ≠ 0)
Goal: P x * Q z ^ 2 = Q x * P z ^ 2 ↔ P x / P z ^ 2 = Q x / Q z ^ 2
-- 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 = Q y * P z ^ 3 ↔ P y / P z ^ 3 = Q y / Q z ^ 3 
Arguments: {F : Type v} [Field F] {P Q : Fin 3 → F} (hPz : P z ≠ 0) (hQz : Q z ≠ 0)
Goal: P y * Q z ^ 3 = Q y * P z ^ 3 ↔ P y / P z ^ 3 = Q y / Q z ^ 3
-- WeierstrassCurve.Jacobian.eval_polynomial
lemma eval_polynomial (P : Fin 3 → R) : eval P W'.polynomial =
    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) 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P : Fin 3 → R)
Goal: (MvPolynomial.eval P) W'.polynomial =
  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)
-- WeierstrassCurve.Jacobian.eval_polynomial_of_Z_ne_zero
lemma eval_polynomial_of_Z_ne_zero {P : Fin 3 → F} (hPz : P z ≠ 0) : eval P W.polynomial / P z ^ 6 =
    W.toAffine.polynomial.evalEval (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: (MvPolynomial.eval P) W.polynomial / P z ^ 6 = Polynomial.evalEval (P x / P z ^ 2) (P y / P z ^ 3) W.toAffine.polynomial
-- WeierstrassCurve.Jacobian.equation_iff
lemma equation_iff (P : Fin 3 → R) : W'.Equation P ↔
    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) = 0 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P : Fin 3 → R)
Goal: W'.Equation P ↔
  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) =
    0
-- WeierstrassCurve.Jacobian.equation_smul
lemma equation_smul (P : Fin 3 → R) {u : R} (hu : IsUnit u) : W'.Equation (u • P) ↔ W'.Equation P 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P : Fin 3 → R) {u : R} (hu : IsUnit u)
Goal: W'.Equation (u • P) ↔ W'.Equation P
-- WeierstrassCurve.Jacobian.equation_of_equiv
lemma equation_of_equiv {P Q : Fin 3 → R} (h : P ≈ Q) : W'.Equation P ↔ W'.Equation Q 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P Q : Fin 3 → R} (h : P ≈ Q)
Goal: W'.Equation P ↔ W'.Equation Q
-- WeierstrassCurve.Jacobian.equation_of_Z_eq_zero
lemma equation_of_Z_eq_zero {P : Fin 3 → R} (hPz : P z = 0) :
    W'.Equation P ↔ P y ^ 2 = P x ^ 3 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P : Fin 3 → R} (hPz : P z = 0)
Goal: W'.Equation P ↔ P y ^ 2 = P x ^ 3
-- WeierstrassCurve.Jacobian.equation_zero
lemma equation_zero : W'.Equation ![1, 1, 0] 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R}
Goal: W'.Equation ![1, 1, 0]
-- WeierstrassCurve.Jacobian.equation_some
lemma equation_some (X Y : R) : W'.Equation ![X, Y, 1] ↔ W'.toAffine.Equation X Y 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (X Y : R)
Goal: W'.Equation ![X, Y, 1] ↔ W'.toAffine.Equation X Y
-- WeierstrassCurve.Jacobian.equation_of_Z_ne_zero
lemma equation_of_Z_ne_zero {P : Fin 3 → F} (hPz : P z ≠ 0) :
    W.Equation P ↔ W.toAffine.Equation (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.Equation P ↔ W.toAffine.Equation (P x / P z ^ 2) (P y / P z ^ 3)
-- WeierstrassCurve.Jacobian.polynomialX_eq
lemma polynomialX_eq : W'.polynomialX =
    C W'.a₁ * X 1 * X 2 - (C 3 * X 0 ^ 2 + C (2 * W'.a₂) * X 0 * X 2 ^ 2 + C W'.a₄ * X 2 ^ 4) 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R}
Goal: W'.polynomialX =
  MvPolynomial.C W'.a₁ * MvPolynomial.X y * MvPolynomial.X z -
    (MvPolynomial.C 3 * MvPolynomial.X x ^ 2 + MvPolynomial.C (2 * W'.a₂) * MvPolynomial.X x * MvPolynomial.X z ^ 2 +
      MvPolynomial.C W'.a₄ * MvPolynomial.X z ^ 4)
-- WeierstrassCurve.Jacobian.eval_polynomialX
lemma eval_polynomialX (P : Fin 3 → R) : eval P W'.polynomialX =
    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: (MvPolynomial.eval P) W'.polynomialX = 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.eval_polynomialX_of_Z_ne_zero
lemma eval_polynomialX_of_Z_ne_zero {P : Fin 3 → F} (hPz : P z ≠ 0) :
    eval P W.polynomialX / P z ^ 4 =
      W.toAffine.polynomialX.evalEval (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: (MvPolynomial.eval P) W.polynomialX / P z ^ 4 =
  Polynomial.evalEval (P x / P z ^ 2) (P y / P z ^ 3) W.toAffine.polynomialX
-- WeierstrassCurve.Jacobian.polynomialY_eq
lemma polynomialY_eq : W'.polynomialY = C 2 * X 1 + C W'.a₁ * X 0 * X 2 + C W'.a₃ * X 2 ^ 3 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R}
Goal: W'.polynomialY =
  MvPolynomial.C 2 * MvPolynomial.X y + MvPolynomial.C W'.a₁ * MvPolynomial.X x * MvPolynomial.X z +
    MvPolynomial.C W'.a₃ * MvPolynomial.X z ^ 3
-- WeierstrassCurve.Jacobian.eval_polynomialY
lemma eval_polynomialY (P : Fin 3 → R) :
    eval P W'.polynomialY = 2 * P y + W'.a₁ * P x * P z + W'.a₃ * P z ^ 3 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P : Fin 3 → R)
Goal: (MvPolynomial.eval P) W'.polynomialY = 2 * P y + W'.a₁ * P x * P z + W'.a₃ * P z ^ 3
-- WeierstrassCurve.Jacobian.eval_polynomialY_of_Z_ne_zero
lemma eval_polynomialY_of_Z_ne_zero {P : Fin 3 → F} (hPz : P z ≠ 0) :
    eval P W.polynomialY / P z ^ 3 =
      W.toAffine.polynomialY.evalEval (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: (MvPolynomial.eval P) W.polynomialY / P z ^ 3 =
  Polynomial.evalEval (P x / P z ^ 2) (P y / P z ^ 3) W.toAffine.polynomialY
-- WeierstrassCurve.Jacobian.polynomialZ_eq
lemma polynomialZ_eq : W'.polynomialZ = C W'.a₁ * X 0 * X 1 + C (3 * W'.a₃) * X 1 * X 2 ^ 2 -
    (C (2 * W'.a₂) * X 0 ^ 2 * X 2 + C (4 * W'.a₄) * X 0 * X 2 ^ 3 + C (6 * W'.a₆) * X 2 ^ 5) 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R}
Goal: W'.polynomialZ =
  MvPolynomial.C W'.a₁ * MvPolynomial.X x * MvPolynomial.X y +
      MvPolynomial.C (3 * W'.a₃) * MvPolynomial.X y * MvPolynomial.X z ^ 2 -
    (MvPolynomial.C (2 * W'.a₂) * MvPolynomial.X x ^ 2 * MvPolynomial.X z +
        MvPolynomial.C (4 * W'.a₄) * MvPolynomial.X x * MvPolynomial.X z ^ 3 +
      MvPolynomial.C (6 * W'.a₆) * MvPolynomial.X z ^ 5)
-- WeierstrassCurve.Jacobian.eval_polynomialZ
lemma eval_polynomialZ (P : Fin 3 → R) : eval P W'.polynomialZ =
    W'.a₁ * P x * P y + 3 * W'.a₃ * P y * P z ^ 2 -
      (2 * W'.a₂ * P x ^ 2 * P z + 4 * W'.a₄ * P x * P z ^ 3 + 6 * W'.a₆ * P z ^ 5) 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P : Fin 3 → R)
Goal: (MvPolynomial.eval P) W'.polynomialZ =
  W'.a₁ * P x * P y + 3 * W'.a₃ * P y * P z ^ 2 -
    (2 * W'.a₂ * P x ^ 2 * P z + 4 * W'.a₄ * P x * P z ^ 3 + 6 * W'.a₆ * P z ^ 5)
-- WeierstrassCurve.Jacobian.nonsingular_iff
lemma nonsingular_iff (P : Fin 3 → R) : W'.Nonsingular P ↔ W'.Equation P ∧
    (W'.a₁ * P y * P z - (3 * P x ^ 2 + 2 * W'.a₂ * P x * P z ^ 2 + W'.a₄ * P z ^ 4) ≠ 0 ∨
      2 * P y + W'.a₁ * P x * P z + W'.a₃ * P z ^ 3 ≠ 0 ∨
      W'.a₁ * P x * P y + 3 * W'.a₃ * P y * P z ^ 2
        - (2 * W'.a₂ * P x ^ 2 * P z + 4 * W'.a₄ * P x * P z ^ 3 + 6 * W'.a₆ * P z ^ 5) ≠ 0) 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P : Fin 3 → R)
Goal: W'.Nonsingular P ↔
  W'.Equation P ∧
    (W'.a₁ * P y * P z - (3 * P x ^ 2 + 2 * W'.a₂ * P x * P z ^ 2 + W'.a₄ * P z ^ 4) ≠ 0 ∨
      2 * P y + W'.a₁ * P x * P z + W'.a₃ * P z ^ 3 ≠ 0 ∨
        W'.a₁ * P x * P y + 3 * W'.a₃ * P y * P z ^ 2 -
            (2 * W'.a₂ * P x ^ 2 * P z + 4 * W'.a₄ * P x * P z ^ 3 + 6 * W'.a₆ * P z ^ 5) ≠
          0)
-- WeierstrassCurve.Jacobian.nonsingular_smul
lemma nonsingular_smul (P : Fin 3 → R) {u : R} (hu : IsUnit u) :
    W'.Nonsingular (u • P) ↔ W'.Nonsingular P 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (P : Fin 3 → R) {u : R} (hu : IsUnit u)
Goal: W'.Nonsingular (u • P) ↔ W'.Nonsingular P
-- WeierstrassCurve.Jacobian.nonsingular_of_equiv
lemma nonsingular_of_equiv {P Q : Fin 3 → R} (h : P ≈ Q) : W'.Nonsingular P ↔ W'.Nonsingular Q 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} {P Q : Fin 3 → R} (h : P ≈ Q)
Goal: W'.Nonsingular P ↔ W'.Nonsingular Q
-- WeierstrassCurve.Jacobian.nonsingular_of_Z_eq_zero
lemma nonsingular_of_Z_eq_zero {P : Fin 3 → R} (hPz : P z = 0) :
    W'.Nonsingular P ↔ W'.Equation P ∧ (3 * P x ^ 2 ≠ 0 ∨ 2 * P y ≠ 0 ∨ W'.a₁ * 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'.Nonsingular P ↔ W'.Equation P ∧ (3 * P x ^ 2 ≠ 0 ∨ 2 * P y ≠ 0 ∨ W'.a₁ * P x * P y ≠ 0)
-- WeierstrassCurve.Jacobian.nonsingular_zero
lemma nonsingular_zero [Nontrivial R] : W'.Nonsingular ![1, 1, 0] 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} [Nontrivial R]
Goal: W'.Nonsingular ![1, 1, 0]
-- WeierstrassCurve.Jacobian.nonsingular_some
lemma nonsingular_some (X Y : R) : W'.Nonsingular ![X, Y, 1] ↔ W'.toAffine.Nonsingular X Y 
Arguments: {R : Type u} [CommRing R] {W' : WeierstrassCurve.Jacobian R} (X Y : R)
Goal: W'.Nonsingular ![X, Y, 1] ↔ W'.toAffine.Nonsingular X Y
-- WeierstrassCurve.Jacobian.nonsingular_of_Z_ne_zero
lemma nonsingular_of_Z_ne_zero {P : Fin 3 → F} (hPz : P z ≠ 0) :
    W.Nonsingular P ↔ W.toAffine.Nonsingular (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.Nonsingular P ↔ W.toAffine.Nonsingular (P x / P z ^ 2) (P y / P z ^ 3)
-- WeierstrassCurve.Jacobian.nonsingular_iff_of_Z_ne_zero
lemma nonsingular_iff_of_Z_ne_zero {P : Fin 3 → F} (hPz : P z ≠ 0) :
    W.Nonsingular P ↔ W.Equation P ∧ (eval P W.polynomialX ≠ 0 ∨ eval P W.polynomialY ≠ 0) 
Arguments: {F : Type v} [Field F] {W : WeierstrassCurve.Jacobian F} {P : Fin 3 → F} (hPz : P z ≠ 0)
Goal: W.Nonsingular P ↔ W.Equation P ∧ ((MvPolynomial.eval P) W.polynomialX ≠ 0 ∨ (MvPolynomial.eval P) W.polynomialY ≠ 0)