The Jacobi Symbol #
We define the Jacobi symbol and prove its main properties.
Main definitions #
We define the Jacobi symbol, jacobiSym a b, for integers a and natural numbers b
as the product over the prime factors p of b of the Legendre symbols legendreSym p a.
This agrees with the mathematical definition when b is odd.
The prime factors are obtained via Nat.factors. Since Nat.factors 0 = [],
this implies in particular that jacobiSym a 0 = 1 for all a.
Main statements #
We prove the main properties of the Jacobi symbol, including the following.
Multiplicativity in both arguments (
jacobiSym.mul_left,jacobiSym.mul_right)The value of the symbol is
1or-1when the arguments are coprime (jacobiSym.eq_one_or_neg_one)The symbol vanishes if and only if
b ≠ 0and the arguments are not coprime (jacobiSym.eq_zero_iff_not_coprime)If the symbol has the value
-1, thena : ZMod bis not a square (ZMod.nonsquare_of_jacobiSym_eq_neg_one); the converse holds whenb = pis a prime (ZMod.nonsquare_iff_jacobiSym_eq_neg_one); in particular, in this caseais a square modpwhen the symbol has the value1(ZMod.isSquare_of_jacobiSym_eq_one).Quadratic reciprocity (
jacobiSym.quadratic_reciprocity,jacobiSym.quadratic_reciprocity_one_mod_four,jacobiSym.quadratic_reciprocity_three_mod_four)The supplementary laws for
a = -1,a = 2,a = -2(jacobiSym.at_neg_one,jacobiSym.at_two,jacobiSym.at_neg_two)The symbol depends on
aonly via its residue class modb(jacobiSym.mod_left) and onbonly via its residue class mod4*a(jacobiSym.mod_right)A
csimprule forjacobiSymandlegendreSymthat evaluatesJ(a | b)efficiently by reducing to the case0 ≤ a < banda,bodd, and then swapsa,band recurses using quadratic reciprocity.
Notation #
We define the notation J(a | b) for jacobiSym a b, localized to NumberTheorySymbols.
Tags #
Jacobi symbol, quadratic reciprocity
Definition of the Jacobi symbol #
We define the Jacobi symbol $\Bigl(\frac{a}{b}\Bigr)$ for integers a and natural numbers b
as the product of the Legendre symbols $\Bigl(\frac{a}{p}\Bigr)$, where p runs through the
prime divisors (with multiplicity) of b, as provided by b.factors. This agrees with the
Jacobi symbol when b is odd and gives less meaningful values when it is not (e.g., the symbol
is 1 when b = 0). This is called jacobiSym a b.
We define localized notation (scope NumberTheorySymbols) J(a | b) for the Jacobi
symbol jacobiSym a b.
The Jacobi symbol of a and b
Instances For
Properties of the Jacobi symbol #
The symbol J(a | 0) has the value 1.
The symbol J(a | 1) has the value 1.
The Legendre symbol legendreSym p a with an integer a and a prime number p
is the same as the Jacobi symbol J(a | p).
The Jacobi symbol is multiplicative in its second argument.
The Jacobi symbol is multiplicative in its second argument.
The Jacobi symbol takes only the values 0, 1 and -1.
The symbol J(1 | b) has the value 1.
The Jacobi symbol is multiplicative in its first argument.
The symbol J(a | b) vanishes iff a and b are not coprime (assuming b ≠ 0).
The symbol J(a | b) is nonzero when a and b are coprime.
The symbol J(a | b) vanishes if and only if b ≠ 0 and a and b are not coprime.
The symbol J(0 | b) vanishes when b > 1.
The symbol J(a | b) takes the value 1 or -1 if a and b are coprime.
We have that J(a^e | b) = J(a | b)^e.
We have that J(a | b^e) = J(a | b)^e.
The square of J(a | b) is 1 when a and b are coprime.
The symbol J(a^2 | b) is 1 when a and b are coprime.
The symbol J(a | b) depends only on a mod b.
The symbol J(a | b) depends only on a mod b.
If p is prime, J(a | p) = -1 and p divides x^2 - a*y^2, then p must divide
x and y.
We can pull out a product over a list in the first argument of the Jacobi symbol.
We can pull out a product over a list in the second argument of the Jacobi symbol.
If J(a | n) = -1, then n has a prime divisor p such that J(a | p) = -1.
If J(a | b) is -1, then a is not a square modulo b.
If p is prime, then J(a | p) is -1 iff a is not a square modulo p.
If p is prime and J(a | p) = 1, then a is a square mod p.
Values at -1, 2 and -2 #
If χ is a multiplicative function such that J(a | p) = χ p for all odd primes p,
then J(a | b) equals χ b for all odd natural numbers b.
If b is odd, then J(-1 | b) is given by χ₄ b.
If b is odd, then J(-a | b) = χ₄ b * J(a | b).
If b is odd, then J(2 | b) is given by χ₈ b.
If b is odd, then J(-2 | b) is given by χ₈' b.
Quadratic Reciprocity #
The bi-multiplicative map giving the sign in the Law of Quadratic Reciprocity
Instances For
We can express qrSign m n as a power of -1 when m and n are odd.
When m and n are odd, then the square of qrSign m n is 1.
qrSign is multiplicative in the first argument.
qrSign is multiplicative in the second argument.
qrSign is symmetric when both arguments are odd.
We can move qrSign m n from one side of an equality to the other when m and n are odd.
The Law of Quadratic Reciprocity for the Jacobi symbol, version with qrSign
The Law of Quadratic Reciprocity for the Jacobi symbol
The Law of Quadratic Reciprocity for the Jacobi symbol: if a and b are natural numbers
with a % 4 = 1 and b odd, then J(a | b) = J(b | a).
The Law of Quadratic Reciprocity for the Jacobi symbol: if a and b are natural numbers
with a odd and b % 4 = 1, then J(a | b) = J(b | a).
The Law of Quadratic Reciprocity for the Jacobi symbol: if a and b are natural numbers
both congruent to 3 mod 4, then J(a | b) = -J(b | a).
The Jacobi symbol J(a | b) depends only on b mod 4*a (version for a : ℕ).
The Jacobi symbol J(a | b) depends only on b mod 4*a.
Fast computation of the Jacobi symbol #
We follow the implementation as in Mathlib/Tactic/NormNum/LegendreSymbol.lean.