#include <bitvector_proof_rules.h>
Inheritance diagram for CVCL::BitvectorProofRules:
Definition at line 41 of file bitvector_proof_rules.h.
|
Definition at line 44 of file bitvector_proof_rules.h. |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::bitBlastEqn(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::bitBlastDisEqn(). |
|
t1=t2 ==> AND_i(t1[i:i] = t2[i:i])
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::bitBlastEqn(). |
|
t1/=t2 ==> OR_i(NOT t1[i]<=>t2[i])
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::bitBlastDisEqn(). |
|
sign extend the input SX(e) appropriately
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::rewriteBV(), and CVCL::TheoryBitvector::signExtendBVLT(). |
|
Pad the kids of BVLT/BVLE to make their length equal.
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::rewriteBV(). |
|
Sign Extend the kids of SBVLT/SBVLE to make their length equal.
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::signExtendBVLT(). |
|
input: e0 <=(s) e1. output depends on whether the topbits(MSB) of e0 and e1 are constants. If they are constants then optimizations are done, otherwise the following rule is implemented. e0 <=(s) e1 <==> (e0[n-1] AND NOT e1[n-1]) OR (e0[n-1] AND e1[n-1] AND e1[n-2:0] <= e0[n-2:0]) OR (NOT e0[n-1] AND NOT e1[n-1] AND e0[n-2:0] <= e1[n-2:0]) Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::rewriteBV(). |
|
NOT(e[0][0] < e[0][1]) <==> (e[0][1] <= e[0][0]), NOT(e[0][0] <= e[0][1]) <==> (e[0][1] < e[0][0]) Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::assertFact(). |
|
if(lhs==rhs) then we have (lhs < rhs <==> false),(lhs <= rhs <==> true)
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::rewriteBV(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::rewriteBV(). |
|
Implemented in CVCL::BitvectorTheoremProducer. |
|
t[i] ==> t[i:i] = 0bin1 or NOT t[i] ==> t[i:i] = 0bin0
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::assertFact(). |
|
t[i] <=> t[i:i][0] (to use rewriter for simplifying t[i:i])
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::rewriteBV(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::bitBlastTerm(), CVCL::TheoryBitvector::rewriteBV(), and CVCL::TheoryBitvector::rewriteConst(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::bitBlastTerm(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::bitBlastTerm(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::bitBlastTerm(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::bitBlastTerm(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::bitBlastTerm(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::bitBlastTerm(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::bitBlastTerm(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::bitBlastTerm(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::bitBlastTerm(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::bitBlastTerm(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::bitBlastTerm(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::bitBlastTerm(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::bitBlastTerm(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::bitBlastTerm(). |
|
c1=c2 <=> TRUE/FALSE (equality of constant bitvectors)
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::rewriteBV(), CVCL::TheoryBitvector::rewriteConst(), and CVCL::TheoryBitvector::solve(). |
|
|- c1=c2 ==> |- AND(c1[i:i] = c2[i:i]) - expanding equalities into bits
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::assertFact(). |
|
t<<n = c @ 0bin00...00, takes e == (t<<n)
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::rewriteBV(), and CVCL::TheoryBitvector::simplifyOp(). |
|
t>>m = 0bin00...00 @ t[bvlength-1:m], takes e == (t>>n)
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::rewriteBV(), and CVCL::TheoryBitvector::simplifyOp(). |
|
k*t = BVPLUS(n, <sum of shifts of t>) -- translation of k*t to BVPLUS If k = 2^m, return k*t = t@0...0 Implemented in CVCL::BitvectorTheoremProducer. |
|
0bin0...0 @ BVPLUS(n, args) = BVPLUS(n+k, args) provided that m+ceil(log2(l)) <= n, where k is the size of the 0bin0...0, m is the max. length of each argument, and l is the number of arguments. Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(), and CVCL::TheoryBitvector::simplifyOp(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeBVArith(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeBVArith(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeBVArith(). |
|
Make args the same length as the result (zero-extend).
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::padBVPlus(), and CVCL::TheoryBitvector::simplifyOp(). |
|
Make args the same length as the result (zero-extend).
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeBVArith(), and CVCL::TheoryBitvector::simplifyOp(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeBVArith(). |
|
Implemented in CVCL::BitvectorTheoremProducer. |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeBVArith(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::flattenBVPlus(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::combineLikeTerms(). |
|
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::rewriteBV(). |
|
(x *[n] y)[m:k] = (x *[m+1] y)[m:k], where m < n
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(), and CVCL::TheoryBitvector::simplifyOp(). |
|
(x +[n] y)[m:k] = (x +[m+1] y)[m:k], where m < n
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(), and CVCL::TheoryBitvector::simplifyOp(). |
|
ite(c,t1,t2)[i:j] <=> ite(c,t1[i:j],t2[i:j])
Implemented in CVCL::BitvectorTheoremProducer. |
|
~ite(c,t1,t2) <=> ite(c,~t1,~t2)
Implemented in CVCL::BitvectorTheoremProducer. |
|
Implemented in CVCL::BitvectorTheoremProducer. |
|
Implemented in CVCL::BitvectorTheoremProducer. |
|
Implemented in CVCL::BitvectorTheoremProducer. |
|
Implemented in CVCL::BitvectorTheoremProducer. |
|
Implemented in CVCL::BitvectorTheoremProducer. |
|
-t <==> ~t+1
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::bitBlastTerm(), and CVCL::TheoryBitvector::normalizeBVArith(). |
|
-(c1*t1+...+cn*tn) <==> (-(c1*t1)+...+-(cn*tn))
Implemented in CVCL::BitvectorTheoremProducer. |
|
c1[i:j] = c (extraction from a constant bitvector)
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(), and CVCL::TheoryBitvector::rewriteConst(). |
|
t[n-1:0] = t for n-bit t
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(), and CVCL::TheoryBitvector::setupExpr(). |
|
t[i:j][k:l] = t[k+j:l+j] (eliminate double extraction)
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(). |
|
(t1 @ t2)[i:j] = t1[...] @ t2[...] (push extraction through concat)
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(). |
|
(t1 & t2)[i:j] = t1[i:j] & t2[i:j] (push extraction through OR)
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(). |
|
(t1 | t2)[i:j] = t1[i:j] | t2[i:j] (push extraction through AND)
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(). |
|
(~t)[i:j] = ~(t[i:j]) (push extraction through NEG)
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(). |
|
Auxiliary function: (t1 op t2)[i:j] = t1[i:j] op t2[i:j].
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(). |
|
~c1 = c (bit-wise negation of a constant bitvector)
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(), CVCL::TheoryBitvector::pushNegationRec(), and CVCL::TheoryBitvector::rewriteConst(). |
|
~(t1@...@tn) = (~t1)@...@(~tn) -- push negation through concat
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(), and CVCL::TheoryBitvector::pushNegationRec(). |
|
~(~t) = t -- eliminate double negation
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(), and CVCL::TheoryBitvector::pushNegationRec(). |
|
~(t1 & t2) <=> ~t1 | ~t2 -- DeMorgan's Laws
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::pushNegationRec(). |
|
~(t1 | t2) <=> ~t1 & ~t2 -- DeMorgan's Laws
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::pushNegationRec(). |
|
c1&c2&t = c&t -- compute bit-wise AND of constant bitvector arguments
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(), and CVCL::TheoryBitvector::rewriteConst(). |
|
0bin0...0 & t = 0bin0...0 -- bit-wise AND with zero bitvector
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(). |
|
0bin1...1 & t = t -- bit-wise AND with bitvector of 1's
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(). |
|
... & (t1@...@tk) & ... = (...& t1 &...)@...@(...& tk &...) Lifts concatenation to the top of bit-wise AND. Takes the bit-wise AND expression 'e' and the index 'i' of the concatenation. Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(). |
|
(t1 & (t2 & t3) & t4) = t1 & t2 & t3 & t4 -- flatten bit-wise AND Also reorders the terms according to a fixed total ordering Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(). |
|
c1|c2|t = c|t -- compute bit-wise OR of constant bitvector arguments
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(), and CVCL::TheoryBitvector::rewriteConst(). |
|
0bin1...1 | t = 0bin1...1 -- bit-wise OR with bitvector of 1's
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(). |
|
0bin0...0 | t = t -- bit-wise OR with bitvector of 0's
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(). |
|
... | (t1@...@tk) | ... = (...| t1 |...)@...@(...| tk |...) Lifts concatenation to the top of bit-wise OR. Takes the bit-wise OR expression 'e' and the index 'i' of the concatenation. Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(). |
|
(t1 | (t2 | t3) | t4) = t1 | t2 | t3 | t4 -- flatten bit-wise OR Also reorders the terms according to a fixed total ordering Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(). |
|
c1@c2@...@cn = c (concatenation of constant bitvectors)
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(), CVCL::TheoryBitvector::rewriteConst(), CVCL::TheoryBitvector::setupExpr(), and CVCL::TheoryBitvector::update(). |
|
Flatten one level of nested concatenation, e.g.: x@(y@z)@w = x@y@z@w.
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(). |
|
Merge n-ary concat. of adjacent extractions: x[15:8]@x[7:0] = x[15:0].
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeConcat(), and CVCL::TheoryBitvector::setupExpr(). |
|
BVPLUS(n, c1,c2,...,cn) = c (bit-vector plus of constant bitvectors).
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::rewriteConst(). |
|
n*c1 = c, where n >= 0 (multiplication of a constant bitvector by a non-negative constant)
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::normalizeBVArith(), and CVCL::TheoryBitvector::rewriteConst(). |
|
|- t=0 OR t=1 for any 1-bit bitvector t
Implemented in CVCL::BitvectorTheoremProducer. |
|
Expand the type predicate wrapper (compute the actual type predicate).
Implemented in CVCL::BitvectorTheoremProducer. Referenced by CVCL::TheoryBitvector::assertFact(). |