SupposeNot / RAMP

Research Assistant for Maps and Polytopes
4 stars 0 forks source link

Method for accessing generators when working with quotients #85

Closed SupposeNot closed 2 years ago

SupposeNot commented 2 years ago

We have a maniplex M with automorphism group $\Gamma$ and normal subgroup N. \Gamma has generators g_0,g1,\ldots,g{d-1}. Would be nice if we had mechanisms for accessing the images of the generators in \Gamma/N. In particular, we don't want to let GAP do its usual business of finding generators it likes for the group, but instead gives us Ng_0, Ng1, \ldots,Ng{d-1}, or equivalent.

CunningGabe commented 2 years ago

Now that I look at it with a clearer head, this should already happen if you use ReflexibleQuotientManiplex: gap> M := CubicTiling(2); CubicTiling(2) gap> N := ReflexibleQuotientManiplex(M, "h2^4"); reflexible 3-maniplex with 128 flags gap> g := AutomorphismGroup(N); <fp group of size 128 on the generators [ r0, r1, r2 ]>

The thing that works nicely for fpGroups is FactorGroupFpGroupByRels. That appears to keep the same generators even when they are rendered trivial: gap> f := FreeGroup(2); <free group on the generators [ f1, f2 ]> gap> g := FactorGroupFpGroupByRels(f, [f.1, f.2]); <fp group on the generators [ f1, f2 ]>

Still, I'm going to add something like QuotientSggi so that you can do something like: gap> g := UniversalSggi(3);; gap> h := QuotientSggi(g, "(r0 r1 r2 r1)^4");;

(Otherwise, to use FactorGroupFpGroupByRels directly, you have to pass in a list of relators, which have to be given in the free group of g, and it's a pain.)

SupposeNot commented 2 years ago

I need to do it with subgroups, not relations 😜.

CunningGabe commented 2 years ago

ohhhhh nuts. Well, maybe you can give me a concrete example of the type of thing you are trying to do? i.e., pretend QuotientSggi or QuotientManiplex works in the way you would like it to and give me an example session.

SupposeNot commented 2 years ago

I'm imagining something like this:

c:=Cube(3);
a:=AutomorphismGroup(c);
n:=NormalSubgroups(a);
l:=List(n, g->Maniplex(c,g));
List(l,IsPolytope);

Or other kinds of tests. I'm actually thinking about writing some code to check for whether a maniplex is internally or externally self dual, which is why I would need access to the images of the generators. I'm not quite sure what the session would look like for that yet.

Mixer2021 commented 2 years ago

Are you imagining this for regular maniplexes? or more generally?

SupposeNot commented 2 years ago

Well, ultimately it would be good to do it more generally. But I thought a good starting place would be doing it for the regular cases.

SupposeNot commented 2 years ago

I was also interested in implementing some stuff for unravelled polytopes, which was where needing the generators came into stuff. I was confused about which of the various things I was working on... sorry.

CunningGabe commented 2 years ago

Good news! The normal subgroups in NormalSubgroups still think of their elements in term of words of r0 etc. So this works:

g := AutomorphismGroup(Cube(3)); Ns := NormalSubgroups(g); l := List(Ns, N->FactorGroupFpGroupByRels(g,N)); List(l, IsStringC);

CunningGabe commented 2 years ago

Is this all set now? Or is there something else you would like?

SupposeNot commented 2 years ago

I think I'm good now... I've figured out how to proceed, I just need to take the time to write and test the code. Thanks!