use of com.walmartlabs.concord.plugins.s3.Result in project java-smt by sosy-lab.
the class CVC4NativeAPITest method checkQuantifierExistsIncomplete.
/*
* CVC4 fails some easy quantifier tests. To check wheter or not they really fail in CVC4 or due
* to JavaSMT we test them in the native API.
*/
@Test
public void checkQuantifierExistsIncomplete() {
// (not exists x . not b[x] = 0) AND (b[123] = 0) is SAT
setupArrayQuant();
Expr zero = exprMgr.mkConst(new Rational(0));
Expr xBound = exprMgr.mkBoundVar("x", exprMgr.integerType());
vectorExpr vec = new vectorExpr();
vec.add(xBound);
Expr quantifiedVars = exprMgr.mkExpr(Kind.BOUND_VAR_LIST, vec);
Expr aAtxEq0s = aAtxEq0.substitute(x, xBound);
Expr exists = exprMgr.mkExpr(Kind.EXISTS, quantifiedVars, exprMgr.mkExpr(Kind.NOT, aAtxEq0s));
Expr notExists = exprMgr.mkExpr(Kind.NOT, exists);
Expr select123 = exprMgr.mkExpr(Kind.SELECT, array, exprMgr.mkConst(new Rational(123)));
Expr selectEq0 = exprMgr.mkExpr(Kind.EQUAL, select123, zero);
Expr assertion = exprMgr.mkExpr(Kind.AND, notExists, selectEq0);
// assertFormula has a return value, check?
smtEngine.assertFormula(assertion);
Result satCheck = smtEngine.checkSat();
// CVC4 fails this test as incomplete
assertThat(satCheck.isUnknown()).isTrue();
assertThat(satCheck.whyUnknown()).isEqualTo(Result.UnknownExplanation.INCOMPLETE);
}
use of com.walmartlabs.concord.plugins.s3.Result in project java-smt by sosy-lab.
the class CVC4NativeAPITest method checkSimpleLIRAUnsat2.
@Test
public void checkSimpleLIRAUnsat2() {
// x + y = 4 AND x * y = 4
Expr threeHalf = exprMgr.mkConst(new Rational(3, 2));
Expr varX = exprMgr.mkVar("x", exprMgr.integerType());
Expr varY = exprMgr.mkVar("y", exprMgr.realType());
Expr assertion1 = exprMgr.mkExpr(Kind.EQUAL, exprMgr.mkExpr(Kind.MULT, varX, varY), threeHalf);
Expr assertion2 = exprMgr.mkExpr(Kind.EQUAL, exprMgr.mkExpr(Kind.PLUS, varX, varY), threeHalf);
smtEngine.assertFormula(assertion1);
smtEngine.assertFormula(assertion2);
Result satCheck = smtEngine.checkSat();
assertThat(satCheck.isSat()).isEqualTo(Sat.UNSAT);
}
use of com.walmartlabs.concord.plugins.s3.Result in project java-smt by sosy-lab.
the class CVC4NativeAPITest method checkSimpleLIAUnsat.
@Test
public void checkSimpleLIAUnsat() {
// x + y = 1 AND x * y = 1
Expr one = exprMgr.mkConst(new Rational(1));
Expr varX = exprMgr.mkVar("x", exprMgr.integerType());
Expr varY = exprMgr.mkVar("y", exprMgr.integerType());
Expr assertion1 = exprMgr.mkExpr(Kind.EQUAL, exprMgr.mkExpr(Kind.MULT, varX, varY), one);
Expr assertion2 = exprMgr.mkExpr(Kind.EQUAL, exprMgr.mkExpr(Kind.PLUS, varX, varY), one);
smtEngine.assertFormula(assertion1);
smtEngine.assertFormula(assertion2);
Result satCheck = smtEngine.checkSat();
assertThat(satCheck.isSat()).isEqualTo(Sat.UNSAT);
}
use of com.walmartlabs.concord.plugins.s3.Result in project java-smt by sosy-lab.
the class CVC4NativeAPITest method checkSimpleIncrementalSolving.
@Test
public void checkSimpleIncrementalSolving() {
// x + y = 3/2 AND x * y = 3/2 (AND x - 1 = 0)
Expr zero = exprMgr.mkConst(new Rational(0));
Expr one = exprMgr.mkConst(new Rational(1));
Expr threeHalf = exprMgr.mkConst(new Rational(3, 2));
Expr varX = exprMgr.mkVar("x", exprMgr.realType());
Expr varY = exprMgr.mkVar("y", exprMgr.realType());
// this alone is SAT
Expr assertion1 = exprMgr.mkExpr(Kind.EQUAL, exprMgr.mkExpr(Kind.NONLINEAR_MULT, varX, varY), exprMgr.mkExpr(Kind.PLUS, varX, varY));
// both 2 and 3 make it UNSAT (either one)
Expr assertion2 = exprMgr.mkExpr(Kind.EQUAL, exprMgr.mkExpr(Kind.PLUS, varX, varY), threeHalf);
Expr assertion3 = exprMgr.mkExpr(Kind.EQUAL, exprMgr.mkExpr(Kind.MINUS, varX, one), zero);
smtEngine.push();
smtEngine.assertFormula(assertion1);
Result satCheck = smtEngine.checkSat();
assertThat(satCheck.isSat()).isEqualTo(Sat.SAT);
smtEngine.push();
smtEngine.assertFormula(assertion2);
satCheck = smtEngine.checkSat();
assertThat(satCheck.isSat()).isEqualTo(Sat.UNSAT);
smtEngine.pop();
satCheck = smtEngine.checkSat();
assertThat(satCheck.isSat()).isEqualTo(Sat.SAT);
smtEngine.push();
smtEngine.assertFormula(assertion3);
satCheck = smtEngine.checkSat();
assertThat(satCheck.isSat()).isEqualTo(Sat.UNSAT);
smtEngine.pop();
satCheck = smtEngine.checkSat();
assertThat(satCheck.isSat()).isEqualTo(Sat.SAT);
}
use of com.walmartlabs.concord.plugins.s3.Result in project java-smt by sosy-lab.
the class CVC4NativeAPITest method checkArrayUnsat.
@Test
public void checkArrayUnsat() {
// (x = 123) & (select(arr, 5) = 123) & (select(arr, 5) != x)
Expr five = exprMgr.mkConst(new Rational(5));
Expr oneTwoThree = exprMgr.mkConst(new Rational(123));
Expr xInt = exprMgr.mkVar("x_int", exprMgr.integerType());
ArrayType arrayType = exprMgr.mkArrayType(exprMgr.integerType(), exprMgr.integerType());
Expr arr = exprMgr.mkVar("arr", arrayType);
Expr xEq123 = exprMgr.mkExpr(Kind.EQUAL, xInt, oneTwoThree);
Expr selAat5Eq123 = exprMgr.mkExpr(Kind.EQUAL, exprMgr.mkExpr(Kind.SELECT, arr, five), oneTwoThree);
Expr selAat5NotEqX = exprMgr.mkExpr(Kind.NOT, exprMgr.mkExpr(Kind.EQUAL, exprMgr.mkExpr(Kind.SELECT, arr, five), xInt));
Expr assertion = exprMgr.mkExpr(Kind.AND, xEq123, selAat5Eq123, selAat5NotEqX);
smtEngine.assertFormula(assertion);
Result satCheck = smtEngine.checkSat();
assertThat(satCheck.isSat()).isEqualTo(Sat.UNSAT);
}
Aggregations