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
FunLike
instance. - map_zero_eq_one' : self.toFun 0 = 1
The function maps
0
to1
.Do not use this directly. Instead use
AddChar.map_zero_eq_one
. The function maps addition in
A
to multiplication inM
.Do not use this directly. Instead use
AddChar.map_add_eq_mul
.
Instances For
The function maps 0
to 1
.
Do not use this directly. Instead use AddChar.map_zero_eq_one
.
Alias of AddChar.map_zero_eq_one
.
An additive character maps 0
to 1
.
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
Composing a MonoidHom
with an AddChar
yields another AddChar
.
Equations
- f.compAddChar φ = AddChar.toMonoidHomEquiv.symm (f.comp φ.toMonoidHom)
Instances For
Composing an AddChar
with an AddMonoidHom
yields another AddChar
.
Equations
- φ.compAddMonoidHom f = AddChar.toAddMonoidHomEquiv.symm (φ.toAddMonoidHom.comp f)
Instances For
Equations
- AddChar.instDecidableEq = Classical.decEq (AddChar A M)
When M
is commutative, AddChar A M
is a commutative monoid.
Equations
- AddChar.instCommMonoid = AddChar.toMonoidHomEquiv.commMonoid
When M
is commutative, AddChar A M
is an additive commutative monoid.
Equations
- AddChar.instAddCommMonoid = Additive.addCommMonoid
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
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
- AddChar.instCommGroup = CommGroup.mk ⋯
The additive characters on a commutative additive group form a commutative group.
Equations
- AddChar.instAddCommGroup = Additive.addCommGroup
An additive character maps negatives to inverses (when defined)
Alias of AddChar.map_neg_eq_inv
.
An additive character maps negatives to inverses (when defined)
Alias of AddChar.map_zsmul_eq_zpow
.
An additive character maps integer scalar multiples to integer powers.
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 ψ (-1))
.
mulShift ψ 0
is the trivial character.