Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/GAP/pkg/semigroups/tst/standard/congruences/   (GAP Algebra Version 4.15.1©)  Datei vom 29.7.2025 mit Größe 10 kB image not shown  

Quelle  conguniv.tst   Sprache: unbekannt

 
Spracherkennung für: .tst vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

#############################################################################
##
#W  standard/congruences/conguniv.tst
#Y  Copyright (C) 2015-2022                                 Michael Young
##
##  Licensing information can be found in the README file of this package.
##
#############################################################################
##

#@local S, T, badcong, class, classes, cong, congs, otheruni, pairs, part, r
#@local uni, uniS, uniT
gap> START_TEST("Semigroups package: standard/congruences/conguniv.tst");
gap> LoadPackage("semigroups", false);;

# Set info levels and user preferences
gap> SEMIGROUPS.StartTest();

# CongUnivTest1: No zero, non-simple
gap> S := Semigroup([Transformation([1341375]),
>                    Transformation([5716176])]);;
gap> uni := UniversalSemigroupCongruence(S);
<universal semigroup congruence over <transformation semigroup of degree 7 
 with 2 generators>>
gap> pairs := GeneratingPairsOfSemigroupCongruence(uni);;
gap> cong := SemigroupCongruence(S, pairs);;
gap> NrEquivalenceClasses(cong);
1
gap> part := EquivalenceRelationPartition(uni);;
gap> Size(part);
1
gap> Set(part[1]) = Elements(S);
true

# CongUnivTest2: Has zero, not 0-simple
gap> S := Semigroup([Transformation([2435571]),
>                      Transformation([623315])]);;
gap> uni := UniversalSemigroupCongruence(S);;
gap> pairs := GeneratingPairsOfSemigroupCongruence(uni);;
gap> cong := SemigroupCongruence(S, pairs);;
gap> NrEquivalenceClasses(cong);
1

# CongUnivTest3: Has zero, is 0-simple
gap> r := ReesZeroMatrixSemigroup(Group([(56)]),
> [[0, (), 0000000, (56), 00, (56), (56)],
>   [(), 0, (), 0, (), (56), 0, (56), 00, (56), (56), (56), ()],
>   [00, (), (56), 000, (), 0, (56), 000, (56)],
>   [000, (56), 0, (), (56), (), 0, (56), 0, (), 0, (56)],
>   [0, (), (56), 000, (56), (56), (), 0, (56), (), (56), 0],
>   [0, (), 0, (56), 00, (56), 0, (), (56), (56), (), (56), (56)],
>   [0, (56), 0, (56), 0, (), (56), (), 000, (), (), 0],
>   [(), 0, (), (56), (), 0, (56), 00, (56), (56), 0, (56), 0],
>   [0, (), 000, (56), 0, (56), (), 0, (56), 0, (56), 0],
>   [00, (56), 00, (), (56), 0000, (), 00],
>   [0, (56), (), (56), 000, (), 0000, (), 0]]);;
gap> congs := CongruencesOfSemigroup(r);;
gap> uni := UniversalSemigroupCongruence(r);;
gap> uni = congs[3];
false
gap> congs[5] = uni;
false
gap> IsSubrelation(uni, congs[5]);
true
gap> IsSubrelation(congs[5], uni);
false
gap> otheruni := UniversalSemigroupCongruence(FullTransformationMonoid(5));;
gap> pairs := GeneratingPairsOfSemigroupCongruence(uni);;
gap> IsSubrelation(congs[4], otheruni);
Error, the 1st and 2nd arguments are congruences over different semigroups
gap> IsSubrelation(otheruni, congs[4]);
Error, the 1st and 2nd arguments are congruences over different semigroups
gap> cong := SemigroupCongruence(r, pairs);;
gap> NrEquivalenceClasses(cong);
1

# CongUnivTest4: No zero, is simple
gap> S := Semigroup(
> [Transformation([1111511]),
>  Transformation([1511511]),
>  Transformation([3333533]),
>  Transformation([3533533]),
>  Transformation([4444544]),
>  Transformation([4544544]),
>  Transformation([6566566]),
>  Transformation([6666566]),
>  Transformation([7577577]),
>  Transformation([7777577])]);;
gap> uni := UniversalSemigroupCongruence(r);;
gap> pairs := GeneratingPairsOfSemigroupCongruence(uni);;
gap> cong := SemigroupCongruence(r, pairs);;
gap> NrEquivalenceClasses(cong);
1

# EquivalenceRelationCanonicalLookup
gap> S := FullTransformationMonoid(2);;
gap> uni := UniversalSemigroupCongruence(S);;
gap> EquivalenceRelationCanonicalLookup(uni);
1111 ]

# Equality checking
gap> S := FullTransformationMonoid(2);;
gap> T := Semigroup([Transformation([233])]);;
gap> uniS := UniversalSemigroupCongruence(S);;
gap> uniT := UniversalSemigroupCongruence(T);;
gap> uniS = uniT;
false
gap> uniS = UniversalSemigroupCongruence(S);
true
gap> cong := SemigroupCongruence(S, [Transformation([11]),
>                                    Transformation([22])]);;
gap> cong = uniS;
false
gap> cong := SemigroupCongruence(T, [Transformation([233]),
>                                    Transformation([333])]);;
gap> uniT = cong;
true

# Pair inclusion
gap> S := Semigroup([Transformation([1424])]);;
gap> uni := UniversalSemigroupCongruence(S);;
gap> [Transformation([1424]), Transformation([1444])] in uni;
true
gap> [Transformation([1324]), Transformation([1444])] in uni;
Error, the items in the 1st argument (a list) do not all belong to the range o\
f the 2nd argument (a 2-sided semigroup congruence)
gap> [34] in uni;
Error, the items in the 1st argument (a list) do not all belong to the range o\
f the 2nd argument (a 2-sided semigroup congruence)
gap> [Transformation([1424])] in uni;
Error, the 1st argument (a list) does not have length 2

# Classes
gap> S := Semigroup([PartialPerm([12], [31]),
>                    PartialPerm([123], [134])]);
<partial perm semigroup of rank 3 with 2 generators>
gap> uni := UniversalSemigroupCongruence(S);;
gap> AsSSortedList(ImagesElm(uni, PartialPerm([123], [134]))) = Elements(S);
true
gap> ImagesElm(uni, Transformation([132]));
Error, the 2nd argument (a mult. elt.) does not belong to the range of the 1st\
 argument (a congruence)
gap> classes := EquivalenceClasses(uni);
[ <2-sided congruence class of [2,1,3]> ]
gap> EquivalenceClassOfElement(uni, Transformation([132]));
Error, the 2nd argument (a mult. elt.) does not belong to the range of the 1st\
 argument (a 2-sided congruence)
gap> class := EquivalenceClassOfElement(uni, PartialPerm([123], [134]));
<2-sided congruence class of [2,3,4](1)>
gap> PartialPerm([2], [3]) in class;
true
gap> PartialPerm([124], [321]) in class;
false
gap> classes[1] * class = class;
true
gap> class = classes[1];
true
gap> T := Semigroup([PartialPerm([1], [3]),
>                    PartialPerm([123], [134])]);;
gap> badcong := UniversalSemigroupCongruence(T);;
gap> class * EquivalenceClassOfElement(badcong, PartialPerm([1], [3]));
Error, the arguments (cong. classes) are not classes of the same congruence
gap> Size(class);
11

# Meet and join
gap> S := Semigroup([Transformation([1341]),
>                    Transformation([3113])]);;
gap> T := Semigroup([Transformation([1241]),
>                    Transformation([3313])]);;
gap> cong := SemigroupCongruence(S, [Transformation([1311]),
>                                    Transformation([1341])]);;
gap> uni := UniversalSemigroupCongruence(S);;
gap> uni = JoinSemigroupCongruences(uni, uni);
true
gap> uni = JoinSemigroupCongruences(cong, uni);
true
gap> uni = JoinSemigroupCongruences(uni, cong);
true
gap> uni = MeetSemigroupCongruences(uni, uni);
true
gap> cong = MeetSemigroupCongruences(cong, uni);
true
gap> cong = MeetSemigroupCongruences(uni, cong);
true
gap> badcong := SemigroupCongruence(T, [Transformation([1241]),
>                                       Transformation([1111])]);;
gap> JoinSemigroupCongruences(uni, badcong);
Error, cannot form the join of congruences over different semigroups
gap> JoinSemigroupCongruences(badcong, uni);
Error, cannot form the join of congruences over different semigroups
gap> MeetSemigroupCongruences(uni, badcong);
Error, cannot form the meet of congruences over different semigroups
gap> MeetSemigroupCongruences(badcong, uni);
Error, cannot form the meet of congruences over different semigroups
gap> cong := SemigroupCongruence(S, [Transformation([1341]),
>                                    Transformation([1331])]);;
gap> cong = uni;
true

# GeneratingPairsOfSemigroupCongruence
gap> S := Semigroup(IdentityTransformation);
<trivial transformation group of degree 0 with 1 generator>
gap> uni := UniversalSemigroupCongruence(S);;
gap> GeneratingPairsOfSemigroupCongruence(uni);
[  ]
gap> S := Semigroup([Transformation([45345]),
>                    Transformation([51315])]);;
gap> uni := UniversalSemigroupCongruence(S);;
gap> GeneratingPairsOfSemigroupCongruence(uni);
[ [ Transformation( [ 45345 ] ), Transformation( [ 55355 ] ) 
     ] ]
gap> S := Monoid([PartialPerm([1], [1]),
>                 PartialPerm([12], [12]),
>                 PartialPerm([1], [1])]);;
gap> uni := UniversalSemigroupCongruence(S);;
gap> GeneratingPairsOfSemigroupCongruence(uni);
[ [ <identity partial perm on [ 1 ]>, <identity partial perm on [ 12 ]> ] ]
gap> S := Semigroup([Transformation([212]),
>                    Transformation([122])]);;
gap> uni := UniversalSemigroupCongruence(S);
<universal semigroup congruence over <transformation semigroup of degree 3 
 with 2 generators>>
gap> pairs := GeneratingPairsOfSemigroupCongruence(uni);;
gap> cong := SemigroupCongruenceByGeneratingPairs(S, pairs);;
gap> NrEquivalenceClasses(cong);
1

# IsUniversalSemigroupCongruence for a cong by generating pairs
gap> S := Semigroup([PartialPerm([1], [2]),
>                    PartialPerm([123], [231])]);;
gap> cong := SemigroupCongruence(S, [PartialPerm([1], [1]),
>                                    PartialPerm([123], [312])]);;
gap> IsUniversalSemigroupCongruence(cong);
true
gap> cong := SemigroupCongruence(S, [PartialPerm([1], [2]),
>                                    PartialPerm([1], [3])]);;
gap> IsUniversalSemigroupCongruence(cong);
false

# IsUniversalSemigroupCongruence for an RMS congruence
gap> S := ReesMatrixSemigroup(SymmetricGroup(4),
>                             [[(), (), (), ()],
>                              [(24), (), (13), ()],
>                              [(1234), (), (1324), ()]]);;
gap> cong := RMSCongruenceByLinkedTriple(S, Group([(243),
>                                                  (14)(23),
>                                                  (13)(24)]),
>                                        [[1], [2], [3], [4]], [[1], [23]]);;
gap> IsUniversalSemigroupCongruence(cong);
false
gap> cong := RMSCongruenceByLinkedTriple(S, SymmetricGroup(4),
>                                        [[1234]], [[123]]);;
gap> IsUniversalSemigroupCongruence(cong);
true

#
gap> SEMIGROUPS.StopTest();
gap> STOP_TEST("Semigroups package: standard/congruences/conguniv.tst");

[Dauer der Verarbeitung: 0.20 Sekunden, vorverarbeitet 2026-06-17]