Search in sources :

Example 96 with Expr

use of com.google.api.expr.v1alpha1.Expr 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 97 with Expr

use of com.google.api.expr.v1alpha1.Expr 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 98 with Expr

use of com.google.api.expr.v1alpha1.Expr in project java-smt by sosy-lab.

the class CVC4BitvectorFormulaManager method toIntegerFormulaImpl.

@Override
protected Expr toIntegerFormulaImpl(Expr pBv, boolean pSigned) {
    Expr intExpr = exprManager.mkExpr(Kind.BITVECTOR_TO_NAT, pBv);
    // CVC4 returns unsigned int by default
    if (pSigned) {
        // TODO check what is cheaper for the solver:
        // checking the first BV-bit or computing max-int-value for the given size
        final int size = Math.toIntExact(new BitVectorType(pBv.getType()).getSize());
        final BigInteger modulo = BigInteger.ONE.shiftLeft(size);
        final BigInteger maxInt = BigInteger.ONE.shiftLeft(size - 1).subtract(BigInteger.ONE);
        final Expr moduloExpr = exprManager.mkConst(new Rational(modulo.toString()));
        final Expr maxIntExpr = exprManager.mkConst(new Rational(maxInt.toString()));
        intExpr = exprManager.mkExpr(Kind.ITE, exprManager.mkExpr(Kind.GT, intExpr, maxIntExpr), exprManager.mkExpr(Kind.MINUS, intExpr, moduloExpr), intExpr);
    }
    return intExpr;
}
Also used : CVC4.vectorExpr(edu.stanford.CVC4.vectorExpr) Expr(edu.stanford.CVC4.Expr) Rational(edu.stanford.CVC4.Rational) BigInteger(java.math.BigInteger) BitVectorType(edu.stanford.CVC4.BitVectorType)

Example 99 with Expr

use of com.google.api.expr.v1alpha1.Expr in project java-smt by sosy-lab.

the class CVC4FloatingPointFormulaManager method genericCast.

private Expr genericCast(Expr pNumber, FormulaType<?> pTargetType) {
    Type type = pNumber.getType();
    FormulaType<?> argType = getFormulaCreator().getFormulaType(pNumber);
    Expr castFuncDecl = getFormulaCreator().declareUFImpl("__cast_" + argType + "_to_" + pTargetType, toSolverType(pTargetType), ImmutableList.of(type));
    return exprManager.mkExpr(Kind.APPLY_UF, castFuncDecl, pNumber);
}
Also used : FloatingPointType(org.sosy_lab.java_smt.api.FormulaType.FloatingPointType) Type(edu.stanford.CVC4.Type) FormulaType(org.sosy_lab.java_smt.api.FormulaType) BitvectorType(org.sosy_lab.java_smt.api.FormulaType.BitvectorType) Expr(edu.stanford.CVC4.Expr)

Example 100 with Expr

use of com.google.api.expr.v1alpha1.Expr in project java-smt by sosy-lab.

the class CVC4FloatingPointFormulaManager method castToImpl.

@Override
protected Expr castToImpl(Expr pNumber, FormulaType<?> pTargetType, Expr pRoundingMode) {
    if (pTargetType.isFloatingPointType()) {
        FloatingPointType targetType = (FloatingPointType) pTargetType;
        FloatingPointConvertSort fpConvertSort = new FloatingPointConvertSort(getFPSize(targetType));
        Expr op = exprManager.mkConst(new FloatingPointToFPFloatingPoint(fpConvertSort));
        return exprManager.mkExpr(op, pRoundingMode, pNumber);
    } else if (pTargetType.isBitvectorType()) {
        BitvectorType targetType = (BitvectorType) pTargetType;
        Expr op = exprManager.mkConst(new FloatingPointToSBV(targetType.getSize()));
        return exprManager.mkExpr(op, pRoundingMode, pNumber);
    } else if (pTargetType.isRationalType()) {
        return exprManager.mkExpr(Kind.FLOATINGPOINT_TO_REAL, pNumber);
    } else {
        return genericCast(pNumber, pTargetType);
    }
}
Also used : FloatingPointToSBV(edu.stanford.CVC4.FloatingPointToSBV) Expr(edu.stanford.CVC4.Expr) FloatingPointConvertSort(edu.stanford.CVC4.FloatingPointConvertSort) BitvectorType(org.sosy_lab.java_smt.api.FormulaType.BitvectorType) FloatingPointToFPFloatingPoint(edu.stanford.CVC4.FloatingPointToFPFloatingPoint) FloatingPointType(org.sosy_lab.java_smt.api.FormulaType.FloatingPointType)

Aggregations

Expr (edu.stanford.CVC4.Expr)57 Test (org.junit.Test)55 CVC4.vectorExpr (edu.stanford.CVC4.vectorExpr)49 SExpr (edu.stanford.CVC4.SExpr)42 Expr (com.microsoft.z3.Expr)32 Result (edu.stanford.CVC4.Result)32 Rational (edu.stanford.CVC4.Rational)28 Expr (com.google.api.expr.v1alpha1.Expr)23 BoolExpr (com.microsoft.z3.BoolExpr)22 ArrayType (edu.stanford.CVC4.ArrayType)12 BitVectorType (edu.stanford.CVC4.BitVectorType)12 Status (com.microsoft.z3.Status)11 Type (edu.stanford.CVC4.Type)11 HashMap (java.util.HashMap)11 Test (org.junit.jupiter.api.Test)11 ParsedExpr (com.google.api.expr.v1alpha1.ParsedExpr)10 CheckedExpr (com.google.api.expr.v1alpha1.CheckedExpr)9 ArithExpr (com.microsoft.z3.ArithExpr)8 BitVecExpr (com.microsoft.z3.BitVecExpr)8 Val (org.projectnessie.cel.common.types.ref.Val)7