ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- Cycle.prev_reverse_eq_next
nonrec theorem prev_reverse_eq_next (s : Cycle α) : ∀ (hs : Nodup s) (x : α) (hx : x ∈ s),
    s.reverse.prev (nodup_reverse_iff.mpr hs) x (mem_reverse_iff.mpr hx) = s.next hs x hx 
Arguments: {α : Type u_1} [DecidableEq α] (s : Cycle α) (hs : s.Nodup) (x : α) (hx : x ∈ s)
Goal: s.reverse.prev ⋯ x ⋯ = s.next hs x hx
-- Cycle.prev_reverse_eq_next'
@[simp]
nonrec theorem prev_reverse_eq_next' (s : Cycle α) (hs : Nodup s.reverse) (x : α)
    (hx : x ∈ s.reverse) :
    s.reverse.prev hs x hx = s.next (nodup_reverse_iff.mp hs) x (mem_reverse_iff.mp hx) 
Arguments: {α : Type u_1} [DecidableEq α] (s : Cycle α) (hs : s.reverse.Nodup) (x : α) (hx : x ∈ s.reverse)
Goal: s.reverse.prev hs x hx = s.next ⋯ x ⋯
-- Cycle.next_reverse_eq_prev
theorem next_reverse_eq_prev (s : Cycle α) (hs : Nodup s) (x : α) (hx : x ∈ s) :
    s.reverse.next (nodup_reverse_iff.mpr hs) x (mem_reverse_iff.mpr hx) = s.prev hs x hx 
Arguments: {α : Type u_1} [DecidableEq α] (s : Cycle α) (hs : s.Nodup) (x : α) (hx : x ∈ s)
Goal: s.reverse.next ⋯ x ⋯ = s.prev hs x hx
-- Cycle.next_reverse_eq_prev'
@[simp]
theorem next_reverse_eq_prev' (s : Cycle α) (hs : Nodup s.reverse) (x : α) (hx : x ∈ s.reverse) :
    s.reverse.next hs x hx = s.prev (nodup_reverse_iff.mp hs) x (mem_reverse_iff.mp hx) 
Arguments: {α : Type u_1} [DecidableEq α] (s : Cycle α) (hs : s.reverse.Nodup) (x : α) (hx : x ∈ s.reverse)
Goal: s.reverse.next hs x hx = s.prev ⋯ x ⋯
-- Cycle.next_mem
@[simp]
nonrec theorem next_mem (s : Cycle α) (hs : Nodup s) (x : α) (hx : x ∈ s) : s.next hs x hx ∈ s 
Arguments: {α : Type u_1} [DecidableEq α] (s : Cycle α) (hs : s.Nodup) (x : α) (hx : x ∈ s)
Goal: s.next hs x hx ∈ s
-- Cycle.prev_mem
theorem prev_mem (s : Cycle α) (hs : Nodup s) (x : α) (hx : x ∈ s) : s.prev hs x hx ∈ s 
Arguments: {α : Type u_1} [DecidableEq α] (s : Cycle α) (hs : s.Nodup) (x : α) (hx : x ∈ s)
Goal: s.prev hs x hx ∈ s
-- Cycle.prev_next
@[simp]
nonrec theorem prev_next (s : Cycle α) : ∀ (hs : Nodup s) (x : α) (hx : x ∈ s),
    s.prev hs (s.next hs x hx) (next_mem s hs x hx) = x 
Arguments: {α : Type u_1} [DecidableEq α] (s : Cycle α) (hs : s.Nodup) (x : α) (hx : x ∈ s)
Goal: s.prev hs (s.next hs x hx) ⋯ = x
-- Cycle.next_prev
@[simp]
nonrec theorem next_prev (s : Cycle α) : ∀ (hs : Nodup s) (x : α) (hx : x ∈ s),
    s.next hs (s.prev hs x hx) (prev_mem s hs x hx) = x 
Arguments: {α : Type u_1} [DecidableEq α] (s : Cycle α) (hs : s.Nodup) (x : α) (hx : x ∈ s)
Goal: s.next hs (s.prev hs x hx) ⋯ = x
-- Cycle.Chain.nil
@[simp]
theorem Chain.nil (r : α → α → Prop) : Cycle.Chain r (@nil α) 
Arguments: {α : Type u_1} (r : α → α → Prop)
Goal: Cycle.Chain r Cycle.nil
-- Cycle.chain_coe_cons
@[simp]
theorem chain_coe_cons (r : α → α → Prop) (a : α) (l : List α) :
    Chain r (a :: l) ↔ List.Chain r a (l ++ [a]) 
Arguments: {α : Type u_1} (r : α → α → Prop) (a : α) (l : List α)
Goal: Cycle.Chain r ↑(a :: l) ↔ List.Chain r a (l ++ [a])
-- Cycle.chain_singleton
theorem chain_singleton (r : α → α → Prop) (a : α) : Chain r [a] ↔ r a a 
Arguments: {α : Type u_1} (r : α → α → Prop) (a : α)
Goal: Cycle.Chain r ↑[a] ↔ r a a
-- Cycle.chain_ne_nil
theorem chain_ne_nil (r : α → α → Prop) {l : List α} :
    ∀ hl : l ≠ [], Chain r l ↔ List.Chain r (getLast l hl) l 
Arguments: {α : Type u_1} (r : α → α → Prop) {l : List α} (hl : l ≠ [])
Goal: Cycle.Chain r ↑l ↔ List.Chain r (l.getLast hl) l
-- Cycle.chain_map
theorem chain_map {β : Type*} {r : α → α → Prop} (f : β → α) {s : Cycle β} :
    Chain r (s.map f) ↔ Chain (fun a b => r (f a) (f b)) s 
Arguments: {α : Type u_1} {β : Type u_2} {r : α → α → Prop} (f : β → α) {s : Cycle β}
Goal: Cycle.Chain r (Cycle.map f s) ↔ Cycle.Chain (fun a b => r (f a) (f b)) s
-- Cycle.chain_range_succ
nonrec theorem chain_range_succ (r : ℕ → ℕ → Prop) (n : ℕ) :
    Chain r (List.range n.succ) ↔ r n 0 ∧ ∀ m < n, r m m.succ 
Arguments: (r : ℕ → ℕ → Prop) (n : ℕ)
Goal: Cycle.Chain r ↑(List.range n.succ) ↔ r n 0 ∧ ∀ m < n, r m m.succ
-- Cycle.Chain.imp
theorem Chain.imp {r₁ r₂ : α → α → Prop} (H : ∀ a b, r₁ a b → r₂ a b) (p : Chain r₁ s) :
    Chain r₂ s 
Arguments: {α : Type u_1} {s : Cycle α} {r₁ r₂ : α → α → Prop} (H : ∀ (a b : α), r₁ a b → r₂ a b) (p : Cycle.Chain r₁ s)
Goal: Cycle.Chain r₂ s
-- Cycle.chain_mono
theorem chain_mono : Monotone (Chain : (α → α → Prop) → Cycle α → Prop) 
Arguments: {α : Type u_1}
Goal: Monotone Cycle.Chain
-- Cycle.chain_of_pairwise
theorem chain_of_pairwise : (∀ a ∈ s, ∀ b ∈ s, r a b) → Chain r s 
Arguments: {α : Type u_1} {r : α → α → Prop} {s : Cycle α}
Goal: (∀ a ∈ s, ∀ b ∈ s, r a b) → Cycle.Chain r s
-- Cycle.chain_iff_pairwise
theorem chain_iff_pairwise [IsTrans α r] : Chain r s ↔ ∀ a ∈ s, ∀ b ∈ s, r a b 
Arguments: {α : Type u_1} {r : α → α → Prop} {s : Cycle α} [IsTrans α r]
Goal: Cycle.Chain r s ↔ ∀ a ∈ s, ∀ b ∈ s, r a b
-- Cycle.Chain.eq_nil_of_irrefl
theorem Chain.eq_nil_of_irrefl [IsTrans α r] [IsIrrefl α r] (h : Chain r s) : s = Cycle.nil 
Arguments: {α : Type u_1} {r : α → α → Prop} {s : Cycle α} [IsTrans α r] [IsIrrefl α r] (h : Cycle.Chain r s)
Goal: s = Cycle.nil
-- Cycle.Chain.eq_nil_of_well_founded
theorem Chain.eq_nil_of_well_founded [IsWellFounded α r] (h : Chain r s) : s = Cycle.nil 
Arguments: {α : Type u_1} {r : α → α → Prop} {s : Cycle α} [IsWellFounded α r] (h : Cycle.Chain r s)
Goal: s = Cycle.nil
-- Cycle.forall_eq_of_chain
theorem forall_eq_of_chain [IsTrans α r] [IsAntisymm α r] (hs : Chain r s) {a b : α} (ha : a ∈ s)
    (hb : b ∈ s) : a = b 
Arguments: {α : Type u_1} {r : α → α → Prop} {s : Cycle α} [IsTrans α r] [IsAntisymm α r] (hs : Cycle.Chain r s) {a b : α} (ha : a ∈ s) (hb : b ∈ s)
Goal: a = b
-- SetSemiring.down_up
@[simp]
protected theorem down_up (s : Set α) : SetSemiring.down (Set.up s) = s 
Arguments: {α : Type u_1} (s : Set α)
Goal: SetSemiring.down (Set.up s) = s
-- SetSemiring.up_down
@[simp]
protected theorem up_down (s : SetSemiring α) : Set.up (SetSemiring.down s) = s 
Arguments: {α : Type u_1} (s : SetSemiring α)
Goal: Set.up (SetSemiring.down s) = s
-- SetSemiring.up_le_up
theorem up_le_up {s t : Set α} : Set.up s ≤ Set.up t ↔ s ⊆ t 
Arguments: {α : Type u_1} {s t : Set α}
Goal: Set.up s ≤ Set.up t ↔ s ⊆ t
-- SetSemiring.up_lt_up
theorem up_lt_up {s t : Set α} : Set.up s < Set.up t ↔ s ⊂ t 
Arguments: {α : Type u_1} {s t : Set α}
Goal: Set.up s < Set.up t ↔ s ⊂ t
-- SetSemiring.down_subset_down
@[simp]
theorem down_subset_down {s t : SetSemiring α} : SetSemiring.down s ⊆ SetSemiring.down t ↔ s ≤ t 
Arguments: {α : Type u_1} {s t : SetSemiring α}
Goal: SetSemiring.down s ⊆ SetSemiring.down t ↔ s ≤ t
-- SetSemiring.down_ssubset_down
@[simp]
theorem down_ssubset_down {s t : SetSemiring α} : SetSemiring.down s ⊂ SetSemiring.down t ↔ s < t 
Arguments: {α : Type u_1} {s t : SetSemiring α}
Goal: SetSemiring.down s ⊂ SetSemiring.down t ↔ s < t
-- SetSemiring.zero_def
theorem zero_def : (0 : SetSemiring α) = Set.up ∅ 
Arguments: {α : Type u_1}
Goal: 0 = Set.up ∅
-- SetSemiring.down_zero
@[simp]
theorem down_zero : down (0 : SetSemiring α) = ∅ 
Arguments: {α : Type u_1}
Goal: SetSemiring.down 0 = ∅
-- Set.up_empty
@[simp]
theorem _root_.Set.up_empty : Set.up (∅ : Set α) = 0 
Arguments: {α : Type u_1}
Goal: Set.up ∅ = 0
-- SetSemiring.add_def
theorem add_def (s t : SetSemiring α) : s + t = up (down s ∪ down t) 
Arguments: {α : Type u_1} (s t : SetSemiring α)
Goal: s + t = Set.up (SetSemiring.down s ∪ SetSemiring.down t)
-- SetSemiring.down_add
@[simp]
theorem down_add (s t : SetSemiring α) : down (s + t) = down s ∪ down t 
Arguments: {α : Type u_1} (s t : SetSemiring α)
Goal: SetSemiring.down (s + t) = SetSemiring.down s ∪ SetSemiring.down t
-- Set.up_union
@[simp]
theorem _root_.Set.up_union (s t : Set α) : up (s ∪ t) = up s + up t 
Arguments: {α : Type u_1} (s t : Set α)
Goal: Set.up (s ∪ t) = Set.up s + Set.up t
-- SetSemiring.mul_def
theorem mul_def (s t : SetSemiring α) : s * t = up (down s * down t) 
Arguments: {α : Type u_1} [Mul α] (s t : SetSemiring α)
Goal: s * t = Set.up (SetSemiring.down s * SetSemiring.down t)
-- SetSemiring.down_mul
@[simp]
theorem down_mul (s t : SetSemiring α) : down (s * t) = down s * down t 
Arguments: {α : Type u_1} [Mul α] (s t : SetSemiring α)
Goal: SetSemiring.down (s * t) = SetSemiring.down s * SetSemiring.down t
-- Set.up_mul
@[simp]
theorem _root_.Set.up_mul (s t : Set α) : up (s * t) = up s * up t 
Arguments: {α : Type u_1} [Mul α] (s t : Set α)
Goal: Set.up (s * t) = Set.up s * Set.up t
-- SetSemiring.one_def
theorem one_def : (1 : SetSemiring α) = Set.up 1 
Arguments: {α : Type u_1} [One α]
Goal: 1 = Set.up 1
-- SetSemiring.down_one
@[simp]
theorem down_one : down (1 : SetSemiring α) = 1 
Arguments: {α : Type u_1} [One α]
Goal: SetSemiring.down 1 = 1
-- Set.up_one
@[simp]
theorem _root_.Set.up_one : up (1 : Set α) = 1 
Arguments: {α : Type u_1} [One α]
Goal: Set.up 1 = 1
-- SetSemiring.imageHom_def
lemma imageHom_def [MulOneClass α] [MulOneClass β] (f : α →* β) (s : SetSemiring α) :
    imageHom f s = up (image f (down s)) 
Arguments: {α : Type u_1} {β : Type u_2} [MulOneClass α] [MulOneClass β] (f : α →* β) (s : SetSemiring α)
Goal: (SetSemiring.imageHom f) s = Set.up (⇑f '' SetSemiring.down s)
-- SetSemiring.down_imageHom
@[simp]
lemma down_imageHom [MulOneClass α] [MulOneClass β] (f : α →* β) (s : SetSemiring α) :
    down (imageHom f s) = f '' down s 
Arguments: {α : Type u_1} {β : Type u_2} [MulOneClass α] [MulOneClass β] (f : α →* β) (s : SetSemiring α)
Goal: SetSemiring.down ((SetSemiring.imageHom f) s) = ⇑f '' SetSemiring.down s
-- Set.up_image
@[simp]
lemma _root_.Set.up_image [MulOneClass α] [MulOneClass β] (f : α →* β) (s : Set α) :
    up (f '' s) = imageHom f (up s) 
Arguments: {α : Type u_1} {β : Type u_2} [MulOneClass α] [MulOneClass β] (f : α →* β) (s : Set α)
Goal: Set.up (⇑f '' s) = (SetSemiring.imageHom f) (Set.up s)
-- WeierstrassCurve.Affine.polynomial_eq
lemma polynomial_eq : W.polynomial =
    Cubic.toPoly
      ⟨0, 1, Cubic.toPoly ⟨0, 0, W.a₁, W.a₃⟩, Cubic.toPoly ⟨-1, -W.a₂, -W.a₄, -W.a₆⟩⟩ 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R)
Goal: W.polynomial =
  { a := 0, b := 1, c := { a := 0, b := 0, c := W.a₁, d := W.a₃ }.toPoly,
      d := { a := -1, b := -W.a₂, c := -W.a₄, d := -W.a₆ }.toPoly }.toPoly
-- WeierstrassCurve.Affine.polynomial_ne_zero
lemma polynomial_ne_zero [Nontrivial R] : W.polynomial ≠ 0 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R) [Nontrivial R]
Goal: W.polynomial ≠ 0
-- WeierstrassCurve.Affine.degree_polynomial
@[simp]
lemma degree_polynomial [Nontrivial R] : W.polynomial.degree = 2 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R) [Nontrivial R]
Goal: W.polynomial.degree = 2
-- WeierstrassCurve.Affine.natDegree_polynomial
@[simp]
lemma natDegree_polynomial [Nontrivial R] : W.polynomial.natDegree = 2 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R) [Nontrivial R]
Goal: W.polynomial.natDegree = 2
-- WeierstrassCurve.Affine.monic_polynomial
lemma monic_polynomial : W.polynomial.Monic 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R)
Goal: W.polynomial.Monic
-- WeierstrassCurve.Affine.irreducible_polynomial
lemma irreducible_polynomial [IsDomain R] : Irreducible W.polynomial 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R) [IsDomain R]
Goal: Irreducible W.polynomial
-- WeierstrassCurve.Affine.evalEval_polynomial
lemma evalEval_polynomial (x y : R) : W.polynomial.evalEval x y =
    y ^ 2 + W.a₁ * x * y + W.a₃ * y - (x ^ 3 + W.a₂ * x ^ 2 + W.a₄ * x + W.a₆) 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R) (x y : R)
Goal: Polynomial.evalEval x y W.polynomial = y ^ 2 + W.a₁ * x * y + W.a₃ * y - (x ^ 3 + W.a₂ * x ^ 2 + W.a₄ * x + W.a₆)
-- WeierstrassCurve.Affine.evalEval_polynomial_zero
@[simp]
lemma evalEval_polynomial_zero : W.polynomial.evalEval 0 0 = -W.a₆ 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R)
Goal: Polynomial.evalEval 0 0 W.polynomial = -W.a₆
-- WeierstrassCurve.Affine.equation_iff'
lemma equation_iff' (x y : R) : W.Equation x y ↔
    y ^ 2 + W.a₁ * x * y + W.a₃ * y - (x ^ 3 + W.a₂ * x ^ 2 + W.a₄ * x + W.a₆) = 0 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R) (x y : R)
Goal: W.Equation x y ↔ y ^ 2 + W.a₁ * x * y + W.a₃ * y - (x ^ 3 + W.a₂ * x ^ 2 + W.a₄ * x + W.a₆) = 0
-- WeierstrassCurve.Affine.equation_iff
lemma equation_iff (x y : R) :
    W.Equation x y ↔ y ^ 2 + W.a₁ * x * y + W.a₃ * y = x ^ 3 + W.a₂ * x ^ 2 + W.a₄ * x + W.a₆ 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R) (x y : R)
Goal: W.Equation x y ↔ y ^ 2 + W.a₁ * x * y + W.a₃ * y = x ^ 3 + W.a₂ * x ^ 2 + W.a₄ * x + W.a₆
-- WeierstrassCurve.Affine.equation_zero
@[simp]
lemma equation_zero : W.Equation 0 0 ↔ W.a₆ = 0 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R)
Goal: W.Equation 0 0 ↔ W.a₆ = 0
-- WeierstrassCurve.Affine.equation_iff_variableChange
lemma equation_iff_variableChange (x y : R) :
    W.Equation x y ↔ (W.variableChange ⟨1, x, 0, y⟩).toAffine.Equation 0 0 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R) (x y : R)
Goal: W.Equation x y ↔ (WeierstrassCurve.variableChange W { u := 1, r := x, s := 0, t := y }).toAffine.Equation 0 0
-- WeierstrassCurve.Affine.evalEval_polynomialX
lemma evalEval_polynomialX (x y : R) :
    W.polynomialX.evalEval x y = W.a₁ * y - (3 * x ^ 2 + 2 * W.a₂ * x + W.a₄) 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R) (x y : R)
Goal: Polynomial.evalEval x y W.polynomialX = W.a₁ * y - (3 * x ^ 2 + 2 * W.a₂ * x + W.a₄)
-- WeierstrassCurve.Affine.evalEval_polynomialX_zero
@[simp]
lemma evalEval_polynomialX_zero : W.polynomialX.evalEval 0 0 = -W.a₄ 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R)
Goal: Polynomial.evalEval 0 0 W.polynomialX = -W.a₄
-- WeierstrassCurve.Affine.evalEval_polynomialY
lemma evalEval_polynomialY (x y : R) :
    W.polynomialY.evalEval x y = 2 * y + W.a₁ * x + W.a₃ 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R) (x y : R)
Goal: Polynomial.evalEval x y W.polynomialY = 2 * y + W.a₁ * x + W.a₃
-- WeierstrassCurve.Affine.evalEval_polynomialY_zero
@[simp]
lemma evalEval_polynomialY_zero : W.polynomialY.evalEval 0 0 = W.a₃ 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R)
Goal: Polynomial.evalEval 0 0 W.polynomialY = W.a₃
-- WeierstrassCurve.Affine.nonsingular_iff'
lemma nonsingular_iff' (x y : R) : W.Nonsingular x y ↔ W.Equation x y ∧
    (W.a₁ * y - (3 * x ^ 2 + 2 * W.a₂ * x + W.a₄) ≠ 0 ∨ 2 * y + W.a₁ * x + W.a₃ ≠ 0) 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R) (x y : R)
Goal: W.Nonsingular x y ↔ W.Equation x y ∧ (W.a₁ * y - (3 * x ^ 2 + 2 * W.a₂ * x + W.a₄) ≠ 0 ∨ 2 * y + W.a₁ * x + W.a₃ ≠ 0)
-- WeierstrassCurve.Affine.nonsingular_iff
lemma nonsingular_iff (x y : R) : W.Nonsingular x y ↔
    W.Equation x y ∧ (W.a₁ * y ≠ 3 * x ^ 2 + 2 * W.a₂ * x + W.a₄ ∨ y ≠ -y - W.a₁ * x - W.a₃) 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R) (x y : R)
Goal: W.Nonsingular x y ↔ W.Equation x y ∧ (W.a₁ * y ≠ 3 * x ^ 2 + 2 * W.a₂ * x + W.a₄ ∨ y ≠ -y - W.a₁ * x - W.a₃)
-- WeierstrassCurve.Affine.nonsingular_zero
@[simp]
lemma nonsingular_zero : W.Nonsingular 0 0 ↔ W.a₆ = 0 ∧ (W.a₃ ≠ 0 ∨ W.a₄ ≠ 0) 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R)
Goal: W.Nonsingular 0 0 ↔ W.a₆ = 0 ∧ (W.a₃ ≠ 0 ∨ W.a₄ ≠ 0)
-- WeierstrassCurve.Affine.nonsingular_iff_variableChange
lemma nonsingular_iff_variableChange (x y : R) :
    W.Nonsingular x y ↔ (W.variableChange ⟨1, x, 0, y⟩).toAffine.Nonsingular 0 0 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R) (x y : R)
Goal: W.Nonsingular x y ↔ (WeierstrassCurve.variableChange W { u := 1, r := x, s := 0, t := y }).toAffine.Nonsingular 0 0
-- WeierstrassCurve.Affine.nonsingular_zero_of_Δ_ne_zero
lemma nonsingular_zero_of_Δ_ne_zero (h : W.Equation 0 0) (hΔ : W.Δ ≠ 0) : W.Nonsingular 0 0 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R) (h : W.Equation 0 0) (hΔ : WeierstrassCurve.Δ W ≠ 0)
Goal: W.Nonsingular 0 0
-- WeierstrassCurve.Affine.nonsingular_of_Δ_ne_zero
lemma nonsingular_of_Δ_ne_zero {x y : R} (h : W.Equation x y) (hΔ : W.Δ ≠ 0) : W.Nonsingular x y 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R) {x y : R} (h : W.Equation x y) (hΔ : WeierstrassCurve.Δ W ≠ 0)
Goal: W.Nonsingular x y
-- WeierstrassCurve.Affine.Y_sub_polynomialY
lemma Y_sub_polynomialY : Y - W.polynomialY = W.negPolynomial 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R)
Goal: Y - W.polynomialY = W.negPolynomial
-- WeierstrassCurve.Affine.Y_sub_negPolynomial
lemma Y_sub_negPolynomial : Y - W.negPolynomial = W.polynomialY 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R)
Goal: Y - W.negPolynomial = W.polynomialY
-- WeierstrassCurve.Affine.negY_negY
lemma negY_negY (x y : R) : W.negY x (W.negY x y) = y 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R) (x y : R)
Goal: W.negY x (W.negY x y) = y
-- WeierstrassCurve.Affine.eval_negPolynomial
lemma eval_negPolynomial (x y : R) : W.negPolynomial.evalEval x y = W.negY x y 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R) (x y : R)
Goal: Polynomial.evalEval x y W.negPolynomial = W.negY x y
-- WeierstrassCurve.Affine.C_addPolynomial
lemma C_addPolynomial (x y L : R) : C (W.addPolynomial x y L) =
    (Y - C (linePolynomial x y L)) * (W.negPolynomial - C (linePolynomial x y L)) +
      W.polynomial 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R) (x y L : R)
Goal: Polynomial.C (W.addPolynomial x y L) =
  (Y - Polynomial.C (WeierstrassCurve.Affine.linePolynomial x y L)) *
      (W.negPolynomial - Polynomial.C (WeierstrassCurve.Affine.linePolynomial x y L)) +
    W.polynomial
-- WeierstrassCurve.Affine.addPolynomial_eq
lemma addPolynomial_eq (x y L : R) : W.addPolynomial x y L = -Cubic.toPoly
    ⟨1, -L ^ 2 - W.a₁ * L + W.a₂,
      2 * x * L ^ 2 + (W.a₁ * x - 2 * y - W.a₃) * L + (-W.a₁ * y + W.a₄),
      -x ^ 2 * L ^ 2 + (2 * x * y + W.a₃ * x) * L - (y ^ 2 + W.a₃ * y - W.a₆)⟩ 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R) (x y L : R)
Goal: W.addPolynomial x y L =
  -{ a := 1, b := -L ^ 2 - W.a₁ * L + W.a₂, c := 2 * x * L ^ 2 + (W.a₁ * x - 2 * y - W.a₃) * L + (-W.a₁ * y + W.a₄),
        d := -x ^ 2 * L ^ 2 + (2 * x * y + W.a₃ * x) * L - (y ^ 2 + W.a₃ * y - W.a₆) }.toPoly
-- WeierstrassCurve.Affine.equation_neg_iff
lemma equation_neg_iff (x y : R) : W.Equation x (W.negY x y) ↔ W.Equation x y 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R) (x y : R)
Goal: W.Equation x (W.negY x y) ↔ W.Equation x y
-- WeierstrassCurve.Affine.nonsingular_neg_iff
lemma nonsingular_neg_iff (x y : R) : W.Nonsingular x (W.negY x y) ↔ W.Nonsingular x y 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R) (x y : R)
Goal: W.Nonsingular x (W.negY x y) ↔ W.Nonsingular x y
-- WeierstrassCurve.Affine.equation_add_iff
lemma equation_add_iff (x₁ x₂ y₁ L : R) :
    W.Equation (W.addX x₁ x₂ L) (W.negAddY x₁ x₂ y₁ L) ↔
      (W.addPolynomial x₁ y₁ L).eval (W.addX x₁ x₂ L) = 0 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Affine R) (x₁ x₂ y₁ L : R)
Goal: W.Equation (W.addX x₁ x₂ L) (W.negAddY x₁ x₂ y₁ L) ↔ Polynomial.eval (W.addX x₁ x₂ L) (W.addPolynomial x₁ y₁ L) = 0
-- WeierstrassCurve.Affine.equation_neg_of
lemma equation_neg_of {x y : R} (h : W.Equation x <| W.negY x y) : W.Equation x y 
Arguments: {R : Type u} [CommRing R] {W : WeierstrassCurve.Affine R} {x y : R} (h : W.Equation x (W.negY x y))
Goal: W.Equation x y
-- WeierstrassCurve.Affine.equation_neg
lemma equation_neg {x y : R} (h : W.Equation x y) : W.Equation x <| W.negY x y 
Arguments: {R : Type u} [CommRing R] {W : WeierstrassCurve.Affine R} {x y : R} (h : W.Equation x y)
Goal: W.Equation x (W.negY x y)
-- WeierstrassCurve.Affine.nonsingular_neg_of
lemma nonsingular_neg_of {x y : R} (h : W.Nonsingular x <| W.negY x y) : W.Nonsingular x y 
Arguments: {R : Type u} [CommRing R] {W : WeierstrassCurve.Affine R} {x y : R} (h : W.Nonsingular x (W.negY x y))
Goal: W.Nonsingular x y
-- WeierstrassCurve.Affine.nonsingular_neg
lemma nonsingular_neg {x y : R} (h : W.Nonsingular x y) : W.Nonsingular x <| W.negY x y 
Arguments: {R : Type u} [CommRing R] {W : WeierstrassCurve.Affine R} {x y : R} (h : W.Nonsingular x y)
Goal: W.Nonsingular x (W.negY x y)
-- WeierstrassCurve.Affine.nonsingular_negAdd_of_eval_derivative_ne_zero
lemma nonsingular_negAdd_of_eval_derivative_ne_zero {x₁ x₂ y₁ L : R}
    (hx' : W.Equation (W.addX x₁ x₂ L) (W.negAddY x₁ x₂ y₁ L))
    (hx : (W.addPolynomial x₁ y₁ L).derivative.eval (W.addX x₁ x₂ L) ≠ 0) :
    W.Nonsingular (W.addX x₁ x₂ L) (W.negAddY x₁ x₂ y₁ L) 
Arguments: {R : Type u} [CommRing R] {W : WeierstrassCurve.Affine R} {x₁ x₂ y₁ L : R} (hx' : W.Equation (W.addX x₁ x₂ L) (W.negAddY x₁ x₂ y₁ L)) (hx : Polynomial.eval (W.addX x₁ x₂ L) (Polynomial.derivative (W.addPolynomial x₁ y₁ L)) ≠ 0)
Goal: W.Nonsingular (W.addX x₁ x₂ L) (W.negAddY x₁ x₂ y₁ L)
-- WeierstrassCurve.Affine.slope_of_Y_eq
@[simp]
lemma slope_of_Y_eq {x₁ x₂ y₁ y₂ : F} (hx : x₁ = x₂) (hy : y₁ = W.negY x₂ y₂) :
    W.slope x₁ x₂ y₁ y₂ = 0 
Arguments: {F : Type u} [Field F] {W : WeierstrassCurve.Affine F} {x₁ x₂ y₁ y₂ : F} (hx : x₁ = x₂) (hy : y₁ = W.negY x₂ y₂)
Goal: W.slope x₁ x₂ y₁ y₂ = 0
-- WeierstrassCurve.Affine.slope_of_Y_ne
@[simp]
lemma slope_of_Y_ne {x₁ x₂ y₁ y₂ : F} (hx : x₁ = x₂) (hy : y₁ ≠ W.negY x₂ y₂) :
    W.slope x₁ x₂ y₁ y₂ =
      (3 * x₁ ^ 2 + 2 * W.a₂ * x₁ + W.a₄ - W.a₁ * y₁) / (y₁ - W.negY x₁ y₁) 
Arguments: {F : Type u} [Field F] {W : WeierstrassCurve.Affine F} {x₁ x₂ y₁ y₂ : F} (hx : x₁ = x₂) (hy : y₁ ≠ W.negY x₂ y₂)
Goal: W.slope x₁ x₂ y₁ y₂ = (3 * x₁ ^ 2 + 2 * W.a₂ * x₁ + W.a₄ - W.a₁ * y₁) / (y₁ - W.negY x₁ y₁)
-- WeierstrassCurve.Affine.slope_of_X_ne
@[simp]
lemma slope_of_X_ne {x₁ x₂ y₁ y₂ : F} (hx : x₁ ≠ x₂) :
    W.slope x₁ x₂ y₁ y₂ = (y₁ - y₂) / (x₁ - x₂) 
Arguments: {F : Type u} [Field F] {W : WeierstrassCurve.Affine F} {x₁ x₂ y₁ y₂ : F} (hx : x₁ ≠ x₂)
Goal: W.slope x₁ x₂ y₁ y₂ = (y₁ - y₂) / (x₁ - x₂)
-- WeierstrassCurve.Affine.slope_of_Y_ne_eq_eval
lemma slope_of_Y_ne_eq_eval {x₁ x₂ y₁ y₂ : F} (hx : x₁ = x₂) (hy : y₁ ≠ W.negY x₂ y₂) :
    W.slope x₁ x₂ y₁ y₂ = -W.polynomialX.evalEval x₁ y₁ / W.polynomialY.evalEval x₁ y₁ 
Arguments: {F : Type u} [Field F] {W : WeierstrassCurve.Affine F} {x₁ x₂ y₁ y₂ : F} (hx : x₁ = x₂) (hy : y₁ ≠ W.negY x₂ y₂)
Goal: W.slope x₁ x₂ y₁ y₂ = -Polynomial.evalEval x₁ y₁ W.polynomialX / Polynomial.evalEval x₁ y₁ W.polynomialY
-- WeierstrassCurve.Affine.Y_eq_of_X_eq
lemma Y_eq_of_X_eq {x₁ x₂ y₁ y₂ : F} (h₁ : W.Equation x₁ y₁) (h₂ : W.Equation x₂ y₂)
    (hx : x₁ = x₂) : y₁ = y₂ ∨ y₁ = W.negY x₂ y₂ 
Arguments: {F : Type u} [Field F] {W : WeierstrassCurve.Affine F} {x₁ x₂ y₁ y₂ : F} (h₁ : W.Equation x₁ y₁) (h₂ : W.Equation x₂ y₂) (hx : x₁ = x₂)
Goal: y₁ = y₂ ∨ y₁ = W.negY x₂ y₂
-- WeierstrassCurve.Affine.Y_eq_of_Y_ne
lemma Y_eq_of_Y_ne {x₁ x₂ y₁ y₂ : F} (h₁ : W.Equation x₁ y₁) (h₂ : W.Equation x₂ y₂) (hx : x₁ = x₂)
    (hy : y₁ ≠ W.negY x₂ y₂) : y₁ = y₂ 
Arguments: {F : Type u} [Field F] {W : WeierstrassCurve.Affine F} {x₁ x₂ y₁ y₂ : F} (h₁ : W.Equation x₁ y₁) (h₂ : W.Equation x₂ y₂) (hx : x₁ = x₂) (hy : y₁ ≠ W.negY x₂ y₂)
Goal: y₁ = y₂
-- WeierstrassCurve.Affine.addPolynomial_slope
lemma addPolynomial_slope {x₁ x₂ y₁ y₂ : F} (h₁ : W.Equation x₁ y₁) (h₂ : W.Equation x₂ y₂)
    (hxy : x₁ = x₂ → y₁ ≠ W.negY x₂ y₂) : W.addPolynomial x₁ y₁ (W.slope x₁ x₂ y₁ y₂) =
      -((X - C x₁) * (X - C x₂) * (X - C (W.addX x₁ x₂ <| W.slope x₁ x₂ y₁ y₂))) 
Arguments: {F : Type u} [Field F] {W : WeierstrassCurve.Affine F} {x₁ x₂ y₁ y₂ : F} (h₁ : W.Equation x₁ y₁) (h₂ : W.Equation x₂ y₂) (hxy : x₁ = x₂ → y₁ ≠ W.negY x₂ y₂)
Goal: W.addPolynomial x₁ y₁ (W.slope x₁ x₂ y₁ y₂) =
  -((Polynomial.X - Polynomial.C x₁) * (Polynomial.X - Polynomial.C x₂) *
      (Polynomial.X - Polynomial.C (W.addX x₁ x₂ (W.slope x₁ x₂ y₁ y₂))))