From 5cde15c8ee289e72273db6cd0af483eed3cffed2 Mon Sep 17 00:00:00 2001 From: Glen Whitney Date: Wed, 18 Oct 2017 21:55:52 +0200 Subject: [PATCH] Add specializations of the Opposite() operator. --- gap/structure.gi | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/gap/structure.gi b/gap/structure.gi index bc72f0c..9ace9cd 100644 --- a/gap/structure.gi +++ b/gap/structure.gi @@ -235,3 +235,31 @@ InstallMethod(RightPerms, function(fam) return List(TransposedMat(MultiplicationTable(fam)), x->PermList(x)); end); + +## Special case the Opposite function from LOOPS package, since the opposite +## of a left quasigroup is a right quasigroup and vice versa + +# Is there a way to do this just once for each direction? +InstallMethod(Opposite, "for left quasigroup", + [ IsLeftQuasigroup ], + L -> RightQuasigroupByMultiplicationTable( + TransposedMat(MultiplicationTable(L)) + ) +); + +InstallMethod(Opposite, "for left rack", + [ IsLeftRack ], + L -> RightRackByMultiplicationTableNC(TransposedMat(MultiplicationTable(L))) +); + +InstallMethod(Opposite, "for right quasigroup", + [ IsRightQuasigroup ], + L -> LeftQuasigroupByMultiplicationTable( + TransposedMat(MultiplicationTable(L)) + ) +); + +InstallMethod(Opposite, "for right rack", + [ IsRightRack ], + L -> LeftRackByMultiplicationTableNC(TransposedMat(MultiplicationTable(L))) +);