# Dirichlet Characters

Let $R$ be a ring. Then a *Dirichlet character over* $R$ *of modulus* $N$ is a homomorphism

$$
\varepsilon : ({\mathbb{Z}}/N{\mathbb{Z}})^* \rightarrow R^*,
$$

where $R^*$ is the group of invertible elements of $R$. We extend $\varepsilon$ to a set theoretic map on the whole of ${\mathbb{Z}}$ by defining $\varepsilon(x) = 0$ if $\gcd(x,N)\neq 1$. The *conductor* of $\varepsilon$ is the smallest positive integer $M$ such that the homomorphism $({\mathbb{Z}}/N{\mathbb{Z}})^* \rightarrow R^*$ factors through $({\mathbb{Z}}/M{\mathbb{Z}})^*$ via the natural map $({\mathbb{Z}}/N{\mathbb{Z}})^*\rightarrow ({\mathbb{Z}}/M{\mathbb{Z}})^*$.

## Creation

### `DirichletGroup(N): RngIntElt -> GrpDrch`

The group of Dirichlet characters modulo $N$ with values in `RationalField()`. (Note that this is a group of exponent at most $2$.)

### `FullDirichletGroup(N): RngIntElt -> GrpDrch`

The group of Dirichlet characters modulo $N$ taking values in the $m$th cyclotomic field, where $m$ is the exponent of the unit group modulo $N$.

### `DirichletGroup(N, R): RngIntElt, Rng -> GrpDrch`

The group of Dirichlet characters modulo $N$ with values in the ring $R$. Here $R$ can be the integers, rationals, a number field or a finite field. (Note that this group may be smaller than the full Dirichlet group.)

### `DirichletGroup(N, R, z, r): RngIntElt, Rng, RngElt, RngIntElt -> GrpDrch`

The group of Dirichlet characters mod $N$ with values in the cyclic subgroup generated by the root of unity $z$ in the ring $R$. Here $z$ must be an element of $R$ of exact order $r$ (where $r$ may be smaller than the exponent of the full Dirichlet group).

### `BaseExtend(G, R): GrpDrch, Rng -> GrpDrch`

### `BaseExtend(G, R, z): GrpDrch, Rng, RngElt -> GrpDrch`

The group of Dirichlet characters corresponding to $G$ with values in the ring $R$. In the second form, the distinguished root of unity of the base ring of $G$ is identified with the given element $z$.

### `AssignNames(~G, S): GrpDrch, [MonStgElt]`

Assign names to the generators of the Dirichlet group $G$.

## Element Creation

### `Elements(G): GrpDrch -> [GrpDrchElt]`

A sequence containing all Dirichlet characters in the Dirichlet group $G$.

### `Random(G): GrpDrch -> GrpDrchElt`

A random element of the Dirichlet group $G$.

### `G . i: GrpDrch, RngIntElt -> GrpDrchElt`

The $i$th generator of the group $G$.

### `G ! x: GrpDrch, Any -> GrpDrchElt`

This coerces the given element $x$ into the Dirichlet group $G$. Here $x$ may be a Dirichlet character belonging to a different group, or a sequence of integers specifying an element of the `AbelianGroup` of $G$.

### `KroneckerCharacter(D): RngIntElt -> GrpDrchElt`

### `KroneckerCharacter(D, R): RngIntElt, Rng -> GrpDrchElt`

The Kronecker character $n\mapsto (d/n)$, where $d$ is the fundamental discriminant associated to the integer $D$.

When a ring $R$ is given, this is returned as a character with values in $R$.

## Attributes of Dirichlet Groups

### `BaseRing(G): GrpDrch -> Rng`

The ring in which characters in $G$ take values.

### `Modulus(G): GrpDrch -> RngIntElt`

The integer $N$ such that G is a group of Dirichlet characters on ${\mathbb{Z}}/N$.

### `Order(G): GrpDrch -> RngIntElt`

The order of the Dirichlet group $G$.

### `Exponent(G): GrpDrch -> RngIntElt`

The exponent of the Dirichlet group $G$.

### `NumberOfGenerators(G): GrpDrch -> RngIntElt`

The number of generators of the Dirichlet group $G$.

### `Generators(G): GrpDrch -> [GrpDrchElt]`

A sequence containing generators for the Dirichlet group $G$.

### `UnitGenerators(G): GrpDrch -> [RngIntElt]`

This returns an ordered sequence of integers that reduce to “canonical” generators of the unit group of $Z/N$, where $N$ is the modulus of G.

### `GaloisConjugacyRepresentatives(G): GrpDrch -> [GrpDrchElt]`

### `GaloisConjugacyRepresentatives(seq): [GrpDrchElt] -> [GrpDrchElt]`

This returns a sequence containing one representative from each Galois conjugacy class (over ${\mathbb{Q}}$) of characters corresponding to a character in the given group or the given sequence.

### `AbelianGroup(G): GrpDrch -> GrpAb, Map`

This returns a finite abelian group isomorphic to the given group $G$ of Dirichlet characters (as an abstract group), and secondly returns a map from the abstract group to $G$.

It is necessary to use this function in order to make group theoretic constructions involving $G$.

## Attributes of Elements

### `BaseRing(chi): GrpDrchElt -> Rng`

The ring in which the Dirichlet character $\chi$ takes values.

### `Modulus(chi): GrpDrchElt -> RngIntElt`

The modulus of the group of Dirichlet characters that contains $\chi$.

### `Conductor(chi): GrpDrchElt -> RngIntElt`

The minimal conductor of the Dirichlet character $\chi$. (That is, the smallest integer $M$ such that `chi` is well-defined on the unit group of $Z/M$.)

### `ElementToSequence(chi): GrpDrchElt -> SeqEnum`

A sequence of integers specifying the Dirichlet character $\chi$ (in terms of generators of the group containing $\chi$).

### `x eq y: GrpDrchElt, GrpDrchElt -> BoolElt`

Return `true` iff the given characters have the same modulus and values.

### `Order(chi): GrpDrchElt -> RngIntElt`

The order of the given element $\chi$ in a group of Dirichlet characters.

### `IsTrivial(chi): GrpDrchElt -> BoolElt`

Returns `true` if and only if the Dirichlet character $\chi$ has order $1$.

### `IsPrimitive(chi): GrpDrchElt -> BoolElt`

Returns `true` iff the Dirichlet character $\chi$ is primitive (equivalently, if its conductor equals its modulus).

### `AssociatedPrimitiveCharacter(chi): GrpDrchElt -> GrpDrchElt`

The primitive character modulo the conductor of $\chi$ which takes the same values (on units) as $\chi$.

### `IsEven(chi): GrpDrchElt -> BoolElt`

Returns `true` if and only if `Evaluate(chi,-1)` is equal to $1$. Note that in characteristic $0$, the space of modular forms of weight $k$ and character $\chi$ is zero if $\chi$ is even and $k$ is odd.

### `IsOdd(chi): GrpDrchElt -> BoolElt`

Returns `true` if and only if `Evaluate(chi,-1)` is equal to $-1$. Note that in characteristic $0$, the space of modular forms of weight $k$ and character $\chi$ is zero if $\chi$ is odd and $k$ is even.

### `IsTotallyEven(chi): GrpDrchElt -> BoolElt`

For a Dirichlet character $\chi$, this is `true` if and only if every character in the `Decomposition` of $\chi$ (into prime power components) is even.

### `Decomposition(chi): GrpDrchElt -> List`

This decomposes the Dirichlet character $\chi$ as a product of characters with prime power moduli. The function returns a list (not a sequence) containing these characters (which do not belong to the same group).

### `MinimalBaseRingCharacter(chi): GrpDrchElt -> GrpDrchElt`

This returns a character which is the same as $\chi$, except which takes values in the smallest possible subring of the base ring of $\chi$.

## Evaluation

### `Evaluate(chi, n): GrpDrchElt, RngIntElt -> RngElt`

### `chi(n): GrpDrchElt, RngIntElt -> RngElt`

The value of the Dirichlet character $\chi$ at the integer $n$.

### `ValueList(chi): GrpDrchElt -> [RngElt]`

A sequence containing the values $[\chi(1),..,\chi(N)]$ of the given character $\chi$, where $N$ is the modulus of $\chi$.

The list of values is stored; then in later calls to `Evaluate`, the stored value is returned.

### `ValuesOnUnitGenerators(chi): GrpDrchElt -> [RngElt]`

A sequence containing the values of $\chi$ on the ordered sequence of elements of ${\mathbb{Z}}/m$ given by `UnitGenerators(Parent(chi))`, where $m$ is the modulus of $\chi$.

### `OrderOfRootOfUnity(r, n): RngElt, RngIntElt -> RngIntElt`

Given an element $r$ of some ring which is *assumed* to satisfy $r^n = 1$, this returns the smallest integer $m$ such that $r^m = 1$.

(This provides a convenient way to calculate the order of values of non-real characters.)

## Arithmetic

### `x * y: GrpDrchElt, GrpDrchElt -> GrpDrchElt`

### `x / y: GrpDrchElt, GrpDrchElt -> GrpDrchElt`

The product or quotient (respectively) of the Dirichlet characters $x$ and $y$. This is a Dirichlet character of modulus equal to the least common multiple of the moduli of $x$ and $y$. The base rings and chosen roots of unity of the parents of $x$ and $y$ are equal.

### `x ^ n: GrpDrchElt, RngIntElt -> GrpDrchElt`

The Dirichlet character $x$ raised to the power of $n$, where $n$ is any integer.

### `x ^ phi: GrpDrchElt, Map -> GrpDrchElt`

The image of the Dirichlet character $x$ under the automorphism $\phi$.

### `Sqrt(x): GrpDrchElt -> GrpDrchElt`

Given a Dirichlet character $x$ of odd order, this returns a square root of $x$ (in the same group).

## Example

### `Example: Dirichlet (ex-19f11f)`

We begin by constructing the group of characters $({\mathbb{Z}}/5{\mathbb{Z}})^*\rightarrow{\mathbb{Q}}^*$.

```magma
> G<a> := DirichletGroup(5);  G;  // The default base field is Q.
Group of Dirichlet characters of modulus 5 over Rational Field
> #G;
2
> [Evaluate(a, n) : n in [1..5]];
[ 1, -1, -1, 1, 0 ]
> Eltseq(a);
[ 2 ]
> a eq G![2];
true
> IsEven(a);
true
> IsOdd(a);
false
> IsTrivial(a);
false

```

Next we create a character by building it up “locally”.

```magma
> G1<a4> := DirichletGroup(4);
> Conductor(a4);
4
> G2<a5> := DirichletGroup(25);
> Conductor(a5);
5
> eps := a4*a5;
> Modulus(eps);
100
> Conductor(eps);
20
> Evaluate(eps,7) eq Evaluate(a4,7)*Evaluate(a5,7);
true

```

Characters can be constructed over various fields.

```magma
> G<a> := DirichletGroup(7,GF(7));
> #G;
6
> Evaluate(a,2);
2
>
> G<a3,a5> := DirichletGroup(15,CyclotomicField(EulerPhi(15)));
> G;
Group of Dirichlet characters of modulus 15 over Cyclotomic Field of
order 8 and degree 4
> #G;
8
> Conductor(a3);
3
> Conductor(a5);
5
> Order(a5);
4
> Evaluate(a5,2);
zeta_8^2

```

If $D$ is a fundamental discriminant, then `KroneckerCharacter(D)` is the quadratic Dirichlet character corresponding to the quadratic field ${\mathbb{Q}}(\sqrt{D})$. The following code verifies that `KroneckerCharacter` and `KroneckerSymbol` agree in the case $D=209$.

```magma
> chi := KroneckerCharacter(209);
> for n in [1..209] do
>    assert Evaluate(chi,n) eq KroneckerSymbol(209,n);
> end for;

```

If $E$ is an elliptic curve with newform $f_E$, then the twist $E_D$ corresponds to $f_E$ twisted by this character, as illustrated below.

```magma
> E := EllipticCurve(CremonaDatabase(),"11A");
> f := qEigenform(E,8); f;
q - 2*q^2 - q^3 + 2*q^4 + q^5 + 2*q^6 - 2*q^7 + O(q^8)
> chi := KroneckerCharacter(-7);
> qEigenform(QuadraticTwist(E,-7),8);
q - 2*q^2 + q^3 + 2*q^4 - q^5 - 2*q^6 + O(q^8)
> R<q> := Parent(f);
> &+[Evaluate(chi,n)*Coefficient(f,n)*q^n : n in [1..7]] + O(q^8);
q - 2*q^2 + q^3 + 2*q^4 - q^5 - 2*q^6 + O(q^8)

```
