
D.4.23.1 primitive
Procedure from library primitiv.lib (see primitiv_lib).
 Usage:
 primitive(i); i ideal
 Assume:
 i is given by generators m[1],...,m[n] such that for j=1,...,n
 m[j] is a polynomial in k[x(1),...,x(j)]
 m[j](a[1],...,a[j1],x(j)) is the minimal polynomial for a[j] over
k(a[1],...,a[j1])
(k the ground field of the current basering and x(1),...,x(n)
the ring variables).
 Return:
 ideal j in k[x(n)] with
 j[1] a minimal polynomial for a primitive element b of
k(a[1],...,a[n]) over k,
 j[2],...,j[n+1] polynomials in k[x(n)] such that j[i+1](b)=a[i]
for i=1,...,n.
 Note:
 the number of variables in the basering has to be exactly n,
the number of given generators (i.e., minimal polynomials).
If the ground field k has only a few elements it may happen that no
linear combination of a[1],...,a[n] is a primitive element. In this
case primitive(i) returns the zero ideal, and one should use
primitive_extra(i) instead.
Example:
 LIB "primitiv.lib";
ring exring=0,(x,y),dp;
ideal i=x2+1,y2x; // compute Q(i,i^(1/2))=:L
ideal j=primitive(i);
j[1]; // L=Q(a) with a=(1)^(1/4)
==> y4+1
j[2]; // i=a^2
==> y2
j[3]; // i^(1/2)=a
==> y
// the 2nd element was already primitive!
j=primitive(ideal(x22,y23)); // compute Q(sqrt(2),sqrt(3))
j[1];
==> y410y2+1
j[2];
==> 1/2y39/2y
j[3];
==> 1/2y3+11/2y
// no element was primitive  the calculation of primitive elements
// is based on a random choice.
 See also:
primitive_extra.
