Group Rings #
We construct the Group ring R[G]
given a group G
and a ring R
, both having decidable equality. The ring structures is constructed using the (implicit) universal property of R
-modules. As a check on our definitions, R[G]
is proved to be a Ring.
We first define multiplication on formal sums. We prove many properties that are used both to show invariance under elementary moves and to prove that R[G]
is a ring.
Multiplication on formal sums #
multiplication by a monomial
Equations
- FormalSum.mulMonom b h [] = []
- FormalSum.mulMonom b h ((a, g) :: tail) = (a * b, g * h) :: FormalSum.mulMonom b h tail
multiplication for formal sums
Equations
- FormalSum.mul fst [] = []
- FormalSum.mul fst ((a, g) :: tail) = FormalSum.mulMonom a g fst ++ FormalSum.mul fst tail
Properties of multiplication on formal sums #
multiplication by the zero monomial
distributivity of multiplication by a monomial
right distributivity
associativity with two terms monomials
associativity with one term a monomial
left distributivity for multiplication by a monomial
multiplication equivalent when adding term with 0
coefficient
Induced product on the quotient #
Quotient in second argument for group ring multiplication
Equations
- One or more equations did not get rendered due to their size.
invariance under moves of multiplication by monomials
invariance under moves for the first argument for multipilication
multiplication for free modules
Equations
- One or more equations did not get rendered due to their size.
The Ring Structure #
Equations
- GroupRing.groupRingMul = { mul := GroupRing.mul }
Equations
- GroupRing.instOneFreeModule = { one := Quotient.mk (formalSumSetoid R G) [(1, 1)] }
The group ring is a ring
Equations
- GroupRing.instRingFreeModule = Ring.mk zsmulRec (_ : ∀ (x : R[G]), -1 • x + x = Quotient.mk (formalSumSetoid R G) [])