CVC3
|
#include <bitvector_proof_rules.h>
Inherited by CVC3::BitvectorTheoremProducer.
Definition at line 33 of file bitvector_proof_rules.h.
virtual CVC3::BitvectorProofRules::~BitvectorProofRules | ( | ) | [inline, virtual] |
Definition at line 36 of file bitvector_proof_rules.h.
thm | input theorem: (e1[i]<=>e2[i])<=>false |
Implemented in CVC3::BitvectorTheoremProducer.
thm | input theorem: (~e1[i]<=>e2[i])<=>true |
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::bitBlastEqnRule | ( | const Expr & | e, |
const Expr & | f | ||
) | [pure virtual] |
t1=t2 ==> AND_i(t1[i:i] = t2[i:i])
e | is a Expr(t1=t2) |
f | is the resulting expression AND_i(t1[i:i] = t2[i:i]) is passed to the rule for efficiency. |
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::bitBlastDisEqnRule | ( | const Theorem & | e, |
const Expr & | f | ||
) | [pure virtual] |
t1/=t2 ==> OR_i(NOT t1[i]<=>t2[i])
e | is a Theorem(t1/=t2) |
f | is the resulting expression OR_i(NOT t1[i]<=>t2[i]), passed to the rule for efficiency. |
Implemented in CVC3::BitvectorTheoremProducer.
sign extend the input SX(e) appropriately
Implemented in CVC3::BitvectorTheoremProducer.
Pad the kids of BVLT/BVLE to make their length equal.
Implemented in CVC3::BitvectorTheoremProducer.
Sign Extend the kids of BVSLT/BVSLE to make their length equal.
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::signBVLTRule | ( | const Expr & | e, |
const Theorem & | topBit0, | ||
const Theorem & | topBit1 | ||
) | [pure virtual] |
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 CVC3::BitvectorTheoremProducer.
NOT(e[0][0] = e[0][1]) <==> e[0][0] = ~e[0][1]
Implemented in CVC3::BitvectorTheoremProducer.
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 CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::lhsEqRhsIneqn | ( | const Expr & | e, |
int | kind | ||
) | [pure virtual] |
if(lhs==rhs) then we have (lhs < rhs <==> false),(lhs <= rhs <==> true)
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::generalIneqn | ( | const Expr & | e, |
const Theorem & | e0, | ||
const Theorem & | e1, | ||
int | kind | ||
) | [pure virtual] |
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::bitExtractAllToConstEq | ( | std::vector< Theorem > & | thms | ) | [pure virtual] |
Implemented in CVC3::BitvectorTheoremProducer.
Referenced by CVC3::TheoryBitvector::comparebv().
virtual Theorem CVC3::BitvectorProofRules::bitExtractToExtract | ( | const Theorem & | thm | ) | [pure virtual] |
t[i] ==> t[i:i] = 0bin1 or NOT t[i] ==> t[i:i] = 0bin0
thm | is a Theorem(t[i]) or Theorem(NOT t[i]), where t[i] is BOOLEXTRACT(t, i). |
Implemented in CVC3::BitvectorTheoremProducer.
t[i] <=> t[i:i][0] (to use rewriter for simplifying t[i:i])
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::bitExtractConstant | ( | const Expr & | x, |
int | i | ||
) | [pure virtual] |
x | is bitvector constant |
i | is extracted bitposition |
, if bitposition has a 1;
, if the bitposition has a 0
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::bitExtractConcatenation | ( | const Expr & | x, |
int | i | ||
) | [pure virtual] |
x | is bitvector binary concatenation |
i | is extracted bitposition |
, where
, another case of boolextract over concatenation is:
, where
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::bitExtractConstBVMult | ( | const Expr & | t, |
int | i | ||
) | [pure virtual] |
t | is bitvector binary BVMULT. x[0] must be BVCONST |
i | is extracted bitposition |
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::bitExtractBVMult | ( | const Expr & | t, |
int | i | ||
) | [pure virtual] |
t | : input1 is bitvector binary BVMULT. t[0] must not be BVCONST |
i | : input2 is extracted bitposition |
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::bitExtractExtraction | ( | const Expr & | x, |
int | i | ||
) | [pure virtual] |
x | is bitvector extraction e[k:j] |
i | is extracted bitposition |
, where
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::bitExtractBVPlus | ( | const std::vector< Theorem > & | t1, |
const std::vector< Theorem > & | t2, | ||
const Expr & | bvPlusTerm, | ||
int | i | ||
) | [pure virtual] |
t1 | is vector of bitblasts of t, from bit i-1 to 0 |
t2 | is vector of bitblasts of q, from bit i-1 to 0 |
bvPlusTerm | is BVPLUS term: BVPLUS(n,t,q) |
i | is extracted bitposition |
, when
, we have
, where c(t,q,i) is the carry generated by the addition of bits from 0 to i-1
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::bitExtractBVPlusPreComputed | ( | const Theorem & | t1_i, |
const Theorem & | t2_i, | ||
const Expr & | bvPlusTerm, | ||
int | bitPos, | ||
int | precomputed | ||
) | [pure virtual] |
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::bvPlusAssociativityRule | ( | const Expr & | bvPlusTerm | ) | [pure virtual] |
bvPlusTerm | : input1 is bvPlusTerm, a BVPLUS term with arity > 2 |
Implemented in CVC3::BitvectorTheoremProducer.
x | : input1 is bitwise NEGATION |
i | : input2 is extracted bitposition |
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::bitExtractBitwise | ( | const Expr & | x, |
int | i, | ||
int | kind | ||
) | [pure virtual] |
Extract from bitwise AND, OR, or XOR.
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::bitExtractFixedLeftShift | ( | const Expr & | x, |
int | i | ||
) | [pure virtual] |
x | : input1 is bitvector FIXED SHIFT
|
i | : input2 is extracted bitposition |
, if 0 <= i < k. however, if k <= i < n then, result is
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::bitExtractFixedRightShift | ( | const Expr & | x, |
int | i | ||
) | [pure virtual] |
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::bitExtractBVLSHR | ( | const Expr & | x, |
int | i | ||
) | [pure virtual] |
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::bitExtractBVASHR | ( | const Expr & | x, |
int | i | ||
) | [pure virtual] |
Implemented in CVC3::BitvectorTheoremProducer.
e | : input1 is bitvector term |
r | : input2 is extracted bitposition |
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::bitExtractSXRule | ( | const Expr & | e, |
int | i | ||
) | [pure virtual] |
Implemented in CVC3::BitvectorTheoremProducer.
c1=c2 <=> TRUE/FALSE (equality of constant bitvectors)
Implemented in CVC3::BitvectorTheoremProducer.
|- c1=c2 ==> |- AND(c1[i:i] = c2[i:i]) - expanding equalities into bits
Implemented in CVC3::BitvectorTheoremProducer.
t<<n = c @ 0bin00...00, takes e == (t<<n)
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::constWidthLeftShiftToConcat | ( | const Expr & | e | ) | [pure virtual] |
t<<n = c @ 0bin00...00, takes e == (t<<n)
Implemented in CVC3::BitvectorTheoremProducer.
t>>m = 0bin00...00 @ t[bvlength-1:m], takes e == (t>>n)
Implemented in CVC3::BitvectorTheoremProducer.
BVSHL(t,c) = t[n-c,0] @ 0bin00...00.
Implemented in CVC3::BitvectorTheoremProducer.
BVSHL(t,c) = IF (c = 0) THEN t ELSE IF (c = 1) ...
Implemented in CVC3::BitvectorTheoremProducer.
BVLSHR(t,c) = 0bin00...00 @ t[n-1,c].
Implemented in CVC3::BitvectorTheoremProducer.
Any shift over a zero = 0.
Implemented in CVC3::BitvectorTheoremProducer.
BVASHR(t,c) = SX(t[n-1,c], n-1)
Implemented in CVC3::BitvectorTheoremProducer.
a XNOR b <=> (~a & ~b) | (a & b)
Implemented in CVC3::BitvectorTheoremProducer.
a NAND b <=> ~(a & b)
Implemented in CVC3::BitvectorTheoremProducer.
a NOR b <=> ~(a | b)
Implemented in CVC3::BitvectorTheoremProducer.
BVCOMP(a,b) <=> ITE(a=b,0bin1,0bin0)
Implemented in CVC3::BitvectorTheoremProducer.
a - b <=> a + (-b)
Implemented in CVC3::BitvectorTheoremProducer.
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 CVC3::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 CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
Make args the same length as the result (zero-extend)
Implemented in CVC3::BitvectorTheoremProducer.
Make args the same length as the result (zero-extend)
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
(x *[n] y)[m:k] = (x *[m+1] y)[m:k], where m < n
Implemented in CVC3::BitvectorTheoremProducer.
(x +[n] y)[m:k] = (x +[m+1] y)[m:k], where m < n
Implemented in CVC3::BitvectorTheoremProducer.
ite(c,t1,t2)[i:j] <=> ite(c,t1[i:j],t2[i:j])
Implemented in CVC3::BitvectorTheoremProducer.
~ite(c,t1,t2) <=> ite(c,~t1,~t2)
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
-t <==> ~t+1
Implemented in CVC3::BitvectorTheoremProducer.
-(c1*t1+...+cn*tn) <==> (-(c1*t1)+...+-(cn*tn))
Implemented in CVC3::BitvectorTheoremProducer.
c1[i:j] = c (extraction from a constant bitvector)
Implemented in CVC3::BitvectorTheoremProducer.
t[n-1:0] = t for n-bit t
Implemented in CVC3::BitvectorTheoremProducer.
t[i:j][k:l] = t[k+j:l+j] (eliminate double extraction)
Implemented in CVC3::BitvectorTheoremProducer.
(t1 @ t2)[i:j] = t1[...] @ t2[...] (push extraction through concat)
Implemented in CVC3::BitvectorTheoremProducer.
(t1 & t2)[i:j] = t1[i:j] & t2[i:j] (push extraction through OR)
Implemented in CVC3::BitvectorTheoremProducer.
(t1 | t2)[i:j] = t1[i:j] | t2[i:j] (push extraction through AND)
Implemented in CVC3::BitvectorTheoremProducer.
(~t)[i:j] = ~(t[i:j]) (push extraction through NEG)
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::extractBitwise | ( | const Expr & | e, |
int | kind, | ||
const std::string & | name | ||
) | [pure virtual] |
Auxiliary function: (t1 op t2)[i:j] = t1[i:j] op t2[i:j].
Implemented in CVC3::BitvectorTheoremProducer.
~c1 = c (bit-wise negation of a constant bitvector)
Implemented in CVC3::BitvectorTheoremProducer.
~(t1@...@tn) = (~t1)@...@(~tn) -- push negation through concat
Implemented in CVC3::BitvectorTheoremProducer.
~(~t) = t -- eliminate double negation
Implemented in CVC3::BitvectorTheoremProducer.
~t = -1*t + 1 -- eliminate negation
Implemented in CVC3::BitvectorTheoremProducer.
~(t1 & t2) <=> ~t1 | ~t2 -- DeMorgan's Laws
Implemented in CVC3::BitvectorTheoremProducer.
~(t1 | t2) <=> ~t1 & ~t2 -- DeMorgan's Laws
Implemented in CVC3::BitvectorTheoremProducer.
~(t1 xor t2) = ~t1 xor t2
Implemented in CVC3::BitvectorTheoremProducer.
~(t1 xnor t2) = t1 xor t2
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::bitwiseConst | ( | const Expr & | e, |
const std::vector< int > & | idxs, | ||
int | kind | ||
) | [pure virtual] |
Combine constants in bitwise AND, OR, XOR.
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::bitwiseConcat | ( | const Expr & | e, |
int | kind | ||
) | [pure virtual] |
Lifts concatenation above bitwise operators.
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::bitwiseFlatten | ( | const Expr & | e, |
int | kind | ||
) | [pure virtual] |
Flatten bitwise operation.
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::bitwiseConstElim | ( | const Expr & | e, |
int | idx, | ||
int | kind | ||
) | [pure virtual] |
Simplify bitwise operator containing a constant child.
e | is the bit-wise expr |
idx | is the index of the constant bitvector |
kind | is the kind of e |
Implemented in CVC3::BitvectorTheoremProducer.
c1@c2@...@cn = c (concatenation of constant bitvectors)
Implemented in CVC3::BitvectorTheoremProducer.
Flatten one level of nested concatenation, e.g.: x@(y@z)@w = x@y@z@w.
Implemented in CVC3::BitvectorTheoremProducer.
Merge n-ary concat. of adjacent extractions: x[15:8]@x[7:0] = x[15:0].
Implemented in CVC3::BitvectorTheoremProducer.
BVPLUS(n, c1,c2,...,cn) = c (bit-vector plus of constant bitvectors)
Implemented in CVC3::BitvectorTheoremProducer.
n*c1 = c, where n >= 0 (multiplication of a constant bitvector by a non-negative constant)
Implemented in CVC3::BitvectorTheoremProducer.
|- t=0 OR t=1 for any 1-bit bitvector t
Implemented in CVC3::BitvectorTheoremProducer.
Expand the type predicate wrapper (compute the actual type predicate)
Implemented in CVC3::BitvectorTheoremProducer.
isolate a variable with coefficient = 1 on the Lhs of an
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
canonize BVMult expressions in order to get one coefficient
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
canonize BVPlus expressions in order to get just one
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::processExtract | ( | const Theorem & | e, |
bool & | solvedForm | ||
) | [pure virtual] |
Implemented in CVC3::BitvectorTheoremProducer.
Referenced by CVC3::TheoryBitvector::solve().
virtual Theorem CVC3::BitvectorProofRules::canonBVEQ | ( | const Expr & | e, |
int | maxEffort = 3 |
||
) | [pure virtual] |
Implemented in CVC3::BitvectorTheoremProducer.
Referenced by CVC3::TheoryBitvector::generalBitBlast(), CVC3::TheoryBitvector::simplifyPendingEq(), and CVC3::TheoryBitvector::solve().
apply the distributive rule on the BVMULT expression e
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
Implemented in CVC3::BitvectorTheoremProducer.
Divide a with b unsigned and return the bit-vector constant result
Implemented in CVC3::BitvectorTheoremProducer.
Rewrite a/b with a fresh variable d and add the constraints to make it be a divider.
Implemented in CVC3::BitvectorTheoremProducer.
Divide a with b unsigned and return the bit-vector constant result
Implemented in CVC3::BitvectorTheoremProducer.
Rewrite ab in terms of a/b, i.e. a - a/b
Implemented in CVC3::BitvectorTheoremProducer.
Rewrite the signed divide in terms of the unsigned one.
Implemented in CVC3::BitvectorTheoremProducer.
Rewrite the signed remainder in terms of the unsigned one.
Implemented in CVC3::BitvectorTheoremProducer.
Rewrite the signed mod in terms of the unsigned one.
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::bitblastBVMult | ( | const std::vector< Theorem > & | a_bits, |
const std::vector< Theorem > & | b_bits, | ||
const Expr & | a_times_b, | ||
std::vector< Theorem > & | output_bits | ||
) | [pure virtual] |
Bit-blast the multiplication a_times_b given the bits in a_bits and b_bits. The resulting output bits will be in the vector output_bits. The return value is a theorem saying there is no overflow for this multiplication. (TODO, it's just an empty theorem for now).
Implemented in CVC3::BitvectorTheoremProducer.
virtual Theorem CVC3::BitvectorProofRules::bitblastBVPlus | ( | const std::vector< Theorem > & | a_bits, |
const std::vector< Theorem > & | b_bits, | ||
const Expr & | a_plus_b, | ||
std::vector< Theorem > & | output_bits | ||
) | [pure virtual] |
Bit-blast the sum a_times_b given the bits in a_bits and b_bits. The resulting output bits will be in the vector output_bits. The return value is a theorem saying there is no overflow for this sum. (TODO, it's just an empty theorem for now).
Implemented in CVC3::BitvectorTheoremProducer.
Rewrite x_1 x_2 x_n = 0 into x_1 = 0 x_2 = 0 x_n = 0.
Implemented in CVC3::BitvectorTheoremProducer.
Rewrite x_1 x_2 x_n = 1^n into x_1 = 1^n x_2 = 1^n x_n = 1^n.
Implemented in CVC3::BitvectorTheoremProducer.
Equalities over constants go to true/false.
Implemented in CVC3::BitvectorTheoremProducer.
virtual bool CVC3::BitvectorProofRules::solveExtractOverlapApplies | ( | const Expr & | eq | ) | [pure virtual] |
Returns true if equation is of the form x[i:j] = x[k:l], where the extracted segments overlap, i.e. i > j >= k > l or k > i >= l > j.
Implemented in CVC3::BitvectorTheoremProducer.
Referenced by CVC3::TheoryBitvector::solve().
Returns the theorem that simplifies the equality of two overlapping extracts over the same term.
Implemented in CVC3::BitvectorTheoremProducer.
Referenced by CVC3::TheoryBitvector::solve().