1 #ifndef ALGEXT_H
2 #define ALGEXT_H
3 /****************************************
4 *  Computer Algebra System SINGULAR     *
5 ****************************************/
6 /*
7 * ABSTRACT: numbers in an algebraic extension field K[a] / < f(a) >
8 *           Assuming that we have a coeffs object cf, then these numbers
9 *           are polynomials in the polynomial ring K[a] represented by
10 *           cf->extRing.
11 *           IMPORTANT ASSUMPTIONS:
12 *           1.) So far we assume that cf->extRing is a valid polynomial
13 *               ring in exactly one variable, i.e., K[a], where K is allowed
14 *               to be any field (representable in SINGULAR and which may
15 *               itself be some extension field, thus allowing for extension
16 *               towers).
17 *           2.) Moreover, this implementation assumes that
18 *               cf->extRing->qideal is not NULL but an ideal with at
19 *               least one non-zero generator which may be accessed by
20 *               cf->extRing->qideal->m[0] and which represents the minimal
21 *               polynomial f(a) of the extension variable 'a' in K[a].
22 *           3.) As soon as an std method for polynomial rings becomes
23 *               availabe, all reduction steps modulo f(a) should be replaced
24 *               by a call to std. Moreover, in this situation one can finally
25 *               move from K[a] / < f(a) > to
26 *                  K[a_1, ..., a_s] / I, with I some zero-dimensional ideal
27 *                                        in K[a_1, ..., a_s] given by a lex
28 *                                        Gröbner basis.
29 *               The code in algext.h and algext.cc is then capable of
30 *               computing in K[a_1, ..., a_s] / I.
31 */
32 
33 #include "coeffs/coeffs.h"
34 #include "polys/monomials/ring.h"
35 
36 /// struct for passing initialization parameters to naInitChar
37 typedef struct { ring r; /*ideal i;*/ } AlgExtInfo; // `r.qideal` is supposed to be `i`
38 
39 /// Get a mapping function from src into the domain of this type (n_algExt)
40 nMapFunc naSetMap(const coeffs src, const coeffs dst);
41 
42 /// Initialize the coeffs object
43 BOOLEAN  naInitChar(coeffs cf, void* infoStruct);
44 BOOLEAN n2pInitChar(coeffs cf, void * infoStruct);
45 
46 /// if m == var(i)/1 => return i,
47 int naIsParam(number, const coeffs);
48 
49 /// assumes that p and q are univariate polynomials in r,
50 ///   mentioning the same variable;
51 ///   assumes a global monomial ordering in r;
52 ///   assumes that not both p and q are NULL;
53 ///   returns the gcd of p and q;
54 ///   moreover, afterwards pFactor and qFactor contain appropriate
55 ///   factors such that gcd(p, q) = p * pFactor + q * qFactor;
56 ///   leaves p and q unmodified
57 poly      p_ExtGcd(poly p, poly &pFactor, poly q, poly &qFactor, ring r);
58 
59 char* naCoeffName(const coeffs r);
60 #endif
61 /* ALGEXT_H */
62