Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/GAP/pkg/semigroups/doc/   (Algebra von RWTH Aachen Version 4.15.1©)  Datei vom 29.7.2025 mit Größe 40 kB image not shown  

Quelle  greens-generic.xml   Sprache: XML

 
#############################################################################
##
#W  greens-generic.xml
#Y  Copyright (C) 2011-21                                James D. Mitchell
##
##  Licensing information can be found in the README file of this package.
##
#############################################################################
##

<#GAPDoc Label="IsGreensClassNC">
  <ManSection>
    <Prop Name="IsGreensClassNC" Arg="class"/>
    <Returns><K>true</K> or <K>false</K>.</Returns>
    <Description>
      A Green's class class of a semigroup S satisfies
      <C>IsGreensClassNC</C> if it was not known to &GAP; that the
      representative of <A>class</A> was an element of <C>S</C> at the point
      that <A>class</A> was created.
    </Description>
  </ManSection>
<#/GAPDoc>

<#GAPDoc Label="MultiplicativeNeutralElement">
  <ManSection>
    <Meth Name = "MultiplicativeNeutralElement" Arg = "H" Label = "for an H-class"/>
    <Returns>A semigroup element or <K>fail</K>.</Returns>
    <Description>
      If the &H;-class <A>H</A> of a semigroup <C>S</C> is a subgroup of
      <C>S</C>, then <C>MultiplicativeNeutralElement</C> returns the identity of
      <A>H</A>. If <A>H</A> is not a subgroup of <C>S</C>, then <K>fail</K> is
      returned.
      <Example><![CDATA[
gap> S := Semigroup([PartialPerm([1, 5, 2]),
>  PartialPerm([2, 0, 4]), PartialPerm([4, 1, 5]),
>  PartialPerm([1, 0, 3, 0, 4]), PartialPerm([1, 2, 0, 3, 5]),
>  PartialPerm([1, 3, 2, 0, 5]), PartialPerm([5, 0, 0, 4, 3])]);;
gap> H := HClass(S, PartialPerm([1, 2]));;
gap> MultiplicativeNeutralElement(H);
<identity partial perm on [ 1, 2 ]>
gap> H := HClass(S, PartialPerm([1, 4]));;
gap> MultiplicativeNeutralElement(H);
fail]]></Example>
    </Description>
  </ManSection>
<#/GAPDoc>

<#GAPDoc Label="\<">
  <ManSection><Heading>Less than for Green's classes
    <Meth Name = "\<" Arg = 'left-expr, right-expr' Label = "for Green's classes"/>
    <Returns><K>true</K> or <K>false</K>.</Returns>
    <Description>
      The Green's class left-expr is less than or equal to
      <A>right-expr</A> if they belong to the same
      semigroup and the representative of <A>left-expr</A> is less than the
      representative of <A>right-expr</A> under <C><</C>; see also
      <Ref Attr="Representative" BookName="ref"/>.
      <P/>

      Please note that this is not the usual order on the Green's classes of a
      semigroup as defined in <Ref Sect="Green's Relations" BookName="ref"/>.
      See also <Ref Oper="IsGreensLessThanOrEqual" BookName="ref"/>.

      <Example><![CDATA[
gap> S := FullTransformationSemigroup(4);;
gap> A := GreensRClassOfElement(S, Transformation([2, 1, 3, 1]));
<Green's R-class: Transformation( [ 2, 1, 3, 1 ] )>
gap> B := GreensRClassOfElement(S, Transformation([1, 2, 3, 4]));
<Green's R-class: IdentityTransformation>
gap> A < B;
false
gap> B < A;
true
gap> IsGreensLessThanOrEqual(A, B);
true
gap> IsGreensLessThanOrEqual(B, A);
false
gap> S := SymmetricInverseSemigroup(4);;
gap> A := GreensJClassOfElement(S, PartialPerm([1, 3, 4]));;
gap> B := GreensJClassOfElement(S, PartialPerm([3, 1]));;
gap> A < B;
true
gap> B < A;
false
gap> IsGreensLessThanOrEqual(A, B);
false
gap> IsGreensLessThanOrEqual(B, A);
true]]></Example>
    </Description>
  </ManSection>
<#/GAPDoc>

<#GAPDoc Label="XClassOfYClass">
  <ManSection><Heading>XClassOfYClass</Heading>
    <Meth Name = "DClassOfHClass" Arg = "class"/>
    <Meth Name = "DClassOfLClass" Arg = "class"/>
    <Meth Name = "DClassOfRClass" Arg = "class"/>
    <Meth Name = "LClassOfHClass" Arg = "class"/>
    <Meth Name = "RClassOfHClass" Arg = "class"/>
    <Returns>A Green's class.
    <Description>
     <C>XClassOfYClass</C> returns the <C>X</C>-class containing the
     <C>Y</C>-class <A>class</A> where <C>X</C> and <C>Y</C> should be replaced
     by an appropriate choice of <C>D, H, L,</C> and <C>R</C>.<P/>

      Note that if it is not known to &GAP; whether or not the representative
      of <A>class</A> is an element of the semigroup containing <A>class</A>,
      then no attempt is made to check this.<P/>

      The same result can be produced using:
      <Log>First(GreensXClasses(S), x -> Representative(x) in class);</Log>
      but this might be substantially slower. Note that <C>XClassOfYClass</C>
      is also likely to be faster than
      <Log>GreensXClassOfElement(S, Representative(class));</Log>
      <P/>

      <C>DClass</C> can also be used as a synonym for <C>DClassOfHClass</C>,
      <C>DClassOfLClass</C>, and <C>DClassOfRClass</C>;
      <C>LClass</C> as a synonym for <C>LClassOfHClass</C>; and
      <C>RClass</C> as a synonym for <C>RClassOfHClass</C>.

      See also <Ref Oper = "GreensDClassOfElement" BookName = "ref"/>
      and <Ref Oper = "GreensDClassOfElementNC"/>.
      <Example><![CDATA[
gap> S := Semigroup(Transformation([1, 3, 2]),
>                   Transformation([2, 1, 3]),
>                   Transformation([3, 2, 1]),
>                   Transformation([1, 3, 1]));;
gap> R := GreensRClassOfElement(S, Transformation([3, 2, 1]));
<Green's R-class: Transformation( [ 3, 2, 1 ] )>
gap> DClassOfRClass(R);
<Green's D-class: Transformation( [ 3, 2, 1 ] )>
gap> IsGreensDClass(DClassOfRClass(R));
true
gap> S := InverseSemigroup(
> PartialPerm([2, 6, 7, 0, 0, 9, 0, 1, 0, 5]),
> PartialPerm([3, 8, 1, 9, 0, 4, 10, 5, 0, 6]));
<inverse partial perm semigroup of rank 10 with 2 generators>
gap> x := S.1;
[3,7][8,1,2,6,9][10,5]
gap> H := HClass(S, x);
<Green's H-class: [3,7][8,1,2,6,9][10,5]>
gap> R := RClassOfHClass(H);
<Green's R-class: [3,7][8,1,2,6,9][10,5]>
gap> L := LClass(H);;
gap> L = LClass(S, PartialPerm([1, 2, 0, 0, 5, 6, 7, 0, 9]));
true
gap> DClass(R) = DClass(L);
true
gap> DClass(H) = DClass(L);
true]]></Example>
    </Description>
  </ManSection>
<#/GAPDoc>

<#GAPDoc Label="GreensXClasses">
  <ManSection Label="GreensXClasses"><Heading>GreensXClasses</Heading>
    <Meth Name = "GreensDClasses" Arg = "obj"/>
    <Meth Name = "DClasses" Arg = "obj"/>
    <Meth Name = "GreensHClasses" Arg = "obj"/>
    <Meth Name = "HClasses" Arg = "obj"/>
    <Meth Name = "GreensJClasses" Arg = "obj"/>
    <Meth Name = "JClasses" Arg = "obj"/>
    <Meth Name = "GreensLClasses" Arg = "obj"/>
    <Meth Name = "LClasses" Arg = "obj"/>
    <Meth Name = "GreensRClasses" Arg = "obj"/>
    <Meth Name = "RClasses" Arg = "obj"/>
    <Returns>A list of Green's classes.
    </Returns>
    <Description>
      These functions produce essentially the same output as the &GAP; library
      functions with the same names; see <Ref Meth = "GreensDClasses"
        BookName = "ref"/>. The main difference is that these functions can be
      applied to a wider class of objects:
      <List>
      <Mark><C>GreensDClasses</C> and <C>DClasses</C></Mark>
      <Item>
        <A>X</A> should be a semigroup.
      </Item>

      <Mark><C>GreensHClasses</C> and <C>HClasses</C></Mark>
      <Item>
        <A>X</A> can be a semigroup, &R;-class, &L;-class, or &D;-class.
      </Item>

      <Mark><C>GreensLClasses</C> and <C>LClasses</C></Mark>
      <Item>
        <A>X</A> can be a semigroup or &D;-class.
      </Item>

      <Mark><C>GreensRClasses</C> and <C>RClasses</C></Mark>
      <Item>
        <A>X</A> can be a semigroup or &D;-class.
      </Item>
      </List>

      Note that <C>GreensXClasses</C> and <C>XClasses</C> are synonyms and have
      identical output. The shorter command is provided for the sake of
      convenience.<P/>

      See also <Ref Attr = "DClassReps"/>, <Ref Oper = "IteratorOfDClassReps"/>,
      <Ref Oper = "IteratorOfDClasses"/>, and <Ref Attr = "NrDClasses"/>.
      <Example><![CDATA[
gap> S := Semigroup(Transformation([3, 4, 4, 4]),
>                   Transformation([4, 3, 1, 2]));;
gap> GreensDClasses(S);
[ <Green's D-class: Transformation( [ 3, 4, 4, 4 ] )>,
  <Green's D-class: Transformation( [ 4, 3, 1, 2 ] )>,
  <Green's D-class: Transformation( [ 4, 4, 4, 4 ] )> ]
gap> GreensRClasses(S);
[ <Green's R-class: Transformation( [ 3, 4, 4, 4 ] )>,
  <Green's R-class: Transformation( [ 4, 3, 1, 2 ] )>,
  <Green's R-class: Transformation( [ 4, 4, 4, 4 ] )>,
  <Green's R-class: Transformation( [ 4, 4, 3, 4 ] )>,
  <Green's R-class: Transformation( [ 4, 3, 4, 4 ] )>,
  <Green's R-class: Transformation( [ 4, 4, 4, 3 ] )> ]
gap> D := GreensDClasses(S)[1];
<Green's D-class: Transformation( [ 3, 4, 4, 4 ] )>
gap> GreensLClasses(D);
[ <Green's L-class: Transformation( [ 3, 4, 4, 4 ] )>,
  <Green's L-class: Transformation( [ 1, 2, 2, 2 ] )> ]
gap> GreensRClasses(D);
[ <Green's R-class: Transformation( [ 3, 4, 4, 4 ] )>,
  <Green's R-class: Transformation( [ 4, 4, 3, 4 ] )>,
  <Green's R-class: Transformation( [ 4, 3, 4, 4 ] )>,
  <Green's R-class: Transformation( [ 4, 4, 4, 3 ] )> ]
gap> R := GreensRClasses(D)[1];
<Green's R-class: Transformation( [ 3, 4, 4, 4 ] )>
gap> GreensHClasses(R);
[ <Green's H-class: Transformation( [ 3, 4, 4, 4 ] )>,
  <Green's H-class: Transformation( [ 1, 2, 2, 2 ] )> ]
gap> S := InverseSemigroup([
> PartialPerm([2, 4, 1]), PartialPerm([3, 0, 4, 1])]);;
gap> GreensDClasses(S);
[ <Green's D-class: >,
  <Green's D-class: >,
  <Green's D-class: >,
  <Green's D-class: >,
  <Green's D-class: > ]
gap> GreensLClasses(S);
[ <Green's L-class: >,
  <Green's L-class: [4,2,1,3]>,
  <Green's L-class: >,
  <Green's L-class: >,
  <Green's L-class: [3,1,2]>, s L-class: [1,4][3,2]>,
  <Green's L-class: [1,3,4]>, s L-class: [3,1,4]>,
  <Green's L-class: [1,2](3)>,
  <Green's L-class: >,
  <Green's L-class: [4,1]>, s L-class: [4,3]>,
  <Green's L-class: [4,2]>, s L-class: <empty partial perm>> ]
gap> D := GreensDClasses(S)[3];
<Green's D-class: >
gap> GreensLClasses(D);
[ <Green's L-class: >,
  <Green's L-class: [3,1,2]>, s L-class: [1,4][3,2]>,
  <Green's L-class: [1,3,4]>, s L-class: [3,1,4]>,
  <Green's L-class: [1,2](3)> ]
gap> GreensRClasses(D);
[ <Green's R-class: >,
  <Green's R-class: [2,1,3]>, s R-class: [2,3][4,1]>,
  <Green's R-class: [4,3,1]>, s R-class: [4,1,3]>,
  <Green's R-class: [2,1](3)> ]]]>
    </Description>
  </ManSection>
<#/GAPDoc>

<#GAPDoc Label="GreensXClassOfElement">
  <ManSection><Heading>GreensXClassOfElement</Heading>
    <Oper Name = "GreensDClassOfElement" Arg = "X, f"/>
    <Oper Name = "DClass" Arg = "X, f"/>
    <Oper Name = "GreensHClassOfElement" Arg = "X, f"/>
    <Oper Name = "GreensHClassOfElement" Arg = "R, i, j"
      Label = "for a Rees matrix semigroup"/>
    <Oper Name = "HClass" Arg = "X, f"/>
    <Oper Name = "HClass" Arg = "R, i, j" Label = "for a Rees matrix semigroup"/>
    <Oper Name = "GreensLClassOfElement" Arg = "X, f"/>
    <Oper Name = "LClass" Arg = "X, f"/>
    <Oper Name = "GreensRClassOfElement" Arg = "X, f"/>
    <Oper Name = "RClass" Arg = "X, f"/>
    <Returns>A Green's class.
    <Description>
      These functions produce essentially the same output as the &GAP; library
      functions with the same names; see <Ref Oper = "GreensDClassOfElement"
      BookName = "ref"/>.  The main difference is that these functions can be
      applied to a wider class of objects:
      <List>
      <Mark><C>GreensDClassOfElement</C> and <C>DClass</C></Mark>
      <Item>
        <A>X</A> must be a semigroup.
      </Item>

      <Mark><C>GreensHClassOfElement</C> and <C>HClass</C></Mark>
      <Item>
        <A>X</A> can be a semigroup, &R;-class, &L;-class, or &D;-class.
      </Item>
      <Item>
        If <A>R</A> is a <A>IxJ</A> Rees matrix semigroup or a Rees 0-matrix
        semigroup, and <A>i</A> and <A>j</A> are integers of the corresponding
        index sets, then <C>GreensHClassOfElement</C> returns the &H;-class in
        row <A>i</A> and column <A>j</A>.
      </Item>

      <Mark><C>GreensLClassOfElement</C> and <C>LClass</C></Mark>
      <Item>
        <A>X</A> can be a semigroup or &D;-class.
      </Item>

      <Mark><C>GreensRClassOfElement</C> and <C>RClass</C></Mark>
      <Item>
        <A>X</A> can be a semigroup or &D;-class.
      </Item>
      </List>

      Note that <C>GreensXClassOfElement</C> and <C>XClass</C> are synonyms and
      have identical output. The shorter command is provided for the sake of
      convenience.<P/>
    </Description>
  </ManSection>
<#/GAPDoc>

<#GAPDoc Label="GreensXClassOfElementNC">
  <ManSection><Heading>GreensXClassOfElementNC</Heading>
    <Oper Name = "GreensDClassOfElementNC" Arg = "X, f"/>
    <Oper Name = "DClassNC" Arg = "X, f"/>
    <Oper Name = "GreensHClassOfElementNC" Arg = "X, f"/>
    <Oper Name = "HClassNC" Arg = "X, f"/>
    <Oper Name = "GreensLClassOfElementNC" Arg = "X, f"/>
    <Oper Name = "LClassNC" Arg = "X, f"/>
    <Oper Name = "GreensRClassOfElementNC" Arg = "X, f"/>
    <Oper Name = "RClassNC" Arg = "X, f"/>
    <Returns>A Green's class.
    <Description>
      These functions are essentially the same as <Ref
      Oper = "GreensDClassOfElement"/>  except that no effort is made to verify
      if <A>f</A> is an element of <A>X</A>.  More precisely,
      <C>GreensXClassOfElementNC</C> and <C>XClassNC</C> first check if
      <A>f</A> has already been shown to be an element of <A>X</A>.  If it is
      not known to &GAP; if <A>f</A> is an element of <A>X</A>, then no further
      attempt to verify this is made. <P/>

      Note that <C>GreensXClassOfElementNC</C> and <C>XClassNC</C> are synonyms
      and have identical output. The shorter command is provided for the sake
      of convenience. <P/>

      It can be quicker to compute the class of an element using
      <C>GreensRClassOfElementNC</C>, say, than using
      <C>GreensRClassOfElement</C>
      if it is known <E>a priori</E> that <A>f</A>
      is an element of <A>X</A>. On the other
      hand, if <A>f</A> is not an element of <A>X</A>, then the results of this
      computation are unpredictable.<P/>

      For example, if <Log>x := Transformation([15, 18, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20]);</Log>
      in the semigroup <A>X</A> of order-preserving mappings on 20 points, then
      <Log>GreensRClassOfElementNC(X, x);</Log>
      returns an answer relatively quickly, whereas
      <Log>GreensRClassOfElement(X, x)</Log>
      can take a significant amount of time to return a value.<P/>

      See also <Ref Oper="GreensRClassOfElement" BookName="ref"/> and <Ref
      Meth="RClassOfHClass"/>.

      <Example><![CDATA[
gap> S := RandomSemigroup(IsTransformationSemigroup, 2, 1000);;
gap> x := [1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 1];;
gap> x := EvaluateWord(Generators(S), x);;
gap> R := GreensRClassOfElementNC(S, x);;
gap> Size(R);
1
gap> L := GreensLClassOfElementNC(S, x);;
gap> Size(L);
1
gap> x := PartialPerm([2, 3, 4, 5, 0, 0, 6, 8, 10, 11]);;
gap> L := LClass(POI(11), x);
<Green's L-class: [1,2,3,4,5][7,6][9,10,11](8)>
gap> Size(L);
165]]></Example>
    </Description>
  </ManSection>
<#/GAPDoc>

<#GAPDoc Label="XClassReps">
  <ManSection><Heading>XClassReps</Heading>
    <Attr Name = "DClassReps" Arg = "obj"/>
    <Attr Name = "HClassReps" Arg = "obj"/>
    <Attr Name = "LClassReps" Arg = "obj"/>
    <Attr Name = "RClassReps" Arg = "obj"/>
    <Returns>A list of representatives.</Returns>
    <Description>
      <C>XClassReps</C> returns a list of the representatives of the Green's
      classes of <A>obj</A>, which can be a semigroup, &D;-, &L;-, or &R;-class
      where appropriate.<P/>

      The same output can be obtained by calling, for example:

      <Log>List(GreensXClasses(obj), Representative);</Log>

      Note that if the Green's classes themselves are not required, then
      <C>XClassReps</C> will return an answer more quickly than the above,
      since the Green's class objects are not created.



      See also
      <Ref Meth = "GreensDClasses"/>,
      <Ref Oper = "IteratorOfDClassReps"/>,
      <Ref Oper = "IteratorOfDClasses"/>,  and
      <Ref Attr = "NrDClasses"/>.
      <Example><![CDATA[
gap> S := Semigroup(Transformation([3, 4, 4, 4]),
>                   Transformation([4, 3, 1, 2]));;
gap> DClassReps(S);
[ Transformation( [ 3, 4, 4, 4 ] ), Transformation( [ 4, 3, 1, 2 ] ),
  Transformation( [ 4, 4, 4, 4 ] ) ]
gap> LClassReps(S);
[ Transformation( [ 3, 4, 4, 4 ] ), Transformation( [ 1, 2, 2, 2 ] ),
  Transformation( [ 4, 3, 1, 2 ] ), Transformation( [ 4, 4, 4, 4 ] ),
  Transformation( [ 2, 2, 2, 2 ] ), Transformation( [ 3, 3, 3, 3 ] ),
  Transformation( [ 1, 1, 1, 1 ] ) ]
gap> D := GreensDClasses(S)[1];
<Green's D-class: Transformation( [ 3, 4, 4, 4 ] )>
gap> LClassReps(D);
[ Transformation( [ 3, 4, 4, 4 ] ), Transformation( [ 1, 2, 2, 2 ] ) ]
gap> RClassReps(D);
[ Transformation( [ 3, 4, 4, 4 ] ), Transformation( [ 4, 4, 3, 4 ] ),
  Transformation( [ 4, 3, 4, 4 ] ), Transformation( [ 4, 4, 4, 3 ] ) ]
gap> R := GreensRClasses(D)[1];;
gap> HClassReps(R);
[ Transformation( [ 3, 4, 4, 4 ] ), Transformation( [ 1, 2, 2, 2 ] ) ]
gap> S := SymmetricInverseSemigroup(6);;
gap> e := InverseSemigroup(Idempotents(S));;
gap> M := MunnSemigroup(e);;
gap> L := LClassNC(M, PartialPerm([51, 63], [51, 47]));;
gap> HClassReps(L);
[ <identity partial perm on [ 47, 51 ]>, [27,47](51), [50,47](51),
  [64,47](51), [63,47](51), [59,47](51) ]]]></Example>
    </Description>
  </ManSection>
<#/GAPDoc>

<#GAPDoc Label="GroupHClass">
  <ManSection>
    <Attr Name = "GroupHClass" Arg = "class"/>
    <Returns>
      A group &H;-class of the &D;-class <A>class</A> if it is regular and
      <K>fail</K> if it is not.
    </Returns>
    <Description>
      <C>GroupHClass</C> is a synonym for
      <Ref Attr = "GroupHClassOfGreensDClass" BookName = "ref"/>. <P/>

      See also
      <Ref Prop = "IsGroupHClass" BookName = "ref"/>,
      <Ref Prop = "IsRegularDClass" BookName = "ref"/>,
      <Ref Prop = "IsRegularGreensClass"/>,
      and <Ref Prop = "IsRegularSemigroup"/>.

      <Example><![CDATA[
gap> S := Semigroup(Transformation([2, 6, 7, 2, 6, 1, 1, 5]),
>                   Transformation([3, 8, 1, 4, 5, 6, 7, 1]));;
gap> IsRegularSemigroup(S);
false
gap> iter := IteratorOfDClasses(S);;
gap> repeat D := NextIterator(iter); until IsRegularDClass(D);
gap> D;
<Green's D-class: Transformation( [ 6, 1, 1, 6, 1, 2, 2, 6 ] )>
gap> NrIdempotents(D);
12
gap> NrRClasses(D);
8
gap> NrLClasses(D);
4
gap> GroupHClass(D);
<Green's H-class: Transformation( [ 1, 2, 2, 1, 2, 6, 6, 1 ] )>
gap> GroupHClassOfGreensDClass(D);
<Green's H-class: Transformation( [ 1, 2, 2, 1, 2, 6, 6, 1 ] )>
gap> StructureDescription(GroupHClass(D));
"S3"
gap> repeat D := NextIterator(iter); until not IsRegularDClass(D);
gap> D;
<Green's D-class: Transformation( [ 7, 5, 2, 2, 6, 1, 1, 2 ] )>
gap> IsRegularDClass(D);
false
gap> GroupHClass(D);
fail
gap> S := InverseSemigroup(
> PartialPerm([2, 1, 6, 0, 3]), PartialPerm([3, 5, 2, 0, 0, 6]));;
gap> x := PartialPerm([1 .. 3], [6, 3, 1]);;
gap> First(DClasses(S), x -> not IsTrivial(GroupHClass(x)));
<Green's D-class: >
gap> StructureDescription(GroupHClass(last));
"C2"]]></Example>
    </Description>
  </ManSection>
<#/GAPDoc>

<#GAPDoc Label="Idempotents">
  <ManSection>
  <Attr Name = "Idempotents" Arg = "obj[, n]"/>
  <Returns>A list of idempotents.</Returns>
  <Description>
  The argument <A>obj</A> should be a semigroup, &D;-class, &H;-class,
  &L;-class, or &R;-class.<P/>

  If the optional second argument <A>n</A> is present and <A>obj</A> is a
  semigroup, then a list of the idempotents in <A>obj</A> of rank <A>n</A> is
  returned. If you are only interested in the idempotents of a given rank, then
  the second version of the function will probably be faster. However, if the
  optional second argument is present, then nothing is stored in <A>obj</A> and
  so every time the function is called the computation must be repeated.
  <P/>

  This functions produce essentially the same output as the &GAP; library
  function with the same name; see <Ref Attr = "Idempotents" BookName =
    "ref"/>.  The main difference is that this function can be applied to a
  wider class of objects as described above.<P/>

  See also <Ref Prop = "IsRegularDClass" BookName = "ref"/>,
  <Ref Prop = "IsRegularGreensClass"/>
  <Ref Prop = "IsGroupHClass" BookName = "ref"/>,
  <Ref Attr = "NrIdempotents"/>, and
  <Ref Attr = "GroupHClass"/>.

  <Example><![CDATA[
gap> S := Semigroup(Transformation([2, 3, 4, 1]),
>                   Transformation([3, 3, 1, 1]));;
gap> Idempotents(S, 1);
[  ]
gap> AsSet(Idempotents(S, 2));
[ Transformation( [ 1, 1, 3, 3 ] ), Transformation( [ 1, 3, 3, 1 ] ),
  Transformation( [ 2, 2, 4, 4 ] ), Transformation( [ 4, 2, 2, 4 ] ) ]
gap> AsSet(Idempotents(S));
[ Transformation( [ 1, 1, 3, 3 ] ), IdentityTransformation,
  Transformation( [ 1, 3, 3, 1 ] ), Transformation( [ 2, 2, 4, 4 ] ),
  Transformation( [ 4, 2, 2, 4 ] ) ]
gap> x := Transformation([2, 2, 4, 4]);;
gap> R := GreensRClassOfElement(S, x);;
gap> Idempotents(R);
[ Transformation( [ 1, 1, 3, 3 ] ), Transformation( [ 2, 2, 4, 4 ] ) ]
gap> x := Transformation([4, 2, 2, 4]);;
gap> L := GreensLClassOfElement(S, x);;
gap> AsSet(Idempotents(L));
[ Transformation( [ 2, 2, 4, 4 ] ), Transformation( [ 4, 2, 2, 4 ] ) ]
gap> D := DClassOfLClass(L);;
gap> AsSet(Idempotents(D));
[ Transformation( [ 1, 1, 3, 3 ] ), Transformation( [ 1, 3, 3, 1 ] ),
  Transformation( [ 2, 2, 4, 4 ] ), Transformation( [ 4, 2, 2, 4 ] ) ]
gap> L := GreensLClassOfElement(S, Transformation([3, 1, 1, 3]));;
gap> AsSet(Idempotents(L));
[ Transformation( [ 1, 1, 3, 3 ] ), Transformation( [ 1, 3, 3, 1 ] ) ]
gap> H := GroupHClass(D);
<Green's H-class: Transformation( [ 1, 1, 3, 3 ] )>
gap> Idempotents(H);
[ Transformation( [ 1, 1, 3, 3 ] ) ]
gap> S := InverseSemigroup(
> PartialPerm([10, 6, 3, 4, 9, 0, 1]),
> PartialPerm([6, 10, 7, 4, 8, 2, 9, 1]));;
gap> Idempotents(S, 1);
[ <identity partial perm on [ 4 ]> ]
gap> Idempotents(S, 0);
[  ]]]></Example>
  </Description>
  </ManSection>
<#/GAPDoc>

<#GAPDoc Label="IsRegularGreensClass">
  <ManSection>
    <Prop Name="IsRegularGreensClass" Arg="class"/>
    <Returns>
      <K>true</K> or <K>false</K>.
    </Returns>
    <Description>
      This function returns <K>true</K> if <A>class</A> is a regular Green's
      class and <K>false</K> if it is not.
      See also <Ref Prop = "IsRegularDClass" BookName = "ref"/>,
      <Ref Prop = "IsGroupHClass" BookName = "ref"/>,
      <Ref Attr = "GroupHClassOfGreensDClass" BookName = "ref"/>,
      <Ref Attr = "GroupHClass"/>, <Ref Attr = "NrIdempotents"/>,
      <Ref Attr = "Idempotents"/>, and
      <Ref Oper = "IsRegularSemigroupElement" BookName = "ref"/>.
      <P/>

      The function <C>IsRegularDClass</C> produces the same output as the
      &GAP; library functions with the same name; see
      <Ref Oper="IsRegularDClass" BookName="ref"/>.

      <Example><![CDATA[
gap> S := Monoid(Transformation([10, 8, 7, 4, 1, 4, 10, 10, 7, 2]),
>                Transformation([5, 2, 5, 5, 9, 10, 8, 3, 8, 10]));;
gap> f := Transformation([1, 1, 10, 8, 8, 8, 1, 1, 10, 8]);;
gap> R := RClass(S, f);;
gap> IsRegularGreensClass(R);
true
gap> S := Monoid(Transformation([2, 3, 4, 5, 1, 8, 7, 6, 2, 7]),
>                Transformation([3, 8, 7, 4, 1, 4, 3, 3, 7, 2]));;
gap> f := Transformation([3, 8, 7, 4, 1, 4, 3, 3, 7, 2]);;
gap> R := RClass(S, f);;
gap> IsRegularGreensClass(R);
false
gap> NrIdempotents(R);
0
gap> S := Semigroup(Transformation([2, 1, 3, 1]),
>                   Transformation([3, 1, 2, 1]),
>                   Transformation([4, 2, 3, 3]));;
gap> f := Transformation([4, 2, 3, 3]);;
gap> L := GreensLClassOfElement(S, f);;
gap> IsRegularGreensClass(L);
false
gap> R := GreensRClassOfElement(S, f);;
gap> IsRegularGreensClass(R);
false
gap> g := Transformation([4, 4, 4, 4]);;
gap> IsRegularSemigroupElement(S, g);
true
gap> IsRegularGreensClass(LClass(S, g));
true
gap> IsRegularGreensClass(RClass(S, g));
true
gap> IsRegularDClass(DClass(S, g));
true
gap> DClass(S, g) = RClass(S, g);
false]]></Example>
    </Description>
  </ManSection>
<#/GAPDoc>

<#GAPDoc Label="IteratorOfXClassReps">
  <ManSection><Heading>IteratorOfXClassReps</Heading>
  <Oper Name = "IteratorOfDClassReps" Arg = "S"/>
  <Oper Name = "IteratorOfHClassReps" Arg = "S"/>
  <Oper Name = "IteratorOfLClassReps" Arg = "S"/>
  <Returns>
  An iterator.
  </Returns>
  <Description>
  Returns an iterator of the representatives of the Green's classes contained
  in the semigroup <A>S</A>.  See <Ref Sect = "Iterators" BookName = "ref"/> for
  more information on iterators.<P/>

  See also <Ref Meth = "GreensRClasses" BookName = "ref"/>, <Ref
  Meth = "GreensRClasses"/>, and <Ref Oper = "IteratorOfRClasses"/>.<P/>

  </Description>
  </ManSection>
<#/GAPDoc>

<#GAPDoc Label="IteratorOfXClasses">
  <ManSection><Heading>IteratorOfXClasses</Heading>
  <Oper Name = "IteratorOfDClasses" Arg = "S"/>
  <Oper Name = "IteratorOfRClasses" Arg = "S"/>
  <Returns>
  An iterator.
  </Returns>

  <Description>
    Returns an iterator of the Green's classes in the semigroup S.
    See <Ref Sect = "Iterators" BookName = "ref"/> for more information on
    iterators.<P/>

    This function is useful if you are, for example, looking for an &R;-class
    of a semigroup with a particular property but do not necessarily want to
    compute all of the &R;-classes.<P/>

    See also <Ref Meth = "GreensRClasses"/>,
    <Ref Meth = "GreensRClasses" BookName = "ref"/>, and
    <Ref Attr = "NrRClasses"/>. <P/>

    The transformation semigroup in the example below has 25147892 elements but
    it only takes a fraction of a second to find a non-trivial &R;-class. The
    inverse semigroup of partial permutations in the example below has size
    158122047816 but it only takes a fraction of a second to find an &R;-class
    with more than 1000 elements.

  <Example><![CDATA[
gap> gens := [Transformation([2, 4, 1, 5, 4, 4, 7, 3, 8, 1]),
>             Transformation([3, 2, 8, 8, 4, 4, 8, 6, 5, 7]),
>             Transformation([4, 10, 6, 6, 1, 2, 4, 10, 9, 7]),
>             Transformation([6, 2, 2, 4, 9, 9, 5, 10, 1, 8]),
>             Transformation([6, 4, 1, 6, 6, 8, 9, 6, 2, 2]),
>             Transformation([6, 8, 1, 10, 6, 4, 9, 1, 9, 4]),
>             Transformation([8, 6, 2, 3, 3, 4, 8, 6, 2, 9]),
>             Transformation([9, 1, 2, 8, 1, 5, 9, 9, 9, 5]),
>             Transformation([9, 3, 1, 5, 10, 3, 4, 6, 10, 2]),
>             Transformation([10, 7, 3, 7, 1, 9, 8, 8, 4, 10])];;
gap> S := Semigroup(gens);;
gap> iter := IteratorOfRClasses(S);
<iterator>
gap> for R in iter do
>   if Size(R) > 1 then
>     break;
>   fi;
> od;
gap> R;
<Green's R-class: Transformation( [ 6, 4, 1, 6, 6, 8, 9, 6, 2, 2 ] )>
gap> Size(R);
21600
gap> S := InverseSemigroup(
>  PartialPerm([1, 2, 3, 4, 5, 6, 7, 10, 11, 19, 20],
>              [19, 4, 11, 15, 3, 20, 1, 14, 8, 13, 17]),
>  PartialPerm([1, 2, 3, 4, 6, 7, 8, 14, 15, 16, 17],
>              [15, 14, 20, 19, 4, 5, 1, 13, 11, 10, 3]),
>  PartialPerm([1, 2, 4, 6, 7, 8, 9, 10, 14, 15, 18],
>              [7, 2, 17, 10, 1, 19, 9, 3, 11, 16, 18]),
>  PartialPerm([1, 2, 3, 4, 5, 7, 8, 9, 11, 12, 13, 16],
>              [8, 3, 18, 1, 4, 13, 12, 7, 19, 20, 2, 11]),
>  PartialPerm([1, 2, 3, 4, 5, 6, 7, 9, 11, 15, 16, 17, 20],
>              [7, 17, 13, 4, 6, 9, 18, 10, 11, 19, 5, 2, 8]),
>  PartialPerm([1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 18],
>              [10, 20, 11, 7, 13, 8, 4, 9, 2, 18, 17, 6, 15]),
>  PartialPerm([1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 13, 14, 17, 18],
>              [10, 20, 18, 1, 14, 16, 9, 5, 15, 4, 8, 12, 19, 11]),
>  PartialPerm([1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 15, 16, 19, 20],
>              [13, 6, 1, 2, 11, 7, 16, 18, 9, 10, 4, 14, 15, 5, 17]),
>  PartialPerm([1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 20],
>              [5, 3, 12, 9, 20, 15, 8, 16, 13, 1, 17, 11, 14, 10, 2]),
>  PartialPerm([1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 13, 17, 18, 19, 20],
>              [8, 3, 9, 20, 2, 12, 14, 15, 4, 18, 13, 1, 17, 19, 5]));;
gap> iter := IteratorOfRClasses(S);
<iterator>
gap> repeat
>   R := NextIterator(iter);
> until Size(R) > 1000;
gap> R;
<Green's R-class: [8,19,14][11,4][13,15,5][17,20]>
gap> Size(R);
10020240]]></Example>
  </Description>
  </ManSection>
<#/GAPDoc>

<#GAPDoc Label="NrXClasses">
  <ManSection><Heading>NrXClasses</Heading>
  <Attr Name = "NrDClasses" Arg = "obj"/>
  <Attr Name = "NrHClasses" Arg = "obj"/>
  <Attr Name = "NrLClasses" Arg = "obj"/>
  <Attr Name = "NrRClasses" Arg = "obj"/>
  <Returns>
    A positive integer.
  </Returns>
  <Description>
  <C>NrXClasses</C> returns the number of Green's classes in obj where
  <A>obj</A> can be a semigroup, &D;-, &L;-, or &R;-class where appropriate.
  If the actual Green's classes are not required, then it is more efficient to
  use <Log>NrHClasses(obj)</Log> than <Log>Length(HClasses(obj))</Log> since the
  Green's classes themselves are not created when NrXClasses is called.
  <P/>

  See also <Ref Meth = "GreensRClasses"/>,
  <Ref Meth = "GreensRClasses" BookName = "ref"/>,
  <Ref Oper = "IteratorOfRClasses"/>, and

  <Example><![CDATA[
gap> S := Semigroup(
>  Transformation([1, 2, 5, 4, 3, 8, 7, 6]),
>  Transformation([1, 6, 3, 4, 7, 2, 5, 8]),
>  Transformation([2, 1, 6, 7, 8, 3, 4, 5]),
>  Transformation([3, 2, 3, 6, 1, 6, 1, 2]),
>  Transformation([5, 2, 3, 6, 3, 4, 7, 4]));;
gap> x := Transformation([2, 5, 4, 7, 4, 3, 6, 3]);;
gap> R := RClass(S, x);
<Green's R-class: Transformation( [ 2, 5, 4, 7, 4, 3, 6, 3 ] )>
gap> NrHClasses(R);
12
gap> D := DClass(R);
<Green's D-class: Transformation( [ 2, 5, 4, 7, 4, 3, 6, 3 ] )>
gap> NrHClasses(D);
72
gap> L := LClass(S, x);
<Green's L-class: Transformation( [ 2, 5, 4, 7, 4, 3, 6, 3 ] )>
gap> NrHClasses(L);
6
gap> NrHClasses(S);
1555
gap> S := Semigroup(Transformation([4, 6, 5, 2, 1, 3]),
>                   Transformation([6, 3, 2, 5, 4, 1]),
>                   Transformation([1, 2, 4, 3, 5, 6]),
>                   Transformation([3, 5, 6, 1, 2, 3]),
>                   Transformation([5, 3, 6, 6, 6, 2]),
>                   Transformation([2, 3, 2, 6, 4, 6]),
>                   Transformation([2, 1, 2, 2, 2, 4]),
>                   Transformation([4, 4, 1, 2, 1, 2]));;
gap> NrRClasses(S);
150
gap> Size(S);
6342
gap> x := Transformation([1, 3, 3, 1, 3, 5]);;
gap> D := DClass(S, x);
<Green's D-class: Transformation( [ 1, 3, 3, 1, 3, 5 ] )>
gap> NrRClasses(D);
87
gap> S := SymmetricInverseSemigroup(10);;
gap> NrDClasses(S); NrRClasses(S); NrHClasses(S); NrLClasses(S);
11
1024
184756
1024
gap> S := POPI(10);;
gap> NrDClasses(S);
11
gap> NrRClasses(S);
1024]]></Example>
  </Description>
  </ManSection>
<#/GAPDoc>

<#GAPDoc Label="NrIdempotents">
<ManSection>
  <Attr Name = "NrIdempotents" Arg = "obj"/>
  <Returns>
   A positive integer.
  </Returns>
  <Description>
   This function returns the number of idempotents in <A>obj</A> where
   <A>obj</A> can be a semigroup, &D;-, &L;-, &H;-, or &R;-class. If the
   actual idempotents are not required, then it is more efficient to use
   <C>NrIdempotents(obj)</C> than <C>Length(Idempotents(obj))</C> since
   the idempotents themselves are not created when <C>NrIdempotents</C> is
   called.<P/>

  See also <Ref Attr = "Idempotents" BookName = "ref"/> and
  <Ref Attr = "Idempotents"/>,
  <Ref Prop = "IsRegularDClass" BookName = "ref"/>,
  <Ref Prop = "IsRegularGreensClass"/>
  <Ref Prop = "IsGroupHClass" BookName = "ref"/>, and
  <Ref Attr = "GroupHClass"/>.

  <Example><![CDATA[
gap> S := Semigroup(Transformation([2, 3, 4, 1]),
>                   Transformation([3, 3, 1, 1]));;
gap> NrIdempotents(S);
5
gap> f := Transformation([2, 2, 4, 4]);;
gap> R := GreensRClassOfElement(S, f);;
gap> NrIdempotents(R);
2
gap> f := Transformation([4, 2, 2, 4]);;
gap> L := GreensLClassOfElement(S, f);;
gap> NrIdempotents(L);
2
gap> D := DClassOfLClass(L);;
gap> NrIdempotents(D);
4
gap> L := GreensLClassOfElement(S, Transformation([3, 1, 1, 3]));;
gap> NrIdempotents(L);
2
gap> H := GroupHClass(D);;
gap> NrIdempotents(H);
1
gap> S := InverseSemigroup(
> PartialPerm([1, 2, 3, 5, 7, 9, 10],
>              [6, 7, 2, 9, 1, 5, 3]),
> PartialPerm([1, 2, 3, 5, 6, 7, 9, 10],
>             [8, 1, 9, 4, 10, 5, 6, 7]));;
gap> NrIdempotents(S);
236
gap> f := PartialPerm([2, 3, 7, 9, 10],
>                     [7, 2, 1, 5, 3]);;
gap> D := DClassNC(S, f);;
gap> NrIdempotents(D);
13]]></Example>
  </Description>
  </ManSection>
<#/GAPDoc>

<#GAPDoc Label="NrRegularDClasses">
<ManSection>
  <Attr Name = "NrRegularDClasses" Arg = "S"/>
  <Attr Name = "RegularDClasses" Arg = "S"/>
  <Returns>
    A positive integer, or a list.
  </Returns>
  <Description>
    <C>NrRegularDClasses</C> returns the number of regular &D;-classes of the
    semigroup <A>S</A>.<P/>

    <C>RegularDClasses</C> returns a list of the regular &D;-classes of the
    semigroup <A>S</A>. <P/>

    See also <Ref Prop = "IsRegularGreensClass"/> and
    <Ref Func = "IsRegularDClass" BookName = "ref"/>.

    <Example><![CDATA[
gap> S := Semigroup(Transformation([1, 3, 4, 1, 3, 5]),
>                   Transformation([5, 1, 6, 1, 6, 3]));;
gap> NrRegularDClasses(S);
3
gap> NrDClasses(S);
7
gap> AsSet(RegularDClasses(S));
[ <Green's D-class: Transformation( [ 1, 4, 1, 1, 4, 3 ] )>,
  <Green's D-class: Transformation( [ 1, 1, 1, 1, 1 ] )>,
  <Green's D-class: Transformation( [ 1, 1, 1, 1, 1, 1 ] )> ]]]>
  </Description>
</ManSection>
<#/GAPDoc>

<#GAPDoc Label="PartialOrderOfXClasses">
  <ManSection>
  <Heading>PartialOrderOfXClasses</Heading>
  <Attr Name = "PartialOrderOfDClasses" Arg = "S"/>
  <Attr Name = "PartialOrderOfLClasses" Arg = "S"/>
  <Attr Name = "PartialOrderOfRClasses" Arg = "S"/>
  <Returns>
    A digraph.
  </Returns>
  <Description>
    Let <C>X</C> be one of Green's &D;-, &L;-, or &R;-relations. Then
    <C>PartialOrderOfXClasses</C> returns a digraph <C>D</C> where
    <C>OutNeighbours(D)[i]</C> contains every <C>j</C> such that
    <C>GreensXClasses(S)[j]</C> is immediately less than
    <C>GreensXClasses(S)[i]</C> in the partial order of <C>X</C>-classes of
    <A>S</A>. The reflexive transitive closure of the digraph <C>D</C> is the
    partial order of <C>X</C>-classes of <A>S</A> (in the sense of the
      &DIGRAPHS; package).
    <P/>

    The partial order on the <C>X</C>-classes is defined as follows.
    <List>
      <Mark>Green's &D;-relation:
      <Item>
        <M>x\leq y</M> if and only if <M>S ^ 1xS ^ 1</M> is a subset of
        <M>S ^ 1yS ^ 1</M>.
      </Item>
      <Mark>Green's &L;-relation:
      <Item>
        <M>x\leq y</M> if and only if <M>S ^ 1x</M> is a subset of
        <M>S ^ 1y</M>.
      </Item>
      <Mark>Green's &R;-relation:
      <Item>
        <M>x\leq y</M> if and only if <M>xS ^ 1</M> is a subset of
        <M>yS ^ 1</M>.
      </Item>
    </List>

    See also <Ref Meth = "GreensDClasses"/>,
    <Ref Meth = "GreensDClasses" BookName = "ref"/>,
    <Ref Oper = "IsGreensLessThanOrEqual" BookName = "ref"/>,
    and <Ref Oper="\<" Label="for Green's classes"/>.
  <Example><![CDATA[
gap> S := Semigroup(Transformation([2, 4, 1, 2]),
>                   Transformation([3, 3, 4, 1]));;
gap> PartialOrderOfDClasses(S);
<immutable digraph with 4 vertices, 3 edges>
gap> IsGreensLessThanOrEqual(GreensDClasses(S)[1],
>                            GreensDClasses(S)[2]);
false
gap> IsGreensLessThanOrEqual(GreensDClasses(S)[2],
>                            GreensDClasses(S)[1]);
false
gap> IsGreensLessThanOrEqual(GreensDClasses(S)[3],
>                            GreensDClasses(S)[1]);
true
gap> S := InverseSemigroup(
> PartialPerm([1, 2, 3], [1, 3, 4]),
> PartialPerm([1, 3, 5], [5, 1, 3]));;
gap> Size(S);
58
gap> PartialOrderOfDClasses(S);
<immutable digraph with 5 vertices, 4 edges>
gap> IsGreensLessThanOrEqual(GreensDClasses(S)[1],
>                            GreensDClasses(S)[2]);
false
gap> IsGreensLessThanOrEqual(GreensDClasses(S)[5],
>                            GreensDClasses(S)[2]);
true
gap> IsGreensLessThanOrEqual(GreensDClasses(S)[3],
>                            GreensDClasses(S)[4]);
false
gap> IsGreensLessThanOrEqual(GreensDClasses(S)[4],
>                            GreensDClasses(S)[3]);
true]]></Example>
  </Description>
  </ManSection>
<#/GAPDoc>

<#GAPDoc Label="SchutzenbergerGroup">
<ManSection>
  <Attr Name = "SchutzenbergerGroup" Arg = "class"/>
  <Returns>
    A group.
  </Returns>
  <Description>
  <C>SchutzenbergerGroup</C> returns the generalized Schutzenberger group
  (defined below) of the &R;-, &D;-, &L;-, or &H;-class <A>class</A>.  <P/>

  If <C>f</C> is an element of a semigroup of transformations or partial
  permutations and <C>im(f)</C> denotes the image of <C>f</C>, then the
  <E>generalized Schutzenberger group</E> of <C>im(f)</C> is the permutation
  group
  <Alt Not = "Text">
  <Display>
    \{\:g|_{\textrm{im}(f)}\::\:\textrm{im}(f*g)=\textrm{im}(f)\:\}.
  </Display>
  </Alt>
  <Alt Only="Text">
  { g|_im(f) : im(f*g)=im(f) }.
</Alt><P/>
  The generalized Schutzenberger group of the kernel <C>ker(f)</C> of a
  transformation <C>f</C> or the domain <C>dom(f)</C> of a
  partial permutation <C>f</C> is defined analogously.
  <P/>

  The generalized Schutzenberger group of a Green's class is then defined as
  follows.
  <List>
    <Mark>&R;-class</Mark>
    <Item>
      The generalized Schutzenberger group of the image or range of the
      representative of the &R;-class.
    </Item>
    <Mark>&L;-class</Mark>
    <Item>
      The generalized Schutzenberger group of the kernel or domain of the
      representative of the &L;-class.
    </Item>
    <Mark>&H;-class</Mark>
    <Item>
      The intersection of the generalized Schutzenberger groups of the
      &R;- and &L;-class containing the &H;-class.
    </Item>
    <Mark>&D;-class</Mark>
    <Item>
      The intersection of the generalized Schutzenberger groups of the
      &R;- and &L;-class containing the representative of the &D;-class.
    </Item>
  </List>

  The output of this attribute is difficult to describe for other types of
  semigroup.  However, a general description is given in
  <Cite Key = "Mitchell2019aa"/>.

  <Example><![CDATA[
gap> S := Semigroup(Transformation([4, 4, 3, 5, 3]),
>                   Transformation([5, 1, 1, 4, 1]),
>                   Transformation([5, 5, 4, 4, 5]));;
gap> f := Transformation([5, 5, 4, 4, 5]);;
gap> SchutzenbergerGroup(RClass(S, f));
Group([ (4,5) ])
gap> S := InverseSemigroup(
> PartialPerm([1, 2, 3, 7],
>             [9, 2, 4, 8]),
> PartialPerm([1, 2, 6, 7, 8, 9, 10],
>             [6, 8, 4, 5, 9, 1, 3]),
> PartialPerm([1, 2, 3, 5, 6, 7, 8, 9],
>             [7, 4, 1, 6, 9, 5, 2, 3]));;
gap> List(DClasses(S), SchutzenbergerGroup);
[ Group(()), Group(()), Group(()), Group(()), Group([ (4,9) ]),
  Group(()), Group(()), Group([ (5,8,6), (5,8) ]), Group(()),
  Group(()), Group(()), Group(()), Group(()), Group(()),
  Group([ (1,7,5,6,9,3) ]), Group([ (1,6)(3,5) ]), Group(()),
  Group(()), Group(()), Group(()), Group(()), Group(()), Group(()) ]]]></Example>
  </Description>
  </ManSection>
<#/GAPDoc>

<#GAPDoc Label="GreensMultiplier">
<ManSection>
  <Oper Name = "LeftGreensMultiplier" Arg = "S, a, b"/>
  <Oper Name = "RightGreensMultiplier" Arg = "S, a, b"/>
  <Returns>
    An element.
  </Returns>
  <Description>
  If <A>S</A> is a semigroup, and <A>a</A> and <A>b</A> are
  &L;-related elements of <A>S</A>, then <C>LeftGreensMultiplier</C>
  returns an element <C>s</C> such that <C>s * <A>a</A> = <A>b</A></C>. The
  element <C>s</C> is of the same type as the elements of <A>S</A> but may
  or may not be an element of <A>S</A>. In particular, if <A>S</A> is not a
  monoid and <C><A>a</A> = <A>b</A></C>, then
  <C>One(GeneratorsOfSemigroup(S))</C> or an adjoined identity may be returned. Even if <C><A>a</A> <>
  <A>b</A></C>, then it is not guaranteed that the returned element <C>s</C>
  will belong to <A>S</A>. It is guaranteed that the left action of <C>s</C> on
  the elements of the &L;-class of <A>a</A> is the same as the left action of
  an element of <A>S</A> with the identity adjoined.<P/>

  <C>LeftGreensMultiplier</C> gives an error if <A>a</A> and <A>b</A> are not
  &L;-related elements of <A>S</A>.<P/>

  The operation <C>RightGreensMultiplier</C> is defined analogously.

  <Example><![CDATA[
gap> S := Semigroup(Transformation([4, 4, 3, 5, 3]),
>                   Transformation([5, 1, 1, 4, 1]),
>                   Transformation([5, 5, 4, 4, 5]));;
gap> a := Transformation([5, 5, 4, 4, 5]);;
gap> LeftGreensMultiplier(S, a, a);
Transformation( [ 1, 1, 3, 3, 1 ] )
gap> RightGreensMultiplier(S, a, a);
Transformation( [ 5, 5, 5, 4, 5 ] )
gap> b := Transformation([5, 4, 4, 5, 4]);
Transformation( [ 5, 4, 4, 5, 4 ] )
gap> s := LeftGreensMultiplier(S, a, b);
Transformation( [ 1, 3, 3, 1, 3 ] )
gap> s * a;
Transformation( [ 5, 4, 4, 5, 4 ] )
gap> b := Transformation([4, 4, 5, 5, 4]);
Transformation( [ 4, 4, 5, 5, 4 ] )
gap> s := RightGreensMultiplier(S, a, b);
Transformation( [ 4, 4, 4, 5, 4 ] )
gap> a * s = b;
true]]></Example>
  </Description>
  </ManSection>
<#/GAPDoc>

99%


¤ Dauer der Verarbeitung: 0.40 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung ist noch experimentell.