Characters from additive to multiplicative monoids #
Let A be an additive monoid, and M a multiplicative one. An additive character of A with
values in M is simply a map A → M which intertwines the addition operation on A with the
multiplicative operation on M.
We define these objects, using the namespace AddChar, and show that if A is a commutative group
under addition, then the additive characters are also a group (written multiplicatively). Note that
we do not need M to be a group here.
We also include some constructions specific to the case when A = R is a ring; then we define
mulShift ψ r, where ψ : AddChar R M and r : R, to be the character defined by
x ↦ ψ (r * x).
For more refined results of a number-theoretic nature (primitive characters, Gauss sums, etc)
see Mathlib.NumberTheory.LegendreSymbol.AddCharacter.
Implementation notes #
Due to their role as the dual of an additive group, additive characters must themselves be an additive group. This contrasts to their pointwise operations which make them a multiplicative group. We simply define both the additive and multiplicative group structures and prove them equal.
For more information on this design decision, see the following zulip thread: https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Additive.20characters
Tags #
additive character
Definitions related to and results on additive characters #
AddChar A M is the type of maps A → M, for A an additive monoid and M a multiplicative
monoid, which intertwine addition in A with multiplication in M.
We only put the typeclasses needed for the definition, although in practice we are usually
interested in much more specific cases (e.g. when A is a group and M a commutative ring).
- toFun : A → M
The underlying function.
Do not use this function directly. Instead use the coercion coming from the
FunLikeinstance. The function maps
0to1.Do not use this directly. Instead use
AddChar.map_zero_eq_one.The function maps addition in
Ato multiplication inM.Do not use this directly. Instead use
AddChar.map_add_eq_mul.
Instances For
Define coercion to a function.
Equations
- AddChar.instFunLike = { coe := AddChar.toFun, coe_injective' := ⋯ }
Interpret an additive character as a monoid homomorphism.
Equations
- φ.toMonoidHom = { toFun := φ.toFun, map_one' := ⋯, map_mul' := ⋯ }
Instances For
Additive characters A → M are the same thing as monoid homomorphisms from Multiplicative A
to M.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The trivial additive character (sending everything to 1).
Equations
The trivial additive character (sending everything to 1).
Equations
- AddChar.instZero = { zero := 1 }
Equations
- AddChar.instInhabited = { default := 1 }
Composing a MonoidHom with an AddChar yields another AddChar.
Equations
- f.compAddChar φ = AddChar.toMonoidHomEquiv.symm (f.comp φ.toMonoidHom)
Instances For
Equations
When M is commutative, AddChar A M is a commutative monoid.
When M is commutative, AddChar A M is an additive commutative monoid.
The natural equivalence to (Multiplicative A →* M) is a monoid isomorphism.
Equations
- AddChar.toMonoidHomMulEquiv = { toEquiv := AddChar.toMonoidHomEquiv, map_mul' := ⋯ }
Instances For
Additive characters A → M are the same thing as additive homomorphisms from A to
Additive M.
Equations
- AddChar.toAddMonoidAddEquiv = { toEquiv := AddChar.toAddMonoidHomEquiv, map_add' := ⋯ }
Instances For
The double dual embedding.
Equations
- AddChar.doubleDualEmb = { toFun := fun (a : A) => { toFun := fun (ψ : AddChar A M) => ψ a, map_zero_eq_one' := ⋯, map_add_eq_mul' := ⋯ }, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Additive characters of additive abelian groups #
The additive characters on a commutative additive group form a commutative group.
Note that the inverse is defined using negation on the domain; we do not assume M has an
inversion operation for the definition (but see AddChar.map_neg_eq_inv below).
Equations
The additive characters on a commutative additive group form a commutative group.
An additive character maps negatives to inverses (when defined)
Additive characters of rings #
Define the multiplicative shift of an additive character.
This satisfies mulShift ψ a x = ψ (a * x).
Equations
- ψ.mulShift r = ψ.compAddMonoidHom (AddMonoidHom.mulLeft r)
Instances For
mulShift ψ 0 is the trivial character.