#### 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[j-1],x(j)) is the minimal polynomial for a[j] over k(a[1],...,a[j-1])
  (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,y2-x;                  // 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(x2-2,y2-3));      // compute Q(sqrt(2),sqrt(3))
    j[1];
    ==> y4-10y2+1
    j[2];
    ==> 1/2y3-9/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.

User manual for Singular version 4-0-3, 2016, generated by texi2html.