Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
| Download
GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
Project: cocalc-sagemath-dev-slelievre
Views: 418346% This file was created automatically from intro.msk.1% DO NOT EDIT!2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%3\Chapter{Introduction}45The `AutomGrp' package provides methods for computation with groups and6semigroups generated by finite automata or given by wreath recursions, as well7as with their finitely generated subgroups, subsemigroups and elements.89The project originally started in 2000 mostly for personal use.10It was gradually expanding during consequent years, including both11addition of new algorithms and simplification of user interface. It12was used in the process of classification of groups generated by13$3$-state automata over a 2-letter alphabet (see14\cite{BGK32}), as well as many subsequent papers.1516First author thanks Sveta and Max Muntyan for their infinite patience and17understanding. Second author thanks Olga, Anna, Irina and Andrey Savchuk for their help18and understanding. This project would be impossible without them.1920We would like to express our warm gratitude to Rostislav Grigorchuk, Zoran Sunic,21Volodymyr Nekrashevych, Ievgen Bondarenko, Rostyslav Kravchenko, Yaroslav and Maria22Vorobets and Ben Steinberg for their support, valuable comments, feature requests and constant interest23in the project.2425We also appreciate the code provided by Andrey Russev that was used to optimize the minimization of autmata function. Last, but not the least, we want to thank the anonymous referee for a very detailed review and numeruous constructive comments that significantly increased the quality of the accepted version of the package.2627Both authors were partially supported by NSF grants DMS-0600975, DMS-0456185 and DMS-0308985. The second author28appreciates the support from the New Researcher Grant from University of South Florida and the Simons29Collaboration Grant from Simons Foundation.3031%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%32\Section{Short math background}3334This package deals mostly with groups acting on rooted trees. In35this section we recall necessary definitions and notation that will36be used throughout the manual. For more detailed introduction to the37theory of groups generated by automata we refer the reader38to~\cite{GNS00}.3940The infinite connected tree with selected vertex, called41the <root>, in which the degree of every vertex except the root is42$d+1$ and the degree of the root is $d$ is called the <regular43homogeneous rooted tree of degree $d$> (or <$d$-ary44tree>). The rooted tree of degree $2$ is called the <binary tree>.4546The $n$-th <level> of the tree consists of all vertices located at47distance $n$ from the root (here we mean combinatorial distance in48the graph).4950Similarly one defines <spherically homogeneous> (or <spherically-transitive>)51rooted trees as rooted trees, such that the degrees of all vertices at each level52coincide (but may depend on the level).5354Given a finite alphabet $X=\{1,2,\ldots,d\}$ the set $X^{*}$ of all55finite words over $X$ may be endowed with the structure of a $d$-ary56tree in which the empty word $\emptyset$ is the <root>, the <level>57$n$ in $X^{*}$ consists of the words of length $n$ over $X$ and58every vertex $v$ has $d$ children, labeled by $vx$, for $x\in X$.5960Any automorphism $f$ of a rooted tree $T$ fixes the root and the61levels. For any vertex $v$ of the tree $T$ each automorphism $f$ induces the62automorphism $f|_v$ of the subtree of $T$ hanging down from the vertex $v$ by63$f|_v(u)=w$ if $f(vu)=v'w$ for some $v'\in X^{|v|}$ from the same64level as $v$ (here $|v|$ denotes the combinatorial distance from $v$ to65the root of the tree). This automorphism is called the <section> of $f$ at66$v$.6768If the tree $T$ is regular, then the subtrees hanging down from69vertices of $T$ are canonically isomorphic to $T$ and, thus, the70sections of any automorphism $f$ of $T$ can be considered as71automorphisms of $T$ again.7273A group $G$ of automorphisms of a regular rooted tree $T$ is called74<self-similar> if all sections of every element of $G$ belong to75$G$.7677A self-similar group $G$ is called <contracting>78if there is a finite set $N$ of elements of $G$, such that for any79$g$ in $G$ there is a level $n$ such that all sections of $g$ at80vertices of levels bigger than $n$ belong to $N$. The smallest set81with such a property is called the <nucleus> of $G$.8283Any automorphism $f$ of a rooted tree can be decomposed as84$$f=(f_1,f_2,\ldots,f_d)\sigma,$$8586where $f_1,\ldots,f_d$ are the sections of $f$ at the vertices of87the first level and $\sigma$ is the permutation which permutes the subtrees88hanging down from these vertices.8990This notation is very convenient for performing multiplication of91elements. Throughout this manual and everywhere in the package we use the right92action of (semi)groups acting on trees and for automorphisms (homomorphisms) of93a tree $f$ and $g$, the composition $f.g$ means that $f$ acts first. This is94consistent with the order of multiplication of permutations in \GAP\ , even though95some authors in the field prefer to use the left action. With this convention96in mind, If $f=(f_1,f_2,\ldots,f_d)\sigma$ and97$g=(g_1,g_2,\ldots,g_d)\pi$, then9899$$f.g=(f_1.g_{\sigma(1)},\ldots,f_d.g_{\sigma(d)})\sigma\pi,$$100101$$f^{-1}=(f_{\sigma^{-1}(1)}^{-1},\ldots,f_{\sigma^{-1}(d)}^{-1})\sigma^{-1}\.$$102103The group of automorphisms of a rooted tree is said to be104<level-transitive> if it acts transitively on each level of the105tree.106107Everything above applies also for homomorphisms of rooted trees108(maps preserving the root and incidence relation of the vertices).109The only difference is that in this case we get semigroups and110monoids of tree homomorphisms.111112A special class of self-similar groups is the class of groups113generated by finite automata. This class is especially nice from114the algorithmic point of view. Let us recall basic definitions.115116A <Mealy automaton> (<transducer>, <synchronous automaton>, or,117simply, <automaton>) is a tuple $A=(Q,X,\rho,\tau)$, where $Q$ is118a set of <states>, $X$ is a finite <alphabet> of cardinality $d \geq1192$, $\rho:Q \times X \to X$ is a map, called the <output map>, $\tau:Q120\times X \to Q$ is a map, called the <transition map>.121122If for each state $q$ in $Q$, the restriction $\rho_q: X \to X$123given by $\rho_q(x)=\rho(q,x)$ is a permutation, the automaton is124called <invertible>.125126If the set $Q$ of states is finite, the automaton is called127<finite>.128129If some state $q$ in $Q$ of the automaton $A$ is selected to be initial,130the automaton is called <initial> and denoted $A_q$. If an initial131state is not specified, the automaton is called <noninitial>.132133An initial automaton naturally acts on $X^{*}$ by homomorphisms134(automorphisms in the case of an invertible automation) in the following way.135Given a word136$x_1x_2\ldots x_n$, the automaton starts at the initial state $q$,137reads the first input letter $x_1$, outputs the letter $\rho_q(x_1)$138and changes its state to $q_1=\tau(q,x_1)$. The rest of the input139word is handled by the new state $q_1$ in the same way. Formally140speaking, the functions $\rho$ and $\tau$ can be extended to $\rho\colon Q141\times X^{*} \to X^{*}$ and $\tau\colon Q \times X^{*} \to Q$.142143Given an automaton $A$ the group $G(A)$ of automorphisms of $X^{*}$144generated by all the states of $A$ (as initial automata) is called the145<automaton group> defined by $A$.146147Every automaton group is self-similar, because the section of $A_q$148at vertex $v$ is just $A_{\tau(q,v)}$.149150A special case is the case of groups generated by finite automata151and their subgroups. In this class we can solve the word problem,152which makes it much nicer from the computational point of view.153154Finite automata are often described by <recursive relations> (or <wreath recursion>) of155the form156157$$q=(\tau(q,1),\ldots,\tau(q,d)) \rho_q$$158159for every state $q$. For example, the line $a=(a,b)(1,2), b=(a,b)$160describes the automaton with 2 states $a$ and $b$, such that $a$161permutes the letters $1$ and $2$ of the alphabet $X=\{1,2\}$ and $b$162does not; and, independently163of the current state, the automaton changes its initial state to $a$ if164it reads $1$ and to $b$ if it reads $2$. This particular automaton165generates the, so-called, lamplighter group.166167Semigroups generated by noninvertible automata are defined in a similar way.168169170%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%171\Section{Installation instructions}172173174`AutomGrp' package requires \GAP\ version at least 4.4.6 and `FGA' (Free175Group Algorithms) package available at \URL{http://www.gap-system.org/Packages/fga.html}176177The installation of the `AutomGrp' package follows the standard \GAP\ rules, i.e.178to install it unpack the archive into the `pkg' directory of179your \GAP\ distribution. This will create `automgrp' subdirectory.180% Use `automgrp-1.3-win.zip' archive if you are installing on181% a Microsoft Windows system, and `automgrp-1.3.tar.bz2' or182% `automgrp-1.3.tar.gz' otherwise.183184To load package issue the command185\beginexample186gap> LoadPackage("automgrp");187----------------------------------------------------------------188Loading AutomGrp 1.3 (Automata Groups and Semigroups)189by Yevgen Muntyan (muntyan@fastmail.fm)190Dmytro Savchuk (http://savchuk.myweb.usf.edu/)191Homepage: http://finautom.sourceforge.net/192----------------------------------------------------------------193true194\endexample195196Note, that if the `FR' package by Laurent Bartholdi is installed as well, \GAP\197will automatically load it, together with the packages on which it depends. The `FR'198package functionality partially overlaps with the one of `AutomGrp'. For the199user's convenience and to expand the functionality of both packages, several converters (see operations `AutomGrp2FR' ("AutomGrp2FR")200and `FR2AutomGrp' ("FR2AutomGrp")) of the basic data types were implemented in `AutomGrp'.201202To test the installation, issue the command203\beginexample204gap> Read( Filename( DirectoriesLibrary( "pkg/automgrp/tst"), "testall.g"));205\endexample206in the \GAP\ command line.207208209%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%210\Section{Quick example}211212Here is how to define the Grigorchuk group and Basilica group.213214\beginexample215gap> Grigorchuk_Group := AutomatonGroup("a=(1,1)(1,2),b=(a,c),c=(a,d),d=(1,b)");216< a, b, c, d >217gap> Basilica := AutomatonGroup( "u=(v,1)(1,2), v=(u,1)" );218< u, v >219\endexample220221Similarly one can define a group (or semigroup) generated by222a noninvertible automaton. As an example we consider the semigroup of223intermediate growth generated by the two state automaton224(\cite{BRS06})225226\beginexample227gap> SG := AutomatonSemigroup( "f0=(f0,f0)(1,2), f1=(f1,f0)[2,2]" );228< f0, f1 >229\endexample230231Another type of groups (semigroups) implemented in the package is232the class of groups (semigroups) defined by wreath recursion233(finitely generated self-similar groups).234235\beginexample236gap> WRG := SelfSimilarGroup("x=(1,y)(1,2),y=(z^-1,1)(1,2),z=(1,x*y)");237< x, y, z >238\endexample239240241Now we can compute several properties of `Grigorchuk_Group', `Basilica' and `SG'242243\beginexample244gap> IsFinite(Grigorchuk_Group);245false246gap> IsSphericallyTransitive(Grigorchuk_Group);247true248gap> IsFractal(Grigorchuk_Group);249true250gap> IsAbelian(Grigorchuk_Group);251false252gap> IsTransitiveOnLevel(Grigorchuk_Group, 4);253true254\endexample255256We can also check that `Basilica' and `WRG' are contracting and compute their nuclei257\beginexample258gap> IsContracting(Basilica);259true260gap> GroupNucleus(Basilica);261[ 1, u, v, u^-1, v^-1, u^-1*v, v^-1*u ]262gap> IsContracting( WRG );263true264gap> GroupNucleus( WRG );265[ 1, y*z^-1*x*y, z^-1*y^-1*x^-1*y*z^-1, z^-1*y^-1*x^-1, y^-1*x^-1*z*y^-1,266z*y^-1*x*y*z, x*y*z ]267\endexample268269270The group `Grigorchuk_Group' is generated by a bounded automaton and, thus, is271amenable (see \cite{BKNV05})272\beginexample273gap> IsGeneratedByBoundedAutomaton(Grigorchuk_Group);274true275gap> IsAmenable(Grigorchuk_Group);276true277\endexample278279280We can compute the stabilizers of levels and vertices281\beginexample282gap> StabilizerOfLevel(Grigorchuk_Group, 2);283< a*b*a*d*a^-1*b^-1*a^-1, d, b*a*d*a^-1*b^-1, a*b*c*a^-1, b*a*b*a*b^-1*a^-1*b^284-1*a^-1, a*b*a*b*a*b^-1*a^-1*b^-1 >285gap> StabilizerOfVertex(Grigorchuk_Group, [2, 1]);286< a*b*a*d*a^-1*b^-1*a^-1, d, a*c*b^-1*a^-1, c, b, a*b*a*c*a^-1*b^-1*a^287-1, a*b*a*b*a^-1*b^-1*a^-1 >288\endexample289290In the case of a finite group we can produce an isomorphism into a permutation group291\beginexample292gap> f := IsomorphismPermGroup(Group(a,b));293[ a, b ] ->294[ (1,2)(3,5)(4,6)(7,9)(8,10)(11,13)(12,14)(15,17)(16,18)(19,21)(20,22)(23,29525)(24,26)(27,29)(28,30)(31,32), (1,3)(2,4)(5,7)(6,8)(9,11)(10,12)(13,29615)(14,16)(17,19)(18,20)(21,23)(22,24)(25,27)(26,28)(29,31)(30,32) ]297gap> Size(Image(f));29832299\endexample300301Here is how to find relations in `Basilica' between elements of length not greater than 5.302\beginexample303gap> FindGroupRelations(Basilica, 6);304v*u*v*u^-1*v^-1*u*v^-1*u^-1305v*u^2*v^-1*u^2*v*u^-2*v^-1*u^-2306v^2*u*v^2*u^-1*v^-2*u*v^-2*u^-1307[ v*u*v*u^-1*v^-1*u*v^-1*u^-1, v*u^2*v^-1*u^2*v*u^-2*v^-1*u^-2,308v^2*u*v^2*u^-1*v^-2*u*v^-2*u^-1 ]309\endexample310311Or relations in the subgroup $\langle p=uv^{-1}, q=vu\rangle$312\beginexample313gap> FindGroupRelations([u*v^-1,v*u], ["p", "q"], 5);314q*p^2*q*p^-1*q^-2*p^-1315[ q*p^2*q*p^-1*q^-2*p^-1 ]316\endexample317318Or relations in the semigroup `SG'319320\beginexample321gap> FindSemigroupRelations(SG, 4);322f0^3 = f0323f0^2*f1 = f1324f1*f0^2 = f1325f1^3 = f1326[ [ f0^3, f0 ], [ f0^2*f1, f1 ], [ f1*f0^2, f1 ], [ f1^3, f1 ] ]327\endexample328329330331Some basic operations with elements are the following:332333The function `IsOne' computes whether an element represents the334trivial automorphism of the tree335\beginexample336gap> IsOne( (a*b)^16 );337true338\endexample339340Here is how to compute the order (this function might not stop in341some cases)342\beginexample343gap> Order(a*b);34416345gap> Order(u^22*v^-15*u^2*v*u^10);346infinity347\endexample348349Note that the package contains many helpful notifications that can be enabled350by changing `InfoLevel' for `InfoAutomGrp'. In many situations level 3 provides351additional information about the computation that can be used either to track the352progress or to extract the proof from the result as it can be done in the example353below.354355\beginexample356gap> SetInfoLevel(InfoAutomGrp,3);357gap> Order(u^22*v^-15*u^2*v*u^10);358#I v is obtained from (u^22*v^-15*u^2*v*u^10)^1359by taking sections and cyclic reductions at vertex [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ]360#I v is obtained from (v)^2361by taking sections and cyclic reductions at vertex [ 1, 1 ]362infinity363\endexample364365One can check if a particular element acts spherically transitively on the tree366(this function might not stop in some cases)367\beginexample368gap> IsSphericallyTransitive(a*b);369false370gap> IsSphericallyTransitive(u*v);371true372\endexample373374375The sections of an element can be obtained as follows376\beginexample377gap> Section(u*v^2*u, 2);378u^2*v379gap> Decompose(u*v^2*u);380(v, u^2*v)381gap> Decompose(u*v^2*u, 3);382(v, 1, 1, 1, u*v, 1, u, 1)(1,2)(5,6)383\endexample384385386One can try to compute whether the elements of group `WRG' defined387by wreath recursion are finite-state and calculate corresponding388automaton389390\beginexample391gap> IsFiniteState(x*y^-1);392true393gap> AllSections(x*y^-1);394[ x*y^-1, z, 1, x*y, y*z^-1, z^-1*y^-1*x^-1, y^-1*x^-1*z*y^-1, z*y^-1*x*y*z,395y*z^-1*x*y, z^-1*y^-1*x^-1*y*z^-1, x*y*z, y, z^-1, y^-1*x^-1, z*y^-1 ]396gap> A := MealyAutomaton(x*y^-1);397<automaton>398gap> NumberOfStates(A);39915400\endexample401402403To get the action of an element on a vertex or on a particular level of the tree404use the following commands405\beginexample406gap> [1,2,1,1]^(a*b);407[ 2, 2, 1, 1 ]408gap> PermOnLevel(u*v^2*v, 3);409(1,6,4,8,2,5,3,7)410\endexample411412The action of the whole group `Grigorchuk_Group' on some level can be computed via413`PermGroupOnLevel' (see "PermGroupOnLevel").414\beginexample415gap> PermGroupOnLevel(Grigorchuk_Group, 3);416Group([ (1,5)(2,6)(3,7)(4,8), (1,3)(2,4)(5,6), (1,3)(2,4), (5,6) ])417gap> Size(last);418128419\endexample420421422423The next example shows how to find all elements of length at most 5 of order 16 in the Grigorchuk group.424\beginexample425gap> FindElements(Grigorchuk_Group, Order, 16, 5);426[ a*b, b*a, c*a*d, d*a*c, a*b*a*d, a*c*a*d, a*d*a*b, a*d*a*c, b*a*d*a,427c*a*d*a, d*a*b*a, d*a*c*a, a*c*a*d*a, a*d*a*c*a, b*a*b*a*c, b*a*c*a*c,428c*a*b*a*b, c*a*c*a*b ]429\endexample430431%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%432433434