// CMW: get_implied_equalities is deprecated. ///*! // \brief Extract implied equalities. //*/ public void get_implied_equalities_example() { if (this.z3 != null) { this.z3.Dispose(); } Config p = new Config(); p.SetParam("ARITH_EQ_BOUNDS","true"); this.z3 = new Context(p); Sort int_sort = z3.MkIntSort(); Expr a = mk_int_var("a"); Expr b = mk_int_var("b"); Expr c = mk_int_var("c"); Expr d = mk_int_var("d"); FuncDecl f = z3.MkFuncDecl("f", int_sort, int_sort); Expr fa = z3.MkApp(f,a); Expr fb = z3.MkApp(f,b); Expr fc = z3.MkApp(f,c); Expr[] Exprs = new Expr[]{ a, b, c, d, fa, fb, fc }; uint[] class_ids; solver.Assert(z3.MkEq(a, b)); solver.Assert(z3.MkEq(b, c)); solver.Assert(z3.MkLe((ArithExpr)fc, (ArithExpr)a)); solver.Assert(z3.MkLe((ArithExpr)b, (ArithExpr)fb)); int num_Exprs = Exprs.Length; z3.GetImpliedEqualities(Exprs, out class_ids); for (int i = 0; i < num_Exprs; ++i) { Console.WriteLine("Class {0} |-> {1}", Exprs[i], class_ids[i]); } }