Function: nfisincl
Section: number_fields
C-Name: nfisincl
Prototype: GG
Help: nfisincl(f,g): let f and g define number fields, either irreducible
 rational polynomials or number fields as output by nfinit; tests whether the
 number field f is isomorphic to a subfield of g. Return 0 if not, and
 otherwise all the isomorphisms.
Doc: let $f$ and $g$ define number fields, where $f$ and $g$ are irreducible
 polynomials in $\Q[X]$ and \var{nf} structures as output by \kbd{nfinit}.
 Tests whether the number field $f$ is conjugate to a subfield of the field
 $g$. If they are not, the output is the integer 0. If they are, the output is
 a vector of polynomials, each polynomial $a$ representing an embedding
 i.e.~being such that $g\mid f\circ a$. If either $f$ or $g$ is not
 irreducible, the result is undefined.

 \bprog
 ? T = x^6 + 3*x^4 - 6*x^3 + 3*x^2 + 18*x + 10;
 ? U = x^3 + 3*x^2 + 3*x - 2

 ? v = nfisincl(U, T);
 %2 = [24/179*x^5-27/179*x^4+80/179*x^3-234/179*x^2+380/179*x+94/179]

 ? subst(U, x, Mod(v[1],T))
 %3 = Mod(0, x^6 + 3*x^4 - 6*x^3 + 3*x^2 + 18*x + 10)
 ? #nfisincl(x^2+1, T) \\ two embeddings
 %4 = 2

 \\ same result with nf structures
 ? nfisincl(U, L = nfinit(T)) == v
 %5 = 1
 ? nfisincl(K = nfinit(U), T) == v
 %6 = 1
 ? nfisincl(K, L) == v
 %7 = 1

 \\ comparative bench: an nf is a little faster, esp. for the subfield
 ? B = 10^3;
 ? for (i=1, B, nfisincl(U,T))
 time = 712 ms.

 ? for (i=1, B, nfisincl(K,T))
 time = 485 ms.

 ? for (i=1, B, nfisincl(U,L))
 time = 704 ms.

 ? for (i=1, B, nfisincl(K,L))
 time = 465 ms.
 @eprog\noindent Using an \var{nf} structure for the potential subfield is
 faster if the structure is already available. On the other hand, the gain in
 \kbd{nfisincl} is usually not sufficient to make it worthwhile to initialize
 only for that purpose.
 \bprog
 ? for (i=1, B, nfinit(U))
 time = 308 ms.
 @eprog
