mirror of
https://github.com/Z3Prover/z3
synced 2025-04-22 00:26:38 +00:00
fix zero_ext constraint (2)
This commit is contained in:
parent
6e9f07e7c5
commit
63e81e2bb0
1 changed files with 8 additions and 7 deletions
|
@ -639,18 +639,19 @@ namespace polysat {
|
|||
unsigned const v_sz = p_sz + extra_bits;
|
||||
if (p.is_val())
|
||||
return s.sz2pdd(v_sz).mk_val(p.val());
|
||||
pdd const q = s.var(s.m_names.mk_name(p));
|
||||
constraint_dedup::bv_ext_args const args = {false, q.var(), extra_bits};
|
||||
pvar const p_name = s.m_names.mk_name(p);
|
||||
constraint_dedup::bv_ext_args const args = {false, p_name, extra_bits};
|
||||
auto const it = m_dedup.m_bv_ext_expr.find_iterator(args);
|
||||
if (it != m_dedup.m_bv_ext_expr.end())
|
||||
return s.var(it->m_value);
|
||||
pdd const v = s.var(s.add_var(v_sz));
|
||||
m_dedup.m_bv_ext_expr.insert(args, v.var());
|
||||
pvar const v = s.add_var(v_sz);
|
||||
pdd const V = s.var(v);
|
||||
m_dedup.m_bv_ext_expr.insert(args, v);
|
||||
// (1) v[|p|-1:0] = p
|
||||
s.add_eq(q, extract(v, p.power_of_2() - 1, 0));
|
||||
s.add_eq(extract(V, p_sz - 1, 0), s.var(p_name));
|
||||
// (2) v < 2^|p|
|
||||
s.add_ule(q, p.manager().max_value());
|
||||
return v;
|
||||
s.add_ule(V, p.manager().max_value());
|
||||
return V;
|
||||
}
|
||||
|
||||
pdd constraint_manager::sign_ext(pdd const& p, unsigned extra_bits) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue