Legendre Symbol #
In this file we introduce a special case of the traditional Legendre Symbol.
The quadratic character χ used here is Mathlib's quadraticChar, whose values are cast from
ℤ into the finite field F itself; this is the form in which the Elligator 1 paper uses it.
All the facts below are consequences of the Mathlib API for quadraticChar, specialised to a
field F with Fintype.card F = q and q % 4 = 3.
References #
See [bernstein2013a], Section 3.1.
χ(a) is the quadratic character of a in the finite field F with q elements, where q is a
prime congruent to 3 modulo 4, viewed as an element of F.
This is Mathlib's quadraticChar composed with the cast ℤ → F, since
Mathlib.NumberTheory.LegendreSymbol.Basic is restricted to ℤ.
Equations
- Elligator.LegendreSymbol.χ a = ↑((quadraticChar F) a)
Instances For
@[simp]
theorem
Elligator.LegendreSymbol.χ_a_ne_zero
{F : Type u_1}
[Field F]
[Fintype F]
[DecidableEq F]
{a : F}
(a_ne_zero : a ≠ 0)
:
theorem
Elligator.LegendreSymbol.a_eq_zero_of_χ_of_a_eq_zero
{F : Type u_1}
[Field F]
[Fintype F]
[DecidableEq F]
{a : F}
:
@[simp]
theorem
Elligator.LegendreSymbol.χ_a_eq_one
{F : Type u_1}
[Field F]
[Fintype F]
[DecidableEq F]
{a : F}
(a_ne_zero : a ≠ 0)
(a_square : IsSquare a)
:
@[simp]
theorem
Elligator.LegendreSymbol.χ_sq
{F : Type u_1}
[Field F]
[Fintype F]
[DecidableEq F]
{a : F}
(a_ne_zero : a ≠ 0)
:
theorem
Elligator.LegendreSymbol.χ_neg_one
{F : Type u_1}
[Field F]
[Fintype F]
[DecidableEq F]
{q : ℕ}
(hq_card : Fintype.card F = q)
(hq_mod : q % 4 = 3)
:
theorem
Elligator.LegendreSymbol.χ_χ_eq_χ
{F : Type u_1}
[Field F]
[Fintype F]
[DecidableEq F]
{q : ℕ}
{a : F}
(hq_card : Fintype.card F = q)
(hq_mod : q % 4 = 3)
:
theorem
Elligator.LegendreSymbol.χ_inv
{F : Type u_1}
[Field F]
[Fintype F]
[DecidableEq F]
{a : F}
:
theorem
Elligator.LegendreSymbol.one_div_χ_of_a_eq_χ_a
{F : Type u_1}
[Field F]
[Fintype F]
[DecidableEq F]
{a : F}
:
theorem
Elligator.LegendreSymbol.χ_a_mul_a_IsSquare
{F : Type u_1}
[Field F]
[Fintype F]
[DecidableEq F]
{q : ℕ}
{a : F}
(a_ne_zero : a ≠ 0)
(hq_card : Fintype.card F = q)
(hq_mod : q % 4 = 3)
: