theorem
Elligator.Elligator1.y_h1
{F : Type u_1}
[Field F]
[Fintype F]
(t : { n : F // n ≠ 1 ∧ n ≠ -1 })
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
:
have y_of_t := y t s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have r_of_s := r s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have X_of_t := X t s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
X_of_t ^ 2 + (2 + r_of_s * (y_of_t - 1) / (y_of_t + 1)) * X_of_t + 1 = 0
theorem
Elligator.Elligator1.y_h2
{F : Type u_1}
[Field F]
[Fintype F]
(t : { n : F // n ≠ 1 ∧ n ≠ -1 })
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
:
have r_of_s := r s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have X_of_t := X t s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have point := ϕ (↑t) s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have η_of_point := η q field_cardinality q_prime_power q_mod_4_congruent_3 ↑point;
X_of_t ^ 2 + 2 * (1 + η_of_point * r_of_s) * X_of_t + 1 = 0
theorem
Elligator.Elligator1.y_h3
{F : Type u_1}
[Field F]
[Fintype F]
(t : { n : F // n ≠ 1 ∧ n ≠ -1 })
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
:
have r_of_s := r s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have X_of_t := X t s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have point := ϕ (↑t) s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have η_of_point := η q field_cardinality q_prime_power q_mod_4_congruent_3 ↑point;
X_of_t + 1 / X_of_t = -2 * (1 + η_of_point * r_of_s)
theorem
Elligator.Elligator1.X_comparison_implication
{F : Type u_1}
[Field F]
[Fintype F]
(t : { t : F // t ≠ 1 ∧ t ≠ -1 })
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
:
let t1 := ↑t;
let t2 := -t1;
have h2_2 := ⋯;
have X1 := X t s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have X2 := X ⟨t2, h2_2⟩ s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have point := ϕ (↑t) s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have η_of_point := η q field_cardinality q_prime_power q_mod_4_congruent_3 ↑point;
have r_of_s := r s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
X1 + X2 = -2 * (1 + η_of_point * r_of_s)
theorem
Elligator.Elligator1.X_comparison_implication2
{F : Type u_1}
[Field F]
[Fintype F]
(t : { t : F // t ≠ 1 ∧ t ≠ -1 })
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
:
theorem
Elligator.Elligator1.point_comparison
{F : Type u_1}
[Field F]
[Fintype F]
(t : { t : F // t ≠ 1 ∧ t ≠ -1 })
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
:
let t1 := ↑t;
let t2 := -t1;
have h2_2 := ⋯;
have y1 := y t s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have y2 := y ⟨t2, h2_2⟩ s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have x1 := x t s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have x2 := x ⟨t2, h2_2⟩ s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
(x1, y1) = (x2, y2)
theorem
Elligator.Elligator1.X_η_h1
{F : Type u_1}
[Field F]
[Fintype F]
(t : { n : F // n ≠ 1 ∧ n ≠ -1 })
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
(η_h1 :
have point := ϕ (↑t) s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have r_of_s := r s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have η_of_point := η q field_cardinality q_prime_power q_mod_4_congruent_3 ↑point;
η_of_point * r_of_s = -2)
:
theorem
Elligator.Elligator1.X_η_h2
{F : Type u_1}
[Field F]
[Fintype F]
(t : { n : F // n ≠ 1 ∧ n ≠ -1 })
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
(η_h1 :
have point := ϕ (↑t) s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have r_of_s := r s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have η_of_point := η q field_cardinality q_prime_power q_mod_4_congruent_3 ↑point;
η_of_point * r_of_s = -2)
:
theorem
Elligator.Elligator1.u_η_h1
{F : Type u_1}
[Field F]
[Fintype F]
(t : { n : F // n ≠ 1 ∧ n ≠ -1 })
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
(η_h1 :
have point := ϕ (↑t) s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have r_of_s := r s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have η_of_point := η q field_cardinality q_prime_power q_mod_4_congruent_3 ↑point;
η_of_point * r_of_s = -2)
:
theorem
Elligator.Elligator1.t_η_h1
{F : Type u_1}
[Field F]
[Fintype F]
(t : { n : F // n ≠ 1 ∧ n ≠ -1 })
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
(η_h1 :
have point := ϕ (↑t) s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have r_of_s := r s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have η_of_point := η q field_cardinality q_prime_power q_mod_4_congruent_3 ↑point;
η_of_point * r_of_s = -2)
:
theorem
Elligator.Elligator1.v_η_h1
{F : Type u_1}
[Field F]
[Fintype F]
(t : { n : F // n ≠ 1 ∧ n ≠ -1 })
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
(η_h1 :
have point := ϕ (↑t) s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have r_of_s := r s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have η_of_point := η q field_cardinality q_prime_power q_mod_4_congruent_3 ↑point;
η_of_point * r_of_s = -2)
:
theorem
Elligator.Elligator1.Y_η_h1
{F : Type u_1}
[Field F]
[Fintype F]
(t : { n : F // n ≠ 1 ∧ n ≠ -1 })
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
(η_h1 :
have point := ϕ (↑t) s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have r_of_s := r s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have η_of_point := η q field_cardinality q_prime_power q_mod_4_congruent_3 ↑point;
η_of_point * r_of_s = -2)
:
have Y_of_t := Y t s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have c_of_s := c s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have χ_of_c_of_s := LegendreSymbol.χ c_of_s q field_cardinality q_prime_power q_mod_4_congruent_3;
have r_of_s := r s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
Y_of_t = r_of_s * χ_of_c_of_s
theorem
Elligator.Elligator1.y_η_h1
{F : Type u_1}
[Field F]
[Fintype F]
(t : { n : F // n ≠ 1 ∧ n ≠ -1 })
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
(η_h1 :
have point := ϕ (↑t) s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have r_of_s := r s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
have η_of_point := η q field_cardinality q_prime_power q_mod_4_congruent_3 ↑point;
η_of_point * r_of_s = -2)
:
noncomputable def
Elligator.Elligator1.ϕ_over_F_prop1
{F : Type u_1}
[Field F]
[Fintype F]
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
(point : F × F)
:
Equations
- Elligator.Elligator1.ϕ_over_F_prop1 q field_cardinality q_prime_power q_mod_4_congruent_3 point = (point.2 + 1 ≠ 0)
Instances For
def
Elligator.Elligator1.ϕ_over_F_prop2
{F : Type u_1}
[Field F]
[Fintype F]
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
(point : F × F)
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
def
Elligator.Elligator1.ϕ_over_F_prop3
{F : Type u_1}
[Field F]
[Fintype F]
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
(point : F × F)
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
def
Elligator.Elligator1.ϕ_over_F_props
{F : Type u_1}
[Field F]
[Fintype F]
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
(point : F × F)
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
noncomputable def
Elligator.Elligator1.ϕ_over_F
{F : Type u_1}
[Field F]
[Fintype F]
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
theorem
Elligator.Elligator1.point_in_ϕ_over_F_with_prop1_base_case
{F : Type u_1}
[Field F]
[Fintype F]
(t : { n : F // n = 1 ∨ n = -1 })
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
:
have point := ↑(ϕ (↑t) s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3);
ϕ_over_F_prop1 q field_cardinality q_prime_power q_mod_4_congruent_3 point
theorem
Elligator.Elligator1.point_in_ϕ_over_F_with_prop1_main_case
{F : Type u_1}
[Field F]
[Fintype F]
(t : { n : F // n ≠ 1 ∧ n ≠ -1 })
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
:
have point := ϕ (↑t) s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
ϕ_over_F_prop1 q field_cardinality q_prime_power q_mod_4_congruent_3 ↑point
theorem
Elligator.Elligator1.point_in_ϕ_over_F_with_prop1
{F : Type u_1}
[Field F]
[Fintype F]
(t s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
:
have point := ϕ t s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
ϕ_over_F_prop1 q field_cardinality q_prime_power q_mod_4_congruent_3 ↑point
theorem
Elligator.Elligator1.point_in_ϕ_over_F_with_prop2_base_case
{F : Type u_1}
[Field F]
[Fintype F]
(t : { n : F // n = 1 ∨ n = -1 })
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
:
have point := ϕ (↑t) s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
ϕ_over_F_prop2 s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3 ↑point
theorem
Elligator.Elligator1.point_in_ϕ_over_F_with_prop2_main_case
{F : Type u_1}
[Field F]
[Fintype F]
(t : { n : F // n ≠ 1 ∧ n ≠ -1 })
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
:
have point := ϕ (↑t) s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
ϕ_over_F_prop2 s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3 ↑point
theorem
Elligator.Elligator1.point_in_ϕ_over_F_with_prop2
{F : Type u_1}
[Field F]
[Fintype F]
(t s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
:
have point := ϕ t s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
ϕ_over_F_prop2 s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3 ↑point
theorem
Elligator.Elligator1.point_in_ϕ_over_F_with_prop3_base_case
{F : Type u_1}
[Field F]
[Fintype F]
(t : { n : F // n = 1 ∨ n = -1 })
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
:
have point := ϕ (↑t) s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
ϕ_over_F_prop3 s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3 ↑point
theorem
Elligator.Elligator1.point_in_ϕ_over_F_with_prop3_main_case
{F : Type u_1}
[Field F]
[Fintype F]
(t : { n : F // n ≠ 1 ∧ n ≠ -1 })
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
:
have point := ϕ (↑t) s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
ϕ_over_F_prop3 s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3 ↑point
theorem
Elligator.Elligator1.point_in_ϕ_over_F_with_prop3
{F : Type u_1}
[Field F]
[Fintype F]
(t s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
:
have point := ϕ t s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
ϕ_over_F_prop3 s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3 ↑point
theorem
Elligator.Elligator1.point_props_of_point_in_ϕ_over_F
{F : Type u_1}
[Field F]
[Fintype F]
(t s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
:
have point := ↑(ϕ t s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3);
point ∈ ϕ_over_F s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3 →
ϕ_over_F_props s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3 point
theorem
Elligator.Elligator1.point_of_ϕ_in_ϕ_over_F
{F : Type u_1}
[Field F]
[Fintype F]
(t : { t : F // t ≠ 1 ∧ t ≠ -1 })
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
:
theorem
Elligator.Elligator1.point_of_ϕ_fulfills_ϕ_over_F_props
{F : Type u_1}
[Field F]
[Fintype F]
(t : { t : F // t ≠ 1 ∧ t ≠ -1 })
(s : F)
(s_h1 : s ≠ 0)
(s_h2 : (s ^ 2 - 2) * (s ^ 2 + 2) ≠ 0)
(q : ℕ)
(field_cardinality : Fintype.card F = q)
(q_prime_power : IsPrimePow q)
(q_mod_4_congruent_3 : q % 4 = 3)
:
have point := ϕ (↑t) s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3;
ϕ_over_F_props s s_h1 s_h2 q field_cardinality q_prime_power q_mod_4_congruent_3 ↑point