mirror of
https://github.com/Z3Prover/z3
synced 2025-08-07 19:51:22 +00:00
first cut of fpa solver
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
4cb07a539b
commit
2087c01cac
7 changed files with 601 additions and 31 deletions
74
src/sat/smt/fpa_solver.h
Normal file
74
src/sat/smt/fpa_solver.h
Normal file
|
@ -0,0 +1,74 @@
|
|||
/*++
|
||||
Copyright (c) 2014 Microsoft Corporation
|
||||
|
||||
Module Name:
|
||||
|
||||
fpa_solver.h
|
||||
|
||||
Abstract:
|
||||
|
||||
Floating-Point Theory Plugin
|
||||
|
||||
Author:
|
||||
|
||||
Christoph (cwinter) 2014-04-23
|
||||
|
||||
Revision History:
|
||||
|
||||
--*/
|
||||
#pragma once
|
||||
|
||||
#include "sat/smt/euf_solver.h"
|
||||
#include "ast/fpa/fpa2bv_converter.h"
|
||||
#include "ast/fpa/fpa2bv_rewriter.h"
|
||||
|
||||
namespace fpa {
|
||||
|
||||
typedef euf::enode enode;
|
||||
typedef euf::theory_var theory_var;
|
||||
|
||||
class solver : public euf::th_euf_solver {
|
||||
protected:
|
||||
th_rewriter m_th_rw;
|
||||
fpa2bv_converter_wrapped m_converter;
|
||||
fpa2bv_rewriter m_rw;
|
||||
fpa_util & m_fpa_util;
|
||||
bv_util & m_bv_util;
|
||||
arith_util & m_arith_util;
|
||||
obj_map<expr, expr*> m_conversions;
|
||||
obj_hashtable<func_decl> m_is_added_to_model;
|
||||
|
||||
bool visit(expr* e) override;
|
||||
bool visited(expr* e) override;
|
||||
bool post_visit(expr* e, bool sign, bool root) override;
|
||||
|
||||
expr_ref convert(expr* e);
|
||||
sat::literal_vector mk_side_conditions();
|
||||
void attach_new_th_var(enode* n);
|
||||
void activate(expr* e);
|
||||
void ensure_equality_relation(theory_var x, theory_var y);
|
||||
expr* bv2rm_value(expr* b);
|
||||
expr* bvs2fpa_value(sort* s, expr* a, expr* b, expr* c);
|
||||
|
||||
|
||||
public:
|
||||
solver(euf::solver& ctx);
|
||||
~solver() override;
|
||||
|
||||
void asserted(sat::literal l) override;
|
||||
void new_eq_eh(euf::th_eq const& eq) override;
|
||||
bool use_diseqs() const override { return true; }
|
||||
void new_diseq_eh(euf::th_eq const& eq) override;
|
||||
|
||||
sat::literal internalize(expr* e, bool sign, bool root, bool learned) override;
|
||||
void internalize(expr* e, bool redundant) override;
|
||||
void apply_sort_cnstr(euf::enode* n, sort* s) override;
|
||||
|
||||
std::ostream& display(std::ostream& out) const override;
|
||||
|
||||
void add_value(euf::enode* n, model& mdl, expr_ref_vector& values) override;
|
||||
void add_dep(euf::enode* n, top_sort<euf::enode>& dep) override;
|
||||
};
|
||||
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue