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