polycyclic presentation
I try to apply ideas from Sutherland's paper about volcanoes (Titles "Isogeny volcanoes" 2012) , in particular I want to obtain a polycyclic presentation of a class group ๐บ (of negative discriminant, viewed as a group of binary quadratic forms). I easily get a set ๐ of generators (of ๐บ) of prime norm and from those I want to implement the following in SageMath :
- Get a polycylic presentation of $G$ from $S$.
- Compute the discrete log of elements of ๐บ with respect to this polycyclic presentation.
Q/ Is there an efficient way to do this by using GAP pcgs inside SageMath ?
For now, here is what I do :
# gens is a set of generators of the Class group I am interested in.
G = FreeGroup(len(gens))
relations_orders = [G([i+1]*(g.order())) for i,g in enumerate(gens)]
relations =[]
for i,g in enumerate(gens):
nexts = gens[i+1:]
for j,a in enumerate(nexts):
try:
d = discrete_log(g,a,operation="+") #d*a - g =0
relations.append( G([j+1+i+1]*d+[-i-1]) )
except:
pass
rels = relations+relations_orders
H = G/rels
Now, I would like to use gap.interact() in order to call Pcgs(H) in GAP and then recover it back in Sage.
Please make your code self-contained by adding a definition of
gens
(any example will do).