source: git/libpolys/polys/ext_fields/algext.h @ e961571

spielwiese
Last change on this file since e961571 was 20c540, checked in by Oleksandr Motsak <motsak@…>, 12 years ago
Preparing the removal of Frank's p_Monic/p_Gcd/p_ExtGcd from common use chg: moved most of the functions (with helpers) into algext.cc and made them static NOTE: p_PolyDiv stayed in p_polys.cc as it is used in convFactoryASingA NOTE: p_ExtGcd also is made public via algext.h (needed elsewhere?)
  • Property mode set to 100644
File size: 2.8 KB
Line 
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
36struct ip_sring; typedef struct ip_sring * ring;
37struct sip_sideal; typedef struct sip_sideal * ideal;
38
39/// struct for passing initialization parameters to naInitChar
40typedef 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)
43nMapFunc naSetMap(const coeffs src, const coeffs dst);
44
45/// Initialize the coeffs object
46BOOLEAN  naInitChar(coeffs cf, void* infoStruct);
47
48/// if m == var(i)/1 => return i,
49int naIsParam(number, const coeffs);
50
51struct  spolyrec;
52typedef struct spolyrec    polyrec;
53typedef polyrec *          poly;
54
55/// assumes that p and q are univariate polynomials in r,
56///   mentioning the same variable;
57///   assumes a global monomial ordering in r;
58///   assumes that not both p and q are NULL;
59///   returns the gcd of p and q;
60///   moreover, afterwards pFactor and qFactor contain appropriate
61///   factors such that gcd(p, q) = p * pFactor + q * qFactor;
62///   leaves p and q unmodified
63poly      p_ExtGcd(poly p, poly &pFactor, poly q, poly &qFactor, ring r);
64
65
66#endif
67/* ALGEXT_H */
Note: See TracBrowser for help on using the repository browser.