int F4SPairSet::find_new_pairs(bool remove_disjoints) // returns the number of new pairs found { nsaved_unneeded += remove_unneeded_pairs(); int len = construct_pairs(remove_disjoints); return len; }
void gbB::update_pairs(int id) { gbelem *r = gb[id]; int x = gbelem_COMPONENT(r); /* Step 1. Remove un-needed old pairs */ remove_unneeded_pairs(id); /* Step 2. Collect new pairs */ spairs new_set; /* Step 2a: */ if (R->is_skew_commutative()) { for (int i=0; i<R->n_skew_commutative_vars(); i++) if (r->lead[R->skew_variable(i)] > 0) { spair *s = spair_make_skew(id,i); new_set.push_back(s); } } /* Step 2b: pairs from ring elements, or 'in stone' elements */ for (int i=0; i<first_gb_element; i++) { spair *s = spair_make_ring(id,i); new_set.push_back(s); } /* Step 2c. pairs from the vectors themselves */ /* Loop through the minimal GB elements and form the s-pair */ for (int i=first_gb_element; i<id; i++) { gbelem *g = gb[i]; if ((g->minlevel & ELEMB_MINGB) && gbelem_COMPONENT(g) == x) { spair *s = spair_make(id,i); new_set.push_back(s); } } /* Step 3. Minimalize this set */ minimalize_pairs(new_set); /* Modifies new_set, inserts minimal pairs into S */ }