mirror of
https://github.com/Z3Prover/z3
synced 2025-04-12 12:08:18 +00:00
Refactor mk_th_lemma
This commit is contained in:
parent
915983821b
commit
fcfa6baeca
|
@ -71,6 +71,21 @@ void theory_axiom_reducer::reset() {
|
||||||
m_pinned.reset();
|
m_pinned.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static proof* mk_th_lemma(ast_manager &m, ptr_buffer<proof> const &parents,
|
||||||
|
unsigned num_params, parameter const *params) {
|
||||||
|
buffer<parameter> v;
|
||||||
|
for (unsigned i = 1; i < num_params; ++i)
|
||||||
|
v.push_back(params[i]);
|
||||||
|
|
||||||
|
SASSERT(params[0].is_symbol());
|
||||||
|
family_id tid = m.mk_family_id(params[0].get_symbol());
|
||||||
|
SASSERT(tid != null_family_id);
|
||||||
|
|
||||||
|
return m.mk_th_lemma(tid, m.mk_false(),
|
||||||
|
parents.size(), parents.c_ptr(),
|
||||||
|
num_params-1, v.c_ptr());
|
||||||
|
}
|
||||||
|
|
||||||
// -- rewrite theory axioms into theory lemmas
|
// -- rewrite theory axioms into theory lemmas
|
||||||
proof_ref theory_axiom_reducer::reduce(proof* pr) {
|
proof_ref theory_axiom_reducer::reduce(proof* pr) {
|
||||||
proof_post_order pit(pr, m);
|
proof_post_order pit(pr, m);
|
||||||
|
@ -108,20 +123,10 @@ proof_ref theory_axiom_reducer::reduce(proof* pr) {
|
||||||
hyps.push_back(hyp);
|
hyps.push_back(hyp);
|
||||||
}
|
}
|
||||||
|
|
||||||
// (b) create farkas lemma. Rebuild parameters since
|
// (b) Create a theory lemma
|
||||||
// mk_th_lemma() adds tid as first parameter
|
proof *th_lemma;
|
||||||
unsigned num_params = p->get_decl()->get_num_parameters();
|
func_decl *d = p->get_decl();
|
||||||
parameter const* params = p->get_decl()->get_parameters();
|
th_lemma = mk_th_lemma(m, hyps, d->get_num_parameters(), d->get_parameters());
|
||||||
vector<parameter> parameters;
|
|
||||||
for (unsigned i = 1; i < num_params; ++i) parameters.push_back(params[i]);
|
|
||||||
|
|
||||||
SASSERT(params[0].is_symbol());
|
|
||||||
family_id tid = m.mk_family_id(params[0].get_symbol());
|
|
||||||
SASSERT(tid != null_family_id);
|
|
||||||
|
|
||||||
proof* th_lemma = m.mk_th_lemma(tid, m.mk_false(),
|
|
||||||
hyps.size(), hyps.c_ptr(),
|
|
||||||
num_params-1, parameters.c_ptr());
|
|
||||||
m_pinned.push_back(th_lemma);
|
m_pinned.push_back(th_lemma);
|
||||||
SASSERT(is_arith_lemma(m, th_lemma));
|
SASSERT(is_arith_lemma(m, th_lemma));
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue