1#############################################################################
2##
3#W  classes.gd  Testing varieties [loops]
4##
5##
6#Y  Copyright (C)  2004,  G. P. Nagy (University of Szeged, Hungary),
7#Y                        P. Vojtechovsky (University of Denver, USA)
8##
9
10#############################################################################
11##  ASSOCIATIVITY, COMMUTATIVITY AND GENERALIZATIONS
12##  -------------------------------------------------------------------------
13
14DeclareProperty( "IsAssociative", IsLoop );
15DeclareProperty( "IsCommutative", IsQuasigroup );
16DeclareProperty( "IsPowerAssociative", IsQuasigroup );
17DeclareProperty( "IsDiassociative", IsQuasigroup );
18
19#############################################################################
20##  INVERSE PROPERTIES
21##  -------------------------------------------------------------------------
22
23DeclareProperty( "HasLeftInverseProperty", IsLoop );
24DeclareProperty( "HasRightInverseProperty", IsLoop );
25DeclareProperty( "HasInverseProperty", IsLoop );
26DeclareProperty( "HasWeakInverseProperty", IsLoop );
27DeclareProperty( "HasTwosidedInverses", IsLoop );
28DeclareProperty( "HasAutomorphicInverseProperty", IsLoop );
29DeclareProperty( "HasAntiautomorphicInverseProperty", IsLoop );
30
31#############################################################################
32##  PROPERTIES OF QUASIGROUPS
33##  -------------------------------------------------------------------------
34
35DeclareProperty( "IsSemisymmetric", IsQuasigroup );
36DeclareProperty( "IsTotallySymmetric", IsQuasigroup );
37DeclareProperty( "IsIdempotent", IsQuasigroup );
38DeclareProperty( "IsSteinerQuasigroup", IsQuasigroup );
39DeclareProperty( "IsUnipotent", IsQuasigroup );
40DeclareProperty( "IsLDistributive", IsQuasigroup );
41DeclareProperty( "IsRDistributive", IsQuasigroup );
42DeclareSynonymAttr( "IsLeftDistributive", IsLDistributive );
43DeclareSynonymAttr( "IsRightDistributive", IsRDistributive );
44#IsDistributive already declared in GAP
45DeclareProperty( "IsEntropic", IsQuasigroup );
46DeclareSynonymAttr( "IsMedial", IsEntropic );
47
48#############################################################################
49##  LOOPS OF BOL-MOUFANG TYPE
50##  -------------------------------------------------------------------------
51
52DeclareProperty( "IsExtraLoop", IsLoop );
53DeclareProperty( "IsMoufangLoop", IsLoop );
54DeclareProperty( "IsCLoop", IsLoop );
55DeclareProperty( "IsLeftBolLoop", IsLoop );
56DeclareProperty( "IsRightBolLoop", IsLoop );
57DeclareProperty( "IsLCLoop", IsLoop );
58DeclareProperty( "IsRCLoop", IsLoop );
59DeclareProperty( "IsLeftNuclearSquareLoop", IsLoop );
60DeclareProperty( "IsMiddleNuclearSquareLoop", IsLoop );
61DeclareProperty( "IsRightNuclearSquareLoop", IsLoop );
62DeclareProperty( "IsNuclearSquareLoop", IsLoop );
63DeclareProperty( "IsFlexible", IsQuasigroup );
64DeclareProperty( "IsLeftAlternative", IsQuasigroup );
65DeclareProperty( "IsRightAlternative", IsQuasigroup );
66DeclareProperty( "IsAlternative", IsQuasigroup );
67
68#############################################################################
69##  POWER ALTERNATIVE LOOPS
70##  -------------------------------------------------------------------------
71
72DeclareProperty( "IsLeftPowerAlternative", IsLoop );
73DeclareProperty( "IsRightPowerAlternative", IsLoop );
74DeclareProperty( "IsPowerAlternative", IsLoop );
75
76#############################################################################
77##  CC-LOOPS AND RELATED PROPERTIES
78##  -------------------------------------------------------------------------
79
80DeclareProperty( "IsLCCLoop", IsLoop );
81DeclareSynonymAttr( "IsLeftConjugacyClosedLoop", IsLCCLoop );
82DeclareProperty( "IsRCCLoop", IsLoop );
83DeclareSynonymAttr( "IsRightConjugacyClosedLoop", IsRCCLoop );
84DeclareProperty( "IsCCLoop", IsLoop );
85DeclareSynonymAttr( "IsConjugacyClosedLoop", IsCCLoop );
86DeclareProperty( "IsOsbornLoop", IsLoop );
87
88############################################################################
89##  ADDITIONAL VARIETIES OF LOOPS
90##  -------------------------------------------------------------------------
91
92DeclareProperty( "IsCodeLoop", IsLoop );
93DeclareProperty( "IsSteinerLoop", IsLoop );
94DeclareProperty( "IsLeftBruckLoop", IsLoop );
95DeclareSynonymAttr( "IsLeftKLoop", IsLeftBruckLoop );
96DeclareProperty( "IsRightBruckLoop", IsLoop );
97DeclareSynonymAttr( "IsRightKLoop", IsRightBruckLoop );
98DeclareProperty( "IsALoop", IsLoop );
99DeclareSynonymAttr( "IsAutomorphicLoop", IsALoop );
100DeclareProperty( "IsLeftALoop", IsLoop );
101DeclareSynonymAttr( "IsLeftAutomorphicLoop", IsLeftALoop );
102DeclareProperty( "IsMiddleALoop", IsLoop );
103DeclareSynonymAttr( "IsMiddleAutomorphicLoop", IsMiddleALoop );
104DeclareProperty( "IsRightALoop", IsLoop );
105DeclareSynonymAttr( "IsRightAutomorphicLoop", IsRightALoop );
106
107############################################################################
108##  IMPLICATIONS for InstallTrueMethod
109##  -------------------------------------------------------------------------
110
111# implies
112InstallTrueMethod( IsExtraLoop, IsAssociative and IsLoop );
113InstallTrueMethod( HasTwosidedInverses, IsPowerAssociative and IsLoop );
114InstallTrueMethod( IsPowerAlternative, IsDiassociative );
115InstallTrueMethod( IsFlexible, IsDiassociative );
116InstallTrueMethod( IsMoufangLoop, IsExtraLoop );
117InstallTrueMethod( IsCLoop, IsExtraLoop );
118InstallTrueMethod( IsLeftBolLoop, IsMoufangLoop );
119InstallTrueMethod( IsRightBolLoop, IsMoufangLoop );
120InstallTrueMethod( IsDiassociative, IsMoufangLoop );
121InstallTrueMethod( IsLCLoop, IsCLoop );
122InstallTrueMethod( IsRCLoop, IsCLoop );
123InstallTrueMethod( IsDiassociative, IsCLoop and IsFlexible);
124InstallTrueMethod( IsRightBolLoop, IsLeftBolLoop and IsCommutative );
125InstallTrueMethod( IsLeftPowerAlternative, IsLeftBolLoop );
126InstallTrueMethod( IsLeftBolLoop, IsRightBolLoop and IsCommutative );
127InstallTrueMethod( IsRightPowerAlternative, IsRightBolLoop );
128InstallTrueMethod( IsLeftPowerAlternative, IsLCLoop );
129InstallTrueMethod( IsLeftNuclearSquareLoop, IsLCLoop );
130InstallTrueMethod( IsMiddleNuclearSquareLoop, IsLCLoop );
131InstallTrueMethod( IsRCLoop, IsLCLoop and IsCommutative );
132InstallTrueMethod( IsRightPowerAlternative, IsRCLoop );
133InstallTrueMethod( IsRightNuclearSquareLoop, IsRCLoop );
134InstallTrueMethod( IsMiddleNuclearSquareLoop, IsRCLoop );
135InstallTrueMethod( IsLCLoop, IsRCLoop and IsCommutative );
136InstallTrueMethod( IsRightNuclearSquareLoop, IsLeftNuclearSquareLoop and IsCommutative );
137InstallTrueMethod( IsLeftNuclearSquareLoop, IsRightNuclearSquareLoop and IsCommutative );
138InstallTrueMethod( IsLeftNuclearSquareLoop, IsNuclearSquareLoop );
139InstallTrueMethod( IsRightNuclearSquareLoop, IsNuclearSquareLoop );
140InstallTrueMethod( IsMiddleNuclearSquareLoop, IsNuclearSquareLoop );
141InstallTrueMethod( IsRightAlternative, IsLeftAlternative and IsCommutative );
142InstallTrueMethod( IsLeftAlternative, IsRightAlternative and IsCommutative );
143InstallTrueMethod( IsLeftAlternative, IsAlternative );
144InstallTrueMethod( IsRightAlternative, IsAlternative );
145InstallTrueMethod( IsLeftAlternative, IsLeftPowerAlternative );
146InstallTrueMethod( HasLeftInverseProperty, IsLeftPowerAlternative );
147InstallTrueMethod( IsPowerAssociative, IsLeftPowerAlternative );
148InstallTrueMethod( IsRightAlternative, IsRightPowerAlternative );
149InstallTrueMethod( HasRightInverseProperty, IsRightPowerAlternative );
150InstallTrueMethod( IsPowerAssociative, IsRightPowerAlternative );
151InstallTrueMethod( IsLeftPowerAlternative, IsPowerAlternative );
152InstallTrueMethod( IsRightPowerAlternative, IsPowerAlternative );
153InstallTrueMethod( IsAssociative, IsLCCLoop and IsCommutative );
154InstallTrueMethod( IsExtraLoop, IsLCCLoop and IsMoufangLoop );
155InstallTrueMethod( IsAssociative, IsRCCLoop and IsCommutative );
156InstallTrueMethod( IsExtraLoop, IsRCCLoop and IsMoufangLoop );
157InstallTrueMethod( IsLCCLoop, IsCCLoop );
158InstallTrueMethod( IsRCCLoop, IsCCLoop );
159InstallTrueMethod( IsExtraLoop, IsCodeLoop );
160InstallTrueMethod( IsCCLoop, IsCodeLoop );
161InstallTrueMethod( IsCommutative, IsSteinerLoop );
162InstallTrueMethod( IsCLoop, IsSteinerLoop );
163InstallTrueMethod( HasAutomorphicInverseProperty, IsLeftBruckLoop );
164InstallTrueMethod( IsLeftBolLoop, IsLeftBruckLoop );
165InstallTrueMethod( IsRightBruckLoop, IsLeftBruckLoop and IsCommutative );
166InstallTrueMethod( HasAutomorphicInverseProperty, IsRightBruckLoop );
167InstallTrueMethod( IsRightBolLoop, IsRightBruckLoop );
168InstallTrueMethod( IsLeftBruckLoop, IsRightBruckLoop and IsCommutative );
169InstallTrueMethod( IsLeftALoop, IsALoop );
170InstallTrueMethod( IsRightALoop, IsALoop );
171InstallTrueMethod( IsMiddleALoop, IsALoop );
172InstallTrueMethod( IsLeftALoop, IsRightALoop and HasAntiautomorphicInverseProperty );
173InstallTrueMethod( IsRightALoop, IsLeftALoop and HasAntiautomorphicInverseProperty );
174InstallTrueMethod( IsFlexible, IsMiddleALoop );
175InstallTrueMethod( HasAntiautomorphicInverseProperty, IsFlexible and IsLeftALoop );
176InstallTrueMethod( HasAntiautomorphicInverseProperty, IsFlexible and IsRightALoop );
177InstallTrueMethod( IsMoufangLoop, IsALoop and IsLeftAlternative );
178InstallTrueMethod( IsMoufangLoop, IsALoop and IsRightAlternative );
179InstallTrueMethod( IsMoufangLoop, IsALoop and HasLeftInverseProperty );
180InstallTrueMethod( IsMoufangLoop, IsALoop and HasRightInverseProperty );
181InstallTrueMethod( IsMoufangLoop, IsALoop and HasWeakInverseProperty );
182
183# is implied by
184InstallTrueMethod( IsExtraLoop, IsMoufangLoop and IsLeftNuclearSquareLoop );
185InstallTrueMethod( IsExtraLoop, IsMoufangLoop and IsMiddleNuclearSquareLoop );
186InstallTrueMethod( IsExtraLoop, IsMoufangLoop and IsRightNuclearSquareLoop );
187InstallTrueMethod( IsMoufangLoop, IsLeftBolLoop and IsRightBolLoop );
188InstallTrueMethod( IsCLoop, IsLCLoop and IsRCLoop );
189InstallTrueMethod( IsNuclearSquareLoop, IsLeftNuclearSquareLoop
190        and IsRightNuclearSquareLoop and IsMiddleNuclearSquareLoop );
191InstallTrueMethod( IsFlexible, IsCommutative );
192InstallTrueMethod( IsAlternative, IsLeftAlternative and IsRightAlternative );
193InstallTrueMethod( IsCCLoop, IsLCCLoop and IsRCCLoop );
194InstallTrueMethod( IsOsbornLoop, IsMoufangLoop );
195InstallTrueMethod( IsOsbornLoop, IsCCLoop );
196InstallTrueMethod( IsLeftBruckLoop, IsLeftBolLoop and HasAutomorphicInverseProperty );
197InstallTrueMethod( IsRightBruckLoop, IsRightBolLoop and HasAutomorphicInverseProperty );
198InstallTrueMethod( IsMiddleALoop, IsCommutative and IsLoop);
199InstallTrueMethod( IsLeftALoop, IsLeftBruckLoop );
200InstallTrueMethod( IsLeftALoop, IsLCCLoop );
201InstallTrueMethod( IsRightALoop, IsRightBruckLoop );
202InstallTrueMethod( IsRightALoop, IsRCCLoop );
203InstallTrueMethod( IsALoop, IsCommutative and IsMoufangLoop );
204InstallTrueMethod( IsALoop, IsLeftALoop and IsMiddleALoop );
205InstallTrueMethod( IsALoop, IsRightALoop and IsMiddleALoop );
206InstallTrueMethod( IsALoop, IsAssociative and IsLoop);
207
208# implies and is implied by (for inverse properties)
209InstallTrueMethod( HasAntiautomorphicInverseProperty, HasAutomorphicInverseProperty and IsCommutative );
210InstallTrueMethod( HasAutomorphicInverseProperty, HasAntiautomorphicInverseProperty and IsCommutative );
211InstallTrueMethod( HasLeftInverseProperty, HasInverseProperty );
212InstallTrueMethod( HasRightInverseProperty, HasInverseProperty );
213InstallTrueMethod( HasWeakInverseProperty, HasInverseProperty );
214InstallTrueMethod( HasAntiautomorphicInverseProperty, HasInverseProperty );
215InstallTrueMethod( HasTwosidedInverses, HasAntiautomorphicInverseProperty );
216InstallTrueMethod( HasInverseProperty, HasLeftInverseProperty and IsCommutative );
217InstallTrueMethod( HasInverseProperty, HasRightInverseProperty and IsCommutative );
218InstallTrueMethod( HasInverseProperty, HasLeftInverseProperty and HasRightInverseProperty );
219InstallTrueMethod( HasInverseProperty, HasLeftInverseProperty and HasWeakInverseProperty );
220InstallTrueMethod( HasInverseProperty, HasRightInverseProperty and HasWeakInverseProperty );
221InstallTrueMethod( HasInverseProperty, HasLeftInverseProperty and HasAntiautomorphicInverseProperty );
222InstallTrueMethod( HasInverseProperty, HasRightInverseProperty and HasAntiautomorphicInverseProperty );
223InstallTrueMethod( HasInverseProperty, HasWeakInverseProperty and HasAntiautomorphicInverseProperty );
224InstallTrueMethod( HasTwosidedInverses, HasLeftInverseProperty );
225InstallTrueMethod( HasTwosidedInverses, HasRightInverseProperty );
226InstallTrueMethod( HasTwosidedInverses, IsFlexible and IsLoop );
227