Testing latest pari + WASM + node.js... and it works?! Wow.
License: GPL3
ubuntu2004
Function: bnrclassfield
Section: number_fields
C-Name: bnrclassfield
Prototype: GDGD0,L,p
Help: bnrclassfield(bnr,{subgp},{flag=0}): bnr being as output by bnrinit,
find a relative equation for the class field corresponding to the congruence
subgroup described by (bnr,subgp). If flag=0, return a vector of polynomials
such that the compositum of the corresponding fields is the class field; if
flag=1 return a single relative polynomial; if flag=2 return a single
absolute polynomial.
Doc: \var{bnr} being as output by \kbd{bnrinit}, returns a relative equation
for the class field corresponding to the congruence group defined by
$(\var{bnr},\var{subgp})$ (the full ray class field if \var{subgp} is
omitted). The subgroup can also be a \typ{INT}~$n$,
meaning~$n \cdot \text{Cl}_f$. The function also handles a vector of
subgroup, e.g, from \tet{subgrouplist} and returns the vector of individual
results in this case.
If $\fl=0$, returns a vector of polynomials such that the compositum of the
corresponding fields is the class field; if $\fl=1$ returns a single
polynomial; if $\fl=2$ returns a single absolute polynomial.
\bprog
? bnf = bnfinit(y^3+14*y-1); bnf.cyc
%1 = [4, 2]
? pol = bnrclassfield(bnf,,1) \\ Hilbert class field
%2 = x^8 - 2*x^7 + ... + Mod(11*y^2 - 82*y + 116, y^3 + 14*y - 1)
? rnfdisc(bnf,pol)[1]
%3 = 1
? bnr = bnrinit(bnf,3*5*7); bnr.cyc
%4 = [24, 12, 12, 2]
? bnrclassfield(bnr,2) \\ maximal 2-elementary subextension
%5 = [x^2 + (-21*y - 105), x^2 + (-5*y - 25), x^2 + (-y - 5), x^2 + (-y - 1)]
\\ quadratic extensions of maximal conductor
? bnrclassfield(bnr, subgrouplist(bnr,[2]))
%6 = [[x^2 - 105], [x^2 + (-105*y^2 - 1260)], [x^2 + (-105*y - 525)],
[x^2 + (-105*y - 105)]]
? #bnrclassfield(bnr,subgrouplist(bnr,[2],1)) \\ all quadratic extensions
%7 = 15
@eprog\noindent When the subgroup contains $n \text{Cl}_f$, where $n$ is fixed,
it is advised to directly compute the \kbd{bnr} modulo $n$ to avoid expensive
discrete logarithms:
\bprog
? bnf = bnfinit(y^2-5); p = 1594287814679644276013;
? bnr = bnrinit(bnf,p); \\ very slow
time = 24,146 ms.
? bnrclassfield(bnr, 2) \\ ... even though the result is trivial
%3 = [x^2 - 1594287814679644276013]
? bnr2 = bnrinit(bnf,p,,2); \\ now fast
time = 1 ms.
? bnrclassfield(bnr2, 2)
%5 = [x^2 - 1594287814679644276013]
@eprog\noindent This will save a lot of time when the modulus contains a
maximal ideal whose residue field is large.