From 725b9714e19ee25f2ea8a93ef1128bd6eba0ff97 Mon Sep 17 00:00:00 2001 From: cdwensley Date: Fri, 17 May 2024 16:07:50 +0100 Subject: [PATCH 1/2] remove unused global function ElementsLeftActing --- doc/algebra.xml | 5 +++-- lib/algebra.gd | 9 --------- lib/algebra.gi | 26 ++------------------------ 3 files changed, 5 insertions(+), 35 deletions(-) diff --git a/doc/algebra.xml b/doc/algebra.xml index 60293b0..a9349e2 100644 --- a/doc/algebra.xml +++ b/doc/algebra.xml @@ -2,7 +2,7 @@ - + @@ -19,7 +19,8 @@ All the algebras considered in this package will be associative and commutative. Scalars belong to a commutative ring k with 1 \neq 0.

-Why not a field? A group ring over the integers is not an algebra. +(Why not a field? +A group ring over the integers is not an algebra. [CDW])

diff --git a/lib/algebra.gd b/lib/algebra.gd index e5fef56..0b7ee31 100644 --- a/lib/algebra.gd +++ b/lib/algebra.gd @@ -28,13 +28,6 @@ DeclareOperation( "InclusionMappingAlgebra", [ IsAlgebra, IsAlgebra ] ); DeclareOperation( "RestrictionMappingAlgebra", [ IsAlgebraHomomorphism, IsAlgebra, IsAlgebra ] ); -## remove this "not IsBound(...)" hack as soon as the declarations -## have been moved to the main GAP library -if not IsBound( AlgebraHomomorphismByFunction ) then - DeclareOperation( "AlgebraHomomorphismByFunction", - [ IsAlgebra, IsAlgebra, IsFunction ] ); -fi; - DeclareOperation( "ModuleHomomorphism", [ IsAlgebra, IsRing ] ); @@ -47,8 +40,6 @@ DeclareOperation( "AllIdempotentAlgebraHomomorphisms", ############################## algebra actions #################### -DeclareGlobalFunction( "ElementsLeftActing" ); - DeclareProperty( "IsAlgebraAction", IsMapping ); DeclareGlobalFunction( "AlgebraAction" ); diff --git a/lib/algebra.gi b/lib/algebra.gi index e61f2b0..574035c 100644 --- a/lib/algebra.gi +++ b/lib/algebra.gi @@ -517,28 +517,6 @@ end ); ############################## algebra actions ############################ -############################################################################# -## -#F ElementsLeftActing( ) -## -InstallGlobalFunction( ElementsLeftActing, -function (ac) - local AB,B,list,uzAB,uzA,uzB,k,i,elB; - AB := Source(ac); - B := Range(ac); - elB := Elements(B); - list := []; - uzAB := Length(AB); - uzB := Length(elB); - uzA := uzAB/uzB; - k := 1; - for i in [1..uzA] do - Add(list,AB[k][1]); - k := k+uzB; - od; - return Set(list); -end ); - ############################################################################# ## #F IsAlgebraAction( ) @@ -569,7 +547,7 @@ end ); ############################################################################# ## -#F AlgebraAction( , ) crossed module from given boundary & action +#F AlgebraAction( ) crossed module from given boundary & action ## InstallGlobalFunction( AlgebraAction, function( arg ) @@ -593,7 +571,7 @@ function( arg ) return AlgebraActionByModule( arg[1],arg[2] ); fi; # alternatives not allowed - Error( "usage: AlgebraAcrion( A, I, B ); or various options" ); + Error( "usage: AlgebraAction( A, I, B ); or various options" ); end ); ############################################################################# From 764f4a1935f29efd66586c0da037ca0d46026016 Mon Sep 17 00:00:00 2001 From: cdwensley Date: Sat, 25 May 2024 18:50:32 +0100 Subject: [PATCH 2/2] minor changes to the example in 2.2.2 --- doc/algebra.xml | 64 ++++++++++++++++-------- doc/bib.xml | 2 - doc/xmod.xml | 20 ++++---- lib/alg2obj.gi | 6 ++- lib/algebra.gd | 5 +- lib/algebra.gi | 126 ++++++++++++++++++++++++++---------------------- tst/algebra.tst | 34 ++++++++++--- tst/xmod.tst | 9 ++-- 8 files changed, 163 insertions(+), 103 deletions(-) diff --git a/doc/algebra.xml b/doc/algebra.xml index a9349e2..1241cdd 100644 --- a/doc/algebra.xml +++ b/doc/algebra.xml @@ -138,7 +138,7 @@ This operation returns MultiplierAlgebraOfIdealBySubalgebra(A,A,A);. MA5c6 := RegularMultiplierAlgebra( A5c6 ); +gap> MA5c6 := RegularAlgebraMultiplier( A5c6 ); gap> vecM := BasisVectors( Basis( MA5c6 ) );; gap> vecM[3]; @@ -151,9 +151,10 @@ gap> vecM[3]; -If M is a multiplier algebra with elements of algebra A +If M is a multiplier algebra with elements of +a subalgebra B of an algebra A multiplying an ideal I then this operation returns the -homomorphism from A to M mapping a to \mu_a. +homomorphism from B to M mapping b to \mu_b. @@ -210,10 +211,11 @@ for all k \in k, r,r' \in R, and s,s' \in S. + Arg="A I B" /> -When I is an ideal in A we have seen that the multiplier -homomorphism from A to MultiplierAlgebraOf(Ideal(A,I) +When I is an ideal in A +and B is a subalgebra of A, +we have seen that the multiplier homomorphism from A to MultiplierAlgebraOfIdealBySubalgebra(A,I,B) is an action.

In the example the algebra is the group ring of the cyclic group C_6 @@ -232,7 +234,7 @@ gap> vecA := BasisVectors( Basis( A5c6 ) );; gap> v := vecA[1] + vecA[3] + vecA[5]; (Z(5)^0)*()+(Z(5)^0)*(1,3,5)(2,4,6)+(Z(5)^0)*(1,5,3)(2,6,4) gap> I5c6 := Ideal( A5c6, [v] );; -gap> actm := AlgebraActionByMultipliers( A5c6, I5c6 );; +gap> actm := AlgebraActionByMultipliers( A5c6, I5c6, A5c6 );; gap> actm2 := Image( actm, vecA[2] );; gap> Image( actm2, v ); (Z(5)^0)*(1,2,3,4,5,6)+(Z(5)^0)*(1,4)(2,5)(3,6)+(Z(5)^0)*(1,6,5,4,3,2) @@ -243,12 +245,13 @@ gap> Image( actm2, v ); -Let \theta : S \to R be a surjective algebra homomorphism -such that ks = 0_S ~\forall~ k \in K = \ker\theta. -Then R acts on S with r \cdot s = (\theta^{-1}r)s. -Note that thus action is well defined since if \theta p = r then -\theta^{-1}r = \{ p+k ~|~ k \in \ker\theta \} -and (p+k)s = ps+ks = ps+0. +Let \theta : A \to B be a surjective algebra homomorphism +such that \ker\theta is contained in the annihilator of A. +Then B acts on A by b \cdot a = pa +where p \in (\theta^{-1}b). +Note that this action is well defined since +\theta^{-1}b = \{ p+k ~|~ k \in \ker\theta \} +and (p+k)a = pa+ka = ca+0.

Continuing with the previous example, we construct the quotient algebra Q5c6 = A5c6/I5c6, @@ -277,14 +280,27 @@ gap> m^2; gap> m^3; [ [ 0, 0, 0, 1 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ] gap> A1 := Algebra( Rationals, [m] );; +gap> SetName( A1, "A1" ); gap> A3 := Subalgebra( A1, [m^3] );; gap> nat3 := NaturalHomomorphismByIdeal( A1, A3 ); - -> > + > +gap> Q13 := Image( nat3 );; +gap> SetName( Q13, "Q13" ); +gap> Display(nat3); +LeftModuleHomomorphismByMatrix( Basis( A1, +[ [ [ 0, 0, 0, 1 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ], + [ [ 0, 1, 2, 3 ], [ 0, 0, 1, 2 ], [ 0, 0, 0, 1 ], [ 0, 0, 0, 0 ] ], + [ [ 0, 0, 1, 4 ], [ 0, 0, 0, 1 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ] ] ), +[ [ 0, 0 ], [ 1, 0 ], [ 0, 1 ] ], CanonicalBasis( Q13 ) ) gap> act3 := AlgebraActionBySurjection( nat3 );; -gap> a3 := Image( act3, BasisVectors( Basis( Image( nat3 ) ) )[1] );; -gap> [ Image( a3, m ) = m^2, Image( a3, m^2 ) = m^3 ]; -[ true, true ] +gap> B3 := Image( act3 );; +gap> bvB3 := BasisVectors( Basis( B3 ) );; +gap> b1 := bvB3[1];; b2 := bvB3[2];; +gap> [ Image(b1,m)=m^2, Image(b1,m^2)=m^3, Image(b1,m^3)=Zero(A1) ]; +[ true, true, true ] +gap> [ Image(b2,m)=m^3, b2=b1^2 ]; +[true, true ] ]]> @@ -303,7 +319,7 @@ where the product is given by: (r_1,s_1)(r_2,s_2) ~=~ (r_1r_2,~ r_1 \cdot s_2 + r_2 \cdot s_1 + s_1s_2). -This product, as wekll as being commutative, is associative: +This product, as well as being commutative, is associative: (r_1,s_1)(r_2,s_2)(r_3,s_3) expands as: (r_1r_2r_3,~ \left (r_1r_2)\cdot s3 + (r_1r_3)\cdot s_2 + (r_2r_3)\cdot s_1 @@ -329,6 +345,7 @@ Continuing the example above, P := SemidirectProductOfAlgebras( A5c6, actm, I5c6 ); + gap> Embedding( P, 1 ); [ (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) @@ -342,6 +359,15 @@ gap> Projection( P, 1 ); [ (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), of ..., of ... ] +gap> P3 := SemidirectProductOfAlgebras( Q13, act3, A1 ); + +gap> Embedding( P3, 1 ); +[ v.1, v.2 ] -> [ v.1, v.2 ] +gap> Embedding( P3, 2 ); +[ [ [ 0, 1, 2, 3 ], [ 0, 0, 1, 2 ], [ 0, 0, 0, 1 ], [ 0, 0, 0, 0 ] ], + [ [ 0, 0, 1, 4 ], [ 0, 0, 0, 1 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ], + [ [ 0, 0, 0, 1 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ] ] -> +[ v.3, v.4, v.5 ] ]]> diff --git a/doc/bib.xml b/doc/bib.xml index dab6cdf..0bd48c0 100644 --- a/doc/bib.xml +++ b/doc/bib.xml @@ -174,7 +174,6 @@ Higher dimensional algebroids and crossed complexes University of Wales, Bangor (U.K.) 1986 - Ph.D. thesis @@ -184,7 +183,6 @@ Crossed Modules of Algebras with GAP 2009 Osmangazi University, Eskisehir - Ph.D. thesis

diff --git a/doc/xmod.xml b/doc/xmod.xml index b36d2f4..40e7746 100644 --- a/doc/xmod.xml +++ b/doc/xmod.xml @@ -78,7 +78,7 @@ gap> B := Subalgebra( A, [m] );; gap> SetName( B, "A(m)" ); gap> IsIdeal( A, B ); true -gap> act := AlgebraActionByMultipliers( A, B );; +gap> act := AlgebraActionByMultipliers( A, B, A );; gap> XAB := XModAlgebraByIdeal( A, B ); [ A(m) -> A(l,m) ] gap> SetName( XAB, "XAB" ); @@ -153,10 +153,10 @@ IdentityMapping( ) Arg="f" /> Let \partial : S\rightarrow R be a surjective algebra homomorphism -whose kernel lise in the annihilator of S. +whose kernel lies in the annihilator of S. Define the action of R on S by r\cdot s = \widetilde{r}s where \widetilde{r} \in \partial^{-1}(r), -as described in section +as described in section . Then \mathcal{X}=(\partial : S\rightarrow R) is a crossed module with the defined action.

@@ -170,10 +170,10 @@ Continuing with the example in that section, gap> X3 := XModAlgebraBySurjection( nat3 );; gap> Display( X3 ); -Crossed module [..->..] :- -: Source algebra has generators: +Crossed module [A1->Q13] :- +: Source algebra A1 has generators: [ [ [ 0, 1, 2, 3 ], [ 0, 0, 1, 2 ], [ 0, 0, 0, 1 ], [ 0, 0, 0, 0 ] ] ] -: Range algebra has generators: +: Range algebra Q13 has generators: [ v.1, v.2 ] : Boundary homomorphism maps source generators to: [ v.1 ] @@ -374,19 +374,19 @@ true

(Pre-)Crossed Module Morphisms -Let \mathcal{X} = (\partial:S\rightarrow R), +Let \mathcal{X} = (\partial:S\rightarrow R) and \mathcal{X}^{\prime} = (\partial^{\prime }:S^{\prime }\rightarrow R^{\prime }) -be (pre)crossed modules and \theta :S\rightarrow S^{\prime }, +be (pre)crossed modules and let \theta :S\rightarrow S^{\prime }, \varphi : R\rightarrow R^{\prime } be algebra homomorphisms. -If +Then if \varphi \circ \partial = \partial ^{\prime } \circ \theta, \qquad \theta (r\cdot s)=\varphi(r) \cdot \theta (s), for all r\in R, s\in S, -then the pair (\theta ,\varphi ) is called a morphism between +the pair (\theta ,\varphi ) is called a morphism between \mathcal{X} and \mathcal{X}^{\prime }

The conditions can be thought as the commutativity of the following diagrams: diff --git a/lib/alg2obj.gi b/lib/alg2obj.gi index 5fa04be..6131585 100644 --- a/lib/alg2obj.gi +++ b/lib/alg2obj.gi @@ -119,10 +119,12 @@ function( bdy, act ) fi; else if not ( B = BB ) then - return false; + return fail; fi; fi; + ## ???? should there be any tests for condition XModAlg1 here ???? + PM := rec(); ObjectifyWithAttributes( PM, NewType( fam, filter ), Source, B, @@ -426,7 +428,7 @@ InstallMethod( XModAlgebraByMultiplierAlgebra, function( A ) local MA, PM, act, bdy; MA := MultiplierAlgebra( A ); - bdy := MultiplierHomomorphism( A ); + bdy := MultiplierHomomorphism( MA ); act := IdentityMapping( MA ); SetIsAlgebraAction( act, true ); SetAlgebraActionType( act, "multiplier" ); diff --git a/lib/algebra.gd b/lib/algebra.gd index 0b7ee31..f481b25 100644 --- a/lib/algebra.gd +++ b/lib/algebra.gd @@ -41,17 +41,16 @@ DeclareOperation( "AllIdempotentAlgebraHomomorphisms", ############################## algebra actions #################### DeclareProperty( "IsAlgebraAction", IsMapping ); - DeclareGlobalFunction( "AlgebraAction" ); DeclareAttribute( "LeftElementOfCartesianProduct", IsAlgebraAction ); DeclareAttribute( "AlgebraActionType", IsAlgebraAction ); DeclareAttribute( "HasZeroModuleProduct", IsAlgebraAction ); +DeclareOperation( "AlgebraActionByMultipliers", + [ IsAlgebra, IsAlgebra, IsAlgebra ] ); DeclareOperation( "AlgebraAction2", [ IsAlgebra ] ); DeclareOperation( "AlgebraActionBySurjection", [ IsAlgebraHomomorphism ] ); DeclareOperation( "AlgebraActionByModule", [ IsAlgebra, IsRing ] ); -DeclareOperation( "AlgebraActionByMultipliers", - [ IsAlgebra, IsAlgebra, IsAlgebra ] ); DeclareOperation ( "SemidirectProductOfAlgebras", [ IsAlgebra, IsAlgebraAction, IsAlgebra ] ); diff --git a/lib/algebra.gi b/lib/algebra.gi index 574035c..71ca6d1 100644 --- a/lib/algebra.gi +++ b/lib/algebra.gi @@ -11,8 +11,9 @@ ## #M HasZeroAnnihilator ## -InstallMethod( HasZeroAnnihilator, "generic method for a commutative algebra", - true, [ IsAlgebra and IsCommutative ], 0, +InstallMethod( HasZeroAnnihilator, + "generic method for a commutative algebra", true, + [ IsAlgebra and IsCommutative ], 0, function( A ) ## this method assumes that Ann(A)=0 is equivalent to A^2=A local genA, num, a, b, i, j, L, B; @@ -104,7 +105,7 @@ function ( A, I, B ) fi; domA := LeftActingDomain( A ); imhom := List( vecB, b -> RegularAlgebraMultiplier( A, I, b ) ); - M := FLMLORByGenerators( domA, imhom ); + M := AlgebraByGenerators( domA, imhom ); SetIsMultiplierAlgebra( M, true ); if ( Dimension( M ) = 0 ) then hom := ZeroMapping( B, M ); @@ -150,11 +151,11 @@ function ( A, L ) return M; end ); -############################################################################## +############################################################################ ## #M AllAlgebraHomomorphisms ## -InstallMethod( AllAlgebraHomomorphisms, "generic method for algebras", +InstallMethod( AllAlgebraHomomorphisms, "generic method for two algebras", true, [ IsAlgebra, IsAlgebra ], 0, function( G, H ) @@ -230,12 +231,12 @@ function( G, H ) return mler; end ); -############################################################################## +############################################################################ ## #M AllBijectiveAlgebraHomomorphisms ## -InstallMethod( AllBijectiveAlgebraHomomorphisms, "generic method for algebras", - true, [ IsAlgebra, IsAlgebra ], 0, +InstallMethod( AllBijectiveAlgebraHomomorphisms, + "generic method for two algebras", true, [ IsAlgebra, IsAlgebra ], 0, function( G, H ) local A,B,a,b,h,f,i,sonuc,mler,j,k,eH,l,L,g,H_G,genG; @@ -312,15 +313,15 @@ function( G, H ) return mler; end ); -############################################################################## +############################################################################ ## #M AllIdempotentAlgebraHomomorphisms ## -InstallMethod( AllIdempotentAlgebraHomomorphisms, "generic method for algebras", - true, [ IsAlgebra, IsAlgebra ], 0, +InstallMethod( AllIdempotentAlgebraHomomorphisms, + "generic method for algebras", true, [ IsAlgebra, IsAlgebra ], 0, function( G, H ) -local A,B,a,b,h,f,i,sonuc,mler,j,k,eH,l,L,g,H_G,genG; + local A,B,a,b,h,f,i,sonuc,mler,j,k,eH,l,L,g,H_G,genG; eH := Elements(H); H_G := UnderlyingGroup(G); @@ -482,32 +483,39 @@ function( S, R, f ) rec( fun := f ) ); end); + +## no implementation of MultiplierHomomorphism is required +## because this attribute is set by MultiplierAlgebra constructions ############################################################################# ## -#F MultiplierHomomorphism( , , ) -## -InstallMethod( MultiplierHomomorphism, "for,for,for", true, [ IsAlgebra ], 0, -function ( A ) - - local mu, B; # mapping , result - B := MultiplierAlgebra(A); - mu := AlgebraHomomorphismByFunction( A, B, - r -> AlgebraHomomorphismByFunction(A,A,x->r*x) ); - SetSource(mu,A); - SetRange(mu,B); - # return the mapping - return mu; -end ); +#F MultiplierHomomorphism( ) +## +##InstallMethod( MultiplierHomomorphism, "generic method for an algebra", +## true, [ IsAlgebra ], 0, +##function ( A ) +## +## local mu, bvA, imgs, B; +## bvA := BasisVectors( Basis( A ) ); +## imgs := List( bvA, a -> RegularAlgebraMultiplier( A, A, a ) ); +## B := MultiplierAlgebra(A); +## mu := AlgebraHomomorphismByImages( A, B, bvA, imgs ); +## r -> AlgebraHomomorphismByFunction(A,A,x->r*x) ); +## SetSource(mu,A); +## SetRange(mu,B); +#### SetMultiplierHomomorphism(A,mu); +## # return the mapping +## return mu; +##end ); ############################################################################# ## -#F ModuleHomomorphism( , , ) +#F ModuleHomomorphism( , ) ## -InstallMethod( ModuleHomomorphism, "for,for,for", true, [IsAlgebra,IsRing], 0, -function ( M,R ) +InstallMethod( ModuleHomomorphism, "for an algebra and a module", + true, [IsAlgebra, IsRing], 0, +function ( M, R ) - local mu,B; # mapping , result - + local mu, B; # mapping , result mu := AlgebraHomomorphismByFunction(M,R,r->Zero(R)); SetSource(mu,M); SetRange(mu,R); @@ -521,7 +529,7 @@ end ); ## #F IsAlgebraAction( ) ## -InstallMethod( IsAlgebraAction, "for,for,for", true, [ IsMapping ], 0, +InstallMethod( IsAlgebraAction, "for a mapping", true, [ IsMapping ], 0, function ( ac ) local AB,A,B,uzB,uzA,j,i,k; # mapping , result @@ -547,7 +555,7 @@ end ); ############################################################################# ## -#F AlgebraAction( ) crossed module from given boundary & action +#F AlgebraAction( ) ## InstallGlobalFunction( AlgebraAction, function( arg ) @@ -576,13 +584,31 @@ end ); ############################################################################# ## -#F AlgebraAction2( , , ) +#F AlgebraActionByMultipliers( , , ) ## -InstallMethod( AlgebraAction2, "for,for,for", true, [ IsAlgebra ], 0, +InstallMethod( AlgebraActionByMultipliers, + "for an algebra, an ideal, and a subalgebra", true, + [ IsAlgebra, IsAlgebra, IsAlgebra ], 0, +function ( A, I, B ) + local M, act; + M := MultiplierAlgebraOfIdealBySubalgebra( A, I, B ); + act := MultiplierHomomorphism( M ); + SetIsAlgebraAction( act, true ); + SetAlgebraActionType( act, "multiplier" ); + SetHasZeroModuleProduct( act, false ); + return act; +end ); + +############################################################################# +## +#F AlgebraAction2( ) +## +InstallMethod( AlgebraAction2, "for an algebra", true, [ IsAlgebra ], 0, function ( A ) local act,MA,MAA; # mapping , result MA := MultiplierAlgebra(A); - MAA := Cartesian(MA,A); + MAA := DirectSumOfAlgebras( MA, A ); +## MAA := := Cartesian(MA,A); act := rec( fun:= x->Image(x[1],x[2]) ); ObjectifyWithAttributes( act, NewType( GeneralMappingsFamily( ElementsFamily(FamilyObj(MAA) ), @@ -621,7 +647,8 @@ function ( hom ) vecB := BasisVectors( basB ); dimB := Dimension( B ); if not ( dom = LeftActingDomain( B ) ) then - Error( "A and B have different LeftActingDomains" ); + Print( "A and B have different LeftActingDomains\n" ); + return fail; fi; ## check that the kernel is contained in the annihilator zA := Zero( A ); @@ -643,7 +670,7 @@ function ( hom ) im := List( vecA, a -> p*a ); maps[j] := LeftModuleHomomorphismByImages( A, A, vecA, im ); od; - M := FLMLORByGenerators( dom, maps ); + M := AlgebraByGenerators( dom, maps ); act := LeftModuleGeneralMappingByImages( B, M, vecB, maps ); SetIsAlgebraAction( act, true ); SetAlgebraActionType( act, "surjection" ); @@ -655,7 +682,7 @@ end ); ## #F AlgebraActionByModule( , , ) ## -InstallMethod( AlgebraActionByModule, "for,for,for", true, +InstallMethod( AlgebraActionByModule, "for an algebra and a module", true, [ IsAlgebra, IsRing ], 0, function( M, R ) local act,RM; # mapping , result @@ -676,23 +703,6 @@ function( M, R ) return act; end ); -############################################################################# -## -#F AlgebraActionByMultipliers( , , ) -## -InstallMethod( AlgebraActionByMultipliers, - "for an algebra, an ideal, and a subalgebra", true, - [ IsAlgebra, IsAlgebra, IsAlgebra ], 0, -function ( A, I, B ) - local M, act; - M := MultiplierAlgebraOfIdealBySubalgebra( A, I, B ); - act := MultiplierHomomorphism( M ); - SetIsAlgebraAction( act, true ); - SetAlgebraActionType( act, "multiplier" ); - SetHasZeroModuleProduct( act, false ); - return act; -end ); - ############################################################################# ## #M SemidirectProductOfAlgebras( , , ) @@ -716,8 +726,8 @@ InstallMethod( SemidirectProductOfAlgebras, imr,imu, # images of r,u under act ru,rv,su,sv, # 4 terms in a typical product L, # the non-zero entries in these positions - sym, # if both products are (anti)symmetric, then the result - # will have the same property. + sym, # if both products are (anti)symmetric, then the + # result will have the same property. P; # the answer is the semidirect product algebra F := LeftActingDomain( A1 ); diff --git a/tst/algebra.tst b/tst/algebra.tst index fdef223..12ec634 100644 --- a/tst/algebra.tst +++ b/tst/algebra.tst @@ -59,7 +59,7 @@ gap> vecM[3]; 6 over GF(5)> -> > ## Section 2.1.5 -gap> hom := MultiplierHomomorphism( MA5c6 );; +gap> hom := MultiplierHomomorphism( MA5c6 );; gap> ImageElm( hom, vecA[2] ); Basis( , [ (Z(5)^0)*(), (Z(5)^0)*(1,2,3,4,5,6), (Z(5)^0)*(1,3,5)(2,4,6), @@ -95,14 +95,27 @@ gap> m^2; gap> m^3; [ [ 0, 0, 0, 1 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ] gap> A1 := Algebra( Rationals, [m] );; +gap> SetName( A1, "A1" ); gap> A3 := Subalgebra( A1, [m^3] );; gap> nat3 := NaturalHomomorphismByIdeal( A1, A3 ); - -> > + > +gap> Q13 := Image( nat3 );; +gap> SetName( Q13, "Q13" ); +gap> Display(nat3); +LeftModuleHomomorphismByMatrix( Basis( A1, +[ [ [ 0, 0, 0, 1 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ], + [ [ 0, 1, 2, 3 ], [ 0, 0, 1, 2 ], [ 0, 0, 0, 1 ], [ 0, 0, 0, 0 ] ], + [ [ 0, 0, 1, 4 ], [ 0, 0, 0, 1 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ] ] ), +[ [ 0, 0 ], [ 1, 0 ], [ 0, 1 ] ], CanonicalBasis( Q13 ) ) gap> act3 := AlgebraActionBySurjection( nat3 );; -gap> a3 := Image( act3, BasisVectors( Basis( Image( nat3 ) ) )[1] );; -gap> [ Image( a3, m ) = m^2, Image( a3, m^2 ) = m^3 ]; -[ true, true ] +gap> B3 := Image( act3 );; +gap> bvB3 := BasisVectors( Basis( B3 ) );; +gap> b1 := bvB3[1];; b2 := bvB3[2];; +gap> [ Image(b1,m)=m^2, Image(b1,m^2)=m^3, Image(b1,m^3)=Zero(A1) ]; +[ true, true, true ] +gap> [ Image(b2,m)=m^3, b2=b1^2 ]; +[true, true ] ## Section 2.2.3 gap> P := SemidirectProductOfAlgebras( A5c6, actm, I5c6 ); @@ -120,6 +133,15 @@ gap> Projection( P, 1 ); [ (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), of ..., of ... ] +gap> P3 := SemidirectProductOfAlgebras( Q13, act3, A1 ); + +gap> Embedding( P3, 1 ); +[ v.1, v.2 ] -> [ v.1, v.2 ] +gap> Embedding( P3, 2 ); +[ [ [ 0, 1, 2, 3 ], [ 0, 0, 1, 2 ], [ 0, 0, 0, 1 ], [ 0, 0, 0, 0 ] ], + [ [ 0, 0, 1, 4 ], [ 0, 0, 0, 1 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ], + [ [ 0, 0, 0, 1 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ] ] -> +[ v.3, v.4, v.5 ] ## Section 2.3.1 gap> A2c6 := GroupRing( GF(2), Group( (1,2,3,4,5,6) ) );; diff --git a/tst/xmod.tst b/tst/xmod.tst index a7ac19d..00b801c 100644 --- a/tst/xmod.tst +++ b/tst/xmod.tst @@ -9,8 +9,11 @@ gap> SetInfoLevel( InfoXModAlg, 0 ); ## make this test independent of algebra.tst gap> m := [ [0,1,2,3], [0,0,1,2], [0,0,0,1], [0,0,0,0] ];; gap> A1 := Algebra( Rationals, [m] );; +gap> SetName( A1, "A1" ); gap> A3 := Subalgebra( A1, [m^3] );; gap> nat3 := NaturalHomomorphismByIdeal( A1, A3 );; +gap> Q13 := Image( nat3 );; +gap> SetName( Q13, "Q13" ); ## Chapter 4, Section 4.1.2 gap> F := GF(5);; @@ -72,10 +75,10 @@ gap> ## Section 4.1.5 gap> X3 := XModAlgebraBySurjection( nat3 );; gap> Display( X3 ); -Crossed module [..->..] :- -: Source algebra has generators: +Crossed module [A1->Q13] :- +: Source algebra A1 has generators: [ [ [ 0, 1, 2, 3 ], [ 0, 0, 1, 2 ], [ 0, 0, 0, 1 ], [ 0, 0, 0, 0 ] ] ] -: Range algebra has generators: +: Range algebra Q13 has generators: [ v.1, v.2 ] : Boundary homomorphism maps source generators to: [ v.1 ]