<Chapter Label = "The Semigroups package">
  <Heading>
    The &SEMIGROUPS; package
  </Heading>
  <Index Key = "Semigroups">&SEMIGROUPS; package overview</Index>

  <Section Label = "Introduction">
    <Heading>
      Introduction
    </Heading>

    This is the manual for the &SEMIGROUPS; package for &GAP; version &VERSION;.
    &SEMIGROUPS; &VERSION; is a distant descendant of the
    <URL Text = "Monoid package for GAP 3">
      http://schmidt.nuigalway.ie/monoid/index.html</URL> by Goetz Pfeiffer,
    Steve A. Linton, Edmund F. Robertson, and Nik Ruskuc.<P/>

    From Version 3.0.0, &SEMIGROUPS; includes a copy of the &LIBSEMIGROUPS; C++
    library which contains implementations of the Froidure-Pin, Todd-Coxeter,
    and Knuth-Bendix algorithms (among others) that &SEMIGROUPS; utilises.
  </Section>

  If you find a bug or an issue with the package, please visit the
  <URL Text = "issue tracker">
    https://github.com/semigroups/Semigroups/issues
  </URL>.

  <Section Label = "Overview">
    <Heading>
      Overview
    </Heading>

    This manual is organised as follows:
    <List>
      <Mark>Part I: elements</Mark>
      <Item>
        the different types of elements that are introduced in &SEMIGROUPS;
        are described in Chapters <Ref Chap = "Bipartitions and blocks"/>,
        <Ref Chap = "Partitioned binary relations (PBRs)"/>, and
        <Ref Chap = "Matrices over semirings"/>. These include
        <Ref Func="Bipartition"/>, <Ref Oper="PBR"/>, and
        <Ref Oper="Matrix" Label="for a filter and a matrix"/>, which
        supplement those already defined in the &GAP; library, such as
        <Ref Oper="Transformation" Label="for an image list" BookName="ref"/> or
        <Ref Oper="PartialPerm" Label="for a domain and image" BookName="ref"/>.
      </Item>

      <Mark>Part II: semigroups and monoids defined by generating sets</Mark>
      <Item>
        functions and operations for creating semigroups and monoids defined by
        generating sets (of the type described in Part I) are described
        in Chapter <Ref Chap
          = "Semigroups and monoids defined by generating sets"/>.
      </Item>

      <Mark>Part III: standard examples and constructions</Mark>
      <Item>
        standard examples of semigroups, such as <Ref Oper =
          "FullBooleanMatMonoid"/> or <Ref Oper =
          "UniformBlockBijectionMonoid"/>, are described in
        Chapter <Ref Chap = "Standard examples"/>, and standard constructions,
          such as <Ref Func = "DirectProduct"/> are given in Chapter <Ref Chap
            = "Standard constructions"/>.
      </Item>

      <Mark>Part IV: the structure of a semigroup or monoid</Mark>
      <Item>
        the functionality for determining various structural properties of a
        given semigroup or monoid are described in Chapters <Ref Chap =
          "Ideals"/>, <Ref Chap = "Green's relations"/>, <Ref Chap =
            "Attributes and operations for semigroups"/>, and <Ref Chap =
              "Properties of semigroups"/>.
      </Item>

      <Mark>Part V: congruences, quotients, and homomorphisms</Mark>
      <Item>
        methods for creating and manipulating congruences and homomorphisms are
        described by Chapters <Ref Chap = "Congruences"/> and <Ref Chap =
          "Semigroup homomorphisms"/>.
      </Item>

      <Mark>Part VI: finitely presented semigroups and monoids</Mark>
      <Item>
        methods for finitely presented semigroups and monoids, in particular,
          for Tietze transformations can be found in Chapters <Ref Chap =
          "Finitely presented semigroups and Tietze transformations"/>.
      </Item>

      <Mark>Part VII: utilities and helper functions</Mark>
      <Item>
        functions for reading and writing semigroups and their elements, and
        for visualising semigroups, and some of their elements, can be found in
        Chapters <Ref Chap = "Visualising semigroups and elements"/> and
        <Ref Chap = "IO"/>.
      </Item>

    </List>
  </Section>
</Chapter>
