bool FSVarStat::contradiction(FSVarStat *fsVarStat) const { STATUS status = fsVarStat->status(); switch (status) { case Set: case Fixed: return contradiction(status, fsVarStat->value()); default: return contradiction(status); } }
Domain MCSat::applyUP(const Domain& d) { Domain reduced; try { reduced = performUnitPropagation(d); } catch (contradiction& c) { // rewrite error message throw contradiction("Contradiction found in MCSat::run() when running unit prop()"); } // default model is guaranteed to satisfy the facts Model m = reduced.defaultModel(); // check to make sure hard clauses are satisfied std::vector<ELSentence> hardClauses; std::remove_copy_if(reduced.formulas_begin(), reduced.formulas_end(), std::back_inserter(hardClauses), std::not1(IsHardClausePred())); for (std::vector<ELSentence>::const_iterator it = hardClauses.begin(); it != hardClauses.end(); it++) { if (!it->fullySatisfied(m, reduced)) { throw contradiction("Contradiction found in MCSat::run() when verifying hard clauses are satisfied"); } } return reduced; }