You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
At the moment, constructing Dirichlet characters from a table is done as follows:
By way of example, let us use modulus 2520 = 2^3 × 3^2 × 5 × 7. Any character of this modulus is then a group homomorphism (Z / 2520Z)* -> C*, in particular is specified by the generators of (Z / 2520Z)*. We have also that (Z / 2520Z)* ≅ (Z/8Z)* × (Z/9Z)* × (Z/5Z)* × (Z/7Z), so one choice of generating set is given by:
x1 = 5 mod 8, x1 = 1 mod 9, x1 = 1 mod 5, x1 = 1 mod 7
x2 = 1 mod 8, x2 = 2 mod 9, x2 = 1 mod 5, x2 = 1 mod 7
x3 = 1 mod 8, x3 = 1 mod 9, x3 = 2 mod 5, x3 = 1 mod 7
x4 = 1 mod 8, x4 = 1 mod 9, x4 = 1 mod 5, x4 = 3 mod 7
In fromTable, these congruences would be solved to find the generators mod 2520, then the values of the character at these points are calculated to specify the character, and the constructed character is compared to the given table to ensure the table specified a unique character.
But of course, this is not the only generating set. Ideally, we would be given Vector (Maybe (OrZero RootOfUnity)); the function would then check that the points at which the value is given do generate the group (else the character is underspecified), and that the points at which values are given are consistent (else the character is overspecified). It would also check that the given values are valid (are roots of unity for the correct n), and construct the Dirichlet character specified.
I suspect the hardest part of this is the first - checking that the values generate the group.
The text was updated successfully, but these errors were encountered:
At the moment, constructing Dirichlet characters from a table is done as follows:
By way of example, let us use modulus 2520 = 2^3 × 3^2 × 5 × 7. Any character of this modulus is then a group homomorphism
(Z / 2520Z)* -> C*
, in particular is specified by the generators of(Z / 2520Z)*
. We have also that(Z / 2520Z)* ≅ (Z/8Z)* × (Z/9Z)* × (Z/5Z)* × (Z/7Z)
, so one choice of generating set is given by:x1 = 5 mod 8
,x1 = 1 mod 9
,x1 = 1 mod 5
,x1 = 1 mod 7
x2 = 1 mod 8
,x2 = 2 mod 9
,x2 = 1 mod 5
,x2 = 1 mod 7
x3 = 1 mod 8
,x3 = 1 mod 9
,x3 = 2 mod 5
,x3 = 1 mod 7
x4 = 1 mod 8
,x4 = 1 mod 9
,x4 = 1 mod 5
,x4 = 3 mod 7
(since 5 generates
(Z/8Z)*
, 2 generates(Z/9Z)*
, 2 generates(Z/5Z)*
and 3 generates(Z/7Z)*
).In
fromTable
, these congruences would be solved to find the generators mod 2520, then the values of the character at these points are calculated to specify the character, and the constructed character is compared to the given table to ensure the table specified a unique character.But of course, this is not the only generating set. Ideally, we would be given
Vector (Maybe (OrZero RootOfUnity))
; the function would then check that the points at which the value is given do generate the group (else the character is underspecified), and that the points at which values are given are consistent (else the character is overspecified). It would also check that the given values are valid (are roots of unity for the correct n), and construct the Dirichlet character specified.I suspect the hardest part of this is the first - checking that the values generate the group.
The text was updated successfully, but these errors were encountered: