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 | |
---|
35 | // Forward declarations |
---|
36 | struct ip_sring; typedef struct ip_sring * ring; |
---|
37 | struct sip_sideal; typedef struct sip_sideal * ideal; |
---|
38 | |
---|
39 | /// struct for passing initialization parameters to naInitChar |
---|
40 | typedef struct { ring r; /*ideal i;*/ } AlgExtInfo; // `r.qideal` is supposed to be `i` |
---|
41 | |
---|
42 | /// Get a mapping function from src into the domain of this type (n_algExt) |
---|
43 | nMapFunc naSetMap(const coeffs src, const coeffs dst); |
---|
44 | |
---|
45 | /// Initialize the coeffs object |
---|
46 | BOOLEAN naInitChar(coeffs cf, void* infoStruct); |
---|
47 | |
---|
48 | /// if m == var(i)/1 => return i, |
---|
49 | int naIsParam(number, const coeffs); |
---|
50 | |
---|
51 | #endif |
---|
52 | /* ALGEXT_H */ |
---|