package jayhorn.solver.spacer; import java.util.HashMap; import com.microsoft.z3.BoolExpr; import com.microsoft.z3.Context; import com.microsoft.z3.Fixedpoint; import com.microsoft.z3.FuncDecl; import com.microsoft.z3.Global; import com.microsoft.z3.Sort; import com.microsoft.z3.Status; import com.microsoft.z3.Symbol; import com.microsoft.z3.Z3Exception; public class SpacerTest { public static void main(String[] args) throws Z3Exception { Global.setParameter("fixedpoint.engine", "spacer"); HashMap<String, String> cfg = new HashMap<String, String>(); Context ctx = new Context(cfg); Fixedpoint fp = ctx.mkFixedpoint(); /* declare function g */ Sort I = ctx.mkIntSort(); FuncDecl g = ctx.mkFuncDecl("g", new Sort[] { I, I }, I); ctx.parseSMTLIBString( "(benchmark tst :formula (forall (x Int) (y Int) (implies (= x y) (= (ggd x 0) (gg 0 y)))))", null, null, new Symbol[] { ctx.mkSymbol("gg") }, new FuncDecl[] { g }); BoolExpr thm = ctx.getSMTLIBFormulas()[0]; System.out.println("formula: " + thm); FuncDecl a = ctx.mkConstDecl("a", ctx.mkBoolSort()); fp.registerRelation(a); ctx.mkConst("x", ctx.mkBoolSort()); FuncDecl b = ctx.mkConstDecl("b", ctx.mkBoolSort()); fp.registerRelation(b); FuncDecl c = ctx.mkConstDecl("c", ctx.mkBoolSort()); fp.registerRelation(c); fp.addFact(b); fp.addRule( ctx.mkImplies( (BoolExpr) b.apply(), (BoolExpr) a.apply() ), null ); fp.addRule( ctx.mkImplies( (BoolExpr) c.apply(), (BoolExpr) b.apply() ), null ); System.out.println(fp); Status ans = fp.query((BoolExpr) a.apply()); System.out.println(ans); // // System.out.println("===================="); // // fp.addRule((BoolExpr) c.apply(), null); // System.out.println(fp); // // // ans = fp.query((BoolExpr) a.apply()); // System.out.println(ans); // BoolSort b = ctx.getBoolSort(); // BoolExpr v = (BoolExpr) ctx.mkBound(1, b); //// BoolExpr v2 = (BoolExpr) ctx.mkBound(1, b); // FuncDecl p = ctx.mkFuncDecl("p", new Sort[]{b, b}, b); // FuncDecl p2 = ctx.mkFuncDecl("p2", new Sort[]{b, b}, b); // Fixedpoint fp = ctx.mkFixedpoint(); // fp.setPredicateRepresentation(p, new Symbol[] {ctx.mkSymbol("interval_relation")}); // fp.registerRelation(p); // fp.registerRelation(p2); // fp.addRule(ctx.mkImplies((BoolExpr) p.apply(v, v), (BoolExpr) p2.apply(v, v)), null); // int[] array = new int[2]; // array[0] = 1; // array[1] = 0; // fp.addFact(p, array); // System.out.println(fp); // Status a = fp.query((BoolExpr) p2.apply(ctx.mkBool(true), ctx.mkBool(true))); // System.out.println(a); // System.out.println(fp.getAnswer()); } }