mirror of
https://github.com/Z3Prover/z3
synced 2025-08-08 20:21:23 +00:00
model refactor (#4723)
* refactor model fixing Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * missing cond macro Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * file Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * file Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * add macros dependency Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * deps and debug Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * add dependency to normal forms Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * build issues Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * compile Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * fix leal regression * complete model fixer Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * fold back private functionality to model_finder Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * avoid duplicate fixed callbacks Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
6cc52e04c3
commit
fa58a36b9f
42 changed files with 2060 additions and 1494 deletions
66
src/ast/macros/quantifier_macro_info.cpp
Normal file
66
src/ast/macros/quantifier_macro_info.cpp
Normal file
|
@ -0,0 +1,66 @@
|
|||
/*++
|
||||
Copyright (c) 2006 Microsoft Corporation
|
||||
|
||||
Module Name:
|
||||
|
||||
quantifier_macro_info.cpp
|
||||
|
||||
Abstract:
|
||||
|
||||
Macro solving utilities
|
||||
|
||||
Author:
|
||||
|
||||
Leonardo de Moura (leonardo) 2010-12-17.
|
||||
|
||||
Revision History:
|
||||
|
||||
--*/
|
||||
#include "ast/ast_pp.h"
|
||||
#include "ast/macros/quantifier_macro_info.h"
|
||||
|
||||
quantifier_macro_info::quantifier_macro_info(ast_manager& m, quantifier* q) :
|
||||
m(m),
|
||||
m_flat_q(q, m),
|
||||
m_is_auf(true),
|
||||
m_has_x_eq_y(false),
|
||||
m_the_one(m) {
|
||||
SASSERT(is_forall(q));
|
||||
collect_macro_candidates(q);
|
||||
}
|
||||
|
||||
void quantifier_macro_info::collect_macro_candidates(quantifier* q) {
|
||||
macro_util mutil(m);
|
||||
macro_util::macro_candidates candidates(m);
|
||||
mutil.collect_macro_candidates(q, candidates);
|
||||
unsigned num_candidates = candidates.size();
|
||||
for (unsigned i = 0; i < num_candidates; i++) {
|
||||
cond_macro* mc = alloc(cond_macro, m, candidates.get_f(i), candidates.get_def(i), candidates.get_cond(i),
|
||||
candidates.ineq(i), candidates.satisfy_atom(i), candidates.hint(i), q->get_weight());
|
||||
insert_macro(mc);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool quantifier_macro_info::unary_function_fragment() const {
|
||||
unsigned sz = m_ng_decls.size();
|
||||
if (sz > 1)
|
||||
return false;
|
||||
if (sz == 0)
|
||||
return true;
|
||||
func_decl* f = *(m_ng_decls.begin());
|
||||
return f->get_arity() == 1;
|
||||
}
|
||||
|
||||
std::ostream& quantifier_macro_info::display(std::ostream& out) const {
|
||||
out << "info for quantifier:\n" << mk_pp(m_flat_q, m) << "\n";
|
||||
out << "IS_AUF: " << m_is_auf << ", has x=y: " << m_has_x_eq_y << "\n";
|
||||
out << "unary function fragment: " << unary_function_fragment() << "\n";
|
||||
out << "ng decls: ";
|
||||
for (func_decl* f : m_ng_decls)
|
||||
out << f->get_name() << " ";
|
||||
out << "\nmacros:\n";
|
||||
for (cond_macro* cm : m_cond_macros)
|
||||
cm->display(out << " ") << "\n";
|
||||
return out;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue