%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Chapter{Properties and operations with groups and semigroups}

In this chapter we present the functionality applicable to groups and semigroups.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Creation of groups and semigroups}

\Declaration{AutomatonGroup}
\Declaration{AutomatonSemigroup}

\Declaration{SelfSimilarGroup}
\Declaration{SelfSimilarSemigroup}

\Declaration{IsTreeAutomorphismGroup}
\Declaration{IsAutomGroup}
\Declaration{IsAutomatonGroup}
\Declaration{IsSelfSimGroup}
\Declaration{IsSelfSimilarGroup}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Basic properties of groups and semigroups}

\Declaration{TopDegreeOfTree}
\Declaration{DegreeOfTree}
\Declaration{IsFractal}
\Declaration{IsFractalByWords}
\Declaration{IsSphericallyTransitive}[treehomsg]!{ for tree homomorphism (semi)group}
\Declaration{ContainsSphericallyTransitiveElement}
\Declaration{IsTransitiveOnLevel}[treehomsg]!{ for tree homomorphism (semi)group}
\Declaration{IsSelfSimilar}
\Declaration{IsContracting}
\Declaration{IsNoncontracting}
\Declaration{IsGeneratedByAutomatonOfPolynomialGrowth}
\Declaration{IsGeneratedByBoundedAutomaton}
\Declaration{PolynomialDegreeOfGrowthOfUnderlyingAutomaton}
\Declaration{IsOfSubexponentialGrowth}
\Declaration{IsAmenable}
\Declaration{UnderlyingAutomaton}
\Declaration{AutomatonList}[automsg]!{ for tree homomorphism (semi)group}
\Declaration{RecurList}[selfsimsg]!{ for tree homomorphism (semi)group}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Operations with groups and semigroups}

\Declaration{PermGroupOnLevel}
\Declaration{TransformationSemigroupOnLevel}
\Declaration{StabilizerOfLevel}
\Declaration{StabilizerOfFirstLevel}
\Declaration{StabilizerOfVertex}
\Declaration{FixesLevel}
\Declaration{FixesVertex}
\Declaration{Projection}
\Declaration{ProjStab}
\Declaration{FindGroupRelations}
\Declaration{FindSemigroupRelations}


\>Iterator( <G>[, <max_len>] ) M

Provides a possibility to loop over elements of a group (semigroup, monoid)
generated by automata. If <max_len>  is given, it stops after enumerating all elements
of length up to <max_len>.
\beginexample
gap> Grigorchuk_Group := AutomatonGroup("a=(1,1)(1,2),b=(a,c),c=(a,d),d=(1,b)");
< a, b, c, d >
gap> iter := Iterator(Grigorchuk_Group, 5);
<iterator>
gap> l:=[];;
gap> for g in iter do
>      if Order(g)=16 then Add(l,g); fi;
>    od;
gap> l;
[ b*a, a*b, d*a*c, c*a*d, d*a*c*a, d*a*b*a, c*a*d*a, b*a*d*a, a*d*a*c,
  a*d*a*b, a*c*a*d, a*b*a*d, c*a*c*a*b, c*a*b*a*b, b*a*c*a*c, b*a*b*a*c,
  a*d*a*c*a, a*c*a*d*a ]
\endexample

\Declaration{FindElement}
\Declaration{FindElementOfInfiniteOrder}
\Declaration{SphericallyTransitiveElement}
\Declaration{Growth}
\Declaration{ListOfElements}
\Declaration{FindNucleus}
\Declaration{LevelOfFaithfulAction}
\Declaration{IsomorphismPermGroup}
\Declaration{Random}
\Declaration{MarkovOperator}
\Declaration{MihailovaSystem}



\Declaration{AbelImage}
\Declaration{DiagonalPower}
\Declaration{MultAutomAlphabet}

\Declaration{UnderlyingAutomFamily}

%Declaration{UnderlyingFreeGroup}
%Declaration{UnderlyingFreeSubgroup}
%Declaration{UnderlyingFreeGenerators}
%Declaration{TrivialSubgroup}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Self-similar groups and semigroups defined by the wreath recursion}

\Declaration{IsFiniteState}[selfsimsg]!{ for tree homomorphism (semi)group}
\Declaration{IsomorphicAutomGroup}
\Declaration{IsomorphicAutomSemigroup}

\Declaration{UnderlyingAutomatonGroup}
\Declaration{UnderlyingAutomatonSemigroup}

\Declaration{MonomorphismToAutomatonGroup}
\Declaration{MonomorphismToAutomatonSemigroup}



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Contracting groups}

\Declaration{GroupNucleus}
\Declaration{GeneratingSetWithNucleus}
\Declaration{GeneratingSetWithNucleusAutom}
\Declaration{ContractingLevel}
\Declaration{ContractingTable}
\Declaration{UseContraction}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Rewriting Systems}

It is possible to use basic relators in all computations performed
in a self-similar group.

\Declaration{AG_UseRewritingSystem}
\Declaration{AG_AddRelators}
\Declaration{AG_UpdateRewritingSystem}
\Declaration{AG_RewritingSystemRules}



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
