In this chapter we will present the notion of crossed modules of commutative algebras and their implementation in this package.
Let k be a fixed commutative ring with 1 ≠ 0. From now on, all k-algebras will be associative and commutative.
A crossed module is a k-algebra morphism mathcalX:=(∂:S→ R) with an action of R on S satisfying
{\bf XModAlg\ 1} ~:~ \partial(r \cdot s) = r(\partial s), \qquad {\bf XModAlg\ 2} ~:~ (\partial s) \cdot s^{\prime} = ss^{\prime},
for all s,s^' ∈ S, r∈ R. The morphism ∂ is called the boundary map of mathcalX
In this definition we used the left action notation. In the category of commutative algebras the right and the left actions coincide.
We can produce crossed modules by using the following methods.
‣ XModAlgebra ( args ) | ( function ) |
‣ XModAlgebraByBoundaryAndAction ( bdy, act ) | ( operation ) |
‣ XModAlgebraByIdeal ( A, I ) | ( operation ) |
‣ XModAlgebraByModule ( M, R ) | ( operation ) |
‣ XModAlgebraByCentralExtension ( f ) | ( operation ) |
‣ XModAlgebraByMultipleAlgebra ( A ) | ( operation ) |
Here are the standard constructions which these operations implement:
Let A be an algebra and I an ideal of A. Then mathcalX = (inc:I→ A) is a crossed module with the multiplication action of A on I. Conversely, given a crossed module mathcalX = (∂ : S → R), it is the case that ∂(S) is an ideal of R.
Let M be a R-module. Then mathcalX = (0:M→ R) is a crossed module. Conversely, given a crossed module mathcalX = (∂ :M→ R), one can get that ker∂ is a (R/∂ M)-module.
Let ∂ : S→ R be a surjective algebra homomorphism. Define the action of R on S by r⋅ s = widetilders where widetilder ∈ ∂^-1(r). Then mathcalX=(∂ : S→ R) is a crossed module with the defined action.
Let S be a k-algebra such that Ann(S)=0 or S^2 = S. Then ∂ : S→ M(S) is a crossed module, where M(S) is the algebra of multipliers of S and ∂ is the canonical homomorphism, [AE03].
‣ Source ( X0 ) | ( attribute ) |
‣ Range ( X0 ) | ( attribute ) |
‣ Boundary ( X0 ) | ( attribute ) |
‣ XModAlgebraAction ( X0 ) | ( attribute ) |
These four attributes are used in the construction of a crossed module mathcalX where:
Source(X)
and Range(X)
are the source and the range of the boundary map respectively;
Boundary(X)
is the boundary map of the crossed module mathcalX;
XModAlgebraAction(X)
is the action used in the crossed module.
The following standard GAP operations have special XModAlg implementations:
Display(X)
is used to list the components of mathcalX;
Size(X)
is used for calculating the order of the crossed module mathcalX;
Name(X)
is used for giving a name to the crossed module mathcalX by associating the names of source and range algebras.
In the following example, we construct a crossed module by using the algebra GF_5D_4 and its augmentation ideal. We also show usage of the attributes listed above.
gap> A := GroupRing(GF(5),DihedralGroup(4)); <algebra-with-one over GF(5), with 2 generators> gap> Size(A); 625 gap> SetName(A,"GF5[D4]"); gap> I := AugmentationIdeal(A); <two-sided ideal in GF5[D4], (2 generators)> gap> Size(I); 125 gap> SetName(I,"Aug"); gap> CM := XModAlgebraByIdeal(A,I); [Aug->GF5[D4]] gap> Display(CM); Crossed module [Aug->GF5[D4]] :- : Source algebra Aug has generators: [ (Z(5)^2)*<identity> of ...+(Z(5)^0)*f1, (Z(5)^2)*<identity> of ... +(Z(5)^0)*f2 ] : Range algebra GF5[D4] has generators: [ (Z(5)^0)*<identity> of ..., (Z(5)^0)*f1, (Z(5)^0)*f2 ] : Boundary homomorphism maps source generators to: [ (Z(5)^2)*<identity> of ...+(Z(5)^0)*f1, (Z(5)^2)*<identity> of ... +(Z(5)^0)*f2 ] gap> Size(CM); [ 125, 625 ] gap> f := Boundary(CM); MappingByFunction( Aug, GF5[D4], function( i ) ... end ) gap> Print( RepresentationsOfObject(CM), "\n" ); [ "IsComponentObjectRep", "IsAttributeStoringRep", "IsPreXModAlgebraObj" ] gap> props := [ "CanEasilyCompareElements", "CanEasilySortElements", > "IsDuplicateFree", "IsLeftActedOnByDivisionRing", "IsAdditivelyCommutative", > "IsLDistributive", "IsRDistributive", "IsPreXModDomain", "Is2dAlgebraObject", > "IsPreXModAlgebra", "IsXModAlgebra" ];; gap> known := KnownPropertiesOfObject(CM);; gap> ForAll( props, p -> (p in known) ); true gap> Print( KnownAttributesOfObject(CM), "\n" ); [ "Name", "Size", "Range", "Source", "Boundary", "XModAlgebraAction" ]
‣ SubXModAlgebra ( X0 ) | ( operation ) |
‣ IsSubXModAlgebra ( X0 ) | ( operation ) |
A crossed module mathcalX^' = (∂ ^' :S^'→ R^' ) is a subcrossed module of the crossed module mathcalX = (∂ :S→ R) if S^' ≤ S, R^'≤ R, ∂^' = ∂|_S^' }, and the action of S^' on R^' is induced by the action of R on S. The operation SubXModAlgebra
is used to construct a subcrossed module of a given crossed module.
gap> e4 := Elements(I)[4]; (Z(5)^0)*<identity> of ...+(Z(5)^0)*f1+(Z(5)^2)*f2+(Z(5)^2)*f1*f2 gap> J := Ideal( I, [e4] ); <two-sided ideal in Aug, (1 generators)> gap> Size(J); 5 gap> SetName( J, "<e4>" ); gap> PM := XModAlgebraByIdeal( A, J ); [<e4>->GF5[D4]] gap> Display( PM ); Crossed module [<e4>->GF5[D4]] :- : Source algebra <e4> has generators: [ (Z(5)^0)*<identity> of ...+(Z(5)^0)*f1+(Z(5)^2)*f2+(Z(5)^2)*f1*f2 ] : Range algebra GF5[D(4)] has generators: [ (Z(5)^0)*<identity> of ..., (Z(5)^0)*f1, (Z(5)^0)*f2 ] : Boundary homomorphism maps source generators to: [ (Z(5)^0)*<identity> of ...+(Z(5)^0)*f1+(Z(5)^2)*f2+(Z(5)^2)*f1*f2 ] gap> IsSubXModAlgebra( CM, PM ); true
‣ PreXModAlgebraByBoundaryAndAction ( bdy, act ) | ( operation ) |
‣ IsPreXModAlgebra ( X0 ) | ( property ) |
An R-algebra homomorphism mathcalX := (∂ : S → R) which satisfy the condition XModAlg 1 is called a precrossed module. The details of these implementations can be found in [Oda09].
gap> G := SmallGroup(4,2); <pc group of size 4 with 2 generators> gap> F := GaloisField(4); GF(2^2) gap> R := GroupRing( F, G ); <algebra-with-one over GF(2^2), with 2 generators> gap> Size(R); 256 gap> SetName( R, "GF(2^2)[k4]" ); gap> e5 := Elements(R)[5]; (Z(2)^0)*<identity> of ...+(Z(2)^0)*f1+(Z(2)^0)*f2+(Z(2)^0)*f1*f2 gap> S := Subalgebra( R, [e5] ); <algebra over GF(2^2), with 1 generators> gap> SetName( S, "<e5>" ); gap> RS := Cartesian( R, S );; gap> SetName( RS, "GF(2^2)[k4] x <e5>" ); gap> act := AlgebraAction( R, RS, S );; gap> bdy := AlgebraHomomorphismByFunction( S, R, r->r ); MappingByFunction( <e5>, GF(2^2)[k4], function( r ) ... end ) gap> IsAlgebraAction( act ); true gap> IsAlgebraHomomorphism( bdy ); true gap> XM := PreXModAlgebraByBoundaryAndAction( bdy, act ); [<e5>->GF(2^2)[k4]] gap> IsXModAlgebra( XM ); true gap> Display( XM ); Crossed module [<e5>->GF(2^2)[k4]] :- : Source algebra has generators: [ (Z(2)^0)*<identity> of ...+(Z(2)^0)*f1+(Z(2)^0)*f2+(Z(2)^0)*f1*f2 ] : Range algebra GF(2^2)[k4] has generators: [ (Z(2)^0)*<identity> of ..., (Z(2)^0)*f1, (Z(2)^0)*f2 ] : Boundary homomorphism maps source generators to: [ (Z(2)^0)*<identity> of ...+(Z(2)^0)*f1+(Z(2)^0)*f2+(Z(2)^0)*f1*f2 ]
Let mathcalX = (∂:S→ R), mathcalX^' = (∂^' :S^' → R^' ) be (pre)crossed modules and θ :S→ S^', φ : R→ R^' be algebra homomorphisms. If
\varphi \circ \partial = \partial ^{\prime } \circ \theta, \qquad \theta (r\cdot s)=\varphi(r) \cdot \theta (s),
for all r∈ R, s∈ S, then the pair (θ ,φ ) is called a morphism between mathcalX and mathcalX^'
The conditions can be thought as the commutativity of the following diagrams:
\xymatrix@R=40pt@C=40pt{ S \ar[d]_{\partial} \ar[r]^{\theta} & S^{\prime } \ar[d]^{\partial^{\prime }} \\ R \ar[r]_{\varphi} & R^{\prime } } \ \ \ \ \xymatrix@R=40pt@C=40pt{ R \times S \ar[d] \ar[r]^{ \varphi \times \theta } & R^{\prime } \times S^{\prime } \ar[d] \\ S \ar[r]_{ \theta } & S^{\prime }. }
In GAP we define the morphisms between algebraic structures such as cat^1-algebras and crossed modules and they are investigated by the function Make2AlgMorphism
.
‣ XModAlgebraMorphism ( arg ) | ( function ) |
‣ IdentityMapping ( X0 ) | ( operation ) |
‣ PreXModAlgebraMorphismByHoms ( f, g ) | ( operation ) |
‣ XModAlgebraMorphismByHoms ( f, g ) | ( operation ) |
‣ IsPreXModAlgebraMorphism ( f ) | ( property ) |
‣ IsXModAlgebraMorphism ( f ) | ( property ) |
‣ Source ( m ) | ( attribute ) |
‣ Range ( m ) | ( attribute ) |
‣ IsTotal ( m ) | ( property ) |
‣ IsSingleValued ( m ) | ( property ) |
‣ Name ( m ) | ( attribute ) |
These operations construct crossed module homomorphisms, which may have the attributes listed.
gap> A:=GroupRing(GF(2),CyclicGroup(4)); <algebra-with-one over GF(2), with 2 generators> gap> B:=AugmentationIdeal(A); <two-sided ideal in <algebra-with-one over GF(2), with 2 generators>, (dimension 3)> gap> X1:=XModAlgebra(A,B); [Algebra( GF(2), [ (Z(2)^0)*<identity> of ...+(Z(2)^0)*f2, (Z(2)^0)*f1+(Z(2)^0)*f2, (Z(2)^0)*f2+(Z(2)^0)*f1*f2 ] )->AlgebraWithOne( GF(2), [ (Z(2)^0)*f1, (Z(2)^0)*f2 ] )] gap> C:=GroupRing(GF(2),SmallGroup(4,2)); <algebra-with-one over GF(2), with 2 generators> gap> D:=AugmentationIdeal(C); <two-sided ideal in <algebra-with-one over GF(2), with 2 generators>, (dimension 3)> gap> X2:=XModAlgebra(C,D); [Algebra( GF(2), [ (Z(2)^0)*<identity> of ...+(Z(2)^0)*f2, (Z(2)^0)*f1+(Z(2)^0)*f2, (Z(2)^0)*f2+(Z(2)^0)*f1*f2 ] )->AlgebraWithOne( GF(2), [ (Z(2)^0)*f1, (Z(2)^0)*f2 ] )] gap> B = D; false gap> all_f := AllHomsOfAlgebras(A,C);; gap> all_g := AllHomsOfAlgebras(B,D);; gap> mor := XModAlgebraMorphism(X1,X2,all_g[1],all_f[2]); [[..] => [..]] gap> Display(mor); Morphism of crossed modules :- : Source = [Algebra( GF(2), [ (Z(2)^0)*<identity> of ...+(Z(2)^0)*f2, (Z(2)^0)*f1+(Z(2)^0)*f2, (Z(2)^0)*f2+(Z(2)^0)*f1*f2 ] )->AlgebraWithOne( GF(2), [ (Z(2)^0)*f1, (Z(2)^0)*f2 ] )] with generating sets: [ (Z(2)^0)*<identity> of ...+(Z(2)^0)*f2, (Z(2)^0)*f1+(Z(2)^0)*f2, (Z(2)^0)*f2+(Z(2)^0)*f1*f2 ] [ (Z(2)^0)*<identity> of ..., (Z(2)^0)*f1, (Z(2)^0)*f2 ] : Range = [Algebra( GF(2), [ (Z(2)^0)*<identity> of ...+(Z(2)^0)*f2, (Z(2)^0)*f1+(Z(2)^0)*f2, (Z(2)^0)*f2+(Z(2)^0)*f1*f2 ] )->AlgebraWithOne( GF(2), [ (Z(2)^0)*f1, (Z(2)^0)*f2 ] )] with generating sets: [ (Z(2)^0)*<identity> of ...+(Z(2)^0)*f2, (Z(2)^0)*f1+(Z(2)^0)*f2, (Z(2)^0)*f2+(Z(2)^0)*f1*f2 ] [ (Z(2)^0)*<identity> of ..., (Z(2)^0)*f1, (Z(2)^0)*f2 ] : Source Homomorphism maps source generators to: [ <zero> of ..., <zero> of ..., <zero> of ... ] : Range Homomorphism maps range generators to: [ (Z(2)^0)*<identity> of ..., (Z(2)^0)*<identity> of ..., (Z(2)^0)*<identity> of ... ] gap> IsTotal(mor); true gap> IsSingleValued(mor); true
‣ Kernel ( X0 ) | ( operation ) |
Let (θ,φ) : mathcalX = (∂ : S → R) → mathcalX^' = (∂^' : S^' → R^') be a crossed module homomorphism. Then the crossed module
\ker(\theta,\varphi) = (\partial| : \ker\theta \rightarrow \ker\varphi )
is called the kernel of (θ,φ). Also, ker(θ ,φ ) is an ideal of mathcalX. An example is given below.
gap> X3 := Kernel(mor); [Algebra( GF(2), [ (Z(2)^0)*<identity> of ...+(Z(2)^0)*f2, (Z(2)^0)*f1+(Z(2)^0)*f2, (Z(2)^0)*f2+(Z(2)^0)*f1*f2 ] )->Algebra( GF(2), [ (Z(2)^0)*f1+(Z(2)^0)*f2, (Z(2)^0)*f1+(Z(2)^0)*f1*f2, (Z(2)^0)*<identity> of ...+(Z(2)^0)*f1 ] )] gap> IsXModAlgebra(X3); true gap> Size(X3); [ 8, 8 ] gap> IsSubXModAlgebra(X1,X3); true
‣ Image ( X0 ) | ( operation ) |
Let (θ,φ) : mathcalX = (∂ : S → R) → mathcalX^' = (∂^' : S^' → R^') be a crossed module homomorphism. Then the crossed module
\mathop{\textrm{Im}\rm}(\theta,\varphi) = (\partial^{\prime}| : \mathop{\textrm{Im}\rm}\theta \rightarrow \mathop{\textrm{Im}\rm}\varphi)
is called the image of (θ,φ). Further, Im(θ,φ) is a subcrossed module of (S^',R^',∂^').
In our package, the image of a crossed module homomorphism can be obtained by the command Image2dAlgMapping
. The operation Sub2dAlgObject
is effectively used for finding the kernel and image crossed modules induced from a given crossed module homomorphism.
‣ SourceHom ( m ) | ( attribute ) |
‣ RangeHom ( m ) | ( attribute ) |
‣ IsInjective ( m ) | ( property ) |
‣ IsSurjective ( m ) | ( property ) |
‣ IsBijjective ( m ) | ( property ) |
Let (θ,φ) be a homomorphism of crossed modules. If the homomorphisms θ and φ are injective (surjective) then (θ,φ) is injective (surjective).
The attributes SourceHom
and RangeHom
store the two algebra homomorphisms θ and φ.
gap> theta := SourceHom(mor); [ (Z(2)^0)*<identity> of ...+(Z(2)^0)*f2, (Z(2)^0)*f1+(Z(2)^0)*f2, (Z(2)^0)*f2+(Z(2)^0)*f1*f2 ] -> [ <zero> of ..., <zero> of ..., <zero> of ... ] gap> phi := RangeHom(mor); [ (Z(2)^0)*f1 ] -> [ (Z(2)^0)*<identity> of ... ] gap> IsInjective(mor); false gap> IsSurjective(mor); false
generated by GAPDoc2HTML