Search in sources :

Example 61 with Result

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);
}
Also used : CVC4.vectorExpr(edu.stanford.CVC4.vectorExpr) SExpr(edu.stanford.CVC4.SExpr) Expr(edu.stanford.CVC4.Expr) Rational(edu.stanford.CVC4.Rational) CVC4.vectorExpr(edu.stanford.CVC4.vectorExpr) Result(edu.stanford.CVC4.Result) Test(org.junit.Test)

Example 62 with Result

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);
}
Also used : CVC4.vectorExpr(edu.stanford.CVC4.vectorExpr) SExpr(edu.stanford.CVC4.SExpr) Expr(edu.stanford.CVC4.Expr) Rational(edu.stanford.CVC4.Rational) Result(edu.stanford.CVC4.Result) Test(org.junit.Test)

Example 63 with Result

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);
}
Also used : CVC4.vectorExpr(edu.stanford.CVC4.vectorExpr) SExpr(edu.stanford.CVC4.SExpr) Expr(edu.stanford.CVC4.Expr) Rational(edu.stanford.CVC4.Rational) Result(edu.stanford.CVC4.Result) Test(org.junit.Test)

Example 64 with Result

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);
}
Also used : CVC4.vectorExpr(edu.stanford.CVC4.vectorExpr) SExpr(edu.stanford.CVC4.SExpr) Expr(edu.stanford.CVC4.Expr) Rational(edu.stanford.CVC4.Rational) Result(edu.stanford.CVC4.Result) Test(org.junit.Test)

Example 65 with Result

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);
}
Also used : ArrayType(edu.stanford.CVC4.ArrayType) CVC4.vectorExpr(edu.stanford.CVC4.vectorExpr) SExpr(edu.stanford.CVC4.SExpr) Expr(edu.stanford.CVC4.Expr) Rational(edu.stanford.CVC4.Rational) Result(edu.stanford.CVC4.Result) Test(org.junit.Test)

Aggregations

Test (org.junit.Test)46 Result (edu.stanford.CVC4.Result)35 Expr (edu.stanford.CVC4.Expr)32 SExpr (edu.stanford.CVC4.SExpr)32 CVC4.vectorExpr (edu.stanford.CVC4.vectorExpr)31 Rational (edu.stanford.CVC4.Rational)25 Result (com.opensymphony.xwork2.Result)18 List (java.util.List)15 ArrayList (java.util.ArrayList)13 ArrayType (edu.stanford.CVC4.ArrayType)8 CompletableFuture (java.util.concurrent.CompletableFuture)8 TimeUnit (java.util.concurrent.TimeUnit)8 DataSource (jdk.incubator.sql2.DataSource)8 Result (jdk.incubator.sql2.Result)8 Session (jdk.incubator.sql2.Session)8 AfterClass (org.junit.AfterClass)8 BeforeClass (org.junit.BeforeClass)8 BitVectorType (edu.stanford.CVC4.BitVectorType)6 SortType (edu.stanford.CVC4.SortType)6 Type (edu.stanford.CVC4.Type)6