Function: bnrisprincipal Section: number_fields C-Name: bnrisprincipal Prototype: GGD1,L, Help: bnrisprincipal(bnr,x,{flag=1}): bnr being output by bnrinit and x being an ideal coprime to bnr.mod, returns [v,alpha], where v is the vector of exponents on the ray class group generators and alpha is the generator of the resulting principal ideal. If (optional) flag is set to 0, output only v. Doc: let \var{bnr} be the ray class group data output by \kbd{bnrinit}$(,,1)$ and let $x$ be an ideal in any form, coprime to the modulus $f = \kbd{bnr.mod}$. Solves the discrete logarithm problem in the ray class group, with respect to the generators \kbd{bnr.gen}, in a way similar to \tet{bnfisprincipal}. If $x$ is not coprime to the modulus of \var{bnr} the result is undefined. If $\fl = 1$, returns a 2-component vector $v$ where $v[1]$ is the vector of components of $x$ on the ray class group generators, $v[2]$ is an element $\alpha$ congruent to $1~\text{mod}^* f$ such that $x = \alpha \prod_i g_i^{x_i}$. If $\fl=0$, outputs only $v_1$. In that case, \var{bnr} need not contain the ray class group generators, i.e.~it may be created with \kbd{bnrinit}$(,,0)$; in that case, although \kbd{bnr.gen} is undefined, we can still define canonical generators attached to the \kbd{bnr} and compute with respect to them. \bprog ? K = bnfinit(x^2 - 30); bnr = bnrinit(K, [4, [1,1]]); ? bnr.clgp \\ ray class group is isomorphic to Z/4 x Z/2 x Z/2 %2 = [16, [4, 2, 2]] ? P = idealprimedec(K, 3)[1]; \\ a prime ideal above 3 ? bnrisprincipal(bnr,P) %4 = [[1, 0, 0]~, 1] ? bnrisprincipal(bnr,P, 0) \\ omit the principal part %4 = [1, 0, 0]~ @eprog Variant: Instead of hardcoded numerical flags, one should rather use \fun{GEN}{isprincipalray}{GEN bnr, GEN x} for $\kbd{flag} = 0$, and if you want generators: \bprog bnrisprincipal(bnr, x, nf_GEN) @eprog