# Jack Button's Group # ------------------- # # With presentation <a,b,t | a^t = ab, b^t = ba> # # Alan Logan says this is hyperbolic, but noone wants to publish # this result alone. # # Tester now proves this to be hyperbolic, after corrected # relation. Bug reported by email by Chris Chalk <chalk235@gmail.com> #
InstallGlobalFunction("JackButtonGroup", function()
local pg;
# Triangle Groups # --------------- # As demonstrated in Proposition 9.4 of anatph, for l > 2 (and hence n > 3 if the # group is supposed to be hyperbolic) there are no instantiable green places, and if # l = 2 then there are exactly two instantiable green places.
InstallGlobalFunction("TriangleGroup", function(l,m,n)
local pg;
pg := PregroupOfFreeProduct( CyclicGroup( IsPermGroup, l)
, CyclicGroup( IsPermGroup, m) );
# This is a bit icky, we can't tell which element of pg is the one of the # second cyclic group
return NewPregroupPresentation(pg, [ pg_word( pg, Repeat(n, [2, l + 1]))]); end);
# Example from Theorem 9.5, triangle-like: quotient of 2-3-m triangle group # our choice of pregroup is the free product of cyclic groups of order 2 and 3 #T see what happens if we present this group as #T <x,y,z | x^2, y^3, z^m, (zxY)^n > ? #T we push a parameter into the pregroup
InstallGlobalFunction(TriangleCommutatorQuotient, function(m,n)
local pg;
pg := PregroupOfFreeProduct( CyclicGroup(IsPermGroup, 2)
, CyclicGroup(IsPermGroup, 3) ); # Do this to have slightly nicer display. Maybe we need to give the user # a way to label generators
pg!.enams := "1xyY";
return NewPregroupPresentation(pg,
[ pg_word(pg, Repeat(m, [2,3])),
pg_word(pg, Repeat(n, [2,3,2,4]))
]); end);
InstallGlobalFunction(RandomTriangleQuotient, function(p,q,r,len)
local pg;
pg := PregroupOfFreeProduct( CyclicGroup(IsPermGroup, p)
, CyclicGroup(IsPermGroup, q) ); # Do this to have slightly nicer display. Maybe we need to give the user # a way to label generators
pg!.enams := "1xyY";
return NewPregroupPresentation(pg,
[ pg_word(pg, Repeat(r, [2,3])),
RandomPregroupWord(pg, len)
]); end);
InstallGlobalFunction(RandomPregroupWord, function(pg, len)
local i, lett, rel;
rel := [];
rel[1] := Random([2..Size(pg)]); for i in [2..len-1] do
rel[i] := Random(Difference( [2..Size(pg)]
, [__ID(PregroupInverse(pg[rel[i-1]]))]));
od;
rel[len] := Random(Difference([2..Size(pg)]
, [ __ID(PregroupInverse(pg[rel[len - 1]]))
, __ID(PregroupInverse(pg[rel[1]]))
] ));
return pg_word(pg, rel); end);
# Given a pregroup make a random presentation with nrel relators # of length lrel
InstallGlobalFunction(RandomPregroupPresentation, function(pg, nrel, lrel)
local rels;
BindGlobal("CreateRandomExample", function(path, pg, nrel, lrel)
local pgp;
if not IsDirectoryPath(path) then
Error("path does not exist or is not a directory");
return; fi;
pgp := RandomPregroupPresentation(pg, nrel, lrel);
# Write the pregroup presentation to file
PregroupPresentationToFile(Concatenation(path, "/presentation-gap"), pgp);
PregroupPresentationToSimpleFile(Concatenation(path, "/presentation-simple"), pgp);
if WALRUS_kbmag_available then # Also create a KBMAG input file, if RSymTest succeeds on this presentation, # we can try computing an automatic structure and run gpgeowa on the result # to check whether the group is hyperbolic.
WriteRWS(KBMAGRewritingSystem(PregroupPresentationToFpGroup(pgp)),
Concatenation(path, "/presentation-kbmag")); fi; end);
# Create a series of examples
BindGlobal("CreateRandomSeries", function(pg, nrels, lrels, nexs, prf, basepath)
local path, path2, i, pgp, lrel, nrel;
if not IsDirectoryPath(basepath) then
Error("path does not exist or is not a directory");
return; fi;
path := basepath;
for lrel in lrels do
CreateDir(Concatenation(path, "/", String(lrel))); for nrel in nrels do
CreateDir(Concatenation(path, "/", String(lrel), "/", String(nrel))); for i in [1..nexs] do
path2 := Concatenation(path, "/", String(lrel), "/", String(nrel), "/", String(i));
prf("creating example nr ", i, " in ", path2, " \c");
BindGlobal("CreateRandomSeriesOverSmallPregroups", function(basepath)
local i, n, sizes, path;
if not IsDirectoryPath(basepath) then
Error("path does not exist or is not a directory");
return; fi;
# at the moment we only have pregroups # of size 6
sizes := [6]; for n in sizes do
CreateDir(Concatenation(basepath, "/", String(n))); for i in [1..NrSmallPregroups(n)] do
path := Concatenation(basepath, "/", String(n), "/", String(i));
CreateDir(path);
CreateRandomSeries( SmallPregroup(n, i)
, [1,2,4,8,10]
, [5,10,15,20,25,30,35,40,45,50]
, 20
, Print
, path);
od;
od; end);
BindGlobal("CreateRandomSeriesOverFreeGroup", function(basepath)
local i, n, sizes, path;
if not IsDirectoryPath(basepath) then
Error("path does not exist or is not a directory");
return; fi;
# ranks of free group
sizes := [2,4,8,16,32,64]; for n in sizes do
path := Concatenation(basepath, "/", String(n));
CreateDir(path);
CreateRandomSeries( PregroupOfFreeGroup(n)
, [1,2,4,8,10]
, [5,10,15,20,25,30,35,40,45,50]
, 20
, Print
, path);
od; end);
BindGlobal("BenchmarkRandom_OverSmallPregroup", function(eps, nrel, lrel, nexs, prf, path)
local pg, res;
res := []; # FIXME: We only have pregroups of size 6 at the moment for pg in ANATPH_small_pregroups[6] do
pg := PregroupByTable([1,'a','b','c','d', 'e'], pg);
Add(res, BenchmarkRandomPresentation(pg, eps, nrel, lrel, nexs, prf, path));
od;
return res; end);
BindGlobal("_VARIANCE", function(v)
local q, avg; if Length(v) = 1then
q := 1; else
q := Length(v) - 1; fi;
avg := Average(v);
return Sum(List(v, x -> (x - avg)^2)) / (q); end);
BindGlobal("AnalyseBenchmarkResult", function(res)
local r, succed, failed;
else
Print("profiling package is not available, disabling ProfileSinglePresentation\n"); fi;
# Benchmark the RSym tester with a presentation given <A>density</A> # and <A>length</A>
BenchmarkGromovDensity := function(eps, ngens, length, density)
local pg, nrels;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.