bool STPSolverImpl::computeTruth(const Query &query, bool &isValid) { std::vector<const Array *> objects; std::vector<std::vector<unsigned char> > values; bool hasSolution; if (!computeInitialValues(query, objects, values, hasSolution)) return false; isValid = !hasSolution; return true; }
// TODO: Use model evaluation in Z3 bool Z3BaseSolverImpl::computeValue(const Query &query, ref<Expr> &result) { std::vector<const Array*> objects; std::vector<std::vector<unsigned char> > values; bool hasSolution; findSymbolicObjects(query.expr, objects); if (!computeInitialValues(query.withFalse(), objects, values, hasSolution)) return false; assert(hasSolution && "state has invalid constraint set"); Assignment a(objects, values); result = a.evaluate(query.expr); return true; }
bool MetaSMTSolverImpl<SolverContext>::computeTruth(const Query &query, bool &isValid) { bool success = false; std::vector<const Array *> objects; std::vector<std::vector<unsigned char> > values; bool hasSolution; if (computeInitialValues(query, objects, values, hasSolution)) { // query.expr is valid iff !query.expr is not satisfiable isValid = !hasSolution; success = true; } return (success); }
bool Z3SolverImpl::computeValue(const Query &query, ref<Expr> &result) { std::vector<const Array *> objects; std::vector<std::vector<unsigned char> > values; bool hasSolution; // Find the object used in the expression, and compute an assignment // for them. findSymbolicObjects(query.expr, objects); if (!computeInitialValues(query.withFalse(), objects, values, hasSolution)) return false; assert(hasSolution && "state has invalid constraint set"); // Evaluate the expression with the computed assignment. Assignment a(objects, values); result = a.evaluate(query.expr); return true; }