CVCL::BitvectorProofRules Class Reference

#include <bitvector_proof_rules.h>

Inheritance diagram for CVCL::BitvectorProofRules:

Inheritance graph
[legend]
List of all members.

Public Member Functions


Detailed Description

Definition at line 41 of file bitvector_proof_rules.h.


Constructor & Destructor Documentation

virtual CVCL::BitvectorProofRules::~BitvectorProofRules (   )  [inline, virtual]
 

Definition at line 44 of file bitvector_proof_rules.h.


Member Function Documentation

virtual Theorem CVCL::BitvectorProofRules::bitvectorFalseRule (  const Theorem &  thm  )  [pure virtual]
 

Parameters:
thm input theorem: (e1[i]<=>e2[i])<=>false
Returns:
(e1=e2)<=>false

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::bitBlastEqn().

virtual Theorem CVCL::BitvectorProofRules::bitvectorTrueRule (  const Theorem &  thm  )  [pure virtual]
 

Parameters:
thm input theorem: (~e1[i]<=>e2[i])<=>true
Returns:
(e1!=e2)<=>true

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::bitBlastDisEqn().

virtual Theorem CVCL::BitvectorProofRules::bitBlastEqnRule (  const Expr &  e,
const Expr &  f
)  [pure virtual]
 

t1=t2 ==> AND_i(t1[i:i] = t2[i:i])

Parameters:
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 CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::bitBlastEqn().

virtual Theorem CVCL::BitvectorProofRules::bitBlastDisEqnRule (  const Theorem &  e,
const Expr &  f
)  [pure virtual]
 

t1/=t2 ==> OR_i(NOT t1[i]<=>t2[i])

Parameters:
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 CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::bitBlastDisEqn().

virtual Theorem CVCL::BitvectorProofRules::signExtendRule (  const Expr &  e  )  [pure virtual]
 

sign extend the input SX(e) appropriately

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::rewriteBV(), and CVCL::TheoryBitvector::signExtendBVLT().

virtual Theorem CVCL::BitvectorProofRules::padBVLTRule (  const Expr &  e,
int  len
)  [pure virtual]
 

Pad the kids of BVLT/BVLE to make their length equal.

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::rewriteBV().

virtual Theorem CVCL::BitvectorProofRules::padSBVLTRule (  const Expr &  e,
int  len
)  [pure virtual]
 

Sign Extend the kids of SBVLT/SBVLE to make their length equal.

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::signExtendBVLT().

virtual Theorem CVCL::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 CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::rewriteBV().

virtual Theorem CVCL::BitvectorProofRules::notBVLTRule (  const Expr &  e,
int  Kind
)  [pure virtual]
 

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().

virtual Theorem CVCL::BitvectorProofRules::lhsEqRhsIneqn (  const Expr &  e,
int  kind
)  [pure virtual]
 

if(lhs==rhs) then we have (lhs < rhs <==> false),(lhs <= rhs <==> true)

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::rewriteBV().

virtual Theorem CVCL::BitvectorProofRules::bvConstIneqn (  const Expr &  e,
int  kind
)  [pure virtual]
 

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::rewriteBV().

virtual Theorem CVCL::BitvectorProofRules::generalIneqn (  const Expr &  e,
const Theorem &  e0,
const Theorem &  e1,
int  kind
)  [pure virtual]
 

Implemented in CVCL::BitvectorTheoremProducer.

virtual Theorem CVCL::BitvectorProofRules::bitExtractToExtract (  const Theorem &  thm  )  [pure virtual]
 

t[i] ==> t[i:i] = 0bin1 or NOT t[i] ==> t[i:i] = 0bin0

Parameters:
thm is a Theorem(t[i]) or Theorem(NOT t[i]), where t[i] is BOOLEXTRACT(t, i).

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::assertFact().

virtual Theorem CVCL::BitvectorProofRules::bitExtractRewrite (  const Expr &  x  )  [pure virtual]
 

t[i] <=> t[i:i][0] (to use rewriter for simplifying t[i:i])

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::rewriteBV().

virtual Theorem CVCL::BitvectorProofRules::bitExtractConstant (  const Expr &  x,
int  i
)  [pure virtual]
 

Parameters:
x is bitvector constant
i is extracted bitposition
Returns:

\[ \frac{}{\mathrm{BOOLEXTRACT(x,i)} \iff \mathrm{TRUE}} \]

, if bitposition has a 1;

\[ \frac{}{\mathrm{BOOLEXTRACT(x,i)} \iff \mathrm{FALSE}} \]

, if the bitposition has a 0

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::bitBlastTerm(), CVCL::TheoryBitvector::rewriteBV(), and CVCL::TheoryBitvector::rewriteConst().

virtual Theorem CVCL::BitvectorProofRules::bitExtractConcatenation (  const Expr &  x,
int  i
)  [pure virtual]
 

Parameters:
x is bitvector binary concatenation
i is extracted bitposition
Returns:

\[ \frac{}{(t_{[m]}@q_{[n]})[i] \iff (q_{[n]})[i]} \]

, where

\[ 0 \geq i \geq n-1 \]

, another case of boolextract over concatenation is:

\[\frac{}{(t_{[m]}@q_{[n]})[i] \iff (t_{[m]})[i-n]} \]

, where

\[ n \geq i \geq m+n-1 \]

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::bitBlastTerm().

virtual Theorem CVCL::BitvectorProofRules::bitExtractConstBVMult (  const Expr &  t,
int  i
)  [pure virtual]
 

Parameters:
t is bitvector binary BVMULT. x[0] must be BVCONST
i is extracted bitposition
Returns:
bitblast of BVMULT

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::bitBlastTerm().

virtual Theorem CVCL::BitvectorProofRules::bitExtractBVMult (  const Expr &  t,
int  i
)  [pure virtual]
 

Parameters:
t : input1 is bitvector binary BVMULT. t[0] must not be BVCONST
i : input2 is extracted bitposition
Returns:
bitblast of BVMULT

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::bitBlastTerm().

virtual Theorem CVCL::BitvectorProofRules::bitExtractExtraction (  const Expr &  x,
int  i
)  [pure virtual]
 

Parameters:
x is bitvector extraction e[k:j]
i is extracted bitposition
Returns:

\[ \frac{}{(t_{[n]}[k:j])[i] \iff (t_{[n]})[i+j]} \]

, where

\[ 0 \geq j \geq k < n, 0 \geq i < k-j \]

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::bitBlastTerm().

virtual Theorem CVCL::BitvectorProofRules::bitExtractBVPlus (  const std::vector< Theorem > &  t1,
const std::vector< Theorem > &  t2,
const Expr &  bvPlusTerm,
int  i
)  [pure virtual]
 

Parameters:
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
Returns:
The base case is:

\[ \frac{}{(\mathrm{BVPLUS}(n,t,q))[0] \iff t[0] \oplus q[0]} \]

, when

\[ 0 < i \leq n-1 \]

, we have

\[ \frac{}{(\mathrm{BVPLUS}(n,t,q))[i] \iff t[i] \oplus q[i] \oplus c(t,q,i)} \]

, where c(t,q,i) is the carry generated by the addition of bits from 0 to i-1

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::bitBlastTerm().

virtual Theorem CVCL::BitvectorProofRules::bitExtractBVPlusPreComputed (  const Theorem &  t1_i,
const Theorem &  t2_i,
const Expr &  bvPlusTerm,
int  bitPos,
int  precomputed
)  [pure virtual]
 

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::bitBlastTerm().

virtual Theorem CVCL::BitvectorProofRules::bvPlusAssociativityRule (  const Expr &  bvPlusTerm  )  [pure virtual]
 

Parameters:
bvPlusTerm : input1 is bvPlusTerm, a BVPLUS term with arity > 2
Returns:
: output is iff-Theorem: bvPlusTerm <==> outputTerm, where outputTerm is an equivalent BINARY bvplus.

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::bitBlastTerm().

virtual Theorem CVCL::BitvectorProofRules::bitExtractNot (  const Expr &  x,
int  i
)  [pure virtual]
 

Parameters:
x : input1 is bitwise NEGATION
i : input2 is extracted bitposition
Returns:

\[ \frac{}{(\sim t_{[n]})[i] \iff \neg (t_{[n]}[i])} \]

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::bitBlastTerm().

virtual Theorem CVCL::BitvectorProofRules::bitExtractAnd (  const Expr &  x,
int  i
)  [pure virtual]
 

Parameters:
x : input1 is bitwise AND
i : input2 is extracted bitposition
Returns:

\[ \frac{}{(t_{[n]} \& q_{[n]})[i] \iff (t_{[n]}[i] \wedge q_{[n]}[i])} \]

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::bitBlastTerm().

virtual Theorem CVCL::BitvectorProofRules::bitExtractOr (  const Expr &  x,
int  i
)  [pure virtual]
 

Parameters:
x : input1 is bitwise OR
i : input2 is extracted bitposition
Returns:

\[ \frac{}{(t_{[n]} \mid q_{[n]})[i] \iff (t_{[n]}[i] \vee q_{[n]}[i])} \]

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::bitBlastTerm().

virtual Theorem CVCL::BitvectorProofRules::bitExtractFixedLeftShift (  const Expr &  x,
int  i
)  [pure virtual]
 

Parameters:
x : input1 is bitvector FIXED SHIFT

\[ e_{[n]} \ll k \]

i : input2 is extracted bitposition
Returns:

\[\frac{}{(e_{[n]} \ll k)[i] \iff \mathrm{FALSE}} \]

, if 0 <= i < k. however, if k <= i < n then, result is

\[\frac{}{(e_{[n]} \ll k)[i] \iff e_{[n]}[i]} \]

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::bitBlastTerm().

virtual Theorem CVCL::BitvectorProofRules::bitExtractFixedRightShift (  const Expr &  x,
int  i
)  [pure virtual]
 

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::bitBlastTerm().

virtual Theorem CVCL::BitvectorProofRules::zeroPaddingRule (  const Expr &  e,
int  r
)  [pure virtual]
 

Parameters:
e : input1 is bitvector term
r : input2 is extracted bitposition
Returns:
we check if r > bvlength(e). if yes, then return BOOLEXTRACT(e,r) <==> FALSE; else raise soundness exception. (Note: this rule is used in BVPLUS bitblast function)

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::bitBlastTerm().

virtual Theorem CVCL::BitvectorProofRules::bitExtractSXRule (  const Expr &  e,
int  i
)  [pure virtual]
 

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::bitBlastTerm().

virtual Theorem CVCL::BitvectorProofRules::eqConst (  const Expr &  e  )  [pure virtual]
 

c1=c2 <=> TRUE/FALSE (equality of constant bitvectors)

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::rewriteBV(), CVCL::TheoryBitvector::rewriteConst(), and CVCL::TheoryBitvector::solve().

virtual Theorem CVCL::BitvectorProofRules::eqToBits (  const Theorem &  eq  )  [pure virtual]
 

|- c1=c2 ==> |- AND(c1[i:i] = c2[i:i]) - expanding equalities into bits

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::assertFact().

virtual Theorem CVCL::BitvectorProofRules::leftShiftToConcat (  const Expr &  e  )  [pure virtual]
 

t<<n = c @ 0bin00...00, takes e == (t<<n)

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::rewriteBV(), and CVCL::TheoryBitvector::simplifyOp().

virtual Theorem CVCL::BitvectorProofRules::rightShiftToConcat (  const Expr &  e  )  [pure virtual]
 

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().

virtual Theorem CVCL::BitvectorProofRules::constMultToPlus (  const Expr &  e  )  [pure virtual]
 

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.

virtual Theorem CVCL::BitvectorProofRules::bvplusZeroConcatRule (  const Expr &  e  )  [pure virtual]
 

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().

virtual Theorem CVCL::BitvectorProofRules::zeroCoeffBVMult (  const Expr &  e  )  [pure virtual]
 

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::normalizeBVArith().

virtual Theorem CVCL::BitvectorProofRules::oneCoeffBVMult (  const Expr &  e  )  [pure virtual]
 

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::normalizeBVArith().

virtual Theorem CVCL::BitvectorProofRules::flipBVMult (  const Expr &  e  )  [pure virtual]
 

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::normalizeBVArith().

virtual Theorem CVCL::BitvectorProofRules::padBVPlus (  const Expr &  e  )  [pure virtual]
 

Make args the same length as the result (zero-extend).

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::padBVPlus(), and CVCL::TheoryBitvector::simplifyOp().

virtual Theorem CVCL::BitvectorProofRules::padBVMult (  const Expr &  e  )  [pure virtual]
 

Make args the same length as the result (zero-extend).

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::normalizeBVArith(), and CVCL::TheoryBitvector::simplifyOp().

virtual Theorem CVCL::BitvectorProofRules::bvConstMultAssocRule (  const Expr &  e  )  [pure virtual]
 

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::normalizeBVArith().

virtual Theorem CVCL::BitvectorProofRules::bvMultAssocRule (  const Expr &  e  )  [pure virtual]
 

Implemented in CVCL::BitvectorTheoremProducer.

virtual Theorem CVCL::BitvectorProofRules::bvMultDistRule (  const Expr &  e  )  [pure virtual]
 

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::normalizeBVArith().

virtual Theorem CVCL::BitvectorProofRules::flattenBVPlus (  const Expr &  e  )  [pure virtual]
 

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::flattenBVPlus().

virtual Theorem CVCL::BitvectorProofRules::combineLikeTermsRule (  const Expr &  e  )  [pure virtual]
 

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::combineLikeTerms().

virtual Theorem CVCL::BitvectorProofRules::lhsMinusRhsRule (  const Expr &  e  )  [pure virtual]
 

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::rewriteBV().

virtual Theorem CVCL::BitvectorProofRules::extractBVMult (  const Expr &  e  )  [pure virtual]
 

(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().

virtual Theorem CVCL::BitvectorProofRules::extractBVPlus (  const Expr &  e  )  [pure virtual]
 

(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().

virtual Theorem CVCL::BitvectorProofRules::iteExtractRule (  const Expr &  e  )  [pure virtual]
 

ite(c,t1,t2)[i:j] <=> ite(c,t1[i:j],t2[i:j])

Implemented in CVCL::BitvectorTheoremProducer.

virtual Theorem CVCL::BitvectorProofRules::iteBVnegRule (  const Expr &  e  )  [pure virtual]
 

~ite(c,t1,t2) <=> ite(c,~t1,~t2)

Implemented in CVCL::BitvectorTheoremProducer.

virtual Theorem CVCL::BitvectorProofRules::bvuminusBVConst (  const Expr &  e  )  [pure virtual]
 

Implemented in CVCL::BitvectorTheoremProducer.

virtual Theorem CVCL::BitvectorProofRules::bvuminusBVMult (  const Expr &  e  )  [pure virtual]
 

Implemented in CVCL::BitvectorTheoremProducer.

virtual Theorem CVCL::BitvectorProofRules::bvuminusBVUminus (  const Expr &  e  )  [pure virtual]
 

Implemented in CVCL::BitvectorTheoremProducer.

virtual Theorem CVCL::BitvectorProofRules::bvuminusVar (  const Expr &  e  )  [pure virtual]
 

Implemented in CVCL::BitvectorTheoremProducer.

virtual Theorem CVCL::BitvectorProofRules::bvmultBVUminus (  const Expr &  e  )  [pure virtual]
 

Implemented in CVCL::BitvectorTheoremProducer.

virtual Theorem CVCL::BitvectorProofRules::bvuminusToBVPlus (  const Expr &  e  )  [pure virtual]
 

-t <==> ~t+1

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::bitBlastTerm(), and CVCL::TheoryBitvector::normalizeBVArith().

virtual Theorem CVCL::BitvectorProofRules::bvuminusBVPlus (  const Expr &  e  )  [pure virtual]
 

-(c1*t1+...+cn*tn) <==> (-(c1*t1)+...+-(cn*tn))

Implemented in CVCL::BitvectorTheoremProducer.

virtual Theorem CVCL::BitvectorProofRules::extractConst (  const Expr &  e  )  [pure virtual]
 

c1[i:j] = c (extraction from a constant bitvector)

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::normalizeConcat(), and CVCL::TheoryBitvector::rewriteConst().

virtual Theorem CVCL::BitvectorProofRules::extractWhole (  const Expr &  e  )  [pure virtual]
 

t[n-1:0] = t for n-bit t

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::normalizeConcat(), and CVCL::TheoryBitvector::setupExpr().

virtual Theorem CVCL::BitvectorProofRules::extractExtract (  const Expr &  e  )  [pure virtual]
 

t[i:j][k:l] = t[k+j:l+j] (eliminate double extraction)

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::normalizeConcat().

virtual Theorem CVCL::BitvectorProofRules::extractConcat (  const Expr &  e  )  [pure virtual]
 

(t1 @ t2)[i:j] = t1[...] @ t2[...] (push extraction through concat)

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::normalizeConcat().

virtual Theorem CVCL::BitvectorProofRules::extractAnd (  const Expr &  e  )  [pure virtual]
 

(t1 & t2)[i:j] = t1[i:j] & t2[i:j] (push extraction through OR)

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::normalizeConcat().

virtual Theorem CVCL::BitvectorProofRules::extractOr (  const Expr &  e  )  [pure virtual]
 

(t1 | t2)[i:j] = t1[i:j] | t2[i:j] (push extraction through AND)

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::normalizeConcat().

virtual Theorem CVCL::BitvectorProofRules::extractNeg (  const Expr &  e  )  [pure virtual]
 

(~t)[i:j] = ~(t[i:j]) (push extraction through NEG)

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::normalizeConcat().

virtual Theorem CVCL::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 CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::normalizeConcat().

virtual Theorem CVCL::BitvectorProofRules::negConst (  const Expr &  e  )  [pure virtual]
 

~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().

virtual Theorem CVCL::BitvectorProofRules::negConcat (  const Expr &  e  )  [pure virtual]
 

~(t1@...@tn) = (~t1)@...@(~tn) -- push negation through concat

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::normalizeConcat(), and CVCL::TheoryBitvector::pushNegationRec().

virtual Theorem CVCL::BitvectorProofRules::negNeg (  const Expr &  e  )  [pure virtual]
 

~(~t) = t -- eliminate double negation

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::normalizeConcat(), and CVCL::TheoryBitvector::pushNegationRec().

virtual Theorem CVCL::BitvectorProofRules::negBVand (  const Expr &  e  )  [pure virtual]
 

~(t1 & t2) <=> ~t1 | ~t2 -- DeMorgan's Laws

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::pushNegationRec().

virtual Theorem CVCL::BitvectorProofRules::negBVor (  const Expr &  e  )  [pure virtual]
 

~(t1 | t2) <=> ~t1 & ~t2 -- DeMorgan's Laws

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::pushNegationRec().

virtual Theorem CVCL::BitvectorProofRules::andConst (  const Expr &  e,
const std::vector< int > &  idxs
)  [pure virtual]
 

c1&c2&t = c&t -- compute bit-wise AND of constant bitvector arguments

Parameters:
e is the bit-wise AND expression;
idxs are the indices of the constant bitvectors. There must be at least constant expressions in this rule.
Returns:
Theorem(e==e'), where e' is either a constant bitvector, or is a bit-wise AND with a single constant bitvector in e'[0].

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::normalizeConcat(), and CVCL::TheoryBitvector::rewriteConst().

virtual Theorem CVCL::BitvectorProofRules::andZero (  const Expr &  e,
int  idx
)  [pure virtual]
 

0bin0...0 & t = 0bin0...0 -- bit-wise AND with zero bitvector

Parameters:
e is the bit-wise AND expr
idx is the index of the zero bitvector

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::normalizeConcat().

virtual Theorem CVCL::BitvectorProofRules::andOne (  const Expr &  e,
const std::vector< int >  idxs
)  [pure virtual]
 

0bin1...1 & t = t -- bit-wise AND with bitvector of 1's

Parameters:
e is the bit-wise AND expr
idxs is a vector of indices of the bitvectors of 1's which will be dropped

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::normalizeConcat().

virtual Theorem CVCL::BitvectorProofRules::andConcat (  const Expr &  e,
int  idx
)  [pure virtual]
 

... & (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().

virtual Theorem CVCL::BitvectorProofRules::andFlatten (  const Expr &  e  )  [pure virtual]
 

(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().

virtual Theorem CVCL::BitvectorProofRules::orConst (  const Expr &  e,
const std::vector< int > &  idxs
)  [pure virtual]
 

c1|c2|t = c|t -- compute bit-wise OR of constant bitvector arguments

Parameters:
e is the bit-wise OR expression;
idxs are the indices of the constant bitvectors. There must be at least constant expressions in this rule.
Returns:
Theorem(e==e'), where e' is either a constant bitvector, or is a bit-wise OR with a single constant bitvector in e'[0].

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::normalizeConcat(), and CVCL::TheoryBitvector::rewriteConst().

virtual Theorem CVCL::BitvectorProofRules::orOne (  const Expr &  e,
int  idx
)  [pure virtual]
 

0bin1...1 | t = 0bin1...1 -- bit-wise OR with bitvector of 1's

Parameters:
e is the bit-wise OR expr
idx is the index of the bitvector of 1's

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::normalizeConcat().

virtual Theorem CVCL::BitvectorProofRules::orZero (  const Expr &  e,
const std::vector< int >  idxs
)  [pure virtual]
 

0bin0...0 | t = t -- bit-wise OR with bitvector of 0's

Parameters:
e is the bit-wise OR expr
idxs is a vector of indices of the bitvectors of 0's which will be dropped

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::normalizeConcat().

virtual Theorem CVCL::BitvectorProofRules::orConcat (  const Expr &  e,
int  idx
)  [pure virtual]
 

... | (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().

virtual Theorem CVCL::BitvectorProofRules::orFlatten (  const Expr &  e  )  [pure virtual]
 

(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().

virtual Theorem CVCL::BitvectorProofRules::concatConst (  const Expr &  e  )  [pure virtual]
 

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().

virtual Theorem CVCL::BitvectorProofRules::concatFlatten (  const Expr &  e  )  [pure virtual]
 

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().

virtual Theorem CVCL::BitvectorProofRules::concatMergeExtract (  const Expr &  e  )  [pure virtual]
 

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().

virtual Theorem CVCL::BitvectorProofRules::bvplusConst (  const Expr &  e  )  [pure virtual]
 

BVPLUS(n, c1,c2,...,cn) = c (bit-vector plus of constant bitvectors).

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::rewriteConst().

virtual Theorem CVCL::BitvectorProofRules::bvmultConst (  const Expr &  e  )  [pure virtual]
 

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().

virtual Theorem CVCL::BitvectorProofRules::typePredBit (  const Expr &  e  )  [pure virtual]
 

|- t=0 OR t=1 for any 1-bit bitvector t

Implemented in CVCL::BitvectorTheoremProducer.

virtual Theorem CVCL::BitvectorProofRules::expandTypePred (  const Theorem &  tp  )  [pure virtual]
 

Expand the type predicate wrapper (compute the actual type predicate).

Implemented in CVCL::BitvectorTheoremProducer.

Referenced by CVCL::TheoryBitvector::assertFact().


The documentation for this class was generated from the following file:
Generated on Thu Apr 13 16:57:46 2006 for CVC Lite by  doxygen 1.4.4