{-| module : Data.Number.Flint.Groups.Dirichlet copyright : (c) 2022 Hartmut Monien license : GNU GPL, version 2 or above (see LICENSE) maintainer : hmonien@uni-bonn.de __Warning: the interfaces in this module are experimental and may change without notice.__ This module allows working with Dirichlet characters algebraically. For evaluations of characters as complex numbers, see @acb-dirichlet@. = Dirichlet characters Working with Dirichlet characters mod /q/ consists mainly in going from residue classes mod /q/ to exponents on a set of generators of the group. This implementation relies on the Conrey numbering scheme introduced in the , which is an explicit choice of generators allowing to represent Dirichlet characters via the pairing \[\begin{aligned} \begin{array}{ccccc} (\mathbb Z/q\mathbb Z)^\times \times (\mathbb Z/q\mathbb Z)^\times & \to & \bigoplus_i \mathbb Z/\phi_i\mathbb Z \times \mathbb Z/\phi_i\mathbb Z & \to &\mathbb C \\ (m,n) & \mapsto& (a_i,b_i) &\mapsto& \chi_q(m,n) = \exp(2i\pi\sum \frac{a_ib_i}{\phi_i} ) \end{array} \end{aligned}\] We call /number/ a residue class \(m\) modulo /q/, and /log/ the corresponding vector \((a_i)\) of exponents of Conrey generators. Going from a /log/ to the corresponding /number/ is a cheap operation we call exponential, while the converse requires computing discrete logarithms. -} module Data.Number.Flint.Groups.Dirichlet ( module Data.Number.Flint.Groups.Dirichlet.FFI, ) where import Data.Number.Flint.Groups.Dirichlet.FFI