GAP (Semigroups) - Chapter 12: Properties of semigroups

Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Bib Ind
[Top of Book] [Contents] [Previous Chapter] [Next Chapter]

[MathJax off]

12 Properties of semigroups
12.1 Arbitrary semigroups
12.1-1 IsBand
12.1-2 IsBlockGroup
12.1-3 IsCommutativeSemigroup
12.1-4 IsCompletelyRegularSemigroup
12.1-5 IsCongruenceFreeSemigroup
12.1-6 IsSurjectiveSemigroup
12.1-7 IsGroupAsSemigroup
12.1-8 IsIdempotentGenerated
12.1-9 IsLeftSimple
12.1-10 IsLeftZeroSemigroup
12.1-11 IsMonogenicSemigroup
12.1-12 IsMonogenicMonoid
12.1-13 IsMonoidAsSemigroup
12.1-14 IsOrthodoxSemigroup
12.1-15 IsRectangularBand
12.1-16 IsRectangularGroup
12.1-17 IsRegularSemigroup
12.1-18 IsRightZeroSemigroup
12.1-19 IsXTrivial
12.1-20 IsSemigroupWithAdjoinedZero
12.1-21 IsSemilattice
12.1-22 IsSimpleSemigroup
12.1-23 IsSynchronizingSemigroup
12.1-24 IsUnitRegularMonoid
12.1-25 IsZeroGroup
12.1-26 IsZeroRectangularBand
12.1-27 IsZeroSemigroup
12.1-28 IsZeroSimpleSemigroup
12.1-29 IsSelfDualSemigroup
12.2 Inverse semigroups
12.2-1 IsCliffordSemigroup
12.2-2 IsBrandtSemigroup
12.2-3 IsEUnitaryInverseSemigroup
12.2-4 IsFInverseSemigroup
12.2-5 IsFInverseMonoid
12.2-6 IsFactorisableInverseMonoid
12.2-7 IsJoinIrreducible
12.2-8 IsMajorantlyClosed
12.2-9 IsMonogenicInverseSemigroup
12.2-10 IsMonogenicInverseMonoid

### 12 Properties of semigroups

In this chapter we describe the methods that are available in Semigroups for determining various properties of a semigroup or monoid.

#### 12.1 Arbitrary semigroups

In this section we describe the properties of an arbitrary semigroup or monoid that can be determined using the Semigroups package.

##### 12.1-1 IsBand

`‣ IsBand`( S ) | ( property )

Returns: `true` or `false`.

`IsBand` returns `true` if every element of the semigroup S is an idempotent and `false` if it is not. An inverse semigroup is band if and only if it is a semilattice; see `IsSemilattice` (12.1-21).

    gap> S := Semigroup(
    > Transformation([1, 1, 1, 4, 4, 4, 7, 7, 7, 1]),
    > Transformation([2, 2, 2, 5, 5, 5, 8, 8, 8, 2]),
    > Transformation([3, 3, 3, 6, 6, 6, 9, 9, 9, 3]),
    > Transformation([1, 1, 1, 4, 4, 4, 7, 7, 7, 4]),
    > Transformation([1, 1, 1, 4, 4, 4, 7, 7, 7, 7]));;
    gap> IsBand(S);
    true
    gap> S := InverseSemigroup(
    > PartialPerm([1, 2, 3, 4, 8, 9], [5, 8, 7, 6, 9, 1]),
    > PartialPerm([1, 3, 4, 7, 8, 9, 10], [2, 3, 8, 7, 10, 6, 1]));;
    gap> IsBand(S);
    false
    gap> IsBand(IdempotentGeneratedSubsemigroup(S));
    true
    gap> S := PartitionMonoid(4);
    <regular bipartition *-monoid of size 4140, degree 4 with 4
     generators>
    gap> M := MinimalIdeal(S);
    <simple bipartition *-semigroup ideal of degree 4 with 1 generator>
    gap> IsBand(M);
    true

##### 12.1-2 IsBlockGroup

`‣ IsBlockGroup`( S ) | ( property )

Returns: `true` or `false`.

`IsBlockGroup` returns `true` if the semigroup S is a block group and `false` if it is not.

A semigroup S is a block group if every \(\mathscr{L}\)-class and every \(\mathscr{R}\)-class of S contains at most one idempotent. Every semigroup of partial permutations is a block group.

    gap> S := Semigroup(Transformation([5, 6, 7, 3, 1, 4, 2, 8]),
    >                   Transformation([3, 6, 8, 5, 7, 4, 2, 8]));;
    gap> IsBlockGroup(S);
    true
    gap> S := Semigroup(
    > Transformation([2, 1, 10, 4, 5, 9, 7, 4, 8, 4]),
    > Transformation([10, 7, 5, 6, 1, 3, 9, 7, 10, 2]));;
    gap> IsBlockGroup(S);
    false
    gap> S := Semigroup(PartialPerm([1, 2], [5, 4]),
    >                   PartialPerm([1, 2, 3], [1, 2, 5]),
    >                   PartialPerm([1, 2, 3], [2, 1, 5]),
    >                   PartialPerm([1, 3, 4], [3, 1, 2]),
    >                   PartialPerm([1, 3, 4, 5], [5, 4, 3, 2]));;
    gap> T := AsSemigroup(IsBlockBijectionSemigroup, S);
    <block bijection semigroup of degree 6 with 5 generators>
    gap> IsBlockGroup(T);
    true
    gap> IsBlockGroup(AsSemigroup(IsBipartitionSemigroup, S));
    true
    gap> S := Semigroup(
    > Bipartition([[1, -2], [2, -3], [3, -4], [4, -1]]),
    > Bipartition([[1, -2], [2, -1], [3, -3], [4, -4]]),
    > Bipartition([[1, 2, -3], [3, -1, -2], [4, -4]]),
    > Bipartition([[1, -1], [2, -2], [3, -3], [4, -4]]));;
    gap> IsBlockGroup(S);
    true

##### 12.1-3 IsCommutativeSemigroup

`‣ IsCommutativeSemigroup`( S ) | ( property )

Returns: `true` or `false`.

`IsCommutativeSemigroup` returns `true` if the semigroup S is commutative and `false` if it is not. The function `IsCommutative` (Reference: IsCommutative) can also be used to test if a semigroup is commutative.

A semigroup S is commutative if `x * y = y * x` for all `x, y` in S.

    gap> S := Semigroup(Transformation([2, 4, 5, 3, 7, 8, 6, 9, 1]),
    >                   Transformation([3, 5, 6, 7, 8, 1, 9, 2, 4]));;
    gap> IsCommutativeSemigroup(S);
    true
    gap> IsCommutative(S);
    true
    gap> S := InverseSemigroup(
    >  PartialPerm([1, 2, 3, 4, 5, 6], [2, 5, 1, 3, 9, 6]),
    >  PartialPerm([1, 2, 3, 4, 6, 8], [8, 5, 7, 6, 2, 1]));;
    gap> IsCommutativeSemigroup(S);
    false
    gap> S := Semigroup(
    > Bipartition([[1, 2, 3, 6, 7, -1, -4, -6],
    >              [4, 5, 8, -2, -3, -5, -7, -8]]),
    >  Bipartition([[1, 2, -3, -4], [3, -5], [4, -6], [5, -7],
    >               [6, -8], [7, -1], [8, -2]]));;
    gap> IsCommutativeSemigroup(S);
    true

##### 12.1-4 IsCompletelyRegularSemigroup

`‣ IsCompletelyRegularSemigroup`( S ) | ( property )

Returns: `true` or `false`.

`IsCompletelyRegularSemigroup` returns `true` if every element of the semigroup S is contained in a subgroup of S.

An inverse semigroup is completely regular if and only if it is a Clifford semigroup; see `IsCliffordSemigroup` (12.2-1).

    gap> S := Semigroup(Transformation([1, 2, 4, 3, 6, 5, 4]),
    >                   Transformation([1, 2, 5, 6, 3, 4, 5]),
    >                   Transformation([2, 1, 2, 2, 2, 2, 2]));;
    gap> IsCompletelyRegularSemigroup(S);
    true
    gap> IsInverseSemigroup(S);
    true
    gap> T := Range(IsomorphismPartialPermSemigroup(S));;
    gap> IsCompletelyRegularSemigroup(T);
    true
    gap> IsCliffordSemigroup(T);
    true
    gap> S := Semigroup(
    > Bipartition([[1, 3, -4], [2, 4, -1, -2], [-3]]),
    > Bipartition([[1, -1], [2, 3, 4, -3], [-2, -4]]));;
    gap> IsCompletelyRegularSemigroup(S);
    false

##### 12.1-5 IsCongruenceFreeSemigroup

`‣ IsCongruenceFreeSemigroup`( S ) | ( property )

Returns: `true` or `false`.

`IsCongruenceFreeSemigroup` returns `true` if the semigroup S is a congruence-free semigroup and `false` if it is not.

A semigroup S is congruence-free if it has no non-trivial proper congruences.

A semigroup with zero is congruence-free if and only if it is isomorphic to a regular Rees 0-matrix semigroup `R` whose underlying semigroup is the trivial group, no two rows of the matrix of `R` are identical, and no two columns are identical; see Theorem 3.7.1 in [How95].

A semigroup without zero is congruence-free if and only if it is a simple group or has order 2; see Theorem 3.7.2 in [How95].

    gap> S := Semigroup(Transformation([4, 2, 3, 3, 4]));;
    gap> IsCongruenceFreeSemigroup(S);
    true
    gap> S := Semigroup(Transformation([2, 2, 4, 4]),
    >                   Transformation([5, 3, 4, 4, 6, 6]));;
    gap> IsCongruenceFreeSemigroup(S);
    false

##### 12.1-6 IsSurjectiveSemigroup

`‣ IsSurjectiveSemigroup`( S ) | ( property )

Returns: `true` or `false`.

A semigroup is surjective if each of its elements can be written as a product of two elements in the semigroup. `IsSurjectiveSemigroup(S)` returns `true` if the semigroup S is surjective, and `false` if it is not.

See also `IndecomposableElements` (11.7-6).

Note that every monoid, and every regular semigroup, is surjective.

    gap> S := FullTransformationMonoid(100);
    <full transformation monoid of degree 100>
    gap> IsSurjectiveSemigroup(S);
    true
    gap> F := FreeSemigroup(3);;
    gap> P := F / [[F.1, F.2 * F.1], [F.3 ^ 3, F.3]];
    <fp semigroup with 3 generators and 2 relations of length 10>
    gap> IsSurjectiveSemigroup(P);
    false
    gap> I := SingularTransformationMonoid(5);
    <regular transformation semigroup ideal of degree 5 with 1 generator>
    gap> IsSurjectiveSemigroup(I);
    true
    gap> M := MonogenicSemigroup(IsBipartitionSemigroup, 3, 2);
    <commutative non-regular block bijection semigroup of size 4,
     degree 6 with 1 generator>
    gap> IsSurjectiveSemigroup(M);
    false

##### 12.1-7 IsGroupAsSemigroup

`‣ IsGroupAsSemigroup`( S ) | ( property )

Returns: `true` or `false`.

`IsGroupAsSemigroup` returns `true` if and only if the semigroup S is mathematically a group.

    gap> S := Semigroup(Transformation([2, 4, 5, 3, 7, 8, 6, 9, 1]),
    >                   Transformation([3, 5, 6, 7, 8, 1, 9, 2, 4]));;
    gap> IsGroupAsSemigroup(S);
    true
    gap> G := SymmetricGroup(5);;
    gap> IsGroupAsSemigroup(G);
    true
    gap> S := AsSemigroup(IsPartialPermSemigroup, G);
    <partial perm group of size 120, rank 5 with 2 generators>
    gap> IsGroupAsSemigroup(S);
    true
    gap> G := SymmetricGroup([1, 2, 10]);;
    gap> T := AsSemigroup(IsBlockBijectionSemigroup, G);
    <inverse block bijection semigroup of size 6, degree 11 with 2
     generators>
    gap> IsGroupAsSemigroup(T);
    true

##### 12.1-8 IsIdempotentGenerated

`‣ IsIdempotentGenerated`( S ) | ( property )

`‣ IsSemiband`( S ) | ( property )

Returns: `true` or `false`.

`IsIdempotentGenerated` and `IsSemiband` return `true` if the semigroup S is generated by its idempotents and `false` if it is not. See also `Idempotents` (11.10-1) and `IdempotentGeneratedSubsemigroup` (11.10-3).

An inverse semigroup is idempotent-generated if and only if it is a semilattice; see `IsSemilattice` (12.1-21).

The terms semiband and idempotent-generated are synonymous in this context.

    gap> S := SingularTransformationSemigroup(4);
    <regular transformation semigroup ideal of degree 4 with 1 generator>
    gap> IsIdempotentGenerated(S);
    true
    gap> S := SingularBrauerMonoid(5);
    <regular bipartition *-semigroup ideal of degree 5 with 1 generator>
    gap> IsIdempotentGenerated(S);
    true

##### 12.1-9 IsLeftSimple

`‣ IsLeftSimple`( S ) | ( property )

`‣ IsRightSimple`( S ) | ( property )

Returns: `true` or `false`.

`IsLeftSimple` and `IsRightSimple` returns `true` if the semigroup S has only one \(\mathscr{L}\)-class or one \(\mathscr{R}\)-class, respectively, and returns `false` if it has more than one.

An inverse semigroup is left simple if and only if it is right simple if and only if it is a group; see `IsGroupAsSemigroup` (12.1-7).

    gap> S := Semigroup(Transformation([6, 7, 9, 6, 8, 9, 8, 7, 6]),
    >                   Transformation([6, 8, 9, 6, 8, 8, 7, 9, 6]),
    >                   Transformation([6, 8, 9, 7, 8, 8, 7, 9, 6]),
    >                   Transformation([6, 9, 8, 6, 7, 9, 7, 8, 6]),
    >                   Transformation([6, 9, 9, 6, 8, 8, 7, 9, 6]),
    >                   Transformation([6, 9, 9, 7, 8, 8, 6, 9, 7]),
    >                   Transformation([7, 8, 8, 7, 9, 9, 7, 8, 6]),
    >                   Transformation([7, 9, 9, 7, 6, 9, 6, 8, 7]),
    >                   Transformation([8, 7, 6, 9, 8, 6, 8, 7, 9]),
    >                   Transformation([9, 6, 6, 7, 8, 8, 7, 6, 9]),
    >                   Transformation([9, 6, 6, 7, 9, 6, 9, 8, 7]),
    >                   Transformation([9, 6, 7, 9, 6, 6, 9, 7, 8]),
    >                   Transformation([9, 6, 8, 7, 9, 6, 9, 8, 7]),
    >                   Transformation([9, 7, 6, 8, 7, 7, 9, 6, 8]),
    >                   Transformation([9, 7, 7, 8, 9, 6, 9, 7, 8]),
    >                   Transformation([9, 8, 8, 9, 6, 7, 6, 8, 9]));;
    gap> IsRightSimple(S);
    false
    gap> IsLeftSimple(S);
    true
    gap> IsGroupAsSemigroup(S);
    false
    gap> NrRClasses(S);
    16
    gap> S := BrauerMonoid(6);;
    gap> S := Semigroup(RClass(S, Random(MinimalDClass(S))));;
    gap> IsLeftSimple(S);
    false
    gap> IsRightSimple(S);
    true

##### 12.1-10 IsLeftZeroSemigroup

`‣ IsLeftZeroSemigroup`( S ) | ( property )

Returns: `true` or `false`.

`IsLeftZeroSemigroup` returns `true` if the semigroup S is a left zero semigroup and `false` if it is not.

A semigroup is a left zero semigroup if `x*y=x` for all `x,y`. An inverse semigroup is a left zero semigroup if and only if it is trivial.

    gap> S := Semigroup(Transformation([2, 1, 4, 3, 5]),
    >                   Transformation([3, 2, 3, 1, 1]));;
    gap> IsRightZeroSemigroup(S);
    false
    gap> S := Semigroup(Transformation([1, 2, 3, 3, 1]),
    >                   Transformation([1, 2, 3, 3, 3]));;
    gap> IsLeftZeroSemigroup(S);
    true

##### 12.1-11 IsMonogenicSemigroup

`‣ IsMonogenicSemigroup`( S ) | ( property )

Returns: `true` or `false`.

`IsMonogenicSemigroup` returns `true` if the semigroup S is monogenic and it returns `false` if it is not.

A semigroup is monogenic if it is generated by a single element. See also `IsMonogenicMonoid` (12.1-12), `IsMonogenicInverseSemigroup` (12.2-9), and `IsMonogenicInverseMonoid` (12.2-10).

    gap> S := Semigroup(
    > Transformation(
    >  [2, 2, 2, 11, 10, 8, 10, 11, 2, 11, 10, 2, 11, 11, 10]),
    > Transformation(
    >  [2, 2, 2, 8, 11, 15, 11, 10, 2, 10, 11, 2, 10, 4, 7]),
    > Transformation(
    >  [2, 2, 2, 11, 10, 8, 10, 11, 2, 11, 10, 2, 11, 11, 10]),
    > Transformation(
    >  [2, 2, 12, 7, 8, 14, 8, 11, 2, 11, 10, 2, 11, 15, 4]));;
    gap> IsMonogenicSemigroup(S);
    true
    gap> S := Semigroup(
    > Bipartition([[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -2, -5, -7, -9],
    >              [-1, -10], [-3, -4, -6, -8]]),
    >  Bipartition([[1, 4, 7, 8, -2], [2, 3, 5, 10, -5],
    >               [6, 9, -7, -9], [-1, -10], [-3, -4, -6, -8]]));;
    gap> IsMonogenicSemigroup(S);
    true
    gap> S := FullTransformationSemigroup(5);;
    gap> IsMonogenicSemigroup(S);
    false

##### 12.1-12 IsMonogenicMonoid

`‣ IsMonogenicMonoid`( S ) | ( property )

Returns: `true` or `false`.

`IsMonogenicMonoid` returns `true` if the monoid S is a monogenic monoid and it returns `false` if it is not.

A monoid is monogenic if it is generated as a monoid by a single element. See also `IsMonogenicSemigroup` (12.1-11) and `IsMonogenicInverseMonoid` (12.2-10).

    gap> x := PartialPerm([1, 2, 3, 6, 8, 10], [2, 6, 7, 9, 1, 5]);;
    gap> S := Monoid(x, x ^ 2, x ^ 3);;
    gap> IsMonogenicSemigroup(S);
    false
    gap> IsMonogenicMonoid(S);
    true
    gap> S := FullTransformationMonoid(5);;
    gap> IsMonogenicMonoid(S);
    false

##### 12.1-13 IsMonoidAsSemigroup

`‣ IsMonoidAsSemigroup`( S ) | ( property )

Returns: `true` or `false`.

`IsMonoidAsSemigroup` returns `true` if and only if the semigroup S is mathematically a monoid, i.e. if and only if it contains a `MultiplicativeNeutralElement` (Reference: MultiplicativeNeutralElement).

It is possible that a semigroup which satisfies `IsMonoidAsSemigroup` is not in the GAP category `IsMonoid` (Reference: IsMonoid). This is possible if the `MultiplicativeNeutralElement` (Reference: MultiplicativeNeutralElement) of S is not equal to the `One` (Reference: One) of any element in S. Therefore a semigroup satisfying `IsMonoidAsSemigroup` may not possess the attributes of a monoid (such as, `GeneratorsOfMonoid` (Reference: GeneratorsOfMonoid)).

See also `One` (Reference: One), `IsInverseMonoid` (Reference: IsInverseMonoid) and `IsomorphismTransformationMonoid` (Reference: IsomorphismTransformationMonoid).

    gap> S := Semigroup(Transformation([1, 4, 6, 2, 5, 3, 7, 8, 9, 9]),
    >                   Transformation([6, 3, 2, 7, 5, 1, 8, 8, 9, 9]));;
    gap> IsMonoidAsSemigroup(S);
    true
    gap> IsMonoid(S);
    false
    gap> MultiplicativeNeutralElement(S);
    Transformation( [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 9 ] )
    gap> T := AsSemigroup(IsBipartitionSemigroup, S);;
    gap> IsMonoidAsSemigroup(T);
    true
    gap> IsMonoid(T);
    false
    gap> One(T);
    fail
    gap> S := Monoid(Transformation([8, 2, 8, 9, 10, 6, 2, 8, 7, 8]),
    >                Transformation([9, 2, 6, 3, 6, 4, 5, 5, 3, 2]));;
    gap> IsMonoidAsSemigroup(S);
    true

##### 12.1-14 IsOrthodoxSemigroup

`‣ IsOrthodoxSemigroup`( S ) | ( property )

Returns: `true` or `false`.

`IsOrthodoxSemigroup` returns `true` if the semigroup S is orthodox and `false` if it is not.

A semigroup is orthodox if it is regular and its idempotent elements form a subsemigroup. Every inverse semigroup is also an orthodox semigroup.

See also `IsRegularSemigroup` (12.1-17) and `IsRegularSemigroup` (Reference: IsRegularSemigroup).

    gap> S := Semigroup(Transformation([1, 1, 1, 4, 5, 4]),
    >                   Transformation([1, 2, 3, 1, 1, 2]),
    >                   Transformation([1, 2, 3, 1, 1, 3]),
    >                   Transformation([5, 5, 5, 5, 5, 5]));;
    gap> IsOrthodoxSemigroup(S);
    true
    gap> S := DualSymmetricInverseMonoid(5);;
    gap> S := Semigroup(GeneratorsOfSemigroup(S));;
    gap> IsOrthodoxSemigroup(S);
    true

##### 12.1-15 IsRectangularBand

`‣ IsRectangularBand`( S ) | ( property )

Returns: `true` or `false`.

`IsRectangularBand` returns `true` if the semigroup S is a rectangular band and `false` if it is not.

A semigroup S is a rectangular band if for all \(x, y, z\) in S we have that \(x ^ 2 = x\) and \(xyz = xz\).

Equivalently, S is a rectangular band if S is isomorphic to a semigroup of the form \(I \times \Lambda\) with multiplication \((i, \lambda)(j, \mu) = (i, \mu)\). In this case, S is called an \(|I| \times |\Lambda|\) rectangular band.

An inverse semigroup is a rectangular band if and only if it is a group.

    gap> S := Semigroup(
    > Transformation([1, 1, 1, 4, 4, 4, 7, 7, 7, 1]),
    > Transformation([2, 2, 2, 5, 5, 5, 8, 8, 8, 2]),
    > Transformation([3, 3, 3, 6, 6, 6, 9, 9, 9, 3]),
    > Transformation([1, 1, 1, 4, 4, 4, 7, 7, 7, 4]),
    > Transformation([1, 1, 1, 4, 4, 4, 7, 7, 7, 7]));;
    gap> IsRectangularBand(S);
    true
    gap> IsRectangularBand(MinimalIdeal(PartitionMonoid(4)));
    true

##### 12.1-16 IsRectangularGroup

`‣ IsRectangularGroup`( S ) | ( property )

Returns: `true` or `false`.

A semigroup is rectangular group if it is the direct product of a group and a rectangular band. Or equivalently, if it is orthodox and simple.

    gap> G := AsSemigroup(IsTransformationSemigroup, MathieuGroup(11));
    <transformation group of size 7920, degree 11 with 2 generators>
    gap> R := RectangularBand(3, 2);
    <regular transformation semigroup of size 6, degree 6 with 3
     generators>
    gap> S := DirectProduct(G, R);;
    gap> IsRectangularGroup(R);
    true
    gap> IsRectangularGroup(G);
    true
    gap> IsRectangularGroup(S);
    true
    gap> IsRectangularGroup(JonesMonoid(3));
    false

##### 12.1-17 IsRegularSemigroup

`‣ IsRegularSemigroup`( S ) | ( property )

Returns: `true` or `false`.

`IsRegularSemigroup` returns `true` if the semigroup S is regular and `false` if it is not.

A semigroup `S` is regular if for all `x` in `S` there exists `y` in `S` such that `x * y * x = x`. Every inverse semigroup is regular, and a semigroup of partial permutations is regular if and only if it is an inverse semigroup.

See also `IsRegularDClass` (Reference: IsRegularDClass), `IsRegularGreensClass` (10.3-2), and `IsRegularSemigroupElement` (Reference: IsRegularSemigroupElement).

    gap> IsRegularSemigroup(FullTransformationSemigroup(5));
    true
    gap> IsRegularSemigroup(JonesMonoid(5));
    true

##### 12.1-18 IsRightZeroSemigroup

`‣ IsRightZeroSemigroup`( S ) | ( property )

Returns: `true` or `false`.

`IsRightZeroSemigroup` returns `true` if the S is a right zero semigroup and `false` if it is not.

A semigroup `S` is a right zero semigroup if `x * y = y` for all `x, y` in `S`. An inverse semigroup is a right zero semigroup if and only if it is trivial.

    gap> S := Semigroup(Transformation([2, 1, 4, 3, 5]),
    >                   Transformation([3, 2, 3, 1, 1]));;
    gap> IsRightZeroSemigroup(S);
    false
    gap> S := Semigroup(Transformation([1, 2, 3, 3, 1]),
    >                   Transformation([1, 2, 4, 4, 1]));;
    gap> IsRightZeroSemigroup(S);
    true

##### 12.1-19 IsXTrivial

`‣ IsRTrivial`( S ) | ( property )

`‣ IsLTrivial`( S ) | ( property )

`‣ IsHTrivial`( S ) | ( property )

`‣ IsDTrivial`( S ) | ( property )

`‣ IsAperiodicSemigroup`( S ) | ( property )

`‣ IsCombinatorialSemigroup`( S ) | ( property )

Returns: `true` or `false`.

`IsXTrivial` returns `true` if Green's \(\mathscr{R}\)-relation, \(\mathscr{L}\)-relation, \(\mathscr{H}\)-relation, \(\mathscr{D}\)-relation, respectively, on the semigroup S is trivial and `false` if it is not. These properties can also be applied to a Green's class instead of a semigroup where applicable.

For inverse semigroups, the properties of being \(\mathscr{R}\)-trivial, \(\mathscr{L}\)-trivial, \(\mathscr{D}\)-trivial, and a semilattice are equivalent; see `IsSemilattice` (12.1-21).

A semigroup is aperiodic if its contains no non-trivial subgroups (equivalently, all of its group \(\mathscr{H}\)-classes are trivial). A finite semigroup is aperiodic if and only if it is \(\mathscr{H}\)-trivial.

Combinatorial is a synonym for aperiodic in this context.

    gap> S := Semigroup(
    >  Transformation([1, 5, 1, 3, 7, 10, 6, 2, 7, 10]),
    >  Transformation([4, 4, 5, 6, 7, 7, 7, 4, 3, 10]));;
    gap> IsHTrivial(S);
    true
    gap> Size(S);
    108
    gap> IsRTrivial(S);
    false
    gap> IsLTrivial(S);
    false

##### 12.1-20 IsSemigroupWithAdjoinedZero

`‣ IsSemigroupWithAdjoinedZero`( S ) | ( property )

Returns: `true` or `false`.

`IsSemigroupWithAdjoinedZero` returns `true` if the semigroup S can be expressed as the disjoint union of subsemigroups \(\textit{S} \setminus \{ 0 \}\) and \(\{ 0 \}\) (where \(0\) is the `MultiplicativeZero` (11.8-3) of S).

If this is not the case, then either S lacks a multiplicative zero, or the set \(\textit{S} \setminus \{ 0 \}\) is not a subsemigroup of S, and so `IsSemigroupWithAdjoinedZero` returns `false`.

    gap> S := Semigroup(Transformation([2, 3, 4, 5, 1, 6]),
    >                   Transformation([2, 1, 3, 4, 5, 6]),
    >                   Transformation([6, 6, 6, 6, 6, 6]));
    <transformation semigroup of degree 6 with 3 generators>
    gap> IsZeroGroup(S);
    true
    gap> IsSemigroupWithAdjoinedZero(S);
    true
    gap> S := FullTransformationMonoid(4);;
    gap> IsSemigroupWithAdjoinedZero(S);
    false

##### 12.1-21 IsSemilattice

`‣ IsSemilattice`( S ) | ( property )

Returns: `true` or `false`.

`IsSemilattice` returns `true` if the semigroup S is a semilattice and `false` if it is not.

A semigroup is a semilattice if it is commutative and every element is an idempotent. The idempotents of an inverse semigroup form a semilattice.

    gap> S := Semigroup(Transformation([2, 5, 1, 7, 3, 7, 7]),
    >                   Transformation([3, 6, 5, 7, 2, 1, 7]));;
    gap> Size(S);
    631
    gap> IsInverseSemigroup(S);
    true
    gap> A := Semigroup(Idempotents(S));
    <transformation semigroup of degree 7 with 32 generators>
    gap> IsSemilattice(A);
    true
    gap> S := FactorisableDualSymmetricInverseMonoid(5);;
    gap> S := IdempotentGeneratedSubsemigroup(S);;
    gap> IsSemilattice(S);
    true

##### 12.1-22 IsSimpleSemigroup

`‣ IsSimpleSemigroup`( S ) | ( property )

`‣ IsCompletelySimpleSemigroup`( S ) | ( property )

Returns: `true` or `false`.

`IsSimpleSemigroup` returns `true` if the semigroup S is simple and `false` if it is not.

A semigroup is simple if it has no proper 2-sided ideals. A semigroup is completely simple if it is simple and possesses minimal left and right ideals. A finite semigroup is simple if and only if it is completely simple. An inverse semigroup is simple if and only if it is a group.

    gap> S := Semigroup(
    >  Transformation([2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 2]),
    >  Transformation([1, 1, 3, 3, 5, 5, 7, 7, 9, 9, 11, 11, 3]),
    >  Transformation([1, 7, 3, 9, 5, 11, 7, 1, 9, 3, 11, 5, 5]),
    >  Transformation([7, 7, 9, 9, 11, 11, 1, 1, 3, 3, 5, 5, 7]));;
    gap> IsSimpleSemigroup(S);
    true
    gap> IsCompletelySimpleSemigroup(S);
    true
    gap> IsSimpleSemigroup(MinimalIdeal(BrauerMonoid(6)));
    true
    gap> R := Range(IsomorphismReesMatrixSemigroup(
    > MinimalIdeal(BrauerMonoid(6))));
    <Rees matrix semigroup 15x15 over Group(())>

##### 12.1-23 IsSynchronizingSemigroup

`‣ IsSynchronizingSemigroup`( S ) | ( property )

Returns: `true` or `false`.

For a positive integer n, `IsSynchronizingSemigroup` returns `true` if the semigroup of transformations S contains a transformation with constant value on `[1 .. n]` where `n` is the degree of the semigroup. See also `ConstantTransformation` (Reference: ConstantTransformation).

Note that the semigroup consisting of the identity transformation is the unique transformation semigroup with degree `0`. In this special case, the function `IsSynchronizingSemigroup` will return `false`.

    gap> S := Semigroup(
    > Transformation([1, 1, 8, 7, 6, 6, 4, 1, 8, 9]),
    > Transformation([5, 8, 7, 6, 10, 8, 7, 6, 9, 7]));;
    gap> IsSynchronizingSemigroup(S);
    true
    gap> S := Semigroup(
    > Transformation([3, 8, 1, 1, 9, 9, 8, 7, 9, 6]),
    > Transformation([7, 6, 8, 7, 5, 6, 8, 7, 8, 9]));;
    gap> IsSynchronizingSemigroup(S);
    false
    gap> Representative(MinimalIdeal(S));
    Transformation( [ 8, 7, 7, 7, 8, 8, 7, 8, 8, 8 ] )

##### 12.1-24 IsUnitRegularMonoid

`‣ IsUnitRegularMonoid`( S ) | ( property )

Returns: `true` if the semigroup S is unit regular and `false` if it is not.

A monoid is unit regular if and only if for every `>x` in S there exists an element `y` in the group of units of S such that `x*y*x=x`.

    gap> IsUnitRegularMonoid(FullTransformationMonoid(3));
    true

##### 12.1-25 IsZeroGroup

`‣ IsZeroGroup`( S ) | ( property )

Returns: `true` or `false`.

`IsZeroGroup` returns `true` if the semigroup S is a zero group and `false` if it is not.

A semigroup `S` is a zero group if there exists an element `z` in `S` such that `S` without `z` is a group and `x*z=z*x=z` for all `x` in `S`. Every zero group is an inverse semigroup.

    gap> S := Semigroup(Transformation([2, 2, 3, 4, 6, 8, 5, 5, 9]),
    >                   Transformation([3, 3, 8, 2, 5, 6, 4, 4, 9]),
    >                   ConstantTransformation(9, 9));;
    gap> IsZeroGroup(S);
    true
    gap> T := Range(IsomorphismPartialPermSemigroup(S));;
    gap> IsZeroGroup(T);
    true
    gap> IsZeroGroup(JonesMonoid(2));
    true

##### 12.1-26 IsZeroRectangularBand

`‣ IsZeroRectangularBand`( S ) | ( property )

Returns: `true` or `false`.

`IsZeroRectangularBand` returns `true` if the semigroup S is a zero rectangular band and `false` if it is not.

A semigroup is a 0-rectangular band if it is 0-simple and \(\mathscr{H}\)-trivial; see also `IsZeroSimpleSemigroup` (12.1-28) and `IsHTrivial` (12.1-19). An inverse semigroup is a 0-rectangular band if and only if it is a 0-group; see `IsZeroGroup` (12.1-25).

    gap> S := Semigroup(
    >  Transformation([1, 3, 7, 9, 1, 12, 13, 1, 15, 9, 1, 18, 1, 1, 13,
    >                  1, 1, 21, 1, 1, 1, 1, 1, 25, 26, 1]),
    > Transformation([1, 5, 1, 5, 11, 1, 1, 14, 1, 16, 17, 1, 1, 19, 1,
    >                 11, 1, 1, 1, 23, 1, 16, 19, 1, 1, 1]),
    > Transformation([1, 4, 8, 1, 10, 1, 8, 1, 1, 1, 10, 1, 8, 10, 1, 1,
    >                 20, 1, 22, 1, 8, 1, 1, 1, 1, 1]),
    > Transformation([1, 6, 6, 1, 1, 1, 6, 1, 1, 1, 1, 1, 6, 1, 6, 1, 1,
    >                 6, 1, 1, 24, 1, 1, 1, 1, 6]));;
    gap> D := DClass(S,
    > Transformation([1, 8, 1, 1, 8, 1, 1, 1, 1, 1, 8, 1, 1, 8, 1, 1, 1,
    >                 1, 1, 1, 1, 1, 1, 1, 1, 1]));;
    gap> IsZeroRectangularBand(Semigroup(D));
    true
    gap> IsZeroRectangularBand(Semigroup(GreensDClasses(S)[1]));
    false

##### 12.1-27 IsZeroSemigroup

`‣ IsZeroSemigroup`( S ) | ( property )

Returns: `true` or `false`.

`IsZeroSemigroup` returns `true` if the semigroup S is a zero semigroup and `false` if it is not.

A semigroup `S` is a zero semigroup if there exists an element `z` in `S` such that `x*y=z` for all `x,y` in `S`. An inverse semigroup is a zero semigroup if and only if it is trivial.

    gap> S := Semigroup(
    > Transformation([4, 7, 6, 3, 1, 5, 3, 6, 5, 9]),
    > Transformation([5, 3, 5, 1, 9, 3, 8, 7, 4, 3]));;
    gap> IsZeroSemigroup(S);
    false
    gap> S := Semigroup(
    >  Transformation([7, 8, 8, 8, 5, 8, 8, 8]),
    >  Transformation([8, 8, 8, 8, 5, 7, 8, 8]),
    >  Transformation([8, 7, 8, 8, 5, 8, 8, 8]),
    >  Transformation([8, 8, 8, 7, 5, 8, 8, 8]),
    >  Transformation([8, 8, 7, 8, 5, 8, 8, 8]));;
    gap> IsZeroSemigroup(S);
    true
    gap> MultiplicativeZero(S);
    Transformation( [ 8, 8, 8, 8, 5, 8, 8, 8 ] )

##### 12.1-28 IsZeroSimpleSemigroup

`‣ IsZeroSimpleSemigroup`( S ) | ( property )

Returns: `true` or `false`.

`IsZeroSimpleSemigroup` returns `true` if the semigroup S is 0-simple and `false` if it is not.

A semigroup is a 0-simple if it has no two-sided ideals other than itself and the set containing the zero element; see also `MultiplicativeZero` (11.8-3). An inverse semigroup is 0-simple if and only if it is a Brandt semigroup; see `IsBrandtSemigroup` (12.2-2).

    gap> S := Semigroup(
    >  Transformation([1, 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 17,
    >                  17, 17, 17, 17, 17]),
    >  Transformation([1, 17, 17, 17, 11, 17, 17, 17, 17, 17, 17, 17,
    >                  17, 17, 17, 17, 17]),
    >  Transformation([1, 17, 17, 17, 17, 17, 17, 17, 17, 17, 4, 17,
    >                  17, 17, 17, 17, 17]),
    >  Transformation([1, 17, 17, 5, 17, 17, 17, 17, 17, 17, 17, 17,
    >                  17, 17, 17, 17, 17]));;
    gap> IsZeroSimpleSemigroup(S);
    true
    gap> S := Semigroup(
    > Transformation([2, 3, 4, 5, 1, 8, 7, 6, 2, 7]),
    > Transformation([2, 3, 4, 5, 6, 8, 7, 1, 2, 2]));;
    gap> IsZeroSimpleSemigroup(S);
    false

##### 12.1-29 IsSelfDualSemigroup

`‣ IsSelfDualSemigroup`( S ) | ( property )

Returns: `true` or `false`.

Returns `true` if the semigroup S is self dual and `false` otherwise.

A semigroup is self dual if it is isomorphic to its dual, that is, the semigroup `T` with multiplication `*` defined by `x*y=yx` where `yx` denotes the product in S.

    gap> F := FreeSemigroup("a", "b");
    <free semigroup on the generators [ a, b ]>
    gap> AssignGeneratorVariables(F);
    gap> R := [[a ^ 3, a], [b ^ 2, b], [(a * b) ^ 2, a]];
    [ [ a^3, a ], [ b^2, b ], [ (a*b)^2, a ] ]
    gap> S := F / R;
    <fp semigroup with 2 generators and 3 relations of length 14>
    gap> IsSelfDualSemigroup(S);
    false
    gap> IsSelfDualSemigroup(FreeBand(3));
    true
    gap> S := DualSymmetricInverseMonoid(3);
    <inverse block bijection monoid of degree 3 with 3 generators>
    gap> IsSelfDualSemigroup(S);
    true

#### 12.2 Inverse semigroups

In this section we describe the properties of an inverse semigroup or monoid that can be determined using the Semigroups package.

##### 12.2-1 IsCliffordSemigroup

`‣ IsCliffordSemigroup`( S ) | ( property )

Returns: `true` or `false`.

`IsCliffordSemigroup` returns `true` if the semigroup S is regular and its idempotents are central, and `false` if it is not.

    gap> S := Semigroup(Transformation([1, 2, 4, 5, 6, 3, 7, 8]),
    >                   Transformation([3, 3, 4, 5, 6, 2, 7, 8]),
    >                   Transformation([1, 2, 5, 3, 6, 8, 4, 4]));;
    gap> IsCliffordSemigroup(S);
    true
    gap> T := Range(IsomorphismPartialPermSemigroup(S));;
    gap> IsCliffordSemigroup(S);
    true
    gap> S := DualSymmetricInverseMonoid(5);;
    gap> T := IdempotentGeneratedSubsemigroup(S);;
    gap> IsCliffordSemigroup(T);
    true

##### 12.2-2 IsBrandtSemigroup

`‣ IsBrandtSemigroup`( S ) | ( property )

Returns: `true` or `false`.

`IsBrandtSemigroup` return `true` if the semigroup S is a finite 0-simple inverse semigroup, and `false` if it is not. See also `IsZeroSimpleSemigroup` (12.1-28) and `IsInverseSemigroup` (Reference: IsInverseSemigroup).

    gap> S := Semigroup(
    > Transformation([2, 8, 8, 8, 8, 8, 8, 8]),
    > Transformation([5, 8, 8, 8, 8, 8, 8, 8]),
    > Transformation([8, 3, 8, 8, 8, 8, 8, 8]),
    > Transformation([8, 6, 8, 8, 8, 8, 8, 8]),
    > Transformation([8, 8, 1, 8, 8, 8, 8, 8]),
    > Transformation([8, 8, 8, 1, 8, 8, 8, 8]),
    > Transformation([8, 8, 8, 8, 4, 8, 8, 8]),
    > Transformation([8, 8, 8, 8, 8, 7, 8, 8]),
    > Transformation([8, 8, 8, 8, 8, 8, 2, 8]));;
    gap> IsBrandtSemigroup(S);
    true
    gap> T := Range(IsomorphismPartialPermSemigroup(S));;
    gap> IsBrandtSemigroup(T);
    true
    gap> S := DualSymmetricInverseMonoid(4);;
    gap> D := DClass(S,
    >                Bipartition([[1, 2, 3, -1, -2, -3], [4, -4]]));;
    gap> R := InjectionPrincipalFactor(D);;
    gap> S := Semigroup(PreImages(R, GeneratorsOfSemigroup(Range(R))));;
    gap> IsBrandtSemigroup(S);
    true

##### 12.2-3 IsEUnitaryInverseSemigroup

`‣ IsEUnitaryInverseSemigroup`( S ) | ( property )

Returns: `true` or `false`.

As described in Section 5.9 of [How95], an inverse semigroup S with semilattice of idempotents E is E-unitary if for

\[ s \in S\textrm{ and }e \in E\textrm{: }es \in E \Rightarrow s \in E. \]

Equivalently, S is E-unitary if E is closed in the natural partial order (see Proposition 5.9.1 in [How95]):

\[ \textrm{for } s \in S\textrm{ and }e \in E\textrm{: }e \le s \Rightarrow s \in E. \]

This condition is equivalent to E being majorantly closed in S. See `IdempotentGeneratedSubsemigroup` (11.10-3) and `IsMajorantlyClosed` (12.2-8). Hence an inverse semigroup of partial permutations, block bijections or partial permutation bipartitions is E-unitary if and only if the idempotent semilattice is majorantly closed.

    gap> S := InverseSemigroup(
    >  PartialPerm([1, 2, 3, 4], [2, 3, 1, 6]),
    >  PartialPerm([1, 2, 3, 5], [3, 2, 1, 6]));;
    gap> IsEUnitaryInverseSemigroup(S);
    true
    gap> e := IdempotentGeneratedSubsemigroup(S);;
    gap> ForAll(Difference(S, e), x -> not ForAny(e, y -> y * x in e));
    true
    gap> T := InverseSemigroup([
    >  PartialPerm([1, 3, 4, 6, 8], [2, 5, 10, 7, 9]),
    >  PartialPerm([1, 2, 3, 5, 6, 7, 8], [5, 8, 9, 2, 10, 1, 3]),
    >  PartialPerm([1, 2, 3, 5, 6, 7, 9], [9, 8, 4, 1, 6, 7, 2])]);;
    gap> IsEUnitaryInverseSemigroup(T);
    false
    gap> U := InverseSemigroup([
    >  PartialPerm([1, 2, 3, 4, 5], [2, 3, 4, 5, 1]),
    >  PartialPerm([1, 2, 3, 4, 5], [2, 1, 3, 4, 5])]);;
    gap> IsEUnitaryInverseSemigroup(U);
    true
    gap> IsGroupAsSemigroup(U);
    true
    gap> StructureDescription(U);
    "S5"

##### 12.2-4 IsFInverseSemigroup

`‣ IsFInverseSemigroup`( S ) | ( property )

Returns: `true` or `false`.

This functions determines whether a given semigroup is an F-inverse semigroup. An F-inverse semigroup is a semigroup which satisfies `IsEUnitaryInverseSemigroup` (12.2-3) as well as being isomorphic to some `McAlisterTripleSemigroup` (8.4-2) where the `McAlisterTripleSemigroupPartialOrder` (8.4-4) satisfies `IsJoinSemilatticeDigraph` (Digraphs: IsJoinSemilatticeDigraph). McAlister triple semigroups are a representation of E-unitary inverse semigroups and more can be read about them in Chapter 8.4.

    gap> S := InverseMonoid([PartialPermNC([1, 2], [1, 2]),
    > PartialPermNC([1, 2, 3], [1, 2, 3]),
    > PartialPermNC([1, 2, 4], [1, 2, 4]),
    > PartialPermNC([1, 2], [2, 1]), PartialPermNC([1, 2, 3], [2, 1, 3]),
    > PartialPermNC([1, 2, 4], [2, 1, 4])]);;
    gap> IsEUnitaryInverseSemigroup(S);
    true
    gap> IsFInverseSemigroup(S);
    false
    gap> IsFInverseSemigroup(IdempotentGeneratedSubsemigroup(S));
    true

##### 12.2-5 IsFInverseMonoid

`‣ IsFInverseMonoid`( S ) | ( property )

Returns: `true` or `false`.

This function determines whether a given semigroup is an F-inverse monoid. A semigroup is an F-inverse monoid when it satisfies `IsMonoid` (Reference: IsMonoid) and `IsFInverseSemigroup` (12.2-4).

##### 12.2-6 IsFactorisableInverseMonoid

`‣ IsFactorisableInverseMonoid`( S ) | ( property )

Returns: `true` or `false`.

An inverse monoid is factorisable if every element is the product of an element of the group of units and an idempotent; see also `GroupOfUnits` (11.9-1) and `Idempotents` (11.10-1). Hence an inverse semigroup of partial permutations is factorisable if and only if each of its generators is the restriction of some element in the group of units.

    gap> S := InverseSemigroup(
    > PartialPerm([1, 2, 4], [3, 1, 4]),
    > PartialPerm([1, 2, 3, 5], [4, 1, 5, 2]));;
    gap> IsFactorisableInverseMonoid(S);
    false
    gap> IsFactorisableInverseMonoid(SymmetricInverseSemigroup(5));
    true
    gap> IsFactorisableInverseMonoid(DualSymmetricInverseMonoid(5));
    false
    gap> S := FactorisableDualSymmetricInverseMonoid(5);;
    gap> IsFactorisableInverseMonoid(S);
    true

##### 12.2-7 IsJoinIrreducible

`‣ IsJoinIrreducible`( S, x ) | ( operation )

Returns: `true` or `false`.

`IsJoinIrreducible` determines whether an element x of an inverse semigroup S of partial permutations, block bijections or partial permutation bipartitions is join irreducible.

An element x is join irreducible when it is not the least upper bound (with respect to the natural partial order `NaturalLeqPartialPerm` (Reference: NaturalLeqPartialPerm)) of any subset of S not containing x.

    gap> S := SymmetricInverseSemigroup(3);
    <symmetric inverse monoid of degree 3>
    gap> x := PartialPerm([1, 2, 3]);
    <identity partial perm on [ 1, 2, 3 ]>
    gap> IsJoinIrreducible(S, x);
    false
    gap> T := InverseSemigroup([
    >  PartialPerm([1, 2, 4, 3]),
    >  PartialPerm([1]),
    >  PartialPerm([0, 2])]);
    <inverse partial perm semigroup of rank 4 with 3 generators>
    gap> y := PartialPerm([1, 2, 3, 4]);
    <identity partial perm on [ 1, 2, 3, 4 ]>
    gap> IsJoinIrreducible(T, y);
    true
    gap> B := InverseSemigroup([
    >  Bipartition([
    >    [1, -5], [2, -2], [3, 5, 6, 7, -1, -4, -6, -7], [4, -3]]),
    >  Bipartition([
    >    [1, -1], [2, -3], [3, -4], [4, 5, 7, -2, -6, -7], [6, -5]]),
    >  Bipartition([
    >    [1, -2], [2, -4], [3, -6], [4, -1], [5, 7, -3, -7], [6, -5]]),
    >  Bipartition([
    >    [1, -5], [2, -1], [3, -6], [4, 5, 7, -2, -4, -7], [6, -3]])]);
    <inverse block bijection semigroup of degree 7 with 4 generators>
    gap> x := Bipartition([
    >   [1, 2, 3, 5, 6, 7, -2, -3, -4, -5, -6, -7], [4, -1]]);
    <block bijection: [ 1, 2, 3, 5, 6, 7, -2, -3, -4, -5, -6, -7 ],
     [ 4, -1 ]>
    gap> IsJoinIrreducible(B, x);
    true
    gap> IsJoinIrreducible(B, B.1);
    false

##### 12.2-8 IsMajorantlyClosed

`‣ IsMajorantlyClosed`( S, T ) | ( operation )

Returns: `true` or `false`.

`IsMajorantlyClosed` determines whether the subset T of the inverse semigroup of partial permutations, block bijections or partial permutation bipartitions S is majorantly closed in S. See also `MajorantClosure` (11.15-3).

We say that T is majorantly closed in S if it contains all elements of S which are greater than or equal to any element of T, with respect to the natural partial order. See `NaturalLeqPartialPerm` (Reference: NaturalLeqPartialPerm).

Note that T can be a subset of S or a subsemigroup of S.

    gap> S := SymmetricInverseSemigroup(2);
    <symmetric inverse monoid of degree 2>
    gap> T := [Elements(S)[2]];
    [ <identity partial perm on [ 1 ]> ]
    gap> IsMajorantlyClosed(S, T);
    false
    gap> U := [Elements(S)[2], Elements(S)[6]];
    [ <identity partial perm on [ 1 ]>, <identity partial perm on [ 1, 2 ]
        > ]
    gap> IsMajorantlyClosed(S, U);
    true
    gap> D := DualSymmetricInverseSemigroup(3);
    <inverse block bijection monoid of degree 3 with 3 generators>
    gap> x := Bipartition([[1, -2], [2, -3], [3, -1]]);;
    gap> IsMajorantlyClosed(D, [x]);
    true
    gap> y := Bipartition([[1, 2, -1, -2], [3, -3]]);;
    gap> IsMajorantlyClosed(D, [x, y]);
    false

##### 12.2-9 IsMonogenicInverseSemigroup

`‣ IsMonogenicInverseSemigroup`( S ) | ( property )

Returns: `true` or `false`.

`IsMonogenicInverseSemigroup` returns `true` if the semigroup S is a monogenic inverse semigroup and it returns `false` if it is not.

A inverse semigroup is monogenic if it is generated as an inverse semigroup by a single element. See also `IsMonogenicSemigroup` (12.1-11) and `IsMonogenicInverseMonoid` (12.2-10).

    gap> x := PartialPerm([1, 2, 3, 6, 8, 10], [2, 6, 7, 9, 1, 5]);;
    gap> S := InverseSemigroup(x, x ^ 2, x ^ 3);;
    gap> IsMonogenicSemigroup(S);
    false
    gap> IsMonogenicInverseSemigroup(S);
    true
    gap> x := RandomBlockBijection(100);;
    gap> S := InverseSemigroup(x, x ^ 2, x ^ 20);;
    gap> IsMonogenicInverseSemigroup(S);
    true
    gap> S := SymmetricInverseSemigroup(5);;
    gap> IsMonogenicInverseSemigroup(S);
    false

##### 12.2-10 IsMonogenicInverseMonoid

`‣ IsMonogenicInverseMonoid`( S ) | ( property )

Returns: `true` or `false`.

`IsMonogenicInverseMonoid` returns `true` if the monoid S is a monogenic inverse monoid and it returns `false` if it is not.

A inverse monoid is monogenic if it is generated as an inverse monoid by a single element. See also `IsMonogenicInverseSemigroup` (12.2-9) and `IsMonogenicMonoid` (12.1-12).

    gap> x := PartialPerm([1, 2, 3, 6, 8, 10], [2, 6, 7, 9, 1, 5]);;
    gap> S := InverseMonoid(x, x ^ 2, x ^ 3);;
    gap> IsMonogenicMonoid(S);
    false
    gap> IsMonogenicInverseSemigroup(S);
    false
    gap> IsMonogenicInverseMonoid(S);
    true
    gap> x := RandomBlockBijection(100);;
    gap> S := InverseMonoid(x, x ^ 2, x ^ 20);;
    gap> IsMonogenicInverseMonoid(S);
    true
    gap> S := SymmetricInverseMonoid(5);;
    gap> IsMonogenicInverseMonoid(S);
    false

[Top of Book] [Contents] [Previous Chapter] [Next Chapter]
Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Bib Ind

generated by GAPDoc2HTML