CVC3  2.4.1
Classes | Public Member Functions | Private Types | Private Member Functions | Private Attributes | Friends | List of all members
CVC3::TheoryArithOld Class Reference

#include <theory_arith_old.h>

Inheritance diagram for CVC3::TheoryArithOld:
CVC3::TheoryArith CVC3::Theory

Classes

class  DifferenceLogicGraph
class  FreeConst
 Data class for the strongest free constant in separation inqualities. More...
struct  GraphEdge
class  Ineq
 Private class for an inequality in the Fourier-Motzkin database. More...
class  VarOrderGraph

Public Member Functions

void separateMonomial (const Expr &e, Expr &c, Expr &var)
 Separate monomial e = c*p1*...*pn into c and 1*p1*...*pn.
bool isInteger (const Expr &e)
 Check the term t for integrality (return bool)
 TheoryArithOld (TheoryCore *core)
 ~TheoryArithOld ()
ArithProofRulescreateProofRulesOld ()
void addSharedTerm (const Expr &e)
 Notify theory of a new shared term.
void assertFact (const Theorem &e)
 Assert a new fact to the decision procedure.
void refineCounterExample ()
 Process disequalities from the arrangement for model generation.
void computeModelBasic (const std::vector< Expr > &v)
 Assign concrete values to basic-type variables in v.
void computeModel (const Expr &e, std::vector< Expr > &vars)
 Compute the value of a compound variable from the more primitive ones.
void checkSat (bool fullEffort)
 Check for satisfiability in the theory.
Theorem rewrite (const Expr &e)
 Theory-specific rewrite rules.
void setup (const Expr &e)
 Set up the term e for call-backs when e or its children change.
void update (const Theorem &e, const Expr &d)
 Notify a theory of a new equality.
Theorem solve (const Theorem &e)
 An optional solver.
void checkAssertEqInvariant (const Theorem &e)
 A debug check used by the primary solver.
void checkType (const Expr &e)
 Check that e is a valid Type expr.
Cardinality finiteTypeInfo (Expr &e, Unsigned &n, bool enumerate, bool computeSize)
 Compute information related to finiteness of types.
void computeType (const Expr &e)
 Compute and store the type of e.
Type computeBaseType (const Type &t)
 Compute the base type of the top-level operator of an arbitrary type.
void computeModelTerm (const Expr &e, std::vector< Expr > &v)
 Add variables from 'e' to 'v' for constructing a concrete model.
Expr computeTypePred (const Type &t, const Expr &e)
 Theory specific computation of the subtyping predicate for type t applied to the expression e.
Expr computeTCC (const Expr &e)
 Compute and cache the TCC of e.
ExprStreamprint (ExprStream &os, const Expr &e)
 Theory-specific pretty-printing.
Expr parseExprOp (const Expr &e)
 Theory-specific parsing implemented by the DP.
void updateConstrained (const Expr &t)
bool isUnconstrained (const Expr &t)
void tryPropagate (const Expr &x, const Expr &y, const DifferenceLogicGraph::EdgeInfo &x_y_edge, int kind)
void addMultiplicativeSignSplit (const Theorem &case_split_thm)
bool addPairToArithOrder (const Expr &smaller, const Expr &bigger)
bool nonlinearSignSplit () const
bool isNonlinearEq (const Expr &e)
bool isNonlinearSumTerm (const Expr &term)
bool isPowersEquality (const Expr &nonlinearEq, Expr &power1, Expr &power2)
bool isPowerEquality (const Expr &nonlinearEq, Rational &constant, Expr &power1)
- Public Member Functions inherited from CVC3::TheoryArith
 TheoryArith (TheoryCore *core, const std::string &name)
 ~TheoryArith ()
bool isSyntacticRational (const Expr &e, Rational &r)
 Return whether e is syntactically identical to a rational constant.
bool isAtomicArithFormula (const Expr &e)
 Whether any ite's appear in the arithmetic part of the formula e.
Expr rewriteToDiff (const Expr &e)
 Rewrite an atom to look like x - y op c if possible–for smtlib translation.
Theorem canonThm (const Theorem &thm)
 Composition of canon(const Expr&) by transitivity: take e0 = e1, canonize e1 to e2, return e0 = e2.
Type realType ()
Type intType ()
Type subrangeType (const Expr &l, const Expr &r)
Expr rat (Rational r)
Expr darkShadow (const Expr &lhs, const Expr &rhs)
 Construct the dark shadow expression representing lhs <= rhs.
Expr grayShadow (const Expr &v, const Expr &e, const Rational &c1, const Rational &c2)
 Construct the gray shadow expression representing c1 <= v - e <= c2.
bool leavesAreNumConst (const Expr &e)
- Public Member Functions inherited from CVC3::Theory
 Theory (TheoryCore *theoryCore, const std::string &name)
 Whether theory has been used (for smtlib translator)
virtual ~Theory (void)
 Destructor.
ExprManagergetEM ()
 Access to ExprManager.
TheoryCoretheoryCore ()
 Get a pointer to theoryCore.
CommonProofRulesgetCommonRules ()
 Get a pointer to common proof rules.
const std::string & getName () const
 Get the name of the theory (for debugging purposes)
virtual void setUsed ()
 Set the "used" flag on this theory (for smtlib translator)
virtual bool theoryUsed ()
 Get whether theory has been used (for smtlib translator)
virtual Theorem theoryPreprocess (const Expr &e)
 Theory-specific preprocessing.
virtual Theorem simplifyOp (const Expr &e)
 Recursive simplification step.
virtual void assertTypePred (const Expr &e, const Theorem &pred)
 Receives all the type predicates for the types of the given theory.
virtual Theorem rewriteAtomic (const Expr &e)
 Theory-specific rewrites for atomic formulas.
virtual void notifyInconsistent (const Theorem &thm)
 Notification of conflict.
virtual void registerAtom (const Expr &e, const Theorem &thm)
virtual void registerAtom (const Expr &e)
 Theory-specific registration of atoms.
virtual bool inconsistent ()
 Check if the current context is inconsistent.
virtual void setInconsistent (const Theorem &e)
 Make the context inconsistent; The formula proved by e must FALSE.
virtual void setIncomplete (const std::string &reason)
 Mark the current decision branch as possibly incomplete.
virtual Theorem simplify (const Expr &e)
 Simplify a term e and return a Theorem(e==e')
Expr simplifyExpr (const Expr &e)
 Simplify a term e w.r.t. the current context.
virtual void enqueueFact (const Theorem &e)
 Submit a derived fact to the core from a decision procedure.
virtual void enqueueSE (const Theorem &e)
 Check if the current context is inconsistent.
virtual void assertEqualities (const Theorem &e)
 Handle new equalities (usually asserted through addFact)
virtual Expr parseExpr (const Expr &e)
 Parse the generic expression.
virtual void assignValue (const Expr &t, const Expr &val)
 Assigns t a concrete value val. Used in model generation.
virtual void assignValue (const Theorem &thm)
 Record a derived assignment to a variable (LHS).
void registerKinds (Theory *theory, std::vector< int > &kinds)
 Register new kinds with the given theory.
void unregisterKinds (Theory *theory, std::vector< int > &kinds)
 Unregister kinds for a theory.
void registerTheory (Theory *theory, std::vector< int > &kinds, bool hasSolver=false)
 Register a new theory.
void unregisterTheory (Theory *theory, std::vector< int > &kinds, bool hasSolver)
 Unregister a theory.
int getNumTheories ()
 Return the number of registered theories.
bool hasTheory (int kind)
 Test whether a kind maps to any theory.
TheorytheoryOf (int kind)
 Return the theory associated with a kind.
TheorytheoryOf (const Type &e)
 Return the theory associated with a type.
TheorytheoryOf (const Expr &e)
 Return the theory associated with an Expr.
Theorem find (const Expr &e)
 Return the theorem that e is equal to its find.
const TheoremfindRef (const Expr &e)
 Return the find as a reference: expr must have a find.
Theorem findReduce (const Expr &e)
 Return find-reduced version of e.
bool findReduced (const Expr &e)
 Return true iff e is find-reduced.
Expr findExpr (const Expr &e)
 Return the find of e, or e if it has no find.
Expr getTCC (const Expr &e)
 Compute the TCC of e, or the subtyping predicate, if e is a type.
Type getBaseType (const Expr &e)
 Compute (or look up in cache) the base type of e and return the result.
Type getBaseType (const Type &tp)
 Compute the base type from an arbitrary type.
Expr getTypePred (const Type &t, const Expr &e)
 Calls the correct theory to compute a type predicate.
Theorem updateHelper (const Expr &e)
 Update the children of the term e.
void setupCC (const Expr &e)
 Setup a term for congruence closure (must have sig and rep attributes)
void updateCC (const Theorem &e, const Expr &d)
 Update a term w.r.t. congruence closure (must be setup with setupCC())
Theorem rewriteCC (const Expr &e)
 Rewrite a term w.r.t. congruence closure (must be setup with setupCC())
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.
Theorem getModelValue (const Expr &e)
 Fetch the concrete assignment to the variable during model generation.
void addSplitter (const Expr &e, int priority=0)
 Suggest a splitter to the SearchEngine.
void addGlobalLemma (const Theorem &thm, int priority=0)
 Add a global lemma.
bool isLeaf (const Expr &e)
 Test if e is an i-leaf term for the current theory.
bool isLeafIn (const Expr &e1, const Expr &e2)
 Test if e1 is an i-leaf in e2.
bool leavesAreSimp (const Expr &e)
 Test if all i-leaves of e are simplified.
Type boolType ()
 Return BOOLEAN type.
const ExprfalseExpr ()
 Return FALSE Expr.
const ExprtrueExpr ()
 Return TRUE Expr.
Expr newVar (const std::string &name, const Type &type)
 Create a new variable given its name and type.
Expr newVar (const std::string &name, const Type &type, const Expr &def)
 Create a new named expression given its name, type, and definition.
Op newFunction (const std::string &name, const Type &type, bool computeTransClosure)
 Create a new uninterpreted function.
Op lookupFunction (const std::string &name, Type *type)
 Look up a function by name.
Op newFunction (const std::string &name, const Type &type, const Expr &def)
 Create a new defined function.
Expr addBoundVar (const std::string &name, const Type &type)
 Create and add a new bound variable to the stack, for parseExprOp().
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().
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.
Type newTypeExpr (const std::string &name)
 Create a new uninterpreted type with the given name.
Type lookupTypeExpr (const std::string &name)
 Lookup type by name. Return Null if no such type exists.
Type newTypeExpr (const std::string &name, const Type &def)
 Create a new type abbreviation with the given name.
Type newSubtypeExpr (const Expr &pred, const Expr &witness)
 Create a new subtype expression.
Expr resolveID (const std::string &name)
 Resolve an identifier, for use in parseExprOp()
void installID (const std::string &name, const Expr &e)
 Install name as a new identifier associated with Expr e.
Theorem typePred (const Expr &e)
 Return BOOLEAN type.
Theorem reflexivityRule (const Expr &a)
 ==> a == a
Theorem symmetryRule (const Theorem &a1_eq_a2)
 a1 == a2 ==> a2 == a1
Theorem transitivityRule (const Theorem &a1_eq_a2, const Theorem &a2_eq_a3)
 (a1 == a2) & (a2 == a3) ==> (a1 == a3)
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)
Theorem substitutivityRule (const Expr &e, const Theorem &t)
 Special case for unary operators.
Theorem substitutivityRule (const Expr &e, const Theorem &t1, const Theorem &t2)
 Special case for binary operators.
Theorem substitutivityRule (const Expr &e, const std::vector< unsigned > &changed, const std::vector< Theorem > &thms)
 Optimized: only positions which changed are included.
Theorem substitutivityRule (const Expr &e, int changed, const Theorem &thm)
 Optimized: only a single position changed.
Theorem iffMP (const Theorem &e1, const Theorem &e1_iff_e2)
 e1 AND (e1 IFF e2) ==> e2
Theorem rewriteAnd (const Expr &e)
 ==> AND(e1,e2) IFF [simplified expr]
Theorem rewriteOr (const Expr &e)
 ==> OR(e1,...,en) IFF [simplified expr]
Theorem rewriteIte (const Expr &e)
 Derived rule for rewriting ITE.
Theorem renameExpr (const Expr &e)
 Derived rule to create a new name for an expression.

Private Types

enum  BoundsQueryType { QueryWithCacheLeaves, QueryWithCacheLeavesAndConstrainedComputation, QueryWithCacheAll }
typedef ExprMap< std::set
< std::pair< Rational, Expr > > > 
AtomsMap

Private Member Functions

Theorem isIntegerThm (const Expr &e)
 Check the term t for integrality.
Theorem isIntegerDerive (const Expr &isIntE, const Theorem &thm)
 A helper method for isIntegerThm()
const RationalfreeConstIneq (const Expr &ineq, bool varOnRHS)
 Extract the free constant from an inequality.
const FreeConstupdateSubsumptionDB (const Expr &ineq, bool varOnRHS, bool &subsumed)
 Update the free constant subsumption database with new inequality.
bool kidsCanonical (const Expr &e)
 Check if the kids of e are fully simplified and canonized (for debugging)
Theorem canon (const Expr &e)
 Canonize the expression e, assuming, all children are canonical.
Theorem canonSimplify (const Expr &e)
 Canonize and reduce e w.r.t. union-find database; assume all children are canonical.
Theorem canonSimplify (const Theorem &thm)
 Composition of canonSimplify(const Expr&) by transitivity: take e0 = e1, canonize and simplify e1 to e2, return e0 = e2.
Theorem canonPred (const Theorem &thm)
 Canonize predicate (x = y, x < y, etc.)
Theorem canonPredEquiv (const Theorem &thm)
Theorem doSolve (const Theorem &e)
 Solve an equation and return an equivalent Theorem in the solved form.
Theorem canonConjunctionEquiv (const Theorem &thm)
 takes in a conjunction equivalence Thm and canonizes it.
bool pickIntEqMonomial (const Expr &right, Expr &isolated, bool &nonlin)
 picks the monomial with the smallest abs(coeff) from the input
Theorem processRealEq (const Theorem &eqn)
 processes equalities with 1 or more vars of type REAL
Theorem processIntEq (const Theorem &eqn)
 processes equalities whose vars are all of type INT
Theorem processSimpleIntEq (const Theorem &eqn)
 One step of INT equality processing (aux. method for processIntEq())
void processBuffer ()
 Process inequalities in the buffer.
Theorem isolateVariable (const Theorem &inputThm, bool &e1)
 Take an inequality and isolate a variable.
void updateStats (const Rational &c, const Expr &var)
 Update the statistics counters for the variable with a coeff. c.
void updateStats (const Expr &monomial)
 Update the statistics counters for the monomial.
bool addToBuffer (const Theorem &thm, bool priority=false)
 Add an inequality to the input buffer. See also d_buffer.
Expr computeNormalFactor (const Expr &rhs, bool normalizeConstants)
 Given a canonized term, compute a factor to make all coefficients integer and relatively prime.
Theorem normalize (const Expr &e)
 Normalize an equation (make all coefficients rel. prime integers)
Theorem normalize (const Theorem &thm)
 Normalize an equation (make all coefficients rel. prime integers)
Expr pickMonomial (const Expr &right)
void getFactors (const Expr &e, std::set< Expr > &factors)
bool lessThanVar (const Expr &isolatedVar, const Expr &var2)
bool isStale (const Expr &e)
 Check if the term expression is "stale".
bool isStale (const Ineq &ineq)
 Check if the inequality is "stale" or subsumed.
void projectInequalities (const Theorem &theInequality, bool isolatedVarOnRHS)
void assignVariables (std::vector< Expr > &v)
void findRationalBound (const Expr &varSide, const Expr &ratSide, const Expr &var, Rational &r)
bool findBounds (const Expr &e, Rational &lub, Rational &glb)
Theorem normalizeProjectIneqs (const Theorem &ineqThm1, const Theorem &ineqThm2)
Theorem solvedForm (const std::vector< Theorem > &solvedEqs)
 Take a system of equations and turn it into a solved form.
Theorem substAndCanonize (const Expr &t, ExprMap< Theorem > &subst)
 Substitute all vars in term 't' according to the substitution 'subst' and canonize the result.
Theorem substAndCanonize (const Theorem &eq, ExprMap< Theorem > &subst)
 Substitute all vars in the RHS of the equation 'eq' of the form (x = t) according to the substitution 'subst', and canonize the result.
void collectVars (const Expr &e, std::vector< Expr > &vars, std::set< Expr > &cache)
 Traverse 'e' and push all the i-leaves into 'vars' vector.
void processFiniteInterval (const Theorem &alphaLEax, const Theorem &bxLEbeta)
 Check if alpha <= ax & bx <= beta is a finite interval for integer var 'x', and assert the corresponding constraint.
void processFiniteIntervals (const Expr &x)
 For an integer var 'x', find and process all constraints A <= ax <= A+c.
void setupRec (const Expr &e)
 Recursive setup for isolated inequalities (and other new expressions)
Rational currentMaxCoefficient (Expr var)
void fixCurrentMaxCoefficient (Expr variable, Rational max)
void selectSmallestByCoefficient (const std::vector< Expr > &input, std::vector< Expr > &output)
Theorem rafineInequalityToInteger (const Theorem &thm)
Theorem checkIntegerEquality (const Theorem &thm)
Theorem inequalityToFind (const Theorem &inequalityThm, bool normalizeRHS)
int extractTermsFromInequality (const Expr &inequality, Rational &c1, Expr &t1, Rational &c2, Expr &t2)
void registerAtom (const Expr &e)
int termDegree (const Expr &e)
bool canPickEqMonomial (const Expr &right)
bool isBounded (const Expr &t, BoundsQueryType queryType=QueryWithCacheLeaves)
bool hasLowerBound (const Expr &t, BoundsQueryType queryType=QueryWithCacheLeaves)
bool hasUpperBound (const Expr &t, BoundsQueryType queryType=QueryWithCacheLeaves)
bool isConstrained (const Expr &t, bool intOnly=true, BoundsQueryType queryType=QueryWithCacheLeaves)
bool isConstrainedAbove (const Expr &t, BoundsQueryType queryType=QueryWithCacheLeaves)
bool isConstrainedBelow (const Expr &t, BoundsQueryType queryType=QueryWithCacheLeaves)
DifferenceLogicGraph::EpsRational getUpperBound (const Expr &t, BoundsQueryType queryType=QueryWithCacheLeaves)
DifferenceLogicGraph::EpsRational getLowerBound (const Expr &t, BoundsQueryType queryType=QueryWithCacheLeaves)
int computeTermBounds ()

Private Attributes

CDList< Theoremd_diseq
CDO< size_t > d_diseqIdx
CDMap< Expr, bool > diseqSplitAlready
ArithProofRulesd_rules
CDO< bool > d_inModelCreation
ExprMap< CDList< Ineq > * > d_inequalitiesRightDB
 Database of inequalities with a variable isolated on the right.
ExprMap< CDList< Ineq > * > d_inequalitiesLeftDB
 Database of inequalities with a variable isolated on the left.
CDMap< Expr, FreeConstd_freeConstDB
 Mapping of inequalities to the largest/smallest free constant.
CDList< Theoremd_buffer_0
 Buffer of input inequalities (high priority)
CDList< Theoremd_buffer_1
 Buffer of input inequalities (one variable)
CDList< Theoremd_buffer_2
 Buffer of input inequalities (small constraints)
CDList< Theoremd_buffer_3
 Buffer of input inequalities (big constraint)
CDO< size_t > d_bufferIdx_0
 Buffer index of the next unprocessed inequality.
CDO< size_t > d_bufferIdx_1
 Buffer index of the next unprocessed inequality.
CDO< size_t > d_bufferIdx_2
 Buffer index of the next unprocessed inequality.
CDO< size_t > d_bufferIdx_3
 Buffer index of the next unprocessed inequality.
CDO< size_t > diff_logic_size
 Number of queries that are just difference logic.
const int * d_bufferThres
 Threshold when the buffer must be processed.
const bool * d_splitSign
const int * d_grayShadowThres
 Threshold on gray shadow size (ignore it and set incomplete)
CDMap< Expr, int > d_countRight
 Mapping of a variable to the number of inequalities where the variable would be isolated on the right.
CDMap< Expr, int > d_countLeft
 Mapping of a variable to the number of inequalities where the variable would be isolated on the left.
CDMap< Expr, bool > d_sharedTerms
 Set of shared terms (for counterexample generation)
CDList< Exprd_sharedTermsList
CDMap< Expr, bool > d_sharedVars
 Set of shared integer variables (i-leaves)
VarOrderGraph d_graph
ExprMap< RationalmaxCoefficientLeft
ExprMap< RationalmaxCoefficientRight
ExprMap< RationalfixedMaxCoefficient
CDMap< Expr, TheorembufferedInequalities
CDMap< Expr, RationaltermLowerBound
CDMap< Expr, TheoremtermLowerBoundThm
CDMap< Expr, RationaltermUpperBound
CDMap< Expr, TheoremtermUpperBoundThm
CDMap< Expr, ExpralreadyProjected
CDMap< Expr, bool > dontBuffer
CDO< bool > diffLogicOnly
AtomsMap formulaAtomLowerBound
AtomsMap formulaAtomUpperBound
ExprMap< bool > formulaAtoms
DifferenceLogicGraph diffLogicGraph
Expr zero
CDO< unsigned > shared_index_1
CDO< unsigned > shared_index_2
std::vector< TheoremmultiplicativeSignSplits
CDMap< Expr,
DifferenceLogicGraph::EpsRational
termUpperBounded
CDMap< Expr,
DifferenceLogicGraph::EpsRational
termLowerBounded
CDMap< Expr, bool > d_varConstrainedPlus
CDMap< Expr, bool > d_varConstrainedMinus
CDMap< Expr, bool > termConstrainedBelow
CDMap< Expr, bool > termConstrainedAbove

Friends

std::ostream & operator<< (std::ostream &os, const FreeConst &fc)
 Printing.
std::ostream & operator<< (std::ostream &os, const Ineq &ineq)
 Printing.

Additional Inherited Members

- Protected Member Functions inherited from CVC3::TheoryArith
virtual Theorem canon (const Expr &e)=0
 Canonize the expression e, assuming all children are canonical.
Theorem canonRec (const Expr &e)
 Canonize the expression e recursively.
void printRational (ExprStream &os, const Rational &r, bool printAsReal=false)
 Print a rational in SMT-LIB format.
bool isAtomicArithTerm (const Expr &e)
 Whether any ite's appear in the arithmetic part of the term e.
Theorem canonSimp (const Expr &e)
 simplify leaves and then canonize
bool recursiveCanonSimpCheck (const Expr &e)
 helper for checkAssertEqInvariant
- Protected Attributes inherited from CVC3::TheoryArith
Type d_realType
Type d_intType
std::vector< int > d_kinds

Detailed Description

Definition at line 30 of file theory_arith_old.h.

Member Typedef Documentation

typedef ExprMap< std::set< std::pair<Rational, Expr> > > CVC3::TheoryArithOld::AtomsMap
private

Definition at line 445 of file theory_arith_old.h.

Member Enumeration Documentation

Enumerator:
QueryWithCacheLeaves 

Query the bounds/constrained using cache for leaves

QueryWithCacheLeavesAndConstrainedComputation 

Query the bounds/constrained using cashe for leaves, but also see if the value is constrained

QueryWithCacheAll 

Query the bounds/constrained by only querying the cache, don't try to figure it out

Definition at line 913 of file theory_arith_old.h.

Constructor & Destructor Documentation

TheoryArithOld::TheoryArithOld ( TheoryCore core)
TheoryArithOld::~TheoryArithOld ( )

Member Function Documentation

Theorem TheoryArithOld::isIntegerThm ( const Expr e)
private

Check the term t for integrality.

Returns
a theorem of IS_INTEGER(t) or Null.

Definition at line 70 of file theory_arith_old.cpp.

References CVC3::Expr::getType(), CVC3::IS_INTEGER, CVC3::isInt(), and CVC3::isReal().

Referenced by canPickEqMonomial(), checkIntegerEquality(), checkSat(), computeTermBounds(), isConstrained(), isInteger(), rafineInequalityToInteger(), and rewrite().

Theorem TheoryArithOld::isIntegerDerive ( const Expr isIntE,
const Theorem thm 
)
private

A helper method for isIntegerThm()

Check if IS_INTEGER(e) is easily derivable from the given 'thm'

Definition at line 81 of file theory_arith_old.cpp.

References CVC3::Expr::arity(), CVC3::Theorem::getExpr(), CVC3::Expr::isAnd(), and CVC3::Theorem::isNull().

Referenced by rewrite().

const Rational & TheoryArithOld::freeConstIneq ( const Expr ineq,
bool  varOnRHS 
)
private

Extract the free constant from an inequality.

Definition at line 98 of file theory_arith_old.cpp.

References DebugAssert, CVC3::isIneq(), CVC3::PLUS, RATIONAL_EXPR, and CVC3::Expr::toString().

const TheoryArithOld::FreeConst & TheoryArithOld::updateSubsumptionDB ( const Expr ineq,
bool  varOnRHS,
bool &  subsumed 
)
private

Update the free constant subsumption database with new inequality.

Returns
a reference to the max/min constant.
Also, sets 'subsumed' argument to true if the inequality is
subsumed by an existing inequality.

Definition at line 116 of file theory_arith_old.cpp.

References CVC3::Expr::arity(), CVC3::Expr::begin(), DebugAssert, CVC3::Expr::end(), CVC3::CDMap< Key, Data, HashFcn >::find(), CVC3::CDOmap< Key, Data, HashFcn >::get(), CVC3::TheoryArithOld::FreeConst::getConst(), CVC3::Expr::getRational(), CVC3::int2string(), CVC3::isLE(), CVC3::isLT(), CVC3::isPlus(), CVC3::isRational(), CVC3::leExpr(), CVC3::plusExpr(), CVC3::TheoryArithOld::FreeConst::strict(), CVC3::Expr::toString(), and TRACE.

bool TheoryArithOld::kidsCanonical ( const Expr e)
private

Check if the kids of e are fully simplified and canonized (for debugging)

Definition at line 186 of file theory_arith_old.cpp.

References CVC3::Expr::arity(), std::endl(), and IF_DEBUG.

Theorem TheoryArithOld::canon ( const Expr e)
private

Canonize the expression e, assuming, all children are canonical.

Definition at line 218 of file theory_arith_old.cpp.

References CVC3::Expr::arity(), DebugAssert, CVC3::DIVIDE, CVC3::Expr::getKind(), CVC3::Theorem::getRHS(), CVC3::isRational(), CVC3::MINUS, CVC3::MULT, CVC3::PLUS, CVC3::POW, CVC3::Expr::toString(), TRACE, and CVC3::UMINUS.

Referenced by rewrite(), and tryPropagate().

Theorem TheoryArithOld::canonSimplify ( const Expr e)
private

Canonize and reduce e w.r.t. union-find database; assume all children are canonical.

Definition at line 371 of file theory_arith_old.cpp.

References DebugAssert, CVC3::Theorem::getRHS(), CVC3::Expr::hasFind(), CVC3::Expr::toString(), and TRACE.

Referenced by canonSimplify().

Theorem CVC3::TheoryArithOld::canonSimplify ( const Theorem thm)
inlineprivate

Composition of canonSimplify(const Expr&) by transitivity: take e0 = e1, canonize and simplify e1 to e2, return e0 = e2.

Definition at line 191 of file theory_arith_old.h.

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

Theorem TheoryArithOld::canonPred ( const Theorem thm)
private

Canonize predicate (x = y, x < y, etc.)

accepts a theorem, canonizes it, applies iffMP and substituvity to derive the canonized thm

Definition at line 401 of file theory_arith_old.cpp.

References CVC3::Expr::arity(), DebugAssert, CVC3::Theorem::getExpr(), CVC3::Expr::getOp(), and CVC3::Theorem::toString().

Referenced by rafineInequalityToInteger().

Theorem TheoryArithOld::canonPredEquiv ( const Theorem thm)
private

Canonize predicate like canonPred except that the input theorem is an equivalent transformation.

accepts an equivalence theorem, canonizes it, applies iffMP and substituvity to derive the canonized thm

Definition at line 417 of file theory_arith_old.cpp.

References CVC3::Expr::arity(), DebugAssert, CVC3::Expr::getOp(), CVC3::Theorem::getRHS(), and CVC3::Theorem::toString().

Referenced by normalize(), rafineInequalityToInteger(), and rewrite().

Theorem TheoryArithOld::doSolve ( const Theorem thm)
private

Solve an equation and return an equivalent Theorem in the solved form.

Pseudo-code for doSolve. (Input is an equation) (output is a Theorem)

  1. translate e to the form e' = 0
  2. if (e'.isRational()) then {if e' != 0 return false else true}
  3. a for loop checks if all the variables are integers.
    • if not isolate a suitable real variable and call processRealEq().
    • if all variables are integers then isolate suitable variable and call processIntEq().

Definition at line 447 of file theory_arith_old.cpp.

References DebugAssert, FatalAssert, CVC3::Theorem::getExpr(), CVC3::Expr::getRational(), CVC3::Expr::isFalse(), CVC3::isMult(), CVC3::isPow(), CVC3::isRational(), CVC3::Expr::isRational(), CVC3::Theorem::isRewrite(), CVC3::Expr::isTrue(), MiniSat::right(), CVC3::ArithException::toString(), CVC3::Theorem::toString(), and TRACE.

Referenced by solve().

Theorem TheoryArithOld::canonConjunctionEquiv ( const Theorem thm)
private

takes in a conjunction equivalence Thm and canonizes it.

accepts an equivalence theorem whose RHS is a conjunction, canonizes it, applies iffMP and substituvity to derive the canonized thm

Definition at line 434 of file theory_arith_old.cpp.

bool TheoryArithOld::pickIntEqMonomial ( const Expr right,
Expr isolated,
bool &  nonlin 
)
private

picks the monomial with the smallest abs(coeff) from the input

pick a monomial for the input equation. This function is used only if the equation is an integer equation. Choose the monomial with the smallest absolute value of coefficient.

Definition at line 563 of file theory_arith_old.cpp.

References CVC3::abs(), CVC3::Expr::arity(), CVC3::Expr::begin(), DebugAssert, CVC3::Expr::end(), CVC3::isMult(), CVC3::isPlus(), CVC3::isRational(), MiniSat::min(), and CVC3::Expr::toString().

Theorem TheoryArithOld::processRealEq ( const Theorem eqn)
private

processes equalities with 1 or more vars of type REAL

input is 0=e' Theorem and some of the vars in e' are of type REAL. isolate one of them and send back to framework. output is "var = e''" Theorem.

Definition at line 615 of file theory_arith_old.cpp.

References CVC3::Expr::arity(), DebugAssert, EQ, CVC3::Theorem::getExpr(), CVC3::Theorem::getLHS(), CVC3::Expr::getRational(), CVC3::Theorem::getRHS(), CVC3::isMult(), CVC3::isPlus(), CVC3::isRational(), CVC3::Expr::isRational(), CVC3::isReal(), MiniSat::left(), MiniSat::right(), CVC3::Theorem::toString(), CVC3::Expr::toString(), and TRACE.

Theorem TheoryArithOld::processIntEq ( const Theorem eqn)
private

processes equalities whose vars are all of type INT

input is 0=e' Theorem and all of the vars in e' are of type INT. isolate one of them and send back to framework. output is "var = e''" Theorem and some associated equations in solved form.

Definition at line 869 of file theory_arith_old.cpp.

References CVC3::Expr::arity(), DebugAssert, CVC3::Theorem::getExpr(), CVC3::Expr::isAnd(), CVC3::Expr::isBoolConst(), CVC3::Expr::isFalse(), CVC3::Theorem::isRewrite(), CVC3::Expr::toString(), and TRACE.

Theorem TheoryArithOld::processSimpleIntEq ( const Theorem eqn)
private
void TheoryArithOld::processBuffer ( )
private
Theorem TheoryArithOld::isolateVariable ( const Theorem inputThm,
bool &  e1 
)
private
void TheoryArithOld::updateStats ( const Rational c,
const Expr var 
)
private

Update the statistics counters for the variable with a coeff. c.

Definition at line 1143 of file theory_arith_old.cpp.

References CVC3::ExprMap< Data >::end(), CVC3::ExprMap< Data >::find(), CVC3::Expr::getType(), CVC3::Expr::isRational(), CVC3::Rational::toString(), and TRACE.

void TheoryArithOld::updateStats ( const Expr monomial)
private

Update the statistics counters for the monomial.

Definition at line 1189 of file theory_arith_old.cpp.

References CVC3::Expr::getRational().

bool TheoryArithOld::addToBuffer ( const Theorem thm,
bool  priority = false 
)
private
Expr TheoryArithOld::computeNormalFactor ( const Expr rhs,
bool  normalizeConstants 
)
private

Given a canonized term, compute a factor to make all coefficients integer and relatively prime.

Definition at line 1579 of file theory_arith_old.cpp.

References CVC3::abs(), CVC3::Expr::arity(), CVC3::Rational::getDenominator(), CVC3::Rational::getNumerator(), CVC3::Expr::getRational(), CVC3::isMult(), CVC3::isPlus(), CVC3::MULT, and RATIONAL_EXPR.

Referenced by normalize().

Theorem TheoryArithOld::normalize ( const Expr e)
private

Normalize an equation (make all coefficients rel. prime integers)

accepts a rewrite theorem over eqn|ineqn and normalizes it and returns a theorem to that effect. assumes e is non-trivial i.e. e is not '0=const' or 'const=0' or '0 <= const' etc.

Definition at line 2994 of file theory_arith_old.cpp.

References canonPredEquiv(), checkIntegerEquality(), computeNormalFactor(), d_rules, DebugAssert, EQ, CVC3::GE, CVC3::Expr::getKind(), CVC3::Expr::getRational(), CVC3::GT, CVC3::Expr::isEq(), CVC3::isIneq(), CVC3::isRational(), CVC3::LE, CVC3::LT, CVC3::ArithProofRules::multEqn(), CVC3::ArithProofRules::multIneqn(), rafineInequalityToInteger(), CVC3::Theory::reflexivityRule(), CVC3::Expr::toString(), and TRACE.

Referenced by inequalityToFind(), normalize(), and rewrite().

Theorem TheoryArithOld::normalize ( const Theorem thm)
private

Normalize an equation (make all coefficients rel. prime integers)

accepts a rewrite theorem over eqn|ineqn and normalizes it and returns a theorem to that effect.

Definition at line 3070 of file theory_arith_old.cpp.

References CVC3::Theorem::getExpr(), CVC3::Theorem::getRHS(), CVC3::Theory::iffMP(), CVC3::Theorem::isRewrite(), normalize(), and CVC3::Theory::transitivityRule().

Expr TheoryArithOld::pickMonomial ( const Expr right)
private
void TheoryArithOld::getFactors ( const Expr e,
std::set< Expr > &  factors 
)
private
void TheoryArithOld::separateMonomial ( const Expr e,
Expr c,
Expr var 
)
virtual
bool CVC3::TheoryArithOld::isInteger ( const Expr e)
inline
bool TheoryArithOld::lessThanVar ( const Expr isolatedVar,
const Expr var2 
)
private

Definition at line 1623 of file theory_arith_old.cpp.

References DebugAssert, CVC3::isRational(), and CVC3::Expr::toString().

bool TheoryArithOld::isStale ( const Expr e)
private

Check if the term expression is "stale".

"Stale" means it contains non-simplified subexpressions. For terms, it checks the expression's find pointer; for formulas it checks the children recursively (no caching!). So, apply it with caution, and only to simple atomic formulas (like inequality).

Definition at line 1639 of file theory_arith_old.cpp.

References CVC3::Expr::begin(), CVC3::Expr::end(), and CVC3::Expr::isTerm().

bool TheoryArithOld::isStale ( const Ineq ineq)
private
void TheoryArithOld::projectInequalities ( const Theorem theInequality,
bool  isolatedVarOnRHS 
)
private
void TheoryArithOld::assignVariables ( std::vector< Expr > &  v)
private
void TheoryArithOld::findRationalBound ( const Expr varSide,
const Expr ratSide,
const Expr var,
Rational r 
)
private
bool TheoryArithOld::findBounds ( const Expr e,
Rational lub,
Rational glb 
)
private
Theorem TheoryArithOld::normalizeProjectIneqs ( const Theorem ineqThm1,
const Theorem ineqThm2 
)
private
Theorem TheoryArithOld::solvedForm ( const std::vector< Theorem > &  solvedEqs)
private

Take a system of equations and turn it into a solved form.

Takes a vector of equations and for every equation x_i=t_i substitutes t_j for x_j in t_i for all j>i. This turns the system of equations into a solved form.

Assumption: variables x_j may appear in the RHS terms t_i ONLY for i<j, but not for i>=j.

Definition at line 912 of file theory_arith_old.cpp.

References CVC3::ExprMap< Data >::begin(), DebugAssert, CVC3::ExprMap< Data >::end(), CVC3::Theorem::getExpr(), IF_DEBUG, TRACE, and TRACE_MSG.

Theorem TheoryArithOld::substAndCanonize ( const Expr t,
ExprMap< Theorem > &  subst 
)
private

Substitute all vars in term 't' according to the substitution 'subst' and canonize the result.

ASSUMPTION: 't' is a fully canonized arithmetic term, and every element of subst is a fully canonized equation of the form x=e, indexed by the LHS variable.

Definition at line 966 of file theory_arith_old.cpp.

References CVC3::Expr::arity(), CVC3::ExprMap< Data >::empty(), CVC3::ExprMap< Data >::end(), CVC3::ExprMap< Data >::find(), CVC3::Theorem::getRHS(), and TRACE.

Theorem TheoryArithOld::substAndCanonize ( const Theorem eq,
ExprMap< Theorem > &  subst 
)
private

Substitute all vars in the RHS of the equation 'eq' of the form (x = t) according to the substitution 'subst', and canonize the result.

ASSUMPTION: 't' is a fully canonized equation of the form x = t, and so is every element of subst, indexed by the LHS variable.

Definition at line 1017 of file theory_arith_old.cpp.

References DebugAssert, CVC3::ExprMap< Data >::empty(), CVC3::Theorem::getExpr(), CVC3::Theorem::getRHS(), CVC3::Theorem::isRewrite(), and CVC3::Expr::toString().

void TheoryArithOld::collectVars ( const Expr e,
std::vector< Expr > &  vars,
std::set< Expr > &  cache 
)
private

Traverse 'e' and push all the i-leaves into 'vars' vector.

Definition at line 2359 of file theory_arith_old.cpp.

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

void TheoryArithOld::processFiniteInterval ( const Theorem alphaLEax,
const Theorem bxLEbeta 
)
private

Check if alpha <= ax & bx <= beta is a finite interval for integer var 'x', and assert the corresponding constraint.

Definition at line 2373 of file theory_arith_old.cpp.

References DebugAssert, CVC3::Theorem::getExpr(), CVC3::Expr::getRational(), CVC3::isLE(), CVC3::isMult(), CVC3::isPlus(), CVC3::isRational(), CVC3::Expr::isRational(), and CVC3::Expr::toString().

Referenced by processFiniteIntervals().

void TheoryArithOld::processFiniteIntervals ( const Expr x)
private

For an integer var 'x', find and process all constraints A <= ax <= A+c.

Definition at line 2432 of file theory_arith_old.cpp.

References d_inequalitiesLeftDB, d_inequalitiesRightDB, CVC3::ExprMap< Data >::end(), CVC3::ExprMap< Data >::find(), isInteger(), processFiniteInterval(), and CVC3::CDList< T >::size().

void TheoryArithOld::setupRec ( const Expr e)
private

Recursive setup for isolated inequalities (and other new expressions)

This function recursively decends expression tree without caching until it hits a node that is already setup. Be careful on what expressions you are calling it.

Definition at line 2458 of file theory_arith_old.cpp.

References CVC3::Expr::arity(), CVC3::Expr::hasFind(), CVC3::Theory::reflexivityRule(), CVC3::Expr::setEqNext(), CVC3::Expr::setFind(), and setup().

ArithProofRules * TheoryArithOld::createProofRulesOld ( )

Definition at line 44 of file arith_theorem_producer_old.cpp.

Referenced by TheoryArithOld().

void TheoryArithOld::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)

Implements CVC3::TheoryArith.

Definition at line 2472 of file theory_arith_old.cpp.

References d_sharedTerms, d_sharedTermsList, CVC3::CDMap< Key, Data, HashFcn >::end(), CVC3::CDMap< Key, Data, HashFcn >::find(), and CVC3::CDList< T >::push_back().

Referenced by update().

void TheoryArithOld::assertFact ( const Theorem e)
virtual
void TheoryArithOld::refineCounterExample ( )
virtual
void TheoryArithOld::computeModelBasic ( const std::vector< Expr > &  v)
virtual

Assign concrete values to basic-type variables in v.

Implements CVC3::TheoryArith.

Definition at line 2882 of file theory_arith_old.cpp.

References assignVariables(), d_inModelCreation, CVC3::Theory::findExpr(), and TRACE.

void TheoryArithOld::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.

Implements CVC3::TheoryArith.

Definition at line 2905 of file theory_arith_old.cpp.

References CVC3::Theory::assignValue(), DebugAssert, CVC3::Theory::findExpr(), CVC3::isRational(), CVC3::Theory::simplify(), and CVC3::Expr::toString().

void TheoryArithOld::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::TheoryArith.

Definition at line 2606 of file theory_arith_old.cpp.

References d_buffer_0, d_buffer_1, d_buffer_2, d_buffer_3, d_diseq, d_diseqIdx, d_inModelCreation, d_rules, DebugAssert, diseqSplitAlready, CVC3::ArithProofRules::diseqToIneq(), CVC3::CDMap< Key, Data, HashFcn >::end(), std::endl(), CVC3::Theory::enqueueFact(), CVC3::Expr::eqExpr(), CVC3::CDMap< Key, Data, HashFcn >::find(), CVC3::Theory::find(), CVC3::Theorem::getExpr(), CVC3::Theorem::getRHS(), CVC3::Expr::hasFind(), IF_DEBUG, CVC3::Theory::inconsistent(), isIntegerThm(), CVC3::Theorem::isNull(), CVC3::Expr::isRational(), isUnconstrained(), processBuffer(), CVC3::CDList< T >::size(), CVC3::Expr::toString(), and TRACE.

Theorem TheoryArithOld::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.

Implements CVC3::TheoryArith.

Definition at line 3076 of file theory_arith_old.cpp.

References CVC3::Expr::arity(), CVC3::Expr::begin(), canon(), canonPredEquiv(), canPickEqMonomial(), CVC3::ArithProofRules::constPredicate(), CVC3::Expr::containsTermITE(), d_rules, CVC3::DARK_SHADOW, DebugAssert, CVC3::ArithProofRules::divideEqnNonConst(), CVC3::ArithProofRules::elimPower(), CVC3::ArithProofRules::elimPowerConst(), CVC3::Expr::end(), EQ, CVC3::ArithProofRules::eqToIneq(), CVC3::ArithProofRules::evenPowerEqNegConst(), CVC3::ArithProofRules::flipInequality(), CVC3::GE, CVC3::Theory::getCommonRules(), getFactors(), CVC3::Expr::getKind(), CVC3::Expr::getRational(), CVC3::Theorem::getRHS(), CVC3::Expr::getSize(), CVC3::Rational::getUnsigned(), CVC3::GRAY_SHADOW, CVC3::GT, CVC3::CommonProofRules::iffTrue(), CVC3::ArithProofRules::intEqIrrational(), CVC3::IS_INTEGER, CVC3::Expr::isAbsLiteral(), CVC3::Expr::isAtomic(), CVC3::Expr::isBoolConst(), CVC3::Expr::isEq(), CVC3::isGE(), CVC3::isGT(), CVC3::isIneq(), isIntegerDerive(), isIntegerThm(), CVC3::Theory::isLeaf(), CVC3::isLT(), isNonlinearEq(), isNonlinearSumTerm(), CVC3::Theorem::isNull(), CVC3::isPlus(), isPowerEquality(), isPowersEquality(), CVC3::Expr::isPropAtom(), CVC3::isRational(), CVC3::Expr::isRational(), CVC3::Theorem::isRefl(), CVC3::Expr::isTerm(), CVC3::LE, CVC3::TheoryArith::leavesAreNumConst(), CVC3::Theory::leavesAreSimp(), MiniSat::left(), CVC3::ArithProofRules::lessThanToLERewrite(), CVC3::LT, CVC3::ArithProofRules::multEqZero(), CVC3::ArithProofRules::negatedInequality(), normalize(), NOT, CVC3::TheoryArith::rat(), CVC3::ratRoot(), CVC3::Theory::reflexivityRule(), CVC3::ArithProofRules::rewriteLeavesConst(), CVC3::CommonProofRules::rewriteUsingSymmetry(), MiniSat::right(), CVC3::ArithProofRules::rightMinusLeft(), CVC3::Expr::setRewriteNormal(), CVC3::Theory::simplify(), CVC3::Theory::theoryCore(), CVC3::Theory::theoryOf(), TRACE, CVC3::Theory::transitivityRule(), and CVC3::Theory::typePred().

Referenced by checkIntegerEquality(), and rafineInequalityToInteger().

void TheoryArithOld::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

Implements CVC3::TheoryArith.

Definition at line 3355 of file theory_arith_old.cpp.

References CVC3::Expr::addToNotify(), CVC3::Expr::arity(), DebugAssert, CVC3::int2string(), CVC3::isIneq(), CVC3::isLE(), CVC3::isLT(), CVC3::Expr::isNot(), CVC3::isRational(), CVC3::Expr::isTerm(), CVC3::Expr::toString(), and TRACE.

Referenced by setupRec().

void TheoryArithOld::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

Implements CVC3::TheoryArith.

Definition at line 3390 of file theory_arith_old.cpp.

References addSharedTerm(), CVC3::Expr::addToNotify(), alreadyProjected, CVC3::Theory::assertEqualities(), bufferedInequalities, d_sharedTerms, DebugAssert, dontBuffer, CVC3::CDMap< Key, Data, HashFcn >::end(), CVC3::Theory::enqueueFact(), CVC3::Theory::falseExpr(), CVC3::CDMap< Key, Data, HashFcn >::find(), CVC3::Theory::find(), CVC3::Theory::findExpr(), CVC3::Theory::getCommonRules(), CVC3::Theorem::getExpr(), CVC3::Expr::getKind(), CVC3::Theorem::getLHS(), CVC3::Expr::getRational(), CVC3::Theorem::getRHS(), CVC3::Expr::hasFind(), IF_DEBUG, CVC3::Theory::iffMP(), CVC3::Theory::inconsistent(), CVC3::IS_INTEGER, CVC3::Expr::isAtomic(), CVC3::Expr::isEq(), CVC3::isIneq(), isInteger(), CVC3::isRational(), CVC3::Expr::isRational(), CVC3::Theory::setInconsistent(), CVC3::Theory::simplify(), CVC3::Theory::substitutivityRule(), CVC3::Theory::symmetryRule(), CVC3::Expr::toString(), TRACE, CVC3::Theory::transitivityRule(), and CVC3::Theory::trueExpr().

Theorem TheoryArithOld::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.

Implements CVC3::TheoryArith.

Definition at line 3547 of file theory_arith_old.cpp.

References DebugAssert, doSolve(), CVC3::Theorem::getLHS(), CVC3::Theorem::getRHS(), isInteger(), CVC3::Theory::isLeaf(), CVC3::Theory::isLeafIn(), CVC3::Theorem::isRewrite(), CVC3::Expr::isTerm(), and CVC3::Theory::symmetryRule().

void TheoryArithOld::checkAssertEqInvariant ( const Theorem e)
virtual
void TheoryArithOld::checkType ( const Expr e)
virtual
Cardinality TheoryArithOld::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

Implements CVC3::TheoryArith.

Definition at line 3697 of file theory_arith_old.cpp.

References CVC3::CARD_FINITE, CVC3::CARD_INFINITE, CVC3::Expr::getKind(), CVC3::Expr::getRational(), CVC3::Rational::getUnsigned(), CVC3::TheoryArith::rat(), and CVC3::SUBRANGE.

void TheoryArithOld::computeType ( const Expr e)
virtual
Type TheoryArithOld::computeBaseType ( const Type tp)
virtual

Compute the base type of the top-level operator of an arbitrary type.

Implements CVC3::TheoryArith.

Definition at line 3808 of file theory_arith_old.cpp.

References DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getKind(), IF_DEBUG, CVC3::INT, CVC3::REAL, CVC3::TheoryArith::realType(), CVC3::SUBRANGE, and CVC3::Type::toString().

void TheoryArithOld::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.

Implements CVC3::TheoryArith.

Definition at line 3575 of file theory_arith_old.cpp.

References CVC3::Expr::begin(), CVC3::DIVIDE, CVC3::Expr::end(), CVC3::Theory::findExpr(), CVC3::Expr::getKind(), CVC3::MULT, CVC3::PLUS, CVC3::POW, RATIONAL_EXPR, CVC3::Expr::toString(), and TRACE.

Expr TheoryArithOld::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)

Implements CVC3::TheoryArith.

Definition at line 3603 of file theory_arith_old.cpp.

References CVC3::andExpr(), CVC3::Expr::getEM(), CVC3::Type::getExpr(), CVC3::Expr::getKind(), CVC3::INT, CVC3::IS_INTEGER, CVC3::leExpr(), CVC3::SUBRANGE, and CVC3::ExprManager::trueExpr().

Expr TheoryArithOld::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.

Implements CVC3::TheoryArith.

Definition at line 3817 of file theory_arith_old.cpp.

References CVC3::Expr::andExpr(), CVC3::Expr::arity(), CVC3::Theory::computeTCC(), DebugAssert, CVC3::DIVIDE, CVC3::Expr::getKind(), and CVC3::TheoryArith::rat().

ExprStream & TheoryArithOld::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.

Implements CVC3::TheoryArith.

Definition at line 3952 of file theory_arith_old.cpp.

References CVC3::Expr::arity(), CVC3::Expr::begin(), CVC3::DARK_SHADOW, CVC3::DIVIDE, CVC3::Expr::end(), std::endl(), CVC3::GE, CVC3::Rational::getInt(), CVC3::Expr::getKind(), CVC3::Expr::getRational(), CVC3::GRAY_SHADOW, CVC3::GT, CVC3::INT, CVC3::IS_INTEGER, CVC3::isInt(), CVC3::Rational::isInteger(), isInteger(), CVC3::isRational(), CVC3::ExprStream::lang(), CVC3::LE, CVC3::LISP_LANG, CVC3::LT, CVC3::MINUS, CVC3::MULT, CVC3::NEGINF, CVC3::PLUS, CVC3::POSINF, CVC3::POW, CVC3::PRESENTATION_LANG, CVC3::Expr::print(), CVC3::Expr::printAST(), CVC3::TheoryArith::printRational(), CVC3::push(), RATIONAL_EXPR, CVC3::REAL, CVC3::REAL_CONST, CVC3::SIMPLIFY_LANG, CVC3::SMTLIB_LANG, CVC3::SMTLIB_V2_LANG, CVC3::space(), CVC3::SPASS_LANG, CVC3::SUBRANGE, CVC3::Expr::toString(), CVC3::TPTP_LANG, and CVC3::UMINUS.

Expr TheoryArithOld::parseExprOp ( const Expr e)
virtual
Rational TheoryArithOld::currentMaxCoefficient ( Expr  var)
private

Returns the current maximal coefficient of the variable.

Parameters
varthe variable.

Definition at line 1948 of file theory_arith_old.cpp.

References CVC3::ExprMap< Data >::end(), CVC3::ExprMap< Data >::find(), CVC3::Expr::getType(), CVC3::Rational::toString(), CVC3::Expr::toString(), and TRACE.

void TheoryArithOld::fixCurrentMaxCoefficient ( Expr  variable,
Rational  max 
)
private

Fixes the current max coefficient to be used in the ordering. If the maximal coefficient changes in the future, it will not be used in the ordering.

Parameters
variablethe variable
maxthe value to set it to

Definition at line 1980 of file theory_arith_old.cpp.

References CVC3::max().

void TheoryArithOld::selectSmallestByCoefficient ( const std::vector< Expr > &  input,
std::vector< Expr > &  output 
)
private

Among given input variables, select the smallest ones with respect to the coefficients.

Definition at line 1984 of file theory_arith_old.cpp.

Theorem TheoryArithOld::rafineInequalityToInteger ( const Theorem thm)
private
Theorem TheoryArithOld::checkIntegerEquality ( const Theorem thm)
private
Theorem TheoryArithOld::inequalityToFind ( const Theorem inequalityThm,
bool  normalizeRHS 
)
private
int TheoryArithOld::extractTermsFromInequality ( const Expr inequality,
Rational c1,
Expr t1,
Rational c2,
Expr t2 
)
private

Take inequality of the form 0 op t and extract the c1, t1, c2 and t2, such that c1 <= t1 and t2 <= c2, where c1 and c2 are constants, and t1 and t2 are either sums of monomials or a monomial.

Returns
the number of variables in terms t1 and t2

Definition at line 1196 of file theory_arith_old.cpp.

References DebugAssert, CVC3::Expr::getString(), CVC3::isIneq(), CVC3::isPlus(), CVC3::isRational(), CVC3::multExpr(), CVC3::plusExpr(), CVC3::Rational::toString(), CVC3::Expr::toString(), and TRACE.

Referenced by registerAtom().

void TheoryArithOld::registerAtom ( const Expr e)
private
int TheoryArithOld::termDegree ( const Expr e)
private
bool TheoryArithOld::canPickEqMonomial ( const Expr right)
private
bool TheoryArithOld::isBounded ( const Expr t,
BoundsQueryType  queryType = QueryWithCacheLeaves 
)
private

Check if the term is bounded. If the term is non-linear, just returns false.

Definition at line 5386 of file theory_arith_old.cpp.

References hasLowerBound(), hasUpperBound(), CVC3::Expr::toString(), and TRACE.

bool CVC3::TheoryArithOld::hasLowerBound ( const Expr t,
BoundsQueryType  queryType = QueryWithCacheLeaves 
)
inlineprivate
bool CVC3::TheoryArithOld::hasUpperBound ( const Expr t,
BoundsQueryType  queryType = QueryWithCacheLeaves 
)
inlineprivate
bool TheoryArithOld::isConstrained ( const Expr t,
bool  intOnly = true,
BoundsQueryType  queryType = QueryWithCacheLeaves 
)
private
bool TheoryArithOld::isConstrainedAbove ( const Expr t,
BoundsQueryType  queryType = QueryWithCacheLeaves 
)
private
bool TheoryArithOld::isConstrainedBelow ( const Expr t,
BoundsQueryType  queryType = QueryWithCacheLeaves 
)
private
TheoryArithOld::DifferenceLogicGraph::EpsRational TheoryArithOld::getUpperBound ( const Expr t,
BoundsQueryType  queryType = QueryWithCacheLeaves 
)
private
TheoryArithOld::DifferenceLogicGraph::EpsRational TheoryArithOld::getLowerBound ( const Expr t,
BoundsQueryType  queryType = QueryWithCacheLeaves 
)
private
int TheoryArithOld::computeTermBounds ( )
private
void TheoryArithOld::updateConstrained ( const Expr t)
bool TheoryArithOld::isUnconstrained ( const Expr t)
void TheoryArithOld::tryPropagate ( const Expr x,
const Expr y,
const DifferenceLogicGraph::EdgeInfo x_y_edge,
int  kind 
)
void TheoryArithOld::addMultiplicativeSignSplit ( const Theorem case_split_thm)
virtual

Reimplemented from CVC3::TheoryArith.

Definition at line 5194 of file theory_arith_old.cpp.

References multiplicativeSignSplits.

bool TheoryArithOld::addPairToArithOrder ( const Expr smaller,
const Expr bigger 
)
virtual

Record that smaller should be smaller than bigger in the variable order. Should be implemented in decision procedures that support it.

Reimplemented from CVC3::TheoryArith.

Definition at line 5198 of file theory_arith_old.cpp.

References CVC3::TheoryArithOld::VarOrderGraph::addEdge(), d_graph, FatalAssert, CVC3::Expr::getType(), CVC3::isInt(), CVC3::isReal(), CVC3::TheoryArithOld::VarOrderGraph::lessThan(), CVC3::Expr::toString(), and TRACE.

bool CVC3::TheoryArithOld::nonlinearSignSplit ( ) const
inline

Definition at line 959 of file theory_arith_old.h.

References d_splitSign.

bool TheoryArithOld::isNonlinearEq ( const Expr e)

Check if equation is nonlinear. An equation is nonlinear if there is at least one nonlinear term in the sum on either side of the equation.

Definition at line 5223 of file theory_arith_old.cpp.

References CVC3::Expr::arity(), DebugAssert, CVC3::Expr::isEq(), isNonlinearSumTerm(), and CVC3::Expr::toString().

Referenced by findRationalBound(), and rewrite().

bool TheoryArithOld::isNonlinearSumTerm ( const Expr term)
bool TheoryArithOld::isPowersEquality ( const Expr nonlinearEq,
Expr power1,
Expr power2 
)

Check if the equality is of the form c + power1^n - power2^n = 0;

Definition at line 5244 of file theory_arith_old.cpp.

References CVC3::Expr::arity(), DebugAssert, CVC3::Expr::getRational(), CVC3::Expr::isEq(), CVC3::isMult(), CVC3::isPlus(), CVC3::isPow(), CVC3::isRational(), and CVC3::Expr::toString().

Referenced by rewrite().

bool TheoryArithOld::isPowerEquality ( const Expr nonlinearEq,
Rational constant,
Expr power1 
)

Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  os,
const FreeConst fc 
)
friend

Printing.

Definition at line 46 of file theory_arith_old.cpp.

std::ostream& operator<< ( std::ostream &  os,
const Ineq ineq 
)
friend

Printing.

Definition at line 56 of file theory_arith_old.cpp.

Member Data Documentation

CDList<Theorem> CVC3::TheoryArithOld::d_diseq
private

Definition at line 31 of file theory_arith_old.h.

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

CDO<size_t> CVC3::TheoryArithOld::d_diseqIdx
private

Definition at line 32 of file theory_arith_old.h.

Referenced by checkSat().

CDMap<Expr, bool> CVC3::TheoryArithOld::diseqSplitAlready
private

Definition at line 33 of file theory_arith_old.h.

Referenced by checkSat().

ArithProofRules* CVC3::TheoryArithOld::d_rules
private
CDO<bool> CVC3::TheoryArithOld::d_inModelCreation
private
ExprMap<CDList<Ineq> *> CVC3::TheoryArithOld::d_inequalitiesRightDB
private

Database of inequalities with a variable isolated on the right.

Definition at line 78 of file theory_arith_old.h.

Referenced by computeTermBounds(), findBounds(), processFiniteIntervals(), and ~TheoryArithOld().

ExprMap<CDList<Ineq> *> CVC3::TheoryArithOld::d_inequalitiesLeftDB
private

Database of inequalities with a variable isolated on the left.

Definition at line 81 of file theory_arith_old.h.

Referenced by computeTermBounds(), findBounds(), processFiniteIntervals(), and ~TheoryArithOld().

CDMap<Expr, FreeConst> CVC3::TheoryArithOld::d_freeConstDB
private

Mapping of inequalities to the largest/smallest free constant.

The Expr is the original inequality with the free constant removed and inequality converted to non-strict (for indexing purposes). I.e. ax<c+t becomes ax<=t. This inequality is mapped to a pair<c,strict>, the smallest (largest for c+t<ax) constant among inequalities with the same 'a', 'x', and 't', and a boolean flag indicating whether the strongest inequality is strict.

Definition at line 91 of file theory_arith_old.h.

CDList<Theorem> CVC3::TheoryArithOld::d_buffer_0
private

Buffer of input inequalities (high priority)

Is the problem only difference logic

Definition at line 99 of file theory_arith_old.h.

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

CDList<Theorem> CVC3::TheoryArithOld::d_buffer_1
private

Buffer of input inequalities (one variable)

Definition at line 100 of file theory_arith_old.h.

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

CDList<Theorem> CVC3::TheoryArithOld::d_buffer_2
private

Buffer of input inequalities (small constraints)

Definition at line 101 of file theory_arith_old.h.

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

CDList<Theorem> CVC3::TheoryArithOld::d_buffer_3
private

Buffer of input inequalities (big constraint)

Definition at line 102 of file theory_arith_old.h.

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

CDO<size_t> CVC3::TheoryArithOld::d_bufferIdx_0
private

Buffer index of the next unprocessed inequality.

Definition at line 104 of file theory_arith_old.h.

Referenced by assertFact().

CDO<size_t> CVC3::TheoryArithOld::d_bufferIdx_1
private

Buffer index of the next unprocessed inequality.

Definition at line 105 of file theory_arith_old.h.

Referenced by assertFact(), and TheoryArithOld().

CDO<size_t> CVC3::TheoryArithOld::d_bufferIdx_2
private

Buffer index of the next unprocessed inequality.

Definition at line 106 of file theory_arith_old.h.

Referenced by assertFact(), and TheoryArithOld().

CDO<size_t> CVC3::TheoryArithOld::d_bufferIdx_3
private

Buffer index of the next unprocessed inequality.

Definition at line 107 of file theory_arith_old.h.

Referenced by assertFact(), and TheoryArithOld().

CDO<size_t> CVC3::TheoryArithOld::diff_logic_size
private

Number of queries that are just difference logic.

Definition at line 109 of file theory_arith_old.h.

const int* CVC3::TheoryArithOld::d_bufferThres
private

Threshold when the buffer must be processed.

Definition at line 111 of file theory_arith_old.h.

Referenced by assertFact().

const bool* CVC3::TheoryArithOld::d_splitSign
private

Definition at line 113 of file theory_arith_old.h.

Referenced by nonlinearSignSplit().

const int* CVC3::TheoryArithOld::d_grayShadowThres
private

Threshold on gray shadow size (ignore it and set incomplete)

Definition at line 115 of file theory_arith_old.h.

Referenced by assertFact().

CDMap<Expr, int> CVC3::TheoryArithOld::d_countRight
private

Mapping of a variable to the number of inequalities where the variable would be isolated on the right.

Definition at line 121 of file theory_arith_old.h.

CDMap<Expr, int> CVC3::TheoryArithOld::d_countLeft
private

Mapping of a variable to the number of inequalities where the variable would be isolated on the left.

Definition at line 125 of file theory_arith_old.h.

CDMap<Expr, bool> CVC3::TheoryArithOld::d_sharedTerms
private

Set of shared terms (for counterexample generation)

Definition at line 128 of file theory_arith_old.h.

Referenced by addSharedTerm(), refineCounterExample(), and update().

CDList<Expr> CVC3::TheoryArithOld::d_sharedTermsList
private

Definition at line 129 of file theory_arith_old.h.

Referenced by addSharedTerm().

CDMap<Expr, bool> CVC3::TheoryArithOld::d_sharedVars
private

Set of shared integer variables (i-leaves)

Definition at line 132 of file theory_arith_old.h.

VarOrderGraph CVC3::TheoryArithOld::d_graph
private

Definition at line 155 of file theory_arith_old.h.

Referenced by addPairToArithOrder(), assignVariables(), and computeTermBounds().

ExprMap<Rational> CVC3::TheoryArithOld::maxCoefficientLeft
private

Map from variables to the maximal (by absolute value) of one of it's coefficients

Definition at line 350 of file theory_arith_old.h.

ExprMap<Rational> CVC3::TheoryArithOld::maxCoefficientRight
private

Definition at line 351 of file theory_arith_old.h.

ExprMap<Rational> CVC3::TheoryArithOld::fixedMaxCoefficient
private

Map from variables to the fixed value of one of it's coefficients

Definition at line 354 of file theory_arith_old.h.

CDMap<Expr, Theorem> CVC3::TheoryArithOld::bufferedInequalities
private

Keep the expressions that are already in the buffer

Definition at line 390 of file theory_arith_old.h.

Referenced by update().

CDMap<Expr, Rational> CVC3::TheoryArithOld::termLowerBound
private

Strict lower bounds on terms, so that we don't add inequalities to the buffer

Definition at line 393 of file theory_arith_old.h.

Referenced by registerAtom().

CDMap<Expr, Theorem> CVC3::TheoryArithOld::termLowerBoundThm
private

Definition at line 394 of file theory_arith_old.h.

Referenced by registerAtom().

CDMap<Expr, Rational> CVC3::TheoryArithOld::termUpperBound
private

Strict upper bounds on terms, so that we don't add inequalities to the buffer

Definition at line 396 of file theory_arith_old.h.

Referenced by registerAtom().

CDMap<Expr, Theorem> CVC3::TheoryArithOld::termUpperBoundThm
private

Definition at line 397 of file theory_arith_old.h.

Referenced by registerAtom().

CDMap<Expr, Expr> CVC3::TheoryArithOld::alreadyProjected
private

Which inequalities have already been projected (on which monomial).

  • if we get an update of an inequality that's not been projected, we don't care it will get projected (it's find)
  • when projecting, project the finds, not the originals
  • when done projecting add here, both original and the find

Definition at line 406 of file theory_arith_old.h.

Referenced by update().

CDMap<Expr, bool> CVC3::TheoryArithOld::dontBuffer
private

Sometimes we know an inequality is in the buffer (as a find of something) and we don't want it in the buffer, but we do want to pre-process it, so we put it here.

Definition at line 413 of file theory_arith_old.h.

Referenced by update().

CDO<bool> CVC3::TheoryArithOld::diffLogicOnly
private

Are we doing only difference logic?

Definition at line 418 of file theory_arith_old.h.

Referenced by assertFact(), assignVariables(), computeTermBounds(), and isUnconstrained().

AtomsMap CVC3::TheoryArithOld::formulaAtomLowerBound
private

Map from terms to their lower bound (and the original formula expression)

Definition at line 448 of file theory_arith_old.h.

Referenced by registerAtom(), and tryPropagate().

AtomsMap CVC3::TheoryArithOld::formulaAtomUpperBound
private

Map from terms to their upper bound (and the original formula expression)

Definition at line 451 of file theory_arith_old.h.

Referenced by registerAtom(), and tryPropagate().

ExprMap<bool> CVC3::TheoryArithOld::formulaAtoms
private

Map of all the atoms in the formula

Definition at line 454 of file theory_arith_old.h.

Referenced by registerAtom().

DifferenceLogicGraph CVC3::TheoryArithOld::diffLogicGraph
private

The graph for difference logic

Definition at line 885 of file theory_arith_old.h.

Referenced by assignVariables(), computeTermBounds(), isUnconstrained(), TheoryArithOld(), and tryPropagate().

Expr CVC3::TheoryArithOld::zero
private

Definition at line 887 of file theory_arith_old.h.

Referenced by computeTermBounds(), TheoryArithOld(), and tryPropagate().

CDO<unsigned> CVC3::TheoryArithOld::shared_index_1
private

Index for expanding on shared term equalities

Definition at line 890 of file theory_arith_old.h.

CDO<unsigned> CVC3::TheoryArithOld::shared_index_2
private

Index for expanding on shared term equalities

Definition at line 892 of file theory_arith_old.h.

std::vector<Theorem> CVC3::TheoryArithOld::multiplicativeSignSplits
private

Definition at line 894 of file theory_arith_old.h.

Referenced by addMultiplicativeSignSplit(), and assertFact().

CDMap<Expr, DifferenceLogicGraph::EpsRational> CVC3::TheoryArithOld::termUpperBounded
private

Definition at line 903 of file theory_arith_old.h.

Referenced by computeTermBounds(), and getUpperBound().

CDMap<Expr, DifferenceLogicGraph::EpsRational> CVC3::TheoryArithOld::termLowerBounded
private

Definition at line 904 of file theory_arith_old.h.

Referenced by computeTermBounds(), and getLowerBound().

CDMap<Expr, bool> CVC3::TheoryArithOld::d_varConstrainedPlus
private

Definition at line 906 of file theory_arith_old.h.

Referenced by isUnconstrained(), and updateConstrained().

CDMap<Expr, bool> CVC3::TheoryArithOld::d_varConstrainedMinus
private

Definition at line 907 of file theory_arith_old.h.

Referenced by isUnconstrained(), and updateConstrained().

CDMap<Expr, bool> CVC3::TheoryArithOld::termConstrainedBelow
private

Definition at line 910 of file theory_arith_old.h.

Referenced by computeTermBounds(), getLowerBound(), and isConstrainedBelow().

CDMap<Expr, bool> CVC3::TheoryArithOld::termConstrainedAbove
private

Definition at line 911 of file theory_arith_old.h.

Referenced by computeTermBounds(), getUpperBound(), and isConstrainedAbove().


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