3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-14 06:45:25 +00:00

slicing interface

This commit is contained in:
Jakob Rath 2023-07-12 15:56:27 +02:00
parent 1d3a31c323
commit d8d8c67a3b
3 changed files with 25 additions and 11 deletions

View file

@ -222,6 +222,9 @@ namespace polysat {
bool invariant() const;
/** Get variable representing x[hi:lo] */
pvar mk_extract_var(pvar x, unsigned hi, unsigned lo);
public:
slicing(solver& s);
@ -230,9 +233,6 @@ namespace polysat {
void add_var(unsigned bit_width);
/** Get variable representing x[hi:lo] */
pvar mk_extract_var(pvar x, unsigned hi, unsigned lo);
/** Create expression for x[hi:lo] */
pdd mk_extract(pvar x, unsigned hi, unsigned lo);
@ -242,12 +242,14 @@ namespace polysat {
/** Create expression for p ++ q */
pdd mk_concat(pdd const& p, pdd const& q);
// propagate:
// - value assignments
// - fixed bits
// - intervals ????? -- that will also need changes in the viable algorithm
void propagate(pvar v);
void propagate(signed_constraint c);
// Track value assignments to variables (and propagate to subslices)
// (could generalize to fixed bits, then we need a way to merge interpreted enodes)
void add_value(pvar v, rational const& value);
void add_constraint(signed_constraint c);
// TODO:
// Query for a given variable v:
// - set of variables that share at least one slice with v (need variable, offset/width relative to v)
std::ostream& display(std::ostream& out) const;
std::ostream& display(std::ostream& out, slice s) const;