Macaulay2 Engine
Loading...
Searching...
No Matches
gauss.hpp
Go to the documentation of this file.
1// Copyright 1996-2005 Michael E. Stillman
2#ifndef _gauss_hh_
3#define _gauss_hh_
4
35
36#include "relem.hpp"
37#include "matrix.hpp"
38#include "polyring.hpp"
39#include "comp-gb.hpp"
40
41struct gm_elem : public our_new_delete
42{
44 int nterms;
45 vec f;
46 vec fsyz;
47};
48
59{
60 private:
61 int row;
62 gm_elem **reduce_list; // One list for each row
63 gm_elem **gb_list; // The GB elem (if any) with the given row index
64 // as lead term.
65
66 const Ring *R; // Ring of 'gens'. Should be a field.
67 const Matrix *gens; // This is the input
69 VECTOR(vec) syz_list;
70
71 int n_gb;
73
74 int collect_syz; // 0 or 1
76
77 private:
78 gm_elem *new_gen(int i);
79 void remove_gm_elem(gm_elem *&p);
80 void insert(gm_elem *p);
81
82 void reduce(gm_elem *&p, gm_elem *q);
83 void reduce(vec &f, vec &fsyz, bool tail_only = false);
84 void reduce(vec &f);
85
86 protected:
87 virtual bool stop_conditions_ok() { return true; }
88 public:
89 // An honest GB computation
90 GaussElimComputation(const Matrix *m, int collect_syz, int n_syz);
92
93 virtual void remove_gb() {}
94 virtual void start_computation();
95
96 virtual int complete_thru_degree() const;
97 // The computation is complete up through this degree.
98
99 virtual const Ring *get_ring() const { return R; }
101 // Results of the computation //
103 virtual const Matrix /* or null */ *get_gb();
104
105 virtual const Matrix /* or null */ *get_mingens();
106
107 virtual const Matrix /* or null */ *get_change();
108
109 virtual const Matrix /* or null */ *get_syzygies();
110
111 virtual const Matrix /* or null */ *get_initial(int nparts);
112
114 // Normal forms and lifting ////
116
117 virtual const Matrix /* or null */ *matrix_remainder(const Matrix *m);
118
119 virtual M2_bool matrix_lift(const Matrix *m,
120 const Matrix /* or null */ **result_remainder,
121 const Matrix /* or null */ **result_quotient);
122
123 virtual int contains(const Matrix *m);
124
126 // Statistics and spair information //
128
129 virtual void text_out(buffer &o) const;
130 // This displays statistical information, and depends on the
131 // M2_gbTrace value.
132};
133#endif
134
135// Local Variables:
136// compile-command: "make -C $M2BUILDDIR/Macaulay2/e "
137// indent-tabs-mode: nil
138// End:
Engine-side free module R^n over a Ring.
Definition freemod.hpp:66
virtual const Matrix * get_mingens()
Definition gauss.cpp:277
void remove_gm_elem(gm_elem *&p)
Definition gauss.cpp:103
VECTOR(vec) syz_list
virtual int complete_thru_degree() const
Definition gauss.cpp:13
gm_elem * new_gen(int i)
Definition gauss.cpp:20
virtual M2_bool matrix_lift(const Matrix *m, const Matrix **result_remainder, const Matrix **result_quotient)
Definition gauss.cpp:368
virtual const Matrix * get_change()
Definition gauss.cpp:299
gm_elem ** reduce_list
Definition gauss.hpp:62
gm_elem ** gb_list
Definition gauss.hpp:63
virtual const Matrix * get_syzygies()
Definition gauss.cpp:307
virtual void remove_gb()
Definition gauss.hpp:93
const Matrix * gens
Definition gauss.hpp:67
GaussElimComputation(const Matrix *m, int collect_syz, int n_syz)
Definition gauss.cpp:69
virtual const Matrix * get_gb()
Definition gauss.cpp:291
void reduce(gm_elem *&p, gm_elem *q)
Definition gauss.cpp:130
virtual void start_computation()
Definition gauss.cpp:216
virtual const Matrix * matrix_remainder(const Matrix *m)
Definition gauss.cpp:344
const Ring * R
Definition gauss.hpp:66
void insert(gm_elem *p)
Definition gauss.cpp:32
virtual void text_out(buffer &o) const
Definition gauss.cpp:315
const FreeModule * Fsyz
Definition gauss.hpp:68
virtual const Matrix * get_initial(int nparts)
Definition gauss.cpp:278
virtual int contains(const Matrix *m)
Definition gauss.cpp:406
virtual bool stop_conditions_ok()
Definition gauss.hpp:87
virtual const Ring * get_ring() const
Definition gauss.hpp:99
xxx xxx xxx
Definition ring.hpp:102
GBComputation — abstract base of every Groebner-basis algorithm in the engine.
#define Matrix
Definition factory.cpp:14
int p
char M2_bool
Definition m2-types.h:82
Matrix — the engine's immutable homomorphism F -> G between free modules.
PolynomialRing — abstract polynomial-ring base, the engine's most-reused class.
RingElement — tagged (Ring*, ring_elem) pair, the engine's universal element type.
int nterms
Definition gauss.hpp:44
vec fsyz
Definition gauss.hpp:46
vec f
Definition gauss.hpp:45
gm_elem * next
Definition gauss.hpp:43