source: git/Singular/ring.h @ 949d0d

fieker-DuValspielwiese
Last change on this file since 949d0d was 63374c, checked in by Olaf Bachmann <obachman@…>, 25 years ago
* moved mpsr_RingEqual to rEqual * controled access to qideal in qrings git-svn-id: file:///usr/local/Singular/svn/trunk@3253 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 4.3 KB
Line 
1#ifndef RING_H
2#define RING_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/*
7* ABSTRACT - the interpreter related ring operations
8*/
9/* $Id: ring.h,v 1.30 1999-07-09 14:06:51 obachman Exp $ */
10
11/* includes */
12#include "structs.h"
13#include "polys-impl.h"
14
15#define SHORT_REAL_LENGTH 6 // use short reals for real <= 6 digits
16
17
18#ifdef DRING
19void   rChangeCurrRing(ring r, BOOLEAN complete = TRUE, idhdl h = NULL);
20#else
21void   rChangeCurrRing(ring r, BOOLEAN complete = TRUE);
22#endif
23void   rSetHdl(idhdl h, BOOLEAN complete = TRUE);
24idhdl  rInit(char *s, sleftv* pn, sleftv* rv, sleftv* ord,
25  BOOLEAN isDRing);
26idhdl  rDefault(char *s);
27int    rIsRingVar(char *n);
28char * RingVar(short);
29void   rWrite(ring r);
30void   rKill(idhdl h);
31void   rKill(ring r);
32ring   rCopy(ring r);
33idhdl  rFindHdl(ring r, idhdl n, idhdl w);
34#ifdef DRING
35void rDSet();
36#endif
37void   rDInit();
38int rOrderName(char * ordername);
39char * rOrdStr(ring r);
40char * rVarStr(ring r);
41char * rCharStr(ring r);
42char * rString(ring r);
43int    rChar(ring r=currRing);
44#define rPar(r) (r->P)
45char * rParStr(ring r);
46int    rIsExtension(ring r);
47int    rIsExtension();
48int    rSum(ring r1, ring r2, ring &sum);
49BOOLEAN rEqual(ring r1, ring r2, BOOLEAN qr = 1);
50BOOLEAN   rComplete(ring r, int force = 0);
51void   rUnComplete(ring r);
52int    rBlocks(ring r);
53
54#define  rInternalChar(r) ((r)->ch)
55#ifndef ABS
56#define ABS(x) ((x) < 0 ? (-(x)) : (x))
57#endif
58inline BOOLEAN rField_is_Zp(ring r=currRing)
59{ return (r->ch > 1) && (r->parameter==NULL); }
60inline BOOLEAN rField_is_Zp(ring r, int p)
61{ return (r->ch > 1 && r->ch == ABS(p) && r->parameter==NULL); }
62inline BOOLEAN rField_is_Q(ring r=currRing)
63{ return (r->ch == 0) && (r->parameter==NULL); }
64inline BOOLEAN rField_is_numeric(ring r=currRing) /* R, long R, long C */
65{ return (r->ch ==  -1); }
66inline BOOLEAN rField_is_R(ring r=currRing)
67{
68  if (rField_is_numeric(r) && (r->ch_flags <= (short)SHORT_REAL_LENGTH))
69    return (r->parameter==NULL);
70  return FALSE;
71}
72inline BOOLEAN rField_is_GF(ring r=currRing)
73{ return (r->ch > 1) && (r->parameter!=NULL); }
74inline BOOLEAN rField_is_Zp_a(ring r=currRing)
75{ return (r->ch < -1); }
76inline BOOLEAN rField_is_Zp_a(ring r, int p)
77{ return (r->ch < -1 ) && (-(r->ch) == ABS(p)); }
78inline BOOLEAN rField_is_Q_a(ring r=currRing)
79{ return (r->ch == 1); }
80inline BOOLEAN rField_is_long_R(ring r=currRing)
81{
82  if (rField_is_numeric(r) && (r->ch_flags >(short)SHORT_REAL_LENGTH))
83    return (r->parameter==NULL);
84  return FALSE;
85}
86inline BOOLEAN rField_is_long_C(ring r=currRing)
87{
88  if (rField_is_numeric(r))
89    return (r->parameter!=NULL);
90  return FALSE;
91}
92inline BOOLEAN rField_has_simple_inverse(ring r=currRing)
93{ return (r->ch>1) || (r->ch== -1); } /* Z/p, GF(p,n), R, long_R, long_C*/
94inline BOOLEAN rField_is_Extension(ring r=currRing)
95{ return (rField_is_Q_a(r)) || (rField_is_Zp_a(r)); } /* Z/p(a) and Q(a)*/
96
97enum
98{
99  ringorder_no = 0,
100  ringorder_a,
101  ringorder_c,
102  ringorder_C,
103  ringorder_M,
104  ringorder_lp,
105  ringorder_dp,
106  ringorder_Dp,
107  ringorder_wp,
108  ringorder_Wp,
109  ringorder_ls,
110  ringorder_ds,
111  ringorder_Ds,
112  ringorder_ws,
113  ringorder_Ws,
114  ringorder_unspec
115};
116
117typedef enum rOrderType_t
118{
119  rOrderType_General = 0, // non-simple ordering as specified by currRing
120  rOrderType_CompExp,     // simple ordering, component has priority
121  rOrderType_ExpComp,     // simple ordering, exponent vector has priority
122                          // component not compatible with exp-vector order
123  rOrderType_Exp,         // simple ordering, exponent vector has priority
124                          // component is compatible with exp-vector order
125  rOrderType_Syz,         // syzygy ordering
126  rOrderType_Schreyer,     // Schreyer ordering
127  rOrderType_Syz2dpc,     // syzcomp2dpc
128  rOrderType_ExpNoComp    // simple ordering, differences in component are
129                          // not considered
130} rOrderType_t;
131
132BOOLEAN rHasSimpleOrder(ring r);
133// returns TRUE, if simple lp or ls ordering
134BOOLEAN rHasSimpleLexOrder(ring r);
135rOrderType_t    rGetOrderType(ring r);
136BOOLEAN rIsPolyVar(int i); /* returns TRUE if var(i) belongs to p-block */
137
138void rOptimizeOrder(ring r);
139
140#ifdef RDEBUG
141extern short rNumber; /* current ring id (r->no) */
142#define rTest(r)    rDBTest(r, __FILE__, __LINE__)
143extern BOOLEAN rDBTest(ring r, char* fn, int l);
144#else
145#define rTest(r)
146#endif
147
148#endif
149
Note: See TracBrowser for help on using the repository browser.