Skip to content

Commit ee0fcca

Browse files
Add IsomorphismSemigroup from Clifford smgp to SSS
1 parent 34d3dfd commit ee0fcca

1 file changed

Lines changed: 57 additions & 0 deletions

File tree

gap/attributes/isomorph.gi

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,3 +327,60 @@ function(S)
327327
UseIsomorphismRelation(H, G);
328328
return H;
329329
end);
330+
331+
InstallMethod(IsomorphismSemigroup,
332+
"for IsStrongSemilatticeOfSemigroups and a Clifford semigroup",
333+
[IsStrongSemilatticeOfSemigroups, IsSemigroup and IsFinite],
334+
function(filt, S)
335+
local A, idemps, n, D, N, L, classes, idemp, DC, H, map, SSS, i, j;
336+
# decomposes a finite Clifford semigroup S into a strong semilattice of
337+
# groups and returns an SSS object.
338+
if not (IsCliffordSemigroup(S) and IsFinite(S)) then
339+
TryNextMethod();
340+
fi;
341+
# There should be one idempotent per D-class, i.e. per semilattice element
342+
# since the semilattice decomposition is by J-classes, and J = D here
343+
A := Semigroup(Idempotents(S));
344+
idemps := Elements(A);
345+
n := Size(idemps);
346+
347+
# create semilattice
348+
D := DigraphReflexiveTransitiveReduction(Digraph(NaturalPartialOrder(A)));
349+
# currently wrong way round
350+
D := DigraphReverse(D);
351+
N := OutNeighbours(D);
352+
353+
# populate list of semigroups in semilattice.
354+
# keep a list of D-classes at the same time, to figure out where elements are
355+
L := [];
356+
classes := [];
357+
for i in [1 .. n] do
358+
idemp := idemps[i]; # the idempotent of this D-class
359+
DC := DClass(S, idemp);
360+
Add(L, Semigroup(DC));
361+
Add(classes, DC);
362+
od;
363+
364+
# populate list of homomorphisms
365+
H := [];
366+
for i in [1 .. n] do
367+
idemp := idemps[i];
368+
Add(H, []);
369+
for j in N[i] do
370+
map := function(elm)
371+
return idemp * elm;
372+
end;
373+
Add(H[i], MappingByFunction(L[j], L[i], map));
374+
od;
375+
od;
376+
377+
SSS := StrongSemilatticeOfSemigroups(D, L, H);
378+
379+
return MagmaIsomorphismByFunctionsNC(S,
380+
SSS,
381+
x -> SSSE(SSS,
382+
Position(classes,
383+
DClass(S, x)),
384+
x),
385+
x -> x![3]);
386+
end);

0 commit comments

Comments
 (0)