Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 Bib Ind
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 

7 Properties of right quasigroups, quasigroups and loops
 7.1 Parser
 7.2 Properties of magmas
 7.3 Properties of right quasigroups
 7.4 Properties of quasigroups
 7.5 Inverse properties of loops
 7.6 Loops of Bol-Moufang type
 7.7 Power alternative loops
 7.8 Conjugacy closed loops and Osborn loops
 7.9 Additional varieties of loops

7 Properties of right quasigroups, quasigroups and loops

In this chapter we present functions that check various properties of right quasigroups, quasigroups and loops, some on the level of magmas. Any identity of right quasigroups, quasigroups and loops can be verified or refuted with the custom-built parser. Specific (and typically faster) methods are provided for many identities and properties of right quasigroups, and we recommend using them, rather than the generic parser method, whenever possible.

7.1 Parser

RightQuasigroups contains a simple, custom-built parser for parsing of right quasigroup, quasigroup and loop terms and for verification of right quasigroup, quasigroup and loop identities. For the purposes of the parser:

7.1-1 Building terms from strings
‣ RightQuasigroupTermFromString( s )( operation )
‣ QuasigroupTermFromString( s )( operation )
‣ LoopTermFromString( s )( operation )

Returns: the right quasigroup (quasigroup, loop) term corresponding to the string s. The term is returned as a structured list mimicking the infix tree for the term.

It is possible to verify identities directly in GAP. For instance, ForAll( Q, x -> ForAll( Q, y -> ForAll( Q, z -> x*(y*z) = (x*y)*z ) ) ) returns true iff Q is associative.

For the convenience of the user, we support checking of identities in right quasigroups, quasigroups and loops by the custom-built parser. Despite some effort to make the checking fast, it is about half as fast as the direct check using GAP code.

7.1-2 Verifying identities
‣ RightQuasigroupSatisfiesIdentity( Q, s )( operation )
‣ QuasigroupSatisfiesIdentity( Q, s )( operation )
‣ LoopSatisfiesIdentity( Q, s )( operation )

Returns: true if the right quasigroup (quasigroup, loop) Q satisfies the right quasigroup (quasigroup, loop) identity represented by the string s. If Q does not satisfy s, the function returns a list of variables of s and their values in Q that violate s.

gap> Q := AsLoop( CyclicGroup( 6 ) );;
gap> LoopSatisfiesIdentity( Q, "x*y=y*x" );
true
gap> LoopSatisfiesIdentity( Q, "x*x=1" );
[ [ 'x', lf1 ] ]
gap> RightQuasigroupTermFromString("x*(y/z)");
[ 24, '*', [ 25, '/', 26 ] ]
gap> QuasigroupTermFromString("(a|b)/(c*d)"); # note the symbol | for left division
[ [ 1, '|', 2 ], '/', [ 3, '*', 4 ] ]

7.1-3 *How evaluation of identities with the parser works

To speed up evaluation of identities, the parser produces terms in which variables have been replaced by their positions in the global variable string RQ_parserVarNames = "abcedfghijklmnopqrstuvwxyz". The current values of all variables are stored in the global list RQ_parserVars of length 26. The current value of the neutral element is stored in the global variable RQ_parserOne. A term t produced by RightQuasigroupTermFromString, QuasigroupTermFromString or LoopTermFromString is then evaluated via RQ_EvaluateTerm( t ).

7.2 Properties of magmas

The following list summarizes (mostly equational) properties of magmas tested in RightQuasigroups. All identities are universally quantified with respect to all variables.

Some of these methods for magmas are already available in GAP, e.g., IsCommutative. In such a case, we provide a new method for right quasigroups that takes advantage of right translations as permutations.

7.2-1 Testing properties of magmas and right quasigroups
‣ Is3PowerAssociative( Q )( property )
‣ IsAlternative( Q )( property )
‣ IsAssociative( Q )( property )
‣ IsCommutative( Q )( property )
‣ IsDiassociative( Q )( property )
‣ IsFlexible( Q )( property )
‣ IsIdempotent( Q )( property )
‣ IsLeftAlternative( Q )( property )
‣ IsLeftSelfDistributive( Q )( property )
‣ IsPowerAssociative( Q )( property )
‣ IsRightAlternative( Q )( property )
‣ IsRightSelfDistributive( Q )( property )
‣ IsSelfDistributive( Q )( property )
‣ IsUnipotent( Q )( property )

Returns: true if Q is a magma with the property in the title of the function, else returns false

7.3 Properties of right quasigroups

7.3-1 IsFaithfulRightQuasigroup
‣ IsFaithfulRightQuasigroup( Q )( property )

Returns: true if Q is a faithful right quasigroup, that is, a right quasigroup for which the mapping x\mapsto R_x is injective.

7.3-2 IsProjectionRightQuasigroup
‣ IsProjectionRightQuasigroup( Q )( property )

Returns: true if Q is a projection right quasigroup, that is, a right quasigroup satisfying the identity xy=x.

7.4 Properties of quasigroups

7.4-1 IsSemisymmetric
‣ IsSemisymmetric( Q )( property )

Returns: true if Q is a semisymmetric quasigroup (that is, a quasigroup satisfying (x*y)*x=y for all x, y), else returns false.

7.4-2 IsTotallySymmetric
‣ IsTotallySymmetric( Q )( property )

Returns: true if Q is a totally symmetric quasigroup (that is, a quasigroup that is semisymmetric and commutative), else returns false.

7.4-3 IsSteinerQuasigroup
‣ IsSteinerQuasigroup( Q )( property )

Returns: true if Q is a Steiner quasigroup (that is, a quasigroup that is idempotent and totally symmetric), else returns false. We also support the synonym IsMedial.

7.4-4 IsEntropic
‣ IsEntropic( Q )( property )

Returns: true if Q is an entropic quasigroup (that is, a quasigroup satisfying (x*u)*(v*y) = (x*v)*(u*y) for all x, y, u, v), else returns false. We also support the synonym IsMedial.

7.5 Inverse properties of loops

In a loop Q with neutral element e, for every x\in Q there is a unique left inverse x^\ell of x satisfying x^\ell x = e and a unique right inverse x^r of x satisfying xx^r=e, cf. Section 1.5. If x^ell = x^r then the two-sided inverse of x is denoted by x^{-1}.

7.5-1 HasTwosidedInverses
‣ HasTwosidedInverses( Q )( property )

Returns: true if Q is a loop with two-sided inverses, else returns false.

7.5-2 Right and left inverse properties
‣ HasRightInverseProperty( Q )( property )
‣ HasLeftInverseProperty( Q )( property )
‣ HasInverseProperty( Q )( property )

Returns: true if the loop Q has the right inverse property (resp. left inverse property, inverse property), else returns false.

A loop Q has the right inverse property (resp. left inverse property) if (xy)y^r=x (resp. x^\ell(xy)=y) holds for all x,y\in Q. It has the inverse property if it is has the right inverse property and the left inverse property. In all three cases, the loop automatically has two-sided inverses.

7.5-3 HasWeakInverseProperty
‣ HasWeakInverseProperty( Q )( property )

Returns: true if the loop Q has the weak inverse property.

A loop Q has the weak inverse property if (xy)^\ell x = y^\ell holds for all x,y\in Q. The dual identity x(yx)^r = y^r is equivalent to the weak inverse property. A weak inverse property loop does not necessarily posses two-sided inverses.

7.5-4 Automorphic and antiautomorphic inverse properties
‣ HasAutomorphicInverseProperty( Q )( property )
‣ HasAntiautomorphicInverseProperty( Q )( property )

Returns: true if the loop Q has the automorphic inverse property (resp. antiautomorphic inverse property), else returns false.

A loop Q has the automorphic inverse property if (xy)^r = x^r y^r holds for all x,y\in Q (the dual identity (xy)^\ell = x^\ell y^\ell is equivalent to it in loops). An automorphic inverse property loop does not necessarily posses two-sided inverses. A loop Q has the antiautomorphic inverse property if (xy)^r = y^r x^r holds for all x,y\in Q (the dual identity (xy)^\ell = y^\ell x^\ell is equivalent to it in loops). An antiautomorphic inverse property loop automatically possesses two-sided inverses and the definining identity can therefore be restated as (xy)^{-1}=y^{-1}x^{-1}.

7.6 Loops of Bol-Moufang type

A loop identity is said to be of Bol-Moufang type if two of its three variables occur once on each side, the third variable occurs twice on each side, and the order in which the variables appear on both sides is the same, cf. ((xy)x)z=x(y(xz)). A variety of loops is of Bol-Moufang type if it is defined by a single identity of Bol-Moufang type. It can be shown that there are precisey 14 varieties of loops of Bol-Moufang type; the 11 varieties included in the list below plus the already introduced associative loops (aka groups), flexible loops, left alternative loops and right alternative loops.

Here are the 11 varieties of loops of Bol-Moufang type not yet introduced. In some cases there are several equivalent identities of Bol-Moufang type for the given variety but we only list one such identity.

7.6-1 Testing for loops of Bol-Moufang type
‣ IsCLoop( Q )( property )
‣ IsExtraLoop( Q )( property )
‣ IsLCLoop( Q )( property )
‣ IsLeftBolLoop( Q )( property )
‣ IsLeftNuclearSquareLoop( Q )( property )
‣ IsMiddleNuclearSquareLoop( Q )( property )
‣ IsMoufangLoop( Q )( property )
‣ IsRCLoop( Q )( property )
‣ IsRightBolLoop( Q )( property )
‣ IsRightNuclearSquareLoop( Q )( property )

Returns: true if the loop Q has the property in the title of the function, else returns false.

7.6-2 IsNuclearSquareLoop
‣ IsNuclearSquareLoop( Q )( property )

Returns: true if Q is a nuclear square loop (that is, a loop where the square of every element lies in the nucleus), else returns false. The variety of nuclear square loops is technically not of Bol-Moufang type, but can be obtained by interesecting varieties of Bol-Moufang type.

7.7 Power alternative loops

A loop Q is right power alternative (resp. left power alternative) if it is power associative and (xy^n)y^m = xy^{n+m} (resp. x^n(x^my) = x^{n+m}y) holds for all x,y\in Q and all integers n, m. A loop is power alternative if it is both right and left power alternative.

7.7-1 Testing for power alternative loops
‣ IsRightPowerAlternative( Q )( property )
‣ IsLeftPowerAlternative( Q )( property )
‣ IsPowerAlternative( Q )( property )

Returns: true if the loop Q is right power alternative (resp. left power alternative, power alternative), else returns false.

7.8 Conjugacy closed loops and Osborn loops

A loop Q is right conjugacy closed (aka RCC) if for all x,y\in Q the permutation R_x^{-1}R_yR_x is a right translation. Dually, Q is left conjugacy closed (aka LCC) if for all x,y\in Q the permutation L_x^{-1}L_yL_x is a left translation. A loop Q is conjugacy closed (aka CC) if it is both RCC and LCC.

7.8-1 Testing for conjugacy closed loops
‣ IsRightConjugacyClosedLoop( Q )( property )
‣ IsLeftConjugacyClosedLoop( Q )( property )
‣ IsConjugacyClosedLoop( Q )( property )

Returns: true or false

The synonyms IsRCCLoop, IsLCCLoop and IsCCLoop are also supported.

7.8-2 IsOsbornLoop
‣ IsOsbornLoop( Q )( property )

Returns: true if Q is an Osborn loop (that is, a loop satisfying y\backslash (x(zx)) = ((y/x)z)x), else returns false.

7.9 Additional varieties of loops

7.9-1 IsCodeLoop
‣ IsCodeLoop( Q )( property )

Returns: true if Q is a code loop, else returns false. A loop Q is a code loop if it a Moufang loop containing a central subloop Z of size 2 such that Q/Z is an elementary abelian 2-group.

7.9-2 IsSteinerLoop
‣ IsSteinerLoop( Q )( property )

Returns: true if Q is a Steiner loop, else retunrs false. A loop Q is a Steiner loop if it is an inverse property loop of exponent at most 2.

7.9-3 Bruck loops
‣ IsRightBruckLoop( Q )( property )
‣ IsLeftBruckLoop( Q )( property )

Returns: true if Q is a right Bruck loop (resp. left Bruck loop), else returns false.

A loop Q is a right Bruck loop (aka right K-loop) if it is right Bol an has the automorphic inverse property. A loop Q is a left Bruck loop (aka left K-loop) if it is left Bol and has the automorphic inverse property. The synonyms IsRightKLoop and IsLeftKLoop are also supported.

7.9-4 Automorphic loops
‣ IsRightAutomorphicLoop( Q )( property )
‣ IsMiddleAutomorphicLoop( Q )( property )
‣ IsLeftAutomorphicLoop( Q )( property )
‣ IsAutomorphicLoop( Q )( property )

Returns: true if Q is a right automorphic loop (resp. middle automorphic loop, left automorphic loop, automorphic loop), else returns false.

A loop Q is a right automorphic loop (aka right A-loop) if all right inner mapping of Q are automorphisms of Q. A loop Q is a middle automorphic loop (aka middle A-loop) if all its middle inner mappings are automorphisms of Q. A loop Q is a left automorphic loop (aka left A-loop) if all its left inner mappings are automorphisms of Q. A loop Q is an automorphic loop (aka A-loop) if all its inner mappings are automorphisms of Q.

The synonyms IsRightALoop, IsMiddleALoop, IsLeftALoop and IsALoop are also supported.

 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 
Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 Bib Ind

generated by GAPDoc2HTML