Documentation

Atlas.ArithmeticGeometry.code.EllipticCurves

Instances
    class IsAlgebraicGroup (k : outParam (Type u)) [Field k] (V : Type u) [TopologicalSpace V] [Group V] :
    Instances
      @[reducible, inline]
      abbrev WeierstrassEquation (k : Type u_1) :
      Type u_1
      Instances For
        theorem WeierstrassCurve.exists_variableChange_a₁_a₂_a₃_eq_zero {k : Type u_1} [Field k] (hchar2 : 2 0) (hchar3 : 3 0) (W : WeierstrassCurve k) :
        ∃ (C : VariableChange k), (C W).a₁ = 0 (C W).a₂ = 0 (C W).a₃ = 0
        Instances For
          @[reducible, inline]
          Instances For
            @[reducible, inline]
            abbrev EllipticCurve' (k : Type u_1) [CommRing k] :
            Type u_1
            Instances For
              theorem aut_P1_fixing_three_points_is_identity {K : Type u_1} [Field K] [DecidableEq K] (g : GL (Fin 2) K) (p₁ p₂ p₃ : OnePoint K) (h₁₂ : p₁ p₂) (h₁₃ : p₁ p₃) (h₂₃ : p₂ p₃) (hf₁ : g p₁ = p₁) (hf₂ : g p₂ = p₂) (hf₃ : g p₃ = p₃) (p : OnePoint K) :
              g p = p
              @[reducible, inline]
              abbrev multiplicationByN {G : Type u_1} [AddCommGroup G] (n : ) :
              G →+ G
              Instances For
                def nTorsionSubgroup {G : Type u_1} [AddCommGroup G] (n : ) :
                Instances For
                  @[simp]
                  theorem mem_nTorsionSubgroup {G : Type u_1} [AddCommGroup G] (n : ) (P : G) :
                  @[reducible, inline]
                  Instances For
                    noncomputable def WeierstrassCurve.autGroup (R : Type u_1) [CommRing R] (W : WeierstrassCurve R) :
                    Instances For
                      theorem WeierstrassCurve.aut_s_eq_zero {F : Type u_1} [Field F] {W : WeierstrassCurve F} [W.IsShortNF] {C : VariableChange F} (hC : C W = W) (h2 : 2 0) :
                      C.s = 0
                      theorem WeierstrassCurve.aut_r_eq_zero {F : Type u_1} [Field F] {W : WeierstrassCurve F} [W.IsShortNF] {C : VariableChange F} (hC : C W = W) (h2 : 2 0) (h3 : 3 0) :
                      C.r = 0
                      theorem WeierstrassCurve.aut_t_eq_zero {F : Type u_1} [Field F] {W : WeierstrassCurve F} [W.IsShortNF] {C : VariableChange F} (hC : C W = W) (h2 : 2 0) (h3 : 3 0) :
                      C.t = 0
                      theorem WeierstrassCurve.aut_u_inv_pow4_mul_a₄ {F : Type u_1} [Field F] {W : WeierstrassCurve F} [W.IsShortNF] {C : VariableChange F} (hC : C W = W) (h2 : 2 0) (h3 : 3 0) :
                      C.u⁻¹ ^ 4 * W.a₄ = W.a₄
                      theorem WeierstrassCurve.aut_u_inv_pow6_mul_a₆ {F : Type u_1} [Field F] {W : WeierstrassCurve F} [W.IsShortNF] {C : VariableChange F} (hC : C W = W) (h2 : 2 0) (h3 : 3 0) :
                      C.u⁻¹ ^ 6 * W.a₆ = W.a₆
                      theorem WeierstrassCurve.aut_u_inv_pow4_eq_one {F : Type u_1} [Field F] {W : WeierstrassCurve F} [W.IsShortNF] {C : VariableChange F} (hC : C W = W) (h2 : 2 0) (h3 : 3 0) (ha4 : W.a₄ 0) :
                      C.u⁻¹ ^ 4 = 1
                      theorem WeierstrassCurve.aut_u_inv_pow6_eq_one {F : Type u_1} [Field F] {W : WeierstrassCurve F} [W.IsShortNF] {C : VariableChange F} (hC : C W = W) (h2 : 2 0) (h3 : 3 0) (ha6 : W.a₆ 0) :
                      C.u⁻¹ ^ 6 = 1
                      theorem WeierstrassCurve.aut_u_inv_pow2_eq_one {F : Type u_1} [Field F] {W : WeierstrassCurve F} [W.IsShortNF] {C : VariableChange F} (hC : C W = W) (h2 : 2 0) (h3 : 3 0) (ha4 : W.a₄ 0) (ha6 : W.a₆ 0) :
                      C.u⁻¹ ^ 2 = 1
                      theorem WeierstrassCurve.u_pow_eq_one_of_inv_val_pow_eq_one {F : Type u_1} [Field F] {C : VariableChange F} {n : } (h : C.u⁻¹ ^ n = 1) :
                      C.u ^ n = 1
                      theorem WeierstrassCurve.autGroup_u_pow_twelve {F : Type u_1} [Field F] {W : WeierstrassCurve F} [W.IsShortNF] [W.IsElliptic] {C : VariableChange F} (hC : C autGroup F W) (h2 : 2 0) (h3 : 3 0) :
                      C.u ^ 12 = 1
                      instance WeierstrassCurve.autGroup_finite {F : Type u_1} [Field F] {W : WeierstrassCurve F} [W.IsShortNF] [W.IsElliptic] (h2 : 2 0) (h3 : 3 0) :
                      Finite (autGroup F W)
                      noncomputable def WeierstrassCurve.autGroupToFHom {F : Type u_1} [Field F] {W : WeierstrassCurve F} (_h2 : 2 0) (_h3 : 3 0) :
                      (autGroup F W) →* F
                      Instances For
                        theorem WeierstrassCurve.autGroup_isCyclic {F : Type u_1} [Field F] {W : WeierstrassCurve F} [W.IsShortNF] [W.IsElliptic] (h2 : 2 0) (h3 : 3 0) :
                        theorem WeierstrassCurve.autGroup_u_sq_eq_one_of_generic_j {F : Type u_1} [Field F] {W : WeierstrassCurve F} [W.IsShortNF] (h2 : 2 0) (h3 : 3 0) (ha4 : W.a₄ 0) (ha6 : W.a₆ 0) {C : VariableChange F} (hC : C autGroup F W) :
                        C.u ^ 2 = 1 C.r = 0 C.s = 0 C.t = 0
                        theorem WeierstrassCurve.autGroup_u_pow4_eq_one_of_j_1728 {F : Type u_1} [Field F] {W : WeierstrassCurve F} [W.IsShortNF] (h2 : 2 0) (h3 : 3 0) (ha4 : W.a₄ 0) {C : VariableChange F} (hC : C autGroup F W) :
                        C.u ^ 4 = 1 C.r = 0 C.s = 0 C.t = 0
                        theorem WeierstrassCurve.autGroup_u_pow6_eq_one_of_j_0 {F : Type u_1} [Field F] {W : WeierstrassCurve F} [W.IsShortNF] (h2 : 2 0) (h3 : 3 0) (ha6 : W.a₆ 0) {C : VariableChange F} (hC : C autGroup F W) :
                        C.u ^ 6 = 1 C.r = 0 C.s = 0 C.t = 0
                        theorem WeierstrassCurve.neg_one_mem_autGroup {F : Type u_1} [Field F] {W : WeierstrassCurve F} [W.IsShortNF] :
                        { u := -1, r := 0, s := 0, t := 0 } autGroup F W
                        theorem WeierstrassCurve.u_inv_val_pow_eq_one {F : Type u_1} [Field F] {n : } {u : Fˣ} (h : u ^ n = 1) :
                        u⁻¹ ^ n = 1
                        theorem WeierstrassCurve.fourth_root_mem_autGroup {F : Type u_1} [Field F] {W : WeierstrassCurve F} [W.IsShortNF] {u : Fˣ} (hu : u ^ 4 = 1) (ha₆ : W.a₆ = 0) :
                        { u := u, r := 0, s := 0, t := 0 } autGroup F W
                        theorem WeierstrassCurve.sixth_root_mem_autGroup {F : Type u_1} [Field F] {W : WeierstrassCurve F} [W.IsShortNF] {u : Fˣ} (hu : u ^ 6 = 1) (ha₄ : W.a₄ = 0) :
                        { u := u, r := 0, s := 0, t := 0 } autGroup F W
                        theorem WeierstrassCurve.neg_one_ne_one_variableChange {F : Type u_1} [Field F] (h2 : 2 0) :
                        { u := -1, r := 0, s := 0, t := 0 } 1
                        theorem WeierstrassCurve.vc_eq_one_or_neg_one {F : Type u_1} [Field F] {C : VariableChange F} (hu : C.u ^ 2 = 1) (hr : C.r = 0) (hs : C.s = 0) (ht : C.t = 0) :
                        C = 1 C = { u := -1, r := 0, s := 0, t := 0 }
                        theorem WeierstrassCurve.autGroup_card_eq_two_of_generic_j {F : Type u_1} [Field F] {W : WeierstrassCurve F} [W.IsShortNF] (h2 : 2 0) (h3 : 3 0) (ha4 : W.a₄ 0) (ha6 : W.a₆ 0) :
                        Nat.card (autGroup F W) = 2
                        noncomputable def WeierstrassCurve.autGroupEquivRootsOfUnity4 {F : Type u_1} [Field F] {W : WeierstrassCurve F} [W.IsShortNF] (h2 : 2 0) (h3 : 3 0) (ha4 : W.a₄ 0) (ha6 : W.a₆ = 0) :
                        (autGroup F W) (rootsOfUnity 4 F)
                        Instances For
                          theorem WeierstrassCurve.autGroup_card_eq_four_of_j_1728 {F : Type u_1} [Field F] {W : WeierstrassCurve F} [W.IsShortNF] (h2 : 2 0) (h3 : 3 0) (ha4 : W.a₄ 0) (ha6 : W.a₆ = 0) {ζ : F} ( : IsPrimitiveRoot ζ 4) :
                          Nat.card (autGroup F W) = 4
                          noncomputable def WeierstrassCurve.autGroupEquivRootsOfUnity6 {F : Type u_1} [Field F] {W : WeierstrassCurve F} [W.IsShortNF] (h2 : 2 0) (h3 : 3 0) (ha6 : W.a₆ 0) (ha4 : W.a₄ = 0) :
                          (autGroup F W) (rootsOfUnity 6 F)
                          Instances For
                            theorem WeierstrassCurve.autGroup_card_eq_six_of_j_0 {F : Type u_1} [Field F] {W : WeierstrassCurve F} [W.IsShortNF] (h2 : 2 0) (h3 : 3 0) (ha6 : W.a₆ 0) (ha4 : W.a₄ = 0) {ζ : F} ( : IsPrimitiveRoot ζ 6) :
                            Nat.card (autGroup F W) = 6
                            theorem WeierstrassCurve.Affine.shortNF_addX {F : Type u_1} [Field F] {W' : WeierstrassCurve F} [W'.IsShortNF] (x₁ x₂ : F) :
                            W'.toAffine.addX x₁ x₂ = ^ 2 - x₁ - x₂
                            theorem WeierstrassCurve.Affine.shortNF_addY {F : Type u_1} [Field F] {W' : WeierstrassCurve F} [W'.IsShortNF] (x₁ x₂ y₁ : F) :
                            W'.toAffine.addY x₁ x₂ y₁ = * (x₁ - W'.toAffine.addX x₁ x₂ ) - y₁
                            theorem WeierstrassCurve.Affine.shortNF_slope_of_X_ne {F : Type u_1} [Field F] {W' : WeierstrassCurve F} [DecidableEq F] {x₁ x₂ y₁ y₂ : F} (hx : x₁ x₂) :
                            W'.toAffine.slope x₁ x₂ y₁ y₂ = (y₁ - y₂) / (x₁ - x₂)
                            theorem WeierstrassCurve.Affine.shortNF_slope_of_tangent {F : Type u_1} [Field F] {W' : WeierstrassCurve F} [W'.IsShortNF] [DecidableEq F] {x₁ y₁ y₂ : F} (hy : y₁ W'.toAffine.negY x₁ y₂) :
                            W'.toAffine.slope x₁ x₁ y₁ y₂ = (3 * x₁ ^ 2 + W'.a₄) / (2 * y₁)
                            theorem WeierstrassCurve.Affine.Point.explicit_chord_formula {F : Type u_1} [Field F] [DecidableEq F] {W' : WeierstrassCurve F} [W'.IsShortNF] {x₁ x₂ y₁ y₂ : F} (h₁ : W'.toAffine.Nonsingular x₁ y₁) (h₂ : W'.toAffine.Nonsingular x₂ y₂) (hx : x₁ x₂) :
                            have := W'.toAffine.slope x₁ x₂ y₁ y₂; have x₃ := W'.toAffine.addX x₁ x₂ ; ∃ (h₃ : W'.toAffine.Nonsingular x₃ (W'.toAffine.addY x₁ x₂ y₁ )), some x₁ y₁ h₁ + some x₂ y₂ h₂ = some x₃ (W'.toAffine.addY x₁ x₂ y₁ ) h₃ = (y₁ - y₂) / (x₁ - x₂) x₃ = ^ 2 - x₁ - x₂ W'.toAffine.addY x₁ x₂ y₁ = * (x₁ - x₃) - y₁