############################################################################
##
#W  attributes-inverse.xml
#Y  Copyright (C) 2011-13                                James D. Mitchell
##                                                       Wilf Wilson,
##                                                       Rhiannon Dougall,
##                                                       Robert Hancock
##                                                       Casey Donoven
##
##  Licensing information can be found in the README file of this package.
##
#############################################################################
##

<#GAPDoc Label="CharacterTableOfInverseSemigroup" >
  <ManSection>
    <Attr Name="CharacterTableOfInverseSemigroup" Arg = "S"/>
    <Returns>
      The character table of the inverse semigroup <A>S</A> and a list
      of conjugacy class representatives of <A>S</A>. 
    </Returns>
    <Description>
      Returns a list with two entries: the first entry being the character table
      of the inverse semigroup <A>S</A> as a matrix, while the second entry is a
      list of conjugacy class representatives of <A>S</A>. <P/>
     
      The order of the columns in the character table matrix follows the order of
      the conjugacy class representatives list. The conjugacy representatives are
      grouped by &D;-class and then sorted by rank. Also, as is typical of
      character tables, the rows of the matrix correspond to the irreducible
      characters and the columns correspond to the conjugacy classes. <P/>

      This function was contributed by Jhevon Smith and Ben Steinberg. 
      <Example><![CDATA[
gap> S := InverseMonoid( [ PartialPerm( [ 1, 2 ], [ 3, 1 ] ), 
> PartialPerm( [ 1, 2, 3 ], [ 1, 3, 4 ] ), 
> PartialPerm( [ 1, 2, 3 ], [ 2, 4, 1 ] ), 
> PartialPerm( [ 1, 3, 4 ], [ 3, 4, 1 ] ) ] );;
gap> CharacterTableOfInverseSemigroup(S);
[ [ [ 1, 0, 0, 0, 0, 0, 0, 0 ], [ 3, 1, 1, 1, 0, 0, 0, 0 ], 
      [ 3, 1, E(3), E(3)^2, 0, 0, 0, 0 ], 
      [ 3, 1, E(3)^2, E(3), 0, 0, 0, 0 ], [ 6, 3, 0, 0, 1, -1, 0, 0 ],
      [ 6, 3, 0, 0, 1, 1, 0, 0 ], [ 4, 3, 0, 0, 2, 0, 1, 0 ], 
      [ 1, 1, 1, 1, 1, 1, 1, 1 ] ], 
  [ <identity partial perm on [ 1, 2, 3, 4 ]>, 
      <identity partial perm on [ 1, 3, 4 ]>, (1,3,4), (1,4,3), 
      <identity partial perm on [ 1, 3 ]>, (1,3), 
      <identity partial perm on [ 3 ]>, <empty partial perm> ] ]
gap> S := SymmetricInverseMonoid(4);;
gap> CharacterTableOfInverseSemigroup(S);
[ [ [ 1, -1, 1, 1, -1, 0, 0, 0, 0, 0, 0, 0 ], 
      [ 3, -1, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0 ], 
      [ 2, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0 ], 
      [ 3, 1, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0 ], 
      [ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 ], 
      [ 4, -2, 1, 0, 0, 1, -1, 1, 0, 0, 0, 0 ], 
      [ 8, 0, -1, 0, 0, 2, 0, -1, 0, 0, 0, 0 ], 
      [ 4, 2, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0 ], 
      [ 6, 0, 0, -2, 0, 3, -1, 0, 1, -1, 0, 0 ], 
      [ 6, 2, 0, 2, 0, 3, 1, 0, 1, 1, 0, 0 ], 
      [ 4, 2, 1, 0, 0, 3, 1, 0, 2, 0, 1, 0 ], 
      [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ] ], 
  [ <identity partial perm on [ 1, 2, 3, 4 ]>, (1)(2)(3,4), 
      (1)(2,3,4), (1,2)(3,4), (1,2,3,4), 
      <identity partial perm on [ 1, 2, 3 ]>, (1)(2,3), (1,2,3), 
      <identity partial perm on [ 1, 2 ]>, (1,2), 
      <identity partial perm on [ 1 ]>, <empty partial perm> ] ]]]></Example>
    </Description>
  </ManSection>
<#/GAPDoc>

<#GAPDoc Label="PrimitiveIdempotents">
<ManSection>
  <Attr Name="PrimitiveIdempotents" Arg="S"/>
  <Returns>A list of idempotent partial permutations.</Returns>
  <Description>
    An idempotent in an inverse semigroup <A>S</A> is <E>primitive</E> if it is
    non-zero and minimal with respect to the 
    <Ref Attr="NaturalPartialOrder" BookName="ref"/>
    on <A>S</A>. <C>PrimitiveIdempotents</C> returns the list of primitive
    idempotents in the inverse semigroup of partial permutations <A>S</A>. 
    <Example><![CDATA[
gap> S:= InverseMonoid(
> PartialPerm( [ 1 ], [ 4 ] ),
> PartialPerm( [ 1, 2, 3 ], [ 2, 1, 3 ] ),
> PartialPerm( [ 1, 2, 3 ], [ 3, 1, 2 ] ) );;
gap> MultiplicativeZero(S);
<empty partial perm>
gap> PrimitiveIdempotents(S);
[ <identity partial perm on [ 4 ]>, <identity partial perm on [ 1 ]>, 
  <identity partial perm on [ 2 ]>, <identity partial perm on [ 3 ]> ]
gap> S := DualSymmetricInverseMonoid(4);
<inverse bipartition monoid of degree 4 with 3 generators>
gap> PrimitiveIdempotents(S);
[ <block bijection: [ 1, 2, 3, -1, -2, -3 ], [ 4, -4 ]>, 
  <block bijection: [ 1, 2, 4, -1, -2, -4 ], [ 3, -3 ]>, 
  <block bijection: [ 1, -1 ], [ 2, 3, 4, -2, -3, -4 ]>, 
  <block bijection: [ 1, 2, -1, -2 ], [ 3, 4, -3, -4 ]>, 
  <block bijection: [ 1, 3, 4, -1, -3, -4 ], [ 2, -2 ]>, 
  <block bijection: [ 1, 4, -1, -4 ], [ 2, 3, -2, -3 ]>, 
  <block bijection: [ 1, 3, -1, -3 ], [ 2, 4, -2, -4 ]> ]]]></Example>
  </Description>
</ManSection>
<#/GAPDoc>

<#GAPDoc Label="IsJoinIrreducible">
<ManSection>
<Oper Name="IsJoinIrreducible" Arg="S, x"/>
  <Returns>
    <K>true</K> or <K>false</K>.
  </Returns>
  <Description>
    <C>IsJoinIrreducible</C> determines whether an element <A>x</A> of an 
    inverse semigroup <A>S</A> of partial permutations, block bijections or 
    partial permutation bipartitions is join irreducible.<P/>

    An element <A>x</A> is <E>join irreducible</E> when it is not the least
    upper bound (with respect to the natural partial order 
    <Ref Func = "NaturalLeqPartialPerm" BookName="ref"/>) of any subset of
    <A>S</A> not containing <A>x</A>.
  </Description>
</ManSection>
<Example><![CDATA[
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 bipartition 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]]></Example>
<#/GAPDoc>

<#GAPDoc Label="IsMajorantlyClosed">
<ManSection>
<Oper Name="IsMajorantlyClosed" Arg="S, T"/>
<Returns>
  <K>true</K> or <K>false</K>.
</Returns>
<Description>
  <C>IsMajorantlyClosed</C> determines whether the subset <A>T</A> of the
  inverse semigroup of partial permutations, block bijections or partial 
  permutation bipartitions <A>S</A> is majorantly closed in <A>S</A>. See also 
  <Ref Oper="MajorantClosure"/>.<P/>
 
  We say that <A>T</A> is <E>majorantly closed</E> in <A>S</A> if it 
  contains all elements of <A>S</A> which are greater than or equal to any 
  element of <A>T</A>, with respect to the natural partial order.
  See <Ref Func = "NaturalLeqPartialPerm" BookName="ref"/>.<P/>
  
  Note that <A>T</A> can be a subset of <A>S</A> or a subsemigroup of <A>S</A>.
</Description>
</ManSection>
<Example><![CDATA[
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 bipartition 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
]]></Example>
<#/GAPDoc>

<#GAPDoc Label="JoinIrreducibleDClasses">
<ManSection>
<Attr Name="JoinIrreducibleDClasses" Arg="S"/>
  <Returns>
    A list of &D;-classes.
  </Returns>
  <Description>
    <C>JoinIrreducibleDClasses</C> returns a list of the join irreducible
    &D;-classes of the inverse semigroup of partial permutations, block 
    bijections or partial permutation bipartitions <A>S</A>.<P/>

    A <E>join irreducible &D;-class</E> is a &D;-class containing only join
    irreducible elements.  See <Ref Oper="IsJoinIrreducible"/>.
    If a &D;-class contains one join irreducible element, then all of the 
    elements in the &D;-class are join irreducible.  
<Example><![CDATA[
gap> S := SymmetricInverseSemigroup(3);
<symmetric inverse monoid of degree 3>
gap> JoinIrreducibleDClasses(S);
[ <Green's D-class: <identity partial perm on [ 1 ]>> ]
gap> T := InverseSemigroup( 
> PartialPerm( [ 1, 2, 3, 4 ], [ 1, 2, 4, 3 ] ), 
> PartialPerm( [ 1 ], [ 1 ] ), PartialPerm( [ 2 ], [ 2 ] ) );
<inverse partial perm semigroup of rank 4 with 3 generators>
gap> JoinIrreducibleDClasses(T);
[ <Green's D-class: <identity partial perm on [ 1, 2, 3, 4 ]>>, 
  <Green's D-class: <identity partial perm on [ 1 ]>>, 
  <Green's D-class: <identity partial perm on [ 2 ]>> ]
gap> D := DualSymmetricInverseSemigroup(3);
<inverse bipartition monoid of degree 3 with 3 generators>
gap> JoinIrreducibleDClasses(D);
[ <Green's D-class: <block bijection: [ 1, 2, -1, -2 ], [ 3, -3 ]>> ]]]></Example>
  </Description>
</ManSection>
<#/GAPDoc>

<#GAPDoc Label="MajorantClosure">
<ManSection>
<Oper Name="MajorantClosure" Arg="S,T"/>
  <Returns>
    A majorantly closed list of elements.
  </Returns>
  <Description>
    <C>MajorantClosure</C> returns a majorantly closed subset of an inverse
    semigroup of partial permutations, block bijections or partial permutation 
    bipartitions, <A>S</A>, as a list. See <Ref Func="IsMajorantlyClosed"/>.<P/>
    The result contains all elements of <A>S</A> which are greater than or
    equal to any element of <A>T</A> (with respect to the natural partial 
    order <Ref Func = "NaturalLeqPartialPerm" BookName="ref"/>).
    In particular, the result is a superset of <A>T</A>.<P/>
    Note that <A>T</A> can be a subset of <A>S</A> or a subsemigroup of <A>S</A>.
  </Description>
</ManSection>
<Example><![CDATA[
gap> S := SymmetricInverseSemigroup(4);
<symmetric inverse monoid of degree 4>
gap> T := [PartialPerm([1,0,3,0])];
[ <identity partial perm on [ 1, 3 ]> ]
gap> U := MajorantClosure(S,T);
[ <identity partial perm on [ 1, 3 ]>, 
  <identity partial perm on [ 1, 2, 3 ]>, [2,4](1)(3), [4,2](1)(3), 
  <identity partial perm on [ 1, 3, 4 ]>, 
  <identity partial perm on [ 1, 2, 3, 4 ]>, (1)(2,4)(3) ]
gap> B := InverseSemigroup([
>  Bipartition( [ [ 1, -2 ], [ 2, -1 ], [ 3, -3 ], [ 4, 5, -4, -5 ] ] ),
>  Bipartition( [ [ 1, -3 ], [ 2, -4 ], [ 3, -2 ], 
>    [ 4, -1 ], [ 5, -5 ] ] ) ]);;
gap> T := [
>  Bipartition( [ [ 1, -2 ], [ 2, 3, 5, -1, -3, -5 ], [ 4, -4 ] ] ),
>  Bipartition( [ [ 1, -4 ], [ 2, 3, 5, -1, -3, -5 ], [ 4, -2 ] ] ) ];;
gap> IsMajorantlyClosed(B,T);
false
gap> MajorantClosure(B,T);
[ <block bijection: [ 1, -2 ], [ 2, 3, 5, -1, -3, -5 ], [ 4, -4 ]>, 
  <block bijection: [ 1, -4 ], [ 2, 3, 5, -1, -3, -5 ], [ 4, -2 ]>, 
  <block bijection: [ 1, -2 ], [ 2, 5, -1, -5 ], [ 3, -3 ], [ 4, -4 ]>
    , <block bijection: [ 1, -2 ], [ 2, -1 ], [ 3, 5, -3, -5 ], 
     [ 4, -4 ]>, 
  <block bijection: [ 1, -4 ], [ 2, 5, -3, -5 ], [ 3, -1 ], [ 4, -2 ]>
    , <block bijection: [ 1, -4 ], [ 2, -3 ], [ 3, 5, -1, -5 ], 
     [ 4, -2 ]>, <block bijection: [ 1, -4 ], [ 2, -3 ], [ 3, -1 ], 
     [ 4, -2 ], [ 5, -5 ]> ]
gap> IsMajorantlyClosed(B, last);
true
]]></Example>
<#/GAPDoc>

<#GAPDoc Label="Minorants">
<ManSection>
<Oper Name="Minorants" Arg="S,f"/>
  <Returns>
    A list of elements.
  </Returns>
  <Description>
    <C>Minorants</C> takes an element <A>f</A> from an inverse semigroup of 
    partial permutations, block bijections or partial permutation bipartitions 
    <A>S</A>, and returns a list of the minorants of <A>f</A> in <A>S</A>. <P/>
    
    A <E>minorant</E> of <A>f</A> is an element of <A>S</A> which is strictly 
    less than <A>f</A> in the natural partial order of <A>S</A>. 
    See <Ref Attr="NaturalLeqPartialPerm" BookName="ref" />.
  </Description>
</ManSection>
<Example><![CDATA[
gap> s := SymmetricInverseSemigroup(3);
<symmetric inverse monoid of degree 3>
gap> f := Elements(s)[13];
[1,3](2)
gap> Minorants(s,f);
[ <empty partial perm>, [1,3], <identity partial perm on [ 2 ]> ]
gap> f := PartialPerm([3,2,4,0]);
[1,3,4](2)
gap> S := InverseSemigroup(f);
<inverse partial perm semigroup of rank 4 with 1 generator>
gap> Minorants(S,f);
[ <identity partial perm on [ 2 ]>, [1,3](2), [3,4](2) ]
]]></Example>
<#/GAPDoc>

<#GAPDoc Label="RightCosetsOfInverseSemigroup">
<ManSection>
<Oper Name="RightCosetsOfInverseSemigroup" Arg="S,T"/>
  <Returns>
    A list of lists of elements.
  </Returns>
  <Description>
    <C>RightCosetsOfInverseSemigroup</C> takes a majorantly closed inverse 
    subsemigroup <A>T</A>  of an inverse semigroup of partial permutations,
    block bijections or partial permutation bipartitions <A>S</A>. See 
    <Ref Func="IsMajorantlyClosed"/>. The result is a list of the right cosets 
    of <A>T</A> in <A>S</A>.<P/>
    For <M>s \in S</M>, the right coset <M>\overline{Ts}</M> is defined if and 
    only if <M>ss^{-1} \in T</M>, in which case it is defined to be the 
    majorant closure of the set <M>Ts</M>. See <Ref Func="MajorantClosure"/>. 
    Distinct cosets are disjoint but do not necessarily partition <A>S</A>.
  </Description>
</ManSection>
<Example><![CDATA[
gap> S := SymmetricInverseSemigroup(3);
<symmetric inverse monoid of degree 3>
gap> T := InverseSemigroup(MajorantClosure(S,[PartialPerm([1])]));
<inverse partial perm monoid of rank 3 with 6 generators>
gap> IsMajorantlyClosed(S,T);
true
gap> RC := RightCosetsOfInverseSemigroup(S,T);
[ [ <identity partial perm on [ 1 ]>, 
      <identity partial perm on [ 1, 2 ]>, [2,3](1), [3,2](1), 
      <identity partial perm on [ 1, 3 ]>, 
      <identity partial perm on [ 1, 2, 3 ]>, (1)(2,3) ], 
  [ [1,3], [2,1,3], [1,3](2), (1,3), [1,3,2], (1,3,2), (1,3)(2) ], 
  [ [1,2], (1,2), [1,2,3], [3,1,2], [1,2](3), (1,2)(3), (1,2,3) ] ]]]></Example>
<#/GAPDoc>

<#GAPDoc Label="SameMinorantsSubgroup">
<ManSection>
<Attr Name="SameMinorantsSubgroup" Arg="H"/>
  <Returns>
    A list of elements of the group &H;-class <A>H</A>.
  </Returns>
  <Description>
    Given a group &H;-class <A>H</A> in an inverse semigroup of partial 
    permutations, block bijections or partial permutation bipartitions <C>S</C>,
    <C>SameMinorantsSubgroup</C> returns a list of the elements of <A>H</A> 
    which have the same strict minorants as the identity element of <A>H</A>.
    
    A <E>strict minorant</E> of <C>x</C> in <A>H</A> is an element of <C>S</C> 
    which is less than <C>x</C> (with respect to the natural partial order), 
    but is not equal to <C>x</C>.<P/>

    The returned list of elements of <A>H</A> describe a subgroup of <A>H</A>.
  </Description>
</ManSection>
<Example><![CDATA[
gap> S := SymmetricInverseSemigroup(3);
<symmetric inverse monoid of degree 3>
gap> H := GroupHClass(GreensDClasses(S)[1]);
<Green's H-class: <identity partial perm on [ 1, 2, 3 ]>>
gap> Elements(H);
[ <identity partial perm on [ 1, 2, 3 ]>, (1)(2,3), (1,2)(3), 
  (1,2,3), (1,3,2), (1,3)(2) ]
gap> SameMinorantsSubgroup(H);
[ <identity partial perm on [ 1, 2, 3 ]> ]
gap> T := InverseSemigroup( 
> PartialPerm( [ 1, 2, 3, 4 ], [ 1, 2, 4, 3 ] ), 
> PartialPerm( [ 1 ], [ 1 ] ), PartialPerm( [ 2 ], [ 2 ] ) );
<inverse partial perm semigroup of rank 4 with 3 generators>
gap> Elements(T);
[ <empty partial perm>, <identity partial perm on [ 1 ]>, 
  <identity partial perm on [ 2 ]>, 
  <identity partial perm on [ 1, 2, 3, 4 ]>, (1)(2)(3,4) ]
gap> x := GroupHClass(GreensDClasses(T)[1]);
<Green's H-class: <identity partial perm on [ 1, 2, 3, 4 ]>>
gap> Elements(x);
[ <identity partial perm on [ 1, 2, 3, 4 ]>, (1)(2)(3,4) ]
gap> SameMinorantsSubgroup(x);
[ <identity partial perm on [ 1, 2, 3, 4 ]>, (1)(2)(3,4) ]
]]></Example>
<#/GAPDoc>

<#GAPDoc Label="SmallerDegreePartialPermRepresentation">
<ManSection>
<Attr Name="SmallerDegreePartialPermRepresentation" Arg="S"/>
  <Returns>
    An isomorphism.
  </Returns>
  <Description>   
    <C>SmallerDegreePartialPermRepresentation</C> attempts to find an
    isomorphism from the inverse semigroup <A>S</A> of partial permutations to
    another inverse semigroup of partial permutations with smaller degree.
    If the function cannot reduce the degree, the identity mapping is returned.
    <P/>
    There is no guarantee that the smallest possible degree 
    representation is returned. For more information see
    <Cite Key ="Schein1992aa"/>.
  </Description>
</ManSection>
<Example><![CDATA[
gap> S := InverseSemigroup(PartialPerm([2, 1, 4, 3, 6, 5, 8, 7]));
<commutative inverse partial perm semigroup of rank 8 with 1 
 generator>
gap> Elements(S);
[ <identity partial perm on [ 1, 2, 3, 4, 5, 6, 7, 8 ]>, 
  (1,2)(3,4)(5,6)(7,8) ]
gap> T := SmallerDegreePartialPermRepresentation(S);
MappingByFunction( <partial perm group of size 2, rank 8 with
  1 generator>, <commutative inverse partial perm semigroup of rank 2 
with 1 generator>, function( x ) ... end, function( x ) ... end )
gap> R := Range(T);
<commutative inverse partial perm semigroup of rank 2 with 1 
 generator>
gap> Elements(R);
[ <identity partial perm on [ 1, 2 ]>, (1,2) ]
gap> S := DualSymmetricInverseMonoid(5);;
gap> T := Range(IsomorphismPartialPermSemigroup(S));
<inverse partial perm monoid of rank 6721 with 3 generators>]]></Example>
<#/GAPDoc>

<#GAPDoc Label="VagnerPrestonRepresentation">
<ManSection>
  <Attr Name="VagnerPrestonRepresentation" Arg="S"/>
  <Returns>
    An isomorphism to an inverse semigroup of partial permutations.
  </Returns>
  <Description>
    <C>VagnerPrestonRepresentation</C> returns an isomorphism from an inverse 
    semigroup <A>S</A> where the elements of <A>S</A> have a unique semigroup 
    inverse accessible via <Ref Attr="Inverse" BookName="ref"/>, to the inverse 
    semigroup of partial permutations <A>T</A> of degree equal to the size of 
    <A>S</A>, which is obtained using the Vagner-Preston Representation Theorem.
    <P/>

    More precisely, if <M>f:S\to T</M> is the isomorphism returned by
    <C>VagnerPrestonRepresentation(<A>S</A>)</C> and <M>x</M> is in <A>S</A>,
    then <M>f(x)</M> is the partial permutation with domain <M>Sx^{-1}</M> and
    range <M>Sx^{-1}x</M> defined by <M>f(x): sx^{-1}\mapsto sx^{-1}x</M>. <P/> 

    In many cases, it is possible to find a smaller degree representation than
    that provided by <C>VagnerPrestonRepresentation</C> using 
    <Ref Oper="IsomorphismPartialPermSemigroup" BookName="ref" /> or 
    <Ref Attr="SmallerDegreePartialPermRepresentation"/>.
  </Description>
</ManSection>
<Example><![CDATA[
gap> S := SymmetricInverseSemigroup(2);
<symmetric inverse monoid of degree 2>
gap> Size(S);
7
gap> iso := VagnerPrestonRepresentation(S);
MappingByFunction( <symmetric inverse monoid of degree 2>, 
<inverse partial perm monoid of rank 7 with 2 generators>
 , function( x ) ... end, function( x ) ... end )
gap> RespectsMultiplication(iso);
true
gap> inv := InverseGeneralMapping(iso);;
gap> ForAll(S, x-> (x^iso)^inv=x);
true
gap> V := InverseSemigroup([
> Bipartition( [ [ 1, -4 ], [ 2, -1 ], [ 3, -5 ], 
> [ 4 ], [ 5 ], [ -2 ], [ -3 ] ] ),
> Bipartition( [ [ 1, -5 ], [ 2, -1 ], [ 3, -3 ], 
> [ 4 ], [ 5 ], [ -2 ], [ -4 ] ] ),
> Bipartition( [ [ 1, -2 ], [ 2, -4 ], [ 3, -5 ], 
> [ 4, -1 ], [ 5, -3 ] ] ) ]);
<inverse bipartition semigroup of degree 5 with 3 generators>
gap> IsInverseSemigroup(V);
true
gap> VagnerPrestonRepresentation(V);
MappingByFunction( <inverse bipartition semigroup of size 394, 
 degree 5 with 3 generators>, <inverse partial perm semigroup of 
 rank 394 with 5 generators>
 , function( x ) ... end, function( x ) ... end )]]></Example>
<#/GAPDoc>

#EOF
