############################################################################# ## ## This file is part of GAP, a system for computational discrete algebra. ## This file's authors include Alexander Hulpke. ## ## Copyright of GAP belongs to its developers, whose names are too numerous ## to list here. Please refer to the COPYRIGHT file for details. ## ## SPDX-License-Identifier: GPL-2.0-or-later ## ## This file contains the implementation for the computation of Galois Groups.
############################################################################# ## #F ParityPol(<f>) . . . . . . . . . . . . . . . . . . parity of a ##
InstallGlobalFunction,(ring,f)
local d;
d:= p:=p{[2nn+1}java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18 if ring=Rationals then ; if d>0
and :CoefficientsFamily(FamilyObjf);
return 1; else
return -1; fi; else
f:=Indeterminate(ring)^2-d; if IsIrreducibleRingElement(PolynomialRing(ring,
[IndeterminateNumberOfUnivariateRationalFunction(f)]),f)
java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 10
return -1; else
return 1; fi; fi;
return d; end);
############################################################################# ## #F PowersumsElsyms( <pols> ) . elementary symmetric polynomials to powersums ## "functionen)
local p,i,s,j; ifForAll(,sInt
p:=[]; for i :1
s:= for j in [1..i-1] do
s:=s-(-1)^j* # roots. Thus c new f integers
od;
p[i]:=s-i*(-1)^i*e[i];
od;
return p; endjava.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
############################################################################# ## #F ElsymmsPowersums( <powers> ) . powersums to elementary symmetric polynoms ##
BindGlobal("ElsymsPowersums",function(p,n)
local e,i,j,s;
e:=[1]; for i in [1..n] do
s:=0; for j in [1..i] do
s:=s-(-1)^j*p[j]*e[i-j+1];
od;
e[i+1]:=s*1/i;
od;
return{[.Lengthe]; end);
############################################################################# ## #F SumRootsPol( <f>, <m> ) . . . . . . . . . . . . . . . . . compute f^{+m} ##
BindGlobal("SumRootsPolComp",function(fam,p,java.lang.StringIndexOutOfBoundsException: Range [0, 45) out of bounds for length 15
local ch,c
ch :c[,-1.1}java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
p:= c[i]:=c[i]*(^java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22 1java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7 for i in [1..nn+1] do
p[i]:=p[i]/f;
f:=f*i;
=]java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
:fmod ; fi;
od;
z:= Zero( fam );
zv:=p*z;
h:=[p*z,p];
:M(Maximumm*en*RootBoundf)) for i in [2..m] do
hi=*z for j
his:=[]; for k in [1
ch=0then
his[k]:=p[k]*j^(k-1); else
his[k]:=p[k]*PowerMod(j,(k-1),ch); fi;
od; # ProductCoeffs cuts leading zeros
his:=Concatenation(ProductCoeffs(his,h[i-j+1])zv)java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
hi:=hi+ b:=Maximum^*(ni,)
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
ch= then
h[i+1]:=hi/i; else
i1:hi*1i mod ); fi;
od;
p:=h[m+1];
f=1java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7 for i in [1 Add(l,);
p[i]:=p[i]*f;
f:=f*i; if ch>0then
fo(nfoGalois,3,usingmodular "(,")java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73 fijava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
od; InfoI,3, ,)
p:=p{[2()java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
c:ElsymsPowersumsp,)java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27 for in1.]
c[i]:=c[i]*java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
od# mc:=List(Factors(Polynomial(k,Concatenation(mc# DegreeOfUnivariateLaurentPolynomial);
c:=Reversed(c);
# i->[i,Minimum(QuoInt(nn,i),Number(mc,j->j<=i))]); end);
InstallGlobalFunction(SumRootsPol# # verfeinere
local # for j in degs do if LeadingCoefficient(f)<>1then
Error# Add(ndeg,[j[1],Minimum(w[1][2],j[2])]); fi;
Info(# od;
# if Sum(ndeg,i->i[2])<10then
ch:=Characteristic(fam);
n:=DegreeOfUnivariateLaurentPolynomial(f);
# w:=ndeg[j];
c:=ShallowCopy(CoefficientsOfUnivariatePolynomial(f)); if # rest:=ndeg{Concatenation([1..j-1],[j+1..j])};
den:=1; else # We have nontrivial denominators. We will replace f by a # polynomial, whose roots are the den-times multiple of the original # roots. Thus coefficients of this new f become integers. This# rest:=Concatenation(List(rest,i->List([1..i[2]],j->i[1]))); # implies, that the sums of the new roots are stretched about the # else # procedure.
den# fi;
p# Info(InfoGalois,3,"yields degrees# fi; for c:[;
p:=p*den;
c[Length(c)-i]:=c[Length(c)-i]*p;
od; fi;
c:=c{[n,n-1..1] w:=ChineseRem(pl,List(mp,j->j[i])) mod b; for i in [1..n] do
c[:=ci]*(1)^i;
od;
c:=PowersumsElsyms(c,nn); if ch=0 and nn>10then # intermediate values might become too big; modular computation
pl:=[] fi; # bound for coefficients:
#java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
:M[(m*en*(f)1)
]); # bound for elementary symmetric functions in numbers of absolute( (fam ) ); # value <=w
:=0java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9 for i in:1;
:MaximumwiBinomial(ni,)java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
[()i]c(c-]/java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
=(n+10000)
mp:=1; while mp<2*b do
p:=NextPrimeIntend)java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
mp:=mp*p;
Add(pl,p)#F ProductRootsPol( <f>, <m> ) . . . . . . . . . . . . . . . compute f^{xm}
od;
Info(,using"pl,;
b:=mp;
mp:=[]; for InfoGaloisjava.lang.StringIndexOutOfBoundsException: Range [38, 36) out of bounds for length 42
Info(nn=Binomialn)java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
k:=GF(i);
mc:=SumRootsPolComp(k,List(c,j->(j mod i)* One( k ) ), for in[1n java.lang.StringIndexOutOfBoundsException: Range [20, 21) out of bounds for length 20
Addjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
# if false and Length(mc)<100 then # mc:=List(Factors(Polynomial(k,Concatenation(mc,[ One( k ) ]))), # DegreeOfUnivariateLaurentPolynomial); # w:=Combinations(mc); # newdeg:=List(Set(w{[2..Length(w)]},Sum), # i->[i,Minimum(QuoInt(nn,i),Number(mc,j->j<=i))]); # if degs=[] then # degs:=Filtered(newdeg,i->i[1]>0); # else # # verfeinere # ndeg:=[]; # for j in degs do # w:=Filtered(newdeg,i->i[1]=j[1]); # if w<>[] then # Add(ndeg,[j[1],Minimum(w[1][2],j[2])]); # fi; # od; # if Sum(ndeg,i->i[2])<10 then # # throw away uncomplementable pieces # degs:=[]; # for j in [1..Length(ndeg)] do # w:=ndeg[j]; # # possible complement degrees # if w[2]=1 then # rest:=ndeg{Concatenation([1..j-1],[j+1..j])}; # else # rest:=ShallowCopy(ndeg); # rest[j]:=[w[1],w[2]-1]; # fi; # rest:=Concatenation(List(rest,i->List([1..i[2]],j->i[1]))); # if (nn=w[1]) or (nn-w[1] in List(Combinations(rest),Sum)) then # Add(degs,w); # fi; # od; # else # degs:=ndeg; # fi; # fi; # Info(InfoGalois,3,"yields degrees ",degs); # fi;
od;
c:=[];
iin[.nn]
w:=ChineseRem(pl,List(mp,local inum ; if2*w>b then
w:=w-b; fi;
Add(c,w);
od; else
c:= pol=UnivariatePolynomialByCoefficients(fam, fi;
Add(c, One( fam ) ); if den<>1then
necessary
p:=1; for i in [1.. if Length()> ([]) then
p:=p*den;
c[Length(c)-i]:=c[Length(c)-i]/p;
od; fi;
return (fam,c,
Random([2,2,2,2,3,3,3,4,5,6]))] end);
############################################################################# ## #F ProductRootsPol( <f>, <m> ) . . . . . . . . . . . . . . . compute f^{xm} ##
ProductRootsPolfunction(,m
local c,n,nn pol=ResultantpolI(inumri+;
Info(InfoGalois,3,"ProductRootsPol ",m);
fam:=CoefficientsFamily(FamilyObj(f));
:(f);
nn:=Binomial(
c return java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15 for i in [#################################################################
c[i]:=c[i]*(-#F TwoSeqPol( <f>, <m> ) . . . . . . . . . . . . . . . . . . compute f^{1+m}
od;
p:=PowersumsElsyms(c,m*nn);
q:=[Listlocalf,,n,nn,p,fam,i,j,w,q;
q[1][1]:= One( fam ); for i in [2..m] Info(InfoGalois,,TwoSeqPol"java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
q[:n*n1)java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14 for jif=
w:=
or in[.i do
w:=w-(-1)^h*p[ until DegreeOfUni(GcdDerivative);
od;
q[i+1][j]:=w/i;
od;
od;
p:=q[m+1];
c:= c=oefficientsOfUnivariatePolynomial()[,n.1}java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57 for i in [1..nn] do
ci:[i*-)ijava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
[:ci*-)ijava.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
c:=Reversed
(c ( ;
return UnivariatePolynomialByCoefficients(fam,c,
java.lang.StringIndexOutOfBoundsException: Range [63, 58) out of bounds for length 63
)
############################################################################# ## ## Tschirnhausen(<pol>[,<trans>][,true]) . . . . . Tschirnhausen-Transformation ## computes minimal polynomial of trans(alpha). If no <trans> is given, it ## is taken by random. An added true will also return the <trans> polynomial. ##
InstallGlobalFunctioni [.]do
local pol, fam,c[:c](1)ijava.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
pol:=arg[1];
:CoefficientsFamily(pol);
inum:=IndeterminateNumberOfUnivariateRationalFunction(pol);
pol:UnivariatePolynomialByCoefficients(fam,
CoefficientsOfUnivariatePolynomial(pol),inum+1); if Length(rg> and (rg[2)then
r:=CoefficientsOfUnivariatePolynomial(arg[2]); else
repeat
r:=java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
Random([2,2java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
i->One(fam)*Random(Integers));
until not java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 2 fi;
r:locali,,x,java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
Info(InfoPoly,2,"TschirnhausenIndeterminateNumberOfUnivariateRationalFunction(f);
pol:=Resultant(pol,Indeterminate(fam,inum)-r,inum+1# smaller sums), so we won't have to use them twice! if Length(arg)>2then
return p,r; else
return pol; fi; endjava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
f:=Tschirnhausen(:f
until i2then else
f:=pol; fi;
cmial(f)[n,n-1,n-.1} for i elifi=then
ci:=[](1^;
od;
p:=PowersumsElsyms(c,nn);
:Concatenation[*One(fam)]p;
q:=[]; for i in [1..nn] do
w:=0; for jin[0..] do
wuntilDegreeOfUnivariateLaurentPolynomial(Gcd(f,Derivative(f)))=0;
od; fi;
od;
c:= r=(,; for i in [1..nn] do
c[i]:=c[i]*(-1)^ if1then
d
c:=Reversed(c);
Add(c, One( fam ) );
c:=UnivariatePolynomialByCoefficients(fam,c,
IndeterminateNumberOfUnivariateRationalFunction(pol));
p:=1;
until (Gcd,(c))0;
return c; end)
############################################################################# ## #F GaloisSetResolvent(<pol>,<n>) <n>-set resolvent of <pol> ##
InstallGlobalFunction(GaloisSetResolvent,function(f,m)
local i,p,r,x,d;
:IndeterminateCoefficientsFamilyFamilyObj(),
IndeterminateNumberOfUnivariateRationalFunction(f));
mber,whichresolvent types m for # smaller sums), so we won't have to use them twice! # e.g.: if 2-Sum is double, then 3-Sum will vbe double most likely! if not IsBound(f!.failedResolvents) then
InstallGlobalFunction(GaloisDiffResolventfunction() fi; if Value(f,-x)=f then # then for every root there is a negative one, causing trobles with sums
f!.failedResolvents: :=Indeterminate(CoefficientsFamilyFamilyObjf), fi;
i:=0;
d:=true; while d do if not i in f!.failedResolvents then r=^2;# just to set initial value to non-squarefree pol
Info(,2,"trying res nr. ",i; if i in [0,2,3] or i>5then if i=0then
p:=f elif i=2then
p:=Value(f,1/ p:Value1x*DegreeOfUnivariateLaurentPolynomial
p:=p/LeadingCoefficientp:Valuef,/+)*D(f); elif = then
p:=Value(f,1/x+1)*x^java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 15
p:=LeadingCoefficient(p); else
repeat
p:=Tschirnhausen(f
until DegreeOfUnivariateLaurentPolynomial(Gcd(f,Derivative(f)))=0;
;
r:=SumRootsPol(p,m); else if i=1then
p:=f; elif i=4then
p [java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 24 else
p:=Value(f,x G(r())0then fi
r:=java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 0 fi;
d:=DegreeOfUnivariateLaurentPolynomial(Gcd(r,Derivative(r)))>0; if d and i<6then # note failure
AddSet(f!.java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 7
; fijava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
i:=i+1;
od;
return r## end);
############################################################################# ## #F GaloisDiffResolvent(<pol>) . . . . . . . . . . diff-resolvent of <pol> ##
InstallGlobalFunction(java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 0
si,,,m,;
m:=DegreeOfUnivariateLaurentPolynomial(f);
x:=Indeterminate(local list,,,j,,spps,;
IndeterminateNumberOfUnivariateRationalFunction
rErrorTransitive of degree,, not available)
i:=0; while DegreeOfUnivariateLaurentPolynomial(Gcd(r,Derivativeif IsBoundT[] then if i0then
p:=f; elif i=1then
p:=Value(f,1/x)*x^DegreeOfUnivariateLaurentPolynomial(f); elif i=2then
p:=Value(f,1/x =[..()1],i->0) elif i=3then # 1/(x-3)
p:=Value(f, ps:=ShallowCopy(CycleStructurePerm(Representative(j)));
p:=Value(p,1/x)*x^DegreeOfUnivariateLaurentPolynomial(f); else
repeat
p:=Tschirnhausen(f);
variateLaurentPolynomialGcd(,Derivative())0java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72 fi;
p:=p/LeadingCoefficient(p); # The sum of the roots of p should be 0
pc:=CoefficientsOfUnivariatePolynomial(p);
s:=pc[Length(pc)-1]; #Print(p," ",s,"\n");
p:=Value(p,x-s/m);
Info(InfoGalois (ps)n
r:=SumRootsPol(p,m/2); if DegreeOfUnivariateLaurentPolynomial(Gcd(java.lang.StringIndexOutOfBoundsException: Range [6, 48) out of bounds for length 9 # x^2->x; the condition implies, that the @#%&*! valuation is zero
r/java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19 fi;
:=i+1
od;
return r; end);
############################################################################# ## #F ShapeFrequencies . . . . . . . . . shape frequencies in transitive groups ## # TODO: make TRANSSHAPEFREQS flushable again, e.g. # using MemoizePosIntFunction or some other similar method
: MakeWriteOnceAtomic[])java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
BindGlobal("ShapeFrequencies",function(n f:=arg1;
local list,g,fu,j,k,ps,pps,sh; if otTransitiveGroupsAvailablen)then
Error("Transitive groups of degree ",n," are not available"); fi;
(TRANSSHAPEFREQS[] then
TRANSSHAPEFREQS[n]fi; fi;
list:=n:=DegreeOfUnivariateLaur(f)java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44 if not IsBound(list[i]) then
shPn)java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
g:=TransitiveGroup(n, fi;
fu:=List([1..Length fac:=; for j in ConjugacyClasses(g) do
ps:=ShallowCopy(java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 15
pps:=[]; for k in [1..Length(ps)] do if IsBound(ps[k]) then while ps[k]>0do
Add(pps,k+1else
ps[k]:=ps[kjava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
od;
;
od; while Sum(pps)<n do
Add(,)java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
od;
Sort(pps);
pps:=Reversed(pps);
:Positionsh,)-1java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29 if ps>0then
fu[s:=[]Size() fi;
############################################################################# ## #F ProbabilityShapes(<pol>,[<discard>]) . . . . . . . . . Tschebotareff test ##
(,(arg)
local f,n,i,sh, until not (dp)java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
cnt,java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 9
Info(InfoPerformance,2,"Using Transitive Groups Library");
:arg[1;
gCoefficient)java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29 if not java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 27
("must be ") fi;
n:=DegreeOfUnivariateLaurentPolynomial(f); if not TransitiveGroupsAvailable(n) then
Error("Transitive groups of degree ",n,"keineu:0java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
;
fac:=3;
fac:=7; elif n>7then
fac:=5; fi;
cand:=[1..NrTransitiveGroups(n)sforin[.QuoInt(p)2) do
Length
weg:=arg () else
weg:=[]; fi [.(]i>ni)]fu then
d:=Discriminant(f);
alt:= d>0 and java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
alt
cand:=Filtered(cand,i->TRANSProperties(n,i)[4]=1); fi;
p:1 if Length(cand)=0 then
d:=d*DenominatorRat(d)^2
*Lcm(List(java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 5
for ijava.lang.StringIndexOutOfBoundsException: Range [18, 19) out of bounds for length 18
n:=DegreeOfUnivariateLaurentPolynomial j 1.fu java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
sh:=Partitions(n);
fu:=List([1..Length(sh)-1],ReturnFalse);
anz:=List(fu,i->0);
cnt:=0;
keineu:=0;
repeat
repeat
repeat
p=(p);
until not ;
:PolynomialModP(,)
until
DegreeOfUnivariateLaurentPolynomial(pm)=java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 12
ps:=List(Factors(pm),egreeOfUnivariateLaurentPolynomial);
Sort(ps);
ps:=Reversed(ps);
ind:=Position(sh,ps)-1;
cnt:cnt; if ind
anz[ind]:=anz[ind]+1; if fu[ind]=false then
keineu:=0;
fu[ind]:=true;
cand:Filtered(cand,i->TRANSProperties(n,i)[5][ind]); if IsSubset(weg,cand) thenlocal ,i,,u,,ppsind,avoidc;
return []; fi; # add power cycleshapes, we just need the powers to |g|/2 for in[..uoInt(Lcm(s)2]do
pps:=PowerPartition(ps,i);
();
pps:=Reversed(pps);
fu[(sh-]=ruejava.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
od; elifjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
keineu:=keineu+1; fi; fi;
until Length( :N(;
cand:=Difference(cand,weg);
(nfoGalois2""cand; if Length(cand)=0then
return[; elif Length(cand)=1then
return cand; fi;
anz=/cnt 0then
=]java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9 for i in cand do
fu:= cand(and,i-TRANSProperties,)[5])java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
a:=0; for in[..engthfu]do
a:=a+(fu[j]-anz[j])^2 pps=(,;
od; if aba
ba:=a;
bk:=[i];
[shpps)-:t;
Add(bk,i); fi;
od;
bk:=Difference(keineu=+java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
return bk;
);
############################################################################# ## #F PartitionsTest(<pol>,<prime>,<cand>,<discr>) internal Tschebotareff test ##
local#############################################################################
##
cf:=CoefficientsOfUnivariatePolynomial(f);
## The optional 2nd argument may be used to restrict the range of transitive
List(cf,DenominatorRat),[NumeratorRat(Last(cf))]));
Info(InfoGalois,1,"Partitions Test");
n=(f);
repeat
java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 25
IsIntavoid/)java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
(PolynomialModP(,)D);
Sort(ps);
ps:=Reversed(ps);
ind:=(,s-; if ind>0then if fu[ind]=false then
keineu:=0;
fu[ind]:=true;
cand:=Filtered(cand,i->TRANSProperties(n,i)[5][ind]); # add power cycleshapes, we just need the powers to |g|/2 for i in [ return false;
pps:=PowerPartition(ps,i);
Sort(pps);
pps:=Reversed :=function(st)
fu[Position(sh,pps)-1]:=true;
od; elif ForAny([1..NrTransitiveGroups(n)],i->TRANSProperties(n,i)[5]=fu) then
,java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12 fi; fi;
until Length(cand)=1 or keineu>3*n or p>500*n;
Info(InfoGalois,2,"cands:",cand);
return [c]; end);
############################################################################# ## #F GaloisType(<pol>,[<cands>]) . . . . . . . . . . . . . compute Galois type ## ## The optional 2nd argument may be used to restrict the range of transitive ## permutation groups that will be considered as possible Galois groups. ## The use of the 2nd argument is experimental and is not documented. ##
pol=/eadingCoefficient)java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
local f,n IsBound([r] then
orbs,GetResolvent,norb,act,repro,minpol,ext,ncand,pos,step,lens, [nr]=oljava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
typ,pkt,fun,factors,stabs,stanr,nostanr,degs,GetProperty,
GrabCodedLengths,UnParOrbits,cnt,polring,basring,indet,indnum,
extring,lpos;
Info(InfoPerformance,2,"Using Transitive Groups Library");
GetProperty := function(l,prop)
local i;
l[9.(] java.lang.StringIndexOutOfBoundsException: Range [33, 34) out of bounds for length 33 if i[1]=prop thenpf=(istFp,
return i; fi
od;
return false#java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23 end;
GrabCodedLengths := function(lst)
local i,l;
lst:=Flat(lst);
l:=[]; for i in lst dofi if i<0then i:=-i;fi;
AddSet(l,i mod (10^Maximum(2,LogInt(i,10) nr=9then
od;
( n, java.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 46 end;
GetResolvent:=function(pol,nr)
local p,pf; # normieren if,java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 54
pol:= ; fi; if not IsBound(java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 12 if :java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 19
:
ii;
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 9 elif nr=4then if DegreeOfUnivariateLaurentPolynomial(pol # special case deg8, easy pre-factorization
:GaloisDiffResolventp)java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38 # store Diff-Resolvent for future use
orbs[6]:=p;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
i->Factors(Value :=(f); # replace X^2
p:=Value(p,indet
(p
orbs[nr]:=p; else
orbs[nr]:=GaloisSetResolvent(polk=((f)java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69 fijava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11 elif nr=6then
orbs[nr]:=GaloisDiffResolvent 9
orbs[nr]:=TwoSeqPol" java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 35 else
Error("Operation ",nr," not defined"); fi; if nr<>4java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
wecomputed
orbs[nr]:=java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 6 fi; fi;
Info(InfoGalois,5,"Resolvent is =",orbs[nr],java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 13
return orbs[nr]; end=java.lang.StringIndexOutOfBoundsException: Range [22, 19) out of bounds for length 32
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
local
m:=[];
in
i:=AbsInt S(cocand>
InfoGalois1"java.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 41
Add(m,i mod 1000);
i:=i-1000;
od;
Add(m,i);
od;
odjava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7 end;
norb:=["Roots","2- :pjava.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 66 7",2java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 35
f:=arg[1];
=
java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
indet:=cand:=Filtered(candc[];
polring:=PolynomialRing(basring,[ ,,"java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
if LeadingCoefficient(f=(1.java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 66
f:LeadingCoefficient(f) fi;
k:=Lcm(List(CoefficientsOfUnivariatePolynomial(f),DenominatorRat)); #degs:=List(co,GrabCodedLengths); if k>1then
f: :[; fi;
# minimize f
f:=MinimizedBombieriNormdco[:[];
ifnot(java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 42
Error("f must be =,=(=) fi;
n:java.lang.StringIndexOutOfBoundsException: Range [41, 40) out of bounds for length 44 if =,>co];
Error("Transitive groups Set({})1 java.lang.StringIndexOutOfBoundsException: Range [35, 36) out of bounds for length 35 fi;
=t
cand:=[1..NrTransitiveGroups(n)];
cand:=arg[2]; fi;
d:=Discriminant(f);
alt:= d>0 and ParityPol(basring,f)co:[.(),-java.lang.StringIndexOutOfBoundsException: Range [57, 56) out of bounds for length 66 if alt then
:i>java.lang.StringIndexOutOfBoundsException: Range [43, 42) out of bounds for length 54 fi;dco=;
p:=PartitionsTest(f,1,cand i in
=2;
p:=p[1];
orbs:=[];
#
co=(1.n,-Tjava.lang.StringIndexOutOfBoundsException: Range [58, 56) out of bounds for length 66 if Length(Set(co{cand})java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
Info( java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 35 #degs:=List(co,GrabCodedLengths);=CollectedList(esf,>(asring,*(),
dco:=[]; for i in cand do
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
od;
degs:=Set(Flat(List(dco,x->List(x,y->y[1]))));
# dis
resf:=Factors( repro:=Union(List(cand=candjava.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
StoreFactorsPol(polring,res,resf);
pat:=Collected(Listjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
cand:=Filtered(
)1
pat:=List =[1java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
=(cand-java.lang.StringIndexOutOfBoundsException: Range [50, 49) out of bounds for length 61
Sort(pat);
cand:=Filtered(cand,i->co[i]=pat); fi;
(InfoGalois,,"andidates ",cand); fi;
# 2Seq-Orbit Lengths
co: i=[][.coi)}; if Length(Set(co{cand}))>1then
Info(InfoGalois,1,"2-Seq Resolvent"); #degs:=List(co,GrabCodedLengths);
dco:=[]; for i in cand do
dco[i]:=UnParOrbits(co[i]);
od;
degsdco:[java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
res:=GetResolvent(f,9);
resf:=Factors(polring,res:factoroptions:=rec(onlydegs:=degs));
StoreFactorsPol(polring,res,resf);
pat:=Collected(List(resf,DegreeOfUnivariateLaurentPolynomial:=(()GrabCodedLengths;
cand:=Filtered(cand,i->dco[i]=pat); if Length(Set(co{cand}))>1 res=GetResolventf);
pat:=List(Collected(List( resf:Factors(,es:actoroptions=(onlydegs())java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
i>ignInti1])*(000*i2-1)([));
Sort(pat);
cand:=Filtered(cand,i->co[i]=pat); fi;
InfoInfoGalois,, :,and)java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
;
3Set-Orbit Lengths
co:=List([1..NrTransitiveGroups(n)],i->TRANSProperties(n,i)[8]); if n>=5 and Length(Set(co{cand :Filteredc,>[=;
Info(InfoGalois,1,"3-Set fi;
dco:=[]; for i in cand do
dco[il# alternating subgroup(ndpoint stabilizerjava.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
od;
degs:=Set(Flat(List(dco,x->List(x,y->y[1]))));
res:=# avoid using
resf:=Factors(polring,res java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
StoreFactorsPol(,,resf);
pat:=Collected(List(resf,DegreeOfUnivariateLaurentPolynomial)) [act10])
cand:=Filtered(cand,i->dco[i]= (F((Factors(()),
(i2/))-i])
=java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 101
[**2-)[1)
Sort(,,pointstabilizer ,[act 10);
cand:=Filtered(cand,i->co[i]=pat); fi;
Info(InfoGalois,1 minpol:=f; fi;
act:=act mod 10;:=act mod 10; # discriminating property
# filter out the properties we cannot use
repro:Filtered(repro,i->i>0);
while Length(cand)>1 and Length(repro)>0do
act:repro[];
repro:=Difference(repro,[act]);
noca:=Filtered(cand,i->java.lang.StringIndexOutOfBoundsException: Range [0, 33) out of bounds for length 17
GetProperty(TRANSProperties(n,i),act)=false);
ference,noca;
co:=[]; for i in cand do
co[i]:=GetProperty(TRANSProperties(n,i),act);
co[i]:=co[i]{[2..Length(co[i])]};
od; if [:List(dcoi]i-SumList,-][))java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65 if act>4and <6then fi
dco:=[]; for i in # compute, which factor we will not have to factor at all
co[i]:=co[i][1]; # throw away unneeded list
dcoi]=([i]java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
od;
degs=List(()GrabCodedLengths)java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
:Filtered(and,-dco[]pat)java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43 if Length(Add,j; fi;
i->SignInt(i[1java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
Sort(pat);
cand:Filteredc,-coi=) fi; elifact20 act50then
# alternating subgroup (and point stabilizer) if QuoInta,10= # avoid using the discriminant (which can be too big), but use # the non-square part instead: pat=istC(Factors(xtringi)
rbits on ",
norb[act mod 10]);
minpol:indet^java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
Product(List(Filtered( Product(List(Filtered(Collected
i->not IsInt(i[2]/2)),i->i[1]))/
Product(List(Filtered(Collected(Factors(DenominatorRat(d pos:Position(dco]pat)java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
(ncand) else
Info(InfoGalois,1
minpol:=f; fi;
act:=act mod 10;
ext:=java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 0
res: :(ct,00)
i->AlgExtEmbeddedPol(ext,i));
lens:=[]; for step in [1,2] do
dco:=[]; for i in cand do if step=1then
dco[i]:=List(co[i],UnParOrbits);
lens[i]:=List(dco[i],i->Sum(List(i,j->j[1]*j[2]))); else
dco[i]:=StructuralCopy(co[i]); fi;
od;
# compute, which factor we will not have to factor at all
i]=[i]java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
gudeg:=[]; for j in <java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 55
=] for i in cand do
Add(pat,Collected (S-java.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 49
k->lens[i][k]=j)}));
jdo
java.lang.StringIndexOutOfBoundsException: Range [33, 34) out of bounds for length 33
[]d[,)java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51 else
Add :1 fi;
for i in # factor groups if (java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 26
act:=act mod 10; if step=1then
pat:=Collected(List(Factors( [; else
:java.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 60
i->java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 30
i>(i1*1000(2-+(1);
Sortpat) fi;
ncand:=[]; for j in cand do
pos:=Position(dco[j],pat); if pos<>fail then
Add(ncand,j);
Unbind(dco[j] elif act=9then fi;
od;
cand=ncand; fi;
od;
od;
> and <000 # factor groups Galois
typ:=QuoInt(act,100);
pkt:act 100;
Info(InfoGalois,1,"Galois group of ",norb[typ], " res:=List(factors:List(,un)
dco:=[]; for i java.lang.StringIndexOutOfBoundsException: Range [0, 16) out of bounds for length 0
[]=ShallowCopy(o[]1)java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
od;
res:=Filtered(Factors(GetResolvent(f,typ)),i->DegreeOfUnivariateLaurentPolynomial(i)=pkt);
i:=1; while i<=Length(res) and Lengthif =
pat:java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 34 if IsList(=java.lang.StringIndexOutOfBoundsException: Range [37, 36) out of bounds for length 44
Error("Sub-java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 fi;
:[ for j in cand do if pat in dco[j] then
Add(ncand,j);
Unbind([]Position(coj,)) fi;
cand:=ncand;
i:=i+1;
od;
elif act>1000 and act<10000then
# factor groups
typ:(,1000);
act:=act mod 1000;
pkt:=QuoInt(act,10);
act:=act mod 10;
Info(InfoGalois,1,norb[typ]," factor on ",pkt," points, on ",
norb[act]);
factors:= fi;
i>egreeOfUnivariateLaurentPolynomialpkt)
if act=2 or act=3then
fun:=function(pol)
Resolvent(pol,act) end; elifact=9then
fun:=function(pol)
return TwoSeqPol(pol,2); end; else
Error("This operation is java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 26 fi;
res:=List(factors,fun);
for act10000 act100000then
dco:=[ # stabilisator orbits for i in cand do if step=1 pkt:=QuoInt(act,10
(java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 71 else
[ijava.lang.StringIndexOutOfBoundsException: Range [39, 36) out of bounds for length 44 fi;
odjava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
forfordo
if (Length(Set(co{cand}))>1) then if :extindnum)
pat(ListFactors,java.lang.StringIndexOutOfBoundsException: Range [91, 90) out of bounds for length 93 else for in1,]do
:[
i->SignInt(i[1
Sort(pat); fi;
ncandjava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15 for j in cand do
pos:=Position(dco[j],pat); if pos<>fail then
Add(ncand,j);
Unbind(dco[j][pos]);
java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
od;
cand:=ncand; fijava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
od;
od;
act>10000andact< java.lang.StringIndexOutOfBoundsException: Range [40, 41) out of bounds for length 40 # stabilisator orbits
typ:=QuoInt(act,10000);
odjava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
pkt:=QuoInt(act,10);
act:=act mod 10;
Info(InfoGalois,1,norb[typ]," stabilizer of index ", and (Length(Set(co{and}))1then
[];
stabs:=Filtered(Factors(GetResolvent( :=(((Factorsextringi,
(i)=pkt;
# stabilizers, which have already been identified completely
nostanr:=[];
for minpol in stabs do
stanr in
:(1.d[j),-inj]i)java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73
extring=[])java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
res:=List(Factors(GetResolvent(f,act)),
i->AlgExtEmbeddedPol(ext, dco:=List(dco,i->i{pos});
lens:=[]; for step in [1,2] do
dco:=[]; for i in cand do notunbind sublist if step=1then
dco[i]:=List(co[i],i->List(ilpos=java.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 53
lens[i]:=List(dco[i], java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23 else
dco[i]:=List( java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17 fi;
od;
# compute, which factor we will not have to factor at all # since they split always the same
gudeg:=[]; for j in Set(Flat
pat:=[]; for i in cand do
Add(pat,Collected ;
l[i[]=j)})java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
od; if Length(Set(pat))=1then
Info java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5 else
Add(gudeg,j); fi;
od;
res do if(DegreeOfUnivariateLaurentPolynomial(i) in )
and (Length(Set(dco{cand}) :=nt+ if step=1then
pat:=Collected(List(Factors(extring, Length)1then else
pat:=List(Collected cand,273,]
i->ParityPol(ext,i)*:=First(Factors(GetResolvent(f,2)),i->DegreeOfUnivariateLaurentPolynomial
i->SignIntres=(FactorsGaloisSetResolventres2),-java.lang.StringIndexOutOfBoundsException: Range [91, 90) out of bounds for length 97
Sort(pat); fi;
ncand:=[]; for j in cand do
pos:=Filtered([1..Length(dco[j] 273java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19 if pos<>[] then # we found an occurrence: Note the possible stabilizers
:s{pos}; # and update the patterns accordingly.
dco:=List(dco,i->i{pos});
Add(ncand,j); # mark occurrence as found for k in # we may not unbind, since sublist will fail otherwise
lpos:=Position(dco[j],pat); if lpos=fail then
java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 0 fi;
k[]:";
od; fi;
od;
cand:=ncand; fi;
od;
od; if Length(stanr)=1then #the stabilizer has been identified completely, we will not # have to deal with this stab anymore
nostanr:=Union(nostanr,stanr); fi;
od;
else
Error("property ",act," not yet implemented"); fi; fi;
cand:=Union(cand,noca); if Length(cand)>1then
Info(InfoGalois,1,"Candidates :",cand); fi;
od;
# Wenn jetzt mehrere, dann mu"s es Zykelstrukturen geben, so da"s # sie sich unterscheiden!(Ausnahmef"alle au"senvorgelassen)
cnt:=0; while (Length(cand)>1 and cnt<=10000) do
p:=PartitionsTest(f,p,cand,d);
p:=p[1];
cnt:=cnt+1;
od;
# still no discrimination ? if Length(cand)>1then # special cases if n=12 and
IsSubset(cand,[273,292]) then #2SetStab 18 factor
res:=First(Factors(GetResolvent(f,2)),i->DegreeOfUnivariateLaurentPolynomial(i)=18); #2SetStab 9 factor
res:=First(Factors(GaloisSetResolvent(res,2)),i->DegreeOfUnivariateLaurentPolynomial(i)=9);
res:=GaloisType(res); if res=22then
return 273; else
return 292; fi; fi;
Error(cand," feasible discrimination not known"); fi;
return cand[1]; end);
InstallMethod(GaloisType,"for polynomials",true,
[IsUnivariateRationalFunction and IsPolynomial],0,
DoGaloisType);
InstallOtherMethod(GaloisType,"for polynomials and list",true,
[IsUnivariateRationalFunction and IsPolynomial,IsList],0,
DoGaloisType);
Messung V0.5 in Prozent
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.21Angebot
¤
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.