private Status lboolToStatus(Z3_lbool r) { switch (r) { case Z3_lbool.Z3_L_TRUE: return(Status.SATISFIABLE); case Z3_lbool.Z3_L_FALSE: return(Status.UNSATISFIABLE); default: return(Status.UNKNOWN); } }
/// <summary> /// Query the fixedpoint solver. /// A query is a conjunction of constraints. The constraints may include the recursively defined relations. /// The query is satisfiable if there is an instance of the query variables and a derivation for it. /// The query is unsatisfiable if there are no derivations satisfying the query variables. /// </summary> public Status Query(BoolExpr query) { Contract.Requires(query != null); Context.CheckContextMatch(query); Z3_lbool r = (Z3_lbool)Native.Z3_fixedpoint_query(Context.nCtx, NativeObject, query.NativeObject); switch (r) { case Z3_lbool.Z3_L_TRUE: return(Status.SATISFIABLE); case Z3_lbool.Z3_L_FALSE: return(Status.UNSATISFIABLE); default: return(Status.UNKNOWN); } }
/// <summary> /// Check satisfiability of asserted constraints. /// Produce a model that (when the objectives are bounded and /// don't use strict inequalities) meets the objectives. /// </summary> /// public Status Check(params Expr[] assumptions) { Z3_lbool r = (Z3_lbool)Native.Z3_optimize_check(Context.nCtx, NativeObject, (uint)assumptions.Length, AST.ArrayToNative(assumptions)); switch (r) { case Z3_lbool.Z3_L_TRUE: return(Status.SATISFIABLE); case Z3_lbool.Z3_L_FALSE: return(Status.UNSATISFIABLE); default: return(Status.UNKNOWN); } }
/// /// <summary> /// Check satisfiability of asserted constraints. /// Produce a model that (when the objectives are bounded and /// don't use strict inequalities) meets the objectives. /// </summary> /// public Status Check() { Z3_lbool r = (Z3_lbool)Native.Z3_optimize_check(Context.nCtx, NativeObject); switch (r) { case Z3_lbool.Z3_L_TRUE: return(Status.SATISFIABLE); case Z3_lbool.Z3_L_FALSE: return(Status.UNSATISFIABLE); default: return(Status.UNKNOWN); } }
/// <summary> /// Query the fixedpoint solver. /// A query is an array of relations. /// The query is satisfiable if there is an instance of some relation that is non-empty. /// The query is unsatisfiable if there are no derivations satisfying any of the relations. /// </summary> public Status Query(FuncDecl[] relations) { Contract.Requires(relations != null); Contract.Requires(Contract.ForAll(0, relations.Length, i => relations[i] != null)); Context.CheckContextMatch(relations); Z3_lbool r = (Z3_lbool)Native.Z3_fixedpoint_query_relations(Context.nCtx, NativeObject, AST.ArrayLength(relations), AST.ArrayToNative(relations)); switch (r) { case Z3_lbool.Z3_L_TRUE: return(Status.SATISFIABLE); case Z3_lbool.Z3_L_FALSE: return(Status.UNSATISFIABLE); default: return(Status.UNKNOWN); } }
/// <summary> /// Query the fixedpoint solver. /// A query is an array of relations. /// The query is satisfiable if there is an instance of some relation that is non-empty. /// The query is unsatisfiable if there are no derivations satisfying any of the relations. /// </summary> public Status Query(params FuncDecl[] relations) { Debug.Assert(relations != null); Debug.Assert(relations.All(rel => rel != null)); Context.CheckContextMatch <FuncDecl>(relations); Z3_lbool r = (Z3_lbool)Native.Z3_fixedpoint_query_relations(Context.nCtx, NativeObject, AST.ArrayLength(relations), AST.ArrayToNative(relations)); switch (r) { case Z3_lbool.Z3_L_TRUE: return(Status.SATISFIABLE); case Z3_lbool.Z3_L_FALSE: return(Status.UNSATISFIABLE); default: return(Status.UNKNOWN); } }
/// <summary> /// Retrieve fixed assignments to the set of variables in the form of consequences. /// Each consequence is an implication of the form /// /// relevant-assumptions Implies variable = value /// /// where the relevant assumptions is a subset of the assumptions that are passed in /// and the equality on the right side of the implication indicates how a variable /// is fixed. /// </summary> /// <remarks> /// <seealso cref="Model"/> /// <seealso cref="UnsatCore"/> /// <seealso cref="Proof"/> /// </remarks> public Status Consequences(IEnumerable <BoolExpr> assumptions, IEnumerable <Expr> variables, out BoolExpr[] consequences) { using ASTVector result = new ASTVector(Context); using ASTVector asms = new ASTVector(Context); using ASTVector vars = new ASTVector(Context); foreach (var asm in assumptions) { asms.Push(asm); } foreach (var v in variables) { vars.Push(v); } Z3_lbool r = (Z3_lbool)Native.Z3_solver_get_consequences(Context.nCtx, NativeObject, asms.NativeObject, vars.NativeObject, result.NativeObject); consequences = result.ToBoolExprArray(); return(lboolToStatus(r)); }
private Status lboolToStatus(Z3_lbool r) { switch (r) { case Z3_lbool.Z3_L_TRUE: return Status.SATISFIABLE; case Z3_lbool.Z3_L_FALSE: return Status.UNSATISFIABLE; default: return Status.UNKNOWN; } }