algext.h
Go to the documentation of this file.
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 BOOLEAN n2pInitChar(coeffs cf, void * infoStruct);
48 
49 /// if m == var(i)/1 => return i,
50 int naIsParam(number, const coeffs);
51 
52 struct spolyrec;
53 typedef struct spolyrec polyrec;
54 typedef polyrec * poly;
55 
56 /// assumes that p and q are univariate polynomials in r,
57 /// mentioning the same variable;
58 /// assumes a global monomial ordering in r;
59 /// assumes that not both p and q are NULL;
60 /// returns the gcd of p and q;
61 /// moreover, afterwards pFactor and qFactor contain appropriate
62 /// factors such that gcd(p, q) = p * pFactor + q * qFactor;
63 /// leaves p and q unmodified
64 poly p_ExtGcd(poly p, poly &pFactor, poly q, poly &qFactor, ring r);
65 
66 char* naCoeffString(const coeffs r); // will be reused in tranext.cc...
67 char* naCoeffName(const coeffs r);
68 #endif
69 /* ALGEXT_H */
ring r
Definition: algext.h:40
return P p
Definition: myNF.cc:203
nMapFunc naSetMap(const coeffs src, const coeffs dst)
Get a mapping function from src into the domain of this type (n_algExt)
Definition: algext.cc:1030
Definition: ring.h:255
const ring r
Definition: syzextra.cc:208
Coefficient rings, fields and other domains suitable for Singular polynomials.
char * naCoeffString(const coeffs r)
Definition: algext.cc:1340
The main handler for Singular numbers which are suitable for Singular polynomials.
number(* nMapFunc)(number a, const coeffs src, const coeffs dst)
maps "a", which lives in src, into dst
Definition: coeffs.h:73
int naIsParam(number, const coeffs)
if m == var(i)/1 => return i,
Definition: algext.cc:1106
polyrec * poly
Definition: algext.h:54
CanonicalForm cf
Definition: cfModGcd.cc:4024
The following sip_sideal structure has many different uses thoughout Singular. Basic use-cases for it...
Definition: simpleideals.h:18
struct for passing initialization parameters to naInitChar
Definition: algext.h:40
poly p_ExtGcd(poly p, poly &pFactor, poly q, poly &qFactor, ring r)
assumes that p and q are univariate polynomials in r, mentioning the same variable; assumes a global ...
Definition: algext.cc:223
BOOLEAN n2pInitChar(coeffs cf, void *infoStruct)
Definition: algext.cc:1691
char * naCoeffName(const coeffs r)
Definition: algext.cc:1363
polyrec * poly
Definition: hilb.h:10
int BOOLEAN
Definition: auxiliary.h:85
BOOLEAN naInitChar(coeffs cf, void *infoStruct)
Initialize the coeffs object.
Definition: algext.cc:1406