CVC3::TheoryBitvector Class Reference
[Theories]

Theory of bitvectors of known length \ (operations include: @,[i:j],[i],+,.,BVAND,BVNEG). More...

#include <theory_bitvector.h>

Inheritance diagram for CVC3::TheoryBitvector:

Inheritance graph
[legend]
Collaboration diagram for CVC3::TheoryBitvector:

Collaboration graph
[legend]
List of all members.

Public Member Functions

Public Attributes

Private Member Functions

Private Attributes


Detailed Description

Theory of bitvectors of known length \ (operations include: @,[i:j],[i],+,.,BVAND,BVNEG).

Author: Vijay Ganesh

Created:Wed May 5 15:35:07 PDT 2004

Definition at line 100 of file theory_bitvector.h.


Constructor & Destructor Documentation

TheoryBitvector::TheoryBitvector ( TheoryCore core  ) 

Definition at line 1720 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::BOOLEXTRACT, CVC3::BVAND, CVC3::BVASHR, CVC3::BVCOMP, CVC3::BVCONST, CVC3::BVGE, CVC3::BVGT, CVC3::BVLE, CVC3::BVLSHR, CVC3::BVLT, CVC3::BVMULT, CVC3::BVNAND, CVC3::BVNEG, CVC3::BVNOR, CVC3::BVOR, CVC3::BVPLUS, CVC3::BVREPEAT, CVC3::BVROTL, CVC3::BVROTR, CVC3::BVSDIV, CVC3::BVSGE, CVC3::BVSGT, CVC3::BVSHL, CVC3::BVSLE, CVC3::BVSLT, CVC3::BVSMOD, CVC3::BVSREM, CVC3::BVSUB, CVC3::BVTOINT, CVC3::BVTYPEPRED, CVC3::BVUDIV, CVC3::BVUMINUS, CVC3::BVUREM, CVC3::BVXNOR, CVC3::BVXOR, CVC3::BVZEROEXTEND, CVC3::CONCAT, CVC3::CONST_WIDTH_LEFTSHIFT, createProofRules(), d_bvConstExprIndex, d_bvOne, d_bvZero, d_rules, CVC3::EXTRACT, CVC3::Theory::getEM(), CVC3::INTTOBV, CVC3::LEFTSHIFT, newBVConstExpr(), CVC3::ExprManager::newKind(), CVC3::ExprManager::registerSubclass(), CVC3::Theory::registerTheory(), CVC3::RIGHTSHIFT, and CVC3::SX.

TheoryBitvector::~TheoryBitvector (  ) 

Definition at line 1854 of file theory_bitvector.cpp.

References d_rules.


Member Function Documentation

const Expr& CVC3::TheoryBitvector::bvZero (  )  const [inline, private]

Return cached constant 0bin0.

Definition at line 160 of file theory_bitvector.h.

References d_bvZero.

const Expr& CVC3::TheoryBitvector::bvOne (  )  const [inline, private]

Return cached constant 0bin1.

Definition at line 162 of file theory_bitvector.h.

References d_bvOne.

Theorem TheoryBitvector::bitBlastEqn ( const Expr e  )  [private]

functions which implement the DP strategy for bitblasting

Returns:
a rewrite theorem which is a conjunction of equivalences over the bits of t1,t2 respectively.

Definition at line 91 of file theory_bitvector.cpp.

References CVC3::AND, CVC3::BitvectorProofRules::bitBlastEqnRule(), bitBlastTerm(), CVC3::BITVECTOR, CVC3::BitvectorProofRules::bitvectorFalseRule(), BVSize(), d_bvBitBlastEq, d_rules, DebugAssert, CVC3::Theory::getBaseType(), CVC3::Theorem::getLHS(), CVC3::Theorem::getRHS(), IF_DEBUG, CVC3::IFF, CVC3::Expr::isEq(), CVC3::Expr::isFalse(), CVC3::Theory::reflexivityRule(), rewriteBoolean(), CVC3::Theory::substitutivityRule(), CVC3::Expr::toString(), CVC3::TRACE, and CVC3::Theory::transitivityRule().

Referenced by bitBlastTerm(), comparebv(), and generalBitBlast().

Theorem TheoryBitvector::bitBlastDisEqn ( const Theorem notE  )  [private]

bitblast disequation

Returns:
a rewrite theorem which is a conjunction of (dis)-equivalences over the bits of t1,t2 respectively.
A separate rule for disequations for efficiency sake. Obvious implementation using rule for equations and rule for NOT, is not efficient.

Definition at line 164 of file theory_bitvector.cpp.

References CVC3::BitvectorProofRules::bitBlastDisEqnRule(), bitBlastTerm(), CVC3::BITVECTOR, CVC3::BitvectorProofRules::bitvectorTrueRule(), BVSize(), d_bvBitBlastDiseq, d_rules, DebugAssert, CVC3::Theory::getCommonRules(), CVC3::Theorem::getExpr(), CVC3::Theorem::getLHS(), CVC3::Theorem::getRHS(), CVC3::Expr::getType(), IF_DEBUG, CVC3::IFF, CVC3::Theory::iffMP(), CVC3::Expr::isNot(), CVC3::Expr::isTrue(), CVC3::OR, rewriteBoolean(), CVC3::Theory::substitutivityRule(), CVC3::Theorem::toString(), CVC3::Expr::toString(), CVC3::TRACE, and CVC3::Theory::transitivityRule().

Referenced by generalBitBlast().

Theorem TheoryBitvector::bitBlastIneqn ( const Expr e  )  [private]

function which implements the DP strtagey to bitblast Inequations

Parameters:
e has the form e1 pred e2, where pred is < or <=.
if e1,e2 are constants, determine bv2int(e1) pred bv2int(e2).

most significant bit of ei is denoted by msb(ei)

Returns:
$(msb(e1)\ pred\ msb(e2)) \vee (msb(e1)=msb(e2) \wedge e1[n-2:0]\ pred\ e2[n-2:0])$

Definition at line 240 of file theory_bitvector.cpp.

References CVC3::AND, CVC3::Expr::arity(), bitBlastTerm(), CVC3::BVCONST, CVC3::BitvectorProofRules::bvConstIneqn(), CVC3::BVLE, CVC3::BVLT, BVSize(), d_rules, DebugAssert, CVC3::BitvectorProofRules::generalIneqn(), CVC3::Expr::getKind(), CVC3::Expr::getOpKind(), CVC3::Theorem::getRHS(), CVC3::Expr::isBoolConst(), CVC3::BitvectorProofRules::lhsEqRhsIneqn(), CVC3::OR, rewriteBoolean(), CVC3::Theory::substitutivityRule(), CVC3::Theorem::toString(), CVC3::Expr::toString(), CVC3::TRACE, and CVC3::Theory::transitivityRule().

Referenced by bitBlastTerm(), and generalBitBlast().

Theorem TheoryBitvector::bitBlastTerm ( const Expr t,
int  bitPosition 
) [private]

functions which implement the DP strategy for bitblasting

The invariant maintained by this function is: accepts a bitvector term, t,and a bitPosition, i. returns a formula over the set of propositional variables defined using BOOLEXTRACT of bitvector variables in t at the position i.

Returns:
Theorem(BOOLEXTRACT(t, bitPosition) <=> phi), where phi is a Boolean formula over the individual bits of bit-vector variables.

Definition at line 359 of file theory_bitvector.cpp.

References CVC3::AND, CVC3::Expr::arity(), CVC3::Expr::begin(), CVC3::BitvectorProofRules::bitblastBVMult(), CVC3::BitvectorProofRules::bitblastBVPlus(), bitBlastEqn(), bitBlastIneqn(), CVC3::BitvectorProofRules::bitExtractBitwise(), CVC3::BitvectorProofRules::bitExtractBVASHR(), CVC3::BitvectorProofRules::bitExtractBVLSHR(), CVC3::BitvectorProofRules::bitExtractBVSHL(), CVC3::BitvectorProofRules::bitExtractConcatenation(), CVC3::BitvectorProofRules::bitExtractConstant(), CVC3::BitvectorProofRules::bitExtractConstBVMult(), CVC3::BitvectorProofRules::bitExtractExtraction(), CVC3::BitvectorProofRules::bitExtractFixedLeftShift(), CVC3::BitvectorProofRules::bitExtractNot(), CVC3::BITVECTOR, CVC3::BOOLEXTRACT, CVC3::BVAND, CVC3::BVASHR, CVC3::BVCONST, CVC3::BVLSHR, CVC3::BVMULT, CVC3::BVNEG, CVC3::BVOR, CVC3::BVPLUS, CVC3::BitvectorProofRules::bvPlusAssociativityRule(), CVC3::BVSHL, BVSize(), CVC3::BVXOR, CVC3::CONCAT, CVC3::CONST_WIDTH_LEFTSHIFT, d_bitvecCache, d_rules, DebugAssert, CVC3::Expr::end(), CVC3::CDMap< Key, Data, HashFcn >::end(), CVC3::EXTRACT, FatalAssert, CVC3::CDMap< Key, Data, HashFcn >::find(), getBoolExtractIndex(), CVC3::Expr::getKind(), CVC3::Theorem::getLHS(), CVC3::Expr::getOpKind(), CVC3::Theorem::getRHS(), CVC3::Expr::getType(), IF_DEBUG, CVC3::Theorem::isNull(), CVC3::leExpr(), newBoolExtractExpr(), newBVConstExpr(), newBVLEExpr(), CVC3::NOT, CVC3::OR, CVC3::Theory::reflexivityRule(), rewriteBoolean(), CVC3::Theory::substitutivityRule(), CVC3::Theory::theoryOf(), CVC3::Theorem::toString(), CVC3::Expr::toString(), CVC3::TRACE, CVC3::Theory::transitivityRule(), and CVC3::XOR.

Referenced by bitBlastDisEqn(), bitBlastEqn(), bitBlastIneqn(), and comparebv().

Theorem TheoryBitvector::pushNegationRec ( const Expr e  ) 

Definition at line 699 of file theory_bitvector.cpp.

References CVC3::Expr::arity(), CVC3::Expr::begin(), CVC3::BVAND, CVC3::BVCONST, CVC3::BVMULT, CVC3::BVNEG, CVC3::BVOR, CVC3::BVPLUS, CVC3::BVXNOR, CVC3::BVXOR, CVC3::CONCAT, d_pushNegCache, d_rules, DebugAssert, CVC3::Expr::end(), CVC3::ExprMap< Data >::end(), CVC3::ExprMap< Data >::find(), CVC3::Expr::getKind(), CVC3::Expr::getOp(), CVC3::Theorem::getRHS(), CVC3::Theorem::isRefl(), CVC3::BitvectorProofRules::negBVand(), CVC3::BitvectorProofRules::negBVor(), CVC3::BitvectorProofRules::negBVxnor(), CVC3::BitvectorProofRules::negBVxor(), CVC3::BitvectorProofRules::negConcat(), CVC3::BitvectorProofRules::negConst(), CVC3::BitvectorProofRules::negNeg(), CVC3::Theory::reflexivityRule(), CVC3::Theory::substitutivityRule(), CVC3::TRACE, and CVC3::Theory::transitivityRule().

Referenced by CVC3::BitvectorTheoremProducer::collectOneTermOfPlus(), CVC3::BitvectorTheoremProducer::createNewPlusCollection(), and pushNegation().

Theorem TheoryBitvector::pushNegation ( const Expr e  )  [private]

Definition at line 804 of file theory_bitvector.cpp.

References CVC3::BVNEG, CVC3::ExprMap< Data >::clear(), d_pushNegCache, DebugAssert, CVC3::Expr::getOpKind(), and pushNegationRec().

Referenced by rewriteBV(), and simplifyOp().

Theorem TheoryBitvector::simplifyOp ( const Expr e  )  [private, virtual]

Top down simplifier.

Reimplemented from CVC3::Theory.

Definition at line 812 of file theory_bitvector.cpp.

References CVC3::Expr::arity(), CVC3::BVMULT, CVC3::BVNEG, CVC3::BVPLUS, CVC3::CONCAT, CVC3::CONST_WIDTH_LEFTSHIFT, CVC3::BitvectorProofRules::constWidthLeftShiftToConcat(), d_rules, CVC3::EXTRACT, CVC3::BitvectorProofRules::extractBVMult(), CVC3::BitvectorProofRules::extractBVPlus(), CVC3::Expr::getOpKind(), CVC3::Theorem::getRHS(), CVC3::Theorem::isNull(), CVC3::LEFTSHIFT, CVC3::BitvectorProofRules::leftShiftToConcat(), pushNegation(), CVC3::Theory::reflexivityRule(), CVC3::RIGHTSHIFT, CVC3::BitvectorProofRules::rightShiftToConcat(), CVC3::Theory::simplify(), CVC3::Theory::substitutivityRule(), and CVC3::Theory::transitivityRule().

Theorem TheoryBitvector::rewriteBV ( const Expr e,
ExprMap< Theorem > &  cache,
int  n = 1 
) [private]

Main rewrite method (implements the actual rewrites).

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. In general, the following rule is implemented. Step1: e0 <=(s) e1 <==> pad(e0) <=(s) pad(e1) Step2: pad(e0) <=(s) pad(e1) <==> (e0[n-1] AND NOT e1[n-1]) OR (e0[n-1] = e1[n-1] AND e0[n-2:0] <= e1[n-2:0])

Definition at line 887 of file theory_bitvector.cpp.

References CVC3::CommonProofRules::andElim(), CVC3::Expr::arity(), CVC3::BitvectorProofRules::bitExtractConstant(), CVC3::BitvectorProofRules::bitExtractRewrite(), CVC3::BitvectorProofRules::bitwiseConcat(), CVC3::BitvectorProofRules::bitwiseConst(), CVC3::BitvectorProofRules::bitwiseConstElim(), CVC3::BitvectorProofRules::bitwiseFlatten(), CVC3::BOOLEXTRACT, CVC3::BVAND, CVC3::BVASHR, CVC3::BitvectorProofRules::bvashrToConcat(), CVC3::BVCOMP, CVC3::BVCONST, CVC3::BitvectorProofRules::bvConstIneqn(), CVC3::BVGE, CVC3::BVGT, CVC3::BVLE, CVC3::BVLSHR, CVC3::BitvectorProofRules::bvlshrToConcat(), CVC3::BVLT, CVC3::BVMULT, CVC3::BVNAND, CVC3::BVNEG, CVC3::BVNOR, CVC3::BVOR, CVC3::BVPLUS, CVC3::BVREPEAT, CVC3::BVROTL, CVC3::BVROTR, CVC3::BVSDIV, CVC3::BitvectorProofRules::bvSDivRewrite(), CVC3::BVSGE, CVC3::BVSGT, CVC3::BitvectorProofRules::bvShiftZero(), CVC3::BVSHL, CVC3::BitvectorProofRules::bvshlToConcat(), BVSize(), CVC3::BVSLE, CVC3::BVSLT, CVC3::BVSMOD, CVC3::BitvectorProofRules::bvSModRewrite(), CVC3::BVSREM, CVC3::BitvectorProofRules::bvSRemRewrite(), CVC3::BVSUB, CVC3::BVUDIV, CVC3::BitvectorProofRules::bvUDivConst(), CVC3::BitvectorProofRules::bvUDivTheorem(), CVC3::BVUMINUS, CVC3::BVUREM, CVC3::BitvectorProofRules::bvURemConst(), CVC3::BitvectorProofRules::bvURemRewrite(), CVC3::BVXNOR, CVC3::BVXOR, CVC3::BVZEROEXTEND, CVC3::BitvectorProofRules::canonBVEQ(), CVC3::BitvectorProofRules::canonBVMult(), CVC3::BitvectorProofRules::canonBVPlus(), CVC3::BitvectorProofRules::canonBVUMinus(), computeBVConst(), CVC3::CONCAT, CVC3::BitvectorProofRules::concatConst(), CVC3::BitvectorProofRules::concatFlatten(), CVC3::BitvectorProofRules::concatMergeExtract(), CVC3::CONST_WIDTH_LEFTSHIFT, constantKids(), CVC3::BitvectorProofRules::constEq(), CVC3::BitvectorProofRules::constWidthLeftShiftToConcat(), d_rules, DebugAssert, CVC3::ExprMap< Data >::end(), CVC3::Theory::enqueueFact(), CVC3::EQ, CVC3::EXTRACT, CVC3::BitvectorProofRules::extractAnd(), CVC3::BitvectorProofRules::extractBitwise(), CVC3::BitvectorProofRules::extractBVMult(), CVC3::BitvectorProofRules::extractBVPlus(), CVC3::BitvectorProofRules::extractConcat(), CVC3::BitvectorProofRules::extractConst(), CVC3::BitvectorProofRules::extractExtract(), CVC3::BitvectorProofRules::extractNeg(), CVC3::BitvectorProofRules::extractOr(), CVC3::BitvectorProofRules::extractWhole(), FatalAssert, CVC3::Theory::find(), CVC3::ExprMap< Data >::find(), getBoolExtractIndex(), CVC3::Theory::getCommonRules(), CVC3::Theorem::getExpr(), getExtractHi(), getExtractLow(), CVC3::Expr::getKind(), CVC3::Theorem::getLHS(), CVC3::Expr::getOpKind(), CVC3::Theorem::getRHS(), IF_DEBUG, CVC3::LEFTSHIFT, CVC3::BitvectorProofRules::leftShiftToConcat(), CVC3::BitvectorProofRules::lhsEqRhsIneqn(), CVC3::BitvectorProofRules::liftConcatBVMult(), newBoolExtractExpr(), newBVExtractExpr(), newConcatExpr(), CVC3::NOT, CVC3::BitvectorProofRules::notBVEQ1Rule(), CVC3::BitvectorProofRules::notBVLTRule(), CVC3::BitvectorProofRules::oneBVAND(), CVC3::BitvectorProofRules::padBVLTRule(), CVC3::BitvectorProofRules::padBVSLTRule(), CVC3::pow(), pushNegation(), CVC3::Theory::reflexivityRule(), CVC3::BitvectorProofRules::repeatRule(), CVC3::BitvectorProofRules::rewriteBVCOMP(), CVC3::BitvectorProofRules::rewriteBVSub(), CVC3::BitvectorProofRules::rewriteNAND(), CVC3::BitvectorProofRules::rewriteNOR(), CVC3::BitvectorProofRules::rewriteXNOR(), CVC3::RIGHTSHIFT, CVC3::BitvectorProofRules::rightShiftToConcat(), CVC3::BitvectorProofRules::rotlRule(), CVC3::BitvectorProofRules::rotrRule(), CVC3::BitvectorProofRules::signBVLTRule(), CVC3::BitvectorProofRules::signExtendRule(), CVC3::Theory::simplify(), CVC3::CommonProofRules::skolemize(), CVC3::Theory::substitutivityRule(), CVC3::SX, CVC3::Theory::symmetryRule(), CVC3::Theory::theoryCore(), CVC3::TRACE, CVC3::Theory::transitivityRule(), CVC3::BitvectorProofRules::zeroBVOR(), CVC3::BitvectorProofRules::zeroExtendRule(), and CVC3::BitvectorProofRules::zeroLeq().

Referenced by rewrite(), and rewriteBV().

Theorem TheoryBitvector::rewriteBV ( const Expr e,
int  n = 1 
) [private]

Rewrite children 'n' levels down (n==1 means "only the top level").

Definition at line 1643 of file theory_bitvector.cpp.

References rewriteBV().

Theorem CVC3::TheoryBitvector::rewriteBV ( const Theorem t,
ExprMap< Theorem > &  cache,
int  n = 1 
) [inline, private]

Definition at line 218 of file theory_bitvector.h.

References CVC3::Theorem::getRHS(), rewriteBV(), and CVC3::Theory::transitivityRule().

Theorem CVC3::TheoryBitvector::rewriteBV ( const Theorem t,
int  n = 1 
) [inline, private]

Definition at line 221 of file theory_bitvector.h.

References CVC3::Theorem::getRHS(), rewriteBV(), and CVC3::Theory::transitivityRule().

Theorem TheoryBitvector::rewriteBoolean ( const Expr e  )  [private]

rewrite input boolean expression e to a simpler form

Definition at line 1650 of file theory_bitvector.cpp.

References CVC3::AND, CVC3::Theory::getCommonRules(), CVC3::Expr::getKind(), CVC3::Theorem::getRHS(), CVC3::IFF, CVC3::Expr::isNot(), CVC3::Theorem::isNull(), CVC3::NOT, CVC3::OR, CVC3::Theory::reflexivityRule(), CVC3::Theory::rewriteAnd(), CVC3::CommonProofRules::rewriteIff(), CVC3::CommonProofRules::rewriteNotFalse(), CVC3::CommonProofRules::rewriteNotNot(), CVC3::CommonProofRules::rewriteNotTrue(), CVC3::Theory::rewriteOr(), CVC3::Theory::substitutivityRule(), and CVC3::Theory::transitivityRule().

Referenced by bitBlastDisEqn(), bitBlastEqn(), bitBlastIneqn(), and bitBlastTerm().

Expr TheoryBitvector::multiply_coeff ( Rational  mult_inv,
const Expr e 
) [private]

Definition at line 1983 of file theory_bitvector.cpp.

References CVC3::Expr::arity(), CVC3::BVCONST, CVC3::BVMULT, CVC3::BVPLUS, BVSize(), computeBVConst(), CVC3::EQ, CVC3::Expr::getOpKind(), CVC3::Expr::isEq(), CVC3::Theory::isLeaf(), newBVConstExpr(), newBVMultExpr(), and newBVPlusExpr().

int CVC3::TheoryBitvector::min ( std::vector< Rational list  )  [private]

Rational TheoryBitvector::Odd_coeff ( const Expr e  )  [private]

Definition at line 2196 of file theory_bitvector.cpp.

References CVC3::BVCONST, CVC3::BVMULT, CVC3::BVPLUS, BVSize(), computeBVConst(), DebugAssert, CVC3::EQ, CVC3::Expr::getOpKind(), CVC3::Theory::isLeaf(), CVC3::Theory::isLeafIn(), isTermIn(), and newBVZeroString().

int TheoryBitvector::check_linear ( const Expr e  )  [private]

Definition at line 2269 of file theory_bitvector.cpp.

References CVC3::Expr::arity(), CVC3::BVCONST, CVC3::BVMULT, CVC3::BVPLUS, CVC3::BVUMINUS, CVC3::EQ, CVC3::Expr::getOpKind(), CVC3::Expr::isVar(), CVC3::PRESENTATION_LANG, CVC3::Expr::toString(), and CVC3::TRACE.

bool TheoryBitvector::isTermIn ( const Expr e1,
const Expr e2 
) [private]

Definition at line 2309 of file theory_bitvector.cpp.

References CVC3::Expr::begin(), CVC3::Expr::end(), and CVC3::Theory::theoryOf().

Referenced by Odd_coeff().

Theorem TheoryBitvector::updateSubterms ( const Expr d  )  [private]

Definition at line 2824 of file theory_bitvector.cpp.

References CVC3::Expr::arity(), CVC3::Theory::find(), CVC3::Theorem::getLHS(), CVC3::Theorem::getRHS(), CVC3::Theory::isLeaf(), rewrite(), CVC3::Theory::substitutivityRule(), and CVC3::Theory::transitivityRule().

int TheoryBitvector::countTermIn ( const Expr term,
const Expr e 
) [private]

Definition at line 2345 of file theory_bitvector.cpp.

References CVC3::Expr::arity(), CVC3::BVCONST, and CVC3::Expr::getOpKind().

Referenced by canSolveFor().

Theorem TheoryBitvector::simplifyPendingEq ( const Theorem thm,
int  maxEffort 
) [private]

Definition at line 2384 of file theory_bitvector.cpp.

References CVC3::BitvectorProofRules::canonBVEQ(), d_rules, DebugAssert, CVC3::EQ, CVC3::Theory::find(), CVC3::Theorem::getExpr(), CVC3::Expr::getKind(), CVC3::Theorem::getLHS(), CVC3::Theorem::getRHS(), CVC3::Theory::iffMP(), CVC3::Theory::isLeaf(), CVC3::Theorem::isRewrite(), rewrite(), CVC3::Theory::substitutivityRule(), CVC3::Theory::symmetryRule(), and CVC3::Theory::transitivityRule().

Referenced by checkSat(), and generalBitBlast().

Theorem TheoryBitvector::generalBitBlast ( const Theorem thm  )  [private]

Definition at line 2427 of file theory_bitvector.cpp.

References CVC3::AND, CVC3::Expr::arity(), bitBlastDisEqn(), bitBlastEqn(), bitBlastIneqn(), CVC3::BVLE, CVC3::BVLT, CVC3::BitvectorProofRules::canonBVEQ(), d_rules, DebugAssert, CVC3::EQ, CVC3::FALSE_EXPR, FatalAssert, CVC3::Theory::find(), CVC3::Theorem::getExpr(), CVC3::Expr::getKind(), CVC3::Theorem::getLHS(), CVC3::Expr::getOpKind(), CVC3::Theorem::getRHS(), CVC3::Theory::iffMP(), CVC3::Expr::isEq(), CVC3::NOT, CVC3::Theory::reflexivityRule(), rewrite(), simplifyPendingEq(), CVC3::Theory::substitutivityRule(), CVC3::Theory::transitivityRule(), and CVC3::TRUE_EXPR.

Referenced by checkSat().

BitvectorProofRules * TheoryBitvector::createProofRules (  ) 

Definition at line 45 of file bitvector_theorem_producer.cpp.

Referenced by TheoryBitvector().

void TheoryBitvector::addSharedTerm ( const Expr e  )  [virtual]

Notify theory of a new shared term.

When a term e associated with theory i occurs as a child of an expression associated with theory j, the framework calls i->addSharedTerm(e) and j->addSharedTerm(e)

Reimplemented from CVC3::Theory.

Definition at line 1862 of file theory_bitvector.cpp.

References CVC3::Expr::addToNotify(), CVC3::CDMap< Key, Data, HashFcn >::count(), d_sharedSubterms, d_sharedSubtermsList, IF_DEBUG, CVC3::PRESENTATION_LANG, CVC3::CDList< T >::push_back(), CVC3::Expr::toString(), and CVC3::TRACE.

Referenced by assertTypePred(), and update().

void TheoryBitvector::assertFact ( const Theorem e  )  [virtual]

Assert a new fact to the decision procedure.

Each fact that makes it into the core framework is assigned to exactly one theory: the theory associated with that fact. assertFact is called to inform the theory that a new fact has been assigned to the theory.

Implements CVC3::Theory.

Definition at line 1879 of file theory_bitvector.cpp.

References assertTypePred(), CVC3::BOOLEXTRACT, CVC3::BVTYPEPRED, d_bb_index, d_bitblast, d_eq, d_eqPending, DebugAssert, CVC3::EQ, CVC3::Theory::getCommonRules(), CVC3::Theorem::getExpr(), CVC3::Expr::getOpKind(), getTypePredExpr(), CVC3::Theory::isLeaf(), CVC3::Theory::isLeafIn(), CVC3::NOT, CVC3::CDList< T >::push_back(), CVC3::Theory::setInconsistent(), CVC3::Theory::theoryCore(), CVC3::Expr::toString(), CVC3::TRACE, and CVC3::Theory::typePred().

void TheoryBitvector::assertTypePred ( const Expr e,
const Theorem pred 
) [virtual]

Receives all the type predicates for the types of the given theory.

Type predicates may be expensive to enqueue eagerly, and DPs may choose to postpone them, or transform them to something more efficient. By default, the asserted type predicate is immediately enqueued as a new fact.

Note: Used only by bitvector theory.

Parameters:
e is the expression for which the type predicate is computed
pred is the predicate theorem P(e)

Reimplemented from CVC3::Theory.

Definition at line 1944 of file theory_bitvector.cpp.

References addSharedTerm(), CVC3::PRESENTATION_LANG, CVC3::Theory::theoryOf(), CVC3::Expr::toString(), and CVC3::TRACE.

Referenced by assertFact().

void TheoryBitvector::checkSat ( bool  fullEffort  )  [virtual]

Check for satisfiability in the theory.

Parameters:
fullEffort when it is false, checkSat can do as much or as little work as it likes, though simple inferences and checks for consistency should be done to increase efficiency. If fullEffort is true, checkSat must check whether the set of facts given by assertFact together with the arrangement of shared terms (provided by addSharedTerm) induced by the global find database equivalence relation are satisfiable. If satisfiable, checkSat does nothing.
If satisfiability can be acheived by merging some of the shared terms, a new fact must be enqueued using enqueueFact (this fact need not be a literal). If there is no way to make things satisfiable, setInconsistent must be called.

Implements CVC3::Theory.

Definition at line 2592 of file theory_bitvector.cpp.

References additionalRewriteConstraints, CVC3::AND, CVC3::CDList< T >::begin(), CVC3::BVCONST, bvdump, BVSize(), comparebv(), d_bb_index, d_bitblast, d_eq, d_eq_index, d_eqPending, d_index1, d_index2, d_sharedSubtermsList, DebugAssert, std::endl(), CVC3::Theory::enqueueFact(), CVC3::EQ, CVC3::FALSE_EXPR, FatalAssert, CVC3::Theory::find(), generalBitBlast(), CVC3::Theory::getCommonRules(), CVC3::Theorem::getExpr(), CVC3::Expr::getKind(), newBVConstExpr(), CVC3::CDList< T >::push_back(), CVC3::Theory::simplify(), simplifyPendingEq(), CVC3::CDList< T >::size(), CVC3::TRUE_EXPR, and CVC3::Theory::trueExpr().

Theorem TheoryBitvector::rewrite ( const Expr e  )  [virtual]

Theory-specific rewrite rules.

By default, rewrite just returns a reflexive theorem stating that the input expression is equivalent to itself. However, rewrite is allowed to return any theorem which describes how the input expression is equivalent to some new expression. rewrite should be used to perform simplifications, normalization, and any other preprocessing on theory-specific expressions that needs to be done.

Reimplemented from CVC3::Theory.

Definition at line 2710 of file theory_bitvector.cpp.

References rewriteBV().

Referenced by generalBitBlast(), simplifyPendingEq(), and updateSubterms().

Theorem TheoryBitvector::rewriteAtomic ( const Expr e  )  [virtual]

Theory-specific rewrites for atomic formulas.

The intended use is to convert complex atomic formulas into an equivalent Boolean combination of simpler formulas. Such conversion may be harmful for algebraic rewrites, and is not always desirable to have in rewrite() method.

Note: Used only by bitvector theory and rewriteLiteral in core.

However, if rewrite() alone cannot solve the problem, and the SAT solver needs to be envoked, these additional rewrites may ease the job for the SAT solver.

Reimplemented from CVC3::Theory.

Definition at line 2717 of file theory_bitvector.cpp.

References CVC3::Theory::reflexivityRule().

void TheoryBitvector::setup ( const Expr e  )  [virtual]

Set up the term e for call-backs when e or its children change.

setup is called once for each expression associated with the theory. It is typically used to setup theory-specific data for an expression and to add call-back information for use with update.

See also:
update

Reimplemented from CVC3::Theory.

Definition at line 2723 of file theory_bitvector.cpp.

References CVC3::Expr::arity(), and CVC3::Expr::isTerm().

void TheoryBitvector::update ( const Theorem e,
const Expr d 
) [virtual]

Notify a theory of a new equality.

update is a call-back used by the notify mechanism of the core theory. It works as follows. When an equation t1 = t2 makes it into the core framework, the two find equivalence classes for t1 and t2 are merged. The result is that t2 is the new equivalence class representative and t1 is no longer an equivalence class representative. When this happens, the notify list of t1 is traversed. Notify list entries consist of a theory and an expression d. For each entry (i,d), i->update(e, d) is called, where e is the theorem corresponding to the equality t1=t2.

To add the entry (i,d) to a term t1's notify list, a call must be made to t1.addNotify(i,d). This is typically done in setup.

See also:
setup

Reimplemented from CVC3::Theory.

Definition at line 2735 of file theory_bitvector.cpp.

References addSharedTerm(), CVC3::Theory::assertEqualities(), CVC3::BVCONST, d_sharedSubterms, DebugAssert, CVC3::CDMap< Key, Data, HashFcn >::end(), CVC3::Theory::find(), CVC3::CDMap< Key, Data, HashFcn >::find(), CVC3::Theorem::getExpr(), CVC3::Theorem::getLHS(), CVC3::Expr::getOpKind(), CVC3::Theorem::getRHS(), CVC3::Expr::hasFind(), CVC3::Theory::inconsistent(), CVC3::Expr::isAtomic(), CVC3::Expr::isNull(), CVC3::Theory::simplify(), and CVC3::Expr::toString().

Theorem TheoryBitvector::solve ( const Theorem e  )  [virtual]

An optional solver.

The solve method can be used to implement a Shostak-style solver. Since solvers do not in general combine, the following technique is used. One theory is designated as the primary solver (in our case, it is the theory of arithmetic). For each equation that enters the core framework, the primary solver is called to ensure that the equation is in solved form with respect to the primary theory.

After the primary solver, the solver for the theory associated with the equation is called. This solver can do whatever it likes, as long as the result is still in solved form with respect to the primary solver. This is a slight generalization of what is described in my (Clark)'s PhD thesis.

Reimplemented from CVC3::Theory.

Definition at line 2851 of file theory_bitvector.cpp.

References CVC3::CommonProofRules::andElim(), CVC3::BVCONST, CVC3::BitvectorProofRules::canonBVEQ(), d_rules, DebugAssert, CVC3::Theory::enqueueFact(), CVC3::EXTRACT, CVC3::Theory::getCommonRules(), CVC3::Theorem::getExpr(), CVC3::Theorem::getLHS(), IF_DEBUG, CVC3::Theory::iffMP(), CVC3::Theory::isLeaf(), CVC3::Theory::isLeafIn(), CVC3::Theorem::isRewrite(), CVC3::Expr::isTerm(), CVC3::BitvectorProofRules::processExtract(), CVC3::CommonProofRules::skolemize(), CVC3::BitvectorProofRules::solveExtractOverlap(), CVC3::BitvectorProofRules::solveExtractOverlapApplies(), and CVC3::Theory::symmetryRule().

void TheoryBitvector::checkType ( const Expr e  )  [virtual]

Check that e is a valid Type expr.

Reimplemented from CVC3::Theory.

Definition at line 2965 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, FatalAssert, CVC3::Theory::getEM(), and CVC3::Expr::getOpKind().

Cardinality TheoryBitvector::finiteTypeInfo ( Expr e,
Unsigned n,
bool  enumerate,
bool  computeSize 
) [virtual]

Compute information related to finiteness of types.

Used by the TypeComputer defined in TheoryCore (theories should not call this funtion directly -- they should use the methods in Type instead). Each theory should implement this if it contains any types that could be non-infinite.

1. Returns Cardinality of the type (finite, infinite, or unknown) 2. If cardinality = finite and enumerate is true, sets e to the nth element of the type if it can sets e to NULL if n is out of bounds or if unable to compute nth element 3. If cardinality = finite and computeSize is true, sets n to the size of the type if it can sets n to 0 otherwise

Reimplemented from CVC3::Theory.

Definition at line 2978 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::CARD_FINITE, FatalAssert, getBitvectorTypeParam(), CVC3::Expr::getKind(), CVC3::Rational::getUnsigned(), newBVConstExpr(), and CVC3::pow().

void TheoryBitvector::computeType ( const Expr e  )  [virtual]

Compute and store the type of e.

Parameters:
e is the expression whose type is computed.
This function computes the type of the top-level operator of e, and recurses into children using getType(), if necessary.

Reimplemented from CVC3::Theory.

Definition at line 3002 of file theory_bitvector.cpp.

References CVC3::Type::anyType(), CVC3::Expr::arity(), CVC3::Expr::begin(), CVC3::BITVECTOR, CVC3::BOOLEXTRACT, CVC3::Theory::boolType(), CVC3::BVAND, CVC3::BVASHR, CVC3::BVCOMP, CVC3::BVCONST, CVC3::BVGE, CVC3::BVGT, CVC3::BVLE, CVC3::BVLSHR, CVC3::BVLT, CVC3::BVMULT, CVC3::BVNAND, CVC3::BVNEG, CVC3::BVNOR, CVC3::BVOR, CVC3::BVPLUS, CVC3::BVREPEAT, CVC3::BVROTL, CVC3::BVROTR, CVC3::BVSDIV, CVC3::BVSGE, CVC3::BVSGT, CVC3::BVSHL, BVSize(), CVC3::BVSLE, CVC3::BVSLT, CVC3::BVSMOD, CVC3::BVSREM, CVC3::BVSUB, CVC3::BVTYPEPRED, CVC3::BVUDIV, CVC3::BVUMINUS, CVC3::BVUREM, CVC3::BVXNOR, CVC3::BVXOR, CVC3::BVZEROEXTEND, CVC3::CONCAT, CVC3::CONST_WIDTH_LEFTSHIFT, CVC3::Expr::end(), CVC3::EXTRACT, FatalAssert, CVC3::Theory::getBaseType(), getBoolExtractIndex(), getBVConstSize(), getBVIndex(), getBVMultParam(), getBVPlusParam(), CVC3::Theory::getEM(), CVC3::Type::getExpr(), getExtractHi(), getExtractLow(), getFixedLeftShiftParam(), getFixedRightShiftParam(), CVC3::Expr::getKind(), CVC3::Expr::getOpKind(), getSXIndex(), CVC3::Expr::getType(), CVC3::Expr::isApply(), CVC3::LEFTSHIFT, newBitvectorType(), newBitvectorTypeExpr(), CVC3::RIGHTSHIFT, CVC3::Expr::setType(), CVC3::SX, CVC3::Expr::toString(), and CVC3::TRACE.

void TheoryBitvector::computeModelTerm ( const Expr e,
std::vector< Expr > &  v 
) [virtual]

Add variables from 'e' to 'v' for constructing a concrete model.

If e is already of primitive type, do NOT add it to v.

Reimplemented from CVC3::Theory.

Definition at line 3329 of file theory_bitvector.cpp.

References CVC3::Expr::begin(), CVC3::BITVECTOR, CVC3::BVAND, CVC3::BVCONST, CVC3::BVGE, CVC3::BVGT, CVC3::BVLE, CVC3::BVLT, CVC3::BVMULT, CVC3::BVNAND, CVC3::BVNEG, CVC3::BVNOR, CVC3::BVOR, CVC3::BVPLUS, CVC3::BVSGE, CVC3::BVSGT, CVC3::BVSLE, CVC3::BVSLT, CVC3::BVSUB, CVC3::BVUMINUS, CVC3::BVXNOR, CVC3::BVXOR, CVC3::CONCAT, CVC3::CONST_WIDTH_LEFTSHIFT, CVC3::Expr::end(), CVC3::EXTRACT, getBitvectorTypeParam(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), CVC3::LEFTSHIFT, newBoolExtractExpr(), and CVC3::RIGHTSHIFT.

void TheoryBitvector::computeModel ( const Expr e,
std::vector< Expr > &  vars 
) [virtual]

Compute the value of a compound variable from the more primitive ones.

The more primitive variables for e are already assigned concrete values, and are available through getModelValue().

The new value for e must be assigned using assignValue() method.

Parameters:
e is the compound type expression to assign a value;
vars are the variables actually assigned. Normally, 'e' is the only element of vars. However, e.g. in the case of uninterpreted functions, assigning 'f' means assigning all relevant applications of 'f' to constant values (f(0), f(5), etc.). Such applications might not be known before the model is constructed (they may be of the form f(x), f(y+z), etc., where x,y,z are still unassigned).
Populating 'vars' is an opportunity for a DP to change the set of top-level "variables" to assign, if needed. In particular, it may drop 'e' from the model entirely, if it is already a concrete value by itself.

Reimplemented from CVC3::Theory.

Definition at line 3378 of file theory_bitvector.cpp.

References CVC3::Theory::assignValue(), CVC3::BITVECTOR, CVC3::BVAND, CVC3::BVCONST, CVC3::BVGE, CVC3::BVGT, CVC3::BVLE, CVC3::BVLT, CVC3::BVMULT, CVC3::BVNAND, CVC3::BVNEG, CVC3::BVNOR, CVC3::BVOR, CVC3::BVPLUS, CVC3::BVSGE, CVC3::BVSGT, CVC3::BVSLE, CVC3::BVSLT, CVC3::BVSUB, CVC3::BVUMINUS, CVC3::BVXNOR, CVC3::BVXOR, CVC3::CONCAT, CVC3::CONST_WIDTH_LEFTSHIFT, DebugAssert, CVC3::EXTRACT, FatalAssert, getBitvectorTypeParam(), CVC3::Theory::getModelValue(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), CVC3::LEFTSHIFT, newBoolExtractExpr(), newBVConstExpr(), CVC3::RIGHTSHIFT, CVC3::Theory::simplify(), CVC3::SX, and CVC3::Expr::toString().

Expr TheoryBitvector::computeTypePred ( const Type t,
const Expr e 
) [virtual]

Theory specific computation of the subtyping predicate for type t applied to the expression e.

By default returns true. Each theory needs to compute subtype predicates for the types associated with it. So, for example, the theory of records will take a record type [# f1: T1, f2: T2 #] and an expression e and will return the subtyping predicate for e, namely: computeTypePred(T1, e.f1) AND computeTypePred(T2, e.f2)

Reimplemented from CVC3::Theory.

Definition at line 3444 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, DebugAssert, CVC3::Expr::getEM(), CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Type::toString(), and CVC3::ExprManager::trueExpr().

Expr TheoryBitvector::computeTCC ( const Expr e  )  [virtual]

Compute and cache the TCC of e.

Parameters:
e is an expression (term or formula). This function computes the TCC of e which is true iff the expression is defined.
This function computes the TCC or predicate of the top-level operator of e, and recurses into children using getTCC(), if necessary.

The default implementation is to compute TCCs recursively for all children, and return their conjunction.

Reimplemented from CVC3::Theory.

Definition at line 5442 of file theory_bitvector.cpp.

References CVC3::Expr::andExpr(), CVC3::andExpr(), CVC3::Expr::arity(), CVC3::BVSDIV, BVSize(), CVC3::BVSMOD, CVC3::BVSREM, CVC3::BVUDIV, CVC3::BVUREM, DebugAssert, CVC3::Expr::eqExpr(), CVC3::ExprMap< Data >::find(), CVC3::Theory::getCommonRules(), CVC3::Expr::getKind(), CVC3::Theorem::getRHS(), CVC3::Theory::getTCC(), CVC3::Expr::isVar(), newBVZeroString(), CVC3::CommonProofRules::rewriteAnd(), CVC3::TheoryCore::tccCache(), CVC3::Theory::theoryCore(), CVC3::Theory::theoryOf(), and CVC3::Theory::trueExpr().

ExprStream & TheoryBitvector::print ( ExprStream os,
const Expr e 
) [virtual]

Theory-specific pretty-printing.

By default, print the top node in AST, and resume pretty-printing the children. The same call e.print(os) can be used in DP-specific printers to use AST printing for the given node. In fact, it is strongly recommended to add e.print(os) as the default for all the cases/kinds that are not handled by the particular pretty-printer.

Reimplemented from CVC3::Theory.

Definition at line 3462 of file theory_bitvector.cpp.

References CVC3::Expr::arity(), CVC3::Expr::begin(), CVC3::BITVECTOR, CVC3::BOOLEXTRACT, CVC3::BVAND, CVC3::BVASHR, CVC3::BVCOMP, CVC3::BVCONST, CVC3::BVGE, CVC3::BVGT, CVC3::BVLE, CVC3::BVLSHR, CVC3::BVLT, CVC3::BVMULT, CVC3::BVNAND, CVC3::BVNEG, CVC3::BVNOR, CVC3::BVOR, CVC3::BVPLUS, CVC3::BVREPEAT, CVC3::BVROTL, CVC3::BVROTR, CVC3::BVSDIV, CVC3::BVSGE, CVC3::BVSGT, CVC3::BVSHL, BVSize(), CVC3::BVSLE, CVC3::BVSLT, CVC3::BVSMOD, CVC3::BVSREM, CVC3::BVSUB, CVC3::BVTOINT, CVC3::BVTYPEPRED, CVC3::BVUDIV, CVC3::BVUMINUS, CVC3::BVUREM, CVC3::BVXNOR, CVC3::BVXOR, CVC3::BVZEROEXTEND, computeBVConst(), CVC3::CONCAT, CVC3::CONST_WIDTH_LEFTSHIFT, CVC3::Theory::d_theoryUsed, DebugAssert, CVC3::Expr::end(), CVC3::EXTRACT, FatalAssert, getBitvectorTypeParam(), getBoolExtractIndex(), getBVConstSize(), getBVConstValue(), getBVIndex(), getBVMultParam(), getBVPlusParam(), CVC3::Op::getExpr(), getExtractHi(), getExtractLow(), getFixedLeftShiftParam(), getFixedRightShiftParam(), CVC3::Expr::getOp(), CVC3::Expr::getOpKind(), getSXIndex(), CVC3::INTTOBV, CVC3::Expr::isApply(), CVC3::Rational::isInteger(), CVC3::ExprStream::lang(), CVC3::LEFTSHIFT, pad(), CVC3::pop(), CVC3::PRESENTATION_LANG, CVC3::Expr::printAST(), CVC3::push(), CVC3::RIGHTSHIFT, CVC3::SMTLIB_LANG, CVC3::space(), and CVC3::SX.

Expr TheoryBitvector::parseExprOp ( const Expr e  )  [virtual]

Theory-specific parsing implemented by the DP.

Reimplemented from CVC3::Theory.

Definition at line 3979 of file theory_bitvector.cpp.

References CVC3::Expr::arity(), CVC3::Expr::begin(), CVC3::BITVECTOR, CVC3::BOOLEXTRACT, CVC3::BVAND, CVC3::BVASHR, CVC3::BVCOMP, CVC3::BVCONST, CVC3::BVGE, CVC3::BVGT, CVC3::BVLE, CVC3::BVLSHR, CVC3::BVLT, CVC3::BVMULT, CVC3::BVNAND, CVC3::BVNEG, CVC3::BVNOR, CVC3::BVOR, CVC3::BVPLUS, CVC3::BVREPEAT, CVC3::BVROTL, CVC3::BVROTR, CVC3::BVSDIV, CVC3::BVSGE, CVC3::BVSGT, CVC3::BVSHL, BVSize(), CVC3::BVSLE, CVC3::BVSLT, CVC3::BVSMOD, CVC3::BVSREM, CVC3::BVSUB, CVC3::BVTOINT, CVC3::BVTYPEPRED, CVC3::BVUDIV, CVC3::BVUMINUS, CVC3::BVUREM, CVC3::BVXNOR, CVC3::BVXOR, CVC3::BVZEROEXTEND, computeBVConst(), CVC3::CONCAT, CVC3::CONST_WIDTH_LEFTSHIFT, CVC3::Theory::d_theoryUsed, DebugAssert, CVC3::Expr::end(), CVC3::EXTRACT, FatalAssert, CVC3::Theory::getBaseType(), CVC3::Theory::getEM(), CVC3::Type::getExpr(), CVC3::Rational::getInt(), CVC3::ExprManager::getKind(), CVC3::Expr::getKind(), CVC3::Expr::getOpKind(), CVC3::Expr::getRational(), CVC3::Expr::getString(), CVC3::Expr::getType(), CVC3::ID, CVC3::INTTOBV, CVC3::isRational(), CVC3::LEFTSHIFT, newBitvectorTypeExpr(), newBoolExtractExpr(), newBVAndExpr(), newBVCompExpr(), newBVConstExpr(), newBVExtractExpr(), newBVIndexExpr(), newBVLEExpr(), newBVLTExpr(), newBVMultPadExpr(), newBVNandExpr(), newBVNegExpr(), newBVNorExpr(), newBVOrExpr(), newBVPlusPadExpr(), newBVSLEExpr(), newBVSLTExpr(), newBVSubExpr(), newBVUminusExpr(), newBVXnorExpr(), newBVXorExpr(), newConcatExpr(), newFixedConstWidthLeftShiftExpr(), newFixedLeftShiftExpr(), newFixedRightShiftExpr(), newSXExpr(), pad(), CVC3::Theory::parseExpr(), CVC3::RAW_LIST, CVC3::RIGHTSHIFT, CVC3::SX, CVC3::Expr::toString(), and CVC3::TRACE.

int TheoryBitvector::BVSize ( const Expr e  ) 

Return the number of bits in the bitvector expression.

Definition at line 45 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, DebugAssert, CVC3::Theory::getBaseType(), getBitvectorTypeParam(), CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bitblastBVMult(), CVC3::BitvectorTheoremProducer::bitblastBVPlus(), bitBlastDisEqn(), CVC3::BitvectorTheoremProducer::bitBlastDisEqnRule(), bitBlastEqn(), CVC3::BitvectorTheoremProducer::bitBlastEqnRule(), bitBlastIneqn(), bitBlastTerm(), CVC3::BitvectorTheoremProducer::bitExtractBitwise(), CVC3::BitvectorTheoremProducer::bitExtractBVASHR(), CVC3::BitvectorTheoremProducer::bitExtractBVLSHR(), CVC3::BitvectorTheoremProducer::bitExtractBVMult(), CVC3::BitvectorTheoremProducer::bitExtractBVSHL(), CVC3::BitvectorTheoremProducer::bitExtractConcatenation(), CVC3::BitvectorTheoremProducer::bitExtractConstBVMult(), CVC3::BitvectorTheoremProducer::bitExtractExtraction(), CVC3::BitvectorTheoremProducer::bitExtractFixedLeftShift(), CVC3::BitvectorTheoremProducer::bitExtractFixedRightShift(), CVC3::BitvectorTheoremProducer::bitExtractNot(), CVC3::BitvectorTheoremProducer::bitExtractRewrite(), CVC3::BitvectorTheoremProducer::bitwiseConcat(), CVC3::BitvectorTheoremProducer::bitwiseConst(), CVC3::BitvectorTheoremProducer::bitwiseConstElim(), CVC3::BitvectorTheoremProducer::bitwiseFlatten(), CVC3::BitvectorTheoremProducer::buildPlusTerm(), CVC3::BitvectorTheoremProducer::bvashrToConcat(), CVC3::BitvectorTheoremProducer::bvConstIneqn(), CVC3::BitvectorTheoremProducer::bvConstMultAssocRule(), CVC3::BitvectorTheoremProducer::bvlshrToConcat(), CVC3::BitvectorTheoremProducer::BVMult_order_subterms(), CVC3::BitvectorTheoremProducer::bvMultAssocRule(), CVC3::BitvectorTheoremProducer::bvmultBVUminus(), CVC3::BitvectorTheoremProducer::bvmultConst(), CVC3::BitvectorTheoremProducer::bvMultDistRule(), CVC3::BitvectorTheoremProducer::bvPlusAssociativityRule(), CVC3::BitvectorTheoremProducer::bvplusZeroConcatRule(), CVC3::BitvectorTheoremProducer::bvSDivRewrite(), CVC3::BitvectorTheoremProducer::bvShiftZero(), CVC3::BitvectorTheoremProducer::bvshlSplit(), CVC3::BitvectorTheoremProducer::bvshlToConcat(), CVC3::BitvectorTheoremProducer::bvSModRewrite(), CVC3::BitvectorTheoremProducer::bvSRemRewrite(), CVC3::BitvectorTheoremProducer::bvUDivConst(), CVC3::BitvectorTheoremProducer::bvUDivTheorem(), CVC3::BitvectorTheoremProducer::bvuminusBVConst(), CVC3::BitvectorTheoremProducer::bvuminusBVMult(), CVC3::BitvectorTheoremProducer::bvuminusToBVPlus(), CVC3::BitvectorTheoremProducer::bvuminusVar(), CVC3::BitvectorTheoremProducer::bvURemConst(), CVC3::BitvectorTheoremProducer::bvURemRewrite(), CVC3::BitvectorTheoremProducer::canonBVEQ(), CVC3::BitvectorTheoremProducer::canonBVMult(), CVC3::BitvectorTheoremProducer::canonBVPlus(), CVC3::BitvectorTheoremProducer::canonBVUMinus(), checkSat(), CVC3::BitvectorTheoremProducer::chopConcat(), CVC3::BitvectorTheoremProducer::combineLikeTermsRule(), comparebv(), computeTCC(), computeType(), CVC3::BitvectorTheoremProducer::constMultToPlus(), CVC3::BitvectorTheoremProducer::constWidthLeftShiftToConcat(), CVC3::BitvectorTheoremProducer::createNewPlusCollection(), CVC3::BitvectorTheoremProducer::distributive_rule(), CVC3::BitvectorTheoremProducer::eqToBits(), CVC3::BitvectorTheoremProducer::extractBVMult(), CVC3::BitvectorTheoremProducer::extractBVPlus(), CVC3::BitvectorTheoremProducer::extractConcat(), CVC3::BitvectorTheoremProducer::extractWhole(), CVC3::BitvectorTheoremProducer::flattenBVPlus(), CVC3::BitvectorTheoremProducer::flipBVMult(), CVC3::BitvectorTheoremProducer::generalIneqn(), CVC3::BitvectorTheoremProducer::getPlusTerms(), CVC3::BitvectorTheoremProducer::isolate_var(), CVC3::BitvectorTheoremProducer::iteExtractRule(), CVC3::BitvectorTheoremProducer::lhsMinusRhsRule(), CVC3::BitvectorTheoremProducer::liftConcatBVMult(), CVC3::BitvectorTheoremProducer::liftConcatBVPlus(), CVC3::BitvectorTheoremProducer::MarkNonSolvableEq(), multiply_coeff(), CVC3::BitvectorTheoremProducer::negElim(), newBVAndExpr(), newBVCompExpr(), newBVExtractExpr(), newBVMultExpr(), newBVNandExpr(), newBVNorExpr(), newBVOrExpr(), newBVPlusExpr(), newBVSDivExpr(), newBVSModExpr(), newBVSRemExpr(), newBVSubExpr(), newBVUDivExpr(), newBVURemExpr(), newBVXnorExpr(), newBVXorExpr(), CVC3::BitvectorTheoremProducer::notBVEQ1Rule(), Odd_coeff(), CVC3::BitvectorTheoremProducer::oneBVAND(), CVC3::BitvectorTheoremProducer::oneCoeffBVMult(), pad(), CVC3::BitvectorTheoremProducer::pad(), CVC3::BitvectorTheoremProducer::padBVMult(), CVC3::BitvectorTheoremProducer::padBVPlus(), parseExprOp(), print(), CVC3::BitvectorTheoremProducer::processExtract(), rewriteBV(), CVC3::BitvectorTheoremProducer::rewriteBVSub(), CVC3::BitvectorTheoremProducer::rightShiftToConcat(), CVC3::BitvectorTheoremProducer::rotlRule(), CVC3::BitvectorTheoremProducer::rotrRule(), CVC3::BitvectorTheoremProducer::signBVLTRule(), CVC3::BitvectorTheoremProducer::signExtendRule(), CVC3::BitvectorTheoremProducer::solveExtractOverlap(), CVC3::BitvectorTheoremProducer::typePredBit(), CVC3::BitvectorTheoremProducer::zeroCoeffBVMult(), and CVC3::BitvectorTheoremProducer::zeroPaddingRule().

Expr CVC3::TheoryBitvector::rat ( const Rational r  )  [inline]

Definition at line 298 of file theory_bitvector.h.

References CVC3::Theory::getEM(), and CVC3::ExprManager::newRatExpr().

Expr TheoryBitvector::pad ( int  len,
const Expr e 
)

pads e to be of length len

Parameters:
len is the desired length of the resulting bitvector
e is the original bitvector of arbitrary length

Definition at line 59 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, BVSize(), DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), newBVExtractExpr(), newBVZeroString(), newConcatExpr(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::canonBVEQ(), newBVConstExpr(), newBVMultPadExpr(), newBVPlusPadExpr(), parseExprOp(), and print().

bool TheoryBitvector::comparebv ( const Expr e1,
const Expr e2 
)

Definition at line 2530 of file theory_bitvector.cpp.

References CVC3::Theory::addSplitter(), CVC3::Theory::assertEqualities(), bitBlastEqn(), bitBlastTerm(), CVC3::BitvectorProofRules::bitExtractAllToConstEq(), CVC3::BVCONST, BVSize(), d_bb_index, d_bitblast, d_rules, DebugAssert, CVC3::Theory::enqueueFact(), CVC3::Expr::eqExpr(), FatalAssert, findAtom(), CVC3::Theory::getCommonRules(), CVC3::Expr::getKind(), CVC3::Theorem::getRHS(), CVC3::Theory::iffMP(), CVC3::Expr::isBoolConst(), CVC3::Expr::isNull(), CVC3::CDList< T >::push_back(), CVC3::Theory::simplify(), and CVC3::Theory::transitivityRule().

Referenced by checkSat().

Type CVC3::TheoryBitvector::newBitvectorType ( int  i  )  [inline]

Definition at line 305 of file theory_bitvector.h.

References newBitvectorTypeExpr().

Referenced by CVC3::VCL::bitvecType(), computeType(), CVC3::Translator::preprocessRec(), CVC3::BitvectorTheoremProducer::processExtract(), CVC3::Translator::processType(), and CVC3::BitvectorTheoremProducer::solveExtractOverlap().

Expr TheoryBitvector::newBitvectorTypePred ( const Type t,
const Expr e 
)

Definition at line 4522 of file theory_bitvector.cpp.

References CVC3::BVTYPEPRED, and CVC3::Type::getExpr().

Expr TheoryBitvector::newBitvectorTypeExpr ( int  i  ) 

Definition at line 4510 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, d_maxLength, DebugAssert, and CVC3::Theory::getEM().

Referenced by computeType(), newBitvectorType(), and parseExprOp().

Expr TheoryBitvector::newBVAndExpr ( const Expr t1,
const Expr t2 
)

Definition at line 4528 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::BVAND, BVSize(), DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bitwiseConst(), CVC3::BitvectorTheoremProducer::negBVor(), CVC3::VCL::newBVAndExpr(), parseExprOp(), and CVC3::BitvectorTheoremProducer::rewriteNAND().

Expr TheoryBitvector::newBVAndExpr ( const std::vector< Expr > &  kids  ) 

Definition at line 4543 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::BVAND, BVSize(), DebugAssert, and CVC3::Theory::getEM().

Expr TheoryBitvector::newBVOrExpr ( const Expr t1,
const Expr t2 
)

Definition at line 4564 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::BVOR, BVSize(), DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bitwiseConst(), CVC3::BitvectorTheoremProducer::negBVand(), CVC3::VCL::newBVOrExpr(), parseExprOp(), and CVC3::BitvectorTheoremProducer::rewriteNOR().

Expr TheoryBitvector::newBVOrExpr ( const std::vector< Expr > &  kids  ) 

Definition at line 4579 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::BVOR, BVSize(), DebugAssert, and CVC3::Theory::getEM().

Expr TheoryBitvector::newBVXorExpr ( const Expr t1,
const Expr t2 
)

Definition at line 4630 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, BVSize(), CVC3::BVXOR, DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bitwiseConst(), CVC3::BitvectorTheoremProducer::canonBVEQ(), CVC3::BitvectorTheoremProducer::negBVxnor(), CVC3::BitvectorTheoremProducer::negBVxor(), CVC3::VCL::newBVXorExpr(), parseExprOp(), and CVC3::BitvectorTheoremProducer::rewriteXNOR().

Expr TheoryBitvector::newBVXorExpr ( const std::vector< Expr > &  kids  ) 

Definition at line 4645 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, BVSize(), CVC3::BVXOR, DebugAssert, and CVC3::Theory::getEM().

Expr TheoryBitvector::newBVXnorExpr ( const Expr t1,
const Expr t2 
)

Definition at line 4666 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, BVSize(), CVC3::BVXNOR, DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::negBVxnor(), CVC3::VCL::newBVXnorExpr(), and parseExprOp().

Expr TheoryBitvector::newBVXnorExpr ( const std::vector< Expr > &  kids  ) 

Definition at line 4696 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, BVSize(), CVC3::BVXNOR, DebugAssert, and CVC3::Theory::getEM().

Expr TheoryBitvector::newBVNandExpr ( const Expr t1,
const Expr t2 
)

Definition at line 4600 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::BVNAND, BVSize(), DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by CVC3::VCL::newBVNandExpr(), and parseExprOp().

Expr TheoryBitvector::newBVNorExpr ( const Expr t1,
const Expr t2 
)

Definition at line 4615 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::BVNOR, BVSize(), DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by CVC3::VCL::newBVNorExpr(), and parseExprOp().

Expr TheoryBitvector::newBVCompExpr ( const Expr t1,
const Expr t2 
)

Definition at line 4681 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::BVCOMP, BVSize(), DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by CVC3::VCL::newBVCompExpr(), and parseExprOp().

Expr TheoryBitvector::newBVLTExpr ( const Expr t1,
const Expr t2 
)

Definition at line 4717 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::BVLT, DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bvUDivTheorem(), CVC3::BitvectorTheoremProducer::generalIneqn(), CVC3::VCL::newBVLTExpr(), CVC3::BitvectorTheoremProducer::notBVLTRule(), CVC3::BitvectorTheoremProducer::padBVLTRule(), parseExprOp(), and CVC3::BitvectorTheoremProducer::signBVLTRule().

Expr TheoryBitvector::newBVLEExpr ( const Expr t1,
const Expr t2 
)

Definition at line 4728 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::BVLE, DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by bitBlastTerm(), CVC3::BitvectorTheoremProducer::bitExtractBVASHR(), CVC3::BitvectorTheoremProducer::generalIneqn(), CVC3::VCL::newBVLEExpr(), CVC3::BitvectorTheoremProducer::notBVLTRule(), CVC3::BitvectorTheoremProducer::padBVLTRule(), parseExprOp(), and CVC3::BitvectorTheoremProducer::signBVLTRule().

Expr TheoryBitvector::newSXExpr ( const Expr t1,
int  len 
)

Definition at line 4739 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, DebugAssert, CVC3::Theory::getEM(), CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), CVC3::SX, and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bvashrToConcat(), CVC3::VCL::newSXExpr(), CVC3::BitvectorTheoremProducer::padBVSLTRule(), and parseExprOp().

Expr TheoryBitvector::newBVIndexExpr ( int  kind,
const Expr t1,
int  len 
)

Definition at line 4754 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::BVREPEAT, DebugAssert, CVC3::Theory::getEM(), CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by parseExprOp().

Expr TheoryBitvector::newBVSLTExpr ( const Expr t1,
const Expr t2 
)

Definition at line 4770 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::BVSLT, DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by CVC3::VCL::newBVSLTExpr(), CVC3::BitvectorTheoremProducer::padBVSLTRule(), and parseExprOp().

Expr TheoryBitvector::newBVSLEExpr ( const Expr t1,
const Expr t2 
)

Definition at line 4781 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::BVSLE, DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by CVC3::VCL::newBVSLEExpr(), CVC3::BitvectorTheoremProducer::padBVSLTRule(), and parseExprOp().

Expr TheoryBitvector::newBVNegExpr ( const Expr t1  ) 

Definition at line 4792 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::BVNEG, DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bitwiseConstElim(), CVC3::BitvectorTheoremProducer::bitwiseFlatten(), CVC3::BitvectorTheoremProducer::buildPlusTerm(), CVC3::BitvectorTheoremProducer::bvuminusToBVPlus(), CVC3::BitvectorTheoremProducer::collectOneTermOfPlus(), CVC3::BitvectorTheoremProducer::constMultToPlus(), CVC3::BitvectorTheoremProducer::createNewPlusCollection(), CVC3::BitvectorTheoremProducer::iteBVnegRule(), CVC3::BitvectorTheoremProducer::negBVand(), CVC3::BitvectorTheoremProducer::negBVor(), CVC3::BitvectorTheoremProducer::negBVxor(), CVC3::BitvectorTheoremProducer::negConcat(), CVC3::VCL::newBVNegExpr(), CVC3::BitvectorTheoremProducer::notBVEQ1Rule(), parseExprOp(), CVC3::BitvectorTheoremProducer::rewriteNAND(), CVC3::BitvectorTheoremProducer::rewriteNOR(), CVC3::BitvectorTheoremProducer::rewriteXNOR(), and CVC3::BitvectorTheoremProducer::sameKidCheck().

Expr TheoryBitvector::newBVUminusExpr ( const Expr t1  ) 

Definition at line 4802 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::BVUMINUS, DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bvSDivRewrite(), CVC3::BitvectorTheoremProducer::bvSModRewrite(), CVC3::BitvectorTheoremProducer::bvSRemRewrite(), CVC3::BitvectorTheoremProducer::canonBVEQ(), CVC3::BitvectorTheoremProducer::lhsMinusRhsRule(), CVC3::VCL::newBVUminusExpr(), parseExprOp(), and CVC3::BitvectorTheoremProducer::rewriteBVSub().

Expr TheoryBitvector::newBoolExtractExpr ( const Expr t1,
int  r 
)

Definition at line 4812 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::BOOLEXTRACT, DebugAssert, CVC3::Theory::getEM(), CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bitblastBVMult(), CVC3::BitvectorTheoremProducer::bitblastBVPlus(), bitBlastTerm(), CVC3::BitvectorTheoremProducer::bitExtractBitwise(), CVC3::BitvectorTheoremProducer::bitExtractBVASHR(), CVC3::BitvectorTheoremProducer::bitExtractBVLSHR(), CVC3::BitvectorTheoremProducer::bitExtractBVMult(), CVC3::BitvectorTheoremProducer::bitExtractBVPlus(), CVC3::BitvectorTheoremProducer::bitExtractBVPlusPreComputed(), CVC3::BitvectorTheoremProducer::bitExtractBVSHL(), CVC3::BitvectorTheoremProducer::bitExtractConcatenation(), CVC3::BitvectorTheoremProducer::bitExtractConstant(), CVC3::BitvectorTheoremProducer::bitExtractConstBVMult(), CVC3::BitvectorTheoremProducer::bitExtractExtraction(), CVC3::BitvectorTheoremProducer::bitExtractFixedLeftShift(), CVC3::BitvectorTheoremProducer::bitExtractFixedRightShift(), CVC3::BitvectorTheoremProducer::bitExtractNot(), CVC3::BitvectorTheoremProducer::bitExtractRewrite(), CVC3::BitvectorTheoremProducer::bitExtractSXRule(), computeModel(), computeModelTerm(), parseExprOp(), rewriteBV(), and CVC3::BitvectorTheoremProducer::zeroPaddingRule().

Expr TheoryBitvector::newFixedLeftShiftExpr ( const Expr t1,
int  r 
)

Definition at line 4826 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, DebugAssert, CVC3::Theory::getEM(), CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), CVC3::LEFTSHIFT, and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::constMultToPlus(), CVC3::VCL::newFixedLeftShiftExpr(), and parseExprOp().

Expr TheoryBitvector::newFixedConstWidthLeftShiftExpr ( const Expr t1,
int  r 
)

Definition at line 4840 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::CONST_WIDTH_LEFTSHIFT, DebugAssert, CVC3::Theory::getEM(), CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bitExtractBVMult(), CVC3::BitvectorTheoremProducer::bitExtractConstBVMult(), newBVExtractExpr(), CVC3::VCL::newFixedConstWidthLeftShiftExpr(), and parseExprOp().

Expr TheoryBitvector::newFixedRightShiftExpr ( const Expr t1,
int  r 
)

Definition at line 4854 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, DebugAssert, CVC3::Theory::getEM(), CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), CVC3::RIGHTSHIFT, and CVC3::Expr::toString().

Referenced by CVC3::VCL::newFixedRightShiftExpr(), and parseExprOp().

Expr TheoryBitvector::newConcatExpr ( const Expr t1,
const Expr t2 
)

Definition at line 4869 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::CONCAT, DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bitwiseConcat(), CVC3::BitvectorTheoremProducer::bitwiseConstElim(), CVC3::BitvectorTheoremProducer::buildPlusTerm(), CVC3::BitvectorTheoremProducer::bvlshrToConcat(), CVC3::BitvectorTheoremProducer::bvshlSplit(), CVC3::BitvectorTheoremProducer::bvshlToConcat(), CVC3::BitvectorTheoremProducer::bvUDivTheorem(), CVC3::BitvectorTheoremProducer::chopConcat(), CVC3::BitvectorTheoremProducer::constWidthLeftShiftToConcat(), CVC3::BitvectorTheoremProducer::extractConcat(), CVC3::BitvectorTheoremProducer::leftShiftToConcat(), CVC3::BitvectorTheoremProducer::liftConcatBVMult(), CVC3::BitvectorTheoremProducer::liftConcatBVPlus(), CVC3::BitvectorTheoremProducer::negConcat(), CVC3::VCL::newConcatExpr(), pad(), CVC3::BitvectorTheoremProducer::pad(), parseExprOp(), CVC3::BitvectorTheoremProducer::processExtract(), CVC3::BitvectorTheoremProducer::repeatRule(), rewriteBV(), CVC3::BitvectorTheoremProducer::rightShiftToConcat(), CVC3::BitvectorTheoremProducer::rotlRule(), CVC3::BitvectorTheoremProducer::rotrRule(), CVC3::BitvectorTheoremProducer::signExtendRule(), CVC3::BitvectorTheoremProducer::solveExtractOverlap(), and CVC3::BitvectorTheoremProducer::zeroExtendRule().

Expr TheoryBitvector::newConcatExpr ( const Expr t1,
const Expr t2,
const Expr t3 
)

Definition at line 4880 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::CONCAT, DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Expr TheoryBitvector::newConcatExpr ( const std::vector< Expr > &  kids  ) 

Definition at line 4895 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::CONCAT, DebugAssert, and CVC3::Theory::getEM().

Expr TheoryBitvector::newBVConstExpr ( const std::string &  s,
int  base = 2 
)

Definition at line 5086 of file theory_bitvector.cpp.

References d_bvConstExprIndex, DebugAssert, CVC3::Theory::getEM(), and CVC3::ExprManager::newExpr().

Referenced by bitBlastTerm(), CVC3::BitvectorTheoremProducer::bitExtractAllToConstEq(), CVC3::BitvectorTheoremProducer::bitExtractBVASHR(), CVC3::BitvectorTheoremProducer::bitExtractBVLSHR(), CVC3::BitvectorTheoremProducer::bitExtractBVSHL(), CVC3::BitvectorTheoremProducer::BitvectorTheoremProducer(), CVC3::BitvectorTheoremProducer::bitwiseConst(), CVC3::BitvectorTheoremProducer::buildPlusTerm(), CVC3::BitvectorTheoremProducer::bvConstMultAssocRule(), CVC3::BitvectorTheoremProducer::bvmultBVUminus(), CVC3::BitvectorTheoremProducer::bvmultConst(), CVC3::BitvectorTheoremProducer::bvplusConst(), CVC3::BitvectorTheoremProducer::bvSDivRewrite(), CVC3::BitvectorTheoremProducer::bvshlSplit(), CVC3::BitvectorTheoremProducer::bvshlToConcat(), CVC3::BitvectorTheoremProducer::bvSModRewrite(), CVC3::BitvectorTheoremProducer::bvSRemRewrite(), CVC3::BitvectorTheoremProducer::bvUDivConst(), CVC3::BitvectorTheoremProducer::bvUDivTheorem(), CVC3::BitvectorTheoremProducer::bvuminusBVConst(), CVC3::BitvectorTheoremProducer::bvuminusBVMult(), CVC3::BitvectorTheoremProducer::bvuminusToBVPlus(), CVC3::BitvectorTheoremProducer::bvuminusVar(), CVC3::BitvectorTheoremProducer::bvURemConst(), CVC3::BitvectorTheoremProducer::canonBVEQ(), CVC3::BitvectorTheoremProducer::canonBVMult(), CVC3::BitvectorTheoremProducer::canonBVUMinus(), checkSat(), CVC3::BitvectorTheoremProducer::chopConcat(), computeModel(), CVC3::BitvectorTheoremProducer::concatConst(), CVC3::BitvectorTheoremProducer::constMultToPlus(), CVC3::BitvectorTheoremProducer::constWidthLeftShiftToConcat(), CVC3::BitvectorTheoremProducer::createNewPlusCollection(), CVC3::BitvectorTheoremProducer::extractConst(), finiteTypeInfo(), CVC3::BitvectorTheoremProducer::isolate_var(), CVC3::BitvectorTheoremProducer::leftShiftToConcat(), multiply_coeff(), CVC3::BitvectorTheoremProducer::negConst(), CVC3::BitvectorTheoremProducer::negElim(), CVC3::VCL::newBVConstExpr(), newBVConstExpr(), newBVOneString(), newBVZeroString(), parseExprOp(), signed_newBVConstExpr(), and TheoryBitvector().

Expr TheoryBitvector::newBVConstExpr ( const std::vector< bool > &  bits  ) 

Definition at line 5044 of file theory_bitvector.cpp.

References d_bvConstExprIndex, DebugAssert, CVC3::Theory::getEM(), and CVC3::ExprManager::newExpr().

Expr TheoryBitvector::signed_newBVConstExpr ( Rational  c,
int  bv_size 
)

Definition at line 5331 of file theory_bitvector.cpp.

References computeNegBVConst(), and newBVConstExpr().

Referenced by CVC3::Translator::preprocessRec().

Expr TheoryBitvector::newBVConstExpr ( const Rational r,
int  len = 0 
)

Definition at line 5054 of file theory_bitvector.cpp.

References DebugAssert, CVC3::Rational::isInteger(), newBVConstExpr(), pad(), and CVC3::Rational::toString().

Expr TheoryBitvector::newBVZeroString ( int  r  ) 

produces a string of 0's of length bvLength

Definition at line 5017 of file theory_bitvector.cpp.

References DebugAssert, and newBVConstExpr().

Referenced by CVC3::BitvectorTheoremProducer::bitExtractBVMult(), CVC3::BitvectorTheoremProducer::bitExtractConstBVMult(), CVC3::BitvectorTheoremProducer::bitwiseConstElim(), CVC3::BitvectorTheoremProducer::bitwiseFlatten(), CVC3::BitvectorTheoremProducer::buildPlusTerm(), CVC3::BitvectorTheoremProducer::bvlshrToConcat(), CVC3::BitvectorTheoremProducer::bvmultBVUminus(), CVC3::BitvectorTheoremProducer::bvShiftZero(), CVC3::BitvectorTheoremProducer::bvshlSplit(), CVC3::BitvectorTheoremProducer::bvuminusBVMult(), CVC3::BitvectorTheoremProducer::canonBVEQ(), CVC3::BitvectorTheoremProducer::chopConcat(), computeTCC(), CVC3::BitvectorTheoremProducer::isolate_var(), CVC3::BitvectorTheoremProducer::lhsMinusRhsRule(), CVC3::BitvectorTheoremProducer::liftConcatBVMult(), CVC3::BitvectorTheoremProducer::liftConcatBVPlus(), CVC3::BitvectorTheoremProducer::MarkNonSolvableEq(), Odd_coeff(), pad(), CVC3::BitvectorTheoremProducer::pad(), CVC3::BitvectorTheoremProducer::rewriteBVCOMP(), CVC3::BitvectorTheoremProducer::rightShiftToConcat(), CVC3::BitvectorTheoremProducer::sumNormalizedElements(), CVC3::BitvectorTheoremProducer::zeroCoeffBVMult(), and CVC3::BitvectorTheoremProducer::zeroExtendRule().

Expr TheoryBitvector::newBVOneString ( int  r  ) 

produces a string of 1's of length bvLength

Definition at line 5031 of file theory_bitvector.cpp.

References DebugAssert, and newBVConstExpr().

Referenced by CVC3::BitvectorTheoremProducer::bitExtractBVMult(), CVC3::BitvectorTheoremProducer::bitwiseConstElim(), CVC3::BitvectorTheoremProducer::bitwiseFlatten(), and CVC3::BitvectorTheoremProducer::rewriteBVCOMP().

Expr TheoryBitvector::newBVExtractExpr ( const Expr e,
int  hi,
int  low 
)

hi and low are bit indices

Definition at line 5109 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, BVSize(), DebugAssert, CVC3::EXTRACT, CVC3::Theory::getEM(), CVC3::Type::getExpr(), getFixedLeftShiftParam(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), CVC3::LEFTSHIFT, newFixedConstWidthLeftShiftExpr(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bitExtractBVMult(), CVC3::BitvectorTheoremProducer::bitExtractRewrite(), CVC3::BitvectorTheoremProducer::bitExtractToExtract(), CVC3::BitvectorTheoremProducer::bitwiseConcat(), CVC3::BitvectorTheoremProducer::bitwiseConstElim(), CVC3::BitvectorTheoremProducer::buildPlusTerm(), CVC3::BitvectorTheoremProducer::bvashrToConcat(), CVC3::BitvectorTheoremProducer::bvlshrToConcat(), CVC3::BitvectorTheoremProducer::bvSDivRewrite(), CVC3::BitvectorTheoremProducer::bvshlSplit(), CVC3::BitvectorTheoremProducer::bvshlToConcat(), CVC3::BitvectorTheoremProducer::bvSModRewrite(), CVC3::BitvectorTheoremProducer::bvSRemRewrite(), CVC3::BitvectorTheoremProducer::canonBVEQ(), CVC3::BitvectorTheoremProducer::concatMergeExtract(), CVC3::BitvectorTheoremProducer::constWidthLeftShiftToConcat(), CVC3::BitvectorTheoremProducer::eqToBits(), CVC3::BitvectorTheoremProducer::expandTypePred(), CVC3::BitvectorTheoremProducer::extractBitwise(), CVC3::BitvectorTheoremProducer::extractBVMult(), CVC3::BitvectorTheoremProducer::extractBVPlus(), CVC3::BitvectorTheoremProducer::extractConcat(), CVC3::BitvectorTheoremProducer::extractExtract(), CVC3::BitvectorTheoremProducer::generalIneqn(), CVC3::BitvectorTheoremProducer::getPlusTerms(), CVC3::BitvectorTheoremProducer::iteExtractRule(), CVC3::BitvectorTheoremProducer::liftConcatBVPlus(), CVC3::VCL::newBVExtractExpr(), pad(), CVC3::BitvectorTheoremProducer::pad(), parseExprOp(), rewriteBV(), CVC3::BitvectorTheoremProducer::rightShiftToConcat(), CVC3::BitvectorTheoremProducer::rotlRule(), CVC3::BitvectorTheoremProducer::rotrRule(), CVC3::BitvectorTheoremProducer::signBVLTRule(), and CVC3::BitvectorTheoremProducer::signExtendRule().

Expr TheoryBitvector::newBVSubExpr ( const Expr t1,
const Expr t2 
)

Definition at line 5132 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, BVSize(), CVC3::BVSUB, DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bvURemRewrite(), CVC3::VCL::newBVSubExpr(), and parseExprOp().

Expr TheoryBitvector::newBVPlusExpr ( int  numbits,
const Expr k1,
const Expr k2 
)

'numbits' is the number of bits in the result

Definition at line 5147 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::BVPLUS, BVSize(), DebugAssert, CVC3::Theory::getEM(), CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bitExtractBVMult(), CVC3::BitvectorTheoremProducer::bitExtractConstBVMult(), CVC3::BitvectorTheoremProducer::buildPlusTerm(), CVC3::BitvectorTheoremProducer::bvMultDistRule(), CVC3::BitvectorTheoremProducer::bvPlusAssociativityRule(), CVC3::BitvectorTheoremProducer::bvplusZeroConcatRule(), CVC3::BitvectorTheoremProducer::bvSModRewrite(), CVC3::BitvectorTheoremProducer::bvUDivTheorem(), CVC3::BitvectorTheoremProducer::bvuminusToBVPlus(), CVC3::BitvectorTheoremProducer::canonBVEQ(), CVC3::BitvectorTheoremProducer::chopConcat(), CVC3::BitvectorTheoremProducer::constMultToPlus(), CVC3::BitvectorTheoremProducer::distributive_rule(), CVC3::BitvectorTheoremProducer::flattenBVPlus(), CVC3::BitvectorTheoremProducer::isolate_var(), CVC3::BitvectorTheoremProducer::lhsMinusRhsRule(), CVC3::BitvectorTheoremProducer::liftConcatBVMult(), CVC3::BitvectorTheoremProducer::liftConcatBVPlus(), multiply_coeff(), CVC3::BitvectorTheoremProducer::negElim(), newBVPlusPadExpr(), CVC3::BitvectorTheoremProducer::padBVPlus(), CVC3::BitvectorTheoremProducer::rewriteBVSub(), and CVC3::BitvectorTheoremProducer::sumNormalizedElements().

Expr TheoryBitvector::newBVPlusExpr ( int  numbits,
const std::vector< Expr > &  k 
)

'numbits' is the number of bits in the result

Definition at line 5168 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::BVPLUS, BVSize(), DebugAssert, and CVC3::Theory::getEM().

Expr TheoryBitvector::newBVPlusPadExpr ( int  bvLength,
const std::vector< Expr > &  k 
)

pads children and then builds plus expr

Definition at line 5189 of file theory_bitvector.cpp.

References newBVPlusExpr(), and pad().

Referenced by CVC3::BitvectorTheoremProducer::extractBVPlus(), CVC3::VCL::newBVPlusExpr(), and parseExprOp().

Expr TheoryBitvector::newBVMultExpr ( int  bvLength,
const Expr t1,
const Expr t2 
)

Definition at line 4910 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::BVMULT, BVSize(), DebugAssert, CVC3::Theory::getEM(), CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bvConstMultAssocRule(), CVC3::BitvectorTheoremProducer::BVMult_order_subterms(), CVC3::BitvectorTheoremProducer::bvMultAssocRule(), CVC3::BitvectorTheoremProducer::bvmultBVUminus(), CVC3::BitvectorTheoremProducer::bvMultDistRule(), CVC3::BitvectorTheoremProducer::bvUDivTheorem(), CVC3::BitvectorTheoremProducer::bvuminusBVMult(), CVC3::BitvectorTheoremProducer::bvuminusVar(), CVC3::BitvectorTheoremProducer::bvURemRewrite(), CVC3::BitvectorTheoremProducer::canonBVMult(), CVC3::BitvectorTheoremProducer::canonBVUMinus(), CVC3::BitvectorTheoremProducer::createNewPlusCollection(), CVC3::BitvectorTheoremProducer::distributive_rule(), CVC3::BitvectorTheoremProducer::flipBVMult(), CVC3::BitvectorTheoremProducer::isolate_var(), multiply_coeff(), CVC3::BitvectorTheoremProducer::negElim(), newBVMultPadExpr(), CVC3::BitvectorTheoremProducer::padBVMult(), and CVC3::BitvectorTheoremProducer::padBVPlus().

Expr TheoryBitvector::newBVMultExpr ( int  bvLength,
const std::vector< Expr > &  kids 
)

Definition at line 4928 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::BVMULT, BVSize(), DebugAssert, and CVC3::Theory::getEM().

Expr TheoryBitvector::newBVMultPadExpr ( int  bvLength,
const Expr t1,
const Expr t2 
)

Definition at line 4955 of file theory_bitvector.cpp.

References newBVMultExpr(), and pad().

Referenced by CVC3::BitvectorTheoremProducer::buildPlusTerm(), CVC3::BitvectorTheoremProducer::canonBVEQ(), CVC3::BitvectorTheoremProducer::extractBVMult(), CVC3::BitvectorTheoremProducer::liftConcatBVMult(), CVC3::VCL::newBVMultExpr(), and parseExprOp().

Expr TheoryBitvector::newBVMultPadExpr ( int  bvLength,
const std::vector< Expr > &  kids 
)

Definition at line 4945 of file theory_bitvector.cpp.

References newBVMultExpr(), and pad().

Expr TheoryBitvector::newBVUDivExpr ( const Expr t1,
const Expr t2 
)

Definition at line 4961 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, BVSize(), CVC3::BVUDIV, DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bvSDivRewrite(), CVC3::BitvectorTheoremProducer::bvURemRewrite(), and CVC3::VCL::newBVUDivExpr().

Expr TheoryBitvector::newBVURemExpr ( const Expr t1,
const Expr t2 
)

Definition at line 4972 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, BVSize(), CVC3::BVUREM, DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bvSModRewrite(), CVC3::BitvectorTheoremProducer::bvSRemRewrite(), and CVC3::VCL::newBVURemExpr().

Expr TheoryBitvector::newBVSDivExpr ( const Expr t1,
const Expr t2 
)

Definition at line 4983 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, CVC3::BVSDIV, BVSize(), DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by CVC3::VCL::newBVSDivExpr().

Expr TheoryBitvector::newBVSRemExpr ( const Expr t1,
const Expr t2 
)

Definition at line 4994 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, BVSize(), CVC3::BVSREM, DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by CVC3::VCL::newBVSRemExpr().

Expr TheoryBitvector::newBVSModExpr ( const Expr t1,
const Expr t2 
)

Definition at line 5005 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, BVSize(), CVC3::BVSMOD, DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getType(), and CVC3::Expr::toString().

Referenced by CVC3::VCL::newBVSModExpr().

int TheoryBitvector::getBitvectorTypeParam ( const Expr e  ) 

Definition at line 5203 of file theory_bitvector.cpp.

References CVC3::BITVECTOR, DebugAssert, CVC3::Rational::getInt(), CVC3::Expr::getKind(), CVC3::Expr::getRational(), and CVC3::Expr::toString().

Referenced by BVSize(), computeModel(), computeModelTerm(), CVC3::BitvectorTheoremProducer::expandTypePred(), finiteTypeInfo(), getBitvectorTypeParam(), print(), and CVC3::Translator::printArrayExpr().

int CVC3::TheoryBitvector::getBitvectorTypeParam ( const Type t  )  [inline]

Definition at line 378 of file theory_bitvector.h.

References getBitvectorTypeParam(), and CVC3::Type::getExpr().

Type TheoryBitvector::getTypePredType ( const Expr tp  ) 

Definition at line 5212 of file theory_bitvector.cpp.

References CVC3::BVTYPEPRED, DebugAssert, CVC3::Expr::getOpExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::isApply(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::expandTypePred().

const Expr & TheoryBitvector::getTypePredExpr ( const Expr tp  ) 

Definition at line 5220 of file theory_bitvector.cpp.

References CVC3::BVTYPEPRED, DebugAssert, CVC3::Expr::getOpKind(), and CVC3::Expr::toString().

Referenced by assertFact(), and CVC3::BitvectorTheoremProducer::expandTypePred().

int TheoryBitvector::getSXIndex ( const Expr e  ) 

Definition at line 5237 of file theory_bitvector.cpp.

References DebugAssert, CVC3::Rational::getInt(), CVC3::Expr::getOpExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getRational(), CVC3::Expr::isApply(), CVC3::SX, and CVC3::Expr::toString().

Referenced by computeType(), and print().

int TheoryBitvector::getBVIndex ( const Expr e  ) 

Definition at line 5245 of file theory_bitvector.cpp.

References CVC3::BVREPEAT, CVC3::BVROTL, CVC3::BVROTR, CVC3::BVZEROEXTEND, DebugAssert, CVC3::Rational::getInt(), CVC3::Expr::getOpExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getRational(), CVC3::Expr::isApply(), and CVC3::Expr::toString().

Referenced by computeType(), print(), CVC3::BitvectorTheoremProducer::repeatRule(), CVC3::BitvectorTheoremProducer::rotlRule(), CVC3::BitvectorTheoremProducer::rotrRule(), and CVC3::BitvectorTheoremProducer::zeroExtendRule().

int TheoryBitvector::getBoolExtractIndex ( const Expr e  ) 

Definition at line 5228 of file theory_bitvector.cpp.

References CVC3::BOOLEXTRACT, DebugAssert, CVC3::Rational::getInt(), CVC3::Expr::getOpExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getRational(), CVC3::Expr::isApply(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bitBlastDisEqnRule(), CVC3::BitvectorTheoremProducer::bitBlastEqnRule(), bitBlastTerm(), CVC3::BitvectorTheoremProducer::bitExtractAllToConstEq(), CVC3::BitvectorTheoremProducer::bitExtractBVPlusPreComputed(), CVC3::BitvectorTheoremProducer::bitExtractRewrite(), CVC3::BitvectorTheoremProducer::bitExtractToExtract(), CVC3::BitvectorTheoremProducer::bitvectorFalseRule(), CVC3::BitvectorTheoremProducer::bitvectorTrueRule(), computeType(), CVC3::BitvectorTheoremProducer::generalIneqn(), print(), and rewriteBV().

int TheoryBitvector::getFixedLeftShiftParam ( const Expr e  ) 

Definition at line 5257 of file theory_bitvector.cpp.

References CVC3::CONST_WIDTH_LEFTSHIFT, DebugAssert, CVC3::Rational::getInt(), CVC3::Expr::getOpExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getRational(), CVC3::Expr::isApply(), CVC3::LEFTSHIFT, and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bitExtractFixedLeftShift(), computeType(), CVC3::BitvectorTheoremProducer::constWidthLeftShiftToConcat(), CVC3::BitvectorTheoremProducer::leftShiftToConcat(), newBVExtractExpr(), and print().

int TheoryBitvector::getFixedRightShiftParam ( const Expr e  ) 

Definition at line 5268 of file theory_bitvector.cpp.

References DebugAssert, CVC3::Rational::getInt(), CVC3::Expr::getOpExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getRational(), CVC3::Expr::isApply(), CVC3::RIGHTSHIFT, and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bitExtractFixedRightShift(), computeType(), print(), and CVC3::BitvectorTheoremProducer::rightShiftToConcat().

int TheoryBitvector::getExtractHi ( const Expr e  ) 

Definition at line 5286 of file theory_bitvector.cpp.

References DebugAssert, CVC3::EXTRACT, CVC3::Rational::getInt(), CVC3::Expr::getOpExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getRational(), CVC3::Expr::isApply(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bitExtractExtraction(), CVC3::BitvectorTheoremProducer::buildPlusTerm(), CVC3::BitvectorTheoremProducer::canonBVEQ(), computeType(), CVC3::BitvectorTheoremProducer::concatMergeExtract(), CVC3::BitvectorTheoremProducer::extractBitwise(), CVC3::BitvectorTheoremProducer::extractBVMult(), CVC3::BitvectorTheoremProducer::extractBVPlus(), CVC3::BitvectorTheoremProducer::extractConcat(), CVC3::BitvectorTheoremProducer::extractConst(), CVC3::BitvectorTheoremProducer::extractExtract(), CVC3::BitvectorTheoremProducer::extractWhole(), CVC3::BitvectorTheoremProducer::getPlusTerms(), CVC3::BitvectorTheoremProducer::iteExtractRule(), print(), CVC3::BitvectorTheoremProducer::processExtract(), rewriteBV(), CVC3::BitvectorTheoremProducer::solveExtractOverlap(), and CVC3::BitvectorTheoremProducer::solveExtractOverlapApplies().

int TheoryBitvector::getExtractLow ( const Expr e  ) 

Definition at line 5277 of file theory_bitvector.cpp.

References DebugAssert, CVC3::EXTRACT, CVC3::Rational::getInt(), CVC3::Expr::getOpExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getRational(), CVC3::Expr::isApply(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bitExtractExtraction(), CVC3::BitvectorTheoremProducer::buildPlusTerm(), CVC3::BitvectorTheoremProducer::canonBVEQ(), computeType(), CVC3::BitvectorTheoremProducer::concatMergeExtract(), CVC3::BitvectorTheoremProducer::extractBitwise(), CVC3::BitvectorTheoremProducer::extractBVMult(), CVC3::BitvectorTheoremProducer::extractBVPlus(), CVC3::BitvectorTheoremProducer::extractConcat(), CVC3::BitvectorTheoremProducer::extractConst(), CVC3::BitvectorTheoremProducer::extractExtract(), CVC3::BitvectorTheoremProducer::extractWhole(), CVC3::BitvectorTheoremProducer::getPlusTerms(), CVC3::BitvectorTheoremProducer::iteExtractRule(), print(), CVC3::BitvectorTheoremProducer::processExtract(), rewriteBV(), CVC3::BitvectorTheoremProducer::solveExtractOverlap(), and CVC3::BitvectorTheoremProducer::solveExtractOverlapApplies().

int TheoryBitvector::getBVPlusParam ( const Expr e  ) 

Definition at line 5295 of file theory_bitvector.cpp.

References CVC3::AST_LANG, CVC3::BVPLUS, DebugAssert, CVC3::Rational::getInt(), CVC3::Expr::getOpExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getRational(), CVC3::Expr::isApply(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bitExtractBVPlus(), CVC3::BitvectorTheoremProducer::bitExtractBVPlusPreComputed(), CVC3::BitvectorTheoremProducer::bvplusConst(), CVC3::BitvectorTheoremProducer::bvplusZeroConcatRule(), computeType(), and print().

int TheoryBitvector::getBVMultParam ( const Expr e  ) 

Definition at line 5303 of file theory_bitvector.cpp.

References CVC3::AST_LANG, CVC3::BVMULT, DebugAssert, CVC3::Rational::getInt(), CVC3::Expr::getOpExpr(), CVC3::Expr::getOpKind(), CVC3::Expr::getRational(), CVC3::Expr::isApply(), and CVC3::Expr::toString().

Referenced by computeType(), and print().

unsigned TheoryBitvector::getBVConstSize ( const Expr e  ) 

Definition at line 5311 of file theory_bitvector.cpp.

References CVC3::BVCONST, DebugAssert, CVC3::Expr::getExprValue(), and CVC3::Expr::getKind().

Referenced by CVC3::BitvectorTheoremProducer::bitwiseConst(), CVC3::BitvectorTheoremProducer::bitwiseConstElim(), computeBVConst(), computeNegBVConst(), computeType(), CVC3::BitvectorTheoremProducer::concatConst(), CVC3::BitvectorTheoremProducer::negConst(), and print().

bool TheoryBitvector::getBVConstValue ( const Expr e,
int  i 
)

Definition at line 5320 of file theory_bitvector.cpp.

References CVC3::BVCONST, DebugAssert, CVC3::Expr::getExprValue(), and CVC3::Expr::getKind().

Referenced by CVC3::BitvectorTheoremProducer::bitExtractConstant(), CVC3::BitvectorTheoremProducer::bitExtractConstBVMult(), CVC3::BitvectorTheoremProducer::bitwiseConst(), CVC3::BitvectorTheoremProducer::bitwiseConstElim(), computeBVConst(), computeNegBVConst(), CVC3::BitvectorTheoremProducer::concatConst(), CVC3::BitvectorTheoremProducer::extractConst(), CVC3::BitvectorTheoremProducer::negConst(), and print().

Rational TheoryBitvector::computeBVConst ( const Expr e  ) 

computes the integer value of a bitvector constant

Definition at line 5346 of file theory_bitvector.cpp.

References CVC3::BVCONST, d_bv32Flag, DebugAssert, getBVConstSize(), getBVConstValue(), CVC3::Expr::getKind(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bvashrToConcat(), CVC3::BitvectorTheoremProducer::bvConstIneqn(), CVC3::BitvectorTheoremProducer::bvConstMultAssocRule(), CVC3::BitvectorTheoremProducer::bvlshrToConcat(), CVC3::BitvectorTheoremProducer::bvmultConst(), CVC3::BitvectorTheoremProducer::bvplusConst(), CVC3::BitvectorTheoremProducer::bvplusZeroConcatRule(), CVC3::BitvectorTheoremProducer::bvShiftZero(), CVC3::BitvectorTheoremProducer::bvshlToConcat(), CVC3::BitvectorTheoremProducer::bvUDivConst(), CVC3::BitvectorTheoremProducer::bvuminusBVConst(), CVC3::BitvectorTheoremProducer::bvURemConst(), CVC3::BitvectorTheoremProducer::canonBVMult(), CVC3::BitvectorTheoremProducer::chopConcat(), CVC3::BitvectorTheoremProducer::collectLikeTermsOfPlus(), CVC3::VCL::computeBVConst(), CVC3::BitvectorTheoremProducer::getPlusTerms(), CVC3::BitvectorTheoremProducer::isolate_var(), CVC3::BitvectorTheoremProducer::liftConcatBVMult(), CVC3::BitvectorTheoremProducer::liftConcatBVPlus(), multiply_coeff(), Odd_coeff(), CVC3::BitvectorTheoremProducer::oneBVAND(), CVC3::BitvectorTheoremProducer::oneCoeffBVMult(), parseExprOp(), print(), rewriteBV(), CVC3::BitvectorTheoremProducer::signBVLTRule(), CVC3::BitvectorTheoremProducer::zeroBVOR(), CVC3::BitvectorTheoremProducer::zeroCoeffBVMult(), and CVC3::BitvectorTheoremProducer::zeroLeq().

Rational TheoryBitvector::computeNegBVConst ( const Expr e  ) 

computes the integer value of ~c+1 or BVUMINUS(c)

Definition at line 5367 of file theory_bitvector.cpp.

References CVC3::BVCONST, d_bv32Flag, DebugAssert, getBVConstSize(), getBVConstValue(), CVC3::Expr::getKind(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bvmultBVUminus(), CVC3::BitvectorTheoremProducer::bvuminusBVConst(), CVC3::BitvectorTheoremProducer::bvuminusBVMult(), and signed_newBVConstExpr().

int CVC3::TheoryBitvector::getMaxSize (  )  [inline]

Definition at line 399 of file theory_bitvector.h.

References d_maxLength.

bool TheoryBitvector::isLinearTerm ( const Expr e  ) 

Definition at line 2363 of file theory_bitvector.cpp.

References CVC3::BVCONST, CVC3::BVMULT, CVC3::BVPLUS, CVC3::Expr::getOpKind(), and CVC3::Theory::isLeaf().

Referenced by canSolveFor().

void TheoryBitvector::extract_vars ( const Expr e,
std::vector< Expr > &  vars 
)

Definition at line 1968 of file theory_bitvector.cpp.

References CVC3::BVCONST, CVC3::BVMULT, CVC3::BVPLUS, CVC3::BVUMINUS, DebugAssert, and CVC3::Expr::getOpKind().

Referenced by CVC3::BitvectorTheoremProducer::BVMult_order_subterms().

bool TheoryBitvector::canSolveFor ( const Expr term,
const Expr e 
)

Definition at line 2319 of file theory_bitvector.cpp.

References CVC3::BVCONST, CVC3::BVMULT, countTermIn(), DebugAssert, CVC3::EQ, CVC3::Expr::getOpKind(), CVC3::Theory::isLeaf(), and isLinearTerm().

Rational TheoryBitvector::multiplicative_inverse ( Rational  r,
int  n_bits 
)

Definition at line 2070 of file theory_bitvector.cpp.

References CVC3::pow().

Referenced by CVC3::BitvectorTheoremProducer::canonBVEQ().


Member Data Documentation

BitvectorProofRules* CVC3::TheoryBitvector::d_rules [private]

Definition at line 101 of file theory_bitvector.h.

Referenced by bitBlastDisEqn(), bitBlastEqn(), bitBlastIneqn(), bitBlastTerm(), comparebv(), generalBitBlast(), pushNegationRec(), rewriteBV(), simplifyOp(), simplifyPendingEq(), solve(), TheoryBitvector(), and ~TheoryBitvector().

size_t CVC3::TheoryBitvector::d_bvConstExprIndex [private]

MemoryManager index for BVConstExpr subclass.

Definition at line 103 of file theory_bitvector.h.

Referenced by newBVConstExpr(), and TheoryBitvector().

size_t CVC3::TheoryBitvector::d_bvPlusExprIndex [private]

Definition at line 104 of file theory_bitvector.h.

size_t CVC3::TheoryBitvector::d_bvParameterExprIndex [private]

Definition at line 105 of file theory_bitvector.h.

size_t CVC3::TheoryBitvector::d_bvTypePredExprIndex [private]

Definition at line 106 of file theory_bitvector.h.

StatCounter CVC3::TheoryBitvector::d_bvDelayEq [private]

counts delayed asserted equalities

Definition at line 109 of file theory_bitvector.h.

StatCounter CVC3::TheoryBitvector::d_bvAssertEq [private]

counts asserted equalities

Definition at line 111 of file theory_bitvector.h.

StatCounter CVC3::TheoryBitvector::d_bvDelayDiseq [private]

counts delayed asserted disequalities

Definition at line 113 of file theory_bitvector.h.

StatCounter CVC3::TheoryBitvector::d_bvAssertDiseq [private]

counts asserted disequalities

Definition at line 115 of file theory_bitvector.h.

StatCounter CVC3::TheoryBitvector::d_bvTypePreds [private]

counts type predicates

Definition at line 117 of file theory_bitvector.h.

StatCounter CVC3::TheoryBitvector::d_bvDelayTypePreds [private]

counts delayed type predicates

Definition at line 119 of file theory_bitvector.h.

StatCounter CVC3::TheoryBitvector::d_bvBitBlastEq [private]

counts bitblasted equalities

Definition at line 121 of file theory_bitvector.h.

Referenced by bitBlastEqn().

StatCounter CVC3::TheoryBitvector::d_bvBitBlastDiseq [private]

counts bitblasted disequalities

Definition at line 123 of file theory_bitvector.h.

Referenced by bitBlastDisEqn().

const bool* CVC3::TheoryBitvector::d_booleanRWFlag [private]

boolean on the fly rewrite flag

Definition at line 126 of file theory_bitvector.h.

const bool* CVC3::TheoryBitvector::d_boolExtractCacheFlag [private]

bool extract cache flag

Definition at line 128 of file theory_bitvector.h.

const bool* CVC3::TheoryBitvector::d_bv32Flag [private]

flag which indicates that all arithmetic is 32 bit with no overflow

Definition at line 130 of file theory_bitvector.h.

Referenced by computeBVConst(), and computeNegBVConst().

CDMap<Expr,Theorem> CVC3::TheoryBitvector::d_bitvecCache [private]

Cache for storing the results of the bitBlastTerm function.

Definition at line 133 of file theory_bitvector.h.

Referenced by bitBlastTerm().

ExprMap<Theorem> CVC3::TheoryBitvector::d_pushNegCache [private]

Cache for pushNegation(). it is ok that this is cache is.

Definition at line 138 of file theory_bitvector.h.

Referenced by pushNegation(), and pushNegationRec().

CDList<Theorem> CVC3::TheoryBitvector::d_eq [private]

Backtracking queue for equalities.

Definition at line 141 of file theory_bitvector.h.

Referenced by assertFact(), and checkSat().

CDList<Theorem> CVC3::TheoryBitvector::d_eqPending [private]

Backtracking queue for unsolved equalities.

Definition at line 143 of file theory_bitvector.h.

Referenced by assertFact(), and checkSat().

CDO<unsigned int> CVC3::TheoryBitvector::d_eq_index [private]

Index to current position in d_eqPending.

Definition at line 145 of file theory_bitvector.h.

Referenced by checkSat().

CDList<Theorem> CVC3::TheoryBitvector::d_bitblast [private]

Backtracking queue for all other assertions.

Definition at line 147 of file theory_bitvector.h.

Referenced by assertFact(), checkSat(), and comparebv().

CDO<unsigned int> CVC3::TheoryBitvector::d_bb_index [private]

Index to current position in d_bitblast.

Definition at line 149 of file theory_bitvector.h.

Referenced by assertFact(), checkSat(), and comparebv().

CDMap<Expr,Expr> CVC3::TheoryBitvector::d_sharedSubterms [private]

Backtracking database of subterms of shared terms.

Definition at line 151 of file theory_bitvector.h.

Referenced by addSharedTerm(), and update().

CDList<Expr> CVC3::TheoryBitvector::d_sharedSubtermsList [private]

Backtracking database of subterms of shared terms.

Definition at line 153 of file theory_bitvector.h.

Referenced by addSharedTerm(), and checkSat().

Expr CVC3::TheoryBitvector::d_bvZero [private]

Constant 1-bit bit-vector 0bin0.

Definition at line 156 of file theory_bitvector.h.

Referenced by bvZero(), and TheoryBitvector().

Expr CVC3::TheoryBitvector::d_bvOne [private]

Constant 1-bit bit-vector 0bin0.

Definition at line 158 of file theory_bitvector.h.

Referenced by bvOne(), and TheoryBitvector().

int CVC3::TheoryBitvector::d_maxLength [private]

Max size of any bitvector we've seen.

Definition at line 165 of file theory_bitvector.h.

Referenced by getMaxSize(), and newBitvectorTypeExpr().

CDO<unsigned> CVC3::TheoryBitvector::d_index1 [private]

Used in checkSat.

Definition at line 168 of file theory_bitvector.h.

Referenced by checkSat().

CDO<unsigned> CVC3::TheoryBitvector::d_index2 [private]

Definition at line 169 of file theory_bitvector.h.

Referenced by checkSat().

ExprMap<Expr> CVC3::TheoryBitvector::d_bvPlusCarryCacheLeftBV

Definition at line 265 of file theory_bitvector.h.

Referenced by CVC3::BitvectorTheoremProducer::computeCarryPreComputed().

ExprMap<Expr> CVC3::TheoryBitvector::d_bvPlusCarryCacheRightBV

Definition at line 266 of file theory_bitvector.h.

Referenced by CVC3::BitvectorTheoremProducer::computeCarryPreComputed().

std::vector<Theorem> CVC3::TheoryBitvector::additionalRewriteConstraints

Definition at line 414 of file theory_bitvector.h.

Referenced by checkSat().


The documentation for this class was generated from the following files:
Generated on Wed Nov 18 16:16:50 2009 for CVC3 by  doxygen 1.5.2