33 else if (pair1.
lcm > pair2.
lcm)
39 if (pair1.
j < pair2.
j)
43 else if (pair1.
j > pair2.
j)
49 return pair1.
i < pair2.
i;
74 throw "Invalid numbers in Pair";
76 IntermediateBasis::const_iterator
end = F.end();
77 if (F.find(
j) ==
end || (
i >= 0 && F.find(
i) ==
end))
86 lcm = F.find(
j)->second.LT();
91 unsigned long a = F.find(
i)->second.LT();
92 unsigned long b = F.find(
j)->second.LT();
133 IntermediateBasis::const_iterator
end = F.end();
134 if (F.find(j) ==
end || (i >= 0 && F.find(i) ==
end))
149 g = &F.find(i)->second;
151 f = &F.find(j)->second;
162 Pairs::iterator position = B.begin();
163 IntermediateBasis::const_iterator
end = F.end();
164 for (IntermediateBasis::const_iterator iter = F.begin(); iter !=
end; ++iter)
167 for (
int i = -n; i < 0; i++)
170 position = B.insert(position, pair);
172 for (
int i = 0; i < j; i++)
177 position = B.insert(position, pair);
188 Pairs::iterator position = B.begin();
189 for (
int i = -n; i < 0; i++)
192 position = B.insert(position, pair);
194 IntermediateBasis::const_iterator
end = F.end();
196 for (IntermediateBasis::const_iterator iter = F.begin(); iter !=
end; ++iter)
202 position = B.insert(position, pair);
212 return B.find(
p) != B.end();
246 IntermediateBasis::const_iterator
end = F.end();
247 for (IntermediateBasis::const_iterator it = F.begin(); it !=
end; ++it)
250 const BRP *K = &(it->second);
276 BRP b = (fp.
f)->remainder(*fp.
g);
277 return b * *fp.
g + b;
282 return *fp.
f * (lcm ^ f) + *fp.
g * (lcm ^ g);
298 const IntermediateBasis::const_iterator itF)
300 IntermediateBasis::const_iterator
end = F.end();
301 for (IntermediateBasis::const_iterator it = F.begin();
320 const IntermediateBasis::const_iterator itF)
323 IntermediateBasis::const_iterator it;
324 IntermediateBasis::const_iterator
end = F.end();
336 const IntermediateBasis::const_iterator itF)
338 IntermediateBasis::const_iterator
end = F.end();
340 for (IntermediateBasis::const_iterator it = F.begin();
360 const IntermediateBasis::const_iterator itF)
381 for (IntermediateBasis::iterator j = F.begin(); j != F.end(); ++j)
383 if (j->first != nextIndex)
385 for (IntermediateBasis::iterator i = F.begin(); i->first < j->first;
389 if (i->second.LT() > j->second.LT())
392 i->second = j->second;
403 bool changesHappened =
true;
404 IntermediateBasis::iterator
end = F.end();
405 unsigned long numChanged = 0;
406 while (changesHappened)
408 changesHappened =
false;
409 for (IntermediateBasis::iterator it = F.begin(); it !=
end;)
411 if (
reduce(it->second, F, it))
415 if (it->second.isZero())
423 changesHappened =
true;
436 int nextIndex =
static_cast<int>(F.size());
442 int interreductionCounter = 0;
445 Pair pair = *(B.begin());
456 if (interreductionCounter == 5)
458 interreductionCounter = 0;
464 interreductionCounter++;
466 B.insert(newList.begin(), newList.end());
static bool isDivisibleBy(const brMonomial &a, const brMonomial &b)
bool reduceTail(const BRP &g)
bool isLeadingReducibleBy(const BRP &other) const
static bool isRelativelyPrime(const brMonomial &a, const brMonomial &b)
unsigned int size() const
Boolean (F_2-coefficient) polynomial stored as an ordered list of square-free monomials.
FunctionPair(const Pair &pair, const IntermediateBasis &F, int n)
Materialised (f, g) pair of BRP polynomials referenced by a Pair index record.
Pair(int a, int b, const IntermediateBasis &F)
friend bool operator<(const Pair &pair1, const Pair &pair2)
S-pair record for the Franzi boolean Groebner basis algorithm.
std::map< int, BRP > IntermediateBasis
brMonomial — bit-packed Boolean-ring monomials for the Hinkelmann GB engine.
Pairs makeList(const IntermediateBasis &F, int n)
void cancelLeadTerm(BRP &f, const BRP &g)
void gb(IntermediateBasis &F, int n)
void interreduction(IntermediateBasis &F)
Pairs makeNewPairs(int newIndex, const IntermediateBasis &F, int n)
BRP sPolynomial(const Pair &pair, const IntermediateBasis &F, int n)
bool reduceTail(BRP &f, const IntermediateBasis &F, const IntermediateBasis::const_iterator itF)
IntermediateBasis::const_iterator findDivisor(const BRP &f, const IntermediateBasis &F, const IntermediateBasis::const_iterator itF)
void rearrangeBasis(IntermediateBasis &F, int nextIndex)
bool inList(int i, int j, const Pairs &B, const IntermediateBasis &F)
bool isGoodPair(const Pair &pair, const IntermediateBasis &F, const Pairs &B, int n)
bool reduceLt(BRP &f, const IntermediateBasis &F, const IntermediateBasis::const_iterator itF)
bool reduce(BRP &f, const IntermediateBasis &F, const IntermediateBasis::const_iterator itF)
TermIterator< Nterm > end(Nterm *)