How to save a pc-group in MAGMA?

185 Views Asked by At

I have a group $M$, which is a large matrix group. Using the command $\texttt{LMGSolubleRadical(M)}$ I obtained $R\cong M$, where $R$ is of type $\texttt{Grppc}$, and an isomorphism $M\to R$ called $\texttt{map}$. The purpose of this was to conduct calculations which would take too long in $M$. At this stage, I have performed some calculations and have obtained the elements of $R$ that I need -- they are in a set called $R_I$. There are approximately two million of them, and to do what I need to do next, I need to run my calculations in parallel using $\texttt{screen}$ with about 50,000 elements per screen. To carry these out, it is required that they be pulled back into $M$ first. However, if I do this, I cannot save twenty million elements of $M$ because these matrices are so large that I lack the storage space. So, my solution was to store several sets $I_1 ,\ldots,I_{20}$, each containing 50,000 $\texttt{Grppc}$ elements. Then, on each screen I could load $R$, $M$, $\texttt{map}$, and $I_j$ (for some $j$), then do $\texttt{Ij @@ map}$ and thus obtain the matrix set without ever having to save it.

The issue comes when saving the pc-group. When I save the isomorphism $\texttt{map}$, it does not actually save the function. Also, when saving $R$ and loading it again, it does not recognise elements of $R$ as being elements of $R$ in a new screen, even if I coerce them into $R$ before saving them.

I'm at a total loss here -- I've tried several combinations of coercing elements and saving them and so on but nothing seems to work. If I had the function $\texttt{map}$ it would not be a problem. Does anyone know why \textsc{Magma} doesn't seem to save these groups and maps like others? If anyone can think of another way around my issue, feel free to make suggestions.

Thanks in advance.

1

There are 1 best solutions below

14
On BEST ANSWER

I found the following worked for saving the images of $\mathbb{map}$.

  > M, R, map := LMGSolubleRadical(G); 
  > L := [ R | M.i @ map : i in [1..Ngens(M)] ];    
  > PrintFileMagma("mapims",L);

Then on re-starting:

  > L := eval Read("mapims");
  > R := Universe(L);
  > L[3] in R;
  true    

To reconstruct the inverse of map, write

  >  mats := [R.i @@ map : i in [1..NPCgens(R)]];

and save mats. Then after restarting, you can construct the inverse of map by

  > imap := hom< R -> Generic(G) | mats >;

($\texttt{Generic(G)}$ is the general linear group in which lies, and I put that rather than $G$ so that Magma does not waste time trying to check that the elements of mats lie in $G$.)