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