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);
}
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);
}
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;
}
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);
}
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);
}
}
Aggregations