source: git/libpolys/polys/ext_fields/longtrans.h @ 18dab28

spielwiese
Last change on this file since 18dab28 was 18dab28, checked in by Hans Schoenemann <hannes@…>, 13 years ago
fix unseless includes of polys-impl.h
  • Property mode set to 100644
File size: 7.2 KB
Line 
1#ifndef LONGTRANS_H
2#define LONGTRANS_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/* $Id: longtrans.h 12469 2011-02-25 13:38:49Z seelisch $ */
7/*
8* ABSTRACT:   numbers in transcendental field extensions,
9              i.e., in rational function fields
10*/
11#include <coeffs/longrat.h>
12
13/*
14   IMPORTANT INFORMATION:
15   Instantiation of an algebraic field extension in SINGULAR
16   works by first creating a transcendental field extension
17   and then providing a minimal polynomial / minimal ideal.
18   Consequently, first the code for transcendental field
19   extensions will be activated; see longtrans.*.
20   When providing a minimal polynomial / minimal ideal, all
21   function pointers will be re-defined, using the below method
22   redefineFunctionPointers(). After that, the code for algebraic
23   field extensions is active; see longalg.*.
24   
25   NOTE:
26   Elements of algebraic and transcendental field extensions
27   are polynomials or quotients of two polynomials, respectively.
28   All these polynomials, as well as the minimal polynomial (in
29   the case of an algebraic extension) live in the globally
30   accessible ring 'nacRing', defined in longtrans.*.
31   
32   METHOD NAMING CONVENTIONS
33   (not true for types / structs / global variables):
34   nap*   macros and methods operating on polynomials living in
35          nacRing (defined in longtrans.*),
36   na*    (but not nap*) methods and macros for algebraic field
37          extensions (defined in longalg.*),
38   nt*    methods and macros for transcendental field extensions,
39          (defined in longtrans.*)
40   nac*   function pointers for computing with the coefficients of
41          polynomials living in nacRing (defined in longtrans.*)
42*/
43
44struct slnumber;
45typedef struct slnumber * lnumber;
46struct slnumber
47{
48  poly z;
49  poly n;
50  BOOLEAN s;
51};
52
53extern int  ntNumbOfPar;
54#define     ntParNames (currRing->parameter)
55extern int  ntIsChar0;                                  /* == 1 iff char = 0,
56                                                           == 0 otherwise */ 
57extern ring ntMapRing;
58extern int  ntParsToCopy;
59
60/* specific methods / macros for transcendental field extensions */
61void        ntSetChar(int p, ring r);
62void        ntDelete (number *p, const ring r);
63number      ntInit(int i, const ring r);                /* z := i      */
64number      ntPar(int i);                               /* z := par(i) */
65int         ntParDeg(number n);                         /* i := deg(n) */
66int         ntSize(number n);                           /* size desc.  */
67int         ntInt(number &n, const ring r);
68BOOLEAN     ntIsZero(number za);                        /* za = 0 ?    */
69BOOLEAN     ntIsOne(number  za);                        /* za = 1 ?    */
70BOOLEAN     ntIsMOne(number  za);                       /* za = -1 ?   */
71BOOLEAN     ntEqual(number a, number b);                /* a = b ?     */
72BOOLEAN     ntGreater(number a, number b);              /* dummy       */
73number      ntNeg(number za);                           /* za := - za  */
74number      ntInvers(number a);
75void        ntPower(number x, int exp, number *lo);
76BOOLEAN     ntGreaterZero(number a);
77number      ntCopy(number p);                           /* erg:= p     */
78number      nt_Copy(number p, const ring r);            /* erg:= p     */
79number      ntAdd(number la, number li);                /* lu := la+li */
80number      ntMult(number la, number li);               /* lo := la*li */
81number      ntDiv(number la, number li);                /* lo := la/li */
82number      ntIntDiv(number la, number li);             /* lo := la/li */
83//number      ntIntMod(number la, number li);           /* lo := la/li */
84number      ntSub(number la, number li);                /* lu := la-li */
85void        ntNormalize(number &p);
86number      ntGcd(number a, number b, const ring r);
87number      ntLcm(number a, number b, const ring r);
88const char* ntRead(const char * s, number * p);
89void        ntWrite(number &p, const ring r);
90char*       ntName(number n);
91nMapFunc    ntSetMap(const ring src, const ring dst);
92number      ntMap0P(number c);
93number      ntMap00(number c);
94#ifdef LDEBUG
95BOOLEAN     ntDBTest(number a, const char *f,const int l);
96#endif
97poly      ntRemainder(poly f, const poly  g);
98void        ntSetIdeal(ideal I);
99void        ntCoefNormalize(number pp);
100extern number (*ntMap)(number from);
101
102/* procedure variables for computing with the coefficients of
103   polynomials living in nacRing */
104extern ring        nacRing;
105extern numberfunc  nacMult, nacSub, nacAdd, nacDiv, nacIntDiv;
106extern number      (*nacGcd)(number a, number b, const ring r);
107extern number      (*nacLcm)(number a, number b, const ring r);
108extern number      (*nacInit)(int i, const ring r);
109extern int         (*nacInt)(number &n, const ring r);
110extern void        (*nacNormalize)(number &a);
111extern number      (*nacNeg)(number a);
112extern number      (*nacCopy)(number a);
113extern number      (*nacInvers)(number a);
114extern BOOLEAN     (*nacIsZero)(number a);
115extern BOOLEAN     (*nacIsOne)(number a);
116extern BOOLEAN     (*nacGreaterZero)(number a);
117extern BOOLEAN     (*nacGreater)(number a, number b);
118extern number      (*nacMap)(number);
119
120/* for computing with polynomials living in nacRing */
121poly    napPermNumber(number z, int * par_perm, int P, ring r);
122#define napAddExp(p,i,e)       (p_AddExp(p,i,e,currRing->extRing))
123#define napLength(p)           pLength(p)
124#define napNeg(p)              (p_Neg(p,currRing->extRing))
125#define napVariables           naNumbOfPar
126#define napGetCoeff(p)         pGetCoeff(p)
127#define napGetExpFrom(p,i,r)   (p_GetExp(p,i,r->extRing))
128#define napSetExp(p,i,e)       (p_SetExp(p,i,e,currRing->extRing))
129#define napNew()               (p_Init(currRing->extRing))
130#define napAdd(p1,p2)          (p_Add_q(p1,p2,currRing->extRing))
131#define napSetm(p)             p_Setm(p,currRing->extRing)
132#define napCopy(p)             p_Copy(p,nacRing)
133#define napSetCoeff(p,n)       {n_Delete(&pGetCoeff(p),nacRing);pGetCoeff(p)=n;}
134#define napComp(p,q)           p_LmCmp((poly)p,(poly)q, nacRing)
135#define napMultT(A,E)          A=(poly)p_Mult_mm((poly)A,(poly)E,nacRing)
136#define napDeg(p)              (int)p_Totaldegree(p, nacRing)
137number  napGetDenom(number &n, const ring r);
138number  napGetNumerator(number &n, const ring r);
139void    napTest(poly p);
140poly  napInitz(number z);
141poly  napCopyNeg(const poly p);
142void    napMultN(poly p, const number z);
143void    napDivMod(poly f, const poly g, poly *q, poly *r);
144poly  napRemainder(poly f, const poly g);
145poly  napInvers(poly x, const poly c);
146int     napMaxDeg(poly p);
147int     napMaxDegLen(poly p, int &l);
148void    napWrite(poly p,const BOOLEAN has_denom, const ring r);
149int     napExp(poly a, poly b);
150int     napExpi(int i, poly a, poly b);
151void    napContent(poly ph);
152void    napCleardenom(poly ph);
153poly  napGcd0(poly a, poly b);
154poly  napGcd(poly a, poly b);
155number  napLcm(poly a);
156BOOLEAN napDivPoly (poly p, poly q);
157poly  napRedp (poly q);
158poly  napTailred (poly q);
159poly  napMap(poly p);
160poly  napPerm(poly p, const int *par_perm, const ring src_ring,
161                const nMapFunc nMap);
162const char* napHandleMons(const char *s, int i, poly ex);
163const char* napHandlePars(const char *s, int i, poly ex);
164const char* napRead(const char *s, poly *b);
165
166#endif
167#endif
168
Note: See TracBrowser for help on using the repository browser.