diff --git a/spec/rule_list.tex b/spec/rule_list.tex index 26f17f4a41a600007c0f5375d675257173f5b053..5b11d24931188251cdda8d1196052b85dca1b658 100644 --- a/spec/rule_list.tex +++ b/spec/rule_list.tex @@ -1940,7 +1940,242 @@ to quickly find the definition of rules. \end{RuleDescription} -% Put pseudo boolean bitblasting rules here +\begin{RuleDescription}{pbblast_bveq} + Consider bitvectors \textbf{x} and \textbf{y} of length $n$. + The pseudo-boolean bitblasting of their equality is expressed by: + + \begin{AletheX} + $i$. & \ctxsep & $(\lsymb{=}\ x\ y) \approx A$ & (\currule) + \end{AletheX} + The term ``$A$'' is the PseudoBoolean constraint: + + \[ \sum_{i=0}^{n-1}{2^i x_{i}} - \sum_{i=0}^{n-1}{2^i y_{i}} = 0\] + + % TODO: Add example + +\end{RuleDescription} + +\begin{RuleDescription}{pbblast_bvult} + The `unsigned-less-than' operation over BitVectors with $n$ bits is expressed using PseudoBoolean inequalities by: + + \begin{AletheX} + $i$. & \ctxsep & $(\lsymb{bvult}\ x\ y) \approx A$ & (\currule) + \end{AletheX} + The term ``$A$'' is `true' iff: + + \[ + \sum_{i=0}^{n-1} 2^i\mathbf{y}_{i} - \sum_{i=0}^{n-1} 2^i\mathbf{x}_{i} \ge 1. + \] + + % TODO: Add example + +\end{RuleDescription} + +\begin{RuleDescription}{pbblast_bvugt} + The `unsigned-greater-than' operation over BitVectors with $n$ bits is expressed using PseudoBoolean inequalities by: + + \begin{AletheX} + $i$. & \ctxsep & $(\lsymb{bvugt}\ x\ y) \approx A$ & (\currule) + \end{AletheX} + The term ``$A$'' is `true' iff: + + \[ + \sum_{i=0}^{n-1} 2^i\mathbf{x}_{i} - \sum_{i=0}^{n-1} 2^i\mathbf{y}_{i} \ge 1. + \] + + \noindent + Or in terms of \proofRule{pbblast_bvult}: + + \begin{AletheX} + $i$. & \ctxsep & $(\lsymb{bvugt}\ x\ y) \approx (\lsymb{bvult}\ y\ x)$ & (\currule) + \end{AletheX} + + % TODO: Add example + +\end{RuleDescription} + + +% https://github.com/cvc5/cvc5/blob/96a35d7cc97ee375e263ab43a2ed9ba03cc32858/src/rewriter/node.py#L44 +\begin{RuleDescription}{pbblast_bvuge} + The `unsigned-greater-or-equal' operation over BitVectors with $n$ bits is expressed using PseudoBoolean inequalities by: + + \begin{AletheX} + $i$. & \ctxsep & $(\lsymb{bvuge}\ x\ y) \approx A$ & (\currule) + \end{AletheX} + The term ``$A$'' is `true' iff: + + \[ + \sum_{i=0}^{n-1} 2^i\mathbf{x}_{i} - \sum_{i=0}^{n-1} 2^i\mathbf{y}_{i} \ge 0. + \] + + % TODO: Add example + +\end{RuleDescription} + +\begin{RuleDescription}{pbblast_bvule} + The `unsigned-less-or-equal' operation over BitVectors with $n$ bits is expressed using PseudoBoolean inequalities by: + + \begin{AletheX} + $i$. & \ctxsep & $(\lsymb{bvule}\ x\ y) \approx A$ & (\currule) + \end{AletheX} + The term ``$A$'' is `true' iff: + + \[ + \sum_{i=0}^{n-1} 2^i\mathbf{y}_{i} - \sum_{i=0}^{n-1} 2^i\mathbf{x}_{i} \ge 0. + \] + + \noindent + Or in terms of \proofRule{pbblast_bvuge}: + + \begin{AletheX} + $i$. & \ctxsep & $(\lsymb{bvule}\ x\ y) \approx (\lsymb{bvuge}\ y\ x)$ & (\currule) + \end{AletheX} + + % TODO: Add example + +\end{RuleDescription} + +\begin{RuleDescription}{pbblast_bvslt} + The `signed-less-than' operation over BitVectors with $n$ bits is expressed using PseudoBoolean inequalities by: + + \begin{AletheX} + $i$. & \ctxsep & $(\lsymb{bvslt}\ x\ y) \approx A$ & (\currule) + \end{AletheX} + The term ``$A$'' is `true' iff: + + \[ + -(2^{n-1})\mathbf{y}_{n-1} + \sum_{i=0}^{n-2} 2^i\mathbf{y}_{i} + 2^{n-1} \mathbf{x}_{n-1} - \sum_{i=0}^{n-2} 2^i\mathbf{x}_{i} \geq 1 + \] + + % TODO: Add example + +\end{RuleDescription} + +\begin{RuleDescription}{pbblast_bvsgt} + The `signed-greater-than' operation over BitVectors with $n$ bits is expressed using PseudoBoolean inequalities by: + + \begin{AletheX} + $i$. & \ctxsep & $(\lsymb{bvsgt}\ x\ y) \approx A$ & (\currule) + \end{AletheX} + The term ``$A$'' is `true' iff: + + \[ + -(2^{n-1})\mathbf{x}_{n-1} + \sum_{i=0}^{n-2} 2^i\mathbf{x}_{i} + 2^{n-1} \mathbf{y}_{n-1} - \sum_{i=0}^{n-2} 2^i\mathbf{y}_{i} \geq 1 + \] + + \noindent + Or in terms of \proofRule{pbblast_bvslt}: + + \begin{AletheX} + $i$. & \ctxsep & $(\lsymb{bvsgt}\ x\ y) \approx (\lsymb{bvslt}\ y\ x)$ & (\currule) + \end{AletheX} + + % TODO: Add example + +\end{RuleDescription} + +\begin{RuleDescription}{pbblast_bvsge} + The `signed-greater-or-equal' operation over BitVectors with $n$ bits is expressed using PseudoBoolean inequalities by: + + \begin{AletheX} + $i$. & \ctxsep & $(\lsymb{bvsge}\ x\ y) \approx A$ & (\currule) + \end{AletheX} + The term ``$A$'' is `true' iff: + + \[ + -(2^{n-1})\mathbf{x}_{n-1} + \sum_{i=0}^{n-2} 2^i\mathbf{x}_{i} + 2^{n-1}\mathbf{y}_{n-1} - \sum_{i=0}^{n-2} 2^i\mathbf{y}_{i} \geq 0 + \] + + % TODO: Add example + +\end{RuleDescription} + +\begin{RuleDescription}{pbblast_bvsle} + The `signed-less-or-equal' operation over BitVectors with $n$ bits is expressed using PseudoBoolean inequalities by: + + \begin{AletheX} + $i$. & \ctxsep & $(\lsymb{bvsle}\ x\ y) \approx A$ & (\currule) + \end{AletheX} + The term ``$A$'' is `true' iff: + + \[ + -(2^{n-1})\mathbf{y}_{n-1} + \sum_{i=0}^{n-2} 2^i\mathbf{y}_{i} + 2^{n-1}\mathbf{x}_{n-1} - \sum_{i=0}^{n-2} 2^i\mathbf{x}_{i} \geq 0 + \] + + \noindent + Or in terms of \proofRule{pbblast_bvsge}: + + \begin{AletheX} + $i$. & \ctxsep & $(\lsymb{bvsle}\ x\ y) \approx (\lsymb{bvsge}\ y\ x)$ & (\currule) + \end{AletheX} + + % TODO: Add example + +\end{RuleDescription} + +\begin{RuleDescription}{pbblast_pbbvar} + Conversion from a BitVector of $n$ bits to $n$ PseudoBoolean variables passed to pbbT: + + \begin{AletheX} + $i$. & \ctxsep & $x \approx \lsymb{pbbT}\; x_1 \dots x_{n+1}$ & (\currule) + \end{AletheX} + + % TODO: Add example + +\end{RuleDescription} + +\begin{RuleDescription}{pbblast_pbbconst} + Constraints on each bit of the constant BitVector b: + + \begin{AletheX} + $i$. & \ctxsep & $\left(b \approx \lsymb{pbbT}\ r\right) \land \bigwedge_{i=0}^{n-1}{\left(r_i = \lsymb{PB\_ZERO\_OR\_ONE}(b_{n-i-1})\right)}$ & (\currule) \\ + \end{AletheX} + % TODO: Explain PB_ZERO_OR_ONE := if b_i is 1 then b_i = 1 else b_i = 0 + \noindent + In which we expand \textbf{PB\_ZERO\_OR\_ONE($b_i$)} into: + \begin{itemize} + \item $\left(b_i = 0\right)$ if $b_i$ is $0$ + \item $\left(b_i = 1\right)$ if $b_i$ is $1$ + \end{itemize} + + % TODO: Add example + +\end{RuleDescription} + +\begin{RuleDescription}{pbblast_bvxor} + The `bvxor' operation over BitVectors with $n$ bits is expressed using PseudoBoolean inequalities by: + + \begin{AletheX} + $i$. & \ctxsep & $(\lsymb{bvxor}\ x\ y) \approx [r_0,\dots,r_{n-1}] \land A$ & (\currule) \\ + \end{AletheX} + The term ``$A$'' is the conjunction of these PseudoBoolean inequalities and the term \textbf{r} stands + for the result of the `bvxor' operation between \textbf{x} and \textbf{y}, for $0 \le i < n$: + + \[ -\textbf{r}_i+\textbf{x}_i+\textbf{y}_i\ge 0 \] + \[ -\textbf{r}_i-\textbf{x}_i-\textbf{y}_i\ge -2 \] + \[ \textbf{r}_i+\textbf{x}_i-\textbf{y}_i\ge 0 \] + \[ \textbf{r}_i-\textbf{x}_i+\textbf{y}_i\ge 0 \] + + % TODO: Add example + +\end{RuleDescription} + +\begin{RuleDescription}{pbblast_bvand} + The `bvand' operation over BitVectors with $n$ bits is expressed using PseudoBoolean inequalities by: + + \begin{AletheX} + $i$. & \ctxsep & $(\lsymb{bvand}\ x\ y) \approx [r_0,\dots,r_{n-1}] \land A$ & (\currule) \\ + \end{AletheX} + The term ``$A$'' is the conjunction of these PseudoBoolean inequalities and the term \textbf{r} stands + for the result of the `bvand' operation between \textbf{x} and \textbf{y}, for $0 \le i < n$: + + \[ \textbf{x}_i-\textbf{r}_i\ge 0 \] + \[ \textbf{y}_i-\textbf{r}_i\ge 0 \] + \[ \textbf{r}_i-\textbf{x}_i-\textbf{y}_1\ge -1 \] + + % TODO: Add example + +\end{RuleDescription} \begin{RuleDescription}{symm} \begin{AletheX}