Skip to content

Commit

Permalink
Merge pull request #271 from ChristopherRussell/e-unitary
Browse files Browse the repository at this point in the history
McAlister triples
  • Loading branch information
wilfwilson committed Aug 31, 2017
2 parents c7ce4fb + 471f45f commit f298a0c
Show file tree
Hide file tree
Showing 20 changed files with 2,538 additions and 897 deletions.
19 changes: 10 additions & 9 deletions doc/main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -64,15 +64,16 @@
<#Include SYSTEM "z-chap09.xml"> <!-- standard constructions-->
<#Include SYSTEM "z-chap10.xml"> <!-- free objects -->
<#Include SYSTEM "z-chap11.xml"> <!-- graph inverse semigroups -->
<#Include SYSTEM "z-chap12.xml"> <!-- Green's relations -->
<#Include SYSTEM "z-chap13.xml"> <!-- attributes of semigroups -->
<#Include SYSTEM "z-chap14.xml"> <!-- properties of semigroups -->
<#Include SYSTEM "z-chap15.xml"> <!-- properties and attributes of inverse semigroups -->
<#Include SYSTEM "z-chap16.xml"> <!-- congruences -->
<#Include SYSTEM "z-chap17.xml"> <!-- homomorphisms -->
<#Include SYSTEM "z-chap18.xml"> <!-- visualising semigroups -->
<#Include SYSTEM "z-chap19.xml"> <!-- utils -->
<!--<#Include SYSTEM "z-chap20.xml"> <!-- orbits -->
<#Include SYSTEM "z-chap12.xml"> <!-- McAlister triple semigroups -->
<#Include SYSTEM "z-chap13.xml"> <!-- Green's relations -->
<#Include SYSTEM "z-chap14.xml"> <!-- attributes of semigroups -->
<#Include SYSTEM "z-chap15.xml"> <!-- properties of semigroups -->
<#Include SYSTEM "z-chap16.xml"> <!-- properties and attributes of inverse semigroups -->
<#Include SYSTEM "z-chap17.xml"> <!-- congruences -->
<#Include SYSTEM "z-chap18.xml"> <!-- homomorphisms -->
<#Include SYSTEM "z-chap19.xml"> <!-- visualising semigroups -->
<#Include SYSTEM "z-chap20.xml"> <!-- utils -->
<!--<#Include SYSTEM "z-chap21.xml"> <!-- orbits -->
<!-- <#Include SYSTEM "z-chap22.xml"> <!-- extending the package -->
</Body>

Expand Down
311 changes: 311 additions & 0 deletions doc/semieunit.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,311 @@
############################################################################
##
#W semieunit.xml
#Y Copyright (C) 2016 Christopher Russell
##
## Licensing information can be found in the README file of this package.
##
#############################################################################
##

<#GAPDoc Label="IsMcAlisterTripleSemigroup">
<ManSection>
<Filt Name = "IsMcAlisterTripleSemigroup" Arg = "S"/>
<Returns><K>true</K> or <K>false</K>.</Returns>
<Description>
This function returns <K>true</K> if <A>S</A> is a McAlister triple semigroup.
A <E>McAlister triple semigroup</E> is a special representation of an
E-unitary inverse semigroup <Ref Oper="IsEUnitaryInverseSemigroup"/>
created by <Ref Oper="McAlisterTripleSemigroup"/>.
</Description>
</ManSection>
<#/GAPDoc>

<#GAPDoc Label="McAlisterTripleSemigroup">
<ManSection>
<Oper Name = "McAlisterTripleSemigroup" Arg = "G, X, Y[, act]"/>
<Returns>A McAlister triple semigroup.</Returns>
<Description>

The following documentation covers the technical information needed to
create McAlister triple semigroups in GAP, the underlying theory can be
read in the introduction to Chapter
<Ref Chap = "McAlister triple semigroups"/>.
<P/>

In this implementation the partial order <C>X</C> of a McAlister triple is
represented by a <Ref Oper="Digraph" BookName="Digraphs"/> object <A>X</A>.
The digraph represents a partial order in the sense that vertices are the
elements of the partial order and the order relation is defined by
<C>A</C> <M>\leq</M> <C>B</C> if and only if there is an edge from <C>B</C>
to <C>A</C>. The semilattice <C>Y</C> of the McAlister triple should be an
induced subdigraph <A>Y</A> of <A>X</A> and the
<Ref Oper="DigraphVertexLabels" BookName="Digraphs"/> must correspond to
the vertices of <A>X</A> on which <A>Y</A> is induced. That means that
the following:
<P/>

<C><A>Y</A> = InducedSubdigraph(<A>X</A>, DigraphVertexLabels(<A>Y</A>))
</C><P/>

must return <K>true</K>. Herein if we say that a vertex <C>A</C> of <A>X</A>
is 'in' <A>Y</A> then we mean there is a vertex of <A>Y</A> whose label is
<C>A</C>. Alerternatively the user may choose to give the argument
<A>Y</A> as the vertices of <A>X</A> on which <A>Y</A> is the induced
subdigraph. <P/>

A McAlister triple semigroup is created from a quadruple
<C>(<A>G</A>, <A>X</A>, <A>Y</A>, <A>act</A>)</C> where:

<List>
<Item>
<A>G</A> is a finite group.
</Item>
<Item>
<A>X</A> is a digraph satisfying
<Ref Prop= "IsPartialOrderDigraph" BookName="Digraphs"/>.
</Item>
<Item>
<A>Y</A> is a digraph satisfying
<Ref Prop="IsJoinSemilatticeDigraph" BookName="Digraphs"/> which
is an induced subdigraph of <A>X</A> satisfying the aforementioned
labeling criteria. Furthermore the <Ref Attr="OutNeighbours"
BookName="Digraphs"/> of each vertex of <A>X</A> which is in <A>Y</A>
must contain only vertices which are in <A>Y</A>.
</Item>
<Item>
<A>act</A> is a function which takes as its first argument a vertex
of the digraph <A>X</A>, its second argument should be an element of
<A>G</A>, and it must return a vertex of <A>X</A>.
<A>act</A> must be a right action, meaning that
<A>act</A><C>(A,gh)=<A>act</A>(<A>act</A>(A,g),h)</C> holds for all
<C>A</C> in <A>X</A> and <C>g,h</C> <M>\in</M> <A>G</A>. Furthermore
the permutation represenation of this action must be a subgroup of the
automorphism group of <A>X</A>. That means we require the following
to return <K>true</K>: <P/>
<C>IsSubgroup(AutomorphismGroup(</C><A>X</A><C>),
Image(ActionHomomorphism(</C><A>G</A><C>,
DigraphVertices(</C><A>X</A><C>), </C><A>act</A><C>));</C> <P/>
Furthermore every vertex of <A>X</A> must be in the orbit of some
vertex of <A>X</A> which is in <A>Y</A>. Finally, <A>act</A> must fix
the vertex of <A>X</A> which is the minimal vertex of <A>Y</A>, i.e.
the unique vertex of <A>Y</A> whose only out-neighbour is itself.
</Item>
</List>

For user convienience, there are multiple versions of
<C>McAlisterTripleSemigroup</C>. When the argument <A>act</A> is ommitted
it is assumed to be <Ref Func= "OnPoints" BookName= "ref"/>. Additionally,
the semilattice argument <A>Y</A> may be replaced by a homogeneous list
<A>sub_ver</A> of vertices of <A>X</A>. When <A>sub_ver</A> is provided,
<C>McAlisterTripleSemigroup</C> is called with <A>Y</A> equalling
<C>InducedSubdigraph(<A>X</A>, <A>sub_ver</A>)</C> with the appropriate
labels.

<Example><![CDATA[
gap> x := Digraph([[1], [1, 2], [1, 2, 3], [1, 4], [1, 4, 5]]);
<digraph with 5 vertices, 11 edges>
gap> y := InducedSubdigraph(x, [1, 4, 5]);
<digraph with 3 vertices, 6 edges>
gap> DigraphVertexLabels(y);
[ 1, 4, 5 ]
gap> A := AutomorphismGroup(x);
Group([ (2,4)(3,5) ])
gap> S := McAlisterTripleSemigroup(A, x, y, OnPoints);
<McAlister triple semigroup over Group([ (2,4)(3,5) ])>
gap> T := McAlisterTripleSemigroup(A, x, y);
<McAlister triple semigroup over Group([ (2,4)(3,5) ])>
gap> S = T;
false
gap> IsIsomorphicSemigroup(S, T);
true
gap> GeneratorsOfSemigroup(T);
[ (1, ()), (4, ()), (5, ()), (1, (2,4)(3,5)) ]
gap> AsSemigroup(IsPartialPermSemigroup, T);
<inverse partial perm monoid of size 4, rank 4 with 4 generators>]]></Example>
</Description>
</ManSection>
<#/GAPDoc>

<#GAPDoc Label="McAlisterTripleSemigroupGroup">
<ManSection>
<Attr Name = "McAlisterTripleSemigroupGroup" Arg = "S"/>
<Returns>A group.</Returns>
<Description>
Returns the group used to create the McAlister triple semigroup <A>S</A>
via <Ref Oper="McAlisterTripleSemigroup"/>.
</Description>
</ManSection>
<#/GAPDoc>

<#GAPDoc Label="McAlisterTripleSemigroupPartialOrder">
<ManSection>
<Attr Name = "McAlisterTripleSemigroupPartialOrder" Arg = "S"/>
<Returns>A partial order digraph.</Returns>
<Description>
Returns the <Ref Prop="IsPartialOrderDigraph" BookName="Digraphs"/> used
to create the McAlister triple semigroup <A>S</A> via
<Ref Oper="McAlisterTripleSemigroup"/>.
</Description>
</ManSection>
<#/GAPDoc>

<#GAPDoc Label="McAlisterTripleSemigroupSemilattice">
<ManSection>
<Attr Name = "McAlisterTripleSemigroupSemilattice" Arg = "S"/>
<Returns>A join-semilattice digraph.</Returns>
<Description>
Returns the <Ref Prop="IsJoinSemilatticeDigraph" BookName="Digraphs"/>
used to create the McAlister triple semigroup <A>S</A> via
<Ref Oper="McAlisterTripleSemigroup"/>.
</Description>
</ManSection>
<#/GAPDoc>

<#GAPDoc Label="McAlisterTripleSemigroupAction">
<ManSection>
<Attr Name = "McAlisterTripleSemigroupAction" Arg = "S"/>
<Returns>A function.</Returns>
<Description>
Returns the action used to create the McAlister triple semigroup
<A>S</A> via <Ref Oper="McAlisterTripleSemigroup"/>.
</Description>
</ManSection>
<#/GAPDoc>

<#GAPDoc Label="IsMcAlisterTripleSemigroupElement">
<ManSection>
<Filt Name = "IsMcAlisterTripleSemigroupElement" Arg = "x"/>
<Filt Name = "IsMTSE" Arg = "x"/>
<Returns><K>true</K> or <K>false</K>.</Returns>
<Description>
Returns <K>true</K> if <A>x</A> is an element of a McAlister triple
semigroup; in particular, this returns <K>true</K> if <A>x</A> has been
created by <Ref Oper="McAlisterTripleSemigroupElement"/>. The functions
<C>IsMTSE</C> and <C>IsMcAlisterTripleSemigroupElement</C> are synonyms.
The mathematical description of these objects can be found in the
introduction to Chapter <Ref Chap = "McAlister triple semigroups"/>.
</Description>
</ManSection>
<#/GAPDoc>

<#GAPDoc Label="McAlisterTripleSemigroupElement">
<ManSection>
<Oper Name = "McAlisterTripleSemigroupElement" Arg = "S, A, g"/>
<Oper Name = "MTSE" Arg = "S, A, g"/>
<Returns>A McAlister triple semigroup element.</Returns>
<Description>
Returns the <E>McAlister triple semigroup element</E> of the McAlister
triple semigroup <A>S</A> which corresponds to a label <A>A</A> of a
vertex from the <Ref Attr="McAlisterTripleSemigroupSemilattice"/> of
<A>S</A> and a group element <A>g</A> of the <Ref Attr=
"McAlisterTripleSemigroupGroup"/> of <A>S</A>. The pair
<A>(A,g)</A> only represents an element of <A>S</A> if the following
holds:

<A>A</A> acted on by the inverse of <A>g</A> (via <Ref
Attr="McAlisterTripleSemigroupAction"/>) is a vertex of the
join-semilattice of <A>S</A>. <P/>

The functions <C>MTSE</C> and <C>McAlisterTripleSemigroupElement</C>
are synonyms.
<Example><![CDATA[
gap> x := Digraph([[1], [1, 2], [1, 2, 3], [1, 4], [1, 4, 5]]);
<digraph with 5 vertices, 11 edges>
gap> y := InducedSubdigraph(x, [1, 2, 3]);
<digraph with 3 vertices, 6 edges>
gap> A := AutomorphismGroup(x);
Group([ (2,4)(3,5) ])
gap> S := McAlisterTripleSemigroup(A, x, y, OnPoints);
<McAlister triple semigroup over Group([ (2,4)(3,5) ])>
gap> T := McAlisterTripleSemigroup(A, x, y);
<McAlister triple semigroup over Group([ (2,4)(3,5) ])>
gap> S = T;
false
gap> IsIsomorphicSemigroup(S, T);
true
gap> a := MTSE(S, 1, (2, 4)(3, 5));
(1, (2,4)(3,5))
gap> b := MTSE(S, 2, ());
(2, ())
gap> a * a;
(1, ())
gap> IsMTSE(a * a);
true
gap> a = MTSE(T, 1, (2, 4)(3, 5));
false
gap> a * b;
(1, (2,4)(3,5))]]></Example>
</Description>
</ManSection>
<#/GAPDoc>

<#GAPDoc Label="EUnitaryInverseCover">
<ManSection>
<Attr Name = "EUnitaryInverseCover" Arg = "S"/>
<Returns>A homomorphism between semigroups.</Returns>
<Description>
If the argument <A>S</A> is an inverse semigroup then this function
returns a finite E-unitary inverse cover of <A>S</A>. A finite E-unitary
cover of <A>S</A> is a surjective idempotent separating homomorphism from
a finite semigroup satisfying <Ref Prop="IsEUnitaryInverseSemigroup"/>
to <A>S</A>. A semigroup homomorphism is said to be idempotent separating
if no two idempotents are mapped to the same element of the image.
<Example><![CDATA[
gap> S := InverseSemigroup([PartialPermNC([1, 2], [2, 1]),
> PartialPermNC([1], [1])]);
<inverse partial perm semigroup of rank 2 with 2 generators>
gap> cov := EUnitaryInverseCover(S);
MappingByFunction( <inverse partial perm semigroup of rank 4 with 2
generators>, <inverse partial perm semigroup of rank 2 with 2
generators>, function( x ) ... end )
gap> IsEUnitaryInverseSemigroup(Source(cov));
true
gap> S = Range(cov);
true]]></Example>
</Description>
</ManSection>
<#/GAPDoc>

<#GAPDoc Label="IsFInverseSemigroup">
<ManSection>
<Prop Name = "IsFInverseSemigroup" Arg = "S"/>
<Returns><K>true</K> or <K>false</K>.</Returns>
<Description>
This functions determines whether a given semigroup is an F-inverse
semigroup. An F-inverse semigroup is a semigroup which satisfies
<Ref Prop="IsEUnitaryInverseSemigroup"/> as well as being isomorphic
to some <Ref Oper="McAlisterTripleSemigroup"/> where the
<Ref Attr="McAlisterTripleSemigroupPartialOrder"/> satisfies
<Ref Prop="IsJoinSemilatticeDigraph" BookName="Digraphs"/>. McAlister
triple semigroups are a represenation of E-unitary inverse semigroups and
more can be read about them in Chapter
<Ref Chap="McAlister triple semigroups"/>.
<Example><![CDATA[
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]]></Example>
</Description>
</ManSection>
<#/GAPDoc>

<#GAPDoc Label="IsFInverseMonoid">
<ManSection>
<Prop Name = "IsFInverseMonoid" Arg = "S"/>
<Returns><K>true</K> or <K>false</K>.</Returns>
<Description>
This function determines whether a given semigroup is an F-inverse
monoid. A semigroup is an F-inverse monoid when it satisfies
<Ref Filt="IsMonoid" BookName = "ref"/> and
<Ref Prop="IsFInverseSemigroup"/>.
</Description>
</ManSection>
<#/GAPDoc>
Loading

0 comments on commit f298a0c

Please sign in to comment.