Let Q
be a right quasigroup with a parernt of size nP
. Right translations of right quasigroups and left translations of quasigroups are represented as parent permutations in RightQuasigroups, cf. Section 4.1. Consequently, such translations are elements of the symmetric group on [1..nP]
.
A left translation of a right quasigroup Q
is not necessarily a permutation and it is represented as a transformation on [1..nP]
that fixes all points outside of ParentInd( Q )
. Consequently, such translations are elements of the full transformation semigroup on [1..nP]
.
‣ RightTranslation ( Q, x ) | ( operation ) |
Returns: the right translation by the element x in the right quasigroup Q. We allow x to be an element of Q or an element of the underlying set of Q. The right translation is returned as a parent permutation, cf. Section 4.1.
‣ LeftTranslation ( Q, x ) | ( operation ) |
Returns: the left translation by the element x in the right quasigroup Q. We allow x to be an element of Q or an element of the underlying set of Q. If Q is a quasigroup, the translation is returned as a parent permutation, cf. Section 4.1. If Q is merely a right quasigroup, the left translation is returned as a transformation on [1..Size( Parent(
Q ) )]
, even if the left translation happens to be a permutation.
‣ RightSection ( Q ) | ( attribute ) |
‣ LeftSection ( Q ) | ( attribute ) |
Returns: the right (left) section of a right quasigroup Q
, i.e., the list of all right (left) translations by elements of Q
.
The right multiplication group \textrm{Mlt}_r(Q) of a right quasigroup Q is the permutation group generated by all right translations of Q. The left multiplication group \textrm{Mlt}_\ell(Q) of a left quasigroup Q is defined dually. The multiplication group \textrm{Mlt}(Q) of a quasigroup Q
is the permutation group generated by all left and right translations of Q.
If S is a subrightquasigroup of a right quasigroup Q, the relative right multiplication group of S in Q is the subgroup of \textrm{Mlt}_r(Q) generated by all right translations in Q by elements of S. Note that there is a difference betwee the relative right multiplication group of S in Q and the right multiplication group of S. The relative left multiplication group and the relative multiplication group of S in Q are defined analogously.
‣ RightMultiplicationGroup ( Q ) | ( attribute ) |
‣ LeftMultiplicationGroup ( Q ) | ( attribute ) |
‣ MultiplicationGroup ( Q ) | ( attribute ) |
Returns: the (right, left) multiplication group of the right quasigroup Q
as a subgroup of the symmetric group on the set [1..Size(Parent(Q))]
. For the left and two-sided versions, Q
must be a quasigroup. An effort is made to return the group with a precalculated small generating set.
‣ LeftMultiplicationSemigroup ( Q ) | ( attribute ) |
Returns: the left multiplication semigroup of the right quasigroup Q
as a subsemigroup of the full transformation semigroup on the set [1..Size(Parent(Q))]
. If Q
is a quasigorup, the function returns the group LeftMultiplicationGroup( Q )
.
‣ RelativeRightMultiplicationGroup ( Q, S ) | ( operation ) |
‣ RelativeLeftMultiplicationGroup ( Q, S ) | ( operation ) |
‣ RelativeMultiplicationGroup ( Q, S ) | ( operation ) |
Returns: the relative (right, left) multiplication group of a subrightquasigroup S
in the right quasigroup Q
. For the left an two-sided versions, Q
must be a quasigroup. An effort is made to return the group with a precalculated small generating set.
gap> Q := AsQuasigroup( Group( (1,2,3,4,5,6 ) ) );; gap> Size( RightMultiplicationGroup( Q ) ); 6 gap> S := Subquasigroup( Q, [ Q[(1,3,5)(2,4,6)] ] ); <associative quasigroup of size 3> gap> RightTranslation( S, (1,3,5)(2,4,6) ); (1,3,5) gap> LeftTranslation( S, (1,3,5)(2,4,6) ); (1,3,5) gap> Size( LeftMultiplicationGroup( S ) ); 3 gap> RelativeLeftMultiplicationGroup( Q, S ); Group([ (1,3,5)(2,4,6) ]) gap> LeftMultiplicationGroup( S ); Group([ (1,3,5) ]) gap> RelativeRightMultiplicationGroup( Q, S ); Group([ (1,3,5)(2,4,6) ]) gap> Size( MultiplicationGroup( Q ) ); 6
In loop theory, the mappings in the multiplication group that fix the identity element are called inner mappings. Certain standard inner mappings of loops make sense for quasigroups and right quasigroups, when written out as products of translations. We will call such mappings of right quasigroups inner mappings, too.
When Q is a right quasigroup and x,y\in Q, the right inner mapping determined by x and y is the permutation R(x,y) = R_{xy}^{-1} R_y R_x, where we compose mappings from right to left. The right inner mapping group of Q is the subgroup of the right multiplication group \textrm{Mlt}_r(Q) of Q generated by all right inner mappings. When Q is a loop, the right inner mapping group is the stabilizer of the neutral element of Q in \textrm{Mlt}_r(Q).
When Q is a quasigroup and x,y\in Q, the middle inner mapping determined by x is the permutation L(x)^{-1} R(x), and the left inner mapping determined by x and y is the permutation L(x,y) = L_{yx}^{-1} L_y L_x. The middle inner mapping group of Q is the subgroup of the multiplication group of Q generated by all middle inner mappings. The left inner mapping group of Q is the subgroup of the left multiplication group \textrm{Mlt}_\ell(Q) of Q generarted by all left inner mappings. When Q is a loop, the left inner mapping grup is the stabilizer of the neutral element of Q in \textrm{Mlt}_\ell(Q). Finally, the inner mapping group of Q is the subroup of the multiplication group \textrm{Mlt}(Q) of Q generated by all right, middle and left inner mappings. When Q is a loop, the inner mapping group is the stabilizer of the neutral element of Q in \textrm{Mlt}(Q).
‣ RightInnerMapping ( Q, x, y ) | ( operation ) |
‣ MiddleInnerMapping ( Q, x ) | ( operation ) |
‣ LeftInnerMapping ( Q, x, y ) | ( operation ) |
Returns: the right, middle and left inner mappings in Q
determined by x
(and y
). For the right inner mappings, Q
can be a right quasigroup. For the middle and left inner mappings, Q
must be a quasigroup.
‣ RightInnerMappingGroup ( Q ) | ( attribute ) |
‣ MiddleInnerMappingGroup ( Q ) | ( attribute ) |
‣ LeftInnerMappingGroup ( Q ) | ( attribute ) |
‣ InnerMappingGroup ( Q ) | ( attribute ) |
Returns: the (right, middle, left) inner mapping group of a quasigroup Q
. For the right inner mapping group, we alow Q
to be a right quasigroup.
gap> ct := [[1,2,3,4,5],[2,1,4,5,3],[3,5,1,2,4],[4,3,5,1,2],[5,4,2,3,1]];; gap> Q := LoopByCayleyTable( ct );; # not commutative gap> LeftInnerMapping( Q, Q.3, Q.3 ); (2,4,5) gap> L := LeftMultiplicationGroup( Q );; gap> LInn := LeftInnerMappingGroup( Q );; gap> [ Size( L ), Size( LInn ) ]; [ 120, 24 ] gap> (2,4,5) in L; true gap> LInn = Stabilizer( L, 1 ); true gap> RInn := RightInnerMappingGroup( Q );; gap> Size( RInn ); 24 gap> ForAll( Q, x -> ForAll( Q, y -> RightInnerMapping( Q, x, y ) in RInn ) ); true gap> LInn = RInn; true gap> Size( MiddleInnerMappingGroup( Q ) ); 12
For a right quasigroup (Q,\cdot), define the right positive displacement group \mathrm{Dis}_r^+(Q) =\langle R_xR_y^{-1}:x,y\in Q\rangle, the right negative displacement group \mathrm{Dis}_r^-(Q) =\langle R_x^{-1}R_y:x,y\in Q\rangle, and the right displacement group \mathrm{Dis}_r(Q) = \langle R_xR_y^{-1},R_x^{-1}R_y:x,y\in Q\rangle.
For a fixed e\in Q we then have \mathrm{Dis}_r^+(Q)=\langle R_eR_x^{-1}:x\in Q\rangle = \langle R_xR_e^{-1}:x\in Q\rangle and \mathrm{Dis}_r^-(Q)=\langle R_x^{-1}R_e:x\in Q\rangle = \langle R_e^{-1}R_x:x\in Q\rangle.
The left displacement groups are defined analogously for a left quasigroup (Q,\cdot) by \mathrm{Dis}_\ell^+(Q) =\langle L_xL_y^{-1}:x,y\in Q\rangle, \mathrm{Dis}_\ell^-(Q) =\langle L_x^{-1}L_y:x,y\in Q\rangle and \mathrm{Dis}_\ell(Q) = \langle L_xL_y^{-1},L_x^{-1}L_y:x,y\in Q\rangle.
For a fixed e\in Q we then have \mathrm{Dis}_\ell^+(Q)=\langle L_eL_x^{-1}:x\in Q\rangle = \langle L_xL_e^{-1}:x\in Q\rangle and \mathrm{Dis}_\ell^-(Q)=\langle L_x^{-1}L_e:x\in Q\rangle = \langle L_e^{-1}L_x:x\in Q\rangle.
‣ RightPosDisplacementGroup ( Q ) | ( attribute ) |
‣ RightNegDisplacementGroup ( Q ) | ( attribute ) |
‣ RightDisplacementGroup ( Q ) | ( attribute ) |
Returns: the various right displacement groups of the right quasigroup Q.
‣ LeftPosDisplacementGroup ( Q ) | ( attribute ) |
‣ LeftNegDisplacementGroup ( Q ) | ( attribute ) |
‣ LeftDisplacementGroup ( Q ) | ( attribute ) |
Returns: the various left displacement groups of the quasigroup Q.
‣ IsIsotopicToGroup ( Q ) | ( property ) |
Returns: true
if the quasigroup Q is isotopic to a group, else returns false
.
Note that a quasigroup (Q,\cdot) is isotopic to a group iff \mathrm{Dis}_\ell^+(Q) acts regularly on Q, in which case (Q,\cdot) is isotopic to \mathrm{Dis}_\ell^+(Q) (cf. Chapter 8).
‣ IsIsotopicToAbelianGroup ( Q ) | ( property ) |
Returns: true
if the quasigroup Q is isotopic to an abelian group, else returns false
.
gap> Q := QuasigroupByFunction( GF(5), \- ); <quasigroup of size 5> gap> RightPosDisplacementGroup( Q ); Group([ (1,2,3,5,4) ]) gap> LeftDisplacementGroup( Q ); Group([ (1,2,3,5,4) ]) gap> IsIsotopicToGroup( Q ); true gap> IsIsotopicToAbelianGroup( Q ); true
The multiplication group \mathrm{Mlt}(Q) of a loop Q is the permutation group generated by all left and right translations of Q, cf. 5.2. It is a difficult question in loop theory to determine which permutation groups can be realized as multiplication groups of loops. The following functions search for loops such that their multiplication group is contained in or equal to a given permutation group G
.
Since the emphasis here is on the multiplication groups, the results are returned not as loops but as right sections of loops, cf. 5.1. A right section sec
contained in the symmetric group on [1..n]
can then be converted to a loop by the command LoopByRightSection( [1..n], sec )
.
There are two optional parameters in the searches.
One can speed up the search by setting the argument depth
higher; the price is a much bigger memory consumption. The value of depth
is automatically and optimally chosen if in the permutation group G
there are "not many" permutations fixing depth
elements. The optional argument depth
can be ommmitted, or set to depth=2
with no harm.
The second optional argument infolevel
determines the amount of information reported during the search. With infolevel=0
, no information is reported. With infolevel=1
, information on timing and hits is reported. With infolevel=2
, intermediate results are printed as well.
‣ AllLoopsWithMltInGroup ( G[, depth[, infolevel]] ) | ( operation ) |
Returns: a (possibly empty) list of right sections of all loops Q such that \mathrm{Mlt}(Q)\le G. Returns fail
is something is wrong with the arguments.
‣ AllNonassociativeLoopsWithMltInGroup ( G[, depth[, infolevel]] ) | ( operation ) |
Returns: a (possibly empty) list of right sections of all nonassociative loops Q such that \mathrm{Mlt}(Q)\le G. Returns fail
if something is wrong with the arguments.
‣ OneLoopWithMltInGroup ( G[, depth[, infolevel]] ) | ( operation ) |
Returns: a list that is either empty or contains the right section of a loop Q such that \mathrm{Mlt}(Q)\le G. Returns fail
if something is wrong with the arguments.
‣ OneNonassociativeLoopWithMltInGroup ( G[, depth[, infolevel]] ) | ( operation ) |
Returns: a list that is either empty or contains the right section of a nonassociative loop Q such that \mathrm{Mlt}(Q)\le G. Returns fail
if something is wrong with the arguments.
‣ AllLoopsWithMltGroup ( G[, depth[, infolevel]] ) | ( operation ) |
Returns: a (possibly empty) list of right sections of all loops Q such that \mathrm{Mlt}(Q)=G. Returns fail
if something is wrong with the arguments.
‣ OneLoopWithMltGroup ( G[, depth[, infolevel]] ) | ( operation ) |
Returns: a list that is either empty or contains the right section of a loop Q such that \mathrm{Mlt}(Q)=G. Returns fail
if something is wrong with the arguments.
gap> G := AlternatingGroup( 6 );; gap> OneLoopWithMltGroup( G, 2, 0 ); [ [ (), (1,2)(3,4,5,6), (1,3)(2,4,6,5), (1,4)(2,5,3,6), (1,5)(2,6,4,3), (1,6)(2,3,5,4) ] ] gap> Q := LoopByRightSection( [1..6], last[ 1 ] ); <loop of size 6> gap> MultiplicationGroup( Q ) = G; true gap> AllLoopsWithMltInGroup( SymmetricGroup( 4 ), 2, 0); [ [ (), (1,2)(3,4), (1,3)(2,4), (1,4)(2,3) ], [ (), (1,2)(3,4), (1,3,2,4), (1,4,2,3) ], [ (), (1,2,3,4), (1,3)(2,4), (1,4,3,2) ] ] gap> a := AllLoopsWithMltInGroup( PGL(3,3), 3, 0 );; Size(a); 56 gap> a := AllLoopsWithMltGroup(PGL(3,3), 3, 0);; Size(a); 52
generated by GAPDoc2HTML