Skip to content

Commit

Permalink
added operation AlgebraActionOnDirectSum
Browse files Browse the repository at this point in the history
  • Loading branch information
cdwensley committed Jul 1, 2024
1 parent c7cdbb9 commit 35200f3
Show file tree
Hide file tree
Showing 12 changed files with 730 additions and 413 deletions.
4 changes: 3 additions & 1 deletion CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# CHANGES to the 'XModAlg' package

## 1.25 -> 1.25dev (26/06/24)
## 1.25 -> 1.25dev (01/07/24)
* (01/07/24) renamed the actions and algebras in the tests/examples as
act1, act, ,,, and added AlgebraActionOnDirectSum
* (17/05/24) added operations for a module as an algebra,
revised XModAlgebraByModule
* (26/06/24) added AlgebraActionByHomomorphism,
Expand Down
2 changes: 1 addition & 1 deletion PackageInfo.g
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ SetPackageInfo( rec(
PackageName := "XModAlg",
Subtitle := "Crossed Modules and Cat1-Algebras",
Version := "1.25dev",
Date := "26/06/2024", # dd/mm/yyyy format
Date := "01/07/2024", # dd/mm/yyyy format
License := "GPL-2.0-or-later",

Persons := [
Expand Down
186 changes: 111 additions & 75 deletions doc/algebra.xml
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,16 @@ on an ideal <M>I</M> of <M>A</M>.

<Example>
<![CDATA[
gap> A5c6 := GroupRing( GF(5), Group( (1,2,3,4,5,6) ) );;
gap> vecA := BasisVectors( Basis( A5c6 ) );;
gap> v := vecA[1] + vecA[3] + vecA[5];
gap> A1 := GroupRing( GF(5), Group( (1,2,3,4,5,6) ) );;
gap> SetName( A1, "A1" );
gap> BA1 := BasisVectors( Basis( A1 ) );;
gap> v := BA1[1] + BA1[3] + BA1[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> v2 := vecA[2];
gap> I1 := Ideal( A1, [v] );;
gap> SetName( I1, "I1" );
gap> v1 := BA1[2];
(Z(5)^0)*(1,2,3,4,5,6)
gap> m2 := RegularAlgebraMultiplier( A5c6, I5c6, v2 );
gap> m1 := RegularAlgebraMultiplier( A1, I1, v1 );
[ (Z(5)^0)*()+(Z(5)^0)*(1,3,5)(2,4,6)+(Z(5)^0)*(1,5,3)(2,6,4),
(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) ] ->
[ (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),
Expand All @@ -75,7 +77,7 @@ gap> m2 := RegularAlgebraMultiplier( A5c6, I5c6, v2 );

<ManSection>
<Oper Name="IsAlgebraMultiplier"
Arg="m" />
Arg="mu" />
<Description>
This function tests the condition <M>\mu(ab) = (\mu a)b = a(\mu b)</M>
for all <M>a,b</M> in the basis for <M>A</M>.
Expand All @@ -84,16 +86,16 @@ for all <M>a,b</M> in the basis for <M>A</M>.

<Example>
<![CDATA[
gap> IsAlgebraMultiplier( m2 );
gap> IsAlgebraMultiplier( m1 );
true
gap> one := One( A5c6 );;
gap> L := List( vecA, v -> one );;
gap> m1 := LeftModuleHomomorphismByImages( A5c6, A5c6, vecA, L );
gap> one := One( A1 );;
gap> L1 := List( BA1, v -> one );;
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)
] -> [ (Z(5)^0)*(), (Z(5)^0)*(), (Z(5)^0)*(), (Z(5)^0)*(), (Z(5)^0)*(),
(Z(5)^0)*() ]
gap> IsAlgebraMultiplier( m1 );
gap> IsAlgebraMultiplier( h1 );
false
]]>
</Example>
Expand All @@ -111,17 +113,16 @@ form an algebra with product <M>\mu_b \circ \mu_{b'} = \mu_{bb'}</M>.

<Example>
<![CDATA[
gap> v3 := vecA[3];
gap> u1 := BA1[3];
(Z(5)^0)*(1,3,5)(2,4,6)
gap> B5c3 := Subalgebra( A5c6, [ v3 ] );;
gap> M := MultiplierAlgebraOfIdealBySubalgebra( A5c6, I5c6, B5c3 );
gap> S1 := Subalgebra( A3, [ u1 ] );;
gap> SetName( S1, "S1" );
gap> MS1 := MultiplierAlgebraOfIdealBySubalgebra( A1, I1, S1 );
<algebra of dimension 1 over GF(5)>
gap> vecM := BasisVectors( Basis( M ) );;
gap> vecM[1];
<linear mapping by matrix,
<two-sided ideal in <algebra-with-one of dimension 6 over GF(5)>, (dimension 2
)> -> <two-sided ideal in <algebra-with-one of dimension 6 over GF(5)>,
(dimension 2)>>
gap> SetName( MS1, "MS1" );
gap> BMS1 := BasisVectors( Basis( MS1 ) );;
gap> BMS1[1];
<linear mapping by matrix, I1 -> I1>
]]>
</Example>

Expand All @@ -138,10 +139,10 @@ This operation returns <C>MultiplierAlgebraOfIdealBySubalgebra(A,A,A);</C>.

<Example>
<![CDATA[
gap> MA5c6 := RegularAlgebraMultiplier( A5c6 );
gap> MA1 := MultiplierAlgebra( A1 );
<algebra of dimension 6 over GF(5)>
gap> vecM := BasisVectors( Basis( MA5c6 ) );;
gap> vecM[3];
gap> BMA1 := BasisVectors( Basis( MA1 ) );;
gap> BMA1[3];
<linear mapping by matrix, <algebra-with-one of dimension
6 over GF(5)> -> <algebra-with-one of dimension 6 over GF(5)>>
]]>
Expand All @@ -160,15 +161,14 @@ homomorphism from <M>B</M> to <M>M</M> mapping <M>b</M> to <M>\mu_b</M>.

<Example>
<![CDATA[
gap> hom := MultiplierHomomorphism( MA5c6 );;
gap> ImageElm( hom, vecA[2] );
Basis( <two-sided ideal in <algebra-with-one of dimension 6 over GF(5)>,
(dimension 2)>,
[ (Z(5)^0)*()+(Z(5)^0)*(1,3,5)(2,4,6)+(Z(5)^0)*(1,5,3)(2,6,4),
(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)
] ) ->
[ (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),
(Z(5)^0)*()+(Z(5)^0)*(1,3,5)(2,4,6)+(Z(5)^0)*(1,5,3)(2,6,4) ]
gap> hom1 := MultiplierHomomorphism( MA1 );;
gap> ImageElm( hom1, BA1[2] );
Basis( A1, [ (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)
] ) -> [ (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),
(Z(5)^0)*() ]
]]>
</Example>

Expand Down Expand Up @@ -214,6 +214,15 @@ the map <M>s \mapsto r \cdot s</M> is a vector space homomorphism,
but not in general an algebra homomorphism.
<P/>

<ManSection>
<Func Name="AlgebraAction"
Arg="args" />
<Description>
This global function calls one of the following operations,
depending on the arguments supplied.
</Description>

</ManSection>
<ManSection>
<Oper Name="AlgebraActionByMultipliers"
Arg="A I B" />
Expand All @@ -228,20 +237,21 @@ over the field <M>GF(5)</M>.
The ideal is generated by <M>v = () + (1,3,5)(2,4,6) + (1,5,3)(2,6,4)</M>.
The generator <M>r = (1,2,3,4,5,6)</M> acts on <M>v</M>
by multiplication to give the vector
<M>r \cdot v = (1,2,3,4,5,6) + (1,4)(2,5)(3,6) + (1,6,5,4,3,2)</M>.
<M>r \cdot v = (1,2,3,4,5,6) + (1,4)(2,5)(3,6) + (1,6,5,4,3,2)</M>,
as shown in <Ref Oper="AlgebraActionByHomomorphism"/>
</Description>
</ManSection>

<Example>
<![CDATA[
gap> A5c6 := GroupRing( GF(5), Group( (1,2,3,4,5,6) ) );;
gap> vecA := BasisVectors( Basis( A5c6 ) );;
gap> v := vecA[1] + vecA[3] + vecA[5];
gap> A1 := GroupRing( GF(5), Group( (1,2,3,4,5,6) ) );;
gap> BA1 := BasisVectors( Basis( A1 ) );;
gap> v := BA1[1] + BA1[3] + BA1[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, A5c6 );;
gap> actm2 := Image( actm, vecA[2] );;
gap> Image( actm2, v );
gap> I1 := Ideal( A1, [v] );;
gap> act1 := AlgebraActionByMultipliers( A1, I1, A1 );;
gap> act12 := Image( act1, BA1[2] );;
gap> Image( act12, 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)
]]>
</Example>
Expand All @@ -256,62 +266,69 @@ Then <M>B</M> acts on <M>A</M> by <M>b \cdot a = pa</M>
where <M>p \in (\theta^{-1}b)</M>.
Note that this action is well defined since
<M>\theta^{-1}b = \{ p+k ~|~ k \in \ker\theta \}</M>
and <M>(p+k)a = pa+ka = ca+0</M>.
and <M>(p+k)a = pa+ka = pa+0</M>.
<P/>
Continuing with the previous example,
we construct the quotient algebra <M>Q5c6 = A5c6/I5c6</M>,
and the natural homomorphism <M>\theta : A5c6 \to Q5c6</M>.
we construct the quotient algebra <M>Q3 = A3/I3</M>,
and the natural homomorphism <M>\theta : A3 \to Q3</M>.
The kernel of <M>\theta</M> is not contained in
the annihilator of <M>A5c6</M>, so an attempt to form the action fails.
the annihilator of <M>A3</M>, so an attempt to form the action fails.
<P/>
An alternative example involves a single-generator matrix algebra.
</Description>
</ManSection>

<Example>
<![CDATA[
gap> theta := NaturalHomomorphismByIdeal( A5c6, I5c6 );
gap> theta1 := NaturalHomomorphismByIdeal( A1, I1 );
<linear mapping by matrix, <algebra-with-one of dimension
6 over GF(5)> -> <algebra of dimension 4 over GF(5)>>
gap> List( vecA, v -> ImageElm( theta, v ) );
gap> List( BA1, v -> ImageElm( theta1, v ) );
[ v.1, v.2, v.3, v.4, (Z(5)^2)*v.1+(Z(5)^2)*v.3, (Z(5)^2)*v.2+(Z(5)^2)*v.4 ]
gap> actp := AlgebraActionBySurjection( theta );
gap> AlgebraActionBySurjection( theta1 );
kernel of hom is not in the annihilator of A
fail
gap> ## an example which does not fail:
gap> m := [ [0,1,2,3], [0,0,1,2], [0,0,0,1], [0,0,0,0] ];;
gap> m^2;
gap> m2 := [ [0,1,2,3], [0,0,1,2], [0,0,0,1], [0,0,0,0] ];;
gap> m2^2;
[ [ 0, 0, 1, 4 ], [ 0, 0, 0, 1 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ]
gap> m^3;
gap> m2^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 );
<linear mapping by matrix, A1 -> <algebra of dimension 2 over Ration\
gap> A2 := Algebra( Rationals, [m2] );;
gap> SetName( A2, "A2" );
gap> S2 := Subalgebra( A2, [m2^3] );;
gap> SetName( S2, "S2" );
gap> nat2 := NaturalHomomorphismByIdeal( A2, S2 );
<linear mapping by matrix, A2 -> <algebra of dimension 2 over Ration\
als>>
gap> Q13 := Image( nat3 );;
gap> SetName( Q13, "Q13" );
gap> Display(nat3);
LeftModuleHomomorphismByMatrix( Basis( A1,
gap> Q2 := Image( nat2 );;
gap> SetName( Q2, "Q2" );
gap> Display( nat2 );
LeftModuleHomomorphismByMatrix( Basis( A2,
[ [ [ 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> 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) ];
[ [ 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> [ Image(b1,m2)=m2^2, Image(b1,m2^2)=m2^3, Image(b1,m2^3)=Zero(A2) ];
[ true, true, true ]
gap> [ Image(b2,m)=m^3, b2=b1^2 ];
gap> [ Image(b2,m2)=m2^3, b2=b1^2 ];
[true, true ]
]]>
</Example>


<#Include Label="AlgebraActionByHomomorphism">

</Section>

<Section>

<Heading>Algebra modules</Heading>

<#Include Label="AlgebraModules">

<#Include Label="ModuleAsAlgebra">
Expand All @@ -322,6 +339,25 @@ gap> [ Image(b2,m)=m^3, b2=b1^2 ];

<#Include Label="AlgebraActionByModule">

</Section>

<Section>

<Heading>Actions on direct sums of algebras</Heading>

<#Include Label="DirectSumOfAlgebrasInfo">

<#Include Label="EmbeddingForDirectSumOfAlgebras">

<#Include Label="AlgebraActionOnDirectSum">

<#Include Label="DirectSumAlgebraActions">

</Section>

<Section>

<Heading>Other operations on algebras</Heading>

<ManSection>
<Oper Name="SemidirectProductOfAlgebras"
Expand Down Expand Up @@ -359,26 +395,26 @@ Continuing the example above,

<Example>
<![CDATA[
gap> P := SemidirectProductOfAlgebras( A5c6, actm, I5c6 );
gap> P1 := SemidirectProductOfAlgebras( A1, act1, I1 );
<algebra of dimension 8 over GF(5)>
gap> Embedding( P, 1 );
gap> Embedding( P1, 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)
] -> [ v.1, v.2, v.3, v.4, v.5, v.6 ]
gap> Embedding( P, 2 );
gap> Embedding( P1, 2 );
[ (Z(5)^0)*()+(Z(5)^0)*(1,3,5)(2,4,6)+(Z(5)^0)*(1,5,3)(2,6,4),
(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) ] ->
[ v.7, v.8 ]
gap> Projection( P, 1 );
gap> Projection( P1, 1 );
[ v.1, v.2, v.3, v.4, v.5, v.6, v.7, v.8 ] ->
[ (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),
<zero> of ..., <zero> of ... ]
gap> P3 := SemidirectProductOfAlgebras( Q13, act3, A1 );
<algebra of dimension 5 over Rationals>
gap> Embedding( P3, 1 );
gap> P2 := SemidirectProductOfAlgebras( Q2, act2, A2 );
Q2 |X A2
gap> Embedding( P2, 1 );
[ v.1, v.2 ] -> [ v.1, v.2 ]
gap> Embedding( P3, 2 );
gap> Embedding( P2, 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 ] ] ] ->
Expand Down
11 changes: 5 additions & 6 deletions doc/xmod.xml
Original file line number Diff line number Diff line change
Expand Up @@ -180,13 +180,12 @@ Continuing with the example in that section,

<Example>
<![CDATA[
gap> X3 := XModAlgebraBySurjection( nat3 );;
gap> Display( X3 );
Crossed module [A1->Q13] :-
: Source algebra A1 has generators:
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 ] ] ]
: Range algebra Q13 has generators:
: Range algebra Q2 has generators:
[ v.1, v.2 ]
: Boundary homomorphism maps source generators to:
[ v.1 ]
Expand Down
Loading

0 comments on commit 35200f3

Please sign in to comment.