| Pari/GP Reference Documentation | Contents
- Global index
- GP keyboard shortcuts |
| Algebraic numbers in relative extensions Basic definitions Pseudo-bases, determinant nfdetint nfhnf nfhnfmod nfsnf 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 | |
| 'Relative extensions of number fields and $\Z\K$-modules' not found ! | |
| Basic definitions |
![]() |
* rnf denotes a relative number field, i.e. a data structure
output by * A relative matrix is an m x n matrix whose entries are elements of K, in any form. Its m columns Aj represent elements in Kn. * An ideal list is a row vector of fractional ideals of the number field nf. * A pseudo-matrix is a 2-component row vector (A,I) where A is a relative m x n matrix and I an ideal list of length n. If I = {𝔞1,..., 𝔞n} and the columns of A are (A1,..., An), this data defines the torsion-free (projective) ℤK-module 𝔞1 A1⨁ 𝔞n An. * An integral pseudo-matrix is a 3-component row vector (A,I,J) where A = (ai,j) is an m x n relative matrix and I = (𝔟1,..., 𝔟m), J = (𝔞1,..., 𝔞n) are ideal lists, such that ai,j ∈ 𝔟i 𝔞j-1 for all i,j. This data defines two abstract projective ℤK-modules N = 𝔞1ω1⨁ ...⨁ 𝔞nωn in Kn, P = 𝔟1η1⨁ ...⨁ 𝔟mηm in Km, and a ℤK-linear map f:N → P given by f(∑j αjωj) = ∑i (ai,jαj) ηi. This data defines the ℤK-module M = P/f(N). * Any projective ℤK-moduleprojective module M of finite type in Km can be given by a pseudo matrix (A,I). * An arbitrary ℤK module of finite type in Km, with nontrivial torsion, is given by an integral pseudo-matrix (A,I,J)
| |
| Algebraic numbers in relative extensions |
![]() |
|
We are given a number field K =
* a
* a
* a
* if an absolute
Special case:
| |
| Pseudo-bases, determinant |
![]() |
|
* The pair (A,I) is a pseudo-basis of the module it generates if the 𝔞j are nonzero, and the Aj are K-linearly independent. We call n the size of the pseudo-basis. If A is a relative matrix, the latter condition means it is square with nonzero determinant; we say that it is in Hermite Normal Form (HNF) if it is upper triangular and all the elements of the diagonal are equal to 1.
* For instance, the relative integer basis * The determinant of a pseudo-basis (A,I) is the ideal equal to the product of the determinant of A by all the ideals of I. The determinant of a pseudo-matrix is the determinant of any pseudo-basis of the module it generates.
| |
| nfdetint(nf, x) |
![]() |
Given a pseudo-matrix x, computes a
nonzero ideal contained in (i.e. multiple of) the determinant of x. This
is particularly useful in conjunction with
The library syntax is
| |
| nfhnf(nf, x, {flag = 0}) |
![]() |
Given a pseudo-matrix (A,I), finds a pseudo-basis (B,J) in Hermite normal form of the module it generates. If flag is nonzero, also return the transformation matrix U such that AU = [0|B].
The library syntax is
| |
| nfhnfmod(nf, x, detx) |
![]() |
Given a pseudo-matrix (A,I)
and an ideal detx which is contained in (read integral multiple of) the
determinant of (A,I), finds a pseudo-basis in Hermite normal form
of the module generated by (A,I). This avoids coefficient explosion.
detx can be computed using the function
The library syntax is
| |
| nfsnf(nf, x, {flag = 0}) |
![]() |
Given a torsion ℤK-module x attached to the square integral invertible pseudo-matrix (A,I,J), returns an ideal list D = [d1,...,dn] which is the Smith normal form of x. In other words, x is isomorphic to ℤK/d1⨁ ...⨁ ℤK/dn and di divides di-1 for i ≥ 2. If flag is nonzero return [D,U,V], where UAV is the identity. See Section se:ZKmodules for the definition of integral pseudo-matrix; briefly, it is input as a 3-component row vector [A,I,J] where I = [b1,...,bn] and J = [a1,...,an] are two ideal lists, and A is a square n x n matrix with columns (A1,...,An), seen as elements in Kn (with canonical basis (e1,...,en)). This data defines the ℤK module x given by (b1e1⨁ ...⨁ bnen) / (a1A1⨁ ...⨁ anAn) , The integrality condition is ai,j ∈ bi aj-1 for all i,j. If it is not satisfied, then the di will not be integral. Note that every finitely generated torsion module is isomorphic to a module of this form and even with bi = ZK for all i.
The library syntax is
| |
| rnfalgtobasis(rnf, x) |
![]() |
Expresses x on the relative
integral basis. Here, rnf is a relative number field extension L/K
as output by
The library syntax is
| |
| rnfbasis(bnf, M) |
![]() |
Let K the field represented by
bnf, as output by It is allowed to use a monic irreducible polynomial P in K[X] instead of M, in which case, M is defined as the ring of integers of K[X]/(P), viewed as a ℤK-module.
Huge discriminants, helping rnfdisc. The format [T,B] is
also accepted instead of T and computes an order which is maximal at all
maximal ideals specified by B, see
The library syntax is
| |
| rnfbasistoalg(rnf, x) |
![]() |
Computes the representation of x
as a polmod with polmods coefficients. Here, rnf is a relative number
field extension L/K as output by
The library syntax is
| |
rnfcharpoly(nf, T, a, {var = 'x}) |
![]() |
Characteristic polynomial of a over nf, where a belongs to the algebra defined by T over nf, i.e. nf[X]/(T). Returns a polynomial in variable v (x by default).
? nf = nfinit(y^2+1); ? rnfcharpoly(nf, x^2+y*x+1, x+y) %2 = x^2 + Mod(-y, y^2 + 1)*x + 1
The library syntax is
| |
| rnfconductor(bnf, T, {flag = 0}) |
![]() |
Given a bnf structure attached to a number field K, as produced
by
The result is a 3-component vector [f,bnr,H], where f is the
conductor of the extension given as a 2-component row vector
[f0,f oo ],
bnr is the attached
* If flag is 1, return [f,bnrmod, H], where
* If flag is 2, only return [f,
Huge discriminants, helping rnfdisc. The format [T,B] is
also accepted instead of T and computes the conductor of the extension
provided it factors completely over the maximal ideals specified by B,
see
The library syntax is
| |
| rnfdedekind(nf, pol, {pr}, {flag = 0}) |
![]() |
Given a number field K coded by nf and a monic polynomial P ∈ ℤK[X], irreducible over K and thus defining a relative extension L of K, applies Dedekind's criterion to the order ℤK[X]/(P), at the prime ideal pr. It is possible to set pr to a vector of prime ideals (test maximality at all primes in the vector), or to omit altogether, in which case maximality at all primes is tested; in this situation flag is automatically set to 1.
The default historic behavior (flag is 0 or omitted and pr is a
single prime ideal) is not so useful since
* basis is a pseudo-basis of an enlarged order O produced by Dedekind's criterion, containing the original order ℤK[X]/(P) with index a power of pr. Possibly equal to the original order. * max is a flag equal to 1 if the enlarged order O could be proven to be pr-maximal and to 0 otherwise; it may still be maximal in the latter case if pr is ramified in L, * v is the valuation at pr of the order discriminant. If flag is nonzero, on the other hand, we just return 1 if the order ℤK[X]/(P) is pr-maximal (resp. maximal at all relevant primes, as described above), and 0 if not. This is much faster than the default, since the enlarged order is not computed.
? nf = nfinit(y^2-3); P = x^3 - 2*y; ? pr3 = idealprimedec(nf,3)[1]; ? rnfdedekind(nf, P, pr3) %3 = [1, [[1, 0, 0; 0, 1, 0; 0, 0, 1], [1, 1, 1]], 8] ? rnfdedekind(nf, P, pr3, 1) %4 = 1
In this example,
? pr2 = idealprimedec(nf,2)[1];
? rnfdedekind(nf, P, pr2, 1)
%6 = 0
? rnfdedekind(nf, P, pr2)
%7 = [0, [[2, 0, 0; 0, 1, 0; 0, 0, 1], [[1, 0; 0, 1], [1, 0; 0, 1],
[1, 1/2; 0, 1/2]]], 2]
The enlarged order is not proven to be
? B = rnfpseudobasis(nf, P)
%8 = [[1, 0, 0; 0, 1, 0; 0, 0, 1], [1, 1, [1, 1/2; 0, 1/2]],
[162, 0; 0, 162], -1]
? idealval(nf,B[3], pr2)
%9 = 2
It is possible to use this routine with nonmonic
P = ∑i ≤ n pi Xi ∈ ℤK[X] if flag = 1;
in this case, we test maximality of Dedekind's order generated by
1, pn α, pnα2 + pn-1α,...,
pnαn-1 + pn-1αn-2 +...+ p1α.
The routine will fail if P vanishes on the projective line over the residue
field ℤK/
The library syntax is
| |
| rnfdet(nf, M) |
![]() |
Given a pseudo-matrix M over the maximal order of nf, computes its determinant.
The library syntax is
| |
| rnfdisc(nf, T) |
![]() |
Given an nf structure attached to a number field K, as output
by
Huge discriminants, helping rnfdisc. The format [T,B] is
also accepted instead of T and computes an order which is maximal at all
maximal ideals specified by B, see
The library syntax is
| |
| rnfeltabstorel(rnf, x) |
![]() |
Let rnf be a relative number field extension L/K as output by
* as a polynomial modulo the absolute equation
* or in terms of the absolute ℤ-basis for ℤL if rnf
contains one (as in Computes x as an element of the relative extension L/K as a polmod with polmod coefficients. If x is actually rational, return it as a rational number:
? K = nfinit(y^2+1); L = rnfinit(K, x^2-y); ? L.polabs %2 = x^4 + 1 ? rnfeltabstorel(L, Mod(x, L.polabs)) %3 = Mod(x, x^2 + Mod(-y, y^2 + 1)) ? rnfeltabstorel(L, 1/3) %4 = 1/3 ? rnfeltabstorel(L, Mod(x, x^2-y)) %5 = Mod(x, x^2 + Mod(-y, y^2 + 1)) ? rnfeltabstorel(L, [0,0,0,1]~) \\ ZL not initialized yet *** at top-level: rnfeltabstorel(L,[0, *** ^ — — — — — — -- *** rnfeltabstorel: incorrect type in rnfeltabstorel, apply nfinit(rnf). ? nfinit(L); \\ initialize now ? rnfeltabstorel(L, [0,0,0,1]~) %6 = Mod(Mod(y, y^2 + 1)*x, x^2 + Mod(-y, y^2 + 1)) ? rnfeltabstorel(L, [1,0,0,0]~) %7 = 1
The library syntax is
| |
| rnfeltdown(rnf, x, {flag = 0}) |
![]() |
rnf being a relative number
field extension L/K as output by
? K = nfinit(y^2+1); L = rnfinit(K, x^2-y);
? L.pol
%2 = x^4 + 1
? rnfeltdown(L, Mod(x^2, L.pol))
%3 = Mod(y, y^2 + 1)
? rnfeltdown(L, Mod(x^2, L.pol), 1)
%4 = [0, 1]~
? rnfeltdown(L, Mod(y, x^2-y))
%5 = Mod(y, y^2 + 1)
? rnfeltdown(L, Mod(y,K.pol))
%6 = Mod(y, y^2 + 1)
? rnfeltdown(L, Mod(x, L.pol))
*** at top-level: rnfeltdown(L,Mod(x,x
*** ^ — — — — — — --
*** rnfeltdown: domain error in rnfeltdown: element not in the base field
? rnfeltdown(L, Mod(y, x^2-y), 1) \\ as a t_COL
%7 = [0, 1]~
? rnfeltdown(L, [0,0,1,0]~) \\ not allowed without absolute nf struct
*** rnfeltdown: incorrect type in rnfeltdown (t_COL).
? nfinit(L); \\ add absolute nf structure to L
? rnfeltdown(L, [0,0,1,0]~) \\ now OK
%8 = Mod(y, y^2 + 1)
If we had started with
The library syntax is
| |
| rnfeltnorm(rnf, x) |
![]() |
rnf being a relative number field extension L/K as output by
? K = nfinit(y^2+1); L = rnfinit(K, x^2-y); ? rnfeltnorm(L, Mod(x, L.pol)) %2 = Mod(x, x^2 + Mod(-y, y^2 + 1)) ? rnfeltnorm(L, 2) %3 = 4
The library syntax is
| |
| rnfeltreltoabs(rnf, x) |
![]() |
rnf being a relative
number field extension L/K as output by
? K = nfinit(y^2+1); L = rnfinit(K, x^2-y); ? L.polabs %2 = x^4 + 1 ? rnfeltreltoabs(L, Mod(x, L.pol)) %3 = Mod(x, x^4 + 1) ? rnfeltreltoabs(L, Mod(y, x^2-y)) %4 = Mod(x^2, x^4 + 1) ? rnfeltreltoabs(L, Mod(y,K.pol)) %5 = Mod(x^2, x^4 + 1)
If the input is actually rational, then
? rnfeltreltoabs(L, Mod(2, K.pol)) %6 = 2
The library syntax is
| |
| rnfelttrace(rnf, x) |
![]() |
rnf being a relative number field extension L/K as output by
? K = nfinit(y^2+1); L = rnfinit(K, x^2-y); ? rnfelttrace(L, Mod(x, L.pol)) %2 = 0 ? rnfelttrace(L, 2) %3 = 4
The library syntax is
| |
| rnfeltup(rnf, x, {flag = 0}) |
![]() |
rnf being a relative number field extension L/K as output by
? K = nfinit(y^2+1); L = rnfinit(K, x^2-y); ? L.pol %2 = x^4 + 1 ? rnfeltup(L, Mod(y, K.pol)) %3 = Mod(x^2, x^4 + 1) ? rnfeltup(L, y) %4 = Mod(x^2, x^4 + 1) ? rnfeltup(L, [1,2]~) \\ in terms of K.zk %5 = Mod(2*x^2 + 1, x^4 + 1) ? rnfeltup(L, y, 1) \\ in terms of nfinit(L).zk %6 = [0, 1, 0, 0]~ ? rnfeltup(L, [1,2]~, 1) %7 = [1, 2, 0, 0]~ ? rnfeltup(L, [1,0]~) \\ rational %8 = 1
The library syntax is
| |
| rnfequation(nf, pol, {flag = 0}) |
![]() |
Given a number field nf as output by
The main variable of nf must be of lower priority than that
of pol (see Section se:priority). Note that for efficiency, this does
not check whether the relative equation is irreducible over nf, but
only if it is squarefree. If it is reducible but squarefree, the result will
be the absolute equation of the étale algebra defined by pol. If
pol is not squarefree, raise an
? rnfequation(y^2+1, x^2 - y) %1 = x^4 + 1 ? T = y^3-2; rnfequation(nfinit(T), (x^3-2)/(x-Mod(y,T))) %2 = x^6 + 108 \\ Galois closure of Q(2^(1/3)) If flag is nonzero, outputs a 3-component row vector [z,a,k], where * z is the absolute equation of L over ℚ, as in the default behavior,
* a expresses as a * k is a small integer such that θ = β+kα is a root of z, where β is a root of pol. It is guaranteed that k = 0 whenever ℚ(β) = L.
? T = y^3-2; pol = x^2 +x*y + y^2; ? [z,a,k] = rnfequation(T, pol, 1); ? z %3 = x^6 + 108 ? subst(T, y, a) %4 = 0 ? alpha= Mod(y, T); ? beta = Mod(x*Mod(1,T), pol); ? subst(z, x, beta + k*alpha) %7 = 0
The library syntax is
| |
| rnfhnfbasis(bnf, M) |
![]() |
Given a bnf attached to a number field K and a projective
ℤK-module M given by a pseudo-matrix, returns either a true HNF basis
of M if one exists, or zero otherwise. If M is a polynomial with
coefficients in K, replace it by the pseudo-matrix returned by
The library syntax is
| |
| rnfidealabstorel(rnf, x) |
![]() |
Let rnf be a relative
number field extension L/K as output by
Let
? K = nfinit(y^2+1); rnf = rnfinit(K, x^2-y); Labs = nfinit(rnf); ? m = idealhnf(Labs, 17, x^3+2); \\ some ideal in HNF wrt. Labs.zk ? B = rnfidealabstorel(rnf, m) %3 = [[1, 8; 0, 1], [[17, 4; 0, 1], 1]] \\ pseudo-basis for m as ZK-module ? A = rnfidealreltoabs(rnf, B) %4 = [17, x^2 + 4, x + 8, x^3 + 8*x^2] \\ Z-basis for m in Q[x]/(rnf.polabs) ? mathnf(matalgtobasis(Labs, A)) == m %5 = 1
If on the other hand, we do not have a
? K = nfinit(y^2+1); rnf = rnfinit(K, x^2-y); ? rnfidealabstorel(rnf, [17, x^2 + 4, x + 8, x^3 + 8*x^2]) %2 = [[1, 8; 0, 1], [[17, 4; 0, 1], 1]] ? rnfidealabstorel(rnf, Mod([17, y + 4, x + 8, y*x + 8*y], x^2-y)) %3 = [[1, 8; 0, 1], [[17, 4; 0, 1], 1]]
The library syntax is
| |
| rnfidealdown(rnf, x) |
![]() |
Let rnf be a relative number
field extension L/K as output by
The library syntax is
| |
| rnfidealfactor(rnf, x) |
![]() |
Factor into prime ideal powers the
ideal x in the attached absolute number field L =
? rnf = rnfinit(nfinit(y^2+1), x^2-y+1); ? rnfidealfactor(rnf, y+1) \\ P2^2 %2 = [[2, [0,0,1,0]~, 4, 1, [0,0,0,2;0,0,-2,0;-1,-1,0,0;1,-1,0,0]] 2] ? rnfidealfactor(rnf, x) \\ P2 %3 = [[2, [0,0,1,0]~, 4, 1, [0,0,0,2;0,0,-2,0;-1,-1,0,0;1,-1,0,0]] 1] ? L = nfinit(rnf); ? id = idealhnf(L, idealhnf(L, 25, (x+1)^2)); ? idealfactor(L, id) == rnfidealfactor(rnf, id) %6 = 1
Note that ideals of the base field K must be explicitly
lifted to L via
The library syntax is
| |
| rnfidealhnf(rnf, x) |
![]() |
rnf being a relative number
field extension L/K as output by
The library syntax is
| |
| rnfidealmul(rnf, x, y) |
![]() |
rnf being a relative number
field extension L/K as output by
The library syntax is
| |
| rnfidealnormabs(rnf, x) |
![]() |
Let rnf be a relative
number field extension L/K as output by
idealnorm(rnf, rnfidealnormrel(rnf,x)) but faster.
The library syntax is
| |
| rnfidealnormrel(rnf, x) |
![]() |
Let rnf be a relative
number field extension L/K as output by
The library syntax is
| |
| rnfidealprimedec(rnf, pr) |
![]() |
Let rnf be a relative number
field extension L/K as output by
? K = nfinit(y^2+1); rnf = rnfinit(K, x^3+y+1); ? pr = idealprimedec(K, 2)[1]; ? S = rnfidealprimedec(rnf, pr); ? #S %4 = 1
The relative ramification indices and residue degrees
can be obtained as
The argument pr is also allowed to be a prime number p, in which
case the function returns a pair of vectors
? [SK,SL] = rnfidealprimedec(rnf, 5); ? [#SK, vector(#SL,i,#SL[i])] %6 = [2, [2, 2]]
The library syntax is
| |
| rnfidealreltoabs(rnf, x, {flag = 0}) |
![]() |
Let rnf be a relative
number field extension L/K as output by
? K = nfinit(y^2+1); rnf = rnfinit(K, x^2-y); ? P = idealprimedec(K,2)[1]; ? P = rnfidealup(rnf, P) %3 = [2, x^2 + 1, 2*x, x^3 + x] ? Prel = rnfidealhnf(rnf, P) %4 = [[1, 0; 0, 1], [[2, 1; 0, 1], [2, 1; 0, 1]]] ? rnfidealreltoabs(rnf,Prel) %5 = [2, x^2 + 1, 2*x, x^3 + x] ? rnfidealreltoabs(rnf,Prel,1) %6 = [2 1 0 0] [0 1 0 0] [0 0 2 1] [0 0 0 1] The reason why we do not return by default (flag = 0) the customary HNF in terms of a fixed ℤ-basis for ℤL is precisely because a rnf does not contain such a basis by default. Completing the structure so that it contains a nf structure for L is polynomial time but costly when the absolute degree is large, thus it is not done by default. Note that setting flag = 1 will complete the rnf.
The library syntax is
| |
| rnfidealtwoelt(rnf, x) |
![]() |
rnf being a relative
number field extension L/K as output by
The library syntax is
| |
| rnfidealup(rnf, x, {flag = 0}) |
![]() |
Let rnf be a relative number
field extension L/K as output by
? K = nfinit(y^2+1); rnf = rnfinit(K, x^2-y); ? P = idealprimedec(K,2)[1]; ? rnfidealup(rnf, P) %3 = [2, x^2 + 1, 2*x, x^3 + x] ? rnfidealup(rnf, P,1) %4 = [2 1 0 0] [0 1 0 0] [0 0 2 1] [0 0 0 1] The reason why we do not return by default (flag = 0) the customary HNF in terms of a fixed ℤ-basis for ℤL is precisely because a rnf does not contain such a basis by default. Completing the structure so that it contains a nf structure for L is polynomial time but costly when the absolute degree is large, thus it is not done by default. Note that setting flag = 1 will complete the rnf.
The library syntax is
| |
| rnfinit(nf, T, {flag = 0}) |
![]() |
Given an nf structure attached to a number field K, as output by
The result is a row vector, whose components are technical. We let m = [K:ℚ] the degree of the base field, n = [L:K] the relative degree, r1 and r2 the number of real and complex places of K. Access to this information via member functions is preferred since the specific data organization specified below will change in the future.
If flag = 1, add an nf structure attached to L to rnf.
This is likely to be very expensive if the absolute degree mn is large,
but fixes an integer basis for ℤL as a ℤ-module and allows to input
and output elements of L in absolute form: as
rnf[1]( rnf[2] contains the integer basis [A,d] of K, as (integral) elements of L/ℚ. More precisely, A is a vector of polynomial with integer coefficients, d is a denominator, and the integer basis is given by A/d.
rnf[3] (
rnf[4](
rnf[5](
rnf[7] ( rnf[8] is the inverse matrix of the integral basis matrix, with coefficients polmods in nf. rnf[9] is currently unused.
rnf[10] (
rnf[11] is an extension of k is a small integer such that, if β is an abstract root of T and α the generator of K given above, then P(β + kα) = 0. It is guaranteed that k = 0 if ℚ(β) = L. Caveat. Be careful if k != 0 when dealing simultaneously with absolute and relative quantities since L = ℚ(β + kα) = K(α), and the generator chosen for the absolute extension is not the same as for the relative one. If this happens, one can of course go on working, but we advise to change the relative polynomial so that its root becomes β + k α. Typical GP instructions would be
[P,a,k] = rnfequation(K, T, 1);
if (k, T = subst(T, x, x - k*Mod(y, K.pol)));
L = rnfinit(K, T);
rnf[12] is by default unused and set equal to 0. This field is used
to store further information about the field as it becomes available (which
is rarely needed, hence would be too expensive to compute during the initial
Huge discriminants, helping rnfdisc. When T has a
discriminant which is difficult to factor, it is hard to compute
ℤL. As in * an integer: the list of all maximal ideals above a rational prime p < B. * a vector of rational primes or prime ideals: the list of all maximal ideals dividing an element in the list. Instead of ℤL, this produces an order which is maximal at all such maximal ideals primes. The result may actually be a complete and correct rnf structure if the relative ideal discriminant factors completely over this list of maximal ideals but this is not guaranteed. In general, the order may not be maximal at primes 𝔭 not in the list such that 𝔭2 divides the relative ideal discriminant.
The library syntax is
| |
| rnfisabelian(nf, T) |
![]() |
T being a relative polynomial with coefficients in nf, return 1 if it defines an abelian extension, and 0 otherwise.
? K = nfinit(y^2 + 23); ? rnfisabelian(K, x^3 - 3*x - y) %2 = 1
The library syntax is
| |
| rnfisfree(bnf, M) |
![]() |
Given a bnf attached to a number field K and
a projective ℤK-module M given by a pseudo-matrix, return true (1) if
M is free else return false (0). If M is a polynomial with coefficients
in K, replace it by the pseudo-matrix returned by
The library syntax is
| |
| rnfislocalcyclo(rnf) |
![]() |
Let rnf be a relative number field extension L/K as output
by
? K = nfinit(y^2 + y + 1); ? L = rnfinit(K, x^3 - y); /* = K(zeta9), globally cyclotomic */ ? rnfislocalcyclo(L) %3 = 1 \\ we expect 3-adic continuity by Krasner's lemma ? vector(5, i, rnfislocalcyclo(rnfinit(K, x^3 - y + 3^i))) %5 = [0, 1, 1, 1, 1]
The library syntax is
| |
| rnfisnorm(T, a, {flag = 0}) |
![]() |
Similar to
The output is a vector [x,q], where a = Norm(x)*q. The algorithm looks for a solution x which is an S-integer, with S a list of places of K containing at least the ramified primes, the generators of the class group of L, as well as those primes dividing a. If L/K is Galois, then this is enough but you may want to add more primes to S to produce different elements, possibly smaller; otherwise, flag is used to add more primes to S: all the places above the primes p ≤ flag (resp. p|flag) if flag > 0 (resp. flag < 0). The answer is guaranteed (i.e. a is a norm iff q = 1) if the field is Galois, or, under GRH, if S contains all primes less than 4log2|disc(M)|, where M is the normal closure of L/K.
If
bnf = bnfinit(y^3 + y^2 - 2*y - 1); p = x^2 + Mod(y^2 + 2*y + 1, bnf.pol); T = rnfisnorminit(bnf, p); rnfisnorm(T, 17) checks whether 17 is a norm in the Galois extension ℚ(β) / ℚ(α), where α3 + α2 - 2α - 1 = 0 and β2 + α2 + 2α + 1 = 0 (it is).
The library syntax is
| |
| rnfisnorminit(pol, polrel, {flag = 2}) |
![]() |
Let K be defined by a root of pol, and L/K the extension defined
by the polynomial polrel. As usual, pol can in fact be an nf,
or bnf, etc; if pol has degree 1 (the base field is ℚ),
polrel is also allowed to be an nf, etc. Computes technical data needed
by If flag = 0, does not care whether L/K is Galois or not.
If flag = 1, L/K is assumed to be Galois (unchecked), which speeds up
If flag = 2, lets the routine determine whether L/K is Galois.
The library syntax is
| |
| rnfkummer(bnr, {subgp}) |
![]() |
This function is deprecated, use
The library syntax is
| |
| rnflllgram(nf, pol, order) |
![]() |
Given a polynomial
pol with coefficients in nf defining a relative extension L and
a suborder order of L (of maximal rank), as output by
The library syntax is
| |
| rnfnormgroup(bnr, pol) |
![]() |
bnr being a big ray
class field as output by
The library syntax is
| |
| rnfpolred(nf, pol) |
![]() |
This function is obsolete: use
Remark. This function is based on an incomplete reduction
theory of lattices over number fields, implemented by
The library syntax is
| |