uint32_t pdbm_getUpperFacets(PDBM &pdbm, cindex_t dim, cindex_t *facets) { assert(pdbm && dim && facets); cindex_t next[dim]; cindex_t i; pdbm_prepare(pdbm, dim); raw_t *dbm = pdbm_matrix(pdbm); /* Make all upper facets weak. */ dbm_relaxUp(dbm, dim); /* Identify zero cycles. */ dbm_findZeroCycles(dbm, dim, next); /* Find non-redundant facets. */ uint32_t cnt = 0; for (i = 0; i < dim; i++) { if (!next[i] && !isRedundant(dbm, dim, i, 0, next)) { *facets = i; facets++; cnt++; } } return cnt; }
uint32_t pdbm_getLowerRelativeFacets( PDBM &pdbm, cindex_t dim, cindex_t clock, cindex_t *facets) { assert(pdbm && dim && clock < dim); cindex_t next[dim]; cindex_t i; pdbm_prepare(pdbm, dim); raw_t *dbm = pdbm_matrix(pdbm); /* Make all lower facets relative to clock weak. */ dbm_relaxDownClock(dbm, dim, clock); /* Identify zero cycles. */ dbm_findZeroCycles(dbm, dim, next); /* Find non-redundant facets. */ uint32_t cnt = 0; for (i = 0; i < dim; i++) { if (!next[i] && !isRedundant(dbm, dim, i, clock, next)) { *facets = i; facets++; cnt++; } } return cnt; }
void SygusRedundantCons::getRedundant(std::vector<unsigned>& indices) { const Datatype& dt = static_cast<DatatypeType>(d_type.toType()).getDatatype(); for (unsigned i = 0, ncons = dt.getNumConstructors(); i < ncons; i++) { if (isRedundant(i)) { indices.push_back(i); } } }