Exemplo n.º 1
0
Arquivo: Solver.cs Projeto: ingdas/z3
        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);
            }
        }
Exemplo n.º 2
0
        /// <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);
            }
        }
Exemplo n.º 3
0
        /// <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);
            }
        }
Exemplo n.º 4
0
        ///
        /// <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);
            }
        }
Exemplo n.º 5
0
        /// <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);
            }
        }
Exemplo n.º 6
0
        /// <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);
            }
        }
Exemplo n.º 7
0
        /// <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));
        }
Exemplo n.º 8
0
 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;
     }
 }