:
private static RealExpr max2(Context ctx, ArithExpr x, ArithExpr y)
throws Z3Exception {
return (RealExpr) ctx.mkITE(ctx.mkLe(x, y), y, x);
}
, , :
Context ctx = new Context();
ArithExpr a = (ArithExpr) ctx.mkConst(ctx.mkSymbol("a"), ctx.getRealSort());
ArithExpr b = (ArithExpr) ctx.mkConst(ctx.mkSymbol("b"), ctx.getRealSort());
BoolExpr c = (BoolExpr) ctx.mkConst(ctx.mkSymbol("c"), ctx.getBoolSort());
Goal g = ctx.mkGoal(true, true, false);
g.add(ctx.mkAnd(ctx.mkGe(a, ctx.mkReal(0)), ctx.mkLe(a, ctx.mkReal(100))));
g.add(ctx.mkOr(
ctx.mkEq(
max2(ctx,
ctx.mkAdd(ctx.mkReal(100), ctx.mkMul(ctx.mkReal(-1), a)),
ctx.mkDiv(ctx.mkReal(1), ctx.mkReal(1000))),
ctx.mkReal(0)),
c,
(ctx.mkNot(ctx.mkEq(b, ctx.mkReal(0))))));