<Chapter Label="green">
  <Heading>
    Determining the structure of a semigroup
  </Heading>

  In this chapter we describe the functions in &Semigroups; for determining the
  structure of a semigroup, in particular for computing Green's classes and
  related properties of semigroups. 
  
  <Section><!--JDM properties/attributes chapter-->
    <Heading>Expressing semigroup elements as words in
    generators</Heading>
    It is possible to express an element of a semigroup as a word in the
    generators of that semigroup. This section describes how to accomplish this
    in &Semigroups;. <P/>

    <#Include Label="EvaluateWord">
    <#Include Label="Factorization">
  </Section>

  <Section><Heading>Creating Green's classes</Heading>
    <!--JDM green's classes and relations chapter-->
    <#Include Label="XClassOfYClass">
    <#Include Label="GreensXClassOfElement">
    <#Include Label="GreensXClassOfElementNC">
    <#Include Label="GroupHClass">
  </Section>
  
  <Section><Heading>Iterators and enumerators of classes and representatives
    <!--JDM green's classes and relations chapter-->
  </Heading>
    <#Include Label="GreensXClasses">
    <#Include Label="IteratorOfXClassReps"> 
    <#Include Label="IteratorOfXClasses"> 
    <#Include Label="XClassReps">
  </Section>

  <Section><Heading>Attributes and properties directly related to Green's classes</Heading>
    <!--JDM green's classes and relations chapter-->
    <#Include Label="\&lt;">
    <#Include Label="InjectionPrincipalFactor">
    <#Include Label="PrincipalFactor">
    <#Include Label="IsRegularClass">
    <#Include Label="NrRegularDClasses">
    <#Include Label="NrXClasses">
    <#Include Label="PartialOrderOfDClasses">
    <#Include Label="SchutzenbergerGroup">
    <#Include Label="MinimalDClass">
    <#Include Label="MaximalDClasses">
    <#Include Label="StructureDescriptionSchutzenbergerGroups">
    <#Include Label="StructureDescriptionMaximalSubgroups">
    <#Include Label="MultiplicativeNeutralElement">
    <#Include Label="IsGreensClassNC">
    <#Include Label="IsTransformationSemigroupGreensClass">
    <#Include Label="IsBipartitionSemigroupGreensClass">
    <#Include Label="IsPartialPermSemigroupGreensClass">
    <#Include Label="StructureDescription">
    <#Include Label="IsGreensDLeq">
  </Section>

  <Section><Heading>Further attributes of semigroups</Heading>
    <!--JDM attributes and properties chapter-->
    In this section we describe the attributes of a semigroup that can be found
    using the &Semigroups; package. <P/>

    <#Include Label="Generators">
    <#Include Label="GroupOfUnits">
    <#Include Label="Idempotents">
    <#Include Label="NrIdempotents">
    <#Include Label="IdempotentGeneratedSubsemigroup">
    <#Include Label="IrredundantGeneratingSubset">
    <#Include Label="MaximalSubsemigroups">
    <#Include Label="MaximalSubsemigroups2">
    <#Include Label="IsMaximalSubsemigroup">
    <#Include Label="MinimalIdeal">
    <#Include Label="RepresentativeOfMinimalIdeal">
    <#Include Label="MultiplicativeZero">
    <#Include Label="Random">
    <#Include Label="SmallGeneratingSet"> 
    <#Include Label="ComponentRepsOfTransformationSemigroup">
    <#Include Label="ComponentsOfTransformationSemigroup">
    <#Include Label="CyclesOfTransformationSemigroup">
    <#Include Label="IsTransitive">
    <#Include Label="ComponentRepsOfPartialPermSemigroup">
    <#Include Label="ComponentsOfPartialPermSemigroup">
    <#Include Label="CyclesOfPartialPerm">
    <#Include Label="CyclesOfPartialPermSemigroup">
    <#Include Label="Normalizer">
    <#Include Label="SmallestElementSemigroup">
    <#Include Label="GeneratorsSmallest">
  </Section>

  <Section><Heading>Further properties of semigroups</Heading>
    <!--JDM attributes and properties chapter-->
    In this section we describe the properties of a semigroup that can be
    determined using the &Semigroups; package. <P/>
    <#Include Label="IsBand">
    <#Include Label="IsBlockGroup">
    <#Include Label="IsCommutativeSemigroup">
    <#Include Label="IsCompletelyRegularSemigroup">
    <#Include Label="IsCongruenceFreeSemigroup">
    <#Include Label="IsGroupAsSemigroup">
    <#Include Label="IsIdempotentGenerated">
    <#Include Label="IsLeftSimple">
    <#Include Label="IsLeftZeroSemigroup">
    <#Include Label="IsMonogenicSemigroup">
    <#Include Label="IsMonoidAsSemigroup">
    <#Include Label="IsOrthodoxSemigroup">
    <#Include Label="IsRectangularBand">
    <#Include Label="IsRegularSemigroup">
    <#Include Label="IsRightZeroSemigroup">
    <#Include Label="IsRTrivial">
    <#Include Label="IsSemilatticeAsSemigroup">
    <#Include Label="IsSimpleSemigroup">
    <#Include Label="IsSynchronizingSemigroup">
    <#Include Label="IsZeroGroup">
    <#Include Label="IsZeroRectangularBand">
    <#Include Label="IsZeroSemigroup">
    <#Include Label="IsZeroSimpleSemigroup">
  </Section>

  <Section><Heading>Properties and attributes of inverse semigroups</Heading>
    <!--JDM attributes and properties of inverse semigroups chapter-->
    In this section we describe properties and attributes specific to inverse
    semigroups that can be determined using &Semigroups;.<P/> 
    
    The functions 
    <List>
      <Item><Ref Oper="IsJoinIrreducible"/></Item>
      <Item><Ref Oper="IsMajorantlyClosed"/></Item>
      <Item><Ref Attr="JoinIrreducibleDClasses"/></Item>
      <Item><Ref Oper="MajorantClosure"/></Item> 
      <Item><Ref Oper="Minorants"/></Item>
      <Item><Ref Oper="RightCosetsOfInverseSemigroup"/></Item>
      <Item><Ref Attr="SmallerDegreePartialPermRepresentation"/></Item>
      <Item><Ref Attr="VagnerPrestonRepresentation"/></Item>
    </List>
    were written by Wilf Wilson and Robert Hancock. <P/>

    The function <Ref Oper="CharacterTableOfInverseSemigroup"/> was written by
    Jhevon Smith and Ben Steinberg.
    
    <#Include Label="IsCliffordSemigroup">
    <#Include Label="IsBrandtSemigroup">
    <#Include Label="IsEUnitaryInverseSemigroup">
    <#Include Label="IsFactorisableSemigroup">
    <#Include Label="IsJoinIrreducible">
    <#Include Label="IsMajorantlyClosed">
    <#Include Label="IsMonogenicInverseSemigroup">
    <#Include Label="JoinIrreducibleDClasses">
    <#Include Label="MajorantClosure">
    <#Include Label="Minorants">
    <#Include Label="PrimitiveIdempotents">
    <#Include Label="RightCosetsOfInverseSemigroup">
    <#Include Label="SameMinorantsSubgroup">
    <#Include Label="SmallerDegreePartialPermRepresentation">
    <#Include Label="VagnerPrestonRepresentation">
    <#Include Label="CharacterTableOfInverseSemigroup">
  </Section>

  <Section><Heading>Visualising the structure of a semigroup</Heading>
    In this section, we describe some functions for creating pictures of various
    structures related to a semigroup of transformations, partial permutations,
    or bipartitions; or a subsemigroup of a Rees 0-matrix semigroup.<P/>
    
    Several of the functions described in this section return a string, which
    can be written to a file using the function <Ref Func="FileString"
      BookName="GAPDoc"/> or viewed using <Ref Func="Splash"/>.

    <#Include Label="Splash"/>
    <#Include Label="DotDClasses"/>
    <#Include Label="DotSemilatticeOfIdempotents"/>

  </Section>
</Chapter>

