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 ); ############################################################################