3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-15 15:25:26 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2020-05-05 09:51:28 -07:00
parent a34c5a9450
commit 3985943eec
3 changed files with 38 additions and 167 deletions

View file

@ -58,30 +58,6 @@ namespace smt {
unsigned m_num_lemmas;
typedef svector<std::pair<expr*,expr*>> expr_pair_vector;
struct abstraction {
expr_ref m_term;
expr_pair_vector m_eqs;
abstraction(expr_ref& e): m_term(e) {}
abstraction(ast_manager& m, expr* e, expr* n1, expr* n2): m_term(e, m) {
if (n1 != n2) m_eqs.push_back(std::make_pair(n1, n2));
}
abstraction(ast_manager& m, expr* e, expr_pair_vector const& eqs):
m_term(e, m), m_eqs(eqs) {
}
};
typedef vector<abstraction> abstractions;
struct abstraction_arg {
expr_ref_vector m_terms;
expr_pair_vector m_eqs;
abstraction_arg(ast_manager& m): m_terms(m) {}
void push_back(abstraction& a) {
m_terms.push_back(a.m_term);
m_eqs.append(a.m_eqs);
}
};
typedef vector<abstraction_arg> abstraction_args;
typedef std::pair<expr_ref_vector, expr_ref> cond_subst_t;
typedef vector<cond_subst_t> cond_substs_t;
@ -90,14 +66,10 @@ namespace smt {
bool viable_induction_children(enode* n);
bool viable_induction_term(enode* p , enode* n);
enode_vector induction_positions(enode* n);
void abstract(enode* n, enode* t, expr* x, abstractions& result);
void abstract1(enode* n, enode* t, expr* x, abstractions& result);
void filter_abstractions(bool sign, abstractions& abs);
void create_lemmas(expr* sk, abstraction& a, literal lit);
void mk_hypothesis_substs(unsigned depth, expr* x, cond_substs_t& subst);
void mk_hypothesis_substs_rec(unsigned depth, sort* s, expr* y, expr_ref_vector& conds, cond_substs_t& subst);
void mk_hypothesis_lemma(expr_ref_vector const& conds, expr_pair_vector const& subst, literal alpha);
void create_hypotheses(unsigned depth, expr* sk, literal alpha);
void create_hypotheses(unsigned depth, expr_ref_vector const& sks, literal alpha);
literal mk_literal(expr* e);
void add_th_lemma(literal_vector const& lits);