CVC3  2.4.1
Public Member Functions | Public Attributes | Private Member Functions | Private Attributes | List of all members
CVC3::TheoryBitvector Class Reference

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

#include <theory_bitvector.h>

Inheritance diagram for CVC3::TheoryBitvector:
CVC3::Theory

Public Member Functions

Theorem pushNegationRec (const Expr &e)
 
 TheoryBitvector (TheoryCore *core)
 
 ~TheoryBitvector ()
 
BitvectorProofRulescreateProofRules ()
 
void addSharedTerm (const Expr &e)
 Notify theory of a new shared term. More...
 
void assertFact (const Theorem &e)
 Assert a new fact to the decision procedure. More...
 
void assertTypePred (const Expr &e, const Theorem &pred)
 Receives all the type predicates for the types of the given theory. More...
 
void checkSat (bool fullEffort)
 Check for satisfiability in the theory. More...
 
Theorem rewrite (const Expr &e)
 Theory-specific rewrite rules. More...
 
Theorem rewriteAtomic (const Expr &e)
 Theory-specific rewrites for atomic formulas. More...
 
void setup (const Expr &e)
 Set up the term e for call-backs when e or its children change. More...
 
void update (const Theorem &e, const Expr &d)
 Notify a theory of a new equality. More...
 
Theorem solve (const Theorem &e)
 An optional solver. More...
 
void checkType (const Expr &e)
 Check that e is a valid Type expr. More...
 
Cardinality finiteTypeInfo (Expr &e, Unsigned &n, bool enumerate, bool computeSize)
 Compute information related to finiteness of types. More...
 
void computeType (const Expr &e)
 Compute and store the type of e. More...
 
void computeModelTerm (const Expr &e, std::vector< Expr > &v)
 Add variables from 'e' to 'v' for constructing a concrete model. More...
 
void computeModel (const Expr &e, std::vector< Expr > &vars)
 Compute the value of a compound variable from the more primitive ones. More...
 
Expr computeTypePred (const Type &t, const Expr &e)
 Theory specific computation of the subtyping predicate for type t applied to the expression e. More...
 
Expr computeTCC (const Expr &e)
 Compute and cache the TCC of e. More...
 
ExprStreamprint (ExprStream &os, const Expr &e)
 Theory-specific pretty-printing. More...
 
Expr parseExprOp (const Expr &e)
 Theory-specific parsing implemented by the DP. More...
 
int BVSize (const Expr &e)
 Return the number of bits in the bitvector expression. More...
 
Expr rat (const Rational &r)
 
Expr pad (int len, const Expr &e)
 pads e to be of length len More...
 
bool comparebv (const Expr &e1, const Expr &e2)
 
Type newBitvectorType (int i)
 
Expr newBitvectorTypePred (const Type &t, const Expr &e)
 
Expr newBitvectorTypeExpr (int i)
 
Expr newBVAndExpr (const Expr &t1, const Expr &t2)
 
Expr newBVAndExpr (const std::vector< Expr > &kids)
 
Expr newBVOrExpr (const Expr &t1, const Expr &t2)
 
Expr newBVOrExpr (const std::vector< Expr > &kids)
 
Expr newBVXorExpr (const Expr &t1, const Expr &t2)
 
Expr newBVXorExpr (const std::vector< Expr > &kids)
 
Expr newBVXnorExpr (const Expr &t1, const Expr &t2)
 
Expr newBVXnorExpr (const std::vector< Expr > &kids)
 
Expr newBVNandExpr (const Expr &t1, const Expr &t2)
 
Expr newBVNorExpr (const Expr &t1, const Expr &t2)
 
Expr newBVCompExpr (const Expr &t1, const Expr &t2)
 
Expr newBVLTExpr (const Expr &t1, const Expr &t2)
 
Expr newBVLEExpr (const Expr &t1, const Expr &t2)
 
Expr newSXExpr (const Expr &t1, int len)
 
Expr newBVIndexExpr (int kind, const Expr &t1, int len)
 
Expr newBVSLTExpr (const Expr &t1, const Expr &t2)
 
Expr newBVSLEExpr (const Expr &t1, const Expr &t2)
 
Expr newBVNegExpr (const Expr &t1)
 
Expr newBVUminusExpr (const Expr &t1)
 
Expr newBoolExtractExpr (const Expr &t1, int r)
 
Expr newFixedLeftShiftExpr (const Expr &t1, int r)
 
Expr newFixedConstWidthLeftShiftExpr (const Expr &t1, int r)
 
Expr newFixedRightShiftExpr (const Expr &t1, int r)
 
Expr newConcatExpr (const Expr &t1, const Expr &t2)
 
Expr newConcatExpr (const Expr &t1, const Expr &t2, const Expr &t3)
 
Expr newConcatExpr (const std::vector< Expr > &kids)
 
Expr newBVConstExpr (const std::string &s, int base=2)
 
Expr newBVConstExpr (const std::vector< bool > &bits)
 
Expr signed_newBVConstExpr (Rational c, int bv_size)
 
Expr newBVConstExpr (const Rational &r, int len=0)
 
Expr newBVZeroString (int r)
 produces a string of 0's of length bvLength More...
 
Expr newBVOneString (int r)
 produces a string of 1's of length bvLength More...
 
Expr newBVExtractExpr (const Expr &e, int hi, int low)
 hi and low are bit indices More...
 
Expr newBVSubExpr (const Expr &t1, const Expr &t2)
 
Expr newBVPlusExpr (int numbits, const Expr &k1, const Expr &k2)
 'numbits' is the number of bits in the result More...
 
Expr newBVPlusExpr (int numbits, const std::vector< Expr > &k)
 'numbits' is the number of bits in the result More...
 
Expr newBVPlusPadExpr (int bvLength, const std::vector< Expr > &k)
 pads children and then builds plus expr More...
 
Expr newBVMultExpr (int bvLength, const Expr &t1, const Expr &t2)
 
Expr newBVMultExpr (int bvLength, const std::vector< Expr > &kids)
 
Expr newBVMultPadExpr (int bvLength, const Expr &t1, const Expr &t2)
 
Expr newBVMultPadExpr (int bvLength, const std::vector< Expr > &kids)
 
Expr newBVUDivExpr (const Expr &t1, const Expr &t2)
 
Expr newBVURemExpr (const Expr &t1, const Expr &t2)
 
Expr newBVSDivExpr (const Expr &t1, const Expr &t2)
 
Expr newBVSRemExpr (const Expr &t1, const Expr &t2)
 
Expr newBVSModExpr (const Expr &t1, const Expr &t2)
 
int getBitvectorTypeParam (const Expr &e)
 
int getBitvectorTypeParam (const Type &t)
 
Type getTypePredType (const Expr &tp)
 
const ExprgetTypePredExpr (const Expr &tp)
 
int getSXIndex (const Expr &e)
 
int getBVIndex (const Expr &e)
 
int getBoolExtractIndex (const Expr &e)
 
int getFixedLeftShiftParam (const Expr &e)
 
int getFixedRightShiftParam (const Expr &e)
 
int getExtractHi (const Expr &e)
 
int getExtractLow (const Expr &e)
 
int getBVPlusParam (const Expr &e)
 
int getBVMultParam (const Expr &e)
 
unsigned getBVConstSize (const Expr &e)
 
bool getBVConstValue (const Expr &e, int i)
 
Rational computeBVConst (const Expr &e)
 computes the integer value of a bitvector constant More...
 
Rational computeNegBVConst (const Expr &e)
 computes the integer value of ~c+1 or BVUMINUS(c) More...
 
int getMaxSize ()
 
bool isLinearTerm (const Expr &e)
 
void extract_vars (const Expr &e, std::vector< Expr > &vars)
 
bool canSolveFor (const Expr &term, const Expr &e)
 
Rational multiplicative_inverse (Rational r, int n_bits)
 
- Public Member Functions inherited from CVC3::Theory
 Theory (TheoryCore *theoryCore, const std::string &name)
 Whether theory has been used (for smtlib translator) More...
 
virtual ~Theory (void)
 Destructor. More...
 
ExprManagergetEM ()
 Access to ExprManager. More...
 
TheoryCoretheoryCore ()
 Get a pointer to theoryCore. More...
 
CommonProofRulesgetCommonRules ()
 Get a pointer to common proof rules. More...
 
const std::string & getName () const
 Get the name of the theory (for debugging purposes) More...
 
virtual void setUsed ()
 Set the "used" flag on this theory (for smtlib translator) More...
 
virtual bool theoryUsed ()
 Get whether theory has been used (for smtlib translator) More...
 
virtual Theorem theoryPreprocess (const Expr &e)
 Theory-specific preprocessing. More...
 
virtual void checkAssertEqInvariant (const Theorem &e)
 A debug check used by the primary solver. More...
 
virtual Type computeBaseType (const Type &tp)
 Compute the base type of the top-level operator of an arbitrary type. More...
 
virtual void refineCounterExample ()
 Process disequalities from the arrangement for model generation. More...
 
virtual void computeModelBasic (const std::vector< Expr > &v)
 Assign concrete values to basic-type variables in v. More...
 
virtual void notifyInconsistent (const Theorem &thm)
 Notification of conflict. More...
 
virtual void registerAtom (const Expr &e, const Theorem &thm)
 
virtual void registerAtom (const Expr &e)
 Theory-specific registration of atoms. More...
 
virtual bool inconsistent ()
 Check if the current context is inconsistent. More...
 
virtual void setInconsistent (const Theorem &e)
 Make the context inconsistent; The formula proved by e must FALSE. More...
 
virtual void setIncomplete (const std::string &reason)
 Mark the current decision branch as possibly incomplete. More...
 
virtual Theorem simplify (const Expr &e)
 Simplify a term e and return a Theorem(e==e') More...
 
Expr simplifyExpr (const Expr &e)
 Simplify a term e w.r.t. the current context. More...
 
virtual void enqueueFact (const Theorem &e)
 Submit a derived fact to the core from a decision procedure. More...
 
virtual void enqueueSE (const Theorem &e)
 Check if the current context is inconsistent. More...
 
virtual void assertEqualities (const Theorem &e)
 Handle new equalities (usually asserted through addFact) More...
 
virtual Expr parseExpr (const Expr &e)
 Parse the generic expression. More...
 
virtual void assignValue (const Expr &t, const Expr &val)
 Assigns t a concrete value val. Used in model generation. More...
 
virtual void assignValue (const Theorem &thm)
 Record a derived assignment to a variable (LHS). More...
 
void registerKinds (Theory *theory, std::vector< int > &kinds)
 Register new kinds with the given theory. More...
 
void unregisterKinds (Theory *theory, std::vector< int > &kinds)
 Unregister kinds for a theory. More...
 
void registerTheory (Theory *theory, std::vector< int > &kinds, bool hasSolver=false)
 Register a new theory. More...
 
void unregisterTheory (Theory *theory, std::vector< int > &kinds, bool hasSolver)
 Unregister a theory. More...
 
int getNumTheories ()
 Return the number of registered theories. More...
 
bool hasTheory (int kind)
 Test whether a kind maps to any theory. More...
 
TheorytheoryOf (int kind)
 Return the theory associated with a kind. More...
 
TheorytheoryOf (const Type &e)
 Return the theory associated with a type. More...
 
TheorytheoryOf (const Expr &e)
 Return the theory associated with an Expr. More...
 
Theorem find (const Expr &e)
 Return the theorem that e is equal to its find. More...
 
const TheoremfindRef (const Expr &e)
 Return the find as a reference: expr must have a find. More...
 
Theorem findReduce (const Expr &e)
 Return find-reduced version of e. More...
 
bool findReduced (const Expr &e)
 Return true iff e is find-reduced. More...
 
Expr findExpr (const Expr &e)
 Return the find of e, or e if it has no find. More...
 
Expr getTCC (const Expr &e)
 Compute the TCC of e, or the subtyping predicate, if e is a type. More...
 
Type getBaseType (const Expr &e)
 Compute (or look up in cache) the base type of e and return the result. More...
 
Type getBaseType (const Type &tp)
 Compute the base type from an arbitrary type. More...
 
Expr getTypePred (const Type &t, const Expr &e)
 Calls the correct theory to compute a type predicate. More...
 
Theorem updateHelper (const Expr &e)
 Update the children of the term e. More...
 
void setupCC (const Expr &e)
 Setup a term for congruence closure (must have sig and rep attributes) More...
 
void updateCC (const Theorem &e, const Expr &d)
 Update a term w.r.t. congruence closure (must be setup with setupCC()) More...
 
Theorem rewriteCC (const Expr &e)
 Rewrite a term w.r.t. congruence closure (must be setup with setupCC()) More...
 
void getModelTerm (const Expr &e, std::vector< Expr > &v)
 Calls the correct theory to get all of the terms that need to be assigned values in the concrete model. More...
 
Theorem getModelValue (const Expr &e)
 Fetch the concrete assignment to the variable during model generation. More...
 
void addSplitter (const Expr &e, int priority=0)
 Suggest a splitter to the SearchEngine. More...
 
void addGlobalLemma (const Theorem &thm, int priority=0)
 Add a global lemma. More...
 
bool isLeaf (const Expr &e)
 Test if e is an i-leaf term for the current theory. More...
 
bool isLeafIn (const Expr &e1, const Expr &e2)
 Test if e1 is an i-leaf in e2. More...
 
bool leavesAreSimp (const Expr &e)
 Test if all i-leaves of e are simplified. More...
 
Type boolType ()
 Return BOOLEAN type. More...
 
const ExprfalseExpr ()
 Return FALSE Expr. More...
 
const ExprtrueExpr ()
 Return TRUE Expr. More...
 
Expr newVar (const std::string &name, const Type &type)
 Create a new variable given its name and type. More...
 
Expr newVar (const std::string &name, const Type &type, const Expr &def)
 Create a new named expression given its name, type, and definition. More...
 
Op newFunction (const std::string &name, const Type &type, bool computeTransClosure)
 Create a new uninterpreted function. More...
 
Op lookupFunction (const std::string &name, Type *type)
 Look up a function by name. More...
 
Op newFunction (const std::string &name, const Type &type, const Expr &def)
 Create a new defined function. More...
 
Expr addBoundVar (const std::string &name, const Type &type)
 Create and add a new bound variable to the stack, for parseExprOp(). More...
 
Expr addBoundVar (const std::string &name, const Type &type, const Expr &def)
 Create and add a new bound named def to the stack, for parseExprOp(). More...
 
Expr lookupVar (const std::string &name, Type *type)
 Lookup variable and return it and its type. Return NULL Expr if it doesn't exist yet. More...
 
Type newTypeExpr (const std::string &name)
 Create a new uninterpreted type with the given name. More...
 
Type lookupTypeExpr (const std::string &name)
 Lookup type by name. Return Null if no such type exists. More...
 
Type newTypeExpr (const std::string &name, const Type &def)
 Create a new type abbreviation with the given name. More...
 
Type newSubtypeExpr (const Expr &pred, const Expr &witness)
 Create a new subtype expression. More...
 
Expr resolveID (const std::string &name)
 Resolve an identifier, for use in parseExprOp() More...
 
void installID (const std::string &name, const Expr &e)
 Install name as a new identifier associated with Expr e. More...
 
Theorem typePred (const Expr &e)
 Return BOOLEAN type. More...
 
Theorem reflexivityRule (const Expr &a)
 ==> a == a More...
 
Theorem symmetryRule (const Theorem &a1_eq_a2)
 a1 == a2 ==> a2 == a1 More...
 
Theorem transitivityRule (const Theorem &a1_eq_a2, const Theorem &a2_eq_a3)
 (a1 == a2) & (a2 == a3) ==> (a1 == a3) More...
 
Theorem substitutivityRule (const Op &op, const std::vector< Theorem > &thms)
 (c_1 == d_1) & ... & (c_n == d_n) ==> op(c_1,...,c_n) == op(d_1,...,d_n) More...
 
Theorem substitutivityRule (const Expr &e, const Theorem &t)
 Special case for unary operators. More...
 
Theorem substitutivityRule (const Expr &e, const Theorem &t1, const Theorem &t2)
 Special case for binary operators. More...
 
Theorem substitutivityRule (const Expr &e, const std::vector< unsigned > &changed, const std::vector< Theorem > &thms)
 Optimized: only positions which changed are included. More...
 
Theorem substitutivityRule (const Expr &e, int changed, const Theorem &thm)
 Optimized: only a single position changed. More...
 
Theorem iffMP (const Theorem &e1, const Theorem &e1_iff_e2)
 e1 AND (e1 IFF e2) ==> e2 More...
 
Theorem rewriteAnd (const Expr &e)
 ==> AND(e1,e2) IFF [simplified expr] More...
 
Theorem rewriteOr (const Expr &e)
 ==> OR(e1,...,en) IFF [simplified expr] More...
 
Theorem rewriteIte (const Expr &e)
 Derived rule for rewriting ITE. More...
 
Theorem renameExpr (const Expr &e)
 Derived rule to create a new name for an expression. More...
 

Public Attributes

ExprMap< Exprd_bvPlusCarryCacheLeftBV
 
ExprMap< Exprd_bvPlusCarryCacheRightBV
 
std::vector< TheoremadditionalRewriteConstraints
 

Private Member Functions

const ExprbvZero () const
 Return cached constant 0bin0. More...
 
const ExprbvOne () const
 Return cached constant 0bin1. More...
 
Theorem bitBlastEqn (const Expr &e)
 functions which implement the DP strategy for bitblasting More...
 
Theorem bitBlastDisEqn (const Theorem &notE)
 bitblast disequation More...
 
Theorem bitBlastIneqn (const Expr &e)
 function which implements the DP strtagey to bitblast Inequations More...
 
Theorem bitBlastTerm (const Expr &t, int bitPosition)
 functions which implement the DP strategy for bitblasting More...
 
Theorem pushNegation (const Expr &e)
 
virtual Theorem simplifyOp (const Expr &e)
 Top down simplifier. More...
 
Theorem rewriteBV (const Expr &e, ExprMap< Theorem > &cache, int n=1)
 Internal rewrite method for constants. More...
 
Theorem rewriteBV (const Expr &e, int n=1)
 Rewrite children 'n' levels down (n==1 means "only the top level") More...
 
Theorem rewriteBV (const Theorem &t, ExprMap< Theorem > &cache, int n=1)
 
Theorem rewriteBV (const Theorem &t, int n=1)
 
Theorem rewriteBoolean (const Expr &e)
 rewrite input boolean expression e to a simpler form More...
 
Expr multiply_coeff (Rational mult_inv, const Expr &e)
 
int min (std::vector< Rational > list)
 
Rational Odd_coeff (const Expr &e)
 
int check_linear (const Expr &e)
 
bool isTermIn (const Expr &e1, const Expr &e2)
 
Theorem updateSubterms (const Expr &d)
 
int countTermIn (const Expr &term, const Expr &e)
 
Theorem simplifyPendingEq (const Theorem &thm, int maxEffort)
 
Theorem generalBitBlast (const Theorem &thm)
 
ExprStreamprintSmtLibShared (ExprStream &os, const Expr &e)
 

Private Attributes

BitvectorProofRulesd_rules
 
size_t d_bvConstExprIndex
 MemoryManager index for BVConstExpr subclass. More...
 
size_t d_bvPlusExprIndex
 
size_t d_bvParameterExprIndex
 
size_t d_bvTypePredExprIndex
 
StatCounter d_bvDelayEq
 counts delayed asserted equalities More...
 
StatCounter d_bvAssertEq
 counts asserted equalities More...
 
StatCounter d_bvDelayDiseq
 counts delayed asserted disequalities More...
 
StatCounter d_bvAssertDiseq
 counts asserted disequalities More...
 
StatCounter d_bvTypePreds
 counts type predicates More...
 
StatCounter d_bvDelayTypePreds
 counts delayed type predicates More...
 
StatCounter d_bvBitBlastEq
 counts bitblasted equalities More...
 
StatCounter d_bvBitBlastDiseq
 counts bitblasted disequalities More...
 
const bool * d_booleanRWFlag
 boolean on the fly rewrite flag More...
 
const bool * d_boolExtractCacheFlag
 bool extract cache flag More...
 
const bool * d_bv32Flag
 flag which indicates that all arithmetic is 32 bit with no overflow More...
 
CDMap< Expr, Theoremd_bitvecCache
 Cache for storing the results of the bitBlastTerm function. More...
 
ExprMap< Theoremd_pushNegCache
 Cache for pushNegation(). it is ok that this is cache is. More...
 
CDList< Theoremd_eq
 Backtracking queue for equalities. More...
 
CDList< Theoremd_eqPending
 Backtracking queue for unsolved equalities. More...
 
CDO< unsigned int > d_eq_index
 Index to current position in d_eqPending. More...
 
CDList< Theoremd_bitblast
 Backtracking queue for all other assertions. More...
 
CDO< unsigned int > d_bb_index
 Index to current position in d_bitblast. More...
 
CDMap< Expr, Exprd_sharedSubterms
 Backtracking database of subterms of shared terms. More...
 
CDList< Exprd_sharedSubtermsList
 Backtracking database of subterms of shared terms. More...
 
Expr d_bvZero
 Constant 1-bit bit-vector 0bin0. More...
 
Expr d_bvOne
 Constant 1-bit bit-vector 0bin0. More...
 
int d_maxLength
 Max size of any bitvector we've seen. More...
 
CDO< unsigned > d_index1
 Used in checkSat. More...
 
CDO< unsigned > d_index2
 

Additional Inherited Members

- Protected Attributes inherited from CVC3::Theory
bool d_theoryUsed
 

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)
TheoryBitvector::~TheoryBitvector ( )

Definition at line 1842 of file theory_bitvector.cpp.

References d_rules.

Member Function Documentation

const Expr& CVC3::TheoryBitvector::bvZero ( ) const
inlineprivate

Return cached constant 0bin0.

Definition at line 160 of file theory_bitvector.h.

References d_bvZero.

const Expr& CVC3::TheoryBitvector::bvOne ( ) const
inlineprivate

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

accepts a bitvector equation t1 = t2.

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 AND, CVC3::BITVECTOR, DebugAssert, CVC3::Theorem::getLHS(), CVC3::Theorem::getRHS(), IF_DEBUG, IFF, CVC3::Expr::isEq(), CVC3::Expr::isFalse(), CVC3::Expr::toString(), and TRACE.

Referenced by comparebv(), and generalBitBlast().

Theorem TheoryBitvector::bitBlastDisEqn ( const Theorem notE)
private

bitblast disequation

accepts a bitvector equation t1 != t2.

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::BITVECTOR, DebugAssert, CVC3::Theorem::getExpr(), CVC3::Theorem::getLHS(), CVC3::Theorem::getRHS(), CVC3::Expr::getType(), IF_DEBUG, IFF, CVC3::Expr::isNot(), CVC3::Expr::isTrue(), OR, CVC3::Theorem::toString(), CVC3::Expr::toString(), and TRACE.

Referenced by generalBitBlast().

Theorem TheoryBitvector::bitBlastIneqn ( const Expr e)
private

function which implements the DP strtagey to bitblast Inequations

Parameters
ehas 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 AND, CVC3::Expr::arity(), CVC3::BVCONST, CVC3::BVLE, CVC3::BVLT, DebugAssert, CVC3::Expr::getKind(), CVC3::Expr::getOpKind(), CVC3::Theorem::getRHS(), CVC3::Expr::isBoolConst(), OR, CVC3::Theorem::toString(), CVC3::Expr::toString(), and TRACE.

Referenced by 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 AND, CVC3::Expr::arity(), CVC3::Expr::begin(), CVC3::BITVECTOR, CVC3::BOOLEXTRACT, CVC3::BVAND, CVC3::BVASHR, CVC3::BVCONST, CVC3::BVLSHR, CVC3::BVMULT, CVC3::BVNEG, CVC3::BVOR, CVC3::BVPLUS, CVC3::BVSHL, CVC3::BVXOR, CVC3::CONCAT, CVC3::CONST_WIDTH_LEFTSHIFT, DebugAssert, CVC3::Expr::end(), CVC3::EXTRACT, FatalAssert, CVC3::Expr::getKind(), CVC3::Theorem::getLHS(), CVC3::Expr::getOpKind(), CVC3::Theorem::getRHS(), CVC3::Expr::getType(), IF_DEBUG, CVC3::int2string(), CVC3::Theorem::isNull(), CVC3::leExpr(), NOT, OR, CVC3::Theorem::toString(), CVC3::Expr::toString(), TRACE, and XOR.

Referenced by comparebv().

Theorem TheoryBitvector::pushNegationRec ( const Expr e)
Theorem TheoryBitvector::pushNegation ( const Expr e)
private

Definition at line 804 of file theory_bitvector.cpp.

References CVC3::BVNEG, DebugAssert, and CVC3::Expr::getOpKind().

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

Internal rewrite method for constants.

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::Expr::arity(), 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::BVUDIV, CVC3::BVUMINUS, CVC3::BVUREM, CVC3::BVXNOR, CVC3::BVXOR, CVC3::BVZEROEXTEND, CVC3::CONCAT, CVC3::CONST_WIDTH_LEFTSHIFT, constantKids(), DebugAssert, CVC3::ExprMap< Data >::end(), EQ, CVC3::EXTRACT, FatalAssert, CVC3::ExprMap< Data >::find(), CVC3::Theorem::getExpr(), CVC3::Expr::getKind(), CVC3::Theorem::getLHS(), CVC3::Expr::getOp(), CVC3::Expr::getOpKind(), CVC3::Theorem::getRHS(), CVC3::Expr::hasFind(), IF_DEBUG, CVC3::int2string(), CVC3::Theorem::isNull(), CVC3::Theorem::isRefl(), CVC3::LEFTSHIFT, NOT, CVC3::pow(), CVC3::RIGHTSHIFT, CVC3::Expr::setRewriteNormal(), CVC3::SX, CVC3::Expr::toString(), and TRACE.

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 1631 of file theory_bitvector.cpp.

Theorem CVC3::TheoryBitvector::rewriteBV ( const Theorem t,
ExprMap< Theorem > &  cache,
int  n = 1 
)
inlineprivate
Theorem CVC3::TheoryBitvector::rewriteBV ( const Theorem t,
int  n = 1 
)
inlineprivate
Theorem TheoryBitvector::rewriteBoolean ( const Expr e)
private

rewrite input boolean expression e to a simpler form

Definition at line 1638 of file theory_bitvector.cpp.

References AND, CVC3::Expr::begin(), CVC3::Expr::end(), CVC3::Expr::getKind(), CVC3::Theorem::getLHS(), CVC3::Theorem::getRHS(), IFF, CVC3::Expr::isNot(), CVC3::Theorem::isNull(), NOT, and OR.

Expr TheoryBitvector::multiply_coeff ( Rational  mult_inv,
const Expr e 
)
private
int CVC3::TheoryBitvector::min ( std::vector< Rational list)
private
Rational TheoryBitvector::Odd_coeff ( const Expr e)
private
int TheoryBitvector::check_linear ( const Expr e)
private
bool TheoryBitvector::isTermIn ( const Expr e1,
const Expr e2 
)
private

Definition at line 2291 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
int TheoryBitvector::countTermIn ( const Expr term,
const Expr e 
)
private

Definition at line 2327 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
Theorem TheoryBitvector::generalBitBlast ( const Theorem thm)
private
ExprStream & TheoryBitvector::printSmtLibShared ( ExprStream os,
const Expr e 
)
private
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 1850 of file theory_bitvector.cpp.

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 1861 of file theory_bitvector.cpp.

References assertTypePred(), CVC3::BOOLEXTRACT, CVC3::BVTYPEPRED, d_bb_index, d_bitblast, d_eq, d_eqPending, DebugAssert, EQ, CVC3::Theory::getCommonRules(), CVC3::Theorem::getExpr(), CVC3::Expr::getOpKind(), getTypePredExpr(), CVC3::Theory::isLeaf(), CVC3::Theory::isLeafIn(), NOT, CVC3::Theory::setInconsistent(), CVC3::Theory::theoryCore(), CVC3::Expr::toString(), 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
eis the expression for which the type predicate is computed
predis the predicate theorem P(e)

Reimplemented from CVC3::Theory.

Definition at line 1926 of file theory_bitvector.cpp.

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

Referenced by assertFact().

void TheoryBitvector::checkSat ( bool  fullEffort)
virtual

Check for satisfiability in the theory.

Parameters
fullEffortwhen 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 2574 of file theory_bitvector.cpp.

References additionalRewriteConstraints, AND, bvdump, BVSize(), d_bb_index, d_bitblast, d_eq, d_eq_index, d_eqPending, DebugAssert, std::endl(), CVC3::Theory::enqueueFact(), EQ, FALSE_EXPR, FatalAssert, generalBitBlast(), CVC3::Theory::getCommonRules(), CVC3::Theorem::getExpr(), CVC3::Expr::getKind(), newBVConstExpr(), CVC3::Theory::simplify(), simplifyPendingEq(), 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 2670 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 2677 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 2683 of file theory_bitvector.cpp.

References CVC3::Expr::addToNotify(), 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 2695 of file theory_bitvector.cpp.

References addSharedTerm(), CVC3::Theory::assertEqualities(), CVC3::BVCONST, d_sharedSubterms, DebugAssert, CVC3::Theory::enqueueFact(), CVC3::Theory::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::renameExpr(), CVC3::Theory::simplify(), CVC3::Theory::symmetryRule(), CVC3::Expr::toString(), and CVC3::Theory::transitivityRule().

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 2818 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 2932 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 2945 of file theory_bitvector.cpp.

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

void TheoryBitvector::computeType ( const Expr e)
virtual

Compute and store the type of e.

Parameters
eis 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 2969 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::int2string(), CVC3::Expr::isApply(), CVC3::LEFTSHIFT, newBitvectorType(), newBitvectorTypeExpr(), CVC3::RIGHTSHIFT, CVC3::Expr::setType(), CVC3::SX, CVC3::Expr::toString(), and TRACE.

void TheoryBitvector::computeModelTerm ( const Expr e,
std::vector< Expr > &  v 
)
virtual
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
eis the compound type expression to assign a value;
varsare 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 3345 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::Theorem::getExpr(), CVC3::Theory::getModelValue(), CVC3::Expr::getOpKind(), CVC3::Theorem::getRHS(), CVC3::Expr::getType(), CVC3::Expr::isBoolConst(), CVC3::Expr::isTrue(), 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 3411 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
eis 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 5570 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 3662 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, 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, newBVConstExpr(), CVC3::pop(), CVC3::PRESENTATION_LANG, CVC3::Expr::printAST(), printSmtLibShared(), CVC3::push(), CVC3::RIGHTSHIFT, CVC3::SMTLIB_LANG, CVC3::SMTLIB_V2_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 4087 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(), ID, CVC3::INTTOBV, CVC3::Rational::isInteger(), 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(), RAW_LIST, CVC3::RIGHTSHIFT, CVC3::SX, CVC3::Expr::toString(), and 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::Type::getExpr(), CVC3::Expr::getOpKind(), and CVC3::Expr::toString().

Referenced by CVC3::BitvectorTheoremProducer::bitblastBVMult(), CVC3::BitvectorTheoremProducer::bitblastBVPlus(), CVC3::BitvectorTheoremProducer::bitBlastDisEqnRule(), CVC3::BitvectorTheoremProducer::bitBlastEqnRule(), 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(), CVC3::BitvectorTheoremProducer::pad(), CVC3::BitvectorTheoremProducer::padBVMult(), CVC3::BitvectorTheoremProducer::padBVPlus(), parseExprOp(), print(), CVC3::BitvectorTheoremProducer::processExtract(), 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 300 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

Converts e into a BITVECTOR of length 'len'.

Parameters
lenis the desired length of the resulting bitvector
eis the original bitvector of arbitrary length

Definition at line 59 of file theory_bitvector.cpp.

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

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

bool TheoryBitvector::comparebv ( const Expr e1,
const Expr e2 
)
Type CVC3::TheoryBitvector::newBitvectorType ( int  i)
inline
Expr TheoryBitvector::newBitvectorTypePred ( const Type t,
const Expr e 
)

Definition at line 4650 of file theory_bitvector.cpp.

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

Expr TheoryBitvector::newBitvectorTypeExpr ( int  i)
Expr TheoryBitvector::newBVAndExpr ( const Expr t1,
const Expr t2 
)
Expr TheoryBitvector::newBVAndExpr ( const std::vector< Expr > &  kids)
Expr TheoryBitvector::newBVOrExpr ( const Expr t1,
const Expr t2 
)
Expr TheoryBitvector::newBVOrExpr ( const std::vector< Expr > &  kids)
Expr TheoryBitvector::newBVXorExpr ( const Expr t1,
const Expr t2 
)
Expr TheoryBitvector::newBVXorExpr ( const std::vector< Expr > &  kids)
Expr TheoryBitvector::newBVXnorExpr ( const Expr t1,
const Expr t2 
)
Expr TheoryBitvector::newBVXnorExpr ( const std::vector< Expr > &  kids)
Expr TheoryBitvector::newBVNandExpr ( const Expr t1,
const Expr t2 
)
Expr TheoryBitvector::newBVNorExpr ( const Expr t1,
const Expr t2 
)
Expr TheoryBitvector::newBVCompExpr ( const Expr t1,
const Expr t2 
)
Expr TheoryBitvector::newBVLTExpr ( const Expr t1,
const Expr t2 
)
Expr TheoryBitvector::newBVLEExpr ( const Expr t1,
const Expr t2 
)
Expr TheoryBitvector::newSXExpr ( const Expr t1,
int  len 
)
Expr TheoryBitvector::newBVIndexExpr ( int  kind,
const Expr t1,
int  len 
)
Expr TheoryBitvector::newBVSLTExpr ( const Expr t1,
const Expr t2 
)
Expr TheoryBitvector::newBVSLEExpr ( const Expr t1,
const Expr t2 
)
Expr TheoryBitvector::newBVNegExpr ( const Expr t1)
Expr TheoryBitvector::newBVUminusExpr ( const Expr t1)
Expr TheoryBitvector::newBoolExtractExpr ( const Expr t1,
int  r 
)
Expr TheoryBitvector::newFixedLeftShiftExpr ( const Expr t1,
int  r 
)
Expr TheoryBitvector::newFixedConstWidthLeftShiftExpr ( const Expr t1,
int  r 
)
Expr TheoryBitvector::newFixedRightShiftExpr ( const Expr t1,
int  r 
)
Expr TheoryBitvector::newConcatExpr ( const Expr t1,
const Expr t2 
)
Expr TheoryBitvector::newConcatExpr ( const Expr t1,
const Expr t2,
const Expr t3 
)
Expr TheoryBitvector::newConcatExpr ( const std::vector< Expr > &  kids)
Expr TheoryBitvector::newBVConstExpr ( const std::string &  s,
int  base = 2 
)

Definition at line 5214 of file theory_bitvector.cpp.

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

Referenced by 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(), newBVConstExpr(), newBVOneString(), newBVZeroString(), parseExprOp(), print(), signed_newBVConstExpr(), and TheoryBitvector().

Expr TheoryBitvector::newBVConstExpr ( const std::vector< bool > &  bits)
Expr TheoryBitvector::signed_newBVConstExpr ( Rational  c,
int  bv_size 
)

Definition at line 5459 of file theory_bitvector.cpp.

References computeNegBVConst(), and newBVConstExpr().

Expr TheoryBitvector::newBVConstExpr ( const Rational r,
int  len = 0 
)
Expr TheoryBitvector::newBVZeroString ( int  r)
Expr TheoryBitvector::newBVOneString ( int  r)
Expr TheoryBitvector::newBVExtractExpr ( const Expr e,
int  hi,
int  low 
)

hi and low are bit indices

Definition at line 5237 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::int2string(), 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::BitvectorTheoremProducer::pad(), parseExprOp(), 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 
)
Expr TheoryBitvector::newBVPlusExpr ( int  numbits,
const Expr k1,
const Expr k2 
)
Expr TheoryBitvector::newBVPlusExpr ( int  numbits,
const std::vector< Expr > &  k 
)

'numbits' is the number of bits in the result

Definition at line 5296 of file theory_bitvector.cpp.

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

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

pads children and then builds plus expr

Definition at line 5317 of file theory_bitvector.cpp.

References newBVPlusExpr(), and pad().

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

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

Definition at line 5073 of file theory_bitvector.cpp.

References newBVMultExpr(), and pad().

Expr TheoryBitvector::newBVUDivExpr ( const Expr t1,
const Expr t2 
)
Expr TheoryBitvector::newBVURemExpr ( const Expr t1,
const Expr t2 
)
Expr TheoryBitvector::newBVSDivExpr ( const Expr t1,
const Expr t2 
)
Expr TheoryBitvector::newBVSRemExpr ( const Expr t1,
const Expr t2 
)
Expr TheoryBitvector::newBVSModExpr ( const Expr t1,
const Expr t2 
)
int TheoryBitvector::getBitvectorTypeParam ( const Expr e)
int CVC3::TheoryBitvector::getBitvectorTypeParam ( const Type t)
inline

Definition at line 380 of file theory_bitvector.h.

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

Type TheoryBitvector::getTypePredType ( const Expr tp)
const Expr & TheoryBitvector::getTypePredExpr ( const Expr tp)
int TheoryBitvector::getSXIndex ( const Expr e)
int TheoryBitvector::getBVIndex ( const Expr e)
int TheoryBitvector::getBoolExtractIndex ( const Expr e)
int TheoryBitvector::getFixedLeftShiftParam ( const Expr e)
int TheoryBitvector::getFixedRightShiftParam ( const Expr e)
int TheoryBitvector::getExtractHi ( const Expr e)
int TheoryBitvector::getExtractLow ( const Expr e)
int TheoryBitvector::getBVPlusParam ( const Expr e)
int TheoryBitvector::getBVMultParam ( const Expr e)
unsigned TheoryBitvector::getBVConstSize ( const Expr e)
bool TheoryBitvector::getBVConstValue ( const Expr e,
int  i 
)
Rational TheoryBitvector::computeBVConst ( const Expr e)

computes the integer value of a bitvector constant

Definition at line 5474 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::BitvectorTheoremProducer::getPlusTerms(), CVC3::BitvectorTheoremProducer::isolate_var(), CVC3::BitvectorTheoremProducer::liftConcatBVMult(), CVC3::BitvectorTheoremProducer::liftConcatBVPlus(), multiply_coeff(), Odd_coeff(), CVC3::BitvectorTheoremProducer::oneBVAND(), CVC3::BitvectorTheoremProducer::oneCoeffBVMult(), parseExprOp(), print(), CVC3::BitvectorTheoremProducer::signBVLTRule(), CVC3::BitvectorTheoremProducer::zeroBVOR(), CVC3::BitvectorTheoremProducer::zeroCoeffBVMult(), and CVC3::BitvectorTheoremProducer::zeroLeq().

Rational TheoryBitvector::computeNegBVConst ( const Expr e)
int CVC3::TheoryBitvector::getMaxSize ( )
inline

Definition at line 401 of file theory_bitvector.h.

References d_maxLength.

bool TheoryBitvector::isLinearTerm ( const Expr e)
void TheoryBitvector::extract_vars ( const Expr e,
std::vector< Expr > &  vars 
)
bool TheoryBitvector::canSolveFor ( const Expr term,
const Expr e 
)
Rational TheoryBitvector::multiplicative_inverse ( Rational  r,
int  n_bits 
)

Definition at line 2052 of file theory_bitvector.cpp.

References CVC3::pow().

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

Member Data Documentation

BitvectorProofRules* CVC3::TheoryBitvector::d_rules
private
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.

StatCounter CVC3::TheoryBitvector::d_bvBitBlastDiseq
private

counts bitblasted disequalities

Definition at line 123 of file theory_bitvector.h.

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.

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.

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

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

Backtracking database of subterms of shared terms.

Definition at line 153 of file theory_bitvector.h.

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.

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

Definition at line 169 of file theory_bitvector.h.

ExprMap<Expr> CVC3::TheoryBitvector::d_bvPlusCarryCacheLeftBV
ExprMap<Expr> CVC3::TheoryBitvector::d_bvPlusCarryCacheRightBV
std::vector<Theorem> CVC3::TheoryBitvector::additionalRewriteConstraints

Definition at line 416 of file theory_bitvector.h.

Referenced by checkSat().


The documentation for this class was generated from the following files: