summaryrefslogtreecommitdiff
path: root/src/theory/quantifiers/bv_inverter.h
diff options
context:
space:
mode:
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>2018-01-08 13:21:29 -0600
committerGitHub <noreply@github.com>2018-01-08 13:21:29 -0600
commit36bdf14e005556c3834fc280e134a1ec440da14b (patch)
tree9512264802b1eb454930d55dd20951fcf2691f30 /src/theory/quantifiers/bv_inverter.h
parente72f41bb9d64724d62894989f3369f97877d6782 (diff)
Improvements to quant+BV/Bool variable elimination (#1495)
Diffstat (limited to 'src/theory/quantifiers/bv_inverter.h')
-rw-r--r--src/theory/quantifiers/bv_inverter.h28
1 files changed, 24 insertions, 4 deletions
diff --git a/src/theory/quantifiers/bv_inverter.h b/src/theory/quantifiers/bv_inverter.h
index ce2a58695..470c3a71f 100644
--- a/src/theory/quantifiers/bv_inverter.h
+++ b/src/theory/quantifiers/bv_inverter.h
@@ -54,16 +54,33 @@ class BvInverter
/** get dummy fresh variable of type tn, used as argument for sv */
Node getSolveVariable(TypeNode tn);
- /** Get path to pv in lit, replace that occurrence by sv and all others by
- * pvs. If return value R is non-null, then : lit.path = pv R.path = sv
+ /**
+ * Get path to pv in lit, replace that occurrence by sv and all others by
+ * pvs (if pvs is non-null). If return value R is non-null, then :
+ * lit.path = pv R.path = sv
* R.path' = pvs for all lit.path' = pv, where path' != path
*/
Node getPathToPv(
Node lit, Node pv, Node sv, Node pvs, std::vector<unsigned>& path);
+ /**
+ * Same as above, but does not linearize lit for pv.
+ * Use this version if we know lit is linear wrt pv.
+ */
+ Node getPathToPv(Node lit, Node pv, std::vector<unsigned>& path)
+ {
+ return getPathToPv(lit, pv, pv, Node::null(), path);
+ }
+
/** solveBvLit
- * solve for sv in lit, where lit.path = sv
- * status accumulates side conditions
+ *
+ * Solve for sv in lit, where lit.path = sv. If this function returns a
+ * non-null node t, then sv = t is the solved form of lit.
+ *
+ * If the BvInverterQuery provided to this function call is null, then
+ * the solution returned by this call will not contain CHOICE expressions.
+ * If the solved form for lit requires introducing a CHOICE expression,
+ * then this call will return null.
*/
Node solveBvLit(Node sv,
Node lit,
@@ -95,6 +112,9 @@ class BvInverter
* the solve variable. For example, if cond is x = t where x is
* getSolveVariable(tn), then we return t instead of introducing the choice
* function.
+ *
+ * This function will return the null node if the BvInverterQuery m provided
+ * to this call is null.
*/
Node getInversionNode(Node cond, TypeNode tn, BvInverterQuery* m);
};
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback