Logging to /Users/s/tmp/pari-11.04 GPRC Done. GP/PARI CALCULATOR Version 2.14.0 (development 25892-64329ab65) i386 running darwin (x86-64/GMP-6.2.0 kernel) 64-bit version compiled: Oct 26 2020, Apple clang version 12.0.0 (clang-1200.0.32.21) threading engine: single (readline not compiled in, extended help enabled) Copyright (C) 2000-2020 The PARI Group PARI/GP is free software, covered by the GNU General Public License, and comes WITHOUT ANY WARRANTY WHATSOEVER. Type ? for help, \q to quit. Type ?17 for how to get moral (and possibly technical) support. parisizemax = 900001792, primelimit = 1000000 (16:13) gp > Logging to /Users/s/tmp/pari-11.04 GPRC Done. GP/PARI CALCULATOR Version 2.14.0 (development 25892-64329ab65) i386 running darwin (x86-64/GMP-6.2.0 kernel) 64-bit version compiled: Oct 26 2020, Apple clang version 12.0.0 (clang-1200.0.32.21) threading engine: single (readline not compiled in, extended help enabled) Copyright (C) 2000-2020 The PARI Group PARI/GP is free software, covered by the GNU General Public License, and comes WITHOUT ANY WARRANTY WHATSOEVER. Type ? for help, \q to quit. Type ?17 for how to get moral (and possibly technical) support. parisizemax = 900001792, primelimit = 1000000 (16:17) gp > (16:17) gp > ?lagrange lagrange: unknown identifier (16:17) gp > (16:17) gp > ???lagrange charpoly limitnum sumnumlagrange sumnumlagrangeinit (16:17) gp > (16:17) gp > ?polgalois polgalois(T): Galois group of the polynomial T (see manual for group coding). Return [n, s, k, name] where n is the group order, s the signature, k the index and name is the GAP4 name of the transitive group. (16:17) gp > Logging to /Users/s/tmp/pari-11.04 GPRC Done. GP/PARI CALCULATOR Version 2.14.0 (development 25892-64329ab65) i386 running darwin (x86-64/GMP-6.2.0 kernel) 64-bit version compiled: Oct 26 2020, Apple clang version 12.0.0 (clang-1200.0.32.21) threading engine: single (readline not compiled in, extended help enabled) Copyright (C) 2000-2020 The PARI Group PARI/GP is free software, covered by the GNU General Public License, and comes WITHOUT ANY WARRANTY WHATSOEVER. Type ? for help, \q to quit. Type ?17 for how to get moral (and possibly technical) support. parisizemax = 900001792, primelimit = 1000000 (16:18) gp > Logging to /Users/s/tmp/pari-11.04 GPRC Done. GP/PARI CALCULATOR Version 2.14.0 (development 25892-64329ab65) i386 running darwin (x86-64/GMP-6.2.0 kernel) 64-bit version compiled: Oct 26 2020, Apple clang version 12.0.0 (clang-1200.0.32.21) threading engine: single (readline not compiled in, extended help enabled) Copyright (C) 2000-2020 The PARI Group PARI/GP is free software, covered by the GNU General Public License, and comes WITHOUT ANY WARRANTY WHATSOEVER. Type ? for help, \q to quit. Type ?17 for how to get moral (and possibly technical) support. parisizemax = 900001792, primelimit = 1000000 (16:18) gp > (16:18) gp > ?polgalois polgalois(T): Galois group of the polynomial T (see manual for group coding). Return [n, s, k, name] where n is the group order, s the signature, k the index and name is the GAP4 name of the transitive group. (16:18) gp > (16:18) gp > ? Help topics: for a list of relevant subtopics, type ?n for n in 0: user-defined functions (aliases, installed and user functions) 1: PROGRAMMING under GP 2: Standard monadic or dyadic OPERATORS 3: CONVERSIONS and similar elementary functions 4: functions related to COMBINATORICS 5: NUMBER THEORETICAL functions 6: POLYNOMIALS and power series 7: Vectors, matrices, LINEAR ALGEBRA and sets 8: TRANSCENDENTAL functions 9: SUMS, products, integrals and similar functions 10: General NUMBER FIELDS 11: Associative and central simple ALGEBRAS 12: ELLIPTIC CURVES 13: L-FUNCTIONS 14: MODULAR FORMS 15: MODULAR SYMBOLS 16: GRAPHIC functions 17: The PARI community Also: ? functionname (short on-line help) ?\ (keyboard shortcuts) ?. (member functions) Extended help (if available): ?? (opens the full user's manual in a dvi previewer) ?? tutorial / refcard / libpari (tutorial/reference card/libpari manual) ?? refcard-ell (or -lfun/-mf/-nf: specialized reference card) ?? keyword (long help text about "keyword" from the user's manual) ??? keyword (a propos: list of related functions). (16:18) gp > (16:18) gp > ?6 O bezoutres deriv derivn diffop eval factorpadic fft fftinv intformal padicappr padicfields polchebyshev polclass polcoef polcoeff polcyclo polcyclofactors poldegree poldisc poldiscfactors poldiscreduced polgraeffe polhensellift polhermite polinterpolate poliscyclo poliscycloprod polisirreducible pollaguerre pollead pollegendre polmodular polrecip polresultant polresultantext polroots polrootsbound polrootsff polrootsmod polrootspadic polrootsreal polsturm polsubcyclo polsylvestermatrix polsym poltchebi polteichmuller polzagier serconvol serlaplace serreverse subst substpol substvec sumformal taylor thue thueinit (16:18) gp > (16:18) gp > ? Help topics: for a list of relevant subtopics, type ?n for n in 0: user-defined functions (aliases, installed and user functions) 1: PROGRAMMING under GP 2: Standard monadic or dyadic OPERATORS 3: CONVERSIONS and similar elementary functions 4: functions related to COMBINATORICS 5: NUMBER THEORETICAL functions 6: POLYNOMIALS and power series 7: Vectors, matrices, LINEAR ALGEBRA and sets 8: TRANSCENDENTAL functions 9: SUMS, products, integrals and similar functions 10: General NUMBER FIELDS 11: Associative and central simple ALGEBRAS 12: ELLIPTIC CURVES 13: L-FUNCTIONS 14: MODULAR FORMS 15: MODULAR SYMBOLS 16: GRAPHIC functions 17: The PARI community Also: ? functionname (short on-line help) ?\ (keyboard shortcuts) ?. (member functions) Extended help (if available): ?? (opens the full user's manual in a dvi previewer) ?? tutorial / refcard / libpari (tutorial/reference card/libpari manual) ?? refcard-ell (or -lfun/-mf/-nf: specialized reference card) ?? keyword (long help text about "keyword" from the user's manual) ??? keyword (a propos: list of related functions). (16:19) gp > (16:19) gp > ?5 addprimes bestappr bestapprPade bezout bigomega charconj chardiv chareval chargalois charker charmul charorder charpow chinese content contfrac contfracpnqn core coredisc dirdiv direuler dirmul dirpowerssum divisors divisorslenstra eulerphi factor factorback factorcantor factorff factorial factorint factormod factormodDDF factormodSQF ffcompomap ffembed ffextend fffrobenius ffgen ffinit ffinvmap fflog ffmap ffmaprel ffnbirred fforder ffprimroot gcd gcdext halfgcd hilbert isfundamental ispolygonal ispower ispowerful isprime isprimepower ispseudoprime ispseudoprimepower issquare issquarefree istotient kronecker lcm logint moebius nextprime numdiv omega precprime prime primecert primecertexport primecertisvalid primepi primes qfbclassno qfbcompraw qfbhclassno qfbnucomp qfbnupow qfbpowraw qfbprimeform qfbred qfbredsl2 qfbsolve quadclassunit quaddisc quadgen quadhilbert quadpoly quadray quadregulator quadunit ramanujantau /*-- (type RETURN to continue) --*/ randomprime removeprimes sigma sqrtint sqrtnint sumdedekind sumdigits znchar zncharconductor znchardecompose znchargauss zncharinduce zncharisodd znchartokronecker znchartoprimitive znconreychar znconreyconductor znconreyexp znconreylog zncoppersmith znlog znorder znprimroot znstar (16:20) gp > (16:20) gp > (16:20) gp > ? Help topics: for a list of relevant subtopics, type ?n for n in 0: user-defined functions (aliases, installed and user functions) 1: PROGRAMMING under GP 2: Standard monadic or dyadic OPERATORS 3: CONVERSIONS and similar elementary functions 4: functions related to COMBINATORICS 5: NUMBER THEORETICAL functions 6: POLYNOMIALS and power series 7: Vectors, matrices, LINEAR ALGEBRA and sets 8: TRANSCENDENTAL functions 9: SUMS, products, integrals and similar functions 10: General NUMBER FIELDS 11: Associative and central simple ALGEBRAS 12: ELLIPTIC CURVES 13: L-FUNCTIONS 14: MODULAR FORMS 15: MODULAR SYMBOLS 16: GRAPHIC functions 17: The PARI community Also: ? functionname (short on-line help) ?\ (keyboard shortcuts) ?. (member functions) Extended help (if available): ?? (opens the full user's manual in a dvi previewer) ?? tutorial / refcard / libpari (tutorial/reference card/libpari manual) ?? refcard-ell (or -lfun/-mf/-nf: specialized reference card) ?? keyword (long help text about "keyword" from the user's manual) ??? keyword (a propos: list of related functions). (16:20) gp > (16:20) gp > ?10 bnfcertify bnfdecodemodule bnfinit bnfisintnorm bnfisnorm bnfisprincipal bnfissunit bnfisunit bnflog bnflogdegree bnflogef bnfnarrow bnfsignunit bnfsunit bnfunits bnrL1 bnrchar bnrclassfield bnrclassno bnrclassnolist bnrconductor bnrconductorofchar bnrdisc bnrdisclist bnrgaloisapply bnrgaloismatrix bnrinit bnrisconductor bnrisgalois bnrisprincipal bnrmap bnrrootnumber bnrstark dirzetak factornf galoischardet galoischarpoly galoischartable galoisconjclasses galoisexport galoisfixedfield galoisgetgroup galoisgetname galoisgetpol galoisidentify galoisinit galoisisabelian galoisisnormal galoispermtopol galoissubcyclo galoissubfields galoissubgroups idealadd idealaddtoone idealappr idealchinese idealcoprime idealdiv idealdown idealfactor idealfactorback idealfrobenius idealhnf idealintersect idealinv idealismaximal idealispower ideallist ideallistarch ideallog idealmin idealmul idealnorm idealnumden idealpow idealprimedec idealprincipalunits idealramgroups idealred idealredmodpower idealstar idealtwoelt idealval matalgtobasis matbasistoalg modreverse newtonpoly nfalgtobasis nfbasis nfbasistoalg nfcertify nfcompositum nfdetint nfdisc nfdiscfactors nfeltadd /*-- (type RETURN to continue) --*/ nfeltdiv nfeltdiveuc nfeltdivmodpr nfeltdivrem nfeltembed nfeltmod nfeltmul nfeltmulmodpr nfeltnorm nfeltpow nfeltpowmodpr nfeltreduce nfeltreducemodpr nfeltsign nfelttrace nfeltval nffactor nffactorback nffactormod nfgaloisapply nfgaloisconj nfgrunwaldwang nfhilbert nfhnf nfhnfmod nfinit nfisideal nfisincl nfisisom nfislocalpower nfkermodpr nfmodpr nfmodprinit nfmodprlift nfnewprec nfpolsturm nfroots nfrootsof1 nfsnf nfsolvemodpr nfsplitting nfsubfields nfsubfieldscm nfsubfieldsmax polcompositum polgalois polred polredabs polredbest polredord poltschirnhaus rnfalgtobasis rnfbasis rnfbasistoalg rnfcharpoly rnfconductor rnfdedekind rnfdet rnfdisc rnfeltabstorel rnfeltdown rnfeltnorm rnfeltreltoabs rnfelttrace rnfeltup rnfequation rnfhnfbasis rnfidealabstorel rnfidealdown rnfidealfactor rnfidealhnf rnfidealmul rnfidealnormabs rnfidealnormrel rnfidealprimedec rnfidealreltoabs rnfidealtwoelt rnfidealup rnfinit rnfisabelian rnfisfree rnfislocalcyclo rnfisnorm rnfisnorminit rnfkummer rnflllgram rnfnormgroup rnfpolred rnfpolredabs rnfpolredbest rnfpseudobasis rnfsteinitz subgrouplist (16:21) gp > (16:22) gp > (16:22) gp > ?galoisinit galoisinit(pol,{den}): pol being a polynomial or a number field as output by nfinit defining a Galois extension of Q, compute the Galois group and all necessary information for computing fixed fields. den is optional and has the same meaning as in nfgaloisconj(,4)(see manual). (16:22) gp > (16:22) gp > ??galoisinit galoisinit(pol,{den}): Computes the Galois group and all necessary information for computing the fixed fields of the Galois extension K/Q where K is the number field defined by pol (monic irreducible polynomial in Z[X] or a number field as output by nfinit). The extension K/Q must be Galois with Galois group "weakly" super-solvable, see below; returns 0 otherwise. Hence this permits to quickly check whether a polynomial of order strictly less than 48 is Galois or not. The algorithm used is an improved version of the paper "An efficient algorithm for the computation of Galois automorphisms", Bill Allombert, Math. Comp, vol. 73, 245, 2001, pp. 359--375. A group G is said to be "weakly" super-solvable if there exists a normal series {1} = H_0 \triangleleft H_1 \triangleleft...\triangleleft H_{n-1} \triangleleft H_n such that each H_i is normal in G and for i < n, each quotient group H_{i+1}/H_i is cyclic, and either H_n = G (then G is super-solvable) or G/H_n is isomorphic to either A_4, S_4 or the group (3 x 3):4 (GAP4(36,9)) then [o_1,...,o_g] ends by [3,3,4]. /*-- (type RETURN to continue) --*/ In practice, almost all small groups are WKSS, the exceptions having order 48(2), 56(1), 60(1), 72(3), 75(1), 80(1), 96(10), 112(1), 120(3) and >= 144. This function is a prerequisite for most of the galoisxxx routines. For instance: P = x^6 + 108; G = galoisinit(P); L = galoissubgroups(G); vector(#L, i, galoisisabelian(L[i],1)) vector(#L, i, galoisidentify(L[i])) The output is an 8-component vector gal. gal[1] contains the polynomial pol (gal.pol). gal[2] is a three-components vector [p,e,q] where p is a prime number (gal.p) such that pol totally split modulo p , e is an integer and q = p^e (gal.mod) is the modulus of the roots in gal.roots. gal[3] is a vector L containing the p-adic roots of pol as integers implicitly modulo gal.mod. (gal.roots). gal[4] is the inverse of the Vandermonde matrix of the p-adic roots of pol, /*-- (type RETURN to continue) --*/ multiplied by gal[5]. gal[5] is a multiple of the least common denominator of the automorphisms expressed as polynomial in a root of pol. gal[6] is the Galois group G expressed as a vector of permutations of L (gal.group). gal[7] is a generating subset S = [s_1,...,s_g] of G expressed as a vector of permutations of L (gal.gen). gal[8] contains the relative orders [o_1,...,o_g] of the generators of S (gal.orders). Let H_n be as above, we have the following properties: * if G/H_n ~ A_4 then [o_1,...,o_g] ends by [2,2,3]. * if G/H_n ~ S_4 then [o_1,...,o_g] ends by [2,2,3,2]. * if G/H_n ~ (3 x 3):4 (GAP4(36,9)) then [o_1,...,o_g] ends by [3,3,4]. * for 1 <= i <= g the subgroup of G generated by [s_1,...,s_i] is normal, with the exception of i = g-2 in the A_4 case and of i = g-3 in the S_4 case. /*-- (type RETURN to continue) --*/ * the relative order o_i of s_i is its order in the quotient group G/, with the same exceptions. * for any x\in G there exists a unique family [e_1,...,e_g] such that (no exceptions): -- for 1 <= i <= g we have 0 <= e_i < o_i -- x = g_1^{e_1}g_2^{e_2}...g_n^{e_n} If present den must be a suitable value for gal[5]. The library syntax is GEN galoisinit(GEN pol, GEN den = NULL). (16:27) gp > (16:27) gp > galoisinit(x^4-2) %1 = 0 (16:27) gp > (16:27) gp > ?galoisinit galoisinit(pol,{den}): pol being a polynomial or a number field as output by nfinit defining a Galois extension of Q, compute the Galois group and all necessary information for computing fixed fields. den is optional and has the same meaning as in nfgaloisconj(,4)(see manual). (16:27) gp > (16:27) gp > factor(x^4-2) %2 = [x^4 - 2 1] (16:28) gp > (16:28) gp > galoisinit(x^4+2) %3 = 0 (16:28) gp > (16:28) gp > P=x^6+108; (16:28) gp > (16:28) gp > G=galoisinit(P) %5 = [x^6 + 108, [31, 16, 727423121747185263828481], [427813133461286551419858, 575025435438578810254688, 452007674594505165982416, 275415447152680097846065, 152397686308606453573793, 299609988285898712408623]~, [108, 108, 108, 108, 108, 108; 387194687732834131542643, 345333706424813417059694, 722317849336722979054625, 5105272410462284773856, 382089415322371846768787, 340228434014351132285838; 716739678429928662023330, 582255874947873576453133, 155850690116568289180499, 155850690116568289180499, 582255874947873576453133, 716739678429928662023330; 718215748321529451981325, 718215748321529451981325, 718215748321529451981325, 9207373425655811847156, 9207373425655811847156, 9207373425655811847156; 100293623462758123860584, 341917118643409497674435, 285212379641017642293462, 285212379641017642293462, 341917118643409497674435, 100293623462758123860584; 299609988285898712408623, 152397686308606453573793, 275415447152680097846065, 452007674594505165982416, 575025435438578810254688, 427813133461286551419858], 648, [Vecsmall([1, 2, 3, 4, 5, 6]), Vecsmall([2, 3, 1, 5, 6, 4]), Vecsmall([3, 1, 2, 6, 4, 5]), Vecsmall([4, 6, 5, 1, 3, 2]), Vecsmall([5, 4, 6, 2, 1, 3]), Vecsmall([6, 5, 4, 3, 2, 1])], [Vecsmall([2, 3, 1, 5, 6, 4]), Vecsmall([4, 6, 5, 1, 3, 2])], Vecsmall([3, 2])] (16:28) gp > (16:28) gp > galoisinit(x^6+108) %6 = [x^6 + 108, [31, 16, 727423121747185263828481], [427813133461286551419858, 575025435438578810254688, 452007674594505165982416, 275415447152680097846065, 152397686308606453573793, 299609988285898712408623]~, [108, 108, 108, 108, 108, 108; 387194687732834131542643, 345333706424813417059694, 722317849336722979054625, 5105272410462284773856, 382089415322371846768787, 340228434014351132285838; 716739678429928662023330, 582255874947873576453133, 155850690116568289180499, 155850690116568289180499, 582255874947873576453133, 716739678429928662023330; 718215748321529451981325, 718215748321529451981325, 718215748321529451981325, 9207373425655811847156, 9207373425655811847156, 9207373425655811847156; 100293623462758123860584, 341917118643409497674435, 285212379641017642293462, 285212379641017642293462, 341917118643409497674435, 100293623462758123860584; 299609988285898712408623, 152397686308606453573793, 275415447152680097846065, 452007674594505165982416, 575025435438578810254688, 427813133461286551419858], 648, [Vecsmall([1, 2, 3, 4, 5, 6]), Vecsmall([2, 3, 1, 5, 6, 4]), Vecsmall([3, 1, 2, 6, 4, 5]), Vecsmall([4, 6, 5, 1, 3, 2]), Vecsmall([5, 4, 6, 2, 1, 3]), Vecsmall([6, 5, 4, 3, 2, 1])], [Vecsmall([2, 3, 1, 5, 6, 4]), Vecsmall([4, 6, 5, 1, 3, 2])], Vecsmall([3, 2])] (16:28) gp > (16:28) gp > galoisinit(x^4+108) %7 = 0 (16:28) gp > (16:28) gp > galoisinit(x^4-x-1) %8 = 0 (16:28) gp > (16:28) gp > galoisinit(x^5-x-1) %9 = 0 (16:28) gp > (16:28) gp > galoisinit(x^6-x-1) %10 = 0 (16:28) gp > (16:28) gp > galoisinit(x^6+1) %11 = 0 (16:29) gp > (16:29) gp > galoisinit(x^6+2) %12 = 0 (16:29) gp > (16:29) gp > galoisinit(x^6+108) %13 = [x^6 + 108, [31, 16, 727423121747185263828481], [427813133461286551419858, 575025435438578810254688, 452007674594505165982416, 275415447152680097846065, 152397686308606453573793, 299609988285898712408623]~, [108, 108, 108, 108, 108, 108; 387194687732834131542643, 345333706424813417059694, 722317849336722979054625, 5105272410462284773856, 382089415322371846768787, 340228434014351132285838; 716739678429928662023330, 582255874947873576453133, 155850690116568289180499, 155850690116568289180499, 582255874947873576453133, 716739678429928662023330; 718215748321529451981325, 718215748321529451981325, 718215748321529451981325, 9207373425655811847156, 9207373425655811847156, 9207373425655811847156; 100293623462758123860584, 341917118643409497674435, 285212379641017642293462, 285212379641017642293462, 341917118643409497674435, 100293623462758123860584; 299609988285898712408623, 152397686308606453573793, 275415447152680097846065, 452007674594505165982416, 575025435438578810254688, 427813133461286551419858], 648, [Vecsmall([1, 2, 3, 4, 5, 6]), Vecsmall([2, 3, 1, 5, 6, 4]), Vecsmall([3, 1, 2, 6, 4, 5]), Vecsmall([4, 6, 5, 1, 3, 2]), Vecsmall([5, 4, 6, 2, 1, 3]), Vecsmall([6, 5, 4, 3, 2, 1])], [Vecsmall([2, 3, 1, 5, 6, 4]), Vecsmall([4, 6, 5, 1, 3, 2])], Vecsmall([3, 2])] (16:29) gp > (16:29) gp > polgalois(x^4-x-1) %14 = [24, -1, 1, "S4"] (16:30) gp > (16:30) gp > polroots(x^4-x-1) %15 = [-0.72449195900051561158837228218703656579 + 0.E-38*I, 1.2207440846057594753616853491088319144 + 0.E-38*I, -0.24812606280262193188665653346089767432 - 1.0339820609759677567168631658091463327*I, -0.24812606280262193188665653346089767432 + 1.0339820609759677567168631658091463327*I]~ (16:30) gp > (16:30) gp > \p realprecision = 38 significant digits (16:30) gp > (16:30) gp > \p3 realprecision = 19 significant digits (3 digits displayed) (16:30) gp > (16:30) gp > polroots(x^4-x-1) %16 = [-0.724 + 0.E-19*I, 1.22 + 0.E-19*I, -0.248 - 1.03*I, -0.248 + 1.03*I]~ (16:30) gp > (16:30) gp > R=polroots(x^4-x-1) %17 = [-0.724 + 0.E-19*I, 1.22 + 0.E-19*I, -0.248 - 1.03*I, -0.248 + 1.03*I]~ (16:30) gp > (16:30) gp > (y-R[1]*R[2]-R[3]*R[4])*(y-R[1]*R[3]-R[2]*R[4])*(y-R[1]*R[4]-R[2]*R[3]) %18 = y^3 + (5.42 E-20 + 0.E-18*I)*y^2 + (4.00 + 0.E-19*I)*y + (-1.00 + 3.39 E-21*I) (16:31) gp > (16:31) gp > \p10 (16:31) gp > (16:31) gp > (y-R[1]*R[2]-R[3]*R[4])*(y-R[1]*R[3]-R[2]*R[4])*(y-R[1]*R[4]-R[2]*R[3]) %19 = y^3 + (5.421010862 E-20 + 0.E-18*I)*y^2 + (4.000000000 + 0.E-19*I)*y + (-1.000000000 + 3.388131789 E-21*I) (16:31) gp > (16:31) gp > round(%) %20 = y^3 + 4*y - 1 (16:32) gp > (16:32) gp > polgalois(%) %21 = [6, -1, 1, "S3"] (16:32) gp > (16:33) gp > (16:33) gp > Y=nfinit(y^3+4*y-1) %22 = [y^3 + 4*y - 1, [1, 1], -283, 1, [[1, 0.2462661722, 3.060647028; 1, -0.1231330861 + 2.011339173*I, -1.030323514 - 0.4953247992*I], [1, 0.2462661722, 3.060647028; 1, 1.888206087, -1.525648313; 1, -2.134472260, -0.5349987146], [16, 4, 49; 16, 30, -24; 16, -34, -9], [3, 0, 1; 0, -8, 3; 1, 3, 11], [283, 35, 187; 0, 1, 0; 0, 0, 1], [97, -3, -8; -3, -32, 9; -8, 9, 24], [283, [94, 106, -32; -35, 93, 36; 1, -35, 96]], [283]], [0.2462661722, -0.1231330861 + 2.011339173*I], [1, y, y^2 + 3], [1, 0, -3; 0, 1, 0; 0, 0, 1], [1, 0, 0, 0, -3, 1, 0, 1, 3; 0, 1, 0, 1, 0, -1, 0, -1, 1; 0, 0, 1, 0, 1, 0, 1, 0, 2]] (16:33) gp > (16:33) gp > X=nfinit(x^4-x-1) %23 = [x^4 - x - 1, [2, 1], -283, 1, [[1, -1.380277569, 0.5248885987, -0.7244919590; 1, 0.8191725134, 1.490216120, 1.220744085; 1, -0.2194474721 - 0.9144736630*I, -1.007552359 - 0.5131157956*I, -0.2481260628 + 1.033982061*I], [1, -1.380277569, 0.5248885987, -0.7244919590; 1, 0.8191725134, 1.490216120, 1.220744085; 1, -1.133921135, -1.520668155, 0.7858559982; 1, 0.6950261908, -0.4944365638, -1.282108124], [16, -22, 8, -12; 16, 13, 24, 20; 16, -18, -24, 13; 16, 11, -8, -21], [4, -1, 0, 0; -1, 1, 0, 4; 0, 0, 4, 3; 0, 4, 3, 0], [283, 213, 124, 190; 0, 1, 0, 0; 0, 0, 1, 0; 0, 0, 0, 1], [73, 9, -12, 16; 9, 36, -48, 64; -12, -48, 64, 9; 16, 64, 9, -12], [283, [93, 1, 71, 159; 89, 4, 1, 70; 70, 89, 93, 1; 1, 70, 159, 93]], [283]], [-0.7244919590, 1.220744085, -0.2481260628 + 1.033982061*I], [1, x^3 - 1, x^2, x], [1, 0, 0, 1; 0, 0, 0, 1; 0, 0, 1, 0; 0, 1, 0, 0], [1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0; 0, 1, 0, 0, 1, -1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0; 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1; 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0]] (16:33) gp > (16:33) gp > ?nfinit nfinit(pol,{flag=0}): pol being a nonconstant irreducible polynomial, gives the vector: [pol,[r1,r2],discf,index,[M,MC,T2,T,different] (see manual),r1+r2 first roots, integral basis, matrix of power basis in terms of integral basis, multiplication table of basis]. flag is optional and can be set to 0: default; 1: do not compute different; 2: first use polred to find a simpler polynomial; 3: outputs a two-element vector [nf,Mod(a,P)], where nf is as in 2 and Mod(a,P) is a polmod equal to Mod(x,pol) and P=nf.pol. (16:34) gp > (16:35) gp > (16:35) gp > galoisinit(Y) %24 = 0 (16:35) gp > (16:35) gp > polgalois(Y) *** at top-level: polgalois(Y) *** ^------------ *** polgalois: incorrect type in galois (t_VEC). *** Break loop: type 'break' to go back to GP prompt break> break> break (16:35) gp > (16:36) gp > (16:36) gp > galoisinit(x^2+1) %25 = [x^2 + 1, [13, 2, 169], [99, 70], [85, 85; 35, 134], 1, [Vecsmall([1, 2]), Vecsmall([2, 1])], [Vecsmall([2, 1])], Vecsmall([2])] (16:36) gp > (16:36) gp > galoisinit(x^2+2) %26 = [x^2 + 2, [11, 20, 672749994932560009201], [179167848644900591072, 493582146287659418129]~, [1, 1; 583166070610109713665, 89583924322450295536], 2, [Vecsmall([1, 2]), Vecsmall([2, 1])], [Vecsmall([2, 1])], Vecsmall([2])] (16:36) gp > (16:36) gp > galoisinit(x^3+2) %27 = 0 (16:36) gp > (16:36) gp > galoisinit(x^3-2) %28 = 0 (16:36) gp > (16:36) gp > galoisinit(x^2+2) %29 = [x^2 + 2, [11, 20, 672749994932560009201], [179167848644900591072, 493582146287659418129]~, [1, 1; 583166070610109713665, 89583924322450295536], 2, [Vecsmall([1, 2]), Vecsmall([2, 1])], [Vecsmall([2, 1])], Vecsmall([2])] (16:36) gp > (16:36) gp > ? Help topics: for a list of relevant subtopics, type ?n for n in 0: user-defined functions (aliases, installed and user functions) 1: PROGRAMMING under GP 2: Standard monadic or dyadic OPERATORS 3: CONVERSIONS and similar elementary functions 4: functions related to COMBINATORICS 5: NUMBER THEORETICAL functions 6: POLYNOMIALS and power series 7: Vectors, matrices, LINEAR ALGEBRA and sets 8: TRANSCENDENTAL functions 9: SUMS, products, integrals and similar functions 10: General NUMBER FIELDS 11: Associative and central simple ALGEBRAS 12: ELLIPTIC CURVES 13: L-FUNCTIONS 14: MODULAR FORMS 15: MODULAR SYMBOLS 16: GRAPHIC functions 17: The PARI community Also: ? functionname (short on-line help) ?\ (keyboard shortcuts) ?. (member functions) Extended help (if available): ?? (opens the full user's manual in a dvi previewer) ?? tutorial / refcard / libpari (tutorial/reference card/libpari manual) ?? refcard-ell (or -lfun/-mf/-nf: specialized reference card) ?? keyword (long help text about "keyword" from the user's manual) ??? keyword (a propos: list of related functions). (16:36) gp > (16:36) gp > ?10 bnfcertify bnfdecodemodule bnfinit bnfisintnorm bnfisnorm bnfisprincipal bnfissunit bnfisunit bnflog bnflogdegree bnflogef bnfnarrow bnfsignunit bnfsunit bnfunits bnrL1 bnrchar bnrclassfield bnrclassno bnrclassnolist bnrconductor bnrconductorofchar bnrdisc bnrdisclist bnrgaloisapply bnrgaloismatrix bnrinit bnrisconductor bnrisgalois bnrisprincipal bnrmap bnrrootnumber bnrstark dirzetak factornf galoischardet galoischarpoly galoischartable galoisconjclasses galoisexport galoisfixedfield galoisgetgroup galoisgetname galoisgetpol galoisidentify galoisinit galoisisabelian galoisisnormal galoispermtopol galoissubcyclo galoissubfields galoissubgroups idealadd idealaddtoone idealappr idealchinese idealcoprime idealdiv idealdown idealfactor idealfactorback idealfrobenius idealhnf idealintersect idealinv idealismaximal idealispower ideallist ideallistarch ideallog idealmin idealmul idealnorm idealnumden idealpow idealprimedec idealprincipalunits idealramgroups idealred idealredmodpower idealstar idealtwoelt idealval matalgtobasis matbasistoalg modreverse newtonpoly nfalgtobasis nfbasis nfbasistoalg nfcertify nfcompositum nfdetint nfdisc nfdiscfactors nfeltadd /*-- (type RETURN to continue) --*/ nfeltdiv nfeltdiveuc nfeltdivmodpr nfeltdivrem nfeltembed nfeltmod nfeltmul nfeltmulmodpr nfeltnorm nfeltpow nfeltpowmodpr nfeltreduce nfeltreducemodpr nfeltsign nfelttrace nfeltval nffactor nffactorback nffactormod nfgaloisapply nfgaloisconj nfgrunwaldwang nfhilbert nfhnf nfhnfmod nfinit nfisideal nfisincl nfisisom nfislocalpower nfkermodpr nfmodpr nfmodprinit nfmodprlift nfnewprec nfpolsturm nfroots nfrootsof1 nfsnf nfsolvemodpr nfsplitting nfsubfields nfsubfieldscm nfsubfieldsmax polcompositum polgalois polred polredabs polredbest polredord poltschirnhaus rnfalgtobasis rnfbasis rnfbasistoalg rnfcharpoly rnfconductor rnfdedekind rnfdet rnfdisc rnfeltabstorel rnfeltdown rnfeltnorm rnfeltreltoabs rnfelttrace rnfeltup rnfequation rnfhnfbasis rnfidealabstorel rnfidealdown rnfidealfactor rnfidealhnf rnfidealmul rnfidealnormabs rnfidealnormrel rnfidealprimedec rnfidealreltoabs rnfidealtwoelt rnfidealup rnfinit rnfisabelian rnfisfree rnfislocalcyclo rnfisnorm rnfisnorminit rnfkummer rnflllgram rnfnormgroup rnfpolred rnfpolredabs rnfpolredbest rnfpseudobasis rnfsteinitz subgrouplist (16:37) gp > (16:37) gp > ?galoissubfields galoissubfields(G,{flag=0},{v}): output all the subfields of G. flag has the same meaning as for galoisfixedfield. (16:37) gp > (16:37) gp > G=galoisinit(x^3-2) %30 = 0 (16:37) gp > (16:37) gp > G=galoisinit(x^3-x-2) %31 = 0 (16:37) gp > (16:37) gp > G=galoisinit(x^3-x+2) %32 = 0 (16:37) gp > (16:37) gp > G=galoisinit(x^6-x+2) %33 = 0 (16:37) gp > (16:37) gp > G=galoisinit(x^6-x+45) %34 = 0 (16:37) gp > (16:37) gp > G=galoisinit(x^6-x+108) %35 = 0 (16:37) gp > (16:37) gp > G=galoisinit(x^6+108) %36 = [x^6 + 108, [31, 16, 727423121747185263828481], [427813133461286551419858, 575025435438578810254688, 452007674594505165982416, 275415447152680097846065, 152397686308606453573793, 299609988285898712408623]~, [108, 108, 108, 108, 108, 108; 387194687732834131542643, 345333706424813417059694, 722317849336722979054625, 5105272410462284773856, 382089415322371846768787, 340228434014351132285838; 716739678429928662023330, 582255874947873576453133, 155850690116568289180499, 155850690116568289180499, 582255874947873576453133, 716739678429928662023330; 718215748321529451981325, 718215748321529451981325, 718215748321529451981325, 9207373425655811847156, 9207373425655811847156, 9207373425655811847156; 100293623462758123860584, 341917118643409497674435, 285212379641017642293462, 285212379641017642293462, 341917118643409497674435, 100293623462758123860584; 299609988285898712408623, 152397686308606453573793, 275415447152680097846065, 452007674594505165982416, 575025435438578810254688, 427813133461286551419858], 648, [Vecsmall([1, 2, 3, 4, 5, 6]), Vecsmall([2, 3, 1, 5, 6, 4]), Vecsmall([3, 1, 2, 6, 4, 5]), Vecsmall([4, 6, 5, 1, 3, 2]), Vecsmall([5, 4, 6, 2, 1, 3]), Vecsmall([6, 5, 4, 3, 2, 1])], [Vecsmall([2, 3, 1, 5, 6, 4]), Vecsmall([4, 6, 5, 1, 3, 2])], Vecsmall([3, 2])] (16:37) gp > (16:37) gp > galoissubgroups(G) %37 = [[[Vecsmall([2, 3, 1, 5, 6, 4]), Vecsmall([4, 6, 5, 1, 3, 2])], Vecsmall([3, 2])], [[Vecsmall([2, 3, 1, 5, 6, 4])], Vecsmall([3])], [[Vecsmall([4, 6, 5, 1, 3, 2])], Vecsmall([2])], [[Vecsmall([6, 5, 4, 3, 2, 1])], Vecsmall([2])], [[Vecsmall([5, 4, 6, 2, 1, 3])], Vecsmall([2])], [[], Vecsmall([])]] (16:37) gp > (16:37) gp > galoissubfields(G) %38 = [[x, Mod(0, x^6 + 108)], [x^2 + 972, Mod(3*x^3, x^6 + 108)], [x^3 + 54, Mod(1/12*x^4 + 3/2*x, x^6 + 108)], [x^3 + 864, Mod(2*x^2, x^6 + 108)], [x^3 - 54, Mod(-1/12*x^4 + 3/2*x, x^6 + 108)], [x^6 + 108, Mod(x, x^6 + 108)]] (16:37) gp > (16:37) gp > #% %39 = 6 (16:38) gp > (16:38) gp > %38[1] %40 = [x, Mod(0, x^6 + 108)] (16:38) gp > (16:38) gp > %38[2] %41 = [x^2 + 972, Mod(3*x^3, x^6 + 108)] (16:38) gp > (16:38) gp > %38[3] %42 = [x^3 + 54, Mod(1/12*x^4 + 3/2*x, x^6 + 108)] (16:38) gp > (16:38) gp > %38[4] %43 = [x^3 + 864, Mod(2*x^2, x^6 + 108)] (16:38) gp > (16:38) gp > %38[5] %44 = [x^3 - 54, Mod(-1/12*x^4 + 3/2*x, x^6 + 108)] (16:38) gp > (16:38) gp > %38[6] %45 = [x^6 + 108, Mod(x, x^6 + 108)] (16:38) gp > (16:38) gp > galoissubgroups(G) %46 = [[[Vecsmall([2, 3, 1, 5, 6, 4]), Vecsmall([4, 6, 5, 1, 3, 2])], Vecsmall([3, 2])], [[Vecsmall([2, 3, 1, 5, 6, 4])], Vecsmall([3])], [[Vecsmall([4, 6, 5, 1, 3, 2])], Vecsmall([2])], [[Vecsmall([6, 5, 4, 3, 2, 1])], Vecsmall([2])], [[Vecsmall([5, 4, 6, 2, 1, 3])], Vecsmall([2])], [[], Vecsmall([])]] (16:39) gp > (16:39) gp > #% %47 = 6 (16:39) gp > (16:39) gp > %46[1] %48 = [[Vecsmall([2, 3, 1, 5, 6, 4]), Vecsmall([4, 6, 5, 1, 3, 2])], Vecsmall([3, 2])] (16:39) gp > (16:39) gp > ?galoissubgroups galoissubgroups(G): output all the subgroups of G. (16:40) gp > (16:40) gp > ??galoissubgroups galoissubgroups(G): Outputs all the subgroups of the Galois group gal. A subgroup is a vector [gen, orders], with the same meaning as for gal.gen and gal.orders. Hence gen is a vector of permutations generating the subgroup, and orders is the relatives orders of the generators. The cardinality of a subgroup is the product of the relative orders. Such subgroup can be used instead of a Galois group in the following command: galoisisabelian, galoissubgroups, galoisexport and galoisidentify. To get the subfield fixed by a subgroup sub of gal, use galoisfixedfield(gal,sub[1]) The library syntax is GEN galoissubgroups(GEN G). (16:40) gp > (16:40) gp > galoisisabelian(G) %49 = 0 (16:42) gp > (16:42) gp > G %50 = [x^6 + 108, [31, 16, 727423121747185263828481], [427813133461286551419858, 575025435438578810254688, 452007674594505165982416, 275415447152680097846065, 152397686308606453573793, 299609988285898712408623]~, [108, 108, 108, 108, 108, 108; 387194687732834131542643, 345333706424813417059694, 722317849336722979054625, 5105272410462284773856, 382089415322371846768787, 340228434014351132285838; 716739678429928662023330, 582255874947873576453133, 155850690116568289180499, 155850690116568289180499, 582255874947873576453133, 716739678429928662023330; 718215748321529451981325, 718215748321529451981325, 718215748321529451981325, 9207373425655811847156, 9207373425655811847156, 9207373425655811847156; 100293623462758123860584, 341917118643409497674435, 285212379641017642293462, 285212379641017642293462, 341917118643409497674435, 100293623462758123860584; 299609988285898712408623, 152397686308606453573793, 275415447152680097846065, 452007674594505165982416, 575025435438578810254688, 427813133461286551419858], 648, [Vecsmall([1, 2, 3, 4, 5, 6]), Vecsmall([2, 3, 1, 5, 6, 4]), Vecsmall([3, 1, 2, 6, 4, 5]), Vecsmall([4, 6, 5, 1, 3, 2]), Vecsmall([5, 4, 6, 2, 1, 3]), Vecsmall([6, 5, 4, 3, 2, 1])], [Vecsmall([2, 3, 1, 5, 6, 4]), Vecsmall([4, 6, 5, 1, 3, 2])], Vecsmall([3, 2])] (16:42) gp > (16:42) gp > G.pol %51 = x^6 + 108 (16:42) gp > (16:42) gp > factor(108) %52 = [2 2] [3 3] (16:43) gp > (16:43) gp > galoisidentify(G) %53 = [6, 1] (16:44) gp > (16:44) gp > ?galoisidentify galoisidentify(gal): gal being a Galois group as output by galoisinit, output the isomorphism class of the underlying abstract group as a two-components vector [o,i], where o is the group order, and i is the group index in the GAP4 small group library. (16:44) gp > (16:44) gp > ?polgalois polgalois(T): Galois group of the polynomial T (see manual for group coding). Return [n, s, k, name] where n is the group order, s the signature, k the index and name is the GAP4 name of the transitive group. (16:44) gp > (16:44) gp > ??polgalois polgalois(T): Galois group of the nonconstant polynomial T\inQ[X]. In the present version 2.14.0, T must be irreducible and the degree d of T must be less than or equal to 7. If the galdata package has been installed, degrees 8, 9, 10 and 11 are also implemented. By definition, if K = Q[x]/(T), this computes the action of the Galois group of the Galois closure of K on the d distinct roots of T, up to conjugacy (corresponding to different root orderings). The output is a 4-component vector [n,s,k,name] with the following meaning: n is the cardinality of the group, s is its signature (s = 1 if the group is a subgroup of the alternating group A_d, s = -1 otherwise) and name is a character string containing name of the transitive group according to the GAP 4 transitive groups library by Alexander Hulpke. k is more arbitrary and the choice made up to version 2.2.3 of PARI is rather unfortunate: for d > 7, k is the numbering of the group among all transitive subgroups of S_d, as given in "The transitive groups of degree up to eleven", G. Butler and J. McKay, Communications in Algebra, vol. 11, 1983, pp. 863--911 (group k is denoted T_k there). And for d <= 7, it was ad hoc, so as to ensure that a given triple would denote a unique group. Specifically, for polynomials of degree d <= 7, the groups are coded as follows, using standard notations /*-- (type RETURN to continue) --*/ In degree 1: S_1 = [1,1,1]. In degree 2: S_2 = [2,-1,1]. In degree 3: A_3 = C_3 = [3,1,1], S_3 = [6,-1,1]. In degree 4: C_4 = [4,-1,1], V_4 = [4,1,1], D_4 = [8,-1,1], A_4 = [12,1,1], S_4 = [24,-1,1]. In degree 5: C_5 = [5,1,1], D_5 = [10,1,1], M_{20} = [20,-1,1], A_5 = [60,1,1], S_5 = [120,-1,1]. In degree 6: C_6 = [6,-1,1], S_3 = [6,-1,2], D_6 = [12,-1,1], A_4 = [12,1,1], G_{18} = [18,-1,1], S_4^ -= [24,-1,1], A_4 x C_2 = [24,-1,2], S_4^ += [24,1,1], G_{36}^ -= [36,-1,1], G_{36}^ += [36,1,1], S_4 x C_2 = [48,-1,1], A_5 = PSL_2(5) = [60,1,1], G_{72} = [72,-1,1], S_5 = PGL_2(5) = [120,-1,1], A_6 = [360,1,1], S_6 = [720,-1,1]. In degree 7: C_7 = [7,1,1], D_7 = [14,-1,1], M_{21} = [21,1,1], M_{42} = [42,-1,1], PSL_2(7) = PSL_3(2) = [168,1,1], A_7 = [2520,1,1], S_7 = [5040,-1,1]. This is deprecated and obsolete, but for reasons of backward compatibility, we cannot change this behavior yet. So you can use the default /*-- (type RETURN to continue) --*/ new_galois_format to switch to a consistent naming scheme, namely k is always the standard numbering of the group among all transitive subgroups of S_n. If this default is in effect, the above groups will be coded as: In degree 1: S_1 = [1,1,1]. In degree 2: S_2 = [2,-1,1]. In degree 3: A_3 = C_3 = [3,1,1], S_3 = [6,-1,2]. In degree 4: C_4 = [4,-1,1], V_4 = [4,1,2], D_4 = [8,-1,3], A_4 = [12,1,4], S_4 = [24,-1,5]. In degree 5: C_5 = [5,1,1], D_5 = [10,1,2], M_{20} = [20,-1,3], A_5 = [60,1,4], S_5 = [120,-1,5]. In degree 6: C_6 = [6,-1,1], S_3 = [6,-1,2], D_6 = [12,-1,3], A_4 = [12,1,4], G_{18} = [18,-1,5], A_4 x C_2 = [24,-1,6], S_4^ += [24,1,7], S_4^ -= [24,-1,8], G_{36}^ -= [36,-1,9], G_{36}^ += [36,1,10], S_4 x C_2 = [48,-1,11], A_5 = PSL_2(5) = [60,1,12], G_{72} = [72,-1,13], S_5 = PGL_2(5) = [120,-1,14], A_6 = [360,1,15], S_6 = [720,-1,16]. In degree 7: C_7 = [7,1,1], D_7 = [14,-1,2], M_{21} = [21,1,3], M_{42} = [42,-1,4], PSL_2(7) = PSL_3(2) = [168,1,5], A_7 = [2520,1,6], S_7 = /*-- (type RETURN to continue) --*/ [5040,-1,7]. Warning. The method used is that of resolvent polynomials and is sensitive to the current precision. The precision is updated internally but, in very rare cases, a wrong result may be returned if the initial precision was not sufficient. The library syntax is GEN polgalois(GEN T, long prec). To enable the new format in library mode, set the global variable new_galois_format to 1. (16:45) gp > (16:45) gp > polgalois(G.pol) %54 = [6, -1, 2, "D_6(6) = [3]2"] (16:46) gp > (16:48) gp > Logging to /Users/s/tmp/pari-11.04 GPRC Done. GP/PARI CALCULATOR Version 2.14.0 (development 25892-64329ab65) i386 running darwin (x86-64/GMP-6.2.0 kernel) 64-bit version compiled: Oct 26 2020, Apple clang version 12.0.0 (clang-1200.0.32.21) threading engine: single (readline not compiled in, extended help enabled) Copyright (C) 2000-2020 The PARI Group PARI/GP is free software, covered by the GNU General Public License, and comes WITHOUT ANY WARRANTY WHATSOEVER. Type ? for help, \q to quit. Type ?17 for how to get moral (and possibly technical) support. parisizemax = 900001792, primelimit = 1000000 (16:49) gp > (16:49) gp > (16:49) gp > Logging to /Users/s/tmp/pari-11.04 GPRC Done. GP/PARI CALCULATOR Version 2.14.0 (development 25892-64329ab65) i386 running darwin (x86-64/GMP-6.2.0 kernel) 64-bit version compiled: Oct 26 2020, Apple clang version 12.0.0 (clang-1200.0.32.21) threading engine: single (readline not compiled in, extended help enabled) Copyright (C) 2000-2020 The PARI Group PARI/GP is free software, covered by the GNU General Public License, and comes WITHOUT ANY WARRANTY WHATSOEVER. Type ? for help, \q to quit. Type ?17 for how to get moral (and possibly technical) support. parisizemax = 900001792, primelimit = 1000000 (16:50) gp > (16:50) gp > Logging to /Users/s/tmp/pari-11.04 GPRC Done. GP/PARI CALCULATOR Version 2.13.0 (released) i386 running darwin (x86-64/GMP-6.2.0 kernel) 64-bit version compiled: Oct 31 2020, Apple clang version 12.0.0 (clang-1200.0.32.21) threading engine: single (readline v8.0 enabled, extended help enabled) Copyright (C) 2000-2020 The PARI Group PARI/GP is free software, covered by the GNU General Public License, and comes WITHOUT ANY WARRANTY WHATSOEVER. Type ? for help, \q to quit. Type ?17 for how to get moral (and possibly technical) support. parisizemax = 900001792, primelimit = 1000000 (16:51) gp > ?galoisinit galoisinit(pol,{den}): pol being a polynomial or a number field as output by nfinit defining a Galois extension of Q, compute the Galois group and all necessary information for computing fixed fields. den is optional and has the same meaning as in nfgaloisconj(,4)(see manual). (16:51) gp > galoisinit(x^3-2) %1 = 0 (16:51) gp > ?galoisfixedfield galoisfixedfield(gal,perm,{flag},{v=y}): gal being a Galois group as output by galoisinit and perm a subgroup, an element of gal.group or a vector of such elements, return [P,x] such that P is a polynomial defining the fixed field of gal[1] by the subgroup generated by perm, and x is a root of P in gal expressed as a polmod in gal.pol. If flag is 1 return only P. If flag is 2 return [P,x,F] where F is the factorization of gal.pol over the field defined by P, where the variable v stands for a root of P. (16:51) gp > ?galoisexport galoisexport(gal,{flag}): gal being a Galois group as output by galoisinit, output a string representing the underlying permutation group in GAP notation (default) or Magma notation (flag = 1). (16:52) gp > G=galoisinit(x^6+108) %2 = [x^6 + 108, [31, 16, 727423121747185263828481], [427813133461286551419858, 575025435438578810254688, 452007674594505165982416, 275415447152680097846065, 152397686308606453573793, 299609988285898712408623]~, [108, 108, 108, 108, 108, 108; 387194687732834131542643, 345333706424813417059694, 722317849336722979054625, 5105272410462284773856, 382089415322371846768787, 340228434014351132285838; 716739678429928662023330, 582255874947873576453133, 155850690116568289180499, 155850690116568289180499, 582255874947873576453133, 716739678429928662023330; 718215748321529451981325, 718215748321529451981325, 718215748321529451981325, 9207373425655811847156, 9207373425655811847156, 9207373425655811847156; 100293623462758123860584, 341917118643409497674435, 285212379641017642293462, 285212379641017642293462, 341917118643409497674435, 100293623462758123860584; 299609988285898712408623, 152397686308606453573793, 275415447152680097846065, 452007674594505165982416, 575025435438578810254688, 427813133461286551419858], 648, [Vecsmall([1, 2, 3, 4, 5, 6]), Vecsmall([2, 3, 1, 5, 6, 4]), Vecsmall([3, 1, 2, 6, 4, 5]), Vecsmall([4, 6, 5, 1, 3, 2]), Vecsmall([5, 4, 6, 2, 1, 3]), Vecsmall([6, 5, 4, 3, 2, 1])], [Vecsmall([2, 3, 1, 5, 6, 4]), Vecsmall([4, 6, 5, 1, 3, 2])], Vecsmall([3, 2])] (16:52) gp > galoisexport(G) %3 = "Group((1, 2, 3)(4, 5, 6), (1, 4)(2, 6)(3, 5))" (16:52) gp > galoisgetname(G) *** too few arguments: galoisgetname(G) *** ^- (16:53) gp > ?galoisgetname galoisgetname(a,b): query the galpol package for a string describing the group of order a with index b in the GAP4 Small Group library. (16:53) gp > ?galoisisnormal galoisisnormal(gal,subgrp): gal being as output by galoisinit, and subgrp a subgroup of gal as output by galoissubgroups, return 1 if subgrp is a normal subgroup of gal, else return 0. (16:53) gp > galoissubgroups(G) %4 = [[[Vecsmall([2, 3, 1, 5, 6, 4]), Vecsmall([4, 6, 5, 1, 3, 2])], Vecsmall([3, 2])], [[Vecsmall([2, 3, 1, 5, 6, 4])], Vecsmall([3])], [[Vecsmall([4, 6, 5, 1, 3, 2])], Vecsmall([2])], [[Vecsmall([6, 5, 4, 3, 2, 1])], Vecsmall([2])], [[Vecsmall([5, 4, 6, 2, 1, 3])], Vecsmall([2])], [[], Vecsmall([])]] (16:53) gp > galoisisnormal(G,galoissubgroups(G)[1]) %5 = 1 (16:54) gp > galoisisnormal(G,galoissubgroups(G)[2]) %6 = 1 (16:54) gp > galoisisnormal(G,galoissubgroups(G)[3]) %7 = 0 (16:54) gp > galoisisnormal(G,galoissubgroups(G)[4]) %8 = 0 (16:54) gp > galoisisnormal(G,galoissubgroups(G)[5]) %9 = 0 (16:54) gp > galoisisnormal(G,galoissubgroups(G)[6]) %10 = 1 (16:54) gp > galoissubgroups(G)[2] %11 = [[Vecsmall([2, 3, 1, 5, 6, 4])], Vecsmall([3])] (16:54) gp > galoisexport(galoissubgroups(G)[2]) %12 = "Group((1, 2, 3)(4, 5, 6))" (16:55) gp > G.order *** at top-level: G.order *** ^----- *** not a function in function call *** Break loop: type 'break' to go back to GP prompt break> break (16:55) gp > #G %13 = 8 (16:55) gp > G[1] %14 = x^6 + 108 (16:55) gp > G[2] %15 = [31, 16, 727423121747185263828481] (16:55) gp > G[3] %16 = [427813133461286551419858, 575025435438578810254688, 452007674594505165982416, 275415447152680097846065, 152397686308606453573793, 299609988285898712408623]~ (16:55) gp > G[4] %17 = [108 108 108 108 108 108] [387194687732834131542643 345333706424813417059694 722317849336722979054625 5105272410462284773856 382089415322371846768787 340228434014351132285838] [716739678429928662023330 582255874947873576453133 155850690116568289180499 155850690116568289180499 582255874947873576453133 716739678429928662023330] [718215748321529451981325 718215748321529451981325 718215748321529451981325 9207373425655811847156 9207373425655811847156 9207373425655811847156] [100293623462758123860584 341917118643409497674435 285212379641017642293462 285212379641017642293462 341917118643409497674435 100293623462758123860584] [299609988285898712408623 152397686308606453573793 275415447152680097846065 452007674594505165982416 575025435438578810254688 427813133461286551419858] (16:55) gp > G[5] %18 = 648 (16:55) gp > G[6] %19 = [Vecsmall([1, 2, 3, 4, 5, 6]), Vecsmall([2, 3, 1, 5, 6, 4]), Vecsmall([3, 1, 2, 6, 4, 5]), Vecsmall([4, 6, 5, 1, 3, 2]), Vecsmall([5, 4, 6, 2, 1, 3]), Vecsmall([6, 5, 4, 3, 2, 1])] (16:55) gp > G[7] %20 = [Vecsmall([2, 3, 1, 5, 6, 4]), Vecsmall([4, 6, 5, 1, 3, 2])] (16:55) gp > G[8] %21 = Vecsmall([3, 2]) (16:55) gp > galoisconjclasses(G) %22 = [[Vecsmall([1, 2, 3, 4, 5, 6])], [Vecsmall([3, 1, 2, 6, 4, 5]), Vecsmall([2, 3, 1, 5, 6, 4])], [Vecsmall([6, 5, 4, 3, 2, 1]), Vecsmall([5, 4, 6, 2, 1, 3]), Vecsmall([4, 6, 5, 1, 3, 2])]] (16:56) gp > ?galoisconjclasses galoisconjclasses(gal): gal being output by galoisinit, return the list of conjugacy classes. (16:56) gp > ??galoisconjclasses galoisconjclasses(gal): gal being output by galoisinit, return the list of conjugacy classes of the underlying group. The ordering of the classes is consistent with galoischartable and the trivial class comes first. ? G = galoisinit(x^6+108); ? galoisidentify(G) %2 = [6, 1] \\ S_3 ? S = galoisconjclasses(G) %3 = [[Vecsmall([1,2,3,4,5,6])], [Vecsmall([3,1,2,6,4,5]),Vecsmall([2,3,1,5,6,4])], [Vecsmall([6,5,4,3,2,1]),Vecsmall([5,4,6,2,1,3]), Vecsmall([4,6,5,1,3,2])]] ? [[permorder(c[1]),#c] | c <- S ] %4 = [[1,1], [3,2], [2,3]] This command also accepts subgroups returned by galoissubgroups: ? subs = galoissubgroups(G); H = subs[5]; ? galoisidentify(H) %2 = [2, 1] \\ Z/2 ? S = galoisconjclasses(subgroups_of_G[5]); ? [[permorder(c[1]),#c] | c <- S ] /*-- (type RETURN to continue) --*/ %4 = [[1,1], [2,1]] The library syntax is GEN galoisconjclasses(GEN gal). (16:58) gp > ?galoischartable galoischartable(gal): return the character table of the underlying group of gal. (16:58) gp > ??galoischartable galoischartable(gal): Compute the character table of G, where G is the underlying group of the galoisinit structure gal. The input gal is also allowed to be a t_VEC of permutations that is closed under products. Let N be the number of conjugacy classes of G. Return a t_VEC [M,e] where e >= 1 is an integer and M is a square t_MAT of size N giving the character table of G. * Each column corresponds to an irreducible character; the characters are ordered by increasing dimension and the first column is the trivial character (hence contains only 1's). * Each row corresponds to a conjugacy class; the conjugacy classes are ordered as specified by galoisconjclasses(gal), in particular the first row corresponds to the identity and gives the dimension chi(1) of the irreducible representation attached to the successive characters chi. The value M[i,j] of the character j at the conjugacy class i is represented by a polynomial in y whose variable should be interpreted as an e-th root of unity, i.e. as the lift of Mod(y, polcyclo(e,'y)) (Note that M is the transpose of the usual orientation for character tables.) /*-- (type RETURN to continue) --*/ The integer e divides the exponent of the group G and is chosen as small as posible; for instance e = 1 when the characters are all defined over Q, as is the case for S_n. Examples: ? K = nfsplitting(x^4+x+1); ? gal = galoisinit(K); ? [M,e] = galoischartable(gal); ? M~ \\ take the transpose to get the usual orientation %4 = [1 1 1 1 1] [1 -1 -1 1 1] [2 0 0 -1 2] [3 -1 1 0 -1] [3 1 -1 0 -1] ? e %5 = 1 ? {G = [Vecsmall([1, 2, 3, 4, 5]), Vecsmall([1, 5, 4, 3, 2]), Vecsmall([2, 1, 5, 4, 3]), Vecsmall([2, 3, 4, 5, 1]), Vecsmall([3, 2, 1, 5, 4]), Vecsmall([3, 4, 5, 1, 2]), Vecsmall([4, 3, 2, 1, 5]), Vecsmall([4, 5, 1, 2, 3]), Vecsmall([5, 1, 2, 3, 4]), Vecsmall([5, 4, 3, 2, 1])];} /*-- (type RETURN to continue) --*/ \\G = D10 ? [M,e] = galoischartable(G); ? M~ %8 = [1 1 1 1] [1 -1 1 1] [2 0 -y^3 - y^2 - 1 y^3 + y^2] [2 0 y^3 + y^2 -y^3 - y^2 - 1] ? e %9 = 5 The library syntax is GEN galoischartable(GEN gal). (17:04) gp > K=nfsplitting(x^4+x+1) %23 = x^24 - 80*x^20 + 340*x^18 + 7520*x^16 + 23120*x^14 - 973378*x^12 - 462400*x^10 + 50899280*x^8 + 74190340*x^6 + 67773664*x^4 + 2114616240*x^2 + 266962921 (17:06) gp > 4! %24 = 24 (17:06) gp > polgalois(x^4+x+1) %25 = [24, -1, 1, "S4"] (17:06) gp > galoisinit(K) %26 = [x^24 - 80*x^20 + 340*x^18 + 7520*x^16 + 23120*x^14 - 973378*x^12 - 462400*x^10 + 50899280*x^8 + 74190340*x^6 + 67773664*x^4 + 2114616240*x^2 + 266962921, [509, 37, 14078550612227953950024035678739908562871957761691544204171134533083756034045137206531409741775312269], [1478312817017609442325688319278800588387596636657213077569074869832764035127023982661934251260189508, 7880327162484506024820987694566621991643029798467062426546879726027051116209513829014690442186611916, 13052458730349039580770956875696296798152340202351442882360149851760646302175647324912339394021467230, 5375922463587982213242220572244209638535815602469748027166820174871177349212999964733685843172577369, 3750557330409431102282896320941410145686108345121829063145121333200980809530817423149839539482556602, 8878049754582166899744758768064965792580450068859832905907401368700086018733149755676698370486511557, 4789350364568054194298863204710404303944951512454344423035015848290906231000675744463194643080739220, 3514828443273893409265426276546138547583860074382498916819491027595724359120518230637297283158271767, 1889463310095342298306102025243339054734152817034579952797792185925527819438335689053450979468251000, 614941388801181513272665097079073298373061378962734446582267365230345947558178175227553619545783547, 4748279922507091977206667394439753946623528615514599542505642975874015712054453349811847467782456243, 11150294267973988559701966769727575349878961777324448891483447832068302793136943196164603658708878651, 2928256344253965390322068909012333212992995984367095312687686701015453240908194010366806083066433618, 9330270689720861972817368284300154616248429146176944661665491557209740321990683856719562273992856026, 13463609223426772436751370581660835264498896382728809757588867167853410086486959031303856122229528722, 12189087302132611651717933653496569508137804944656964251373342347158228214606801517477958762307061269, 10563722168954060540758609402193770015288097687309045287351643505488031674924618975894112458617040502, 9289200247659899755725172474029504258927006249237199781136118684792849803044461462068215098694573049, 5200500857645787050279276910674942770291507692831711298263733164383670015311987450854711371288800712, 10327993281818522847741139357798498417185849416569715141026013199882775224514319783381570202292755667, 8702628148639971736781815106495698924336142159221796177004314358212578684832137241797723898602734900, 1026091881878914369253078803043611764719617559340101321810984681323109731869489881619070347753845039, 6198223449743447925203047984173286571228927963224481777624254807056704917835623377516719299588700353, 12600237795210344507698347359461107974484361125034331126602059663250991998918113223869475490515122761]~, [9949038593901008021304459354250690664476775881029888089655748715649609186870876267459432670501351320, 13399879940194252272286818443345610488898705759763131213008733427252966915155789061318225618775684422, 4176832981531427076177211993535856818856262997496757490632628510139593424538281848964445891357856663, 917196829561969131275365465461783675346649827863249674513385172587577400160436720468916331175147142, 4000112191181258281942958005411555578511269918580888499682233594173098213439821962991927056972302067, 664647959995531390075457485713501415596692519328311835470566778204985559776180453314034997051972735, 17966222653109623725122194781441238781428568567190678792515203194450946717227118100195253596140599, 6033507564815872748488365025985383278759538395722291772503673446915189017761247252760918758802054206, 5494030183982423899772876596780807220027456010096919718472986586612778636000326376573999878746674540, 1081653073775036239778354687849557027682871620249947125173652196710[+++] (17:07) gp > G=galoisinit(K); (17:08) gp > galoisidentify(G) %28 = [24, 12] (17:08) gp > galoisexport(G) %29 = "Group((1, 14)(2, 13)(3, 19)(4, 20)(5, 21)(6, 22)(7, 15)(8, 16)(9, 17)(10, 18)(11, 24)(12, 23), (1, 11)(2, 12)(3, 6)(4, 5)(7, 10)(8, 9)(13, 23)(14, 24)(15, 18)(16, 17)(19, 22)(20, 21), (1, 7, 5)(2, 8, 6)(3, 23, 16)(4, 24, 15)(9, 19, 13)(10, 20, 14)(11, 18, 21)(12, 17, 22), (1, 13)(2, 14)(3, 15)(4, 16)(5, 9)(6, 10)(7, 19)(8, 20)(11, 12)(17, 21)(18, 22)(23, 24))" (17:08) gp > galoissubgroups(G) %30 = [[[Vecsmall([14, 13, 19, 20, 21, 22, 15, 16, 17, 18, 24, 23, 2, 1, 7, 8, 9, 10, 3, 4, 5, 6, 12, 11]), Vecsmall([11, 12, 6, 5, 4, 3, 10, 9, 8, 7, 1, 2, 23, 24, 18, 17, 16, 15, 22, 21, 20, 19, 13, 14]), Vecsmall([7, 8, 23, 24, 1, 2, 5, 6, 19, 20, 18, 17, 9, 10, 4, 3, 22, 21, 13, 14, 11, 12, 16, 15]), Vecsmall([13, 14, 15, 16, 9, 10, 19, 20, 5, 6, 12, 11, 1, 2, 3, 4, 21, 22, 7, 8, 17, 18, 24, 23])], Vecsmall([2, 2, 3, 2])], [[Vecsmall([14, 13, 19, 20, 21, 22, 15, 16, 17, 18, 24, 23, 2, 1, 7, 8, 9, 10, 3, 4, 5, 6, 12, 11]), Vecsmall([11, 12, 6, 5, 4, 3, 10, 9, 8, 7, 1, 2, 23, 24, 18, 17, 16, 15, 22, 21, 20, 19, 13, 14]), Vecsmall([7, 8, 23, 24, 1, 2, 5, 6, 19, 20, 18, 17, 9, 10, 4, 3, 22, 21, 13, 14, 11, 12, 16, 15])], Vecsmall([2, 2, 3])], [[Vecsmall([14, 13, 19, 20, 21, 22, 15, 16, 17, 18, 24, 23, 2, 1, 7, 8, 9, 10, 3, 4, 5, 6, 12, 11]), Vecsmall([11, 12, 6, 5, 4, 3, 10, 9, 8, 7, 1, 2, 23, 24, 18, 17, 16, 15, 22, 21, 20, 19, 13, 14]), Vecsmall([13, 14, 15, 16, 9, 10, 19, 20, 5, 6, 12, 11, 1, 2, 3, 4, 21, 22, 7, 8, 17, 18, 24, 23])], Vecsmall([2, 2, 2])], [[Vecsmall([11, 12, 6, 5, 4, 3, 10, 9, 8, 7, 1, 2, 23, 24, 18, 17, 16, 15, 22, 21, 20, 19, 13, 14]), Vecsmall([14, 13, 19, 20, 21, 22, 15, 16, 17, 18, 24, 23, 2, 1, 7, 8, 9, 10, 3, 4, 5, 6, 12, 11]), Vecsmall([19, 20, 24, 23, 13, 14, 9, 10, 7, 8, 22, 21, 5, 6, 16, 15, 18, 17, 1, 2, 12, 11, 4, 3])], Vecsmall([2, 2, 2])], [[Vecsmall([24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]), Vecsmall([11, 12, 6, 5, 4, 3, 10, 9, 8, 7, 1, 2, 23, 24, 18, 17, 16, 15, 22, 21, 20, 19, 13, 14]), Vecsmall([9, 10, 4, 3, 19, 20, 13, 14, 1, 2, 17, 18, 7, 8, 23, 24, 11, 12, 5, 6, 22, 21, 15, 16])], Vecsmall([2, 2, 2])], [[Vecsmall([14, 13, 19, 20, 21, 22, 15, 16, 17, 18, 24, 23, 2, 1, 7, 8, 9, 10, 3, 4, 5, 6, 12, 11]), Vecsmall([11, 12, 6, 5, 4, 3, 10, 9, 8, 7, 1, 2, 23, 24, 18, 17, 16, 15, 22, 21, 20, 19, 13, 14])], Vecsmall([2, 2])], [[Vecsmall([7, 8, 23, 24, 1, 2, 5, 6, 19, 20, 18, 17, 9, 10, 4, 3, 22, 21, 13, 14, 11, 12, 16, 15]), Vecsmall([13, 14, 15, 16, 9, 10, 19, 20, 5, 6, 12, 11, 1, 2, 3, 4, 21, 22, 7, 8, 17, 18, 24, 23])], Vecsmall([3, 2])], [[Vecsmall([10, 9, 13, 14, 11, 12, 4, 3, 22, 21, 15, 16, 8, 7, 5, 6, 19, 20, 23, 24, 1, 2, 17, 18]), Vecsmall([2, 1, 7, 8, 17, 18, 3, 4, 21, 22, 23, 24, 14, 13, 19, 20, 5, 6, 15, 16, 9, 10, 11, 12])], Vecsmall([3, 2])], [[Vecsmall([18, 17, 2, 1, 24, 23, 20, 19, 6, 5, 7, 8, 16, 15, 21, 22, 3, 4, 12, 11, 14, 13, 9, 10]), Vecsmall([13, 14, 15, 16, 9, 10, 19, 20, 5, 6, 12, 11, 1, 2, 3, 4, 21, 22, 7, 8, 17, 18, 24, 23])], Vecsmall([3, 2])], [[Vecsmall([15, 16, 12, 11, 14, 13, 21, 22, 3, 4, 10, 9, 17, 18, 20, 19, 6, 5, 2, 1, 24, 23, 8, 7]), Vecsmall([2, 1, 7, 8, 17, 18, 3, 4, 21, 22, 23, 24, 14, 13, 19, 20, 5, 6, 15, 16, 9, 10, 11, 12])], Vecsmall([3, 2])], [[Vecsmall([7, 8, 23, 24, 1, 2, 5, 6, 19, 20, 18, 17, 9, 10, 4, 3, 22, 21, 13, 14, 11, 12, 16, 15])], Vecsmall([3])], [[Vecsmall([10, 9, 13, 14, 11, 12, 4, 3, 22, 21, 15, 16, 8, 7, 5, 6, 19, 20, 23, 24, 1, 2, 17, 18])], Vecsmall([3])], [[Vecsmall([18, 17, 2, 1, 24, 23, 20, 19, 6, 5, 7, 8, 16, 15, 21, 22, 3, 4, 12, 11, 14, 13, 9, 10])], Vecsmall([3])], [[Vecsmall([15, 16, 12, 11, 14, 13, 21, 22, 3, 4, 10, 9, 17, 18, 20, 19, 6, 5, 2, 1, 24, 23, 8, 7])], Vecsmall([3])], [[Vecsmall([13, 14, 15, 16, 9, 10, 19, 20, 5, 6, 12, 11, 1, 2, 3, 4, 21, 22, 7, 8, 17, 18, 24, 23])], Vecsmall([2])], [[Vecsmall([2, 1, 7, 8, 17, 18, 3, 4, 21, 22, 23, 24, 14, 13, 19, 20, 5, 6, 15, 16, 9, 10, 11, 12])], Vecsmall([2])], [[Vecsmall([19, 20, 24, 23, 13, 14, 9, 10, 7, 8, 22, 21, 5, 6, 16, 15, 18, 17, 1, 2, 12, 11, 4, 3])], Vecsmall([2])], [[Vecsmall([22, 21, 14, 13, 23, 24, 8, 7, 10, 9, 19, 20, 4, 3, 17, 18, 15, 16, 11, 12, 2, 1, 5, 6])], Vecsmall([2])], [[Vecsmall([9, 10, 4, 3, 19, 20, 13, 14, 1, 2, 17, 18, 7, 8, 23, 24, 11, 12, 5, 6, 22, 21, 15, 16])], Vecsmall([2])], [[Vecsmall([16, 15, 21, 22, 6, 5, 12, 11, 24, 23, 8, 7, 18, 17, 2, 1, 14, 13, 20, 19, 3, 4, 10, 9])], Vecsmall([2])], [[], Vecsmall([])], [[Vecsmall([14, 13, 19, 20, 21, 22, 15, 16, 17, 18, 24, 23, 2, 1, 7, 8, 9, 10, 3, 4, 5, 6, 12, 11])], Vecsmall([2])], [[Vecsmall([11, 12, 6, 5, 4, 3, 10, 9, 8, 7, 1, 2, 23, 24, 18, 17, 16, 15, 22, 21, 20, 19, 13, 14])], Vecsmall([2])], [[Vecsmall([24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1])], Vecsmall([2])], [[Vecsmall([14, 13, 19, 20, 21, 22, 15, 16, 17, 18, 24, 23, 2, 1, 7, 8, 9, 10, 3, 4, 5, 6, 12, 11]), Vecsmall([13, 14, 15, 16, 9, 10, 19, 20, 5, 6, 12, 11, 1, 2, 3, 4, 21, 22, 7, 8, 17, 18, 24, 23])], Vecsmall([2, 2])], [[Vecsmall([11, 12, 6, 5, 4, 3, 10, 9, 8, 7, 1, 2, 23, 24, 18, 17, 16, 15, 22, 21, 20, 19, 13, 14]), Vecsmall([19, 20, 24, 23, 13, 14, 9, 10, 7, 8, 22, 21, 5, 6, 16, 15, 18, 17, 1, 2, 12, 11, 4, 3])], Vecsmall([2, 2])], [[Vecsmall([24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]), Vecsmall([9, 10, 4, 3, 19, 20, 13, 14, 1, 2, 17, 18, 7, 8, 23, 24, 11, 12, 5, 6, 22, 21, 15, 16])], Vecsmall([2, 2])], [[Vecsmall([14, 13, 19, 20, 21, 22, 15, 16, 17, 18, 24, 23, 2, 1, 7, 8, 9, 10, 3, 4, 5, 6, 12, 11]), Vecsmall([12, 11, 10, 9, 16, 15, 6, 5, 20, 19, 13, 14, 24, 23, 22, 21, 4, 3, 18, 17, 8, 7, 1, 2])], Vecsmall([2, 2])], [[Vecsmall([11, 12, 6, 5, 4, 3, 10, 9, 8, 7, 1, 2, 23, 24, 18,[+++] (17:09) gp > #galoissubgroups(G) %31 = 30 (17:09) gp > #galoissubfields(G) %32 = 30 (17:09) gp > vector(30,n,galoisisnormal(G,galoissubgroups(G)[n])) %33 = [1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0] (17:10) gp > sum(%) *** expected character: '=' instead of: sum(%) *** ^- (17:10) gp > vecsum(%) %34 = 4