Skip to content

Commit

Permalink
Merge pull request #29 from gap-packages/release-1.17
Browse files Browse the repository at this point in the history
added method for ImagesSource
  • Loading branch information
cdwensley authored Aug 29, 2018
2 parents 815a6b2 + fa3b48f commit 34372ed
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 47 deletions.
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# CHANGES to the 'XModAlg' package

## 1.16 -> 1.17
* (29/08/18) added method for ImagesSource at end of alg2map.gi
* (28/08/18) update examples to avoid travis failures

## 1.15 -> 1.16
Expand Down
46 changes: 24 additions & 22 deletions doc/xmod.xml
Original file line number Diff line number Diff line change
Expand Up @@ -368,33 +368,31 @@ which may have the attributes listed.
<![CDATA[
gap> Ac4 := GroupRing( GF(2), CyclicGroup(4) );
<algebra-with-one over GF(2), with 2 generators>
gap> SetName( Ac4, "GF2[c4]" );
gap> IAc4 := AugmentationIdeal( Ac4 );
<two-sided ideal in <algebra-with-one over GF(2), with 2 generators>,
(dimension 3)>
<two-sided ideal in GF2[c4], (dimension 3)>
gap> SetName( IAc4, "I(GF2[c4])" );
gap> XIAc4 := XModAlgebra( Ac4, IAc4 );
[ <two-sided ideal in <algebra-with-one of dimension 4 over GF(2)>,
(dimension 3)> -> <algebra-with-one of dimension 4 over GF(2)> ]
[ I(GF2[c4]) -> GF2[c4] ]
gap> Bk4 := GroupRing( GF(2), SmallGroup( 4, 2 ) );
<algebra-with-one over GF(2), with 2 generators>
gap> SetName( Bk4, "GF2[k4]" );
gap> IBk4 := AugmentationIdeal( Bk4 );
<two-sided ideal in <algebra-with-one over GF(2), with 2 generators>,
(dimension 3)>
<two-sided ideal in GF2[k4], (dimension 3)>
gap> SetName( IBk4, "I(GF2[k4])" );
gap> XIBk4 := XModAlgebra( Bk4, IBk4 );
[ <two-sided ideal in <algebra-with-one of dimension 4 over GF(2)>,
(dimension 3)> -> <algebra-with-one of dimension 4 over GF(2)> ]
[ I(GF2[k4]) -> GF2[k4] ]
gap> IAc4 = IBk4;
false
gap> homAB := AllHomsOfAlgebras( Ac4, Bk4 );;
gap> homIAIB := AllHomsOfAlgebras( IAc4, IBk4 );;
gap> mor := XModAlgebraMorphism( XIAc4, XIBk4, homIAIB[1], homAB[2] );
[[..] => [..]]
[[I(GF2[c4])->GF2[c4]] => [I(GF2[k4])->GF2[k4]]]
gap> Display( mor );
Morphism of crossed modules :-
: Source = [ <two-sided ideal in <algebra-with-one of dimension 4 over GF(2)>,
(dimension 3)> -> <algebra-with-one of dimension 4 over GF(2)> ]
: Range = [ <two-sided ideal in <algebra-with-one of dimension 4 over GF(2)>,
(dimension 3)> -> <algebra-with-one of dimension 4 over GF(2)> ]
: Source = [I(GF2[c4])->GF2[c4]]
: Range = [I(GF2[k4])->GF2[k4]]
: Source Homomorphism maps source generators to:
[ <zero> of ..., <zero> of ..., <zero> of ... ]
: Range Homomorphism maps range generators to:
Expand All @@ -405,7 +403,6 @@ gap> IsTotal( mor );
true
gap> IsSingleValued( mor );
true
]]>
</Example>

Expand Down Expand Up @@ -458,8 +455,8 @@ is called the image of <M>(\theta,\varphi)</M>.
Further, <M>\Im(\theta,\varphi)</M> is a subcrossed module of
<M>(S^{\prime},R^{\prime},\partial^{\prime})</M>.
<P/>
In our package, the image of a crossed module homomorphism
can be obtained by the command <C>Image2dAlgebraMapping</C>.
In this package, the image of a crossed module homomorphism
can be obtained by the command <C>ImagesSource</C>.
The operation <C>Sub2dAlgObject</C> is effectively used
for finding the kernel and image crossed modules
induced from a given crossed module homomorphism.
Expand Down Expand Up @@ -492,12 +489,17 @@ store the two algebra homomorphisms <M>\theta</M> and <M>\varphi</M>.

<Example>
<![CDATA[
gap> theta;
[ (Z(2)^0)*<identity> of ...+(Z(2)^0)*f2, (Z(2)^0)*f1+(Z(2)^0)*f2,
(Z(2)^0)*f2+(Z(2)^0)*f1*f2 ] -> [ <zero> of ..., <zero> of ...,
<zero> of ... ]
gap> phi := RangeHom( mor );
[ (Z(2)^0)*f1 ] -> [ (Z(2)^0)*<identity> of ... ]
gap> ic4 := One( Ac4 );;
gap> theta := SourceHom( mor );;
gap> e1 := ic4*c4.1 + ic4*c4.2;
(Z(2)^0)*f1+(Z(2)^0)*f2
gap> ImageElm( theta, e1 );
<zero> of ...
gap> phi := RangeHom( mor );;
gap> e2 := ic4*c4.1;
(Z(2)^0)*f1
gap> ImageElm( phi, e2 );
(Z(2)^0)*<identity> of ...
gap> IsInjective( mor );
false
gap> IsSurjective( mor );
Expand Down
23 changes: 21 additions & 2 deletions lib/alg2map.gi
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

##############################################################################
##
#M Make2dAlgebraMorphism( <src>, <rng>, <shom>, <rhom> ) . . . map between 2d-objects
#M Make2dAlgebraMorphism( <src>, <rng>, <shom>, <rhom> ) . . . 2d-object map
##
InstallMethod( Make2dAlgebraMorphism,
"for 2d-object, 2d-object, homomorphism, homomorphism", true,
Expand Down Expand Up @@ -39,7 +39,7 @@ end );

#############################################################################
##
#M IsPreXModAlgebraMorphism check that the diagram of algebra homs commutes
#M IsPreXModAlgebraMorphism check diagram of algebra homs commutes
##
InstallMethod( IsPreXModAlgebraMorphism,
"generic method for pre-crossed module homomorphisms",
Expand Down Expand Up @@ -700,3 +700,22 @@ InstallOtherMethod( IsBijective,
"method for a 2d-mapping", true, [ Is2dAlgebraMorphism ], 0,
map -> ( IsBijective( SourceHom( map ) )
and IsBijective( RangeHom( map ) ) ) );

#############################################################################
##
#M ImagesSource( <mor> ) . . . . for pre-xmod and pre-cat1 algebra morphisms
##
InstallOtherMethod( ImagesSource, "image of pre-xmod/cat1 algebra morphism",
true, [ Is2DimensionalMapping and Is2dAlgebraMorphism ], 0,
function( mor )

local Shom, Rhom, imS, imR, sub;

Shom := SourceHom( mor );
Rhom := RangeHom( mor );
imS := ImagesSource( Shom );
imR := ImagesSource( Rhom );
sub := Sub2dAlgebra( Range( mor ), imS, imR );
return sub;
end );

2 changes: 1 addition & 1 deletion lib/alg2obj.gi
Original file line number Diff line number Diff line change
Expand Up @@ -1148,7 +1148,7 @@ function( PM, Ssrc, Srng )
return fail;
fi;
if not IsIdeal( Prng, Srng ) then
Print( "Srng is not a ideal of Prng\n" );
Print( "Srng is not an ideal of Prng\n" );
return fail;
fi;
Pbdy := Boundary( PM );
Expand Down
2 changes: 1 addition & 1 deletion tst/cat1.tst
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ gap> SetInfoLevel( InfoXModAlg, 0 );

gap> ## make cat1.tst independent of xmod.tst
gap> Ak4 := GroupRing( GF(5), DihedralGroup(4) );;
gap> SetName( Ak4, "GF5[54]" );
gap> SetName( Ak4, "GF5[k4]" );
gap> IAk4 := AugmentationIdeal( Ak4 );;
gap> SetName( IAk4, "I(GF5[k4])" );
gap> XIAk4 := XModAlgebraByIdeal( Ak4, IAk4 );;
Expand Down
49 changes: 28 additions & 21 deletions tst/xmod.tst
Original file line number Diff line number Diff line change
Expand Up @@ -108,36 +108,35 @@ Crossed module [<e5>->GF(2^2)[k4]] :-
[ (Z(2)^0)*<identity> of ...+(Z(2)^0)*f1+(Z(2)^0)*f2+(Z(2)^0)*f1*f2 ]

gap> ############################
gap> ## Chapter 3, Section 3.2.1
gap> Ac4 := GroupRing( GF(2), CyclicGroup(4) );
gap> ## Chapter 3, Section 3.2.1
gap> c4 := CyclicGroup( 4 );;
gap> Ac4 := GroupRing( GF(2), c4 );
<algebra-with-one over GF(2), with 2 generators>
gap> SetName( Ac4, "GF2[c4]" );
gap> IAc4 := AugmentationIdeal( Ac4 );
<two-sided ideal in <algebra-with-one over GF(2), with 2 generators>,
(dimension 3)>
<two-sided ideal in GF2[c4], (dimension 3)>
gap> SetName( IAc4, "I(GF2[c4])" );
gap> XIAc4 := XModAlgebra( Ac4, IAc4 );
[ <two-sided ideal in <algebra-with-one of dimension 4 over GF(2)>,
(dimension 3)> -> <algebra-with-one of dimension 4 over GF(2)> ]
[ I(GF2[c4]) -> GF2[c4] ]
gap> Bk4 := GroupRing( GF(2), SmallGroup( 4, 2 ) );
<algebra-with-one over GF(2), with 2 generators>
gap> SetName( Bk4, "GF2[k4]" );
gap> IBk4 := AugmentationIdeal( Bk4 );
<two-sided ideal in <algebra-with-one over GF(2), with 2 generators>,
(dimension 3)>
<two-sided ideal in GF2[k4], (dimension 3)>
gap> SetName( IBk4, "I(GF2[k4])" );
gap> XIBk4 := XModAlgebra( Bk4, IBk4 );
[ <two-sided ideal in <algebra-with-one of dimension 4 over GF(2)>,
(dimension 3)> -> <algebra-with-one of dimension 4 over GF(2)> ]
[ I(GF2[k4]) -> GF2[k4] ]
gap> IAc4 = IBk4;
false
gap> homAB := AllHomsOfAlgebras( Ac4, Bk4 );;
gap> homIAIB := AllHomsOfAlgebras( IAc4, IBk4 );;
gap> mor := XModAlgebraMorphism( XIAc4, XIBk4, homIAIB[1], homAB[2] );
[[..] => [..]]
[[I(GF2[c4])->GF2[c4]] => [I(GF2[k4])->GF2[k4]]]
gap> Display( mor );

Morphism of crossed modules :-
: Source = [ <two-sided ideal in <algebra-with-one of dimension 4 over GF(2)>,
(dimension 3)> -> <algebra-with-one of dimension 4 over GF(2)> ]
: Range = [ <two-sided ideal in <algebra-with-one of dimension 4 over GF(2)>,
(dimension 3)> -> <algebra-with-one of dimension 4 over GF(2)> ]
: Source = [I(GF2[c4])->GF2[c4]]
: Range = [I(GF2[k4])->GF2[k4]]
: Source Homomorphism maps source generators to:
[ <zero> of ..., <zero> of ..., <zero> of ... ]
: Range Homomorphism maps range generators to:
Expand All @@ -160,16 +159,24 @@ gap> IsSubXModAlgebra( XIAc4, Xmor );
true
gap> ############################
gap> ## Chapter 3, Section 3.2.4
gap> theta := SourceHom( mor );
[ (Z(2)^0)*<identity> of ...+(Z(2)^0)*f2, (Z(2)^0)*f1+(Z(2)^0)*f2,
(Z(2)^0)*f2+(Z(2)^0)*f1*f2 ] -> [ <zero> of ..., <zero> of ...,
<zero> of ... ]
gap> phi := RangeHom( mor );
[ (Z(2)^0)*f1 ] -> [ (Z(2)^0)*<identity> of ... ]
gap> ic4 := One( Ac4 );;
gap> theta := SourceHom( mor );;
gap> e1 := ic4*c4.1 + ic4*c4.2;
(Z(2)^0)*f1+(Z(2)^0)*f2
gap> ImageElm( theta, e1 );
<zero> of ...
gap> phi := RangeHom( mor );;
gap> e2 := ic4*c4.1;
(Z(2)^0)*f1
gap> ImageElm( phi, e2 );
(Z(2)^0)*<identity> of ...
gap> IsInjective( mor );
false
gap> IsSurjective( mor );
false
gap> Image( mor );
Srng is not an ideal of Prng
fail
gap> STOP_TEST( "xmod.tst", 10000 );

############################################################################
Expand Down

1 comment on commit 34372ed

@olexandr-konovalov
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.