diff --git a/CHANGES.md b/CHANGES.md
index 90ad77e..434cbad 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,5 +1,11 @@
# CHANGES to the 'XModAlg' package
+## 1.26 -> 1.27 (26/10/24)
+ * (21/10/24) removed references to "Type2" and "XModAlgebraConst"
+ tests now use local variables and are mirrored in /examples
+ xmod.tst now agrees with sections 4.1.7-4.1.10 in the manual
+ changed names of variables in tests to avoid duplications
+
## 1.25 -> 1.26 (09/07/24)
* (08/07/24) renamed the actions and algebras in the tests/examples as
act1, act2, ,,, act6 and added direct sum operations
@@ -17,16 +23,16 @@
and prior to the function being moved to the main GAP library
## 1.18 -> 1.22 (29/04/22)
- * (27/04/22) required version 2.87 of XMod which uses Size2d in place of Size,
- and so replaced Size by Size2d for 2d-algebras
+ * (27/04/22) required version 2.87 of XMod which uses Size2d in place of
+ Size, and so replaced Size by Size2d for 2d-algebras
* (15/07/21) revised PreXModAlgebraOfPreCat1Algebra
* (14/07/21) revised IsPreXModAlgebra and IsXModAlgebra
- renamed AlgebraAction4 AlgebraActionByModule
+ renamed AlgebraAction4 as AlgebraActionByModule
* (09/07/21) added section on Multipliers and MultiplierAlgebras
- * (09/06/21) renamed AlgebraAction3 AlgebraActionBySurjection
+ * (09/06/21) renamed AlgebraAction3 as AlgebraActionBySurjection
renamed XModAlgebraByCentralExtension XModAlgebraBySurjection
revised these operations and added examples
- * (25/05/21) renamed AlgebraAction1 AlgebraActionByMultipliers
+ * (25/05/21) renamed AlgebraAction1 as AlgebraActionByMultipliers
added operation SemidirectProductofAlgebras
added chapter Commutative algebras and their actions to manual
* (12/05/21) added algebra attribute AugmentationXMod
diff --git a/TODO.md b/TODO.md
deleted file mode 100644
index 5ffb3d2..0000000
--- a/TODO.md
+++ /dev/null
@@ -1,4 +0,0 @@
-(14/7/21)
-what is XModAlgebraConst?
-revise XModAlgebraByModule
-XModAlgebraByBoundaryAndAction needs fixing or deleting
\ No newline at end of file
diff --git a/doc/algebra.xml b/doc/algebra.xml
index b6841a9..42fb5f1 100644
--- a/doc/algebra.xml
+++ b/doc/algebra.xml
@@ -88,8 +88,8 @@ for all a,b in the basis for A.
IsAlgebraMultiplier( m1 );
true
-gap> one := One( A1 );;
-gap> L1 := List( BA1, v -> one );;
+gap> id1 := One( A1 );;
+gap> L1 := List( BA1, v -> id1 );;
gap> h1 := LeftModuleHomomorphismByImages( A1, A1, BA1, L1 );
[ (Z(5)^0)*(), (Z(5)^0)*(1,2,3,4,5,6), (Z(5)^0)*(1,3,5)(2,4,6),
(Z(5)^0)*(1,4)(2,5)(3,6), (Z(5)^0)*(1,5,3)(2,6,4), (Z(5)^0)*(1,6,5,4,3,2)
@@ -314,9 +314,9 @@ LeftModuleHomomorphismByMatrix( Basis( A2,
[ [ 0, 0, 1, 4 ], [ 0, 0, 0, 1 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ] ] ),
[ [ 0, 0 ], [ 1, 0 ], [ 0, 1 ] ], CanonicalBasis( Q2 ) )
gap> act2 := AlgebraActionBySurjection( nat2 );;
-gap> C2 := Image( act2 );;
-gap> BC2 := BasisVectors( Basis( C2 ) );;
-gap> b1 := BC2[1];; b2 := BC2[2];;
+gap> I2 := Image( act2 );;
+gap> BI2 := BasisVectors( Basis( I2 ) );;
+gap> b1 := BI2[1];; b2 := BI2[2];;
gap> [ Image(b1,m2)=m2^2, Image(b1,m2^2)=m2^3, Image(b1,m2^3)=Zero(A2) ];
[ true, true, true ]
gap> [ Image(b2,m2)=m2^3, b2=b1^2 ];
diff --git a/doc/cat1.xml b/doc/cat1.xml
index 08ad795..3db2970 100644
--- a/doc/cat1.xml
+++ b/doc/cat1.xml
@@ -322,26 +322,26 @@ subcat^{1}-algebras of a given cat^{1}-algebra.
C3 := Cat1AlgebraSelect( 2, 6, 2, 4 );;
-gap> A3 := Source( C3 );
+gap> C6 := Cat1AlgebraSelect( 2, 6, 2, 4 );;
+gap> A6 := Source( C6 );
GF(2)_c6
-gap> B3 := Range( C3 );
-GF(2)_c3
-gap> eA3 := Elements( A3 );;
-gap> eB3 := Elements( B3 );;
-gap> AA3 := Subalgebra( A3, [ eA3[1], eA3[2], eA3[3] ] );
+gap> B6 := Range( C6 );
+
+gap> eA6 := Elements( A6 );;
+gap> eB6 := Elements( B6 );;
+gap> SA6 := Subalgebra( A6, [ eA6[1], eA6[2], eA6[3] ] );
-gap> [ Size(A3), Size(AA3) ];
+gap> [ Size(A6), Size(SA6) ];
[ 64, 4 ]
-gap> BB3 := Subalgebra( B3, [ eB3[1], eB3[2] ] );
+gap> SB6 := Subalgebra( B6, [ eB6[1], eB6[2] ] );
-gap> [ Size(B3), Size(BB3) ];
+gap> [ Size(B6), Size(SB6) ];
[ 8, 2 ]
-gap> CC3 := SubCat1Algebra( C3, AA3, BB3 );
+gap> SC6 := SubCat1Algebra( C6, SA6, SB6 );
[Algebra( GF(2), [ of ..., (Z(2)^0)*(), (Z(2)^0)*()+(Z(2)^0)*(4,5)
] ) -> Algebra( GF(2), [ of ..., (Z(2)^0)*() ] )]
-gap> Display( CC3 );
-Cat1-algebra [..=>..] :-
+gap> Display( SC6 );
+Cat1-algebra [..=>..] :-
: source algebra has generators:
[ of ..., (Z(2)^0)*(), (Z(2)^0)*()+(Z(2)^0)*(4,5) ]
: range algebra has generators:
@@ -358,6 +358,8 @@ Cat1-algebra [..=>..] :-
[ of ..., of ... ]
: kernel embedding maps generators of kernel to:
[ of ..., (Z(2)^0)*()+(Z(2)^0)*(4,5) ]
+gap> IsSubCat1Algebra( C6, SC6 );
+true
]]>
@@ -429,10 +431,10 @@ These are the six main attributes of a cat^{1}-algebra morphism.
C1 := Cat1Algebra( 2, 1, 1, 1 );
+gap> C1 := Cat1AlgebraSelect( 2, 1, 1, 1 );
[GF(2)_triv -> GF(2)_triv]
gap> Display( C1 );
-Cat1-algebra [GF(2)_triv=>GF(2)_triv] :-
+Cat1-algebra [GF(2)_triv=>GF(2)_triv] :-
: source algebra has generators:
[ (Z(2)^0)*(), (Z(2)^0)*() ]
: range algebra has generators:
@@ -444,11 +446,10 @@ Cat1-algebra [GF(2)_triv=>GF(2)_triv] :-
: range embedding maps range generators to:
[ (Z(2)^0)*(), (Z(2)^0)*() ]
: the kernel is trivial.
-
-gap> C2 := Cat1Algebra( 2, 2, 1, 2 );
+gap> C2 := Cat1AlgebraSelect( 2, 2, 1, 2 );
[GF(2)_c2 -> GF(2)_triv]
-gap> Display( C2 );
-Cat1-algebra [GF(2)_c2=>GF(2)_triv] :-
+gap> Display( C2 );
+Cat1-algebra [GF(2)_c2=>GF(2)_triv] :-
: source algebra has generators:
[ (Z(2)^0)*(), (Z(2)^0)*(1,2) ]
: range algebra has generators:
@@ -467,30 +468,32 @@ Cat1-algebra [GF(2)_c2=>GF(2)_triv] :-
[ (Z(2)^0)*()+(Z(2)^0)*(1,2) ]
gap> C1 = C2;
false
-gap> R1 := Source( C1 );;
-gap> R2 := Source( C2 );;
-gap> S1 := Range( C1 );;
-gap> S2 := Range( C2 );;
-gap> gR1 := GeneratorsOfAlgebra( R1 );
+gap> SC1 := Source( C1 );;
+gap> SC2 := Source( C2 );
+GF(2)_c2
+gap> RC1 := Range( C1 );;
+gap> RC2 := Range( C2 );;
+gap> gSC1 := GeneratorsOfAlgebra( SC1 );
[ (Z(2)^0)*(), (Z(2)^0)*() ]
-gap> gR2 := GeneratorsOfAlgebra( R2 );
+gap> gSC2 := GeneratorsOfAlgebra( SC2 );
[ (Z(2)^0)*(), (Z(2)^0)*(1,2) ]
-gap> gS1 := GeneratorsOfAlgebra( S1 );
+gap> gRC1 := GeneratorsOfAlgebra( RC1 );
[ (Z(2)^0)*(), (Z(2)^0)*() ]
-gap> gS2 := GeneratorsOfAlgebra( S2 );
+gap> gRC2 := GeneratorsOfAlgebra( RC2 );
[ (Z(2)^0)*(), (Z(2)^0)*() ]
-gap> im1 := [ gR2[1], gR2[1] ];
+gap> imS := [ gSC2[1], gSC2[1] ];
[ (Z(2)^0)*(), (Z(2)^0)*() ]
-gap> f1 := AlgebraHomomorphismByImages( R1, R2, gR1, im1 );
+gap> homS := AlgebraHomomorphismByImages( SC1, SC2, gSC1, imS );
[ (Z(2)^0)*(), (Z(2)^0)*() ] -> [ (Z(2)^0)*(), (Z(2)^0)*() ]
-gap> im2 := [ gS2[1], gS2[1] ];
+gap> imR := [ gRC2[1], gRC2[1] ];
[ (Z(2)^0)*(), (Z(2)^0)*() ]
-gap> f2 := AlgebraHomomorphismByImages( S1, S2, gS1, im2 );
+gap> homR := AlgebraHomomorphismByImages( RC1, RC2, gRC1, imR );
[ (Z(2)^0)*(), (Z(2)^0)*() ] -> [ (Z(2)^0)*(), (Z(2)^0)*() ]
-gap> m := Cat1AlgebraMorphism( C1, C2, f1, f2 );
+gap> m12 := Cat1AlgebraMorphism( C1, C2, homS, homR );
[[GF(2)_triv=>GF(2)_triv] => [GF(2)_c2=>GF(2)_triv]]
-gap> Display( m );
-Morphism of cat1-algebras :-
+gap> Display( m12 );
+
+Morphism of cat1-algebras :-
: Source = [GF(2)_triv=>GF(2)_triv] with generating sets:
[ (Z(2)^0)*(), (Z(2)^0)*() ]
[ (Z(2)^0)*(), (Z(2)^0)*() ]
@@ -501,13 +504,15 @@ Morphism of cat1-algebras :-
[ (Z(2)^0)*(), (Z(2)^0)*() ]
: Range Homomorphism maps range generators to:
[ (Z(2)^0)*(), (Z(2)^0)*() ]
-gap> IsSurjective( m );
+
+## gap> Image2dAlgMapping( m12 );
+## [GF(3)_c2^3=>GF(3)_c2^3]
+gap> IsSurjective( m12 );
false
-gap> IsInjective( m );
+gap> IsInjective( m12 );
true
-gap> IsBijective( m );
+gap> IsBijective( m12 );
false
-
]]>
@@ -523,8 +528,8 @@ this operation returns the image crossed module.
imm := ImagesSource2DimensionalMapping( m );;
-gap> Display( imm );
+gap> im12 := ImagesSource2DimensionalMapping( m12 );;
+gap> Display( im12 );
Cat1-algebra [..=>..] :-
: source algebra has generators:
[ (Z(2)^0)*(), (Z(2)^0)*() ]
diff --git a/doc/convert.xml b/doc/convert.xml
index 19615c0..52eaea8 100644
--- a/doc/convert.xml
+++ b/doc/convert.xml
@@ -64,8 +64,8 @@ instead of the operation .
These operations are used for constructing a cat^{1}-algebra
from a given crossed module of algebras.
-As an example we use the crossed module XAB constructed in
-.
+As an example we use the crossed module XAB constructed in section
+.
@@ -74,16 +74,14 @@ As an example we use the crossed module XAB constructed in
gap> CAB := Cat1AlgebraOfXModAlgebra( XAB );
[A(l,m) |X A(m)=>A(l,m)]
gap> Display( CAB );
-Cat1-algebra [A(l,m) |X A(m)=>A(l,m)] :-
+Cat1-algebra [A(l,m) |X A(m) => A(l,m)] :-
: range algebra has generators:
-
[
[ [ Z(5)^0, 0*Z(5), 0*Z(5) ], [ 0*Z(5), Z(5)^0, 0*Z(5) ],
[ 0*Z(5), 0*Z(5), Z(5)^0 ] ],
[ [ 0*Z(5), Z(5)^0, Z(5)^3 ], [ 0*Z(5), 0*Z(5), Z(5)^0 ],
[ 0*Z(5), 0*Z(5), 0*Z(5) ] ] ]
-: tail homomorphism maps source generators to:
-
+: tail homomorphism maps source generators to:
[
[ [ Z(5)^0, 0*Z(5), 0*Z(5) ], [ 0*Z(5), Z(5)^0, 0*Z(5) ],
[ 0*Z(5), 0*Z(5), Z(5)^0 ] ],
@@ -96,7 +94,6 @@ Cat1-algebra [A(l,m) |X A(m)=>A(l,m)] :-
[ [ 0*Z(5), 0*Z(5), 0*Z(5) ], [ 0*Z(5), 0*Z(5), 0*Z(5) ],
[ 0*Z(5), 0*Z(5), 0*Z(5) ] ] ]
: head homomorphism maps source generators to:
-
[
[ [ Z(5)^0, 0*Z(5), 0*Z(5) ], [ 0*Z(5), Z(5)^0, 0*Z(5) ],
[ 0*Z(5), 0*Z(5), Z(5)^0 ] ],
@@ -108,8 +105,7 @@ Cat1-algebra [A(l,m) |X A(m)=>A(l,m)] :-
[ 0*Z(5), 0*Z(5), 0*Z(5) ] ],
[ [ 0*Z(5), 0*Z(5), Z(5)^0 ], [ 0*Z(5), 0*Z(5), 0*Z(5) ],
[ 0*Z(5), 0*Z(5), 0*Z(5) ] ] ]
-: range embedding maps range generators to:
- [ v.1, v.2 ]
+: range embedding maps range generators to: [ v.1, v.2 ]
: kernel has generators:
[ v.4, v.5 ]
]]>
@@ -125,6 +121,8 @@ Cat1-algebra [A(l,m) |X A(m)=>A(l,m)] :-
These operations are used for constructing a crossed module of algebras
from a given cat^{1}-algebra.
+The example uses the cat^1-algebra C3
+constructed in section .
@@ -133,7 +131,6 @@ from a given cat^{1}-algebra.
gap> X3 := XModAlgebraOfCat1Algebra( C3 );
[ -> ]
gap> Display( X3 );
-
Crossed module [..->..] :-
: Source algebra has generators:
[ (Z(2)^0)*()+(Z(2)^0)*(4,5), (Z(2)^0)*(1,2,3)+(Z(2)^0)*(1,2,3)(4,5),
diff --git a/doc/xmod.xml b/doc/xmod.xml
index f9b9cbb..a773baf 100644
--- a/doc/xmod.xml
+++ b/doc/xmod.xml
@@ -78,23 +78,23 @@ it is the case that {\partial(S)} is an ideal of R.
F := GF(5);;
-gap> one := One(F);;
+gap> F5 := GF(5);;
+gap> id5 := One( F5 );;
gap> two := Z(5);;
-gap> z := Zero( F );;
-gap> l := [ [one,z,z], [z,one,z], [z,z,one] ];;
-gap> m := [ [z,one,two^3], [z,z,one], [z,z,z] ];;
-gap> n := [ [z,z,one], [z,z,z], [z,z,z] ];;
-gap> A := Algebra( F, [l,m] );;
-gap> SetName( A, "A(l,m)" );
-gap> B := Subalgebra( A, [m] );;
-gap> SetName( B, "A(m)" );
-gap> IsIdeal( A, B );
+gap> z5 := Zero( F5 );;
+gap> n0 := [ [id5,z5,z5], [z5,id5,z5], [z5,z5,id5] ];;
+gap> n1 := [ [z5,id5,two^3], [z5,z5,id5], [z5,z5,z5] ];;
+gap> n2 := [ [z5,z5,id5], [z5,z5,z5], [z5,z5,z5] ];;
+gap> An := Algebra( F5, [ n0, n1 ] );;
+gap> SetName( An, "An" );
+gap> Bn := Subalgebra( An, [ n1 ] );;
+gap> SetName( Bn, "Bn" );
+gap> IsIdeal( An, Bn );
true
-gap> act := AlgebraActionByMultipliers( A, B, A );;
-gap> XAB := XModAlgebraByIdeal( A, B );
-[ A(m) -> A(l,m) ]
-gap> SetName( XAB, "XAB" );
+gap> actn := AlgebraActionByMultipliers( An, Bn, An );;
+gap> Xn := XModAlgebraByIdeal( An, Bn );
+[ Bn -> An ]
+gap> SetName( Xn, "Xn" );
]]>
@@ -125,7 +125,6 @@ gap> SetName( IAk4, "I(GF5[k4])" );
gap> XIAk4 := XModAlgebraByIdeal( Ak4, IAk4 );
[ I(GF5[k4]) -> GF5[k4] ]
gap> Display( XIAk4 );
-
Crossed module [I(GF5[k4])->GF5[k4]] :-
: Source algebra I(GF5[k4]) has generators:
[ (Z(5)^2)* of ...+(Z(5)^0)*f1, (Z(5)^2)* of ...+(Z(5)^
@@ -135,7 +134,6 @@ Crossed module [I(GF5[k4])->GF5[k4]] :-
: Boundary homomorphism maps source generators to:
[ (Z(5)^2)* of ...+(Z(5)^0)*f1, (Z(5)^2)* of ...+(Z(5)^
0)*f2 ]
-
gap> Size2d( XIAk4 );
[ 125, 625 ]
]]>
@@ -196,11 +194,6 @@ We also show usage of the attributes listed above.
f := Boundary( XIAk4 );
-[ (Z(5)^2)* of ...+(Z(5)^0)*f1, (Z(5)^2)* of ...\
-+(Z(5)^
- 0)*f2 ] -> [ (Z(5)^2)* of ...+(Z(5)^0)*f1,
- (Z(5)^2)* of ...+(Z(5)^0)*f2 ]
gap> RepresentationsOfObject( XIAk4 );
[ "IsComponentObjectRep", "IsAttributeStoringRep", "IsPreXModAlgebraObj" ]
gap> KnownPropertiesOfObject( XIAk4 );
@@ -227,9 +220,9 @@ of a crossed module in which the action is the identity map on M.
XA := XModAlgebraByMultiplierAlgebra( A );
-[ A(l,m) -> ]
-gap> XModAlgebraAction( XA );
+gap> XAn := XModAlgebraByMultiplierAlgebra( An );
+[ An -> ]
+gap> XModAlgebraAction( XAn );
IdentityMapping( )
]]>
@@ -297,23 +290,22 @@ of a given crossed module.
gap> e4 := Elements( IAk4 )[4];
(Z(5)^0)* of ...+(Z(5)^0)*f1+(Z(5)^2)*f2+(Z(5)^2)*f1*f2
gap> Je4 := Ideal( IAk4, [e4] );;
-gap> Size( Je4 );
-5
-gap> SetName( Je4, "" );
-gap> XJe4 := XModAlgebraByIdeal( Ak4, Je4 );
-[ -> GF5[k4] ]
-gap> Display( XJe4 );
-
-Crossed module [->GF5[k4]] :-
-: Source algebra has generators:
- [ (Z(5)^0)* of ...+(Z(5)^0)*f1+(Z(5)^2)*f2+(Z(5)^2)*f1*f2 ]
-: Range algebra GF5[k4] has generators:
- [ (Z(5)^0)* of ..., (Z(5)^0)*f1, (Z(5)^0)*f2 ]
-: Boundary homomorphism maps source generators to:
- [ (Z(5)^0)* of ...+(Z(5)^0)*f1+(Z(5)^2)*f2+(Z(5)^2)*f1*f2 ]
-
-gap> IsSubXModAlgebra( XIAk4, XJe4 );
+gap> SetName( Je4, "" );
+gap> Ke4 := Subalgebra( Ak4, [e4] );;
+gap> [ Size( Je4 ), Size( Ke4 ) ];
+[ 5, 5 ]
+gap> Se4 := SubXModAlgebra( XIAk4, Je4, Ke4 );
+[ -> ]
+gap> IsSubXModAlgebra( XIAk4, Se4 );
true
+gap> Display( Se4 );
+Crossed module [ -> ..] :-
+: Source algebra has generators:
+[ (Z(5)^0)* of ...+(Z(5)^0)*f1+(Z(5)^2)*f2+(Z(5)^2)*f1*f2 ]
+: Range algebra has generators:
+[ (Z(5)^0)* of ...+(Z(5)^0)*f1+(Z(5)^2)*f2+(Z(5)^2)*f1*f2 ]
+: Boundary homomorphism maps source generators to:
+[ (Z(5)^0)* of ...+(Z(5)^0)*f1+(Z(5)^2)*f2+(Z(5)^2)*f1*f2 ]
]]>
@@ -412,9 +404,9 @@ gap> XIBk4 := XModAlgebra( Bk4, IBk4 );
[ I(GF2[k4]) -> GF2[k4] ]
gap> IAc4 = IBk4;
false
-gap> homIAIB := AllHomsOfAlgebras( IAc4, IBk4 );;
+gap> homIAIB := AllAlgebraHomomorphisms( IAc4, IBk4 );;
gap> theta := homIAIB[3];;
-gap> homAB := AllHomsOfAlgebras( Ac4, Bk4 );;
+gap> homAB := AllAlgebraHomomorphisms( Ac4, Bk4 );;
gap> phi := homAB[7];;
gap> mor := XModAlgebraMorphism( XIAc4, XIBk4, theta, phi );
[[I(GF2[c4])->GF2[c4]] => [I(GF2[k4])->GF2[k4]]]
diff --git a/examples/algebra.g b/examples/algebra.g
new file mode 100644
index 0000000..3b015af
--- /dev/null
+++ b/examples/algebra.g
@@ -0,0 +1,136 @@
+#############################################################################
+##
+#W algebra.g. XModAlg example files Z. Arvasi - A. Odabas
+##
+
+LoadPackage( "xmodalg" );
+
+## Section 2.1.1
+A1 := GroupRing( GF(5), Group( (1,2,3,4,5,6) ) );;
+SetName( A1, "A1" );
+BA1 := BasisVectors( Basis( A1 ) );;
+v := BA1[1] + BA1[3] + BA1[5];
+Print( "v = BA1[1] + BA1[3] + BA1[5]: ", v, "\n" );
+I1 := Ideal( A1, [v] );;
+SetName( I1, "I1" );
+v1 := BA1[2];
+Print( "v1 = BA1[2]: ", v1, "\n" );
+m1 := RegularAlgebraMultiplier( A1, I1, v1 );
+Print( "m1 = RegularAlgebraMultiplier( A1, I1, v1 ): ", m1, "\n" );
+
+## Section 2.1.2
+Print( "IsAlgebraMultiplier( m1 )? ", IsAlgebraMultiplier( m1 ), "\n" );
+id1 := One( A1 );;
+L1 := List( BA1, v -> id1 );;
+Print( "L1 = List( BA1, v -> id1 ): ", L1, "\n" );
+h1 := LeftModuleHomomorphismByImages( A1, A1, BA1, L1 );
+Print( "h1 = LeftModuleHomomorphismByImages( A1, A1, BA1, L1 ): ",h1,"\n" );
+Print( "IsAlgebraMultiplier( h1 )? ", IsAlgebraMultiplier( h1 ), "\n" );
+
+## Section 2.1.3
+u1 := BA1[3];
+Print( "\nu1 = BA1[3]: ", u1, "\n" );
+S1 := Subalgebra( A1, [ u1 ] );;
+Print( "S1 = Subalgebra( A1, [ u1 ] ): ", S1, "\n" );;
+SetName( S1, "S1" );
+MS1 := MultiplierAlgebraOfIdealBySubalgebra( A1, I1, S1 );
+Print( "MS1 = MultiplierAlgebraOfIdealBySubalgebra( A1, I1, S1 ): ",
+ MS1, "\n" );
+SetName( MS1, "MS1" );
+BMS1 := BasisVectors( Basis( MS1 ) );;
+Print( "BMS1 = BasisVectors( Basis( MS1 ) )\n" );
+Print( "BMS1[1[] = ", BMS1[1], "\n" );
+
+## Section 2.1.4
+MA1 := MultiplierAlgebra( A1 );
+Print( "\nMA1 = MultiplierAlgebra( A1 ): ", MA1, "\n" );
+BMA1 := BasisVectors( Basis( MA1 ) );;
+Print( "BMA1 = BasisVectors( Basis( MA1 ) )\n" );
+Print( "BMA1[3] = ", BMA1[3], "\n" );
+
+## Section 2.1.5
+hom1 := MultiplierHomomorphism( MA1 );;
+Print( "\nhom1 = MultiplierHomomorphism( MA1 ): ", hom1, "\n" );
+Print( "ImageElm( hom1, BA1[2] ) = ", ImageElm( hom1, BA1[2] ), "\n" );
+
+## Section 2.2.2
+A1 := GroupRing( GF(5), Group( (1,2,3,4,5,6) ) );;
+BA1 := BasisVectors( Basis( A1 ) );;
+v := BA1[1] + BA1[3] + BA1[5];
+I1 := Ideal( A1, [v] );;
+act1 := AlgebraActionByMultipliers( A1, I1, A1 );;
+act12 := Image( act1, BA1[2] );;
+Print( "\nact12 = Image( act1, BA1[2] ):\n" );
+Print( "Image( act12, v ) = ", Image( act12, v ), "\n" );;
+
+## Section 2.2.3
+theta1 := NaturalHomomorphismByIdeal( A1, I1 );
+Print( "\ntheta1 = NaturalHomomorphismByIdeal( A1, I1 ): ", theta1, "\n" );
+Print( List( BA1, v -> ImageElm( theta1, v ) ), "\n" );;
+Print( "act1 = AlgebraActionBySurjection( theta1 ):\n" );
+act0 := AlgebraActionBySurjection( theta1 );
+Print( act0, "\n" );
+## an example which does not fail:
+m2 := [ [0,1,2,3], [0,0,1,2], [0,0,0,1], [0,0,0,0] ];;
+Print( "m2 = ", m2, "\n" );
+Print( "m2^2 = ", m2^2, "\n" );
+Print( "m2^3 = ", m2^3, "\n" );
+A2 := Algebra( Rationals, [m2] );;
+SetName( A2, "A2" );
+S2 := Subalgebra( A2, [m2^3] );;
+SetName( S2, "S2" );
+nat2 := NaturalHomomorphismByIdeal( A2, S2 );
+Print( "nat2 = NaturalHomomorphismByIdeal( A2, S2 ): ", nat2, "\n" );
+Q2 := Image( nat2 );;
+SetName( Q2, "Q2" );
+Display( nat2 );
+act2 := AlgebraActionBySurjection( nat2 );;
+I2 := Image( act2 );;
+BI2 := BasisVectors( Basis( I2 ) );;
+Print( "BI2 = BasisVectors( Basis( I2 ) ): ", BI2, "\n" );
+b1 := BI2[1];;
+Print( "b1 = ", b1, "\n" );
+b2 := BI2[2];;
+Print( "b2 = ", b2, "\n" );
+Print( "Image(b1,m2)=m2^2? ", Image(b1,m2)=m2^2, "\n" );
+Print( "Image(b1,m2^2)=m2^3? ", Image(b1,m2^2)=m2^3, "\n" ); Print( "Image(b1,m2^3)=Zero(A2)? ", Image(b1,m2^3)=Zero(A2), "\n" );
+Print( "Image(b2,m2)=m2^3? ", Image(b2,m2)=m2^3, "\n" );
+Print( "b2=b1^2? ", b2=b1^2, "\n" );
+
+## Section 2.5.1
+P1 := SemidirectProductOfAlgebras( A1, act1, I1 );
+Print( "\nP1 = SemidirectProductOfAlgebras( A1, act1, I1 ): ", P1, "\n" );
+Print( "Embedding( P1, 1 ) = ", Embedding( P1, 1 ), "\n" );
+Print( "Embedding( P1, 2 ) = ", Embedding( P1, 2 ), "\n" );
+Print( "Projection( P1, 1 ) = ", Projection( P1, 1 ), "\n" );
+P2 := SemidirectProductOfAlgebras( Q2, act2, A2 );
+Print( "P2 = SemidirectProductOfAlgebras( Q2, act2, A2 ): ", P2, "\n" );
+Print( "Embedding( P2, 1 ) = ", Embedding( P2, 1 ), "\n" );
+Print( "Embedding( P2, 2 ) = ", Embedding( P2, 2 ), "\n" );
+
+## Section 2.6.1
+A2c6 := GroupRing( GF(2), Group( (1,2,3,4,5,6) ) );;
+Print( "\nA2c6 = GroupRing( GF(2), Group( (1,2,3,4,5,6) ) )\n" );
+R2c3 := GroupRing( GF(2), Group( (7,8,9) ) );;
+Print( "R2c3 = GroupRing( GF(2), Group( (7,8,9) ) ):\n" );
+homAR := AllAlgebraHomomorphisms( A2c6, R2c3 );;
+Print( "homAR = AllAlgebraHomomorphisms( A2c6, R2c3 )\n" );
+Print( "List( homAR, h -> MappingGeneratorsImages(h) ):\n" );
+Print( List( homAR, h -> MappingGeneratorsImages(h) ), "\n" );
+homRA := AllAlgebraHomomorphisms( R2c3, A2c6 );;
+Print( "homRA := AllAlgebraHomomorphisms( R2c3, A2c6 )\n" );
+Print( "List( homRA, h -> MappingGeneratorsImages(h) ):\n" );
+Print( List( homRA, h -> MappingGeneratorsImages(h) ), "\n" );;
+bijAA := AllBijectiveAlgebraHomomorphisms( A2c6, A2c6 );;
+Print( "bijAA = AllBijectiveAlgebraHomomorphisms( A2c6, A2c6 ): ",
+ bijAA, "\n" );;
+Print( "List( bijAA, h -> MappingGeneratorsImages(h) ):\n" );;
+Print( List( bijAA, h -> MappingGeneratorsImages(h) ), "\n" );
+ideAA := AllIdempotentAlgebraHomomorphisms( A2c6, A2c6 );;
+Print( "ideAA = AllIdempotentAlgebraHomomorphisms( A2c6, A2c6 )\n" );
+Print( "ideAA has length ", Length( ideAA ), "\n" );
+
+
+############################################################################
+##
+#E algebra.g . . . . . . . . . . . . . . . . . . . . . . . . . . ends here
diff --git a/examples/cat1-more.g b/examples/cat1-more.g
new file mode 100644
index 0000000..2518fa2
--- /dev/null
+++ b/examples/cat1-more.g
@@ -0,0 +1,72 @@
+############################################################################
+##
+#W cat1-more.g XMODALG example files Zekeriya Arvasi
+#W & Alper Odabas
+#Y Copyright (C) 2014-2024, Zekeriya Arvasi & Alper Odabas,
+##
+
+Print("\nXModAlg test file cat1-more.g :-");
+Print("\ntesting constructions of cat1-algebras\n\n");
+
+LoadPackage( "xmodalg" );
+
+A := GroupRing( GF(2), Group((1,2,3)(4,5)) );
+SetName( A, "GF(2)[c6]" );
+R := GroupRing( GF(2), Group( (1,2,3) ) );
+SetName( R, "GF(2)[c3]" );
+f := AllAlgebraHomomorphisms( A, R );
+g := AllAlgebraHomomorphisms( R, A );
+C4 := PreCat1AlgebraObj( f[6], f[6], g[8] );
+IsCat1Algebra( C4 );
+Size2d( C4 );
+Dimension( C4 );
+Display( C4 );
+
+C2 := Cat1AlgebraSelect( 4, 6, 2, 2 );
+Size2d( C2 );
+Dimension(C2);
+Display( C2 );
+C := Cat1AlgebraSelect(11);
+C := Cat1AlgebraSelect(4,12);
+C := Cat1AlgebraSelect(2,6,3);
+C := Cat1AlgebraSelect(2,6,2);
+
+C3 := Cat1AlgebraSelect( 2, 6, 2, 4 );;
+A3 := Source( C3 );
+B3 := Range( C3 );
+eA3 := Elements( A3 );;
+eB3 := Elements( B3 );;
+AA3 := Subalgebra( A3, [ eA3[1], eA3[2], eA3[3] ] );
+[ Size(A3), Size(AA3) ];
+BB3 := Subalgebra( B3, [ eB3[1], eB3[2] ] );
+[ Size(B3), Size(BB3) ];
+CC3 := SubCat1Algebra( C3, AA3, BB3 );
+Display( CC3 );
+
+C4 := Cat1AlgebraSelect( 2, 1, 1, 1 );
+
+G := SmallGroup(4,2);
+F := GaloisField(4);
+R := GroupRing( F, G );
+Size(R);
+SetName( R, "GF(2^2)[k4]" );
+e5 := Elements(R)[5];
+S := Subalgebra( R, [e5] );
+SetName( S, "" );
+
+## the following may be included once AlgebraAction2 has been fixed
+## RS := Cartesian( R, S );;
+## SetName( RS, "GF(2^2)[k4] x " );
+## act := AlgebraAction( R, RS, S );;
+## bdy := AlgebraHomomorphismByImages( S, R, [e5], [e5] );
+## IsAlgebraAction( act );
+## IsAlgebraHomomorphism( bdy );
+## XM := PreXModAlgebraByBoundaryAndAction( bdy, act );
+## CXM := Cat1AlgebraByXModAlgebra( XM );
+## Display(CXM);
+## X3 := XModAlgebraByCat1Algebra( C3 );
+## Display( X3 );
+
+#############################################################################
+##
+#E cat1-more.g . . . . . . . . . . . . . . . . . . . . . . . . . . ends here
diff --git a/examples/cat1.g b/examples/cat1.g
index 299b355..f14163a 100644
--- a/examples/cat1.g
+++ b/examples/cat1.g
@@ -1,72 +1,129 @@
-############################################################################
-##
-#W cat1.g XMODALG example files Zekeriya Arvasi
-#W & Alper Odabas
-#Y Copyright (C) 2014-2024, Zekeriya Arvasi & Alper Odabas,
+#############################################################################
##
+#W cat1.g XModAlg example files Z. Arvasi - A. Odabas
+##
+
+LoadPackage( "xmodalg" );
-Print("\nXModAlg test file cat1.g :-");
-Print("\ntesting constructions of cat1-algebras\n\n");
+## copy in variables from xmod.g
+Ak4 := GroupRing( GF(5), DihedralGroup(4) );;
+SetName( Ak4, "GF5[k4]" );
+IAk4 := AugmentationIdeal( Ak4 );;
+SetName( IAk4, "I(GF5[k4])" );
+XIAk4 := XModAlgebraByIdeal( Ak4, IAk4 );;
-LoadPackage( "xmodalg" );
+m := [ [0,1,2,3], [0,0,1,2], [0,0,0,1], [0,0,0,0] ];;
+A1 := Algebra( Rationals, [m] );;
+A3 := Subalgebra( A1, [m^3] );;
+nat13 := NaturalHomomorphismByIdeal( A1, A3 );;
+X13 := XModAlgebraBySurjection( nat13 );;
+
+G := SmallGroup( 4, 2 );;
+F := GaloisField( 4 );;
+R := GroupRing( F, G );;
+SetName( R, "GF(2^2)[k4]" );
+e5 := Elements(R)[5];;
+S := Subalgebra( R, [e5] );;
+SetName( S, "" );
+act := AlgebraActionByMultipliers( R, S, R );;
+bdy := AlgebraHomomorphismByImages( S, R, [e5], [e5] );;
+IsAlgebraAction( act );;
+IsAlgebraHomomorphism( bdy );;
+XM := PreXModAlgebraByBoundaryAndAction( bdy, act );;
+IsXModAlgebra( XM );;
-A := GroupRing( GF(2), Group((1,2,3)(4,5)) );
-SetName( A, "GF(2)[c6]" );
-R := GroupRing( GF(2), Group( (1,2,3) ) );
-SetName( R, "GF(2)[c3]" );
-f := AllAlgebraHomomorphisms( A, R );
-g := AllAlgebraHomomorphisms( R, A );
-C4 := PreCat1AlgebraObj( f[6], f[6], g[8] );
-IsCat1Algebra( C4 );
-Size2d( C4 );
-Dimension( C4 );
+A2c6 := GroupRing( GF(2), Group( (1,2,3,4,5,6) ) );;
+R2c3 := GroupRing( GF(2), Group( (7,8,9) ) );;
+homAR := AllAlgebraHomomorphisms( A2c6, R2c3 );;
+homRA := AllAlgebraHomomorphisms( R2c3, A2c6 );;
+
+############################
+## Chapter 3, Section 3.1.2
+t4 := homAR[8];
+Print( "t4 = ", t4, "\n" );
+e4 := homRA[8];
+Print( "e4 = ", e4, "\n" );
+C4 := PreCat1AlgebraByTailHeadEmbedding( t4, t4, e4 );
+Print( "C4 = PreCat1AlgebraByTailHeadEmbedding( t4, t4, e4 ): ", C4, "\n" );
+Print( "IsCat1Algebra( C4 )? ", IsCat1Algebra( C4 ), "\n" );
+Print( "C4 has size: ", Size2d( C4 ),
+ " and dimension: ", Dimension( C4 ), "\n" );
Display( C4 );
-C2 := Cat1AlgebraSelect( 4, 6, 2, 2 );
-Size2d( C2 );
-Dimension(C2);
-Display( C2 );
-C := Cat1AlgebraSelect(11);
-C := Cat1AlgebraSelect(4,12);
-C := Cat1AlgebraSelect(2,6,3);
-C := Cat1AlgebraSelect(2,6,2);
+############################
+## Chapter 3, Section 3.1.3
+Print( "\n" );
+C := Cat1AlgebraSelect( 2, 6, 2 );
-C3 := Cat1AlgebraSelect( 2, 6, 2, 4 );;
-A3 := Source( C3 );
-B3 := Range( C3 );
-eA3 := Elements( A3 );;
-eB3 := Elements( B3 );;
-AA3 := Subalgebra( A3, [ eA3[1], eA3[2], eA3[3] ] );
-[ Size(A3), Size(AA3) ];
-BB3 := Subalgebra( B3, [ eB3[1], eB3[2] ] );
-[ Size(B3), Size(BB3) ];
-CC3 := SubCat1Algebra( C3, AA3, BB3 );
-Display( CC3 );
+C0 := Cat1AlgebraSelect( 4, 6, 2, 2 );
+Print( "\nC0 := Cat1AlgebraSelect( 4, 6, 2, 2 ): ", C0, "\n" );
+Print( "C0 has size: ", Size2d( C0 ), "\n" );
+Display( C0 );
-C4 := Cat1AlgebraSelect( 2, 1, 1, 1 );
+############################
+## Chapter 3, Section 3.1.4
+##
+C6 := Cat1AlgebraSelect( 2, 6, 2, 4 );;
+A6 := Source( C6 );
+Print( "\nA6 = ", A6, "\n" );
+B6 := Range( C6 );
+Print( "B6 = ", B6, "\n" );
+eA6 := Elements( A6 );;
+eB6 := Elements( B6 );;
+SA6 := Subalgebra( A6, [ eA6[1], eA6[2], eA6[3] ] );
+Print( "SA6 = Subalgebra( A6, [ eA6[1], eA6[2], eA6[3] ] ): ", SA6, "\n" );
+Print( "[ Size(A6), Size(SA6) ] = ", [ Size(A6), Size(SA6) ], "\n" );
+SB6 := Subalgebra( B6, [ eB6[1], eB6[2] ] );
+Print( "SB6 = Subalgebra( B6, [ eB6[1], eB6[2] ] ): ", SB6, "\n" );
+Print( "[ Size(B6), Size(SB6) ] = ", [ Size(B6), Size(SB6) ], "\n" );
+SC6 := SubCat1Algebra( C6, SA6, SB6 );
+Print( "SC6 = SubCat1Algebra( C6, SA6, SB6 ): ", SC6, "\n" );
+Display( SC6 );
+Print( "IsSubCat1Algebra( C6, SC6 )? ", IsSubCat1Algebra( C6, SC6 ), "\n" );
-G := SmallGroup(4,2);
-F := GaloisField(4);
-R := GroupRing( F, G );
-Size(R);
-SetName( R, "GF(2^2)[k4]" );
-e5 := Elements(R)[5];
-S := Subalgebra( R, [e5] );
-SetName( S, "" );
+############################
+## Chapter 3, Section 3.2.2
+C1 := Cat1AlgebraSelect( 2, 1, 1, 1 );
+Print( "\nC1 = Cat1AlgebraSelect( 2, 1, 1, 1 ): ", C1, "\n" );
+Display( C1 );
+C2 := Cat1AlgebraSelect( 2, 2, 1, 2 );
+Print( "C2 = Cat1AlgebraSelect( 2, 2, 1, 2 ): ", C2, "\n" );
+Display( C2 );
+Print( "C1 = C2? ", C1 = C2, "\n" );
+SC1 := Source( C1 );;
+SC2 := Source( C2 );
+RC1 := Range( C1 );;
+RC2 := Range( C2 );;
+gSC1 := GeneratorsOfAlgebra( SC1 );
+Print( "GeneratorsOfAlgebra( SC1 ) = ", gSC1, "\n" );
+gSC2 := GeneratorsOfAlgebra( SC2 );
+Print( "GeneratorsOfAlgebra( SC2 ) = ", gSC2, "\n" );
+gRC1 := GeneratorsOfAlgebra( RC1 );
+Print( "GeneratorsOfAlgebra( RC1 ) = ", gRC1, "\n" );
+gRC2 := GeneratorsOfAlgebra( RC2 );
+Print( "GeneratorsOfAlgebra( RC2 ) = ", gRC2, "\n" );
+imS := [ gSC2[1], gSC2[1] ];
+Print( "imS = ", imS, "\n" );
+homS := AlgebraHomomorphismByImages( SC1, SC2, gSC1, imS );
+Print( "homS = ", homS, "\n" );
+imR := [ gRC2[1], gRC2[1] ];
+Print( "imR = ", imR, "\n" );
+homR := AlgebraHomomorphismByImages( RC1, RC2, gRC1, imR );
+Print( "homR = ", homR, "\n" );
+m12 := Cat1AlgebraMorphism( C1, C2, homS, homR );
+Print( "m12 = Cat1AlgebraMorphism( C1, C2, homS, homR ):\n" );
+Display( m12 );
-## the following may be included once AlgebraAction2 has been fixed
-## RS := Cartesian( R, S );;
-## SetName( RS, "GF(2^2)[k4] x " );
-## act := AlgebraAction( R, RS, S );;
-## bdy := AlgebraHomomorphismByImages( S, R, [e5], [e5] );
-## IsAlgebraAction( act );
-## IsAlgebraHomomorphism( bdy );
-## XM := PreXModAlgebraByBoundaryAndAction( bdy, act );
-## CXM := Cat1AlgebraByXModAlgebra( XM );
-## Display(CXM);
-## X3 := XModAlgebraByCat1Algebra( C3 );
-## Display( X3 );
+Print( "IsSurjective( m12 )? ", IsSurjective( m12 ), "\n" );
+Print( "IsInjective( m12 )? ", IsInjective( m12 ), "\n" );
+Print( "IsBijective( m12 )? ", IsBijective( m12 ), "\n" );
-#############################################################################
+###########################
+## Chapter 3, Section 3.2.3
+im12 := ImagesSource2DimensionalMapping( m12 );;
+Print( "\nim12 = ImagesSource2DimensionalMapping( m12 ):\n" );
+Display( im12 );
+
+############################################################################
##
-#E cat1.g . . . . . . . . . . . . . . . . . . . . . . . . . . . ends here
+#E cat1.g . . . . . . . . . . . . . . . . . . . . . . . . . . . . ends here
diff --git a/examples/convert.g b/examples/convert.g
new file mode 100644
index 0000000..bb167b6
--- /dev/null
+++ b/examples/convert.g
@@ -0,0 +1,62 @@
+#############################################################################
+##
+#W convert.g XModAlg example files Z. Arvasi - A. Odabas
+##
+
+LoadPackage( "xmodalg" );
+
+START_TEST( "XModAlg package: convert.tst" );
+saved_infolevel_xmodalg := InfoLevel( InfoXModAlg );;
+SetInfoLevel( InfoXModAlg, 0 );
+
+## make convert.g independent of module.g, cat1.g and xmod.g
+m3 := [ [0,1,0], [0,0,1], [1,0,0] ];;
+A3 := Algebra( Rationals, [m3] );;
+SetName( A3, "A3" );;
+c3 := Group( (1,2,3) );;
+Rc3 := GroupRing( Rationals, c3 );;
+SetName( Rc3, "GR(c3)" );
+g3 := GeneratorsOfAlgebra( Rc3 )[2];;
+mg3 := RegularAlgebraMultiplier( Rc3, Rc3, g3 );;
+Amg3 := AlgebraByGenerators( Rationals, [ mg3 ] );;
+homg3 := AlgebraHomomorphismByImages( A3, Amg3, [ m3 ], [ mg3 ] );;
+actg3 := AlgebraActionByHomomorphism( homg3, Rc3 );;
+
+F5 := GF(5);;
+id5 := One( F5 );;
+two := Z(5);;
+z5 := Zero( F5 );;
+n0 := [ [id5,z5,z5], [z5,id5,z5], [z5,z5,id5] ];;
+n1 := [ [z5,id5,two^3], [z5,z5,id5], [z5,z5,z5] ];;
+n2 := [ [z5,z5,id5], [z5,z5,z5], [z5,z5,z5] ];;
+An := Algebra( F5, [ n0, n1 ] );;
+SetName( An, "An" );
+Bn := Subalgebra( An, [ n1 ] );;
+SetName( Bn, "Bn" );
+Print( "IsIdeal( An, Bn )? ", IsIdeal( An, Bn ), "\n" );
+actn := AlgebraActionByMultipliers( An, Bn, An );;
+Xn := XModAlgebraByIdeal( An, Bn );
+Display( Xn );
+SetName( Xn, "Xn" );
+
+############################
+## Chapter 5, Section 5.1.1
+Cn := Cat1AlgebraOfXModAlgebra( Xn );
+Print( "Cn = Cat1AlgebraOfXModAlgebra( Xn ): ", Cn, "\n" );
+Display( Cn );
+
+C3 := Cat1AlgebraOfXModAlgebra( X3 );
+Print( "\nC3 = Cat1AlgebraOfXModAlgebra( X3 ): ", C3, "\n" );
+Display( C3 );
+
+C6 := Cat1AlgebraSelect( 2, 6, 2, 4 );;
+X6 := XModAlgebraOfCat1Algebra( C6 );
+Print( "\nX6 = XModAlgebraOfCat1Algebra( C6 ):\n", X6, "\n" );
+Display( X6 );
+
+SetInfoLevel( InfoXModAlg, saved_infolevel_xmodalg );;
+STOP_TEST( "convert.tst", 10000 );
+
+############################################################################
+##
+#E convert.g . . . . . . . . . . . . . . . . . . . . . . . . . . ends here
diff --git a/examples/module.g b/examples/module.g
index baa5660..b758994 100644
--- a/examples/module.g
+++ b/examples/module.g
@@ -10,79 +10,79 @@ m3 := [ [0,1,0], [0,0,1], [1,0,0] ];
Print( "m3 = ", m3, "\n" );
A3 := Algebra( Rationals, [m3] );
SetName( A3, "A3" );;
-G := Group( (1,2,3) );;
-B3 := GroupRing( Rationals, G );;
-SetName( B3, "GR(G)" );
-g3 := GeneratorsOfAlgebra( B3 )[2];;
-mg3 := RegularAlgebraMultiplier( B3, B3, g3 );;
-MB3 := AlgebraByGenerators( Rationals, [ mg3 ] );;
-hom3 := AlgebraHomomorphismByImages( A3, MB3, [ m3 ], [ mg3 ] );;
-act3 := AlgebraActionByHomomorphism( hom3, B3 );
-Print ( "action act3 of A3 on B3:\n", act3, "\n" );
+c3 := Group( (1,2,3) );;
+Rc3 := GroupRing( Rationals, c3 );;
+SetName( Rc3, "GR(c3)" );
+g3 := GeneratorsOfAlgebra( Rc3 )[2];;
+mg3 := RegularAlgebraMultiplier( Rc3, Rc3, g3 );;
+Amg3 := AlgebraByGenerators( Rationals, [ mg3 ] );;
+homg3 := AlgebraHomomorphismByImages( A3, Amg3, [ m3 ], [ mg3 ] );;
+actg3 := AlgebraActionByHomomorphism( homg3, Rc3 );
+Print ( "action actg3 of A3 on Rc3:\n", actg3, "\n" );
## Section 4.1.6
-bdy3 := AlgebraHomomorphismByImages( B3, A3, [ g3 ], [ m3 ] );
+bdy3 := AlgebraHomomorphismByImages( Rc3, A3, [ g3 ], [ m3 ] );
Print( "bdy3 = ", bdy3, "\n" );
-X3 := XModAlgebraByBoundaryAndAction( bdy3, act3 );
+X3 := XModAlgebraByBoundaryAndAction( bdy3, actg3 );
Print( "crossed module X3:\n" );
Display( X3 );
## Section 2.3
m3 := [ [0,1,0], [0,0,1], [1,0,0] ];;
-A4 := Algebra( Rationals, [m3] );;
-SetName( A4, "A4" );;
-V4 := Rationals^3;;
-M4 := LeftAlgebraModule( A4, \*, V4 );;
-SetName( M4, "M4" );
-famM4 := ElementsFamily( FamilyObj( M4 ) );;
-v4 := [3,4,5];;
-Print( "initial v4 in V4 = ", v4, "\n" );
-v4 := ObjByExtRep( famM4, v4 );
-Print( "v4 after conversion to M4 = ", v4, "\n" );
-Print( "m3*v4 = ", m3*v4, "\n" );
-genM4 := GeneratorsOfLeftModule( M4 );;
-u4 := 6*genM4[1] + 7*genM4[2] + 8*genM4[3];
-Print( "u4 = 6*genM4[1] + 7*genM4[2] + 8*genM4[3] = ", u4, "\n" );
+A3 := Algebra( Rationals, [m3] );;
+SetName( A3, "A3" );;
+V3 := Rationals^3;;
+M3 := LeftAlgebraModule( A3, \*, V3 );;
+SetName( M3, "M3" );
+famM3 := ElementsFamily( FamilyObj( M3 ) );;
+v3 := [3,4,5];;
+Print( "initial v3 in V3 = ", v3, "\n" );
+v3 := ObjByExtRep( famM3, v3 );
+Print( "v3 after conversion to M3 = ", v3, "\n" );
+Print( "m3*v3 = ", m3*v3, "\n" );
+genM3 := GeneratorsOfLeftModule( M3 );;
+u4 := 6*genM3[1] + 7*genM3[2] + 8*genM3[3];
+Print( "u4 = 6*genM3[1] + 7*genM3[2] + 8*genM3[3] = ", u4, "\n" );
u4 := ExtRepOfObj( u4 );
Print( "ExtRepOfObf( u4 ) = ", u4, "\n" );
## Section 2.3.1
-D4 := LeftActingDomain( M4 );;
-T4 := EmptySCTable( Dimension(M4), Zero(D4), "symmetric" );;
-B4a := AlgebraByStructureConstants( D4, T4 );
-Print( "B4a = ", B4a, "\n" );
-Print( "B4a has generators: ", GeneratorsOfAlgebra( B4a ), "\n" );
-B4 := ModuleAsAlgebra( M4 );
-Print( "B4 has name: ", Name( B4 ), "\n" );
-Print( "B4 has generators: ", GeneratorsOfAlgebra( B4 ), "\n" );
+D3 := LeftActingDomain( M3 );;
+T3 := EmptySCTable( Dimension(M3), Zero(D3), "symmetric" );;
+B3a := AlgebraByStructureConstants( D3, T3 );
+Print( "B3a = ", B3a, "\n" );
+Print( "B3a has generators: ", GeneratorsOfAlgebra( B3a ), "\n" );
+B3 := ModuleAsAlgebra( M3 );
+Print( "B3 has name: ", Name( B3 ), "\n" );
+Print( "B3 has generators: ", GeneratorsOfAlgebra( B3 ), "\n" );
## Section 2.3.2
-Print( "IsModuleAsAlgebra( B4 )? ", IsModuleAsAlgebra( B4 ), "\n" );
-Print( "IsModuleAsAlgebra( A4 )? ", IsModuleAsAlgebra( A4 ), "\n" );
+Print( "IsModuleAsAlgebra( B3 )? ", IsModuleAsAlgebra( B3 ), "\n" );
+Print( "IsModuleAsAlgebra( A3 )? ", IsModuleAsAlgebra( A3 ), "\n" );
## Section 2.3.3
-Print( "the known attributes of B4 are:\n" );
-Print( KnownAttributesOfObject( B4 ), "\n" );
-M2B4 := ModuleToAlgebraIsomorphism( B4 );
-Print( "M2B4 = ", M2B4, "\n" );
-Print( "Source( M2B4 ) = M4? ", Source( M2B4 ) = M4, "\n" );
-Print( "Source( M2B4 ) = V4? ", Source( M2B4 ) = V4, "\n" );
-B2M4 := AlgebraToModuleIsomorphism( B4 );
-Print( "B2M4 = ", B2M4, "\n" );
-Print( "Range( B2M4 ) = M4? ", Range( B2M4 ) = M4, "\n" );
-Print( "Range( B2M4 ) = V4? ", Range( B2M4 ) = V4, "\n" );
+Print( "the known attributes of B3 are:\n" );
+Print( KnownAttributesOfObject( B3 ), "\n" );
+M2B3 := ModuleToAlgebraIsomorphism( B3 );
+Print( "M2B3 = ", M2B3, "\n" );
+Print( "Source( M2B3 ) = M3? ", Source( M2B3 ) = M3, "\n" );
+Print( "Source( M2B3 ) = V3? ", Source( M2B3 ) = V3, "\n" );
+B2M3 := AlgebraToModuleIsomorphism( B3 );
+Print( "B2M3 = ", B2M3, "\n" );
+Print( "Range( B2M3 ) = M3? ", Range( B2M3 ) = M3, "\n" );
+Print( "Range( B2M3 ) = V3? ", Range( B2M3 ) = V3, "\n" );
## Section 2.3.4
-act4 := AlgebraActionByModule( A4, M4 );
-Print( "the action act4 of A4 on B4 is:\n", act4, "\n" );
-a4 := 2*m3 + 3*m3^2;
-Print( "a4 = ", a4, ":\n" );
-Print( "the image of a4 under act4 is:\n", Image( act4, a4 ), "\n" );
-Print( "the image of the action act4 is:\n", Image( act4 ), "\n" );
+act3 := AlgebraActionByModule( A3, M3 );
+Print( "the action act3 of A3 on M3 is:\n", act3, "\n" );
+a3 := 2*m3 + 3*m3^2;
+Print( "a3 = ", a3, ":\n" );
+Print( "the image of a3 under act3 is:\n", Image( act3, a3 ), "\n" );
+Print( "the image of the action act3 is:\n", Image( act3 ), "\n" );
Print( "\n" );
## Section 4.1.7
-X4 := XModAlgebraByModule( A4, M4 );
+X4 := XModAlgebraByModule( A3, M3 );
Print( "Name( X4 ) = ", Name( X4 ), "\n" );
Display( X4 );
@@ -92,38 +92,38 @@ Print( "Name( C4 ) = ", Name( C4 ), "\n" );
Display( C4 );
## Section 2.4.1
-A3B3 := DirectSumOfAlgebras( A3, B3 );;
-SetName( A3B3, Concatenation( Name(A3), "(+)", Name(B3) ) );
-SetDirectSumOfAlgebrasInfo( A3B3,
- rec( algebras := [A3,B3], first := [1,Dimension(A3)+1],
+A3Rc3 := DirectSumOfAlgebras( A3, Rc3 );;
+SetName( A3Rc3, Concatenation( Name(A3), "(+)", Name(Rc3) ) );
+SetDirectSumOfAlgebrasInfo( A3Rc3,
+ rec( algebras := [A3,Rc3], first := [1,Dimension(A3)+1],
embeddings := [ ], projections := [ ] ) );;
## Section 2.4.2
-Print( "\n first embedding into A3B3:\n", Embedding( A3B3, 1 ), "\n" );
-Print( "second projection from A3B3:\n", Projection( A3B3, 2 ), "\n" );
+Print( "\n first embedding into A3Rc3:\n", Embedding( A3Rc3, 1 ), "\n" );
+Print( "second projection from A3Rc3:\n", Projection( A3Rc3, 2 ), "\n" );
## Section 2.4.3
-hom := DirectSumOfAlgebraHomomorphisms( hom3, hom3 );
-Print( "\nthe direct sum of hom3 with itself is:\n", hom, "\n" );
+hom33 := DirectSumOfAlgebraHomomorphisms( homg3, homg3 );
+Print( "\nthe direct sum of homg3 with itself is:\n", hom33, "\n" );
## Section 2.4.4
actMA3 := AlgebraActionByMultipliers( A3, A3, A3 );;
-act5 := AlgebraActionOnDirectSum( actMA3, act3 );;
-Print( "\naction of A on the direct sum of A3 and B3\n", act5, "\n" );
+act4 := AlgebraActionOnDirectSum( actMA3, actg3 );;
+Print( "\naction of A on the direct sum of A3 and Rc3\n", act4, "\n" );
## Section 2.4.5
-act6 := DirectSumOfAlgebraActions( act3, act4 );;
-A6 := Source( act6 );
-B6 := AlgebraActedOn( act6 );
-Print( "\nact6 is the direct sum action of ", A6, " on ", B6, "\n" );
-em3 := ImageElm( Embedding( A6, 1 ), m3 );
-Print( "matrix m3 embeds in A6 as: ", em3, "\n" );
-iem3 := ImageElm( act6, em3 );
-Print( "the action act6 maps em3 to:\n", iem3, "\n" );
-ea4 := ImageElm( Embedding( A6, 2 ), a4 );
-Print( "matrix m4 embeds in A6 as: ", ea4, "\n" );
-iea4 := ImageElm( act6, ea4 );
-Print( "the action act6 maps ea4 to:\n", iea4, "\n" );
+act5 := DirectSumOfAlgebraActions( actg3, act3 );;
+A5 := Source( act5 );
+B5 := AlgebraActedOn( act5 );
+Print( "\nact5 is the direct sum action of ", A5, " on ", B5, "\n" );
+em3 := ImageElm( Embedding( A5, 1 ), m3 );
+Print( "matrix m3 embeds in A5 as: ", em3, "\n" );
+iem3 := ImageElm( act5, em3 );
+Print( "the action act5 maps em3 to:\n", iem3, "\n" );
+ea3 := ImageElm( Embedding( A5, 2 ), a3 );
+Print( "element a3 embeds in A5 as: ", ea3, "\n" );
+iea3 := ImageElm( act5, ea3 );
+Print( "the action act5 maps ea3 to:\n", iea3, "\n" );
############################################################################
##
diff --git a/examples/xmod-more.g b/examples/xmod-more.g
new file mode 100644
index 0000000..46577fe
--- /dev/null
+++ b/examples/xmod-more.g
@@ -0,0 +1,84 @@
+############################################################################
+##
+#W xmod-more.g XMODALG example files Zekeriya Arvasi
+#W & Alper Odabas
+#Y Copyright (C) 2014-2024, Zekeriya Arvasi & Alper Odabas,
+##
+
+LoadPackage( "xmodalg" );
+
+Print("\nXModAlg test file xmod.g (version 16/06/24) :-");
+Print("\ntesting constructions of crossed modules of algebras\n\n");
+
+A := GroupRing( GF(5), DihedralGroup(4) );
+SetName( A, "GF5[d4]" );
+I := AugmentationIdeal( A );
+SetName( I, "I(GF(5)[d4])" );
+CM := XModAlgebraByIdeal( A, I );
+Display( CM );
+Print( "CM has size ", Size2d( CM ), "\n" );
+Print( "CM has dimension ", Dimension( CM ), "\n" );
+f := Boundary( CM );
+Print( "CM has boundary ", f, "\n" );
+Print( "CM has representations ", RepresentationsOfObject( CM ), "\n" );
+props := [ "CanEasilyCompareElements", "CanEasilySortElements",
+"IsDuplicateFree", "IsLeftActedOnByDivisionRing", "IsAdditivelyCommutative",
+"IsPreXModAlgebra", "IsXModAlgebra" ];;
+known := KnownPropertiesOfObject( CM );;
+ForAll( props, p -> (p in known) );
+Print( KnownAttributesOfObject( CM ), "\n" );
+
+e4 := Elements(I)[4];
+J := Ideal( I, [e4] );
+SetName( J, "" );
+Print( "PM is an XModAlgebraByIdeal with ideal generated by ", e4, "\n" );
+PM := XModAlgebraByIdeal( A, J );
+Display( PM );
+ok := IsSubXModAlgebra( CM, PM );
+
+G := SmallGroup( 4, 2 );
+F := GaloisField( 4 );
+R := GroupRing( F, G );
+SetName( R, "GF(4)[k4]" );
+Print( "R is the algebra ", R, "\n" );
+e5 := Elements(R)[5];
+S := Subalgebra( R, [e5] );
+SetName( S, "" );
+Print( "S is the subalgebra of R generated by ", e5, "\n" );
+RS := Cartesian( R, S );;
+SetName( RS, "GF(2^2)[k4] x " );
+## make the following available when AlgebraSAction2 has been fixed
+## act := AlgebraAction( R, RS, S );;
+## bdy := AlgebraHomomorphismByImages( S, R, [e5], [e5] );
+## IsAlgebraAction( act );
+## IsAlgebraHomomorphism( bdy );
+## XM := PreXModAlgebraByBoundaryAndAction( bdy, act );
+## IsXModAlgebra( XM );
+## Display( XM );
+
+A := GroupRing( GF(2), CyclicGroup(4) );
+SetName( A, "GF(2)[c4]" );
+B := AugmentationIdeal( A );
+SetName( B, "I(GF(2)[c4])" );
+X1 := XModAlgebra( A, B );
+C := GroupRing( GF(2), SmallGroup(4,2) );
+SetName( C, "GF(2)[k4]" );
+D := AugmentationIdeal( C );
+SetName( D, "I(GF(2)[k4])" );
+X2 := XModAlgebra( C, D );
+B = D;
+all_f := AllAlgebraHomomorphisms(A,C);;
+all_g := AllAlgebraHomomorphisms(B,D);;
+mor := XModAlgebraMorphism( X1, X2, all_g[1], all_f[2] );
+Display( mor );
+X3 := Kernel( mor) ;
+IsTotal( mor );
+IsSingleValued( mor );
+IsXModAlgebra( X3 );
+Size2d( X3 );
+IsSubXModAlgebra( X1, X3 );
+
+
+#############################################################################
+##
+#E xmod-more.g . . . . . . . . . . . . . . . . . . . . . . . . . . ends here
diff --git a/examples/xmod.g b/examples/xmod.g
index 0b52c73..97b62f3 100644
--- a/examples/xmod.g
+++ b/examples/xmod.g
@@ -1,84 +1,178 @@
-############################################################################
+#############################################################################
##
-#W xmod.g XMODALG example files Zekeriya Arvasi
-#W & Alper Odabas
-#Y Copyright (C) 2014-2024, Zekeriya Arvasi & Alper Odabas,
+#W xmod.g XModAlg example files Z. Arvasi - A. Odabas
##
LoadPackage( "xmodalg" );
-Print("\nXModAlg test file xmod.g (version 16/06/24) :-");
-Print("\ntesting constructions of crossed modules of algebras\n\n");
-
-A := GroupRing( GF(5), DihedralGroup(4) );
-SetName( A, "GF5[d4]" );
-I := AugmentationIdeal( A );
-SetName( I, "I(GF(5)[d4])" );
-CM := XModAlgebraByIdeal( A, I );
-Display( CM );
-Print( "CM has size ", Size2d( CM ), "\n" );
-Print( "CM has dimension ", Dimension( CM ), "\n" );
-f := Boundary( CM );
-Print( "CM has boundary ", f, "\n" );
-Print( "CM has representations ", RepresentationsOfObject( CM ), "\n" );
-props := [ "CanEasilyCompareElements", "CanEasilySortElements",
-"IsDuplicateFree", "IsLeftActedOnByDivisionRing", "IsAdditivelyCommutative",
-"IsPreXModAlgebra", "IsXModAlgebra" ];;
-known := KnownPropertiesOfObject( CM );;
-ForAll( props, p -> (p in known) );
-Print( KnownAttributesOfObject( CM ), "\n" );
-
-e4 := Elements(I)[4];
-J := Ideal( I, [e4] );
-SetName( J, "" );
-Print( "PM is an XModAlgebraByIdeal with ideal generated by ", e4, "\n" );
-PM := XModAlgebraByIdeal( A, J );
-Display( PM );
-ok := IsSubXModAlgebra( CM, PM );
-
-G := SmallGroup( 4, 2 );
-F := GaloisField( 4 );
-R := GroupRing( F, G );
-SetName( R, "GF(4)[k4]" );
-Print( "R is the algebra ", R, "\n" );
-e5 := Elements(R)[5];
-S := Subalgebra( R, [e5] );
-SetName( S, "" );
-Print( "S is the subalgebra of R generated by ", e5, "\n" );
-RS := Cartesian( R, S );;
-SetName( RS, "GF(2^2)[k4] x " );
-## make the following available when AlgebraSAction2 has been fixed
-## act := AlgebraAction( R, RS, S );;
-## bdy := AlgebraHomomorphismByImages( S, R, [e5], [e5] );
-## IsAlgebraAction( act );
-## IsAlgebraHomomorphism( bdy );
-## XM := PreXModAlgebraByBoundaryAndAction( bdy, act );
-## IsXModAlgebra( XM );
-## Display( XM );
-
-A := GroupRing( GF(2), CyclicGroup(4) );
-SetName( A, "GF(2)[c4]" );
-B := AugmentationIdeal( A );
-SetName( B, "I(GF(2)[c4])" );
-X1 := XModAlgebra( A, B );
-C := GroupRing( GF(2), SmallGroup(4,2) );
-SetName( C, "GF(2)[k4]" );
-D := AugmentationIdeal( C );
-SetName( D, "I(GF(2)[k4])" );
-X2 := XModAlgebra( C, D );
-B = D;
-all_f := AllAlgebraHomomorphisms(A,C);;
-all_g := AllAlgebraHomomorphisms(B,D);;
-mor := XModAlgebraMorphism( X1, X2, all_g[1], all_f[2] );
+## make this test independent of algebra.tst
+m2 := [ [0,1,2,3], [0,0,1,2], [0,0,0,1], [0,0,0,0] ];;
+A2 := Algebra( Rationals, [m2] );;
+SetName( A2, "A2" );
+S2 := Subalgebra( A2, [m2^3] );;
+nat2 := NaturalHomomorphismByIdeal( A2, S2 );;
+Q2 := Image( nat2 );;
+SetName( Q2, "Q2" );
+
+## from 2.2.4
+m3 := [ [0,1,0], [0,0,1], [1,0,0] ];;
+A3 := Algebra( Rationals, [m3] );;
+SetName( A3, "A3" );
+c3 := Group( (1,2,3) );;
+Rc3 := GroupRing( Rationals, c3 );;
+SetName( Rc3, "GR(c3)" );
+g3 := GeneratorsOfAlgebra( Rc3 )[2];;
+mg3 := RegularAlgebraMultiplier( Rc3, Rc3, g3 );;
+Amg3 := AlgebraByGenerators( Rationals, [ mg3 ] );;
+homg3 := AlgebraHomomorphismByImages( A3, Amg3, [ m3 ], [ mg3 ] );;
+actg3 := AlgebraActionByHomomorphism( homg3, Rc3 );;
+
+V3 := Rationals^3;;
+M3 := LeftAlgebraModule( A3, \*, V3 );;
+SetName( M3, "M3" );
+act3 := AlgebraActionByModule( A3, M3 );;
+
+## Chapter 4, Section 4.1.2
+F5 := GF(5);;
+id5 := One( F5 );;
+two := Z(5);;
+z5 := Zero( F5 );;
+n0 := [ [id5,z5,z5], [z5,id5,z5], [z5,z5,id5] ];;
+n1 := [ [z5,id5,two^3], [z5,z5,id5], [z5,z5,z5] ];;
+n2 := [ [z5,z5,id5], [z5,z5,z5], [z5,z5,z5] ];;
+An := Algebra( F5, [ n0, n1 ] );;
+SetName( An, "An" );
+Bn := Subalgebra( An, [ n1 ] );;
+SetName( Bn, "Bn" );
+Print( "IsIdeal( An, Bn )? ", IsIdeal( An, Bn ), "\n" );
+actn := AlgebraActionByMultipliers( An, Bn, An );;
+Xn := XModAlgebraByIdeal( An, Bn );
+Display( Xn );
+SetName( Xn, "Xn" );
+
+
+## Section 4.1.3
+Ak4 := GroupRing( GF(5), DihedralGroup(4) );
+Print( "Ak4 has size ", Size( Ak4 ), "\n" );
+SetName( Ak4, "GF5[k4]" );
+IAk4 := AugmentationIdeal( Ak4 );
+Print( "augmentation ideal IAk4 has size ", Size( IAk4 ), "\n" );
+SetName( IAk4, "I(GF5[k4])" );
+XIAk4 := XModAlgebraByIdeal( Ak4, IAk4 );
+Print( "XIAk4 = ", XIAk4, " has size ", Size2d( XIAk4 ),"\n" );
+Display( XIAk4 );
+
+############################
+## Section 4.1.4
+reps := RepresentationsOfObject( XIAk4 );
+Print( "reps = RepresentationsOfObject( XIAk4 )\n" );
+Print( "Set( reps ) = ", Set( reps ), "\n" );
+kpo := KnownPropertiesOfObject( XIAk4 );;
+Print( "kpo = KnownPropertiesOfObject( XIAk4 )\n" );
+Print( "Set( kpo ) = ", Set( kpo ), "\n" );;
+kao := KnownAttributesOfObject( XIAk4 );;
+Print( "kao = KnownAttributesOfObject( XIAk4 )\n" );
+Print( "Set( kao ) = ", Set( kao ), "\n" );;
+
+############################
+## Section 4.1.5
+XAn := XModAlgebraByMultiplierAlgebra( An );
+Print( "XAn = ", XAn, " has action ", XModAlgebraAction( XAn ), "\n" );
+
+############################
+## Section 4.1.6
+Print( "nat2 = ", nat2, "\n" );
+Print( "X2 := XModAlgebraBySurjection( nat2 );\n" );
+X2 := XModAlgebraBySurjection( nat2 );;
+Display( X2 );
+
+############################
+## Section 4.1.7
+bdy3 := AlgebraHomomorphismByImages( Rc3, A3, [ g3 ], [ m3 ] );
+Print( "bdy3 = AlgebraHomomorphismByImages( Rc3, A3, [ g3 ], [ m3 ] ): " );
+Print( bdy3, "\n" );
+X3 := XModAlgebraByBoundaryAndAction( bdy3, actg3 );
+Print( "X3 = XModAlgebraByBoundaryAndAction( bdy3, actg3 ): ", X3, "\n" );
+Display( X3 );
+
+############################
+## Section 4.1.8
+Y3 := XModAlgebraByModule( A3, M3 );
+Print( "\nY3 = XModAlgebraByModule( A3, M3 ): ", Y3, "\n" );
+Print( "XModAlgebraAction( Y3 ) = act3? ",
+ Image( XModAlgebraAction( Y3 ), m3 ) = Image( act3, m3 ), "\n" );
+Display( Y3 );
+
+############################
+## Section 4.1.9
+XY3 := DirectSumOfXModAlgebras( X3, Y3 );
+Print( "XY3 = DirectSumOfXModAlgebras( X3, Y3 ): ", XY3, "\n" );
+
+############################
+## Section 4.1.10
+e4 := Elements( IAk4 )[4];
+Print( "\nelement e4 = ", e4, "\n" );
+Je4 := Ideal( IAk4, [e4] );;
+Print( "Je4 = Ideal( IAk4, [e4] ) has size ", Size( Je4 ), "\n" );
+SetName( Je4, "" );
+Ke4 := Subalgebra( Ak4, [e4] );;
+Print( "Ke4 = Subalgebra( Ak4, [e4] ) has size ", Size( Ke4 ), "\n" );
+Se4 := SubXModAlgebra( XIAk4, Je4, Ke4 );
+Print( "Se4 = SubXModAlgebra( XIAk4, Je4, Ke4 ): ", Se4, "\n" );
+Display( Se4 );
+Print( "IsSubXModAlgebra( XIAk4, Se4 )? ",
+ IsSubXModAlgebra( XIAk4, Se4 ), "\n" );
+
+############################
+## Chapter 4, Section 4.2.1
+c4 := CyclicGroup( 4 );;
+Ac4 := GroupRing( GF(2), c4 );
+SetName( Ac4, "GF2[c4]" );
+IAc4 := AugmentationIdeal( Ac4 );
+SetName( IAc4, "I(GF2[c4])" );
+XIAc4 := XModAlgebra( Ac4, IAc4 );
+Print( "XIAc4 := XModAlgebra( Ac4, IAc4 ): ", XIAc4, "\n" );
+Display( XIAc4 );
+Bk4 := GroupRing( GF(2), SmallGroup( 4, 2 ) );
+SetName( Bk4, "GF2[k4]" );
+IBk4 := AugmentationIdeal( Bk4 );
+SetName( IBk4, "I(GF2[k4])" );
+XIBk4 := XModAlgebra( Bk4, IBk4 );
+Print( "XIBk4 := XModAlgebra( Bk4, IBk4 ): ", XIBk4, "\n" );
+Display( XIBk4 );
+Print( "IAc4 = IBk4? ", IAc4 = IBk4, "\n" );
+homIAIB := AllAlgebraHomomorphisms( IAc4, IBk4 );;
+theta := homIAIB[3];;
+homAB := AllAlgebraHomomorphisms( Ac4, Bk4 );;
+phi := homAB[7];;
+mor := XModAlgebraMorphism( XIAc4, XIBk4, theta, phi );
+Print( "mor = XModAlgebraMorphism( XIAc4, XIBk4, theta, phi ):\n" );
Display( mor );
-X3 := Kernel( mor) ;
-IsTotal( mor );
-IsSingleValued( mor );
-IsXModAlgebra( X3 );
-Size2d( X3 );
-IsSubXModAlgebra( X1, X3 );
+Print( "IsTotal( mor )? ", IsTotal( mor ), "\n" );
+Print( "IsSingleValued( mor )? ", IsSingleValued( mor ), "\n" );
+############################
+## Section 4.2.2
+Xmor := Kernel( mor );
+Print( "Xmor = Kernel( mor ): ", Xmor, "\n" );
+Print( "IsXModAlgebra( Xmor )? ", IsXModAlgebra( Xmor ), "\n" );
+Print( "Xmor has size ", Size2d( Xmor ), "\n" );
+Print( "IsSubXModAlgebra( XIAc4, Xmor )? ",
+ IsSubXModAlgebra( XIAc4, Xmor ), "\n" );
-#############################################################################
+############################
+## Section 4.2.4
+ic4 := One( Ac4 );;
+e1 := ic4*c4.1 + ic4*c4.2;
+Print( "ImageElm( theta, e1 ) = ", ImageElm( theta, e1 ), "\n" );
+e2 := ic4*c4.1;
+Print( "ImageElm( phi, e2 ) = ", ImageElm( phi, e2 ), "\n" );
+Print( "IsInjective( mor )? ", IsInjective( mor ), "\n" );
+Print( "IsSurjective( mor )? ", IsSurjective( mor ), "\n" );
+immor := ImagesSource2DimensionalMapping( mor );;
+Print( "immor = ImagesSource2DimensionalMapping( mor ):\n" );
+Display( immor );
+
+############################################################################
##
-#E xmod.g . . . . . . . . . . . . . . . . . . . . . . . . . . . . ends here
+#E xmod.tst . . . . . . . . . . . . . . . . . . . . . . . . . . . ends here
diff --git a/lib/alg2obj.gd b/lib/alg2obj.gd
index 18defb5..7624158 100644
--- a/lib/alg2obj.gd
+++ b/lib/alg2obj.gd
@@ -84,9 +84,6 @@ DeclareAttribute( "TailMap", IsPreCat1Algebra );
DeclareAttribute( "RangeEmbedding", IsPreCat1Algebra );
DeclareAttribute( "KernelEmbedding", IsPreCat1Algebra );
-DeclareFilter( "IsXModAlgebraConst", IsCat1Algebra );
-DeclareAttribute( "XModAlgebraConst", IsCat1Algebra );
-
DeclareOperation( "SubPreCat1Algebra",
[ IsPreCat1Algebra, IsAlgebra, IsAlgebra ] );
DeclareOperation( "SubCat1Algebra", [ IsCat1Algebra, IsAlgebra, IsAlgebra ] );
diff --git a/lib/alg2obj.gi b/lib/alg2obj.gi
index 96b5c55..9c499a5 100644
--- a/lib/alg2obj.gi
+++ b/lib/alg2obj.gi
@@ -2,7 +2,7 @@
##
#W alg2obj.gi The XMODALG package Zekeriya Arvasi
#W & Alper Odabas
-#Y Copyright (C) 2014-2022, Zekeriya Arvasi & Alper Odabas,
+#Y Copyright (C) 2014-2024, Zekeriya Arvasi & Alper Odabas,
##
CAT1ALG_LIST_MAX_SIZE := 7;
@@ -217,8 +217,6 @@ InstallMethod( ViewObj, "method for a pre-crossed module of algebras", true,
else
Pact := XModAlgebraAction( PM );
if IsLeftModuleGeneralMapping( Pact ) then
-## temporary fix (20/03/18)
-## Print( "[", Source( PM ), " -> ", Range( PM ), "]" );
Print( "[ " );
ViewObj( Source( PM ) );
Print( " -> " );
@@ -226,20 +224,12 @@ InstallMethod( ViewObj, "method for a pre-crossed module of algebras", true,
Print( " ]" );
else
type := AlgebraActionType( Pact );
- # Type 1
if (type = "multiplier") then
Print( "[", Source( PM ), " -> ", Range( PM ), "]" );
fi;
- # Type 2
- if (type = "Type2") then
- Print( "[", Source( PM ),
- " -> MultiplierAlgebra(", Source( PM ), ")]" );
- fi;
- # Type 3
if (type = "surjection") then
Print( "[", Source( PM ), " -> ", Range( PM ), "]" );
fi;
- # Type 4
if (type = "module") then
Print( "[", Source( PM ), " -> ", Range( PM ), "]" );
fi;
@@ -277,46 +267,36 @@ function( PM )
Xrng := Range( PM );
Pact := XModAlgebraAction( PM );
type := AlgebraActionType( Pact );
- if ( type ="Type2" ) then
- if IsXModAlgebra( PM ) then
- Print( "\nCrossed module ", name, " :- \n" );
- else
- Print( "\nPre-crossed module ", name, " :- \n" );
- fi;
- Print( "Details will be written for Type2 \n" );
+ gensrc := GeneratorsOfAlgebra( Xsrc );
+ genrng := GeneratorsOfAlgebra( Xrng );
+ if IsXModAlgebra( PM ) then
+ Print( "Crossed module ", name, " :- \n" );
else
- gensrc := GeneratorsOfAlgebra( Xsrc );
- genrng := GeneratorsOfAlgebra( Xrng );
- if IsXModAlgebra( PM ) then
- Print( "\nCrossed module ", name, " :- \n" );
- else
- Print( "\nPre-crossed module ", name, " :- \n" );
- fi;
- ispar := not HasParent( Xsrc );
- if ( ispar and HasName( Xsrc ) ) then
- Print( ": Source algebra ", Xsrc );
- elif ( ispar and HasName( Parent( Xsrc ) ) ) then
- Print( ": Source algebra has parent ( ", Parent( Xsrc), " ) and" );
- else
- Print( ": Source algebra" );
- fi;
- Print( " has generators:\n" );
- Print( " ", gensrc, "\n" );
- ispar := not HasParent( Xrng );
- if ( ispar and HasName( Xrng ) ) then
- Print( ": Range algebra ", Xrng );
- elif ( ispar and HasName( Parent( Xrng ) ) ) then
- Print( ": Range algebra has parent ( ", Parent( Xrng ), " ) and" );
- else
- Print( ": Range algebra" );
- fi;
- Print( " has generators:\n" );
- Print( " ", genrng, "\n" );
- Print( ": Boundary homomorphism maps source generators to:\n" );
- bdy := Boundary( PM );
- Print( " ", List( gensrc, s -> Image( bdy, s ) ), "\n" );
- Print( "\n" );
+ Print( "Pre-crossed module ", name, " :- \n" );
fi;
+ ispar := not HasParent( Xsrc );
+ if ( ispar and HasName( Xsrc ) ) then
+ Print( ": Source algebra ", Xsrc );
+ elif ( ispar and HasName( Parent( Xsrc ) ) ) then
+ Print( ": Source algebra has parent ( ", Parent( Xsrc), " ) and" );
+ else
+ Print( ": Source algebra" );
+ fi;
+ Print( " has generators: " );
+ Print( gensrc, "\n" );
+ ispar := not HasParent( Xrng );
+ if ( ispar and HasName( Xrng ) ) then
+ Print( ": Range algebra ", Xrng );
+ elif ( ispar and HasName( Parent( Xrng ) ) ) then
+ Print( ": Range algebra has parent ( ", Parent( Xrng ), " ) and" );
+ else
+ Print( ": Range algebra" );
+ fi;
+ Print( " has generators: " );
+ Print( genrng, "\n" );
+ Print( ": Boundary homomorphism maps source generators to:" );
+ bdy := Boundary( PM );
+ Print( List( gensrc, s -> Image( bdy, s ) ), "\n" );
end );
############################################################################
@@ -573,12 +553,7 @@ function( PM, SM )
Info( InfoXModAlg, 3, "IsIdeal failure in IsSubPreXModAlgebra" );
return false;
fi;
- if ( AlgebraActionType(XModAlgebraAction(PM))="Type2" )
- and (AlgebraActionType(XModAlgebraAction(SM))="Type2" ) then
- return true;
- fi;
ok := true;
- ######
if HasGeneratorsOfAlgebra( Ssrc ) then
gensrc := GeneratorsOfAlgebra( Ssrc );
else
@@ -589,7 +564,6 @@ function( PM, SM )
else
genrng := Srng;
fi;
- #####
for s in gensrc do
if ( Image( Boundary( PM ), s ) <> Image( Boundary( SM ), s ) ) then
ok := false;
@@ -674,7 +648,7 @@ end );
###########################################################################
##
-#M SubPreXModAlgebra creates SubPreXMod Of Algebra from Ssrc<=Psrc
+#M SubPreXModAlgebra creates SubPreXMod Of Algebra from Ssrc<=Psrc
##
InstallMethod( SubPreXModAlgebra, "generic method for pre-crossed modules",
true, [ IsPreXModAlgebra, IsAlgebra, IsAlgebra ], 0,
@@ -696,17 +670,11 @@ function( PM, Ssrc, Srng )
Pbdy := Boundary( PM );
Pact := XModAlgebraAction( PM );
type := AlgebraActionType( Pact );
- # Type 1
if ( type = "multiplier" ) then
- Info( InfoXModAlg, 1, "1. multiplier type" );
+ Info( InfoXModAlg, 1, "multiplier type" );
SM := XModAlgebraByIdeal( Srng, Ssrc );
- # Type 2
- elif ( type = "Type2" ) then
- Info( InfoXModAlg, 1, "2. tip icin alt xmod olustur" );
- SM := XModAlgebraByMultiplierAlgebra( Ssrc );
- # Type 3
elif ( type = "surjection") then
- Info( InfoXModAlg, 1, "3. surjection type" );
+ Info( InfoXModAlg, 1, "surjection type" );
genSsrc := GeneratorsOfAlgebra( Ssrc );
B := Range(Pbdy);
list := [];
@@ -717,9 +685,8 @@ function( PM, Ssrc, Srng )
K := Image(f);
surf := AlgebraHomomorphismByImages( Ssrc,K,genSsrc,list );
SM := XModAlgebraBySurjection( surf );
- # Type 4
elif ( type = "module" ) then
- Info( InfoXModAlg, 1, "4. module type" );
+ Info( InfoXModAlg, 1, "module type" );
SM := XModAlgebraByModule( Ssrc, Srng );
else
Print( "Uyumsuz xmod\n" );
@@ -966,39 +933,8 @@ function( C1A )
if HasName( C1A ) then
Print( Name( C1A ), "\n" );
- else
- if IsXModAlgebraConst( TailMap(C1A) ) then
- PM := XModAlgebraConst( TailMap(C1A) );
- Pact := XModAlgebraAction( PM );
- type := AlgebraActionType( Pact );
- # Type 1
- if ( type = "Type1" ) then
- Print( "[", Range(PM)," IX ", Source( PM ),
- " -> ", Range( C1A ), "]" );
- fi;
- # Type 2
- if ( type = "Type2" ) then
- Print( "Mul. Alg.(", Source( PM ),") IX ", Source( PM ),
- " -> Mul. Alg.(", Source( PM ), ")]" );;
- fi;
- # Type 3
- if ( type = "Surjection" ) then
- Print( "[", Range(PM)," IX ", Source( PM ),
- " -> ", Range( C1A ), "]" );
- fi;
- # Type 4
- if ( type = "Type4" ) then
- Print( "[", Range(PM)," IX ", Source( PM ),
- " -> ", Range( C1A ), "]" );
- fi;
- # Type 5
- if ( type = "Multiplier" ) then
- Print( "[", Range(PM)," IX ", Source( PM ),
- " -> ", Range( C1A ), "]" );
- fi;
- else
- Print( "[", Source( C1A ), " -> ", Range( C1A ), "]" );
- fi;
+ else
+ Print( "[", Source( C1A ), " -> ", Range( C1A ), "]" );
fi;
end );
@@ -1047,25 +983,25 @@ function( C1A )
else
Print( "Pre-cat1-algebra ", name, " :- \n" );
fi;
- Print( ": range algebra has generators:\n" );
- Print( " ", genrng, "\n" );
+ Print( ": range algebra has generators:" );
+ Print( genrng, "\n" );
if eqth then
Print( ": tail homomorphism = head homomorphism\n" );
- Print( " they map the source generators to:\n" );
- Print( " ", imt, "\n" );
+ Print( " they map the source generators to: " );
+ Print( imt, "\n" );
else
- Print( ": tail homomorphism maps source generators to:\n" );
- Print( " ", imt, "\n" );
- Print( ": head homomorphism maps source generators to:\n" );
- Print( " ", imh, "\n" );
+ Print( ": tail homomorphism maps source generators to: " );
+ Print( imt, "\n" );
+ Print( ": head homomorphism maps source generators to: " );
+ Print( imh, "\n" );
fi;
- Print( ": range embedding maps range generators to:\n" );
+ Print( ": range embedding maps range generators to: " );
Print( " ", ime, "\n" );
if ( Size( Cker ) = 1 ) then
Print( ": the kernel is trivial.\n" );
else
- Print( ": kernel has generators:\n" );
- Print( " ", genker, "\n" );
+ Print( ": kernel has generators: " );
+ Print( genker, "\n" );
fi;
else
b := Boundary( C1A );
@@ -1078,25 +1014,25 @@ function( C1A )
else
Print( "Pre-cat1-algebra ", name, " :- \n" );
fi;
- Print( ": source algebra has generators:\n" );
- Print( " ", gensrc, "\n" );
- Print( ": range algebra has generators:\n" );
- Print( " ", genrng, "\n" );
- Print( ": tail homomorphism maps source generators to:\n" );
- Print( " ", imt, "\n" );
- Print( ": head homomorphism maps source generators to:\n" );
- Print( " ", imh, "\n" );
- Print( ": range embedding maps range generators to:\n" );
- Print( " ", ime, "\n" );
+ Print( ": source algebra has generators: \n" );
+ Print( gensrc, "\n" );
+ Print( ": range algebra has generators: \n" );
+ Print( genrng, "\n" );
+ Print( ": tail homomorphism maps source generators to: \n" );
+ Print( imt, "\n" );
+ Print( ": head homomorphism maps source generators to: \n" );
+ Print( imh, "\n" );
+ Print( ": range embedding maps range generators to: \n" );
+ Print( ime, "\n" );
if ( Size( Cker ) = 1 ) then
Print( ": the kernel is trivial.\n" );
else
- Print( ": kernel has generators:\n" );
- Print( " ", genker, "\n" );
- Print( ": boundary homomorphism maps generators of kernel to:\n" );
- Print( " ", imb, "\n" );
- Print( ": kernel embedding maps generators of kernel to:\n" );
- Print( " ", imk, "\n" );
+ Print( ": kernel has generators: " );
+ Print( genker, "\n" );
+ Print( ": boundary homomorphism maps generators of kernel to: \n" );
+ Print( imb, "\n" );
+ Print( ": kernel embedding maps generators of kernel to: \n" );
+ Print( imk, "\n" );
fi;
fi;
# if ( IsCat1Algebra( C1A ) and HasXModAlgebraOfCat1Algebra( C1A ) ) then
@@ -1715,13 +1651,8 @@ end );
InstallMethod( PreXModAlgebraOfPreCat1Algebra, true, [ IsPreCat1Algebra ], 0,
function( C1A )
- local usage, A, B, s, t, e, bdy, S, R, vecR, evecR, eR, M, act, PM;
+ local A, B, s, t, e, bdy, S, R, vecR, evecR, eR, M, act, PM;
- usage := "Usage : Boundary of cat1-algebra not surjective";
- if IsXModAlgebraConst( TailMap( C1A ) ) then ## what is this for ???
- PM := XModAlgebraConst( TailMap( C1A ) );
- return PM;
- fi;
A := Source( C1A );
B := Range( C1A );
s := HeadMap( C1A );
@@ -1755,7 +1686,7 @@ function( C1 )
if not IsXModAlgebra( X1 ) then
Info( InfoXModAlg, 1, "X1 is only a pre-xmod-algebra" );
return fail;
- fi;
+ fi;
SetCat1AlgebraOfXModAlgebra( X1, C1 );
return X1;
end );
diff --git a/lib/module.gd b/lib/module.gd
index 841c6aa..b18cf34 100644
--- a/lib/module.gd
+++ b/lib/module.gd
@@ -6,6 +6,7 @@
##
############################ algebra actions #############################
+## section 2.2.4
############################################################################
##
## AlgebraActionByHomomorphism( )
@@ -22,9 +23,9 @@
## attempts to return an action of A on B.
##
## In the example the matrix algebra A3
-## and the group algebra B3 are isomorphic algebras,
+## and the group algebra Rc3 are isomorphic algebras,
## so the resulting action is equivalent to the multiplier
-## action of B3 on itself.
+## action of Rc3 on itself.
##
##
##
@@ -32,14 +33,14 @@
## gap> m3 := [ [0,1,0], [0,0,1], [1,0,0,] ];;
## gap> A3 := Algebra( Rationals, [m3] );;
## gap> SetName( A3, "A3" );;
-## gap> G := Group( (1,2,3) );;
-## gap> B3 := GroupRing( Rationals, G );;
-## gap> SetName( B3, "GR(G)" );
-## gap> g3 := GeneratorsOfAlgebra( B3 )[2];;
-## gap> mg3 := RegularAlgebraMultiplier( B3, B3, g3 );;
-## gap> MB3 := AlgebraByGenerators( Rationals, [ mg3 ] );;
-## gap> hom3 := AlgebraHomomorphismByImages( A3, MB3, [ m3 ], [ mg3 ] );;
-## gap> act3 := AlgebraActionByHomomorphism( hom3, B3 );
+## gap> c3 := Group( (1,2,3) );;
+## gap> Rc3 := GroupRing( Rationals, c3 );;
+## gap> SetName( Rc3, "GR(c3)" );
+## gap> g3 := GeneratorsOfAlgebra( Rc3 )[2];;
+## gap> mg3 := RegularAlgebraMultiplier( Rc3, Rc3, g3 );;
+## gap> Amg3 := AlgebraByGenerators( Rationals, [ mg3 ] );;
+## gap> homg3 := AlgebraHomomorphismByImages( A3, Amg3, [ m3 ], [ mg3 ] );;
+## gap> actg3 := AlgebraActionByHomomorphism( homg3, Rc3 );
## [ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ] ->
## [ [ (1)*(), (1)*(1,2,3), (1)*(1,3,2) ] -> [ (1)*(1,2,3), (1)*(1,3,2), (1)*()
## ] ]
@@ -50,6 +51,7 @@
DeclareOperation( "AlgebraActionByHomomorphism",
[ IsAlgebraHomomorphism, IsAlgebra ] );
+## section 4.1.7
############################################################################
##
## XModAlgebraByBoundaryAndAction( )
@@ -64,22 +66,18 @@ DeclareOperation( "AlgebraActionByHomomorphism",
## When a suitable pair of algebra homomorphisms are available,
## these operations may be used.
## The example uses the algebra action created in section
-## .
+## .
##
##
##
## bdy3 := AlgebraHomomorphismByImages( A3, MB3, [ m3 ], [ mg3 ] );
-## [ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ] ->
-## [ [ (1)*(), (1)*(1,2,3), (1)*(1,3,2) ] -> [ (1)*(1,2,3), (1)*(1,3,2), (1)*()
-## ] ]
-## gap> bdy3 := AlgebraHomomorphismByImages( B3, A3, [ g3 ], [ m3 ] );
+## gap> bdy3 := AlgebraHomomorphismByImages( Rc3, A3, [ g3 ], [ m3 ] );
## [ (1)*(1,2,3) ] -> [ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ]
-## gap> X3 := XModAlgebraByBoundaryAndAction( bdy3, act3 );
-## [ GR(G) -> A3 ]
+## gap> X3 := XModAlgebraByBoundaryAndAction( bdy3, actg3 );
+## [ GR(c3) -> A3 ]
## gap> Display( X3 );
-## Crossed module [GR(G) -> A3] :-
-## : Source algebra GR(G) has generators:
+## Crossed module [GR(c3) -> A3] :-
+## : Source algebra GR(c3) has generators:
## [ (1)*(), (1)*(1,2,3) ]
## : Range algebra A3 has generators:
## [ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ]
@@ -98,6 +96,7 @@ DeclareOperation( "PreXModAlgebraByBoundaryAndAction",
############################ module operations ###########################
+## section 2.3
############################################################################
##
## <#GAPDoc Label="AlgebraModules">
@@ -108,28 +107,25 @@ DeclareOperation( "PreXModAlgebraByBoundaryAndAction",
##
## Recall the construction of algebra modules
## from Chapter 62 of the &GAP; reference manual.
-## In the example, the vector space V becomes an algebra module
-## M with a left action by A.
-## Conversion between vectors in V and those in M is achieved
+## In the example, the vector space V3 becomes an algebra module
+## M3 with a left action by A3.
+## Conversion between vectors in V3 and those in M3 is achieved
## using the operations ObjByExtRep and ExtRepOfObj.
## These vectors are indistinguishable when printed.
##
##
## m3 := [ [0,1,0], [0,0,1], [1,0,0] ];;
-## gap> A4 := Algebra( Rationals, [m3] );;
-## gap> SetName( A4, "A4" );;
-## gap> V4 := Rationals^3;;
-## gap> M4 := LeftAlgebraModule( A4, \*, V4 );;
-## gap> SetName( M4, "M4" );
-## gap> famM4 := ElementsFamily( FamilyObj( M4 ) );;
-## gap> v4 := [3,4,5];;
-## gap> v4 := ObjByExtRep( famM4, v4 );
+## gap> V3 := Rationals^3;;
+## gap> M3 := LeftAlgebraModule( A3, \*, V3 );;
+## gap> SetName( M3, "M3" );
+## gap> famM3 := ElementsFamily( FamilyObj( M3 ) );;
+## gap> v3 := [3,4,5];;
+## gap> v3 := ObjByExtRep( famM3, v3 );
## [ 3, 4, 5 ]
-## gap> m3*v4;
+## gap> m3*v3;
## [ 4, 5, 3 ]
-## gap> genM4 := GeneratorsOfLeftModule( M4 );;
-## gap> u4 := 6*genM4[1] + 7*genM4[2] + 8*genM4[3];
+## gap> genM3 := GeneratorsOfLeftModule( M3 );;
+## gap> u4 := 6*genM3[1] + 7*genM3[2] + 8*genM3[3];
## [ 6, 7, 8 ]
## gap> u4 := ExtRepOfObj( u4 );
## [ 6, 7, 8 ]
@@ -138,6 +134,7 @@ DeclareOperation( "PreXModAlgebraByBoundaryAndAction",
## <#/GAPDoc>
##
+## section 2.3.1
############################################################################
##
## ModuleAsAlgebra( )
@@ -166,15 +163,15 @@ DeclareOperation( "PreXModAlgebraByBoundaryAndAction",
##
##
## D4 := LeftActingDomain( M4 );;
-## gap> T4 := EmptySCTable( Dimension(M4), Zero(D4), "symmetric" );;
-## gap> B4a := AlgebraByStructureConstants( D4, T4 );
+## gap> D3 := LeftActingDomain( M3 );;
+## gap> T3 := EmptySCTable( Dimension(M3), Zero(D3), "symmetric" );;
+## gap> B3a := AlgebraByStructureConstants( D3, T3 );
##
-## gap> GeneratorsOfAlgebra( B4a );
+## gap> GeneratorsOfAlgebra( B3a );
## [ v.1, v.2, v.3 ]
-## gap> B4 := ModuleAsAlgebra( M4 );
-## A(M4)
-## gap> GeneratorsOfAlgebra( B4 );
+## gap> B3 := ModuleAsAlgebra( M3 );
+## A(M3)
+## gap> GeneratorsOfAlgebra( B3 );
## [ [[ 1, 0, 0 ]], [[ 0, 1, 0 ]], [[ 0, 0, 1 ]] ]
## ]]>
##
@@ -182,7 +179,7 @@ DeclareOperation( "PreXModAlgebraByBoundaryAndAction",
##
DeclareAttribute( "ModuleAsAlgebra", IsLeftModule );
-
+## section 2.3.2
############################################################################
##
## IsModuleAsAlgebra( )
@@ -197,9 +194,9 @@ DeclareAttribute( "ModuleAsAlgebra", IsLeftModule );
##
##
## IsModuleAsAlgebra( B4 );
+## gap> IsModuleAsAlgebra( B3 );
## true
-## gap> IsModuleAsAlgebra( A4 );
+## gap> IsModuleAsAlgebra( A3 );
## false
## ]]>
##
@@ -207,6 +204,7 @@ DeclareAttribute( "ModuleAsAlgebra", IsLeftModule );
##
DeclareProperty( "IsModuleAsAlgebra", IsAlgebra );
+## section 2.3.3
############################################################################
##
## ModuleToAlgebraIsomorphism( )
@@ -227,24 +225,23 @@ DeclareProperty( "IsModuleAsAlgebra", IsAlgebra );
##
##
## KnownAttributesOfObject( B4 );
-## [ "Name", "ZeroImmutable", "LeftActingDomain", "Dimension",
-## "GeneratorsOfLeftOperatorAdditiveGroup", "GeneratorsOfLeftOperatorRing",
+## gap> KnownAttributesOfObject( B3 );
+## [ "Name", "ZeroImmutable", "LeftActingDomain", "Dimension",
+## "GeneratorsOfLeftOperatorAdditiveGroup", "GeneratorsOfLeftOperatorRing",
## "ModuleToAlgebraIsomorphism", "AlgebraToModuleIsomorphism" ]
-## gap> M2B4 := ModuleToAlgebraIsomorphism( B4 );
-## [ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ] -> [ [[ 1, 0, 0 ]], [[ 0, \
-## 1, 0 ]],
+## gap> M2B3 := ModuleToAlgebraIsomorphism( B3 );
+## [ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ] -> [ [[ 1, 0, 0 ]], [[ 0, 1, 0 ]],
## [[ 0, 0, 1 ]] ]
-## gap> Source( M2B4 ) = M4;
+## gap> Source( M2B3 ) = M3;
## false
-## gap> Source( M2B4 ) = V4;
+## gap> Source( M2B3 ) = V3;
## true
-## gap> B2M4 := AlgebraToModuleIsomorphism( B4 );
+## gap> B2M3 := AlgebraToModuleIsomorphism( B3 );
## [ [[ 1, 0, 0 ]], [[ 0, 1, 0 ]], [[ 0, 0, 1 ]] ] ->
## [ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ]
-## gap> Range( B2M4 ) = M4;
+## gap> Range( B2M3 ) = M3;
## false
-## gap> Range( B2M4 ) = V4;
+## gap> Range( B2M3 ) = V3;
## true
## ]]>
##
@@ -253,7 +250,7 @@ DeclareProperty( "IsModuleAsAlgebra", IsAlgebra );
DeclareAttribute( "ModuleToAlgebraIsomorphism", IsAlgebra );
DeclareAttribute( "AlgebraToModuleIsomorphism", IsAlgebra );
-
+## section 2.3.4
############################################################################
##
## AlgebraActionByModule( )
@@ -269,17 +266,17 @@ DeclareAttribute( "AlgebraToModuleIsomorphism", IsAlgebra );
##
##
## act4 := AlgebraActionByModule( A4, M4 );
+## gap> act3 := AlgebraActionByModule( A3, M3 );
## [ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ] ->
## [ [ [[ 1, 0, 0 ]], [[ 0, 1, 0 ]], [[ 0, 0, 1 ]] ] ->
## [ [[ 0, 0, 1 ]], [[ 1, 0, 0 ]], [[ 0, 1, 0 ]] ] ]
-## gap> a4 := 2*m3 + 3*m3^2;
+## gap> a3 := 2*m3 + 3*m3^2;
## [ [ 0, 2, 3 ], [ 3, 0, 2 ], [ 2, 3, 0 ] ]
-## gap> Image( act4, a4 );
-## Basis( A(M4), [ [[ 1, 0, 0 ]], [[ 0, 1, 0 ]], [[ 0, 0, 1 ]] ] ) ->
+## gap> Image( act3, a3 );
+## Basis( A(M3), [ [[ 1, 0, 0 ]], [[ 0, 1, 0 ]], [[ 0, 0, 1 ]] ] ) ->
## [ (3)*[[ 0, 1, 0 ]]+(2)*[[ 0, 0, 1 ]], (2)*[[ 1, 0, 0 ]]+(3)*[[ 0, 0, 1 ]],
## (3)*[[ 1, 0, 0 ]]+(2)*[[ 0, 1, 0 ]] ]
-## gap> Image( act4 );
+## gap> Image( act3 );
##
## ]]>
##
@@ -287,7 +284,7 @@ DeclareAttribute( "AlgebraToModuleIsomorphism", IsAlgebra );
##
DeclareOperation( "AlgebraActionByModule", [ IsAlgebra, IsLeftModule ] );
-
+## section 4.1.8
############################################################################
##
## XModAlgebraByModule( )
@@ -312,18 +309,18 @@ DeclareOperation( "AlgebraActionByModule", [ IsAlgebra, IsLeftModule ] );
##
##
## X4 := XModAlgebraByModule( A4, M4 );
-## [ A(M4) -> A4 ]
-## gap> Display( X4 );
-## Crossed module [A(M4)->A4] :-
-## : Source algebra A(M4) has generators:
-## [ [[ 1, 0, 0 ]], [[ 0, 1, 0 ]], [[ 0, 0, 1 ]] ]
-## : Range algebra A4 has generators:
-## [4[ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ],
-## [ [ 1, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ],
-## [ [ 0, 0, 1 ], [ 1, 0, 0 ], [ 0, 1, 0 ] ] ]
+## gap> Y3 := XModAlgebraByModule( A3, M3 );
+## [ A(M3) -> A3 ]
+## gap> Image( XModAlgebraAction( Y3 ), m3 ) = Image( act3, m3 );
+## true
+## gap> Display( Y3 );
+## Crossed module [A(M3) -> A3] :-
+## : Source algebra A(M3) has generators: [ [[ 1, 0, 0 ]], [[ 0, 1, 0 ]],
+## [[ 0, 0, 1 ]] ]
+## : Range algebra A3 has generators:
+## [ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ]
## : Boundary homomorphism maps source generators to:
-## [ [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ],
+## [ [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ],
## [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ],
## [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ] ]
## ]]>
@@ -332,35 +329,31 @@ DeclareOperation( "AlgebraActionByModule", [ IsAlgebra, IsLeftModule ] );
##
DeclareOperation( "XModAlgebraByModule", [ IsAlgebra, IsLeftModule ] );
+## addition to Cat1AlgebraOfXModAlgebra, section 5.1.1
############################################################################
##
-## addition to Cat1AlgebraOfXModAlgebra
-##
## <#GAPDoc Label="Cat1AlgebraOfXModAlgebra">
##
-## As a second example, we convert the crossed module X3
-## constructed in
+## As a second example, we convert the crossed module X4
+## constructed in section
##
##
## C6 := Cat1AlgebraOfXModAlgebra( X6 );
+## gap> C4 := Cat1AlgebraOfXModAlgebra( X4 );
## [A4 |X A(M4)=>A4]
-## gap> Display( C6 );
-## Cat1-algebra [A4 |X A(M4)=>A4] :-
-## : range algebra has generators:
-## [ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ]
+## gap> Display( C4 );
+## Cat1-algebra [A4 |X A(M4) => A4] :-
+## : range algebra has generators:[ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ]
## : tail homomorphism = head homomorphism
-## they map the source generators to:
-## [ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ],
+## they map the source generators to:
+## [ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ],
## [ [ 0, 0, 1 ], [ 1, 0, 0 ], [ 0, 1, 0 ] ],
## [ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ],
## [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ],
## [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ],
## [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ] ]
-## : range embedding maps range generators to:
-## [ v.1 ]
-## : kernel has generators:
-## [ v.4, v.5, v.6 ]
+## : range embedding maps range generators to: [ v.1 ]
+## : kernel has generators: [ v.4, v.5, v.6 ]
## ]]>
##
## <#/GAPDoc>
@@ -368,6 +361,7 @@ DeclareOperation( "XModAlgebraByModule", [ IsAlgebra, IsLeftModule ] );
############################ direct sum operations #######################
+## section 2.4.1
#############################################################################
##
#A DirectSumOfAlgebrasInfo( )
@@ -384,17 +378,18 @@ DeclareOperation( "XModAlgebraByModule", [ IsAlgebra, IsLeftModule ] );
##
##
## A3B3 := DirectSumOfAlgebras( A3, B3 );;
-## gap> SetName( A3B3, Concatenation( Name(A3), "(+)", Name(B3) ) );
-## gap> SetDirectSumOfAlgebrasInfo( A3B3,
-## > rec( algebras := [A3,B3], first := [1,Dimension(A3)+1],
-## > embeddings := [ ], projections := [ ] ) );
+## gap> A3Rc3 := DirectSumOfAlgebras( A3, Rc3 );;
+## gap> SetName( A3Rc3, Concatenation( Name(A3), "(+)", Name(Rc3) ) );
+## gap> SetDirectSumOfAlgebrasInfo( A3Rc3,
+## > rec( algebras := [A3,Rc3], first := [1,Dimension(A3)+1],
+## > embeddings := [ ], projections := [ ] ) );;
## ]]>
##
## <#/GAPDoc>
##
DeclareAttribute( "DirectSumOfAlgebrasInfo", IsAlgebra, "mutable" );
+## section 2.4.2
############################################################################
##
## Embedding( )
@@ -414,18 +409,19 @@ DeclareAttribute( "DirectSumOfAlgebrasInfo", IsAlgebra, "mutable" );
##
##
## Embedding( A3B3, 1 );
+## gap> Embedding( A3Rc3, 1 );
## Basis( A3, [ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ],
## [ [ 0, 0, 1 ], [ 1, 0, 0 ], [ 0, 1, 0 ] ],
## [ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ] ] ) -> [ v.1, v.2, v.3 ]
-## gap> Projection( A3B3, 2 );
-## CanonicalBasis( A3(+)GR(G) ) -> [ of ..., of ...,
+## gap> Projection( A3Rc3, 2 );
+## CanonicalBasis( A3(+)GR(c3) ) -> [ of ..., of ...,
## of ..., (1)*(), (1)*(1,2,3), (1)*(1,3,2) ]
## ]]>
##
## <#/GAPDoc>
##
+## section 2.4.3
############################################################################
##
## DirectSumOfAlgebraHomomorphisms( )
@@ -441,15 +437,15 @@ DeclareAttribute( "DirectSumOfAlgebrasInfo", IsAlgebra, "mutable" );
## and B = B_1 \oplus B_2 may be used to construct
## \theta = \theta_1 \oplus \theta_2 : B \to A
## where \theta(b_1,b_2) = (\theta_1b_1,\theta_2b_2).
-## The example uses the homomorphism hom3 used in
+## The example uses the homomorphism homg3 used in
## Section
##
##
##
##
## hom := DirectSumOfAlgebraHomomorphisms( hom3, hom3 );;
-## gap> Print( hom, "\n" );
+## gap> hom33 := DirectSumOfAlgebraHomomorphisms( homg3, homg3 );;
+## gap> Print( hom33, "\n" );
## AlgebraHomomorphismByImages( A3(+)A3, Algebra( Rationals,
## [ v.1, v.2, v.3, v.4, v.5, v.6 ] ),
## [ [ [ 0, 1, 0, 0, 0, 0 ], [ 0, 0, 1, 0, 0, 0 ], [ 1, 0, 0, 0, 0, 0 ],
@@ -464,6 +460,7 @@ DeclareAttribute( "DirectSumOfAlgebrasInfo", IsAlgebra, "mutable" );
DeclareOperation( "DirectSumOfAlgebraHomomorphisms",
[ IsAlgebraHomomorphism, IsAlgebraHomomorphism ] );
+## section 2.4.4
############################################################################
##
## AlgebraActionOnDirectSum( )
@@ -489,7 +486,7 @@ DeclareOperation( "DirectSumOfAlgebraHomomorphisms",
##
## actMA3 := AlgebraActionByMultipliers( A3, A3, A3 );;
-## gap> act5 := AlgebraActionOnDirectSum( actMA3, act3 );
+## gap> act4 := AlgebraActionOnDirectSum( actMA3, actg3 );
## [ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ],
## [ [ 0, 0, 1 ], [ 1, 0, 0 ], [ 0, 1, 0 ] ],
## [ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ] ] ->
@@ -503,6 +500,7 @@ DeclareOperation( "DirectSumOfAlgebraHomomorphisms",
DeclareOperation( "AlgebraActionOnDirectSum",
[ IsAlgebraAction, IsAlgebraAction ] );
+## section 2.4.5
############################################################################
##
## DirectSumOfAlgebraActions( )
@@ -525,22 +523,22 @@ DeclareOperation( "AlgebraActionOnDirectSum",
##
##
## act6 := DirectSumOfAlgebraActions( act3, act4 );;
-## gap> A6 := Source( act6 );
-## A3(+)A4
-## gap> B6 := AlgebraActedOn( act6 );
-## GR(G)(+)A(M4)
-## gap> em3 := ImageElm( Embedding( A6, 1 ), m3 );
+## gap> act5 := DirectSumOfAlgebraActions( actg3, act3 );;
+## gap> A5 := Source( act5 );
+## A3(+)A3
+## gap> B5 := AlgebraActedOn( act5 );
+## GR(c3)(+)A(M3)
+## gap> em3 := ImageElm( Embedding( A5, 1 ), m3 );
## [ [ 0, 1, 0, 0, 0, 0 ], [ 0, 0, 1, 0, 0, 0 ], [ 1, 0, 0, 0, 0, 0 ],
## [ 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ] ]
-## gap> ImageElm( act6, em3 );
-## Basis( GR(G)(+)A(M4), [ v.1, v.2, v.3, v.4, v.5, v.6 ] ) ->
+## gap> ImageElm( act5, em3 );
+## Basis( GR(c3)(+)A(M3), [ v.1, v.2, v.3, v.4, v.5, v.6 ] ) ->
## [ v.2, v.3, v.1, 0*v.1, 0*v.1, 0*v.1 ]
-## gap> ea4 := ImageElm( Embedding( A6, 2 ), a4 );
+## gap> ea3 := ImageElm( Embedding( A5, 2 ), a3 );
## [ [ 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ],
## [ 0, 0, 0, 0, 2, 3 ], [ 0, 0, 0, 3, 0, 2 ], [ 0, 0, 0, 2, 3, 0 ] ]
-## gap> ImageElm( act6, ea4 );
-## Basis( GR(G)(+)A(M4), [ v.1, v.2, v.3, v.4, v.5, v.6 ] ) ->
+### gap> ImageElm( act5, ea3 );
+## Basis( GR(c3)(+)A(M3), [ v.1, v.2, v.3, v.4, v.5, v.6 ] ) ->
## [ 0*v.1, 0*v.1, 0*v.1, (3)*v.5+(2)*v.6, (2)*v.4+(3)*v.6, (3)*v.4+(2)*v.5 ]
## ]]>
##
@@ -549,6 +547,7 @@ DeclareOperation( "AlgebraActionOnDirectSum",
DeclareOperation( "DirectSumOfAlgebraActions",
[ IsAlgebraAction, IsAlgebraAction ] );
+## section 4.1.9
############################################################################
##
## DirectSumOfXModAlgebras( )
@@ -565,12 +564,16 @@ DeclareOperation( "DirectSumOfAlgebraActions",
## we can form the direct sums of their boundaries and actions
## to form a direct sum X_1 \oplus X_2 of crossed modules.
##
+## In the example we combine crossed modules X3 from section
+## and X4
+## from section .
+##
##
##
##
## DirectSumOfXModAlgebras( X3, X4 );
-## [ GR(G)(+)A(M4) -> A3(+)A4 ]
+## gap> XY3 := DirectSumOfXModAlgebras( X3, Y3 );
+## [ GR(c3)(+)A(M3) -> A3(+)A3 ]
## ]]>
##
## <#/GAPDoc>
diff --git a/makedoc.g b/makedoc.g
index 12a78ee..96e2ab9 100644
--- a/makedoc.g
+++ b/makedoc.g
@@ -19,9 +19,8 @@ AutoDoc( rec(
"xmod.xml", "convert.xml" ],
bib := "bib.xml",
entities := rec(
- AutoDoc := "AutoDoc"
+ AutoDoc := "AutoDoc",
+ XMod := "XMod"
)
)
));
-
-QUIT;
diff --git a/tst/algebra.tst b/tst/algebra.tst
index 4363928..a3a9278 100644
--- a/tst/algebra.tst
+++ b/tst/algebra.tst
@@ -2,14 +2,12 @@
##
#W algebra.tst XModAlg test files Z. Arvasi - A. Odabas
##
+#@local level,A1,BA1,v,I1,v1,m1,id1,L1,h1,u1,S1,MS1,BMS1,MA1,BMA1,hom1,act1,act12,theta1,m2,A2,S2,nat2,Q2,act2,I2,BI2,b1,b2,P1,P2,A2c6,R2c3,homAR,homRA,bijAA,ideAA
+
gap> START_TEST( "XModAlg package: algebra.tst" );
-gap> saved_infolevel_xmodalg := InfoLevel( InfoXModAlg );;
+gap> level := InfoLevel( InfoXModAlg );;
gap> SetInfoLevel( InfoXModAlg, 0 );
-
-gap> SetInfoLevel( InfoXModAlg, saved_infolevel_xmodalg );;
-gap> STOP_TEST( "algebra.tst", 10000 );
-
## Section 2.1.1
gap> A1 := GroupRing( GF(5), Group( (1,2,3,4,5,6) ) );;
gap> SetName( A1, "A1" );
@@ -29,8 +27,8 @@ gap> m1 := RegularAlgebraMultiplier( A1, I1, v1 );
## Section 2.1.2
gap> IsAlgebraMultiplier( m1 );
true
-gap> one := One( A1 );;
-gap> L1 := List( BA1, v -> one );;
+gap> id1 := One( A1 );;
+gap> L1 := List( BA1, v -> id1 );;
gap> h1 := LeftModuleHomomorphismByImages( A1, A1, BA1, L1 );
[ (Z(5)^0)*(), (Z(5)^0)*(1,2,3,4,5,6), (Z(5)^0)*(1,3,5)(2,4,6),
(Z(5)^0)*(1,4)(2,5)(3,6), (Z(5)^0)*(1,5,3)(2,6,4), (Z(5)^0)*(1,6,5,4,3,2)
@@ -110,9 +108,9 @@ LeftModuleHomomorphismByMatrix( Basis( A2,
[ [ 0, 0, 1, 4 ], [ 0, 0, 0, 1 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ] ] ),
[ [ 0, 0 ], [ 1, 0 ], [ 0, 1 ] ], CanonicalBasis( Q2 ) )
gap> act2 := AlgebraActionBySurjection( nat2 );;
-gap> C2 := Image( act2 );;
-gap> BC2 := BasisVectors( Basis( C2 ) );;
-gap> b1 := BC2[1];; b2 := BC2[2];;
+gap> I2 := Image( act2 );;
+gap> BI2 := BasisVectors( Basis( I2 ) );;
+gap> b1 := BI2[1];; b2 := BI2[2];;
gap> [ Image(b1,m2)=m2^2, Image(b1,m2^2)=m2^3, Image(b1,m2^3)=Zero(A2) ];
[ true, true, true ]
gap> [ Image(b2,m2)=m2^3, b2=b1^2 ];
@@ -187,6 +185,8 @@ gap> ideAA := AllIdempotentAlgebraHomomorphisms( A2c6, A2c6 );;
gap> Length( ideAA );
14
+gap> SetInfoLevel( InfoXModAlg, level );;
+gap> STOP_TEST( "algebra.tst", 10000 );
############################################################################
##
diff --git a/tst/cat1.tst b/tst/cat1.tst
index a97e84e..534f559 100644
--- a/tst/cat1.tst
+++ b/tst/cat1.tst
@@ -2,8 +2,10 @@
##
#W cat1.tst XModAlg test files Z. Arvasi - A. Odabas
##
+#@local level,Ak4,IAk4,XIAk4,m,A1,A3,nat13,X13,G,F,R,e5,S,act,bdy,XM,A2c6,R2c3,homAR,homRA,t4,e4,C4,C,C0,C6,A6,B6,eA6,eB6,SA6,SB6,SC6,C1,C2,SC1,SC2,RC1,RC2,gSC1,gSC2,gRC1,gRC2,imS,homS,imR,homR,m12,im12
+
gap> START_TEST( "XModAlg package: cat1.tst" );
-gap> saved_infolevel_xmodalg := InfoLevel( InfoXModAlg );;
+gap> level := InfoLevel( InfoXModAlg );;
gap> SetInfoLevel( InfoXModAlg, 0 );
## make cat1.tst independent of xmod.tst
@@ -16,8 +18,8 @@ gap> XIAk4 := XModAlgebraByIdeal( Ak4, IAk4 );;
gap> m := [ [0,1,2,3], [0,0,1,2], [0,0,0,1], [0,0,0,0] ];;
gap> A1 := Algebra( Rationals, [m] );;
gap> A3 := Subalgebra( A1, [m^3] );;
-gap> nat3 := NaturalHomomorphismByIdeal( A1, A3 );;
-gap> X3 := XModAlgebraBySurjection( nat3 );;
+gap> nat13 := NaturalHomomorphismByIdeal( A1, A3 );;
+gap> X13 := XModAlgebraBySurjection( nat13 );;
gap> G := SmallGroup( 4, 2 );;
gap> F := GaloisField( 4 );;
@@ -144,26 +146,25 @@ Cat1-algebra [GF(2^2)_c6=>..] :-
############################
## Chapter 3, Section 3.1.4
-##
-gap> C3 := Cat1AlgebraSelect( 2, 6, 2, 4 );;
-gap> A3 := Source( C3 );
+gap> C6 := Cat1AlgebraSelect( 2, 6, 2, 4 );;
+gap> A6 := Source( C6 );
GF(2)_c6
-gap> B3 := Range( C3 );
+gap> B6 := Range( C6 );
-gap> eA3 := Elements( A3 );;
-gap> eB3 := Elements( B3 );;
-gap> AA3 := Subalgebra( A3, [ eA3[1], eA3[2], eA3[3] ] );
+gap> eA6 := Elements( A6 );;
+gap> eB6 := Elements( B6 );;
+gap> SA6 := Subalgebra( A6, [ eA6[1], eA6[2], eA6[3] ] );
-gap> [ Size(A3), Size(AA3) ];
+gap> [ Size(A6), Size(SA6) ];
[ 64, 4 ]
-gap> BB3 := Subalgebra( B3, [ eB3[1], eB3[2] ] );
+gap> SB6 := Subalgebra( B6, [ eB6[1], eB6[2] ] );
-gap> [ Size(B3), Size(BB3) ];
+gap> [ Size(B6), Size(SB6) ];
[ 8, 2 ]
-gap> CC3 := SubCat1Algebra( C3, AA3, BB3 );
+gap> SC6 := SubCat1Algebra( C6, SA6, SB6 );
[Algebra( GF(2), [ of ..., (Z(2)^0)*(), (Z(2)^0)*()+(Z(2)^0)*(4,5)
] ) -> Algebra( GF(2), [ of ..., (Z(2)^0)*() ] )]
-gap> Display( CC3 );
+gap> Display( SC6 );
Cat1-algebra [..=>..] :-
: source algebra has generators:
[ of ..., (Z(2)^0)*(), (Z(2)^0)*()+(Z(2)^0)*(4,5) ]
@@ -181,7 +182,7 @@ Cat1-algebra [..=>..] :-
[ of ..., of ... ]
: kernel embedding maps generators of kernel to:
[ of ..., (Z(2)^0)*()+(Z(2)^0)*(4,5) ]
-gap> IsSubCat1Algebra( C3, CC3 );
+gap> IsSubCat1Algebra( C6, SC6 );
true
############################
@@ -223,30 +224,30 @@ Cat1-algebra [GF(2)_c2=>GF(2)_triv] :-
[ (Z(2)^0)*()+(Z(2)^0)*(1,2) ]
gap> C1 = C2;
false
-gap> R1 := Source( C1 );;
-gap> R2 := Source( C2 );
+gap> SC1 := Source( C1 );;
+gap> SC2 := Source( C2 );
GF(2)_c2
-gap> S1 := Range( C1 );;
-gap> S2 := Range( C2 );;
-gap> gR1 := GeneratorsOfAlgebra( R1 );
+gap> RC1 := Range( C1 );;
+gap> RC2 := Range( C2 );;
+gap> gSC1 := GeneratorsOfAlgebra( SC1 );
[ (Z(2)^0)*(), (Z(2)^0)*() ]
-gap> gR2 := GeneratorsOfAlgebra( R2 );
+gap> gSC2 := GeneratorsOfAlgebra( SC2 );
[ (Z(2)^0)*(), (Z(2)^0)*(1,2) ]
-gap> gS1 := GeneratorsOfAlgebra( S1 );
+gap> gRC1 := GeneratorsOfAlgebra( RC1 );
[ (Z(2)^0)*(), (Z(2)^0)*() ]
-gap> gS2 := GeneratorsOfAlgebra( S2 );
+gap> gRC2 := GeneratorsOfAlgebra( RC2 );
[ (Z(2)^0)*(), (Z(2)^0)*() ]
-gap> im1 := [ gR2[1], gR2[1] ];
+gap> imS := [ gSC2[1], gSC2[1] ];
[ (Z(2)^0)*(), (Z(2)^0)*() ]
-gap> f1 := AlgebraHomomorphismByImages( R1, R2, gR1, im1 );
+gap> homS := AlgebraHomomorphismByImages( SC1, SC2, gSC1, imS );
[ (Z(2)^0)*(), (Z(2)^0)*() ] -> [ (Z(2)^0)*(), (Z(2)^0)*() ]
-gap> im2 := [ gS2[1], gS2[1] ];
+gap> imR := [ gRC2[1], gRC2[1] ];
[ (Z(2)^0)*(), (Z(2)^0)*() ]
-gap> f2 := AlgebraHomomorphismByImages( S1, S2, gS1, im2 );
+gap> homR := AlgebraHomomorphismByImages( RC1, RC2, gRC1, imR );
[ (Z(2)^0)*(), (Z(2)^0)*() ] -> [ (Z(2)^0)*(), (Z(2)^0)*() ]
-gap> m := Cat1AlgebraMorphism( C1, C2, f1, f2 );
+gap> m12 := Cat1AlgebraMorphism( C1, C2, homS, homR );
[[GF(2)_triv=>GF(2)_triv] => [GF(2)_c2=>GF(2)_triv]]
-gap> Display( m );
+gap> Display( m12 );
Morphism of cat1-algebras :-
: Source = [GF(2)_triv=>GF(2)_triv] with generating sets:
@@ -260,19 +261,19 @@ Morphism of cat1-algebras :-
: Range Homomorphism maps range generators to:
[ (Z(2)^0)*(), (Z(2)^0)*() ]
-## gap> Image2dAlgMapping( m );
+## gap> Image2dAlgMapping( m12 );
## [GF(3)_c2^3=>GF(3)_c2^3]
-gap> IsSurjective( m );
+gap> IsSurjective( m12 );
false
-gap> IsInjective( m );
+gap> IsInjective( m12 );
true
-gap> IsBijective( m );
+gap> IsBijective( m12 );
false
###########################
## Chapter 3, Section 3.2.3
-gap> imm := ImagesSource2DimensionalMapping( m );;
-gap> Display( imm );
+gap> im12 := ImagesSource2DimensionalMapping( m12 );;
+gap> Display( im12 );
Cat1-algebra [..=>..] :-
: source algebra has generators:
[ (Z(2)^0)*(), (Z(2)^0)*() ]
@@ -285,7 +286,8 @@ Cat1-algebra [..=>..] :-
: range embedding maps range generators to:
[ (Z(2)^0)*() ]
: the kernel is trivial.
-gap> SetInfoLevel( InfoXModAlg, saved_infolevel_xmodalg );;
+
+gap> SetInfoLevel( InfoXModAlg, level );;
gap> STOP_TEST( "cat1.tst", 10000 );
############################################################################
diff --git a/tst/convert.tst b/tst/convert.tst
index 18aed73..93ccde4 100644
--- a/tst/convert.tst
+++ b/tst/convert.tst
@@ -2,64 +2,58 @@
##
#W convert.tst XModAlg test files Z. Arvasi - A. Odabas
##
+
gap> START_TEST( "XModAlg package: convert.tst" );
-gap> saved_infolevel_xmodalg := InfoLevel( InfoXModAlg );;
+gap> level := InfoLevel( InfoXModAlg );;
gap> SetInfoLevel( InfoXModAlg, 0 );
gap> ## make convert.tst independent of cat1.tst and xmod.tst
-gap> Ak4 := GroupRing( GF(5), DihedralGroup(4) );;
-gap> SetName( Ak4, "GF5[k4]" );
-gap> IAk4 := AugmentationIdeal( Ak4 );;
-gap> SetName( IAk4, "I(GF5[k4])" );
-gap> XIAk4 := XModAlgebraByIdeal( Ak4, IAk4 );;
-gap> G := SmallGroup( 4, 2 );;
-gap> F := GaloisField( 4 );;
-gap> R := GroupRing( F, G );;
-gap> SetName( R, "GF(2^2)[k4]" );
-gap> e5 := Elements(R)[5];;
-gap> S := Subalgebra( R, [e5] );;
-gap> SetName( S, "" );
-gap> act := AlgebraActionByMultipliers( R, S, R );;
-gap> bdy := AlgebraHomomorphismByImages( S, R, [e5], [e5] );;
-gap> IsAlgebraAction( act );;
-gap> IsAlgebraHomomorphism( bdy );;
-gap> XM := PreXModAlgebraByBoundaryAndAction( bdy, act );;
-gap> IsXModAlgebra( XM );;
+## from 2.2.4
+gap> m3 := [ [0,1,0], [0,0,1], [1,0,0] ];;
+gap> A3 := Algebra( Rationals, [m3] );;
+gap> SetName( A3, "A3" );
+gap> c3 := Group( (1,2,3) );;
+gap> Rc3 := GroupRing( Rationals, c3 );;
+gap> SetName( Rc3, "GR(c3)" );
+gap> g3 := GeneratorsOfAlgebra( Rc3 )[2];;
+gap> mg3 := RegularAlgebraMultiplier( Rc3, Rc3, g3 );;
+gap> Amg3 := AlgebraByGenerators( Rationals, [ mg3 ] );;
+gap> homg3 := AlgebraHomomorphismByImages( A3, Amg3, [ m3 ], [ mg3 ] );;
+gap> actg3 := AlgebraActionByHomomorphism( homg3, Rc3 );;
-gap> F := GF(5);;
-gap> one := One(F);;
+## Chapter 4, Section 4.1.2
+gap> F5 := GF(5);;
+gap> id5 := One( F5 );;
gap> two := Z(5);;
-gap> z := Zero( F );;
-gap> l := [ [one,z,z], [z,one,z], [z,z,one] ];;
-gap> m := [ [z,one,two^3], [z,z,one], [z,z,z] ];;
-gap> n := [ [z,z,one], [z,z,z], [z,z,z] ];;
-gap> A := Algebra( F, [l,m] );;
-gap> SetName( A, "A(l,m)" );
-gap> B := Subalgebra( A, [m] );;
-gap> SetName( B, "A(m)" );
-gap> IsIdeal( A, B );;
-gap> act := AlgebraActionByMultipliers( A, B, A );;
-gap> XAB := XModAlgebraByIdeal( A, B );;
-gap> SetName( XAB, "XAB" );
-
-gap> C3 := Cat1AlgebraSelect( 2, 6, 2, 4 );;
+gap> z5 := Zero( F5 );;
+gap> n0 := [ [id5,z5,z5], [z5,id5,z5], [z5,z5,id5] ];;
+gap> n1 := [ [z5,id5,two^3], [z5,z5,id5], [z5,z5,z5] ];;
+gap> n2 := [ [z5,z5,id5], [z5,z5,z5], [z5,z5,z5] ];;
+gap> An := Algebra( F5, [ n0, n1 ] );;
+gap> SetName( An, "An" );
+gap> Bn := Subalgebra( An, [ n1 ] );;
+gap> SetName( Bn, "Bn" );
+gap> IsIdeal( An, Bn );
+true
+gap> actn := AlgebraActionByMultipliers( An, Bn, An );;
+gap> Xn := XModAlgebraByIdeal( An, Bn );
+[ Bn -> An ]
+gap> SetName( Xn, "Xn" );
gap> ############################
gap> ## Chapter 5, Section 5.1.1
-gap> CAB := Cat1AlgebraOfXModAlgebra( XAB );
-[A(l,m) |X A(m) -> A(l,m)]
-gap> Display( CAB );
-Cat1-algebra [A(l,m) |X A(m)=>A(l,m)] :-
+gap> Cn := Cat1AlgebraOfXModAlgebra( Xn );
+[An |X Bn -> An]
+gap> Display( Cn );
+Cat1-algebra [An |X Bn => An] :-
: range algebra has generators:
-
[
[ [ Z(5)^0, 0*Z(5), 0*Z(5) ], [ 0*Z(5), Z(5)^0, 0*Z(5) ],
[ 0*Z(5), 0*Z(5), Z(5)^0 ] ],
[ [ 0*Z(5), Z(5)^0, Z(5)^3 ], [ 0*Z(5), 0*Z(5), Z(5)^0 ],
[ 0*Z(5), 0*Z(5), 0*Z(5) ] ] ]
-: tail homomorphism maps source generators to:
-
+: tail homomorphism maps source generators to:
[
[ [ Z(5)^0, 0*Z(5), 0*Z(5) ], [ 0*Z(5), Z(5)^0, 0*Z(5) ],
[ 0*Z(5), 0*Z(5), Z(5)^0 ] ],
@@ -71,8 +65,7 @@ Cat1-algebra [A(l,m) |X A(m)=>A(l,m)] :-
[ 0*Z(5), 0*Z(5), 0*Z(5) ] ],
[ [ 0*Z(5), 0*Z(5), 0*Z(5) ], [ 0*Z(5), 0*Z(5), 0*Z(5) ],
[ 0*Z(5), 0*Z(5), 0*Z(5) ] ] ]
-: head homomorphism maps source generators to:
-
+: head homomorphism maps source generators to:
[
[ [ Z(5)^0, 0*Z(5), 0*Z(5) ], [ 0*Z(5), Z(5)^0, 0*Z(5) ],
[ 0*Z(5), 0*Z(5), Z(5)^0 ] ],
@@ -84,14 +77,37 @@ Cat1-algebra [A(l,m) |X A(m)=>A(l,m)] :-
[ 0*Z(5), 0*Z(5), 0*Z(5) ] ],
[ [ 0*Z(5), 0*Z(5), Z(5)^0 ], [ 0*Z(5), 0*Z(5), 0*Z(5) ],
[ 0*Z(5), 0*Z(5), 0*Z(5) ] ] ]
-: range embedding maps range generators to:
- [ v.1, v.2 ]
-: kernel has generators:
- [ v.4, v.5 ]
-gap> X3 := XModAlgebraOfCat1Algebra( C3 );
-[ -> ]
-gap> Display( X3 );
+: range embedding maps range generators to: [ v.1, v.2 ]
+: kernel has generators: [ v.4, v.5 ]
+gap> bdy3 := AlgebraHomomorphismByImages( Rc3, A3, [ g3 ], [ m3 ] );;
+gap> X3 := XModAlgebraByBoundaryAndAction( bdy3, actg3 );;
+gap> C3 := Cat1AlgebraOfXModAlgebra( X3 );
+[A3 |X GR(c3) -> A3]
+gap> Display( C3 );
+Cat1-algebra [A3 |X GR(c3) => A3] :-
+: range algebra has generators:[ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ]
+: tail homomorphism maps source generators to:
+[ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ],
+ [ [ 0, 0, 1 ], [ 1, 0, 0 ], [ 0, 1, 0 ] ],
+ [ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ],
+ [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ],
+ [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ],
+ [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ] ]
+: head homomorphism maps source generators to:
+[ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ],
+ [ [ 0, 0, 1 ], [ 1, 0, 0 ], [ 0, 1, 0 ] ],
+ [ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ],
+ [ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ],
+ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ],
+ [ [ 0, 0, 1 ], [ 1, 0, 0 ], [ 0, 1, 0 ] ] ]
+: range embedding maps range generators to: [ v.1 ]
+: kernel has generators: [ v.4, v.5, v.6 ]
+
+gap> C6 := Cat1AlgebraSelect( 2, 6, 2, 4 );;
+gap> X6 := XModAlgebraOfCat1Algebra( C6 );
+[ -> ]
+gap> Display( X6 );
Crossed module [..->..] :-
: Source algebra has generators:
[ (Z(2)^0)*()+(Z(2)^0)*(4,5), (Z(2)^0)*(1,2,3)+(Z(2)^0)*(1,2,3)(4,5),
@@ -101,7 +117,7 @@ Crossed module [..->..] :-
: Boundary homomorphism maps source generators to:
[ of ..., of ..., of ... ]
-gap> SetInfoLevel( InfoXModAlg, saved_infolevel_xmodalg );;
+gap> SetInfoLevel( InfoXModAlg, level );;
gap> STOP_TEST( "convert.tst", 10000 );
############################################################################
diff --git a/tst/module.tst b/tst/module.tst
index f1fe462..3842c36 100644
--- a/tst/module.tst
+++ b/tst/module.tst
@@ -2,7 +2,7 @@
##
#W module.tst XModAlg test files Chris Wensley
##
-#@local level,m3,A3,G,B3,g3,mg3,MB3,hom3,act3,bdy3,X3,A4,V4,M4,famM4,v4,genM4,u4,D4,T4,B4a,B4,M2B4,B2M4,act4,a4,X4,C4,A3B3,hom,actMA3,act5,act6,A6,B6,em3,ea4
+#@local level,m3,A3,c3,Rc3,g3,mg3,Amg3,homg3,actg3,bdy3,X3,V3,M3,famM3,v3,genM3,u4,D3,T3,B3a,B3,M2B3,B2M3,act3,a3,X4,C4,A3Rc3,hom33,actMA3,act4,act5,A5,B5,em3,ea3
gap> START_TEST( "XModAlg package: module.tst" );
gap> level := InfoLevel( InfoXModAlg );;
@@ -12,31 +12,30 @@ gap> SetInfoLevel( InfoXModAlg, 0 );
gap> m3 := [ [0,1,0], [0,0,1], [1,0,0,] ];;
gap> A3 := Algebra( Rationals, [m3] );;
gap> SetName( A3, "A3" );;
-gap> G := Group( (1,2,3) );;
-gap> B3 := GroupRing( Rationals, G );;
-gap> SetName( B3, "GR(G)" );
-gap> g3 := GeneratorsOfAlgebra( B3 )[2];;
-gap> mg3 := RegularAlgebraMultiplier( B3, B3, g3 );;
-gap> MB3 := AlgebraByGenerators( Rationals, [ mg3 ] );;
-gap> hom3 := AlgebraHomomorphismByImages( A3, MB3, [ m3 ], [ mg3 ] );;
-gap> act3 := AlgebraActionByHomomorphism( hom3, B3 );
+gap> c3 := Group( (1,2,3) );;
+gap> Rc3 := GroupRing( Rationals, c3 );;
+gap> SetName( Rc3, "GR(c3)" );
+gap> g3 := GeneratorsOfAlgebra( Rc3 )[2];;
+gap> mg3 := RegularAlgebraMultiplier( Rc3, Rc3, g3 );;
+gap> Amg3 := AlgebraByGenerators( Rationals, [ mg3 ] );;
+gap> homg3 := AlgebraHomomorphismByImages( A3, Amg3, [ m3 ], [ mg3 ] );;
+gap> actg3 := AlgebraActionByHomomorphism( homg3, Rc3 );
[ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ] ->
[ [ (1)*(), (1)*(1,2,3), (1)*(1,3,2) ] -> [ (1)*(1,2,3), (1)*(1,3,2), (1)*()
] ]
-## .1.7
-gap> hom3 := AlgebraHomomorphismByImages( A3, MB3, [ m3 ], [ mg3 ] );
+## Section 4.1.7
+gap> homg3 := AlgebraHomomorphismByImages( A3, Amg3, [ m3 ], [ mg3 ] );
[ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ] ->
[ [ (1)*(), (1)*(1,2,3), (1)*(1,3,2) ] -> [ (1)*(1,2,3), (1)*(1,3,2), (1)*()
] ]
-gap> bdy3 := AlgebraHomomorphismByImages( B3, A3, [ g3 ], [ m3 ] );
+gap> bdy3 := AlgebraHomomorphismByImages( Rc3, A3, [ g3 ], [ m3 ] );
[ (1)*(1,2,3) ] -> [ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ]
-gap> X3 := XModAlgebraByBoundaryAndAction( bdy3, act3 );
-[ GR(G) -> A3 ]
+gap> X3 := XModAlgebraByBoundaryAndAction( bdy3, actg3 );
+[ GR(c3) -> A3 ]
gap> Display( X3 );
-
-Crossed module [GR(G) -> A3] :-
-: Source algebra GR(G) has generators:
+Crossed module [GR(c3) -> A3] :-
+: Source algebra GR(c3) has generators:
[ (1)*(), (1)*(1,2,3) ]
: Range algebra A3 has generators:
[ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ]
@@ -45,86 +44,84 @@ Crossed module [GR(G) -> A3] :-
[ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ]
## Section 2.3
-gap> m3 := [ [0,1,0], [0,0,1], [1,0,0] ];;
-gap> A4 := Algebra( Rationals, [m3] );;
-gap> SetName( A4, "A4" );;
-gap> V4 := Rationals^3;;
-gap> M4 := LeftAlgebraModule( A4, \*, V4 );;
-gap> SetName( M4, "M4" );
-gap> famM4 := ElementsFamily( FamilyObj( M4 ) );;
-gap> v4 := [3,4,5];;
-gap> v4 := ObjByExtRep( famM4, v4 );
+gap> V3 := Rationals^3;;
+gap> M3 := LeftAlgebraModule( A3, \*, V3 );;
+gap> SetName( M3, "M3" );
+gap> famM3 := ElementsFamily( FamilyObj( M3 ) );;
+gap> v3 := [3,4,5];;
+gap> v3 := ObjByExtRep( famM3, v3 );
[ 3, 4, 5 ]
-gap> m3*v4;
+gap> m3*v3;
[ 4, 5, 3 ]
-gap> genM4 := GeneratorsOfLeftModule( M4 );;
-gap> u4 := 6*genM4[1] + 7*genM4[2] + 8*genM4[3];
+gap> genM3 := GeneratorsOfLeftModule( M3 );;
+gap> u4 := 6*genM3[1] + 7*genM3[2] + 8*genM3[3];
[ 6, 7, 8 ]
gap> u4 := ExtRepOfObj( u4 );
[ 6, 7, 8 ]
## Section 2.3.1
-gap> D4 := LeftActingDomain( M4 );;
-gap> T4 := EmptySCTable( Dimension(M4), Zero(D4), "symmetric" );;
-gap> B4a := AlgebraByStructureConstants( D4, T4 );
+gap> D3 := LeftActingDomain( M3 );;
+gap> T3 := EmptySCTable( Dimension(M3), Zero(D3), "symmetric" );;
+gap> B3a := AlgebraByStructureConstants( D3, T3 );
-gap> GeneratorsOfAlgebra( B4a );
+gap> GeneratorsOfAlgebra( B3a );
[ v.1, v.2, v.3 ]
-gap> B4 := ModuleAsAlgebra( M4 );
-A(M4)
-gap> GeneratorsOfAlgebra( B4 );
+gap> B3 := ModuleAsAlgebra( M3 );
+A(M3)
+gap> GeneratorsOfAlgebra( B3 );
[ [[ 1, 0, 0 ]], [[ 0, 1, 0 ]], [[ 0, 0, 1 ]] ]
## Section 2.3.2
-gap> IsModuleAsAlgebra( B4 );
+gap> IsModuleAsAlgebra( B3 );
true
-gap> IsModuleAsAlgebra( A4 );
+gap> IsModuleAsAlgebra( A3 );
false
## Section 2.3.3
-gap> KnownAttributesOfObject( B4 );
+gap> KnownAttributesOfObject( B3 );
[ "Name", "ZeroImmutable", "LeftActingDomain", "Dimension",
"GeneratorsOfLeftOperatorAdditiveGroup", "GeneratorsOfLeftOperatorRing",
"ModuleToAlgebraIsomorphism", "AlgebraToModuleIsomorphism" ]
-gap> M2B4 := ModuleToAlgebraIsomorphism( B4 );
+gap> M2B3 := ModuleToAlgebraIsomorphism( B3 );
[ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ] -> [ [[ 1, 0, 0 ]], [[ 0, \
1, 0 ]],
[[ 0, 0, 1 ]] ]
-gap> Source( M2B4 ) = M4;
+gap> Source( M2B3 ) = M3;
false
-gap> Source( M2B4 ) = V4;
+gap> Source( M2B3 ) = V3;
true
-gap> B2M4 := AlgebraToModuleIsomorphism( B4 );
+gap> B2M3 := AlgebraToModuleIsomorphism( B3 );
[ [[ 1, 0, 0 ]], [[ 0, 1, 0 ]], [[ 0, 0, 1 ]] ] ->
[ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ]
-gap> Range( B2M4 ) = M4;
+gap> Range( B2M3 ) = M3;
false
-gap> Range( B2M4 ) = V4;
+gap> Range( B2M3 ) = V3;
true
## Section 2.3.4
-gap> act4 := AlgebraActionByModule( A4, M4 );
+gap> act3 := AlgebraActionByModule( A3, M3 );
[ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ] ->
[ [ [[ 1, 0, 0 ]], [[ 0, 1, 0 ]], [[ 0, 0, 1 ]] ] ->
[ [[ 0, 0, 1 ]], [[ 1, 0, 0 ]], [[ 0, 1, 0 ]] ] ]
-gap> a4 := 2*m3 + 3*m3^2;
+gap> a3 := 2*m3 + 3*m3^2;
[ [ 0, 2, 3 ], [ 3, 0, 2 ], [ 2, 3, 0 ] ]
-gap> Image( act4, a4 );
-Basis( A(M4), [ [[ 1, 0, 0 ]], [[ 0, 1, 0 ]], [[ 0, 0, 1 ]] ] ) ->
+gap> Image( act3, a3 );
+Basis( A(M3), [ [[ 1, 0, 0 ]], [[ 0, 1, 0 ]], [[ 0, 0, 1 ]] ] ) ->
[ (3)*[[ 0, 1, 0 ]]+(2)*[[ 0, 0, 1 ]], (2)*[[ 1, 0, 0 ]]+(3)*[[ 0, 0, 1 ]],
(3)*[[ 1, 0, 0 ]]+(2)*[[ 0, 1, 0 ]] ]
-gap> Image( act4 );
+gap> Image( act3 );
## Section 4.1.8
-gap> X4 := XModAlgebraByModule( A4, M4 );
-[A(M4)->A4]
+gap> X4 := XModAlgebraByModule( A3, M3 );
+[A(M3)->A3]
+gap> XModAlgebraAction( X4 ) = act3;
+true
gap> Display( X4 );
-
-Crossed module [A(M4)->A4] :-
-: Source algebra A(M4) has generators:
+Crossed module [A(M3)->A3] :-
+: Source algebra A(M3) has generators:
[ [[ 1, 0, 0 ]], [[ 0, 1, 0 ]], [[ 0, 0, 1 ]] ]
-: Range algebra A4 has generators:
+: Range algebra A3 has generators:
[ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ]
: Boundary homomorphism maps source generators to:
[ [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ],
@@ -133,9 +130,9 @@ Crossed module [A(M4)->A4] :-
## Section 5.1.1
gap> C4 := Cat1AlgebraOfXModAlgebra( X4 );
-[A4 |X A(M4) -> A4]
+[A3 |X A(M3) -> A3]
gap> Display( C4 );
-Cat1-algebra [A4 |X A(M4)=>A4] :-
+Cat1-algebra [A3 |X A(M3)=>A3] :-
: range algebra has generators:
[ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ]
: tail homomorphism = head homomorphism
@@ -152,24 +149,24 @@ Cat1-algebra [A4 |X A(M4)=>A4] :-
[ v.4, v.5, v.6 ]
## Section 2.4.1
-gap> A3B3 := DirectSumOfAlgebras( A3, B3 );;
-gap> SetName( A3B3, Concatenation( Name(A3), "(+)", Name(B3) ) );
-gap> SetDirectSumOfAlgebrasInfo( A3B3,
-> rec( algebras := [A3,B3], first := [1,Dimension(A3)+1],
+gap> A3Rc3 := DirectSumOfAlgebras( A3, Rc3 );;
+gap> SetName( A3Rc3, Concatenation( Name(A3), "(+)", Name(Rc3) ) );
+gap> SetDirectSumOfAlgebrasInfo( A3Rc3,
+> rec( algebras := [A3,Rc3], first := [1,Dimension(A3)+1],
> embeddings := [ ], projections := [ ] ) );;
## Section 2.4.2
-gap> Embedding( A3B3, 1 );
+gap> Embedding( A3Rc3, 1 );
Basis( A3, [ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ],
[ [ 0, 0, 1 ], [ 1, 0, 0 ], [ 0, 1, 0 ] ],
[ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ] ] ) -> [ v.1, v.2, v.3 ]
-gap> Projection( A3B3, 2 );
-CanonicalBasis( A3(+)GR(G) ) -> [ of ..., of ...,
+gap> Projection( A3Rc3, 2 );
+CanonicalBasis( A3(+)GR(c3) ) -> [ of ..., of ...,
of ..., (1)*(), (1)*(1,2,3), (1)*(1,3,2) ]
## Section 2.4.3
-gap> hom := DirectSumOfAlgebraHomomorphisms( hom3, hom3 );;
-gap> Print( hom, "\n" );
+gap> hom33 := DirectSumOfAlgebraHomomorphisms( homg3, homg3 );;
+gap> Print( hom33, "\n" );
AlgebraHomomorphismByImages( A3(+)A3, Algebra( Rationals,
[ v.1, v.2, v.3, v.4, v.5, v.6 ] ),
[ [ [ 0, 1, 0, 0, 0, 0 ], [ 0, 0, 1, 0, 0, 0 ], [ 1, 0, 0, 0, 0, 0 ],
@@ -180,7 +177,7 @@ AlgebraHomomorphismByImages( A3(+)A3, Algebra( Rationals,
## Section 2.4.4
gap> actMA3 := AlgebraActionByMultipliers( A3, A3, A3 );;
-gap> act5 := AlgebraActionOnDirectSum( actMA3, act3 );
+gap> act4 := AlgebraActionOnDirectSum( actMA3, actg3 );
[ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ],
[ [ 0, 0, 1 ], [ 1, 0, 0 ], [ 0, 1, 0 ] ],
[ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ] ] ->
@@ -189,22 +186,22 @@ gap> act5 := AlgebraActionOnDirectSum( actMA3, act3 );
[ v.1, v.2, v.3, v.4, v.5, v.6 ] -> [ v.1, v.2, v.3, v.4, v.5, v.6 ] ]
## Section 2.4.5
-gap> act6 := DirectSumOfAlgebraActions( act3, act4 );;
-gap> A6 := Source( act6 );
-A3(+)A4
-gap> B6 := AlgebraActedOn( act6 );
-GR(G)(+)A(M4)
-gap> em3 := ImageElm( Embedding( A6, 1 ), m3 );
+gap> act5 := DirectSumOfAlgebraActions( actg3, act3 );;
+gap> A5 := Source( act5 );
+A3(+)A3
+gap> B5 := AlgebraActedOn( act5 );
+GR(c3)(+)A(M3)
+gap> em3 := ImageElm( Embedding( A5, 1 ), m3 );
[ [ 0, 1, 0, 0, 0, 0 ], [ 0, 0, 1, 0, 0, 0 ], [ 1, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ] ]
-gap> ImageElm( act6, em3 );
-Basis( GR(G)(+)A(M4), [ v.1, v.2, v.3, v.4, v.5, v.6 ] ) ->
+gap> ImageElm( act5, em3 );
+Basis( GR(c3)(+)A(M3), [ v.1, v.2, v.3, v.4, v.5, v.6 ] ) ->
[ v.2, v.3, v.1, 0*v.1, 0*v.1, 0*v.1 ]
-gap> ea4 := ImageElm( Embedding( A6, 2 ), a4 );
+gap> ea3 := ImageElm( Embedding( A5, 2 ), a3 );
[ [ 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 2, 3 ], [ 0, 0, 0, 3, 0, 2 ], [ 0, 0, 0, 2, 3, 0 ] ]
-gap> ImageElm( act6, ea4 );
-Basis( GR(G)(+)A(M4), [ v.1, v.2, v.3, v.4, v.5, v.6 ] ) ->
+gap> ImageElm( act5, ea3 );
+Basis( GR(c3)(+)A(M3), [ v.1, v.2, v.3, v.4, v.5, v.6 ] ) ->
[ 0*v.1, 0*v.1, 0*v.1, (3)*v.5+(2)*v.6, (2)*v.4+(3)*v.6, (3)*v.4+(2)*v.5 ]
gap> SetInfoLevel( InfoXModAlg, level );;
diff --git a/tst/testing.g b/tst/testing.g
index 043dac8..4e5e46a 100755
--- a/tst/testing.g
+++ b/tst/testing.g
@@ -11,8 +11,8 @@ TestXModAlg := function( pkgname )
LoadPackage( pkgname );
pkgdir := DirectoriesPackageLibrary( pkgname, "tst" );
# Arrange chapters as required
- testfiles :=
- [ "cat1.tst", "xmod.tst", "convert.tst" ];
+ testfiles := [ "algebra.tst", "module.tst", "cat1.tst",
+ "xmod.tst", "convert.tst" ];
testresult := true;
for ff in testfiles do
fn := Filename( pkgdir, ff );
diff --git a/tst/xmod.tst b/tst/xmod.tst
index 4bb2bf0..5d1d027 100644
--- a/tst/xmod.tst
+++ b/tst/xmod.tst
@@ -2,11 +2,13 @@
##
#W xmod.tst XModAlg test files Z. Arvasi - A. Odabas
##
+#@local level,m2,A2,S2,nat2,Q2,m3,A3,c3,Rc3,g3,mg3,Amg3,homg3,actg3,V3,M3,act3,F5,id5,two,z5,n0,n1,n2,An,Bn,actn,Xn,Ak4,IAk4,XIAk4,XAn,X2,bdy3,X3,Y3,XY3,e4,Je4,Ke4,Se4,c4,Ac4,IAc4,XIAc4,Bk4,IBk4,XIBk4,homIAIB,theta,homAB,phi,mor,Xmor,ic4,e1,e2,immor
+
gap> START_TEST( "XModAlg package: xmod.tst" );
-gap> saved_infolevel_xmodalg := InfoLevel( InfoXModAlg );;
+gap> level := InfoLevel( InfoXModAlg );;
gap> SetInfoLevel( InfoXModAlg, 0 );
-## make this test independent of algebra.tst
+## make this test independent of algebra.tst and module.tst
gap> m2 := [ [0,1,2,3], [0,0,1,2], [0,0,0,1], [0,0,0,0] ];;
gap> A2 := Algebra( Rationals, [m2] );;
gap> SetName( A2, "A2" );
@@ -15,26 +17,44 @@ gap> nat2 := NaturalHomomorphismByIdeal( A2, S2 );;
gap> Q2 := Image( nat2 );;
gap> SetName( Q2, "Q2" );
+## from 2.2.4
+gap> m3 := [ [0,1,0], [0,0,1], [1,0,0] ];;
+gap> A3 := Algebra( Rationals, [m3] );;
+gap> SetName( A3, "A3" );
+gap> c3 := Group( (1,2,3) );;
+gap> Rc3 := GroupRing( Rationals, c3 );;
+gap> SetName( Rc3, "GR(c3)" );
+gap> g3 := GeneratorsOfAlgebra( Rc3 )[2];;
+gap> mg3 := RegularAlgebraMultiplier( Rc3, Rc3, g3 );;
+gap> Amg3 := AlgebraByGenerators( Rationals, [ mg3 ] );;
+gap> homg3 := AlgebraHomomorphismByImages( A3, Amg3, [ m3 ], [ mg3 ] );;
+gap> actg3 := AlgebraActionByHomomorphism( homg3, Rc3 );;
+
+gap> V3 := Rationals^3;;
+gap> M3 := LeftAlgebraModule( A3, \*, V3 );;
+gap> SetName( M3, "M3" );
+gap> act3 := AlgebraActionByModule( A3, M3 );;
+
## Chapter 4, Section 4.1.2
-gap> F := GF(5);;
-gap> one := One(F);;
+gap> F5 := GF(5);;
+gap> id5 := One( F5 );;
gap> two := Z(5);;
-gap> z := Zero( F );;
-gap> l := [ [one,z,z], [z,one,z], [z,z,one] ];;
-gap> m := [ [z,one,two^3], [z,z,one], [z,z,z] ];;
-gap> n := [ [z,z,one], [z,z,z], [z,z,z] ];;
-gap> A := Algebra( F, [l,m] );;
-gap> SetName( A, "A(l,m)" );
-gap> B := Subalgebra( A, [m] );;
-gap> SetName( B, "A(m)" );
-gap> IsIdeal( A, B );
+gap> z5 := Zero( F5 );;
+gap> n0 := [ [id5,z5,z5], [z5,id5,z5], [z5,z5,id5] ];;
+gap> n1 := [ [z5,id5,two^3], [z5,z5,id5], [z5,z5,z5] ];;
+gap> n2 := [ [z5,z5,id5], [z5,z5,z5], [z5,z5,z5] ];;
+gap> An := Algebra( F5, [ n0, n1 ] );;
+gap> SetName( An, "An" );
+gap> Bn := Subalgebra( An, [ n1 ] );;
+gap> SetName( Bn, "Bn" );
+gap> IsIdeal( An, Bn );
true
-gap> act := AlgebraActionByMultipliers( A, B, A );;
-gap> XAB := XModAlgebraByIdeal( A, B );
-[ A(m) -> A(l,m) ]
-gap> SetName( XAB, "XAB" );
-
+gap> actn := AlgebraActionByMultipliers( An, Bn, An );;
+gap> Xn := XModAlgebraByIdeal( An, Bn );
+[ Bn -> An ]
+gap> SetName( Xn, "Xn" );
+############################
## Section 4.1.3
gap> Ak4 := GroupRing( GF(5), DihedralGroup(4) );
@@ -49,7 +69,6 @@ gap> SetName( IAk4, "I(GF5[k4])" );
gap> XIAk4 := XModAlgebraByIdeal( Ak4, IAk4 );
[ I(GF5[k4]) -> GF5[k4] ]
gap> Display( XIAk4 );
-
Crossed module [I(GF5[k4])->GF5[k4]] :-
: Source algebra I(GF5[k4]) has generators:
[ (Z(5)^2)* of ...+(Z(5)^0)*f1, (Z(5)^2)* of ...+(Z(5)^
@@ -59,22 +78,33 @@ Crossed module [I(GF5[k4])->GF5[k4]] :-
: Boundary homomorphism maps source generators to:
[ (Z(5)^2)* of ...+(Z(5)^0)*f1, (Z(5)^2)* of ...+(Z(5)^
0)*f2 ]
-
gap> Size2d( XIAk4 );
[ 125, 625 ]
-gap> ############################
+############################
+## Section 4.1.4
+gap> RepresentationsOfObject( XIAk4 );
+[ "IsComponentObjectRep", "IsAttributeStoringRep", "IsPreXModAlgebraObj" ]
+gap> KnownPropertiesOfObject( XIAk4 );
+[ "CanEasilyCompareElements", "CanEasilySortElements", "IsDuplicateFree",
+ "IsLeftActedOnByDivisionRing", "IsAdditivelyCommutative", "IsLDistributive",
+ "IsRDistributive", "IsPreXModDomain", "Is2dAlgebraObject",
+ "IsPreXModAlgebra", "IsXModAlgebra" ]
+gap> KnownAttributesOfObject( XIAk4 );
+[ "Name", "LeftActingDomain", "Range", "Source", "Boundary", "Size2d",
+ "XModAlgebraAction" ]
+
+############################
gap> ## Section 4.1.5
-gap> XA := XModAlgebraByMultiplierAlgebra( A );
-[ A(l,m) -> ]
-gap> XModAlgebraAction( XA );
+gap> XAn := XModAlgebraByMultiplierAlgebra( An );
+[ An -> ]
+gap> XModAlgebraAction( XAn );
IdentityMapping( )
-gap> ############################
-gap> ## Section 4.1.6
+############################
+## Section 4.1.6
gap> X2 := XModAlgebraBySurjection( nat2 );;
gap> Display( X2 );
-
Crossed module [A2->Q2] :-
: Source algebra A2 has generators:
[ [ [ 0, 1, 2, 3 ], [ 0, 0, 1, 2 ], [ 0, 0, 0, 1 ], [ 0, 0, 0, 0 ] ] ]
@@ -83,91 +113,68 @@ Crossed module [A2->Q2] :-
: Boundary homomorphism maps source generators to:
[ v.1 ]
-gap> ############################
-gap> ## Section ???
-gap> G := SmallGroup( 4, 2 );
-
-gap> F := GaloisField( 4 );
-GF(2^2)
-gap> R := GroupRing( F, G );
-
-gap> Size( R );
-256
-gap> SetName( R, "GF(2^2)[k4]" );
-gap> e5 := Elements( R )[5];
-(Z(2)^0)* of ...+(Z(2)^0)*f1+(Z(2)^0)*f2+(Z(2)^0)*f1*f2
-gap> S := Subalgebra( R, [e5] );;
-gap> SetName( S, "" );
-gap> act := AlgebraActionByMultipliers( R, S, R );;
-gap> bdy := AlgebraHomomorphismByImages( S, R, [e5], [e5] );
-[ (Z(2)^0)* of ...+(Z(2)^0)*f1+(Z(2)^0)*f2+(Z(2)^0)*f1*f2 ] ->
-[ (Z(2)^0)* of ...+(Z(2)^0)*f1+(Z(2)^0)*f2+(Z(2)^0)*f1*f2 ]
-gap> IsAlgebraAction( act );
-true
-gap> IsAlgebraHomomorphism( bdy );
-true
-gap> XM := PreXModAlgebraByBoundaryAndAction( bdy, act );
-[->GF(2^2)[k4]]
-gap> IsXModAlgebra( XM );
-true
-gap> Display( XM );
-
-Crossed module [->GF(2^2)[k4]] :-
-: Source algebra has generators:
- [ (Z(2)^0)* 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)* of ..., (Z(2)^0)*f1, (Z(2)^0)*f2 ]
+############################
+## Section 4.1.7
+gap> bdy3 := AlgebraHomomorphismByImages( Rc3, A3, [ g3 ], [ m3 ] );
+[ (1)*(1,2,3) ] -> [ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ]
+gap> X3 := XModAlgebraByBoundaryAndAction( bdy3, actg3 );
+[ GR(c3) -> A3 ]
+gap> Display( X3 );
+Crossed module [GR(c3) -> A3] :-
+: Source algebra GR(c3) has generators:
+ [ (1)*(), (1)*(1,2,3) ]
+: Range algebra A3 has generators:
+ [ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ]
: Boundary homomorphism maps source generators to:
- [ (Z(2)^0)* of ...+(Z(2)^0)*f1+(Z(2)^0)*f2+(Z(2)^0)*f1*f2 ]
+ [ [ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ],
+ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ]
gap> ############################
gap> ## Section 4.1.8
-gap> f := Boundary( XIAk4 );
-[ (Z(5)^2)* of ...+(Z(5)^0)*f1, (Z(5)^2)* of ...\
-+(Z(5)^
- 0)*f2 ] -> [ (Z(5)^2)* of ...+(Z(5)^0)*f1,
- (Z(5)^2)* of ...+(Z(5)^0)*f2 ]
-gap> reps := RepresentationsOfObject( XIAk4 );;
-gap> Set( reps );
-[ "IsAttributeStoringRep", "IsComponentObjectRep", "IsPreXModAlgebraObj" ]
-gap> kpo := KnownPropertiesOfObject( XIAk4 );;
-gap> Set( kpo );
-[ "CanEasilyCompareElements", "CanEasilySortElements", "Is2dAlgebraObject",
- "IsAdditivelyCommutative", "IsDuplicateFree", "IsLDistributive",
- "IsLeftActedOnByDivisionRing", "IsPreXModAlgebra", "IsPreXModDomain",
- "IsRDistributive", "IsXModAlgebra" ]
-gap> kao := KnownAttributesOfObject( XIAk4 );;
-gap> Set( kao );
-[ "Boundary", "LeftActingDomain", "Name", "Range", "Size2d", "Source\
-",
- "XModAlgebraAction" ]
+gap> Y3 := XModAlgebraByModule( A3, M3 );
+[ A(M3) -> A3 ]
+gap> Image( XModAlgebraAction( Y3 ), m3 ) = Image( act3, m3 );
+true
+gap> Display( Y3 );
+Crossed module [A(M3) -> A3] :-
+: Source algebra A(M3) has generators: [ [[ 1, 0, 0 ]], [[ 0, 1, 0 ]],
+ [[ 0, 0, 1 ]] ]
+: Range algebra A3 has generators:
+[ [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ]
+: Boundary homomorphism maps source generators to:
+[ [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ],
+ [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ],
+ [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ] ]
-gap> ############################
-gap> ## Section 4.1.10
+############################
+## Section 4.1.9
+gap> XY3 := DirectSumOfXModAlgebras( X3, Y3 );
+[ GR(c3)(+)A(M3) -> A3(+)A3 ]
+
+############################
+## Section 4.1.10
gap> e4 := Elements( IAk4 )[4];
(Z(5)^0)* of ...+(Z(5)^0)*f1+(Z(5)^2)*f2+(Z(5)^2)*f1*f2
gap> Je4 := Ideal( IAk4, [e4] );;
-gap> Size( Je4 );
-5
-gap> SetName( Je4, "" );
-gap> XJe4 := XModAlgebraByIdeal( Ak4, Je4 );
-[ -> GF5[k4] ]
-gap> Display( XJe4 );
-
-Crossed module [->GF5[k4]] :-
-: Source algebra has generators:
- [ (Z(5)^0)* of ...+(Z(5)^0)*f1+(Z(5)^2)*f2+(Z(5)^2)*f1*f2 ]
-: Range algebra GF5[k4] has generators:
- [ (Z(5)^0)* of ..., (Z(5)^0)*f1, (Z(5)^0)*f2 ]
-: Boundary homomorphism maps source generators to:
- [ (Z(5)^0)* of ...+(Z(5)^0)*f1+(Z(5)^2)*f2+(Z(5)^2)*f1*f2 ]
-
-gap> IsSubXModAlgebra( XIAk4, XJe4 );
+gap> SetName( Je4, "" );
+gap> Ke4 := Subalgebra( Ak4, [e4] );;
+gap> [ Size( Je4 ), Size( Ke4 ) ];
+[ 5, 5 ]
+gap> Se4 := SubXModAlgebra( XIAk4, Je4, Ke4 );
+[ -> ]
+gap> IsSubXModAlgebra( XIAk4, Se4 );
true
+gap> Display( Se4 );
+Crossed module [ -> ..] :-
+: Source algebra has generators:
+[ (Z(5)^0)* of ...+(Z(5)^0)*f1+(Z(5)^2)*f2+(Z(5)^2)*f1*f2 ]
+: Range algebra has generators:
+[ (Z(5)^0)* of ...+(Z(5)^0)*f1+(Z(5)^2)*f2+(Z(5)^2)*f1*f2 ]
+: Boundary homomorphism maps source generators to:
+[ (Z(5)^0)* of ...+(Z(5)^0)*f1+(Z(5)^2)*f2+(Z(5)^2)*f1*f2 ]
-
-gap> ############################
-gap> ## Chapter 4, Section 4.2.1
+############################
+## Chapter 4, Section 4.2.1
gap> c4 := CyclicGroup( 4 );;
gap> Ac4 := GroupRing( GF(2), c4 );
@@ -210,8 +217,9 @@ gap> IsTotal( mor );
true
gap> IsSingleValued( mor );
true
-gap> ############################
-gap> ## Section 4.2.2
+
+############################
+## Section 4.2.2
gap> Xmor := Kernel( mor );
[ -> ]
gap> IsXModAlgebra( Xmor );
@@ -220,8 +228,9 @@ gap> Size2d( Xmor );
[ 4, 4 ]
gap> IsSubXModAlgebra( XIAc4, Xmor );
true
-gap> ############################
-gap> ## Section 4.2.4
+
+############################
+## Section 4.2.4
gap> ic4 := One( Ac4 );;
gap> e1 := ic4*c4.1 + ic4*c4.2;
(Z(2)^0)*f1+(Z(2)^0)*f2
@@ -246,6 +255,7 @@ Crossed module [..->..] :-
: Boundary homomorphism maps source generators to:
[ (Z(2)^0)* of ...+(Z(2)^0)*f1+(Z(2)^0)*f2+(Z(2)^0)*f1*f2 ]
+gap> SetInfoLevel( InfoXModAlg, level );;
gap> STOP_TEST( "xmod.tst", 10000 );
############################################################################