Skip to content

Basics

Finite rings and their elements implement the ring interface. We document the methods that are unique to finite rings.

Creation of finite rings

finite_ring Method
julia
finite_ring(c::Vector{IntegerUnion},
            m::Vector{ZZMatrix}; check::Bool = true)

Return the finite ring with additive group isomorphic to Z/c1Z××Z/cnZ and such that generators satisfy bibj=k=1nmjk(i)bk, where m(i) is the j-th entry of m.

If check is true (default), it is verified that this defines a ring.

Examples

julia
julia> finite_ring([2, 2], [ZZ[1 0; 0 0], ZZ[0 0; 0 1]]) # Z/2Z x Z/2Z
Finite ring with additive group
  isomorphic to (Z/2)^2
  and with 2 generators and 2 relations
source
finite_ring Method
julia
finite_ring(c::Vector{IntegerUnion},
            m::Vector{ZZMatrix}; check::Bool = true)

Return the finite ring with additive group isomorphic to Z/c1Z××Z/cnZ and such that generators satisfy bibj=k=1nmjk(i)bk, where m(i) is the j-th entry of m.

If check is true (default), it is verified that this defines a ring.

Examples

julia
julia> finite_ring([2, 2], [ZZ[1 0; 0 0], ZZ[0 0; 0 1]]) # Z/2Z x Z/2Z
Finite ring with additive group
  isomorphic to (Z/2)^2
  and with 2 generators and 2 relations
source
finite_ring Method
julia
finite_ring(A::AbstractAssociativeAlgebra) -> FiniteRing, FiniteRingMap

Given an algebra A over a finite field k, return (R,f), where R is a finite ring and f:RA an isomorphism rings. Currently, the field k must be a prime field.

Examples

julia
julia> R, f = finite_ring(matrix_algebra(GF(2), 3));

julia> R
Finite ring with additive group
  isomorphic to (Z/2)^9
  and with 9 generators and 9 relations
source
finite_ring Method
julia
finite_ring(A::MatRing{FiniteRingElem}) -> FiniteRing

Given a matrix ring A over a finite ring, return (R,f), where R is a finite ring and f:RA an isomorphism rings. Currently, the field k must be a prime field.

Examples

julia
julia> R, = finite_ring(matrix_algebra(GF(2), 2));

julia> S = matrix_ring(R, 2);

julia> T, = finite_ring(S);

julia> T
Finite ring with additive group
  isomorphic to (Z/2)^16
  and with 16 generators and 16 relations
source

Properties

additive_generators Method
julia
additive_generators(R::FiniteRing) -> Vector{FiniteRingElement}

Return generators of the additive group of a finite ring R.

Examples

julia
julia> R, _ = finite_ring(matrix_algebra(GF(2), 2));

julia> additive_generators(R)
4-element Vector{FiniteRingElem}:
 Finite ring element [1, 0, 0, 0]
 Finite ring element [0, 1, 0, 0]
 Finite ring element [0, 0, 1, 0]
 Finite ring element [0, 0, 0, 1]
source
number_of_additive_generators Method
julia
number_of_additive_generators(R::FiniteRing) -> Int

Return the number generators of the additive group of a finite ring R.

Examples

julia
julia> R, _ = finite_ring(matrix_algebra(GF(2), 2));

julia> number_of_additive_generators(R)
4
source
elementary_divisors Method
julia
elementary_divisors(R::FiniteRing) -> Vector

Return the elementary divisors of the additive group of the finite ring R.

Examples

julia
julia> R, f = finite_ring(matrix_algebra(GF(2), 2));

julia> elementary_divisors(R)
4-element Vector{ZZRingElem}:
 2
 2
 2
 2
source

Maximal quotient rings

maximal_p_quotient_ring Method
julia
maximal_p_quotient_ring(R::FiniteRing, p::IntegerUnion) -> FiniteRing, FiniteRingHom

Given a finite ring R and a prime p, return the largest quotient ring S of p-power order and the projection RS.

Examples

julia
julia> R = finite_ring([6, 6], [ZZ[1 0; 0 0], ZZ[0 0; 0 1]]); # Z/6Z x Z/6Z

julia> S, f = maximal_p_quotient_ring(R, 3);

julia> S
Finite ring with additive group
  isomorphic to (Z/3)^2
  and with 2 generators and 4 relations
source

Decomposition

central_primitive_idempotents Method
julia
central_primitive_idempotents(R::FiniteRing) -> Vector{FiniteRingElem}

Given a finite ring R, return the set of orthgonal central primitive idempotents of R.

Examples

julia
julia> R = finite_ring([6, 6], [ZZ[1 0; 0 0], ZZ[0 0; 0 1]]); # Z/6Z x Z/6Z

julia> central_primitive_idempotents(R)
4-element Vector{FiniteRingElem}:
 Finite ring element [0, 3]
 Finite ring element [3, 0]
 Finite ring element [4, 0]
 Finite ring element [0, 4]
source
decompose_into_indecomposable_rings Method
julia
decompose_into_indecomposable_rings(R::FiniteRing)
                                -> Vector{FiniteRing}, Vector{FiniteRingHom}

Given a finite ring R, return a list of indecomposable rings S and a list of projections RS, such that R is the direct product of these rings.

Examples

julia
julia> R = finite_ring([6, 6], [ZZ[1 0; 0 0], ZZ[0 0; 0 1]]); # Z/6Z x Z/6Z

julia> rings, projections = decompose_into_indecomposable_rings(R);

julia> length(rings)
4
source
is_indecomposable Method
julia
is_indecomposable(R::FiniteRing) -> Bool

Return whether the finite ring R is indecomposable.

Examples

julia
julia> R = finite_ring([6, 6], [ZZ[1 0; 0 0], ZZ[0 0; 0 1]]); # Z/6Z x Z/6Z

julia> is_indecomposable(R)
false

julia> R, _ = finite_ring(matrix_algebra(GF(2), 2));

julia> is_indecomposable(R)
true
source

Creaton of elements

Elements of finite rings can be constructed by specifying the coordinates with respect to the additive additive generators or as linear combinations of the additive generators:

julia
julia> R = finite_ring([6, 6], [ZZ[1 0; 0 0], ZZ[0 0; 0 1]]); # Z/6Z x Z/6Z

julia> x = R([1, 2])
Finite ring element [1, 2]

julia> e1, e2 = additive_generators(R);

julia> y = e1 + 2 * e2;

julia> x == y
true

Conversion to other structures

Finite rings of prime characteristic can be converted to algebras using the isomorphism method:

julia
julia> R, = finite_ring(GF(2)[small_group(8, 3)]);

julia> S = matrix_ring(R, 2);

julia> T, = finite_ring(S);

julia> f = isomorphism(MatAlgebra, R)
Map
  from finite ring
  to matrix algebra of dimension 8 over Prime field of characteristic 2

julia> f = isomorphism(StructureConstantAlgebra, R)
Map
  from finite ring
  to structure constant algebra of dimension 8 over GF(2)