mirror of
https://github.com/Z3Prover/z3
synced 2025-05-09 00:35:47 +00:00
Z3 sources
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
parent
3f9edad676
commit
e9eab22e5c
1186 changed files with 381859 additions and 0 deletions
97
lib/arith_eq_adapter.h
Normal file
97
lib/arith_eq_adapter.h
Normal file
|
@ -0,0 +1,97 @@
|
|||
/*++
|
||||
Copyright (c) 2006 Microsoft Corporation
|
||||
|
||||
Module Name:
|
||||
|
||||
arith_eq_adapter.h
|
||||
|
||||
Abstract:
|
||||
|
||||
<abstract>
|
||||
|
||||
Author:
|
||||
|
||||
Leonardo de Moura (leonardo) 2008-05-25.
|
||||
|
||||
Revision History:
|
||||
|
||||
--*/
|
||||
#ifndef _ARITH_EQ_ADAPTER_H_
|
||||
#define _ARITH_EQ_ADAPTER_H_
|
||||
|
||||
#include"smt_theory.h"
|
||||
#include"obj_pair_hashtable.h"
|
||||
#include"arith_decl_plugin.h"
|
||||
#include"statistics.h"
|
||||
#include"arith_simplifier_plugin.h"
|
||||
|
||||
namespace smt {
|
||||
|
||||
struct arith_eq_adapter_stats {
|
||||
unsigned m_num_eq_axioms;
|
||||
void reset() { m_num_eq_axioms = 0; }
|
||||
arith_eq_adapter_stats() { reset(); }
|
||||
};
|
||||
|
||||
/**
|
||||
\brief Auxiliary class used to convert (dis) equalities
|
||||
propagated from the core into arith equalities/inequalities
|
||||
atoms. This class is used by the arithmetic theories to
|
||||
handle the (dis) equalities propagated from the logical context.
|
||||
|
||||
- config 1:
|
||||
recreate axioms at restart
|
||||
|
||||
- config 2:
|
||||
lazy diseq split
|
||||
*/
|
||||
class arith_eq_adapter {
|
||||
public:
|
||||
arith_eq_adapter_stats m_stats;
|
||||
|
||||
private:
|
||||
struct data {
|
||||
expr * m_t1_eq_t2;
|
||||
expr * m_le;
|
||||
expr * m_ge;
|
||||
data():m_t1_eq_t2(0), m_le(0), m_ge(0) {}
|
||||
data(expr * t1_eq_t2, expr * le, expr * ge):m_t1_eq_t2(t1_eq_t2), m_le(le), m_ge(ge) {}
|
||||
};
|
||||
|
||||
public:
|
||||
typedef obj_pair_map<enode, enode, data> already_processed;
|
||||
|
||||
private:
|
||||
theory & m_owner;
|
||||
theory_arith_params & m_params;
|
||||
arith_util & m_util;
|
||||
arith_simplifier_plugin * m_as;
|
||||
|
||||
already_processed m_already_processed;
|
||||
svector<enode_pair> m_restart_pairs;
|
||||
svector<parameter> m_proof_hint;
|
||||
|
||||
context & get_context() const { return m_owner.get_context(); }
|
||||
ast_manager & get_manager() const { return m_owner.get_manager(); }
|
||||
enode * get_enode(theory_var v) const { return m_owner.get_enode(v); }
|
||||
|
||||
arith_simplifier_plugin * get_simplifier();
|
||||
|
||||
public:
|
||||
arith_eq_adapter(theory & owner, theory_arith_params & params, arith_util & u):m_owner(owner), m_params(params), m_util(u), m_as(0) {}
|
||||
void new_eq_eh(theory_var v1, theory_var v2);
|
||||
void new_diseq_eh(theory_var v1, theory_var v2);
|
||||
void reset_eh();
|
||||
void init_search_eh();
|
||||
void restart_eh();
|
||||
/**
|
||||
\brief Add the eq axioms for n1 and n2.
|
||||
*/
|
||||
void mk_axioms(enode * n1, enode * n2);
|
||||
void collect_statistics(::statistics & st) const;
|
||||
void display_already_processed(std::ostream & out) const;
|
||||
};
|
||||
};
|
||||
|
||||
#endif /* _ARITH_EQ_ADAPTER_H_ */
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue