1 /* Frobby: Software for monomial ideal computations.
2 Copyright (C) 2009 Bjarke Hammersholt Roune (www.broune.com)
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see http://www.gnu.org/licenses/.
16 */
17 #include "stdinc.h"
18 #include "IdealFactory.h"
19
20 #include <algorithm>
21
ring_xyzt()22 VarNames IdealFactory::ring_xyzt() {
23 VarNames names;
24 names.addVar("x");
25 names.addVar("y");
26 names.addVar("z");
27 names.addVar("t");
28 return names;
29 }
30
xx_yy_xz_yz()31 BigIdeal IdealFactory::xx_yy_xz_yz() {
32 BigIdeal ideal(ring_xyzt());
33 ideal.insert(makeTerm(2, 0, 0, 0));
34 ideal.insert(makeTerm(0, 2, 0, 0));
35 ideal.insert(makeTerm(1, 0, 1, 0));
36 ideal.insert(makeTerm(0, 1, 1, 0));
37 ideal.sortGenerators();
38 return ideal;
39 }
40
x_y()41 BigIdeal IdealFactory::x_y() {
42 BigIdeal ideal(ring_xyzt());
43 ideal.insert(makeTerm(1, 0, 0, 0));
44 ideal.insert(makeTerm(0, 1, 0, 0));
45 ideal.sortGenerators();
46 return ideal;
47 }
48
x_y_z()49 BigIdeal IdealFactory::x_y_z() {
50 BigIdeal ideal(ring_xyzt());
51 ideal.insert(makeTerm(1, 0, 0, 0));
52 ideal.insert(makeTerm(0, 1, 0, 0));
53 ideal.insert(makeTerm(0, 0, 1, 0));
54 ideal.sortGenerators();
55 return ideal;
56 }
57
xyzzz_xxyy()58 BigIdeal IdealFactory::xyzzz_xxyy() {
59 BigIdeal ideal(ring_xyzt());
60 ideal.insert(makeTerm(1, 1, 3, 0));
61 ideal.insert(makeTerm(2, 2, 0, 0));
62 ideal.sortGenerators();
63 return ideal;
64 }
65
xyz_xxyy()66 BigIdeal IdealFactory::xyz_xxyy() {
67 BigIdeal ideal(ring_xyzt());
68 ideal.insert(makeTerm(1, 1, 1, 0));
69 ideal.insert(makeTerm(2, 2, 0, 0));
70 ideal.sortGenerators();
71 return ideal;
72 }
73
xx_yy_z()74 BigIdeal IdealFactory::xx_yy_z() {
75 BigIdeal ideal(ring_xyzt());
76 ideal.insert(makeTerm(2, 0, 0, 0));
77 ideal.insert(makeTerm(0, 2, 0, 0));
78 ideal.insert(makeTerm(0, 0, 1, 0));
79 ideal.sortGenerators();
80 return ideal;
81 }
82
xy_xxyyz()83 BigIdeal IdealFactory::xy_xxyyz() {
84 BigIdeal ideal(ring_xyzt());
85 ideal.insert(makeTerm(1, 1, 0, 0));
86 ideal.insert(makeTerm(2, 2, 1, 0));
87 ideal.sortGenerators();
88 return ideal;
89 }
90
xx_yy_zz_t_xz_yz()91 BigIdeal IdealFactory::xx_yy_zz_t_xz_yz() {
92 BigIdeal ideal(ring_xyzt());
93 ideal.insert(makeTerm(2, 0, 0, 0));
94 ideal.insert(makeTerm(0, 2, 0, 0));
95 ideal.insert(makeTerm(0, 0, 2, 0));
96 ideal.insert(makeTerm(0, 0, 0, 1));
97 ideal.insert(makeTerm(1, 0, 1, 0));
98 ideal.insert(makeTerm(0, 1, 1, 0));
99 ideal.sortGenerators();
100 return ideal;
101 }
102
xy_z()103 BigIdeal IdealFactory::xy_z() {
104 BigIdeal ideal(ring_xyzt());
105 ideal.insert(makeTerm(1, 1, 0, 0));
106 ideal.insert(makeTerm(0, 0, 1, 0));
107 ideal.sortGenerators();
108 return ideal;
109 }
110
xy_xz()111 BigIdeal IdealFactory::xy_xz() {
112 BigIdeal ideal(ring_xyzt());
113 ideal.insert(makeTerm(1, 1, 0, 0));
114 ideal.insert(makeTerm(1, 0, 1, 0));
115 ideal.sortGenerators();
116 return ideal;
117 }
118
xy()119 BigIdeal IdealFactory::xy() {
120 BigIdeal ideal(ring_xyzt());
121 ideal.insert(makeTerm(1, 1, 0, 0));
122 ideal.sortGenerators();
123 return ideal;
124 }
125
z()126 BigIdeal IdealFactory::z() {
127 BigIdeal ideal(ring_xyzt());
128 ideal.insert(makeTerm(0, 0, 1, 0));
129 ideal.sortGenerators();
130 return ideal;
131 }
132
irrdecom_xx_yy_xz_yz()133 vector<BigIdeal> IdealFactory::irrdecom_xx_yy_xz_yz() {
134 vector<BigIdeal> ideals;
135 ideals.push_back(x_y());
136 ideals.push_back(xx_yy_z());
137 sort(ideals.begin(), ideals.end());
138 return ideals;
139 }
140
assoprimes_xx_yy_xz_yz()141 vector<BigIdeal> IdealFactory::assoprimes_xx_yy_xz_yz() {
142 vector<BigIdeal> ideals;
143 ideals.push_back(x_y());
144 ideals.push_back(x_y_z());
145 sort(ideals.begin(), ideals.end());
146 return ideals;
147 }
148
wholeRing(size_t varCount)149 BigIdeal IdealFactory::wholeRing(size_t varCount) {
150 BigIdeal ideal((VarNames(varCount)));
151 ideal.insert(vector<mpz_class>(varCount));
152 return ideal;
153 }
154
zeroIdeal(size_t varCount)155 BigIdeal IdealFactory::zeroIdeal(size_t varCount) {
156 return BigIdeal(VarNames(varCount));
157 }
158
makeTerm(int a,int b,int c,int d)159 vector<mpz_class> IdealFactory::makeTerm(int a, int b, int c, int d) {
160 vector<mpz_class> t(4);
161 t[0] = a;
162 t[1] = b;
163 t[2] = c;
164 t[3] = d;
165 return t;
166 }
167
makeTerm(int a)168 vector<mpz_class> IdealFactory::makeTerm(int a) {
169 vector<mpz_class> t(1);
170 t[0] = a;
171 return t;
172 }
173