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

Quelle  factor.tst   Sprache: unbekannt

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

#############################################################################
##
#W  standard/attributes/factor.tst
#Y  Copyright (C) 2011-2022                              James D. Mitchell
##
##  Licensing information can be found in the README file of this package.
##
#############################################################################
##

#@local S, T, U, acting, an, gens, o, regular, s, x, y
gap> START_TEST("Semigroups package: standard/attributes/factor.tst");
gap> LoadPackage("semigroups", false);;

#
gap> SEMIGROUPS.StartTest();

# FactorTest1: Factorization for a transformation semigroup 1
gap> S := Semigroup(Transformation([34121]),
>                   Transformation([42155]),
>                   Transformation([42224]));;
gap> ForAll(S, x -> EvaluateWord(GeneratorsOfSemigroup(S), 
>                                Factorization(S, x)) = x);
true

# FactorTest2: Factorization for a transformation semigroup 2
gap> gens := [Transformation([1323]),
> Transformation([1412]),
> Transformation([2411]),
> Transformation([3422])];;
gap> s := Semigroup(gens);;
gap> ForAll(s, f -> EvaluateWord(gens, Factorization(s, f)) = f);
true

# FactorTest3: Factorization for a transformation semigroup 3
gap> gens := [
> Transformation([465213]),
> Transformation([632541]),
> Transformation([124356]),
> Transformation([356123]),
> Transformation([536662]),
> Transformation([232646]),
> Transformation([212224]),
> Transformation([441212])];;
gap> s := Semigroup(gens);;
gap> ForAll(s, f -> EvaluateWord(gens, Factorization(s, f)) = f);
true

# FactorTest4: Factorization for a transformation semigroup 4
gap> gens := [
> Transformation([34121]),
> Transformation([42155]),
> Transformation([42224])];;
gap> s := Semigroup(gens);;
gap> ForAll(s, f -> EvaluateWord(gens, Factorization(s, f)) = f);
true

# FactorTest5: Factorization for a transformation semigroup 5
gap> gens := [Transformation([1323]),
> Transformation([1412]),
> Transformation([2411]),
> Transformation([3422])];;
gap> s := Semigroup(gens);;
gap> ForAll(s, f -> EvaluateWord(gens, Factorization(s, f)) = f);
true

# FactorTest6: Factorization for a transformation monoid 1
gap> gens := [Transformation([1341]),
> Transformation([2412]),
> Transformation([3113]),
> Transformation([3341])];;
> s := Monoid(gens);;
gap> ForAll(s, f -> EvaluateWord(GeneratorsOfSemigroup(s),
> Factorization(s, f)) = f);
true

# FactorTest7: Factorization for a transformation monoid 2
gap> gens := [Transformation([1323]),
> Transformation([1412]),
> Transformation([3422]),
> Transformation([4121])];;
> s := Monoid(gens);;
gap> ForAll(s, f -> EvaluateWord(GeneratorsOfSemigroup(s),
> Factorization(s, f)) = f);
true

# FactorTest8: Factorization for a transformation monoid 3
gap> gens := [Transformation([1341]),
> Transformation([2412]),
> Transformation([3113]),
> Transformation([3341])];;
gap> s := Monoid(gens);;
gap> ForAll(s, f -> EvaluateWord(GeneratorsOfSemigroup(s),
> Factorization(s, f)) = f);
true

# FactorTest9: Factorization for a transformation monoid 4
gap> gens := [Transformation([1323]),
> Transformation([1412]),
> Transformation([3422]),
> Transformation([4121])];;
gap> s := Monoid(gens);;
gap> ForAll(s, f -> EvaluateWord(GeneratorsOfSemigroup(s),
> Factorization(s, f)) = f);
true

# FactorTest10: Factorization for a partial perm semigroup
gap> gens := [PartialPerm([12], [31]),
> PartialPerm([123], [134]),
> PartialPerm([123], [241]),
> PartialPerm([134], [341])];;
gap> s := Semigroup(gens);;
gap> ForAll(s, f -> EvaluateWord(GeneratorsOfSemigroup(s),
> Factorization(s, f)) = f);
true

# FactorTest11: Factorization for a partial perm inverse semigroup
gap> gens := [PartialPerm([1245], [2614]),
>  PartialPerm([125], [436]),
>  PartialPerm([1345], [5164]),
>  PartialPerm([1345], [5261])];;
gap> s := InverseSemigroup(gens);;
gap> ForAll(s, f -> EvaluateWord(GeneratorsOfSemigroup(s),
> Factorization(s, f)) = f);
true

# FactorTest12: Factorization for a known regular semigroup
gap> S := OrderEndomorphisms(7);;
gap> ForAll(S, x -> EvaluateWord(GeneratorsOfSemigroup(S),
>                                Factorization(S, x)) = x);
true

# Test mutability of factorisation and minimal factorisation
gap> S := OrderEndomorphisms(7);;
gap> Factorization(S, Transformation([2444777]));
784567223426578 ]
gap> IsMutable(last);
true
gap> MinimalFactorization(S, Transformation([2444777]));
43578 ]
gap> IsMutable(last);
true

# FactorTest13: Factorization regularity is learned after creation
gap> S := SingularTransformationSemigroup(5);
<regular transformation semigroup ideal of degree 5 with 1 generator>
gap> S := Semigroup(GeneratorsOfSemigroup(S));;
gap> IsRegularSemigroup(S);
true
gap> ForAll(S, x -> EvaluateWord(GeneratorsOfSemigroup(S),
>                                Factorization(S, x)) = x);
true

# factor: Factorization, error, 1/5
gap> S := Semigroup([Transformation([1341]),
> Transformation([3113])], rec(acting := true));;
gap> x := PartialPerm([123], [123]);;
gap> Factorization(S, x);
Error, the 2nd argument (a mult. elt.) must belong to the 1st argument (a semi\
group)

# factor: Factorization, error, 2/5
gap> S := Semigroup([Transformation([1341]),
> Transformation([3113])]);;
gap> x := PartialPerm([123], [123]);;
gap> MinimalFactorization(S, x);
Error, the 2nd argument (a mult. elt.) must belong to the 1st argument (a semi\
group)

# factor: Factorization, error, 3/5
gap> S := DualSymmetricInverseMonoid(3);;
gap> S := InverseSemigroup(S, rec(acting := true));;
gap> x := PartialPerm([123], [123]);;
gap> Factorization(S, x);
Error, the 2nd argument (a mult. elt.) must belong to the 1st argument (a semi\
group)

# factor: Factorization, error, 4/5
gap> S := Semigroup(OrderEndomorphisms(3),
>                   rec(acting := true, regular := true));;
gap> x := PartialPerm([123], [123]);;
gap> Factorization(S, x);
Error, the 2nd argument (a mult. elt.) must belong to the 1st argument (a semi\
group)

# factor: Factorization, error, 5/5
gap> S := Semigroup(OrderEndomorphisms(3), rec(acting := true));;
gap> o := LambdaOrb(S);;
gap> Factorization(o, 2, (12));
Error, the 3rd argument <p> does not belong to the Schutzenberger group

# factor: Factorization, () in SchutzenbergerGroup, fail, 1
gap> S := Semigroup(Transformation([1123]), rec(acting := true));;
gap> o := LambdaOrb(S);;
gap> Factorization(o, 2, ());
fail

# factor: Factorization, () in SchutzenbergerGroup, 1
gap> S := InverseSemigroup(PartialPerm([1]), rec(acting := true));;
gap> o := LambdaOrb(S);;
gap> Factorization(o, 2, ());
1, -1 ]

# factor: Factorization, () in SchutzenbergerGroup, 2
gap> S := InverseSemigroup(PartialPerm([231]), PartialPerm([213]),
>                          rec(acting := true));;
gap> o := LambdaOrb(S);;
gap> Factorization(o, 2, ());
2, -2 ]

# factor: test for epimorphism from free group returning a word with negative
# powers.
gap> S := Semigroup(FullTransformationMonoid(8), rec(acting := true));;
gap> x := AsTransformation((1235));
Transformation( [ 23541 ] )
gap> Factorization(S, x);
1222222222222223222222232
  32323 ]

# factor: test for use of minimal factorization it is known, non-regular.
gap> S := Semigroup(FullTransformationMonoid(5));;
gap> x := Transformation([43241]);;
gap> MinimalFactorization(S, x);
234232232 ]
gap> Factorization(S, x);
234232232 ]

# factor: test for use of minimal factorization it is known, regular.
gap> S := PartitionMonoid(4);;
gap> x := Bipartition([[13, -1, -4], [24, -2], [-3]]);;
gap> MinimalFactorization(S, x);
2325225432 ]
gap> Factorization(S, x);
2325225432 ]

# factor: test for use of minimal factorization it is known, regular.
gap> S := SymmetricInverseMonoid(6);;
gap> x := PartialPerm([125], [624]);;
gap> GeneratorsOfSemigroup(S);
[ <identity partial perm on [ 123456 ]>, (1,2,3,4,5,6), 
  (1,2)(3)(4)(5)(6), [6,5,4,3,2,1], [1,2,3,4,5,6] ]
gap> MinimalFactorization(S, x);
525523 ]
gap> Factorization(S, x);
525523 ]

# factor: NonTrivialFactorization, for an fp semigroup, 1
gap> S := FreeSemigroup(1);;
gap> NonTrivialFactorization(S, S.1 ^ 2);
Error, no method found! For debugging hints type ?Recovery from NoMethodFound
Error, no 1st choice method found for `NonTrivialFactorization' on 2 arguments

# factor: NonTrivialFactorization, for an CanUseFroidurePin semigroup,
# error, 1
gap> S := FullPBRMonoid(1);;
gap> NonTrivialFactorization(S, EmptyPartialPerm());
Error, the 2nd argument (a mult. elt.) must belong to the 1st argument (a semi\
group)

# factor: NonTrivialFactorization, for an CanUseFroidurePin semigroup, 1

# Monogenic semigroup as a non-acting partial perm semigroup
gap> S := MonogenicSemigroup(IsPartialPermSemigroup, 32);;
gap> S := Semigroup(S, rec(acting := false));
<commutative partial perm semigroup of rank 4 with 1 generator>
gap> NonTrivialFactorization(S, S.1);
fail
gap> S.1 in IndecomposableElements(S);
true
gap> NonTrivialFactorization(S, S.1 ^ 2);
11 ]

# Monogenic semigroup as a PBR semigroup, with known in-neighbours
gap> S := MonogenicSemigroup(IsPBRSemigroup, 43);
<commutative non-regular pbr semigroup of size 6, degree 7 with 1 generator>
gap> InNeighbours(RightCayleyDigraph(S));
[ [  ], [ 1 ], [ 2 ], [ 36 ], [ 4 ], [ 5 ] ]
gap> NonTrivialFactorization(S, S.1);
fail
gap> S.1 in IndecomposableElements(S);
true
gap> NonTrivialFactorization(S, S.1);
fail
gap> NonTrivialFactorization(S, S.1 ^ 2);
11 ]

# factor: NonTrivialFactorization, for an CanUseFroidurePin semigroup, 2
gap> S := FullPBRMonoid(1);;
gap> Factorization(S, EmptyPBR(1));
13 ]
gap> NonTrivialFactorization(S, EmptyPBR(1));
13 ]

# factor: NonTrivialFactorization, for an CanUseFroidurePin semigroup, 3
gap> gens := [
>  Matrix(IsBooleanMat, [[100], [100], [111]]),
>  Matrix(IsBooleanMat, [[001], [010], [010]]),
>  Matrix(IsBooleanMat, [[111], [111], [000]])];;
gap> S := Semigroup(gens);
<semigroup of 3x3 boolean matrices with 3 generators>
gap> x := List(gens, g -> NonTrivialFactorization(S, g));
[ [ 11 ], fail, [ 33 ] ]
gap> EvaluateWord(gens, x[1]) = gens[1] and EvaluateWord(gens, x[3]) = gens[3];
true

# factor: NonTrivialFactorization, for an acting semigroup, error, 1
gap> S := Semigroup(IdentityTransformation, rec(acting := true));
<trivial transformation group of degree 0 with 1 generator>
gap> NonTrivialFactorization(S, EmptyPBR(1));
Error, the 2nd argument (a mult. elt.) must belong to the 1st argument (a semi\
group)

# factor: NonTrivialFactorization, for an acting semigroup, 1
gap> gens := [
>  Transformation([243262]),
>  Transformation([215111]),
>  Transformation([433243]),
>  Transformation([621566]),
>  Transformation([352133])];;
gap> S := Semigroup(gens, rec(acting := true));;
gap> x := List(gens, g -> NonTrivialFactorization(S, g));
[ [ 151515151 ], 
  [ 2152151141511415114 ], [ 311 ], 
  [ 515151514 ], [ 515151515 ] ]
gap> ForAll([1 .. 5], i -> EvaluateWord(gens, x[i]) = gens[i]);
true

# Re-order the generators
gap> gens := [gens[4], gens[1], gens[2], gens[5], gens[3]];;
gap> S := Semigroup(gens, rec(acting := true));
<transformation semigroup of degree 6 with 5 generators>
gap> x := List(gens, g -> NonTrivialFactorization(S, g));
[ [ 424242421 ], [ 242424242 ], 
  [ 324242424 ], [ 424242424 ], 
  [ 5121212422 ] ]
gap> ForAll([1 .. 5], i -> EvaluateWord(gens, x[i]) = gens[i]);
true

# factor: NonTrivialFactorization, for an acting semigroup, 2
gap> S := MonogenicSemigroup(IsBipartitionSemigroup, 41);;

# With known indecomposable elements
gap> S := Semigroup(S, rec(acting := true));
<commutative block bijection semigroup of degree 5 with 1 generator>
gap> x := IndecomposableElements(S);
[ <block bijection: [ 12, -1, -5 ], [ 3, -2 ], [ 4, -3 ], [ 5, -4 ]> ]
gap> x := IndecomposableElements(S)[1];;
gap> NonTrivialFactorization(S, x);
fail
gap> NonTrivialFactorization(S, x ^ 2);
11 ]

# Without known incomposable elements
gap> S := Semigroup(S, rec(acting := true));
<commutative block bijection semigroup of degree 5 with 1 generator>
gap> NonTrivialFactorization(S, x);
fail
gap> NonTrivialFactorization(S, x ^ 2);
11 ]

# As a monoid
gap> S := Monoid(S, rec(acting := true));
<commutative block bijection monoid of degree 5 with 1 generator>
gap> NonTrivialFactorization(S, x);
21 ]
gap> NonTrivialFactorization(S, x ^ 2);
22 ]

# With more generators
gap> S := Semigroup(x, x ^ 2);
<block bijection semigroup of degree 5 with 2 generators>
gap> NonTrivialFactorization(S, x);
fail
gap> NonTrivialFactorization(S, x * x);
11 ]

# With generators in a different order
gap> S := Semigroup(x ^ 2, x);
<block bijection semigroup of degree 5 with 2 generators>
gap> NonTrivialFactorization(S, x);
fail
gap> NonTrivialFactorization(S, x * x);
22 ]

# factor: NonTrivialFactorization, for an acting semigroup, 3
gap> gens := [
>  Transformation([4474448881]),
>  Transformation([4484448882]),
>  Transformation([5635569993]),
>  Transformation([4474448887]),
>  Transformation([5595559996])];;
gap> S := Semigroup(gens, rec(acting := true));
<transformation semigroup of degree 10 with 5 generators>
gap> x := List(gens, g -> NonTrivialFactorization(S, g));
[ fail, fail, [ 33 ], [ 34 ], [ 53 ] ]
gap> ForAll([1 .. Length(gens)],
>           i -> x[i] = fail or EvaluateWord(gens, x[i]) = gens[i]);
true

# factor: NonTrivialFactorization, for an acting semigroup, 4
gap> gens := [
>  Transformation([166551]),
>  Transformation([3525436]),
>  Transformation([5646732]),
>  Transformation([1226435]),
>  Transformation([6367561]),
>  Transformation([2676134])];;
gap> S := Semigroup(gens, rec(acting := true));
<transformation semigroup of degree 7 with 6 generators>
gap> x := List(gens, g -> NonTrivialFactorization(S, g));
[ [ 1331331 ], [ 6436432 ], fail, fail, 
  [ 53535 ], fail ]
gap> ForAll([1 .. Length(gens)],
>           i -> x[i] = fail or EvaluateWord(gens, x[i]) = gens[i]);
true

# Repeat, with known PartialOrderOfDClasses
gap> PartialOrderOfDClasses(S);;
gap> x := List(gens, g -> NonTrivialFactorization(S, g));
[ [ 1331331 ], [ 6436432 ], fail, fail, 
  [ 53535 ], fail ]

# factor: NonTrivialFactorization, for an acting semigroup, 5
gap> gens := [
>  Bipartition([[137, -2], [2, -5], [4], [5, -1, -3], [6], [-4, -6], [-7]]),
>  Bipartition([[135, -6], [2467, -2], [-1, -5], [-3], [-4], [-7]]),
>  Bipartition([[13, -5], [247, -2, -4], [5], [6, -1, -6], [-3], [-7]]),
>  Bipartition([[127, -5], [36, -4], [4, -1], [5, -2, -3, -6], [-7]]),
>  Bipartition([[12347, -3], [5], [6, -1, -2, -5, -7], [-4], [-6]]),
>  Bipartition([[13, -5], [26, -3], [45, -6], [7, -1, -7], [-2], [-4]])];;
gap> S := Semigroup(gens, rec(acting := true));
<bipartition semigroup of degree 7 with 6 generators>
gap> x := List(gens, g -> NonTrivialFactorization(S, g));
[ [ 1111 ], [ 2312312 ], fail, fail, 
  [ 3123125 ], fail ]
gap> ForAll([1 .. Length(gens)],
>           i -> x[i] = fail or EvaluateWord(gens, x[i]) = gens[i]);
true

# factor: NonTrivialFactorization, for an acting semigroup, 6
gap> S := Monoid([
>  Transformation([23456781]),
>  Transformation([21]),
>  Transformation([12345671]),
>  Transformation([12345678889])], rec(acting := true));
<transformation monoid of degree 11 with 4 generators>
gap> gens := GeneratorsOfSemigroup(S);;
gap> x := List(GeneratorsOfSemigroup(S), g -> NonTrivialFactorization(S, g));
[ [ 11 ], [ 21 ], [ 31 ], [ 41 ], [ 51 ] ]
gap> ForAll([1 .. Length(gens)], i -> EvaluateWord(gens, x[i]) = gens[i]);
true

# factor: NonTrivialFactorization, for an acting semigroup, 7
gap> gens := [
>  Transformation([23456781888]),
>  Transformation([21345678888]),
>  Transformation([12345671888]),
>  Transformation([12345678889])];;
gap> S := Semigroup(gens, rec(acting := true));
<transformation semigroup of degree 11 with 4 generators>
gap> x := List(gens, g -> NonTrivialFactorization(S, g));
[ [ 122 ], [ 222 ], [ 322 ], fail ]
gap> ForAll([1 .. Length(gens)],
>           i -> x[i] = fail or EvaluateWord(gens, x[i]) = gens[i]);
true

# factor: NonTrivialFactorization, for a semigroup, 8
gap> gens := [
>  Transformation([166551]),
>  Transformation([3525436]),
>  Transformation([5646732]),
>  Transformation([1226435]),
>  Transformation([6367561]),
>  Transformation([2676134])];;
gap> S := Semigroup(gens, rec(acting := true));
<transformation semigroup of degree 7 with 6 generators>
gap> x := List(gens, x -> NonTrivialFactorization(S, x));;
gap> y := Filtered([1 .. 6], i -> x[i] <> fail);
125 ]
gap> ForAll(y, i -> EvaluateWord(gens, x[i]) = gens[i]);
true

# factor: NonTrivialFactorization, for a semigroup, 9
gap> gens := [
>  Transformation([23456781]),
>  Transformation([21]),
>  Transformation([12345671]),
>  Transformation([12345678889])];;
gap> S := Monoid(gens, rec(acting := true));
<transformation monoid of degree 11 with 4 generators>
gap> x := List(gens, x -> NonTrivialFactorization(S, x));;
gap> ForAll([1 .. 4],
>           i -> EvaluateWord(GeneratorsOfSemigroup(S), x[i]) = gens[i]);
true
gap> S := Semigroup(gens, rec(acting := true));
<transformation semigroup of degree 11 with 4 generators>
gap> x := List(gens, x -> NonTrivialFactorization(S, x));;
gap> ForAll([1 .. 4], i -> EvaluateWord(gens, x[i]) = gens[i]);
true

# factor: NonTrivialFactorization, for a semigroup, 10
gap> gens := [
>  Transformation([23456781888]),
>  Transformation([21345678888]),
>  Transformation([12345671888]),
>  Transformation([12345678889])];;
gap> S := Semigroup(gens, rec(acting := true));
<transformation semigroup of degree 11 with 4 generators>
gap> x := List(gens, x -> NonTrivialFactorization(S, x));;
gap> y := Filtered([1 .. 4], i -> x[i] <> fail);
123 ]
gap> ForAll(y, i -> EvaluateWord(gens, x[i]) = gens[i]);
true

# factor: NonTrivialFactorization, for CanUseFroidurePin and acting
# semigroups, 1
gap> gens := [
>  PBR([[12], [-212]], [[-112], [-212]]),
>  PBR([[1], []], [[-2, -12], [-1]]),
>  PBR([[-112], [-2, -112]], [[-2, -112], [-112]]),
>  PBR([[-2, -112], [-2, -112]], [[-212], [-1]]),
>  PBR([[-21], [-2, -12]], [[-2, -1], [-2, -12]]),
>  PBR([[2], []], [[], [-2]]),
>  PBR([[-2, -12], [-2, -112]], [[-2, -112], [-2, -112]]),
>  PBR([[-22], []], [[-11], [-21]]),
>  PBR([[-2], [-1]], [[-22], [-11]])];;
gap> S := Semigroup(gens);
<pbr semigroup of degree 2 with 9 generators>
gap> x := List(gens, x -> NonTrivialFactorization(S, x));
[ [ 398 ], [ 22 ], [ 399 ], [ 499 ], [ 599 ], [ 66 ], 
  [ 79 ], [ 998 ], [ 999 ] ]
gap> ForAll([1 .. Length(gens)], i -> EvaluateWord(gens, x[i]) = gens[i]);
true
gap> S := AsSemigroup(IsBipartitionSemigroup, S);;
gap> S := Semigroup(S, rec(acting := true));
<bipartition semigroup of degree 226 with 9 generators>
gap> gens := GeneratorsOfSemigroup(S);;
gap> x := List(gens, x -> NonTrivialFactorization(S, x));
[ [ 398 ], [ 22 ], [ 399 ], [ 499 ], [ 599 ], [ 66 ], 
  [ 79 ], [ 998 ], [ 999 ] ]
gap> ForAll([1 .. Length(gens)], i -> EvaluateWord(gens, x[i]) = gens[i]);
true

# factor: NonTrivialFactorization, for an inverse acting semigroup, error, 1
gap> S := SymmetricInverseMonoid(1);;
gap> NonTrivialFactorization(S, IdentityTransformation);
Error, the 2nd argument (a mult. elt.) must belong to the 1st argument (a semi\
group)

# factor: NonTrivialFactorization, for an inverse acting semigroup, 1
gap> S := SymmetricInverseMonoid(4);
<symmetric inverse monoid of degree 4>
gap> gens := GeneratorsOfSemigroup(S);;

# As semigroup
gap> S := Semigroup(gens, rec(acting := true));
<partial perm monoid of rank 4 with 4 generators>
gap> x := List(gens, x -> NonTrivialFactorization(S, x));
[ [ 11 ], [ 21 ], [ 31 ], [ 41 ], [ 51 ] ]
gap> ForAll([1 .. Length(gens)], i -> EvaluateWord(gens, x[i]) = gens[i]);
true

# As inverse semigroup
gap> S := InverseSemigroup(gens, rec(acting := true));
<inverse partial perm monoid of rank 4 with 4 generators>
gap> x := List(gens, x -> NonTrivialFactorization(S, x));
[ [ 1, -11 ], [ 2, -22 ], [ 3, -33 ], [ 4, -44 ], [ 5, -55 ] ]
gap> ForAll([1 .. Length(gens)], i -> EvaluateWord(gens, x[i]) = gens[i]);
true

# factor: NonTrivialFactorization, for an inverse acting semigroup, 2
gap> gens := [
>  Bipartition([[12, -1, -2], [3, -4], [4, -3]]),
>  Bipartition([[12, -1, -4], [3, -2], [4, -3]]),
>  Bipartition([[12, -1, -3], [3, -4], [4, -2]]),
>  Bipartition([[12, -2, -4], [3, -1], [4, -3]]),
>  Bipartition([[12, -3], [3, -1, -2], [4, -4]]),
>  Bipartition([[12, -3, -4], [3, -1], [4, -2]]),
>  Bipartition([[12, -2, -3], [3, -4], [4, -1]]),
>  Bipartition([[13, -1, -2], [2, -4], [4, -3]]),
>  Bipartition([[1, -4], [23, -1, -2], [4, -3]]),
>  Bipartition([[14, -1, -2], [2, -3], [3, -4]]),
>  Bipartition([[1, -3], [24, -1, -2], [3, -4]]),
>  Bipartition([[1, -3], [2, -4], [34, -1, -2]])];;

# As semigroup
gap> S := Semigroup(gens, rec(acting := true));
<block bijection semigroup of degree 4 with 12 generators>
gap> x := List(gens, x -> NonTrivialFactorization(S, x));;
gap> ForAll([1 .. Length(gens)], i -> EvaluateWord(gens, x[i]) = gens[i]);
true

# As inverse semigroup
gap> S := InverseSemigroup(gens, rec(acting := true));
<inverse block bijection semigroup of degree 4 with 12 generators>
gap> x := List(gens, x -> NonTrivialFactorization(S, x));;
gap> ForAll([1 .. Length(gens)], i -> EvaluateWord(gens, x[i]) = gens[i]);
true
gap> NonTrivialFactorization(S, gens[1] ^ 2) = Factorization(S, gens[1] ^ 2);
true

# Factorization for an inverse semigroup - code coverage
gap> x := PartialPerm([1236], [6451]);
[2,4][3,5](1,6)
gap> S := SymmetricInverseMonoid(5);
<symmetric inverse monoid of degree 5>
gap> Factorization(S, x);
Error, the 2nd argument (a mult. elt.) must belong to the 1st argument (a semi\
group)
gap> S := AsSet(SymmetricInverseMonoid(3));;
gap> T := InverseSemigroup(GeneratorsSmallest(SymmetricInverseMonoid(3)));
<inverse partial perm monoid of rank 3 with 14 generators>
gap> ForAll(S, x -> EvaluateWord(GeneratorsOfSemigroup(T), 
>                                Factorization(T, x)) = x);
true

# Factorization for an regular semigroup - code coverage
gap> U := FullTransformationMonoid(3);;
gap> S := AsSet(U);;
gap> T := Semigroup(GeneratorsSmallest(U));;
gap> IsRegularSemigroup(T);
true
gap> ForAll(S, x -> EvaluateWord(GeneratorsOfSemigroup(T), 
>                                Factorization(T, x)) = x);
true

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

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