3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-23 17:15:31 +00:00

Merge branch 'unstable' into contrib

This commit is contained in:
Leonardo de Moura 2013-04-09 08:44:57 -07:00
commit f773f35517
177 changed files with 8165 additions and 2548 deletions

View file

@ -883,6 +883,29 @@ void incremental_example3() {
std::cout << s.check(a2) << "\n";
}
void enum_sort_example() {
std::cout << "enumeration sort example\n";
context ctx;
const char * enum_names[] = { "a", "b", "c" };
func_decl_vector enum_consts(ctx);
func_decl_vector enum_testers(ctx);
sort s = ctx.enumeration_sort("enumT", 3, enum_names, enum_consts, enum_testers);
// enum_consts[0] is a func_decl of arity 0.
// we convert it to an expression using the operator()
expr a = enum_consts[0]();
expr b = enum_consts[1]();
expr x = ctx.constant("x", s);
expr test = (x==a) && (x==b);
std::cout << "1: " << test << std::endl;
tactic qe(ctx, "ctx-solver-simplify");
goal g(ctx);
g.add(test);
expr res(ctx);
apply_result result_of_elimination = qe.apply(g);
goal result_goal = result_of_elimination[0];
std::cout << "2: " << result_goal.as_expr() << std::endl;
}
int main() {
try {
demorgan(); std::cout << "\n";
@ -917,6 +940,7 @@ int main() {
incremental_example1(); std::cout << "\n";
incremental_example2(); std::cout << "\n";
incremental_example3(); std::cout << "\n";
enum_sort_example(); std::cout << "\n";
std::cout << "done\n";
}
catch (exception & ex) {

View file

@ -197,7 +197,7 @@ class JavaExample
TestFailedException
{
Solver s = ctx.mkSolver();
s.assert_(f);
s.add(f);
if (s.check() != sat)
throw new TestFailedException();
if (sat == Status.SATISFIABLE)
@ -213,7 +213,7 @@ class JavaExample
System.out.println("\nTactical solver: " + s);
for (BoolExpr a : g.getFormulas())
s.assert_(a);
s.add(a);
System.out.println("Solver: " + s);
if (s.check() != sat)
@ -266,8 +266,8 @@ class JavaExample
p.add("mbqi", useMBQI);
s.setParameters(p);
for (BoolExpr a : assumptions)
s.assert_(a);
s.assert_(ctx.mkNot(f));
s.add(a);
s.add(ctx.mkNot(f));
Status q = s.check();
switch (q)
@ -299,8 +299,8 @@ class JavaExample
p.add("mbqi", useMBQI);
s.setParameters(p);
for (BoolExpr a : assumptions)
s.assert_(a);
s.assert_(ctx.mkNot(f));
s.add(a);
s.add(ctx.mkNot(f));
Status q = s.check();
switch (q)
@ -326,9 +326,9 @@ class JavaExample
ArithExpr yr = (ArithExpr) ctx.mkConst(ctx.mkSymbol("y"),
ctx.mkRealSort());
Goal g4 = ctx.mkGoal(true, false, false);
g4.assert_(ctx.mkGt(xr, ctx.mkReal(10, 1)));
g4.assert_(ctx.mkEq(yr, ctx.mkAdd(xr, ctx.mkReal(1, 1))));
g4.assert_(ctx.mkGt(yr, ctx.mkReal(1, 1)));
g4.add(ctx.mkGt(xr, ctx.mkReal(10, 1)));
g4.add(ctx.mkEq(yr, ctx.mkAdd(xr, ctx.mkReal(1, 1))));
g4.add(ctx.mkGt(yr, ctx.mkReal(1, 1)));
ApplyResult ar = applyTactic(ctx, ctx.mkTactic("simplify"), g4);
if (ar.getNumSubgoals() == 1
@ -345,7 +345,7 @@ class JavaExample
Solver s = ctx.mkSolver();
for (BoolExpr e : ar.getSubgoals()[0].getFormulas())
s.assert_(e);
s.add(e);
Status q = s.check();
System.out.println("Solver says: " + q);
System.out.println("Model: \n" + s.getModel());
@ -367,7 +367,7 @@ class JavaExample
ctx.mkBitVecSort(32));
ArrayExpr aex = (ArrayExpr) ctx.mkConst(ctx.mkSymbol("MyArray"), asort);
Expr sel = ctx.mkSelect(aex, ctx.mkInt(0));
g.assert_(ctx.mkEq(sel, ctx.mkBV(42, 32)));
g.add(ctx.mkEq(sel, ctx.mkBV(42, 32)));
Symbol xs = ctx.mkSymbol("x");
IntExpr xc = (IntExpr) ctx.mkConst(xs, ctx.getIntSort());
@ -377,11 +377,11 @@ class JavaExample
Expr[] fargs = { ctx.mkConst(xs, ctx.getIntSort()) };
IntExpr fapp = (IntExpr) ctx.mkApp(fd, fargs);
g.assert_(ctx.mkEq(ctx.mkAdd(xc, fapp), ctx.mkInt(123)));
g.add(ctx.mkEq(ctx.mkAdd(xc, fapp), ctx.mkInt(123)));
Solver s = ctx.mkSolver();
for (BoolExpr a : g.getFormulas())
s.assert_(a);
s.add(a);
System.out.println("Solver: " + s);
Status q = s.check();
@ -574,8 +574,8 @@ class JavaExample
ctx.mkEq(X[i][j], ctx.mkInt(instance[i][j]))));
Solver s = ctx.mkSolver();
s.assert_(sudoku_c);
s.assert_(instance_c);
s.add(sudoku_c);
s.add(instance_c);
if (s.check() == Status.SATISFIABLE)
{
@ -798,14 +798,14 @@ class JavaExample
BoolExpr nontrivial_eq = ctx.mkEq(fapp, fapp2);
Goal g = ctx.mkGoal(true, false, false);
g.assert_(trivial_eq);
g.assert_(nontrivial_eq);
g.add(trivial_eq);
g.add(nontrivial_eq);
System.out.println("Goal: " + g);
Solver solver = ctx.mkSolver();
for (BoolExpr a : g.getFormulas())
solver.assert_(a);
solver.add(a);
if (solver.check() != Status.SATISFIABLE)
throw new TestFailedException();
@ -820,7 +820,7 @@ class JavaExample
if (ar.getNumSubgoals() != 1 || !ar.getSubgoals()[0].isDecidedSat())
throw new TestFailedException();
g.assert_(ctx.mkEq(ctx.mkNumeral(1, ctx.mkBitVecSort(32)),
g.add(ctx.mkEq(ctx.mkNumeral(1, ctx.mkBitVecSort(32)),
ctx.mkNumeral(2, ctx.mkBitVecSort(32))));
ar = applyTactic(ctx, ctx.mkTactic("smt"), g);
if (ar.getNumSubgoals() != 1 || !ar.getSubgoals()[0].isDecidedUnsat())
@ -832,7 +832,7 @@ class JavaExample
throw new TestFailedException();
g2 = ctx.mkGoal(true, true, false);
g2.assert_(ctx.mkFalse());
g2.add(ctx.mkFalse());
ar = applyTactic(ctx, ctx.mkTactic("smt"), g2);
if (ar.getNumSubgoals() != 1 || !ar.getSubgoals()[0].isDecidedUnsat())
throw new TestFailedException();
@ -840,10 +840,10 @@ class JavaExample
Goal g3 = ctx.mkGoal(true, true, false);
Expr xc = ctx.mkConst(ctx.mkSymbol("x"), ctx.getIntSort());
Expr yc = ctx.mkConst(ctx.mkSymbol("y"), ctx.getIntSort());
g3.assert_(ctx.mkEq(xc, ctx.mkNumeral(1, ctx.getIntSort())));
g3.assert_(ctx.mkEq(yc, ctx.mkNumeral(2, ctx.getIntSort())));
g3.add(ctx.mkEq(xc, ctx.mkNumeral(1, ctx.getIntSort())));
g3.add(ctx.mkEq(yc, ctx.mkNumeral(2, ctx.getIntSort())));
BoolExpr constr = ctx.mkEq(xc, yc);
g3.assert_(constr);
g3.add(constr);
ar = applyTactic(ctx, ctx.mkTactic("smt"), g3);
if (ar.getNumSubgoals() != 1 || !ar.getSubgoals()[0].isDecidedUnsat())
throw new TestFailedException();
@ -1110,13 +1110,13 @@ class JavaExample
// Use a solver for QF_BV
Solver s = ctx.mkSolver("QF_BV");
s.assert_(eq);
s.add(eq);
Status res = s.check();
System.out.println("solver result: " + res);
// Or perhaps a tactic for QF_BV
Goal g = ctx.mkGoal(true, false, false);
g.assert_(eq);
g.add(eq);
Tactic t = ctx.mkTactic("qfbv");
ApplyResult ar = t.apply(g);
@ -1139,7 +1139,7 @@ class JavaExample
BoolExpr q = ctx.mkEq(x, y);
Goal g = ctx.mkGoal(true, false, false);
g.assert_(q);
g.add(q);
Tactic t1 = ctx.mkTactic("qfbv");
Tactic t2 = ctx.mkTactic("qfbv");
@ -1341,7 +1341,7 @@ class JavaExample
/* assert x >= "big number" */
BoolExpr c1 = ctx.mkGe(x, big_number);
System.out.println("assert: x >= 'big number'");
solver.assert_(c1);
solver.add(c1);
/* create a backtracking point */
System.out.println("push");
@ -1350,7 +1350,7 @@ class JavaExample
/* assert x <= 3 */
BoolExpr c2 = ctx.mkLe(x, three);
System.out.println("assert: x <= 3");
solver.assert_(c2);
solver.add(c2);
/* context is inconsistent at this point */
if (solver.check() != Status.UNSATISFIABLE)
@ -1375,7 +1375,7 @@ class JavaExample
/* assert y > x */
BoolExpr c3 = ctx.mkGt(y, x);
System.out.println("assert: y > x");
solver.assert_(c3);
solver.add(c3);
/* the context is still consistent. */
if (solver.check() != Status.SATISFIABLE)
@ -1911,10 +1911,10 @@ class JavaExample
Solver solver = ctx.mkSolver();
/* assert x < y */
solver.assert_(ctx.mkLt(x, y));
solver.add(ctx.mkLt(x, y));
/* assert x > 2 */
solver.assert_(ctx.mkGt(x, two));
solver.add(ctx.mkGt(x, two));
/* find model for the constraints above */
Model model = null;
@ -1964,9 +1964,9 @@ class JavaExample
Solver solver = ctx.mkSolver();
/* assert tup1 != tup2 */
solver.assert_(ctx.mkNot(ctx.mkEq(tup1, tup2)));
solver.add(ctx.mkNot(ctx.mkEq(tup1, tup2)));
/* assert first tup1 = first tup2 */
solver.assert_(ctx.mkEq(ctx.mkApp(first, tup1), ctx.mkApp(first, tup2)));
solver.add(ctx.mkEq(ctx.mkApp(first, tup1), ctx.mkApp(first, tup2)));
/* find model for the constraints above */
Model model = null;
@ -2014,7 +2014,7 @@ class JavaExample
// Assert all feasible bounds.
for (int i = 0; i < num_Exprs; ++i)
{
solver.assert_(ctx.mkBVULE(to_minimize[i],
solver.add(ctx.mkBVULE(to_minimize[i],
ctx.mkBV(upper[i], 32)));
}
@ -2050,7 +2050,7 @@ class JavaExample
{
last_upper = (upper[i] + lower[i]) / 2;
last_index = i;
solver.assert_(ctx.mkBVULE(to_minimize[i],
solver.add(ctx.mkBVULE(to_minimize[i],
ctx.mkBV(last_upper, 32)));
some_work = true;
break;
@ -2074,7 +2074,7 @@ class JavaExample
Solver solver = ctx.mkSolver();
solver.assert_(ctx.mkBVULE(x, ctx.mkBVAdd(y, z)));
solver.add(ctx.mkBVULE(x, ctx.mkBVAdd(y, z)));
checkSmall(ctx, solver, x, y, z);
}
@ -2120,10 +2120,10 @@ class JavaExample
BoolExpr f3 = ctx.mkOr(ctx.mkNot(pa), ctx.mkNot(pc));
BoolExpr f4 = pd;
solver.assert_(ctx.mkOr(f1, p1));
solver.assert_(ctx.mkOr(f2, p2));
solver.assert_(ctx.mkOr(f3, p3));
solver.assert_(ctx.mkOr(f4, p4));
solver.add(ctx.mkOr(f1, p1));
solver.add(ctx.mkOr(f2, p2));
solver.add(ctx.mkOr(f3, p3));
solver.add(ctx.mkOr(f4, p4));
Status result = solver.check(assumptions);
if (result == Status.UNSATISFIABLE)