<h3>7 <span class="Heading">Testing Properties of Quasigroups and Loops</span></h3>
<p>Although loops are quasigroups, it is often the case in the literature that a property of the same name can differ for quasigroups and loops. For instance, a Steiner loop is not necessarily a Steiner quasigroup.</p>
<p>To avoid such ambivalences, we often include the noun <code class="code">Loop</code> or <code class="code">Quasigroup</code> as part of the name of the property, e.g., <code class="code">IsSteinerQuasigroup</code> versus <code class="code">IsSteinerLoop</code>.</p>
<p>On the other hand, some properties coincide for quasigroups and loops and we therefore do not include <code class="code">Loop</code>, <code class="code">Quasigroup</code> as part of the name of the property, e.g., <code class="code">IsCommutative</code>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsPowerAssociative</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if <var class="Arg">Q</var> is a power associative quasigroup.</p>
<p>A quasigroup <span class="SimpleMath">Q</span> is said to be <em>power associative</em> if every element of <span class="SimpleMath">Q</span> generates an associative quasigroup, that is, a group.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsDiassociative</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if <var class="Arg">Q</var> is a diassociative quasigroup.</p>
<p>A quasigroup <span class="SimpleMath">Q</span> is said to be <em>diassociative</em> if any two elements of <span class="SimpleMath">Q</span> generate an associative quasigroup, that is, a group. Note that a diassociative quasigroup is necessarily a loop, but it need not be so declared in <strong class="pkg">LOOPS</strong>.</p>
<p>For an element <span class="SimpleMath">x</span> of a loop <span class="SimpleMath">Q</span>, the <em>left inverse</em> of <span class="SimpleMath">x</span> is the element <span class="SimpleMath">x^λ</span> of <span class="SimpleMath">Q</span> such that <span class="SimpleMath">x^λ ⋅ x = 1</span>, while the <em>right inverse</em> of <span class="SimpleMath">x</span> is the element <span class="SimpleMath">x^ρ</span> of <span class="SimpleMath">Q</span> such that <span class="SimpleMath">x⋅ x^ρ = 1</span>.</p>
<h5>7.2-1 <span class="Heading">HasLeftInverseProperty, HasRightInverseProperty and HasInverseProperty</span></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HasLeftInverseProperty</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HasRightInverseProperty</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HasInverseProperty</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if a loop <var class="Arg">Q</var> has the left inverse property, right inverse property, resp. inverse property.</p>
<p>A loop <span class="SimpleMath">Q</span> has the <em>left inverse property</em> if <span class="SimpleMath">x^λ(xy)=y</span> for every <span class="SimpleMath">x</span>, <span class="SimpleMath">y</span> in <span class="SimpleMath">Q</span>. Dually, <span class="SimpleMath">Q</span> has the <em>right inverse property</em> if <span class="SimpleMath">(yx)x^ρ=y</span> for every <span class="SimpleMath">x</span>, <span class="SimpleMath">y</span> in <span class="SimpleMath">Q</span>. If <span class="SimpleMath">Q</span> has both the left inverse property and the right inverse property, it has the <em>inverse property</em>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HasTwosidedInverses</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if a loop <var class="Arg">Q</var> has two-sided inverses.</p>
<p>A loop <span class="SimpleMath">Q</span> is said to have <em>two-sided inverses</em> if <span class="SimpleMath">x^λ=x^ρ</span> for every <span class="SimpleMath">x</span> in <span class="SimpleMath">Q</span>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HasWeakInverseProperty</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if a loop <var class="Arg">Q</var> has the weak inverse property.</p>
<p>A loop <span class="SimpleMath">Q</span> has the <em>weak inverse property</em> if <span class="SimpleMath">(xy)^λ x = y^λ</span> (equivalently, <span class="SimpleMath">x(yx)^ρ = y^ρ</span>) holds for every <span class="SimpleMath">x</span>, <span class="SimpleMath">y</span> in <span class="SimpleMath">Q</span>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HasAutomorphicInverseProperty</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if a loop <var class="Arg">Q</var> has the automorphic inverse property.</p>
<p>According to <a href="chapBib.html#biBAr">[Art59]</a>, a loop <span class="SimpleMath">Q</span> has the <em>automorphic inverse property</em> if <span class="SimpleMath">(xy)^λ = x^λ y^λ</span>, or, equivalently, <span class="SimpleMath">(xy)^ρ = x^ρ y^ρ</span> holds for every <span class="SimpleMath">x</span>, <span class="SimpleMath">y</span> in <span class="SimpleMath">Q</span>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HasAntiautomorphicInverseProperty</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if a loop <var class="Arg">Q</var> has the antiautomorphic inverse property.</p>
<p>A loop <span class="SimpleMath">Q</span> has the <em>antiautomorphic inverse property</em> if <span class="SimpleMath">(xy)^λ=y^λ x^λ</span>, or, equivalently, <span class="SimpleMath">(xy)^ρ = y^ρ x^ρ</span> holds for every <span class="SimpleMath">x</span>, <span class="SimpleMath">y</span> in <span class="SimpleMath">Q</span>.<br /></p>
<p>See Appendix <a href="chapB.html#X84EFA4C07D4277BB"><span class="RefLink">B</span></a> for implications implemented in <strong class="pkg">LOOPS</strong> among various inverse properties.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsSemisymmetric</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if <var class="Arg">Q</var> is a semisymmetric quasigroup.</p>
<p>A quasigroup <span class="SimpleMath">Q</span> is <em>semisymmetric</em> if <span class="SimpleMath">(xy)x=y</span>, or, equivalently <span class="SimpleMath">x(yx)=y</span> holds for every <span class="SimpleMath">x</span>, <span class="SimpleMath">y</span> in <span class="SimpleMath">Q</span>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsTotallySymmetric</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if <var class="Arg">Q</var> is a totally symmetric quasigroup.</p>
<p>A commutative semisymmetric quasigroup is called <em>totally symmetric</em>. Totally symmetric quasigroups are precisely the quasigroups satisfying <span class="SimpleMath">xy=xbackslash y = x/y</span>.</p>
<p>A quasigroup <span class="SimpleMath">Q</span> is <em>unipotent</em> if it satisfies <span class="SimpleMath">x^2=y^2</span> for every <span class="SimpleMath">x</span>, <span class="SimpleMath">y</span> in <span class="SimpleMath">Q</span>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsUnipotent</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if <var class="Arg">Q</var> is a unipotent quasigroup.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsLeftDistributive</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsRightDistributive</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsDistributive</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if <var class="Arg">Q</var> is a left distributive quasigroup, resp. a right distributive quasigroup, resp. a distributive quasigroup.</p>
<p>A quasigroup is <em>left distributive</em> if it satisfies <span class="SimpleMath">x(yz) = (xy)(xz)</span>, <em>right distributive</em> if it satisfies <span class="SimpleMath">(xy)z = (xz)(yz)</span>, and <em>distributive</em> if it is both left distributive and right distributive.</p>
<p><strong class="button">Remark:</strong> In order to be compatible with <strong class="pkg">GAP</strong>s terminology, we also support the synonyms <code class="code">IsLDistributive</code> and <code class="code">IsRDistributive</code> of <code class="code">IsLeftDistributive</code> and <code class="code">IsRightDistributive</code>, respectively.</p>
<h4>7.4 <span class="Heading">Loops of Bol Moufang Type</span></h4>
<p>Following <a href="chapBib.html#biBFe">[Fen69]</a> and <a href="chapBib.html#biBPhiVoj">[PV05]</a>, a variety of loops is said to be of <em>Bol-Moufang type</em> if it is defined by a single <em>identity of Bol-Moufang type</em>, i.e., by an identity that contains the same 3 variables on both sides, exactly one of the variables occurs twice on both sides, and the variables occur in the same order on both sides.</p>
<p>It is proved in <a href="chapBib.html#biBPhiVoj">[PV05]</a> that there are 13 varieties of nonassociative loops of Bol-Moufang type. These are:</p>
<ul>
<li><p><em>left alternative loops</em> defined by <span class="SimpleMath">x(xy) = (xx)y</span>,</p>
</li>
<li><p><em>right alternative loops</em> defined by <span class="SimpleMath">x(yy) = (xy)y</span>,</p>
</li>
<li><p><em>left nuclear square loops</em> defined by <span class="SimpleMath">(xx)(yz) = ((xx)y)z</span>,</p>
</li>
<li><p><em>middle nuclear square loops</em>defined by <span class="SimpleMath">x((yy)z) = (x(yy))z</span>,</p>
</li>
<li><p><em>right nuclear square loops</em> defined by <span class="SimpleMath">x(y(zz)) = (xy)(zz)</span>,</p>
</li>
<li><p><em>flexible loops</em> defined by <span class="SimpleMath">x(yx) = (xy)x</span>,</p>
</li>
<li><p><em>left Bol loops</em> defined by <span class="SimpleMath">x(y(xz)) = (x(yx))z</span>, always left alternative,</p>
</li>
<li><p><em>right Bol loops</em> defined by <span class="SimpleMath">x((yz)y) = ((xy)z)y</span>, always right alternative,</p>
</li>
<li><p><em>LC loops</em> defined by <span class="SimpleMath">(xx)(yz) = (x(xy))z</span>, always left alternative, left nuclear square and middle nuclear square,</p>
</li>
<li><p><em>RC loops</em> defined by <span class="SimpleMath">x((yz)z) = (xy)(zz)</span>, always right alternative, right nuclear square and middle nuclear square,</p>
</li>
<li><p><em>Moufang loops</em> defined by <span class="SimpleMath">(xy)(zx) = (x(yz))x</span>, always flexible, left Bol and right Bol,</p>
</li>
<li><p><em>C loops</em> defined by <span class="SimpleMath">x(y(yz)) = ((xy)y)z</span>, always LC and RC,</p>
</li>
<li><p><em>extra loops</em> defined by <span class="SimpleMath">x(y(zx)) = ((xy)z)x</span>, always Moufang and C.</p>
</li>
</ul>
<p>Note that although some of the defining identities are not of Bol-Moufang type, they are equivalent to a Bol-Moufang identity. Moreover, many varieties of loops of Bol-Moufang type can be defined by one of several equivalent identities of Bol-Moufang type.</p>
<p>There are also several varieties related to loops of Bol-Moufang type. A loop is said to be <em>alternative</em> if it is both left alternative and right alternative. A loop is <em>nuclear square</em> if it is left nuclear square, middle nuclear square and right nuclear square.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsLeftBolLoop</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if <var class="Arg">Q</var> is a left Bol loop.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsRightBolLoop</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if <var class="Arg">Q</var> is a right Bol loop.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsLeftAlternative</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if <var class="Arg">Q</var> is a left alternative quasigroup.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsRightAlternative</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if <var class="Arg">Q</var> is a right alternative quasigroup.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsAlternative</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if <var class="Arg">Q</var> is an alternative quasigroup.<br /></p>
<p>While listing the varieties of loops of Bol-Moufang type, we have also listed all inclusions among them. These inclusions are built into <strong class="pkg">LOOPS</strong> as filters. <br /></p>
<p>The following trivial example shows some of the implications and the naming conventions of <strong class="pkg">LOOPS</strong> at work:</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">L := LoopByCayleyTable( [ [ 1, 2 ], [ 2, 1 ] ] );</span>
<loop of order 2>
<span class="GAPprompt">gap></span> <span class="GAPinput">[ IsLeftBolLoop( L ), L ]</span>
[ true, <left Bol loop of order 2> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">[ HasIsLeftAlternativeLoop( L ), IsLeftAlternativeLoop( L ) ];</span>
[ true, true ]
<span class="GAPprompt">gap></span> <span class="GAPinput">[ HasIsRightBolLoop( L ), IsRightBolLoop( L ) ];</span>
[ false, true ]
<span class="GAPprompt">gap></span> <span class="GAPinput">L;</span>
<Moufang loop of order 2>
<span class="GAPprompt">gap></span> <span class="GAPinput">[ IsAssociative( L ), L ];</span>
[ true, <associative loop of order 2> ]
</pre></div>
<p>The analogous terminology for quasigroups of Bol-Moufang type is not standard yet, and hence is not supported in <strong class="pkg">LOOPS</strong> except for the situations explicitly noted above.</p>
<h4>7.5 <span class="Heading">Power Alternative Loops</span></h4>
<p>A loop is <em>left power alternative</em> if it is power associative and satisfies <span class="SimpleMath">x^n(x^m y) = x^n+my</span> for all elements <span class="SimpleMath">x</span>, <span class="SimpleMath">y</span> and all integers <span class="SimpleMath">m</span>, <span class="SimpleMath">n</span>. Similarly, a loop is <em>right power alternative</em> if it is power associative and satisfies <span class="SimpleMath">(x y^n)y^m = xy^n+m</span> for all elements <span class="SimpleMath">x</span>, <span class="SimpleMath">y</span> and all integers <span class="SimpleMath">m</span>, <span class="SimpleMath">n</span>. A loop is <em>power alternative</em> if it is both left power alternative and right power alternative.</p>
<p>Left power alternative loops are left alternative and have the left inverse property. Left Bol loops and LC loops are left power alternative.</p>
<h5>7.5-1 <span class="Heading">IsLeftPowerAlternative, IsRightPowerAlternative and IsPowerAlternative</span></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsLeftPowerAlternative</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsRightPowerAlternative</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsPowerAlternative</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if <var class="Arg">Q</var> is a left power alternative loop, resp. a right power alternative loop, resp. a power alternative loop.</p>
<h4>7.6 <span class="Heading">Conjugacy Closed Loops and Related Properties</span></h4>
<p>A loop <span class="SimpleMath">Q</span> is <em>left conjugacy closed</em> if the set of left translations of <span class="SimpleMath">Q</span> is closed under conjugation (by itself). Similarly, a loop <span class="SimpleMath">Q</span> is <em>right conjugacy closed</em> if the set of right translations of <span class="SimpleMath">Q</span> is closed under conjugation. A loop is <em>conjugacy closed</em> if it is both left conjugacy closed and right conjugacy closed. It is common to refer to these loops as LCC, RCC, and CC loops, respectively.</p>
<p>The equivalence LCC <span class="SimpleMath">+</span> RCC <span class="SimpleMath">=</span> CC is built into <strong class="pkg">LOOPS</strong>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsOsbornLoop</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if <var class="Arg">Q</var> is an Osborn loop.</p>
<p>A loop is <em>Osborn</em> if it satisfies <span class="SimpleMath">x(yz⋅ x)=(x^λbackslash y)(zx)</span>. Both Moufang loops and CC loops are Osborn.</p>
<p>A loop <span class="SimpleMath">Q</span> whose all left (resp. middle, resp. right) inner mappings are automorphisms of <span class="SimpleMath">Q</span> is known as a <em>left automorphic loop</em> (resp. <em>middle automorphic loop</em>, resp. <em>right automorphic loop</em>).</p>
<p>A loop <span class="SimpleMath">Q</span> is an <em>automorphic loop</em> if all inner mappings of <span class="SimpleMath">Q</span> are automorphisms of <span class="SimpleMath">Q</span>.</p>
<p>Automorphic loops are also known as <em>A loops</em>, and similar terminology exists for left, right and middle automorphic loops.</p>
<p>The following results hold for automorphic loops:</p>
<ul>
<li><p>automorphic loops are power associative <a href="chapBib.html#biBBrPa">[BP56]</a></p>
</li>
<li><p>in an automorphic loop <span class="SimpleMath">Q</span> we have <span class="SimpleMath">Nuc(Q) = Nuc_λ(Q) = Nuc_ρ(Q)≤ Nuc_μ(Q)</span> and all nuclei are normal <a href="chapBib.html#biBBrPa">[BP56]</a></p>
</li>
<li><p>a loop that is left automorphic and right automorphic satisfies the anti-automorphic inverse property and is automorphic <a href="chapBib.html#biBJoKiNaVo">[JKNV11]</a></p>
</li>
<li><p>diassociative automorphic loops are Moufang <a href="chapBib.html#biBKiKuPh">[KKP02]</a></p>
</li>
<li><p>automorphic loops of odd order are solvable <a href="chapBib.html#biBKiKuPhVo">[KKPV16]</a></p>
</li>
<li><p>finite commutative automorphic loops are solvable <a href="chapBib.html#biBGrKiNa">[GKN14]</a></p>
</li>
<li><p>commutative automorphic loops of order <span class="SimpleMath">p</span>, <span class="SimpleMath">2p</span>, <span class="SimpleMath">4p</span>, <span class="SimpleMath">p^2</span>, <spanclass="SimpleMath">2p^2</span>, <span class="SimpleMath">4p^2</span> (<span class="SimpleMath">p</span> an odd prime) are abelian groups <a href="chapBib.html#biBVoQRS">[Voj15]</a></p>
</li>
<li><p>commutative automorphic loops of odd prime power order are centrally nilpotent <a href="chapBib.html#biBJeKiVo">[JKV12]</a></p>
</li>
<li><p>for any prime <span class="SimpleMath">p</span>, there are <span class="SimpleMath">7</span> commutative automorphic loops of order <span class="SimpleMath">p^3</span> up to isomorphism <a href="chapBib.html#biBBaGrVo">[DBGV12]</a></p>
</li>
</ul>
<p>See the built-in filters and the survey <a href="chapBib.html#biBVoQRS">[Voj15]</a> for additional properties of automorphic loops.</p>
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.