1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288
|
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!-- %% -->
<!-- %A fpsemi.xml GAP documentation Isabel Araújo -->
<!-- %% -->
<!-- %% -->
<!-- %Y (C) 1999 School Math and Comp. Sci., University of St Andrews, Scotland -->
<!-- %Y Copyright (C) 2002 The GAP Group -->
<!-- %% -->
<Chapter Label="Finitely Presented Semigroups and Monoids">
<Heading>Finitely Presented Semigroups and Monoids</Heading>
A <E>finitely presented semigroup</E> (resp. <E>finitely presented monoid</E>)
is a quotient of a free semigroup (resp. free monoid) on a finite
number of generators over a finitely generated congruence on
the free semigroup (resp. free monoid).
<P/>
Finitely presented semigroups are obtained by factoring a free semigroup
by a set of relations (a generating set for the congruence), i.e., a set of
pairs of words in the free semigroup.
<P/>
<Example><![CDATA[
gap> f := FreeSemigroup( "a", "b" );;
gap> x := GeneratorsOfSemigroup( f );;
gap> s := f / [ [ x[1] * x[2], x[2] * x[1] ] ];
<fp semigroup on the generators [ a, b ]>
gap> GeneratorsOfSemigroup( s );
[ a, b ]
gap> RelationsOfFpSemigroup( s );
[ [ a*b, b*a ] ]
]]></Example>
<P/>
Finitely presented monoids are obtained by factoring a free monoid by
a set of relations, i.e. a set of pairs of words in the free monoid.
<P/>
<Example><![CDATA[
gap> f := FreeMonoid( "a", "b" );;
gap> x := GeneratorsOfMonoid( f );
[ a, b ]
gap> e := Identity( f );
<identity ...>
gap> m := f / [ [ x[1] * x[2], e ] ];
<fp monoid on the generators [ a, b ]>
gap> RelationsOfFpMonoid( m );
[ [ a*b, <identity ...> ] ]
]]></Example>
<P/>
Notice that for &GAP; a finitely presented monoid is not a finitely
presented semigroup.
<P/>
<Example><![CDATA[
gap> IsFpSemigroup( m );
false
]]></Example>
<P/>
However, one can build a finitely presented semigroup isomorphic
to that finitely presented monoid (see <Ref Attr="IsomorphismFpSemigroup"/>).
<P/>
Also note that is not possible to refer to the generators by their names.
These names are not variables, but just display figures.
So, if one wants to access the generators by their names, one first has to
introduce the respective variables and to assign the generators to them.
<P/>
<Example><![CDATA[
gap> Unbind( a );
gap> f := FreeSemigroup( "a", "b" );;
gap> s := f / [ [ f.1 * f.2, f.2 * f.1 ] ];;
gap> a;
Error, Variable: 'a' must have a value
gap> a := s.1;
a
gap> a in f;
false
gap> a in s;
true
]]></Example>
<P/>
The generators of the free semigroup (resp. free monoid) are different
from the generators of the finitely presented semigroup (resp. finitely
presented monoid) (even though they are displayed by the same names).
This means that words in the generators of the free semigroup (resp.
free monoid) are not elements of the finitely presented semigroup (resp.
finitely presented monoid). Conversely elements of the finitely presented
semigroup (resp. finitely presented monoid) are not words of the free
semigroup (resp. free monoid).
<P/>
Calculations comparing elements of a finitely presented semigroup
may run into problems: there are finitely presented semigroups for
which no algorithm exists (it is known that no such algorithm can exist)
that will tell for two arbitrary words in the generators whether the
corresponding elements in the finitely presented semigroup are equal.
Therefore the methods used by &GAP; to compute in finitely presented
semigroups may run into warning errors, run out of memory or run forever.
If the finitely presented semigroup is (by theory) known to be
finite the algorithms are guaranteed to terminate (if there is sufficient
memory available), but the time needed for the calculation cannot be
bounded a priori. The same can be said for monoids.
(See <Ref Sect="Rewriting Systems and the Knuth-Bendix Procedure"/>.)
<P/>
<Example><![CDATA[
gap> b := s.2;;
gap> a*b = a^5;
false
gap> a^5 * b^2 * a = a^6 * b^2;
true
]]></Example>
<P/>
Note that elements of a finitely presented semigroup (or monoid) are not
printed in a unique way:
<P/>
<Example><![CDATA[
gap> a^5 * b^2 * a;
a^5*b^2*a
gap> a^6 * b^2;
a^6*b^2
]]></Example>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="sect:IsSubsemigroupFpSemigroup">
<Heading>IsSubsemigroupFpSemigroup (Filter)</Heading>
<#Include Label="IsSubsemigroupFpSemigroup">
<#Include Label="IsFpSemigroup">
<#Include Label="IsElementOfFpSemigroup">
<#Include Label="FpGrpMonSmgOfFpGrpMonSmgElement">
</Section>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Creating Finitely Presented Semigroups and Monoids">
<Heading>Creating Finitely Presented Semigroups and Monoids</Heading>
<ManSection>
<Meth Name="\/" Arg="F, rels"
Label="for a free semigroup or monoid and a list of pairs of elements"/>
<Description>
<Index Subkey="of free semigroup">quotient</Index>
<Index Subkey="of free monoid">quotient</Index>
creates a finitely presented semigroup or monoid given by the presentation
<M>\langle <A>gens</A> \mid <A>rels</A> \rangle</M> where
<A>gens</A> are the generators of the free semigroup or free monoid <A>F</A>,
and the relations <A>rels</A> are entered as pairs of
words in the generators of the free semigroup or free monoid.
<P/>
The same result is obtained with the infix operator <C>/</C>,
i.e. as <A>F</A> <C>/</C> <A>rels</A>.
<P/>
<Example><![CDATA[
gap> fs := FreeSemigroup( 3 );;
gap> x := GeneratorsOfSemigroup( fs );;
gap> s := fs / [ [ x[1] * x[2] * x[1], x[1] ], [ x[2]^4, x[1] ] ];
<fp semigroup on the generators [ s1, s2, s3 ]>
]]></Example>
</Description>
</ManSection>
<#Include Label="FactorFreeSemigroupByRelations">
<#Include Label="IsomorphismFpSemigroup">
</Section>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Comparison of Elements of Finitely Presented Semigroups">
<Heading>Comparison of Elements of Finitely Presented Semigroups</Heading>
<ManSection>
<Meth Name="\=" Arg="a, b" Label="for two elements in a f.p. semigroup"/>
<Description>
<Index Subkey="fp semigroup elements">comparison</Index>
Two elements <A>a</A>, <A>b</A> of a finitely presented semigroup are equal
if they are equal in the semigroup.
Nevertheless they may be represented as different words in the generators.
Because of the fundamental problems mentioned in the
introduction to this chapter such a test may take a very long time
and cannot be guaranteed to finish
(see <Ref Sect="Rewriting Systems and the Knuth-Bendix Procedure"/>).
</Description>
</ManSection>
</Section>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Preimages in the Free Semigroup or Monoid">
<Heading>Preimages in the Free Semigroup or Monoid</Heading>
Elements of a finitely presented semigroup or monoid are not words,
but are represented using a word from the free semigroup or free monoid
as representative.
<P/>
<ManSection>
<Oper Name="UnderlyingElement" Arg='elm'
Label="of an element in a fp semigroup or monoid"/>
<Description>
for an element <A>elm</A> of a finitely presented semigroup or monoid.
Returns the word from the free semigroup or free monoid that is used as a
representative for <A>elm</A>.
<P/>
<Example><![CDATA[
gap> genm := GeneratorsOfMonoid( m );;
gap> e := genm[2]^4;
m2^4
gap> IsWord( e );
false
gap> ue := UnderlyingElement( e );
m2^4
gap> IsWord( ue );
true
]]></Example>
</Description>
</ManSection>
<#Include Label="ElementOfFpSemigroup">
<#Include Label="FreeSemigroupOfFpSemigroup">
<#Include Label="FreeGeneratorsOfFpSemigroup">
<#Include Label="RelationsOfFpSemigroup">
</Section>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Rewriting Systems and the Knuth-Bendix Procedure">
<Heading>Rewriting Systems and the Knuth-Bendix Procedure</Heading>
If a finitely presented semigroup (or monoid) has a confluent rewriting system
then it has a solvable word problem, that is, there is an algorithm to decide
when two words in the free underlying semigroup represent the same element
of the finitely presented semigroup.
Indeed, once we have a confluent rewriting system, it is possible to
successfully test that two words represent the same element in the
semigroup, by reducing both words using the rewriting system rules.
This is, at the moment, the method that &GAP; uses to check equality
in finitely presented semigroups and monoids.
<P/>
<#Include Label="ReducedConfluentRewritingSystem">
<#Include Label="KB_REW">
<ManSection>
<Heading>KnuthBendixRewritingSystem</Heading>
<Oper Name="KnuthBendixRewritingSystem" Arg='s, wordord'
Label="for a semigroup and a reduction ordering"/>
<Oper Name="KnuthBendixRewritingSystem" Arg='m, wordord'
Label="for a monoid and a reduction ordering"/>
<Description>
in the first form, for a semigroup <A>s</A> and a reduction ordering
for the underlying free semigroup, it returns the Knuth-Bendix
rewriting system of the finitely presented semigroup <A>s</A> using the
reduction ordering <A>wordord</A>.
In the second form, for a monoid <A>m</A> and a reduction ordering
for the underlying free monoid, it returns the Knuth-Bendix
rewriting system of the finitely presented monoid <A>m</A> using the
reduction ordering <A>wordord</A>.
</Description>
</ManSection>
<#Include Label="SemigroupOfRewritingSystem">
<#Include Label="FreeSemigroupOfRewritingSystem">
</Section>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Todd-Coxeter Procedure">
<Heading>Todd-Coxeter Procedure</Heading>
This procedure gives a standard way of finding a transformation
representation of a finitely presented semigroup. Usually
one does not explicitly call this procedure but uses
<Ref Attr="IsomorphismTransformationSemigroup"/>.
<!--or <Ref Func="HomomorphismTransformationSemigroup"/>-->
<#Include Label="CosetTableOfFpSemigroup">
</Section>
</Chapter>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!-- %% -->
<!-- %E -->
|