Additive characters of finite rings and fields #
Let R
be a finite commutative ring. An additive character of R
with values
in another commutative ring R'
is simply a morphism from the additive group
of R
into the multiplicative monoid of R'
.
The additive characters on R
with values in R'
form a commutative group.
We use the namespace AddChar
.
Main definitions and results #
We define mulShift ψ a
, where ψ : AddChar R R'
and a : R
, to be the
character defined by x ↦ ψ (a * x)
. An additive character ψ
is primitive
if mulShift ψ a
is trivial only when a = 0
.
We show that when ψ
is primitive, then the map a ↦ mulShift ψ a
is injective
(AddChar.to_mulShift_inj_of_isPrimitive
) and that ψ
is primitive when R
is a field
and ψ
is nontrivial (AddChar.IsNontrivial.isPrimitive
).
We also show that there are primitive additive characters on R
(with suitable
target R'
) when R
is a field or R = ZMod n
(AddChar.primitiveCharFiniteField
and AddChar.primitiveZModChar
).
Finally, we show that the sum of all character values is zero when the character
is nontrivial (and the target is a domain); see AddChar.sum_eq_zero_of_isNontrivial
.
Tags #
additive character
Definitions related to and results on additive characters #
Define AddChar R R'
as (Multiplicative R) →* R'
.
The definition works for an additive monoid R
and a monoid R'
,
but we will restrict to the case that both are commutative rings below.
We assume right away that R'
is commutative, so that AddChar R R'
carries
a structure of commutative monoid.
The trivial additive character (sending everything to 1
) is (1 : AddChar R R').
Equations
- AddChar R R' = (Multiplicative R →* R')
Instances For
Equations
- AddChar.instCommMonoidAddChar R R' = inferInstanceAs (CommMonoid (Multiplicative R →* R'))
Equations
- AddChar.instInhabitedAddChar R R' = inferInstanceAs (Inhabited (Multiplicative R →* R'))
Interpret an additive character as a monoid homomorphism.
Equations
- AddChar.toMonoidHom = id
Instances For
Define coercion to a function so that it includes the move from R
to Multiplicative R
.
After we have proved the API lemmas below, we don't need to worry about writing ofAdd a
when we want to apply an additive character.
Equations
- AddChar.instFunLike = inferInstanceAs (FunLike (Multiplicative R →* R') R R')
An additive character maps 0
to 1
.
An additive character maps sums to products.
An additive character on a commutative additive group has an inverse.
Note that this is a different inverse to the one provided by MonoidHom.inv
,
as it acts on the domain instead of the codomain.
Equations
- AddChar.hasInv = { inv := fun (ψ : AddChar R R') => MonoidHom.comp ψ invMonoidHom }
The additive characters on a commutative additive group form a commutative group.
Equations
- AddChar.commGroup = let src := MonoidHom.commMonoid; CommGroup.mk (_ : ∀ (a b : Multiplicative R →* R'), a * b = b * a)
An additive character is nontrivial iff it is not the trivial character.
Define the multiplicative shift of an additive character.
This satisfies mulShift ψ a x = ψ (a * x)
.
Equations
- AddChar.mulShift ψ a = MonoidHom.comp ψ (AddMonoidHom.toMultiplicative (AddMonoidHom.mulLeft a))
Instances For
The product of mulShift ψ a
and mulShift ψ b
is mulShift ψ (a + b)
.
mulShift ψ 0
is the trivial character.
An additive character is primitive iff all its multiplicative shifts by nonzero elements are nontrivial.
Equations
- AddChar.IsPrimitive ψ = ∀ (a : R), a ≠ 0 → AddChar.IsNontrivial (AddChar.mulShift ψ a)
Instances For
The map associating to a : R
the multiplicative shift of ψ
by a
is injective when ψ
is primitive.
When R
is a field F
, then a nontrivial additive character is primitive
Definition for a primitive additive character on a finite ring R
into a cyclotomic extension
of a field R'
. It records which cyclotomic extension it is, the character, and the
fact that the character is primitive.
Equations
- AddChar.PrimitiveAddChar R R' = ((n : ℕ+) × (char : AddChar R (CyclotomicField n R')) ×' AddChar.IsPrimitive char)
Instances For
The first projection from PrimitiveAddChar
, giving the cyclotomic field.
Equations
- AddChar.PrimitiveAddChar.n χ = χ.fst
Instances For
The second projection from PrimitiveAddChar
, giving the character.
Equations
- AddChar.PrimitiveAddChar.char χ = χ.snd.fst
Instances For
The third projection from PrimitiveAddChar
, showing that χ.2
is primitive.
The additive character on ZMod n
associated to a primitive n
th root of unity
is primitive
There is a primitive additive character on ZMod n
if the characteristic of the target
does not divide n
Equations
- One or more equations did not get rendered due to their size.
Instances For
Existence of a primitive additive character on a finite field #
There is a primitive additive character on the finite field F
if the characteristic
of the target is different from that of F
.
We obtain it as the composition of the trace from F
to ZMod p
with a primitive
additive character on ZMod p
, where p
is the characteristic of F
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The sum of all character values #
The sum over the values of a nontrivial additive character vanishes if the target ring is a domain.
The sum over the values of the trivial additive character is the cardinality of the source.
The sum over the values of mulShift ψ b
for ψ
primitive is zero when b ≠ 0
and #R
otherwise.