All Downloads are FREE. Search and download functionalities are using the official Maven repository.

z3-z3-4.12.6.src.api.api_solver.h Maven / Gradle / Ivy

There is a newer version: 4.13.0.1
Show newest version
/*++
Copyright (c) 2012 Microsoft Corporation

Module Name:

    api_solver.h

Abstract:
    New solver API

Author:

    Leonardo de Moura (leonardo) 2012-03-07.

Revision History:

--*/
#pragma once

#include "util/mutex.h"
#include "api/api_util.h"
#include "solver/solver.h"

struct solver2smt2_pp {
    ast_pp_util     m_pp_util;
    std::ofstream   m_out;
    expr_ref_vector m_tracked;
    unsigned_vector m_tracked_lim;

    solver2smt2_pp(ast_manager& m, const std::string& file);
    void assert_expr(expr* e);
    void assert_expr(expr* e, expr* t);
    void push();
    void pop(unsigned n);
    void reset();
    void check(unsigned n, expr* const* asms);
    void get_consequences(expr_ref_vector const& assumptions, expr_ref_vector const& variables);

};

struct Z3_solver_ref : public api::object {
    scoped_ptr m_solver_factory;
    ref                m_solver;
    params_ref                 m_params;
    param_descrs               m_param_descrs;
    symbol                     m_logic;
    scoped_ptr m_pp;
    scoped_ptr    m_cmd_context;
    mutex                      m_mux;
    event_handler*             m_eh;

    Z3_solver_ref(api::context& c, solver_factory * f): 
        api::object(c), m_solver_factory(f), m_solver(nullptr), m_logic(symbol::null), m_eh(nullptr) {}

    Z3_solver_ref(api::context& c, solver * s): 
        api::object(c), m_solver_factory(nullptr), m_solver(s), m_logic(symbol::null), m_eh(nullptr) {}

    void assert_expr(expr* e);
    void assert_expr(expr* e, expr* t);
    void set_eh(event_handler* eh);
    void set_cancel();

};

inline Z3_solver_ref * to_solver(Z3_solver s) { return reinterpret_cast(s); }
inline Z3_solver of_solver(Z3_solver_ref * s) { return reinterpret_cast(s); }
inline solver * to_solver_ref(Z3_solver s) { return to_solver(s)->m_solver.get(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy