mirror of
https://github.com/Z3Prover/z3
synced 2025-04-22 16:45:31 +00:00
parent
acb9376ea0
commit
519c0d5f11
1 changed files with 22 additions and 2 deletions
|
@ -546,14 +546,34 @@ struct aig_manager::imp {
|
|||
}
|
||||
|
||||
void mk_iff(unsigned spos) {
|
||||
if (spos + 2 != m_result_stack.size())
|
||||
throw default_exception("aig conversion assumes expressions have been simplified");
|
||||
SASSERT(spos + 2 == m_result_stack.size());
|
||||
aig_lit r = m.mk_iff(m_result_stack[spos], m_result_stack[spos+1]);
|
||||
save_node_result(spos, r);
|
||||
}
|
||||
|
||||
void mk_xor(unsigned spos) {
|
||||
SASSERT(spos + 2 == m_result_stack.size());
|
||||
aig_lit r = m.mk_xor(m_result_stack[spos], m_result_stack[spos+1]);
|
||||
SASSERT(spos <= m_result_stack.size());
|
||||
unsigned num = m_result_stack.size() - spos;
|
||||
aig_lit r;
|
||||
switch (num) {
|
||||
case 0:
|
||||
r = m.m_true;
|
||||
break;
|
||||
case 1:
|
||||
r = m_result_stack[spos];
|
||||
break;
|
||||
case 2:
|
||||
r = m.mk_xor(m_result_stack[spos], m_result_stack[spos+1]);
|
||||
break;
|
||||
default:
|
||||
r = m.mk_xor(m_result_stack[spos], m_result_stack[spos+1]);
|
||||
for (unsigned i = 2; i < num; ++i) {
|
||||
r = m.mk_xor(r, m_result_stack[spos + i]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
save_node_result(spos, r);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue