Bill Allombert on Sat, 03 Aug 2019 00:44:27 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: nfgaloisconj


On Thu, Aug 01, 2019 at 11:40:20AM +0900, macsyma wrote:
> > Bill Allombert on Wed, 31 Jul 2019 11:06:53 +0200
> > 2) if the order of the Galois group is not given and the group is not
> > the symmetric group, then nfsplitting already computes a large part of
> > nfisincl to check that the tower stops, so we could arrange for
> > nfsplitting to return also the embeddings.
> 
> That is good news.

I created a git branch 'bill-nfsplitting' that implement this.
This adds a flag to nfpslitting to also get the embedding:

? P=x^3-2;[Q,S]=nfsplitting(P,,1)
%4 = [x^6+108,[-1/36*x^4-1/2*x,-1/36*x^4+1/2*x,1/18*x^4]]
? liftpol(subst(P,x,S*Mod(1,Q)))
%5 = [0,0,0]

nfsplittingaut() can be modified as follow to use it:

nfsplittingaut(f,deg=0)=
{
  my([g,R]=if(deg,nfsplitting(f,deg,1),nfsplitting(f,,1)));
  my(d=poldegree(g),v=variable(f));
  my(P,N,M,G1,K,G2);
  forprime(p = 2, oo, P = polrootsmod(g, p)~;
    if(#P == d && Mod(poldisc(f), p), break));
  N=subst(R,v,P);
  M=Map(Mat([N[1]~,[1..poldegree(f)]~]));
  G1=[Vecsmall([mapget(M,s)|s<-t])|t<-N];
  K=matinverseimage(matconcat(vector(d,i,subst(R,v,i))~),[1..d]~);
  G2=[R*[K[s]|s<-Vec(t^(-1))]~|t<-G1];
  return([g,G1,G2]);
}

with this version,
nfsplittingaut(x^17-2); and nfsplittingaut(x^17-2,17*16); should have
very close running time.

Cheers,
Bill.