diff --git a/gap/structure.gi b/gap/structure.gi index 9919739..6e24126 100644 --- a/gap/structure.gi +++ b/gap/structure.gi @@ -463,56 +463,43 @@ end); # Group, so let's leave those methods out for now, and move on to quasigroups, # racks, and quandles. +OppHelper@ := function(Q, whichgens, cnstr) + local fam, elts, opp; + elts := List(whichgen(Q), q -> OppositeObj(q)); + fam := CollectionsFamily(OppositeFamily(ElementsFamily(FamilyObj(Q)))); + opp := cnstr(fam, elts); + if HasIsFinite(Q) then SetIsFinite(opp, IsFinite(Q)); fi; + return opp; +end; + + InstallMethod(Opposite, "for a left quasigroup", [IsLeftQuasigroup and HasGeneratorsOfLeftQuasigroup], - function (Q) - local fam, elts; - elts := List(GeneratorsOfLeftQuasigroup(Q), q -> OppositeObj(q)); - fam := CollectionsFamily(OppositeFamily(ElementsFamily(FamilyObj(Q)))); - return RightQuasigroupNC(fam, elts); -end); + Q -> OppHelper@(Q, GeneratorsOfLeftQuasigroup, RightQuasigroupNC) +); InstallMethod(Opposite, "for a left rack", [IsLeftRack and HasGeneratorsOfLeftQuasigroup], - function (Q) - local fam, elts; - elts := List(GeneratorsOfLeftQuasigroup(Q), q -> OppositeObj(q)); - fam := CollectionsFamily(OppositeFamily(ElementsFamily(FamilyObj(Q)))); - return RightRackNC(fam, elts); -end); + Q -> OppHelper@(Q, GeneratorsOfLeftQuasigroup, RightRackNC) +); InstallMethod(Opposite, "for a left quandle", [IsLeftQuandle and HasGeneratorsOfLeftQuasigroup], - function (Q) - local fam, elts; - elts := List(GeneratorsOfLeftQuasigroup(Q), q -> OppositeObj(q)); - fam := CollectionsFamily(OppositeFamily(ElementsFamily(FamilyObj(Q)))); - return RightQuandleNC(fam, elts); -end); + Q -> OppHelper@(Q, GeneratorsOfLeftQuasigroup, RightQuandleNC) +); InstallMethod(Opposite, "for a right quasigroup", [IsRightQuasigroup and HasGeneratorsOfRightQuasigroup], - function (Q) - local fam, elts; - elts := List(GeneratorsOfRightQuasigroup(Q), q -> OppositeObj(q)); - fam := CollectionsFamily(OppositeFamily(ElementsFamily(FamilyObj(Q)))); - return LeftQuasigroupNC(fam, elts); -end); + Q -> OppHelper@(Q, GeneratorsOfRightQuasigroup, LeftQuasigroupNC) +); InstallMethod(Opposite, "for a right rack", [IsRightRack and HasGeneratorsOfRightQuasigroup], - function (Q) - local fam, elts; - elts := List(GeneratorsOfRightQuasigroup(Q), q -> OppositeObj(q)); - fam := CollectionsFamily(OppositeFamily(ElementsFamily(FamilyObj(Q)))); - return LeftRackNC(fam, elts); -end); + Q -> OppHelper@(Q, GeneratorsOfRightQuasigroup, LeftRackNC) +); InstallMethod(Opposite, "for a right quandle", [IsRightQuandle and HasGeneratorsOfRightQuasigroup], - function (Q) - local fam, elts; - elts := List(GeneratorsOfRightQuasigroup(Q), q -> OppositeObj(q)); - fam := CollectionsFamily(OppositeFamily(ElementsFamily(FamilyObj(Q)))); - return LeftQuandleNC(fam, elts); -end); + Q -> OppHelper@(Q, GeneratorsOfRightQuasigroup, LeftQuandleNC) +); +