1############################################################################# 2## 3#W quasigroups.gd Representing, creating and displaying quasigroups [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## GAP CATEGORIES AND REPRESENTATIONS 12## ------------------------------------------------------------------------- 13 14## element of a quasigroup 15DeclareCategory( "IsQuasigroupElement", IsMultiplicativeElement ); 16DeclareRepresentation( "IsQuasigroupElmRep", 17 IsPositionalObjectRep and IsMultiplicativeElement, [1] ); 18 19## element of a loop 20DeclareCategory( "IsLoopElement", 21 IsQuasigroupElement and IsMultiplicativeElementWithInverse ); 22DeclareRepresentation( "IsLoopElmRep", 23 IsPositionalObjectRep and IsMultiplicativeElementWithInverse, [1] ); 24 25## latin (auxiliary category for GAP to tell apart IsMagma and IsQuasigroup) 26DeclareCategory( "IsLatinMagma", IsObject ); 27 28## quasigroup 29DeclareCategory( "IsQuasigroup", IsMagma and IsLatinMagma ); 30 31## loop 32DeclareCategory( "IsLoop", IsQuasigroup and IsMultiplicativeElementWithInverseCollection); 33 34############################################################################# 35## TESTING MULTIPLICATION TABLES 36## ------------------------------------------------------------------------- 37 38DeclareOperation( "IsQuasigroupTable", [ IsMatrix ] ); 39DeclareSynonym( "IsQuasigroupCayleyTable", IsQuasigroupTable ); 40DeclareOperation( "IsLoopTable", [ IsMatrix ] ); 41DeclareSynonym( "IsLoopCayleyTable", IsLoopTable ); 42DeclareOperation( "CanonicalCayleyTable", [ IsMatrix ] ); 43DeclareOperation( "NormalizedQuasigroupTable", [ IsMatrix ] ); 44 45############################################################################# 46## CREATING QUASIGROUPS AND LOOPS MANUALLY 47## ------------------------------------------------------------------------- 48 49DeclareAttribute( "CayleyTable", IsQuasigroup ); 50DeclareOperation( "QuasigroupByCayleyTable", [ IsMatrix ] ); 51DeclareOperation( "LoopByCayleyTable", [ IsMatrix ] ); 52DeclareOperation( "SetQuasigroupElmName", [ IsQuasigroup, IsString ] ); 53DeclareSynonym( "SetLoopElmName", SetQuasigroupElmName ); 54DeclareOperation( "CanonicalCopy", [ IsQuasigroup ] ); 55 56############################################################################# 57## CREATING QUASIGROUPS AND LOOPS FROM A FILE 58## ------------------------------------------------------------------------- 59 60DeclareOperation( "QuasigroupFromFile", [ IsString, IsString ] ); 61DeclareOperation( "LoopFromFile", [ IsString, IsString ] ); 62 63############################################################################# 64## CREATING QUASIGROUPS AND LOOPS BY SECTIONS 65## ------------------------------------------------------------------------- 66 67DeclareOperation( "CayleyTableByPerms", [ IsPermCollection ] ); 68DeclareOperation( "QuasigroupByLeftSection", [ IsPermCollection ] ); 69DeclareOperation( "LoopByLeftSection", [ IsPermCollection ] ); 70DeclareOperation( "QuasigroupByRightSection", [ IsPermCollection ] ); 71DeclareOperation( "LoopByRightSection", [ IsPermCollection ] ); 72DeclareOperation( "QuasigroupByRightFolder", [ IsGroup, IsGroup, IsMultiplicativeElementCollection ] ); 73DeclareOperation( "LoopByRightFolder", [ IsGroup, IsGroup, IsMultiplicativeElementCollection ] ); 74 75############################################################################# 76## CONVERSIONS 77## ------------------------------------------------------------------------- 78 79DeclareOperation( "IntoQuasigroup", [ IsMagma ] ); 80DeclareOperation( "PrincipalLoopIsotope", 81 [ IsQuasigroup, IsQuasigroupElement, IsQuasigroupElement ] ); 82DeclareOperation( "IntoLoop", [ IsMagma ] ); 83DeclareOperation( "IntoGroup", [ IsMagma ] ); 84 85############################################################################# 86## PRODUCTS OF QUASIGROUPS AND LOOPS 87## -------------------------------------------------------------------------- 88 89#DirectProduct already declared for groups. 90 91############################################################################# 92## OPPOSITE QUASIGROUPS AND LOOPS 93## -------------------------------------------------------------------------- 94 95DeclareOperation( "OppositeQuasigroup", [ IsQuasigroup ] ); 96DeclareOperation( "OppositeLoop", [ IsLoop ] ); 97DeclareAttribute( "Opposite", IsQuasigroup ); 98 99############################################################################# 100## AUXILIARY 101## -------------------------------------------------------------------------- 102DeclareGlobalFunction( "LOOPS_ReadCayleyTableFromFile" ); 103DeclareGlobalFunction( "LOOPS_CayleyTableByRightFolder" ); 104