use of com.google.api.expr.v1alpha1.Expr in project java-smt by sosy-lab.
the class CVC4QuantifiedFormulaManager method mkQuantifier.
/*
* Makes the quantifier entered in CVC4. Note that CVC4 uses bound variables in quantified
* formulas instead of the normal free vars. We create a bound copy for every var and substitute
* the free var for the bound var in the body Formula. Note that CVC4 uses their internal Lists
* for the variable list in quantifiers.
*/
@Override
public Expr mkQuantifier(Quantifier pQ, List<Expr> pVars, Expr pBody) {
if (pVars.isEmpty()) {
throw new IllegalArgumentException("Empty variable list for quantifier.");
} else {
// CVC4 uses its own lists for quantifier that may only have bound vars
vectorExpr vec = new vectorExpr();
Expr substBody = pBody;
// with the same name, this is fine.
for (Expr var : pVars) {
Expr boundCopy = ((CVC4FormulaCreator) formulaCreator).makeBoundCopy(var);
vec.add(boundCopy);
substBody = substBody.substitute(var, boundCopy);
}
Expr quantifiedVars = exprManager.mkExpr(Kind.BOUND_VAR_LIST, vec);
Kind quant = pQ == Quantifier.EXISTS ? Kind.EXISTS : Kind.FORALL;
return exprManager.mkExpr(quant, quantifiedVars, substBody);
}
}
use of com.google.api.expr.v1alpha1.Expr in project java-smt by sosy-lab.
the class CVC4QuantifiedFormulaManager method eliminateQuantifiers.
/*
* (non-Javadoc) CVC4s quantifier support is dependent on the options used.
* Without any options it tends to run infenitly on many theories or examples.
* There are 2 options improving this: full-saturate-quant and sygus-inst.
* full-saturate-quant is activated in JavaSMT per default.
* You can try combinations of them, or just one if a query is not solveable.
* More info on full-saturate-quant: Enables "enumerative instantiation",
* see: https://homepage.divms.uiowa.edu/~ajreynol/tacas18.pdf
* More info on sygus-inst: Enables syntax-guided instantiation,
* see https://homepage.divms.uiowa.edu/~ajreynol/tacas21.pdf
* This approach tends to work well when the quantified formula involves
* theories (e.g. strings) where more traditional quantifier instantiation
* heuristics do not apply.
* This applies to CVC4 and CVC5!
*/
@Override
protected Expr eliminateQuantifiers(Expr pExtractInfo) throws SolverException, InterruptedException {
SmtEngine smtEngine = new SmtEngine(exprManager);
Expr eliminated = pExtractInfo;
// unexpected logic is used.
try {
eliminated = smtEngine.doQuantifierElimination(pExtractInfo, true);
} catch (RuntimeException e) {
// quantifier elimination failed, simply return the input
}
// We don't delete it in the prover.close(), is there a reason for that?
smtEngine.delete();
return eliminated;
}
use of com.google.api.expr.v1alpha1.Expr in project java-smt by sosy-lab.
the class CVC4TheoremProver method isUnsat.
@Override
@SuppressWarnings("try")
public boolean isUnsat() throws InterruptedException, SolverException {
Preconditions.checkState(!closed);
closeAllModels();
changedSinceLastSatQuery = false;
if (!incremental) {
for (Expr expr : getAssertedExpressions()) {
smtEngine.assertFormula(importExpr(expr));
}
}
Result result;
try (ShutdownHook hook = new ShutdownHook(shutdownNotifier, smtEngine::interrupt)) {
shutdownNotifier.shutdownIfNecessary();
result = smtEngine.checkSat();
}
shutdownNotifier.shutdownIfNecessary();
return convertSatResult(result);
}
use of com.google.api.expr.v1alpha1.Expr in project bmoth by hhu-stups.
the class LiftsTest method testTargetAndCurrentCorrespond.
@Test
public void testTargetAndCurrentCorrespond() throws IOException {
MachineNode simpleMachineWithViolation = Parser.getMachineFileAsSemanticAst(dir + "TargetAndCurrentCorrespond.mch");
ModelCheckingResult result = ModelChecker.doModelCheck(simpleMachineWithViolation);
assertEquals(false, result.isCorrect());
Expr targetFloor = result.getLastState().values.get("target_floor");
Expr currentFloor = result.getLastState().values.get("current_floor");
assertNotEquals(targetFloor.toString(), currentFloor.toString());
}
use of com.google.api.expr.v1alpha1.Expr in project bmoth by hhu-stups.
the class BooleanFormulaEvaluationTest method testTrueFormula.
@Test
public void testTrueFormula() throws Exception {
String formula = "x = TRUE";
// getting the translated z3 representation of the formula
BoolExpr constraint = FormulaToZ3Translator.translatePredicate(formula, z3Context);
z3Solver.add(constraint);
Status check = z3Solver.check();
Expr x = z3Context.mkBoolConst("x");
assertEquals(SATISFIABLE, check);
assertEquals(z3Context.mkTrue(), z3Solver.getModel().eval(x, true));
}
Aggregations