# Singular          #### D.8.6.3 roots

Procedure from library `zeroset.lib` (see zeroset_lib).

Usage:
roots(f); where f is a polynomial

Purpose:
compute all roots of f in a finite extension of the ground field without multiplicities.

Return:
ring, a polynomial ring over an extension field of the ground field, containing a list 'theRoots' and polynomials 'newA' and 'f':
 ``` - 'theRoots' is the list of roots of the polynomial f (no multiplicities) - if the ground field is Q(a') and the extension field is Q(a), then 'newA' is the representation of a' in Q(a). If the basering contains a parameter 'a' and the minpoly remains unchanged then 'newA' = 'a'. If the basering does not contain a parameter then 'newA' = 'a' (default). - 'f' is the polynomial f in Q(a) (a' being substituted by 'newA') ```

Assume:
ground field to be Q or a simple extension of Q given by a minpoly

Example:
 ```LIB "zeroset.lib"; ring R = (0,a), x, lp; minpoly = a2+1; poly f = x3 - a; def R1 = roots(f); ==> ==> // 'roots' created a new ring which contains the list 'theRoots' and ==> // the polynomials 'f' and 'newA' ==> // To access the roots, newA and the new representation of f, type ==> def R = roots(f); setring R; theRoots; newA; f; ==> setring R1; minpoly; ==> (a4-a2+1) newA; ==> (a3) f; ==> x3+(-a3) theRoots; ==> : ==> (-a3) ==> : ==> (a) ==> : ==> (a3-a) map F; F = theRoots; F(f); ==> 0 ```

### Misc 