#include <theory_arith3.h>
Definition at line 28 of file theory_arith3.h.
TheoryArith3::TheoryArith3 | ( | TheoryCore * | core | ) |
Definition at line 1809 of file theory_arith3.cpp.
References createProofRules3(), d_buffer, d_bufferIdx, d_diseq, CVC3::TheoryArith::d_intType, CVC3::TheoryArith::d_realType, d_rules, CVC3::DARK_SHADOW, CVC3::DIVIDE, CVC3::GE, CVC3::Theory::getEM(), CVC3::GRAY_SHADOW, CVC3::GT, IF_DEBUG, CVC3::INT, CVC3::INTDIV, CVC3::IS_INTEGER, CVC3::LE, CVC3::LT, CVC3::MINUS, CVC3::MOD, CVC3::MULT, CVC3::NEGINF, CVC3::ExprManager::newKind(), CVC3::PLUS, CVC3::POSINF, CVC3::POW, CVC3::RATIONAL_EXPR, CVC3::REAL, CVC3::REAL_CONST, CVC3::Theory::registerTheory(), CVC3::SUBRANGE, and CVC3::UMINUS.
TheoryArith3::~TheoryArith3 | ( | ) |
Definition at line 1889 of file theory_arith3.cpp.
References CVC3::ExprMap< Data >::begin(), d_inequalitiesLeftDB, d_inequalitiesRightDB, d_rules, and CVC3::ExprMap< Data >::end().
Check the term t for integrality.
Definition at line 68 of file theory_arith3.cpp.
References CVC3::Expr::getType(), CVC3::IS_INTEGER, isIntegerDerive(), CVC3::isReal(), and CVC3::Theory::typePred().
Referenced by doSolve(), isInteger(), normalizeProjectIneqs(), processFiniteInterval(), processSimpleIntEq(), and projectInequalities().
A helper method for isIntegerThm().
Check if IS_INTEGER(e) is easily derivable from the given 'thm'
Definition at line 76 of file theory_arith3.cpp.
References CVC3::Expr::arity(), CVC3::Theory::getCommonRules(), CVC3::Theorem::getExpr(), CVC3::Expr::isAnd(), and CVC3::Theorem::isNull().
Referenced by isIntegerThm(), and rewrite().
Extract the free constant from an inequality.
Definition at line 93 of file theory_arith3.cpp.
References DebugAssert, CVC3::isIneq(), CVC3::PLUS, CVC3::RATIONAL_EXPR, and CVC3::Expr::toString().
Referenced by isStale().
const TheoryArith3::FreeConst & TheoryArith3::updateSubsumptionDB | ( | const Expr & | ineq, | |
bool | varOnRHS, | |||
bool & | subsumed | |||
) | [private] |
Update the free constant subsumption database with new inequality.
Definition at line 111 of file theory_arith3.cpp.
References CVC3::Expr::arity(), CVC3::Expr::begin(), d_freeConstDB, DebugAssert, CVC3::CDMap< Key, Data, HashFcn >::end(), CVC3::Expr::end(), CVC3::CDMap< Key, Data, HashFcn >::find(), CVC3::CDOmap< Key, Data, HashFcn >::get(), CVC3::TheoryArith3::TheoryArith3::FreeConst::getConst(), CVC3::Expr::getRational(), CVC3::int2string(), CVC3::isLE(), CVC3::isLT(), CVC3::isPlus(), CVC3::isRational(), CVC3::leExpr(), CVC3::plusExpr(), CVC3::TheoryArith::rat(), CVC3::TheoryArith3::TheoryArith3::FreeConst::strict(), CVC3::Expr::toString(), and CVC3::TRACE.
Referenced by projectInequalities().
bool TheoryArith3::kidsCanonical | ( | const Expr & | e | ) | [private] |
Check if the kids of e are fully simplified and canonized (for debugging).
Definition at line 180 of file theory_arith3.cpp.
References CVC3::Expr::arity(), canon(), std::endl(), IF_DEBUG, and CVC3::Theory::isLeaf().
Referenced by canon(), and canonSimplify().
Canonize the expression e, assuming all children are canonical.
Implements CVC3::TheoryArith.
Definition at line 212 of file theory_arith3.cpp.
References CVC3::Expr::arity(), CVC3::ArithProofRules::canonDivide(), CVC3::ArithProofRules::canonMult(), CVC3::ArithProofRules::canonPlus(), CVC3::ArithProofRules::canonPowConst(), CVC3::TheoryArith::canonThm(), d_rules, DebugAssert, CVC3::DIVIDE, CVC3::Expr::getKind(), CVC3::Theorem::getRHS(), CVC3::isRational(), kidsCanonical(), CVC3::MINUS, CVC3::ArithProofRules::minusToPlus(), CVC3::MULT, CVC3::PLUS, CVC3::POW, CVC3::Theory::reflexivityRule(), CVC3::Theory::substitutivityRule(), CVC3::Expr::toString(), CVC3::TRACE, CVC3::Theory::transitivityRule(), CVC3::UMINUS, and CVC3::ArithProofRules::uMinusToMult().
Referenced by canonSimplify(), doSolve(), isolateVariable(), kidsCanonical(), processFiniteInterval(), and rewrite().
Canonize and reduce e w.r.t. union-find database; assume all children are canonical.
Definition at line 360 of file theory_arith3.cpp.
References canon(), DebugAssert, CVC3::Theory::find(), CVC3::Theorem::getRHS(), CVC3::Expr::hasFind(), kidsCanonical(), CVC3::Theory::leavesAreSimp(), CVC3::Theory::simplifyExpr(), CVC3::Expr::toString(), CVC3::TRACE, and CVC3::Theory::transitivityRule().
Referenced by canonPred(), canonPredEquiv(), and canonSimplify().
Composition of canonSimplify(const Expr&) by transitivity: take e0 = e1, canonize and simplify e1 to e2, return e0 = e2.
Definition at line 167 of file theory_arith3.h.
References canonSimplify(), CVC3::Theorem::getRHS(), and CVC3::Theory::transitivityRule().
Canonize predicate (x = y, x < y, etc.).
accepts a theorem, canonizes it, applies iffMP and substituvity to derive the canonized thm
Definition at line 390 of file theory_arith3.cpp.
References CVC3::Expr::arity(), canonSimplify(), DebugAssert, CVC3::Theorem::getExpr(), CVC3::Expr::getOp(), CVC3::Theory::iffMP(), CVC3::Theory::substitutivityRule(), and CVC3::Theorem::toString().
Referenced by addToBuffer(), doSolve(), isolateVariable(), normalizeProjectIneqs(), processFiniteInterval(), processRealEq(), processSimpleIntEq(), and projectInequalities().
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 404 of file theory_arith3.cpp.
References CVC3::Expr::arity(), canonSimplify(), DebugAssert, CVC3::Expr::getOp(), CVC3::Theorem::getRHS(), CVC3::Theory::substitutivityRule(), CVC3::Theorem::toString(), and CVC3::Theory::transitivityRule().
Referenced by normalize(), and rewrite().
Solve an equation and return an equivalent Theorem in the solved form.
Psuedo-code for doSolve. (Input is an equation) (output is a Theorem)
Definition at line 432 of file theory_arith3.cpp.
References CVC3::Expr::arity(), CVC3::Expr::begin(), canon(), canonPred(), CVC3::ArithProofRules::constPredicate(), d_rules, DebugAssert, CVC3::ArithProofRules::divideEqnNonConst(), CVC3::ArithProofRules::elimPower(), CVC3::ArithProofRules::elimPowerConst(), CVC3::Expr::end(), CVC3::Theory::enqueueFact(), CVC3::EQ, CVC3::ArithProofRules::evenPowerEqNegConst(), FatalAssert, CVC3::Theory::getCommonRules(), CVC3::Theorem::getExpr(), getFactors(), CVC3::Expr::getRational(), CVC3::Theorem::getRHS(), CVC3::Rational::getUnsigned(), IF_DEBUG, CVC3::Theory::iffMP(), CVC3::ArithProofRules::intEqIrrational(), CVC3::isInt(), isInteger(), isIntegerThm(), isIntx(), CVC3::isMult(), CVC3::Theorem::isNull(), CVC3::isPlus(), CVC3::isPow(), CVC3::Expr::isRational(), CVC3::isRational(), CVC3::Theorem::isRewrite(), MiniSat::left(), CVC3::ArithProofRules::multEqn(), CVC3::ArithProofRules::multEqZero(), normalize(), CVC3::ArithProofRules::plusPredicate(), CVC3::pow(), CVC3::ArithProofRules::powEqZero(), processIntEq(), processRealEq(), CVC3::TheoryArith::rat(), CVC3::ratRoot(), MiniSat::right(), CVC3::ArithProofRules::rightMinusLeft(), CVC3::Theory::setIncomplete(), CVC3::Theory::symmetryRule(), CVC3::Expr::toString(), CVC3::Theorem::toString(), CVC3::TRACE, and CVC3::CommonProofRules::trueTheorem().
Referenced by solve().
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 419 of file theory_arith3.cpp.
bool TheoryArith3::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 590 of file theory_arith3.cpp.
References CVC3::abs(), CVC3::Expr::arity(), CVC3::Expr::begin(), DebugAssert, CVC3::Expr::end(), isInteger(), CVC3::Theory::isLeaf(), CVC3::Theory::isLeafIn(), CVC3::isMult(), CVC3::isPlus(), CVC3::isRational(), MiniSat::min(), and CVC3::Expr::toString().
Referenced by processSimpleIntEq().
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 642 of file theory_arith3.cpp.
References CVC3::Expr::arity(), canonPred(), d_rules, DebugAssert, CVC3::EQ, CVC3::Theory::getBaseType(), CVC3::Theorem::getLHS(), CVC3::Expr::getRational(), CVC3::Theorem::getRHS(), CVC3::Theory::iffMP(), isInteger(), CVC3::Theory::isLeaf(), CVC3::Theory::isLeafIn(), CVC3::isMult(), CVC3::isPlus(), CVC3::isRational(), CVC3::Expr::isRational(), CVC3::isReal(), MiniSat::left(), CVC3::ArithProofRules::multEqn(), CVC3::ArithProofRules::plusPredicate(), CVC3::TheoryArith::rat(), MiniSat::right(), CVC3::Expr::toString(), CVC3::Theorem::toString(), and CVC3::TRACE.
Referenced by doSolve().
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 889 of file theory_arith3.cpp.
References CVC3::CommonProofRules::andElim(), CVC3::Expr::arity(), DebugAssert, CVC3::Theory::getCommonRules(), CVC3::Theorem::getExpr(), CVC3::Expr::isAnd(), CVC3::Expr::isBoolConst(), CVC3::Expr::isFalse(), CVC3::Theorem::isRewrite(), processSimpleIntEq(), solvedForm(), CVC3::Expr::toString(), and CVC3::TRACE.
Referenced by doSolve().
One step of INT equality processing (aux. method for processIntEq()).
eqn | is a single equation 0 = e |
Definition at line 759 of file theory_arith3.cpp.
References CVC3::CommonProofRules::andIntro(), CVC3::Expr::arity(), CVC3::Expr::begin(), canonPred(), d_rules, DebugAssert, CVC3::Expr::end(), CVC3::EQ, CVC3::ArithProofRules::eqElimIntRule(), CVC3::Theory::getCommonRules(), CVC3::Theorem::getExpr(), CVC3::Theorem::getLHS(), CVC3::Expr::getRational(), CVC3::Theorem::getRHS(), CVC3::Theory::iffMP(), CVC3::ArithProofRules::intVarEqnConst(), CVC3::Expr::isAnd(), isIntegerThm(), isIntx(), CVC3::Theory::isLeaf(), CVC3::isMult(), CVC3::Theorem::isNull(), CVC3::isPlus(), CVC3::isPow(), CVC3::Expr::isRational(), CVC3::Theorem::isRewrite(), CVC3::ArithProofRules::multEqn(), pickIntEqMonomial(), CVC3::ArithProofRules::plusPredicate(), CVC3::TheoryArith::rat(), MiniSat::right(), separateMonomial(), CVC3::CommonProofRules::skolemize(), CVC3::Theory::symmetryRule(), CVC3::Theorem::toString(), CVC3::Expr::toString(), and CVC3::TRACE.
Referenced by processIntEq().
void TheoryArith3::processBuffer | ( | ) | [private] |
Process inequalities in the buffer.
Definition at line 1059 of file theory_arith3.cpp.
References d_buffer, d_bufferIdx, DebugAssert, CVC3::Theorem::getExpr(), CVC3::Theory::inconsistent(), isolateVariable(), CVC3::isPlus(), isStale(), CVC3::Expr::isTrue(), projectInequalities(), CVC3::Theory::setInconsistent(), CVC3::CDList< T >::size(), and CVC3::Expr::toString().
Referenced by assertFact(), and checkSat().
Take an inequality and isolate a variable.
Definition at line 1150 of file theory_arith3.cpp.
References canon(), canonPred(), computeNormalFactor(), CVC3::ArithProofRules::constPredicate(), d_rules, DebugAssert, CVC3::Theorem::getExpr(), CVC3::Expr::getKind(), CVC3::Expr::getRational(), CVC3::Theorem::getRHS(), CVC3::Theory::iffMP(), CVC3::isLE(), CVC3::isLT(), CVC3::isMult(), CVC3::isPlus(), CVC3::Expr::isRational(), CVC3::isRational(), CVC3::ArithProofRules::multIneqn(), pickMonomial(), CVC3::ArithProofRules::plusPredicate(), CVC3::TheoryArith::rat(), MiniSat::right(), CVC3::Theorem::toString(), CVC3::Expr::toString(), and CVC3::TRACE.
Referenced by processBuffer().
Update the statistics counters for the variable with a coeff. c.
Definition at line 1085 of file theory_arith3.cpp.
References CVC3::CDMap< Key, Data, HashFcn >::count(), d_countLeft, d_countRight, CVC3::CDMap< Key, Data, HashFcn >::end(), CVC3::CDMap< Key, Data, HashFcn >::find(), maxCoefficientLeft, maxCoefficientRight, CVC3::Rational::toString(), and CVC3::TRACE.
Referenced by addToBuffer(), and updateStats().
void TheoryArith3::updateStats | ( | const Expr & | monomial | ) | [private] |
Update the statistics counters for the monomial.
Definition at line 1118 of file theory_arith3.cpp.
References CVC3::Expr::getRational(), separateMonomial(), and updateStats().
void TheoryArith3::addToBuffer | ( | const Theorem & | thm | ) | [private] |
Add an inequality to the input buffer. See also d_buffer.
Definition at line 1126 of file theory_arith3.cpp.
References CVC3::Expr::begin(), canonPred(), d_buffer, d_rules, CVC3::Expr::end(), CVC3::Theorem::getExpr(), CVC3::Theory::iffMP(), CVC3::isPlus(), CVC3::isRational(), CVC3::CDList< T >::push_back(), CVC3::ArithProofRules::rightMinusLeft(), CVC3::TRACE, and updateStats().
Referenced by assertFact(), and projectInequalities().
Given a canonized term, compute a factor to make all coefficients integer and relatively prime.
Definition at line 1220 of file theory_arith3.cpp.
References CVC3::abs(), CVC3::Expr::arity(), CVC3::Rational::getDenominator(), CVC3::Rational::getNumerator(), CVC3::Expr::getRational(), CVC3::isMult(), CVC3::isPlus(), CVC3::MULT, CVC3::TheoryArith::rat(), and CVC3::RATIONAL_EXPR.
Referenced by isolateVariable(), and normalize().
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 2319 of file theory_arith3.cpp.
References canonPredEquiv(), computeNormalFactor(), d_rules, DebugAssert, CVC3::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(), CVC3::Theory::reflexivityRule(), CVC3::Expr::toString(), and CVC3::TRACE.
Referenced by doSolve(), normalize(), and rewrite().
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 2382 of file theory_arith3.cpp.
References CVC3::Theorem::getRHS(), normalize(), and CVC3::Theory::transitivityRule().
Definition at line 1642 of file theory_arith3.cpp.
References CVC3::TheoryArith3::TheoryArith3::VarOrderGraph::addEdge(), CVC3::Expr::begin(), CVC3::CDMap< Key, Data, HashFcn >::count(), d_countLeft, d_countRight, d_graph, DebugAssert, CVC3::Expr::end(), CVC3::TheoryCore::getFlags(), CVC3::int2string(), CVC3::isPlus(), lessThanVar(), CVC3::TheoryArith3::TheoryArith3::VarOrderGraph::selectLargest(), selectSmallestByCoefficient(), separateMonomial(), CVC3::Theory::theoryCore(), CVC3::Expr::toString(), and CVC3::TRACE.
Referenced by isolateVariable().
Definition at line 725 of file theory_arith3.cpp.
References CVC3::Expr::arity(), CVC3::Expr::begin(), DebugAssert, CVC3::Expr::end(), CVC3::Expr::getKind(), CVC3::Expr::getRational(), CVC3::isIntegerConst(), CVC3::Theory::isLeaf(), CVC3::MULT, CVC3::POW, CVC3::RATIONAL_EXPR, and CVC3::Expr::toString().
Referenced by doSolve().
Separate monomial e = c*p1*...*pn into c and 1*p1*...*pn.
Implements CVC3::TheoryArith.
Definition at line 1320 of file theory_arith3.cpp.
References CVC3::Expr::arity(), DebugAssert, CVC3::Expr::getKids(), CVC3::isMult(), CVC3::isPlus(), CVC3::isRational(), CVC3::Expr::isRational(), CVC3::multExpr(), CVC3::TheoryArith::rat(), CVC3::Expr::toString(), and CVC3::TRACE.
Referenced by CVC3::ArithTheoremProducer3::eqElimIntRule(), findRationalBound(), CVC3::ArithTheoremProducer3::grayShadowConst(), CVC3::ArithTheoremProducer3::intVarEqnConst(), lessThanVar(), normalizeProjectIneqs(), pickMonomial(), processSimpleIntEq(), projectInequalities(), and updateStats().
bool CVC3::TheoryArith3::isInteger | ( | const Expr & | e | ) | [inline] |
Check the term t for integrality (return bool).
Definition at line 233 of file theory_arith3.h.
References isIntegerThm(), and CVC3::Theorem::isNull().
Referenced by assignVariables(), computeType(), doSolve(), CVC3::ArithTheoremProducer3::IsIntegerElim(), pickIntEqMonomial(), print(), processFiniteInterval(), processFiniteIntervals(), processRealEq(), and solve().
Definition at line 1262 of file theory_arith3.cpp.
References DebugAssert, CVC3::isRational(), separateMonomial(), and CVC3::Expr::toString().
Referenced by pickMonomial().
bool TheoryArith3::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 1278 of file theory_arith3.cpp.
References CVC3::Expr::begin(), CVC3::Expr::end(), CVC3::Theory::find(), CVC3::Theorem::getRHS(), and CVC3::Expr::isTerm().
Referenced by isStale(), processBuffer(), and projectInequalities().
bool TheoryArith3::isStale | ( | const Ineq & | ineq | ) | [private] |
Check if the inequality is "stale" or subsumed.
Definition at line 1290 of file theory_arith3.cpp.
References freeConstIneq(), CVC3::TheoryArith3::TheoryArith3::FreeConst::getConst(), CVC3::TheoryArith3::TheoryArith3::Ineq::getConst(), CVC3::Theorem::getExpr(), CVC3::TheoryArith3::TheoryArith3::Ineq::ineq(), CVC3::isLT(), isStale(), CVC3::TheoryArith3::TheoryArith3::FreeConst::strict(), CVC3::TRACE, and CVC3::TheoryArith3::TheoryArith3::Ineq::varOnRHS().
void TheoryArith3::projectInequalities | ( | const Theorem & | theInequality, | |
bool | isolatedVarOnRHS | |||
) | [private] |
Definition at line 1346 of file theory_arith3.cpp.
References addToBuffer(), canonPred(), d_inequalitiesLeftDB, d_inequalitiesRightDB, d_rules, DebugAssert, CVC3::ExprMap< Data >::end(), CVC3::Theory::enqueueFact(), CVC3::ExprMap< Data >::find(), CVC3::TheoryCore::getCM(), CVC3::ContextManager::getCurrentContext(), CVC3::Theorem::getExpr(), IF_DEBUG, CVC3::Theory::iffMP(), CVC3::TheoryArith3::TheoryArith3::Ineq::ineq(), CVC3::Expr::isEq(), CVC3::Expr::isFalse(), CVC3::isInt(), isIntegerThm(), CVC3::isLE(), CVC3::isLT(), CVC3::isMult(), CVC3::Theorem::isNull(), CVC3::isPow(), isStale(), CVC3::Expr::isTrue(), CVC3::ArithProofRules::lessThanToLE(), normalizeProjectIneqs(), CVC3::CDList< T >::push_back(), separateMonomial(), CVC3::Theory::setIncomplete(), CVC3::Theory::setInconsistent(), CVC3::TheoryCore::setupTerm(), CVC3::CDList< T >::size(), CVC3::Theory::theoryCore(), CVC3::Theorem::toString(), CVC3::TRACE, TRACE_MSG, and updateSubsumptionDB().
Referenced by processBuffer().
void TheoryArith3::assignVariables | ( | std::vector< Expr > & | v | ) | [private] |
Definition at line 2248 of file theory_arith3.cpp.
References CVC3::Theory::assignValue(), d_graph, findBounds(), CVC3::Theory::findExpr(), CVC3::Theory::inconsistent(), CVC3::Rational::isInteger(), isInteger(), CVC3::Expr::isRational(), CVC3::TheoryArith::rat(), CVC3::TheoryArith3::TheoryArith3::VarOrderGraph::selectSmallest(), and CVC3::TRACE.
Referenced by computeModelBasic().
void TheoryArith3::findRationalBound | ( | const Expr & | varSide, | |
const Expr & | ratSide, | |||
const Expr & | var, | |||
Rational & | r | |||
) | [private] |
Definition at line 2179 of file theory_arith3.cpp.
References DebugAssert, CVC3::Theory::findExpr(), CVC3::Expr::getRational(), CVC3::isRational(), separateMonomial(), and CVC3::Expr::toString().
Referenced by findBounds().
Definition at line 2197 of file theory_arith3.cpp.
References CVC3::ExprMap< Data >::count(), d_inequalitiesLeftDB, d_inequalitiesRightDB, DebugAssert, findRationalBound(), CVC3::isLT(), MiniSat::left(), MiniSat::right(), CVC3::CDList< T >::size(), CVC3::ExprMap< Data >::size(), CVC3::Rational::toString(), and CVC3::TRACE.
Referenced by assignVariables().
Theorem TheoryArith3::normalizeProjectIneqs | ( | const Theorem & | ineqThm1, | |
const Theorem & | ineqThm2 | |||
) | [private] |
Definition at line 1449 of file theory_arith3.cpp.
References CVC3::Theory::addSplitter(), CVC3::Expr::arity(), canonPred(), CVC3::ArithProofRules::constPredicate(), d_rules, CVC3::DARK_SHADOW, CVC3::ArithProofRules::darkGrayShadow2ab(), CVC3::ArithProofRules::darkGrayShadow2ba(), DebugAssert, CVC3::Theory::enqueueFact(), CVC3::Theorem::getExpr(), CVC3::Expr::getKind(), CVC3::GRAY_SHADOW, IF_DEBUG, CVC3::Theory::iffMP(), isIntegerThm(), isIntx(), CVC3::isLE(), CVC3::isLT(), CVC3::isMult(), CVC3::Theorem::isNull(), CVC3::Expr::isOr(), CVC3::isPlus(), CVC3::Expr::isRational(), CVC3::isRational(), CVC3::ArithProofRules::multIneqn(), processFiniteInterval(), CVC3::TheoryArith::rat(), CVC3::ArithProofRules::realShadow(), CVC3::ArithProofRules::realShadowEq(), MiniSat::right(), CVC3::ArithProofRules::rightMinusLeft(), separateMonomial(), CVC3::Theory::simplifyExpr(), CVC3::Expr::toString(), and CVC3::TRACE.
Referenced by projectInequalities().
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 932 of file theory_arith3.cpp.
References CVC3::CommonProofRules::andIntro(), CVC3::ExprMap< Data >::begin(), DebugAssert, CVC3::ExprMap< Data >::end(), CVC3::Theory::getCommonRules(), CVC3::Theorem::getExpr(), IF_DEBUG, substAndCanonize(), CVC3::TRACE, and TRACE_MSG.
Referenced by processIntEq().
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 987 of file theory_arith3.cpp.
References CVC3::Expr::arity(), CVC3::TheoryArith::canonThm(), CVC3::ExprMap< Data >::empty(), CVC3::ExprMap< Data >::end(), CVC3::ExprMap< Data >::find(), CVC3::Theorem::getRHS(), CVC3::Theory::isLeaf(), CVC3::Theory::reflexivityRule(), CVC3::Theory::substitutivityRule(), and CVC3::TRACE.
Referenced by solvedForm(), and substAndCanonize().
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 1038 of file theory_arith3.cpp.
References DebugAssert, CVC3::ExprMap< Data >::empty(), CVC3::Theorem::getExpr(), CVC3::Theorem::getRHS(), CVC3::Theory::iffMP(), CVC3::Theorem::isRewrite(), substAndCanonize(), CVC3::Theory::substitutivityRule(), and CVC3::Expr::toString().
void TheoryArith3::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 1904 of file theory_arith3.cpp.
References CVC3::Expr::begin(), CVC3::Expr::end(), and CVC3::Theory::isLeaf().
void TheoryArith3::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 1917 of file theory_arith3.cpp.
References canon(), canonPred(), d_rules, DebugAssert, CVC3::Theory::enqueueFact(), CVC3::ArithProofRules::finiteInterval(), CVC3::Theorem::getExpr(), CVC3::Expr::getRational(), CVC3::Theorem::getRHS(), CVC3::Theory::iffMP(), isInteger(), isIntegerThm(), CVC3::isLE(), CVC3::isMult(), CVC3::isPlus(), CVC3::Expr::isRational(), CVC3::isRational(), CVC3::ArithProofRules::multIneqn(), CVC3::TheoryArith::rat(), CVC3::Theory::substitutivityRule(), CVC3::Theory::symmetryRule(), and CVC3::Expr::toString().
Referenced by normalizeProjectIneqs(), and processFiniteIntervals().
void TheoryArith3::processFiniteIntervals | ( | const Expr & | x | ) | [private] |
For an integer var 'x', find and process all constraints A <= ax <= A+c.
Definition at line 1975 of file theory_arith3.cpp.
References d_inequalitiesLeftDB, d_inequalitiesRightDB, CVC3::ExprMap< Data >::end(), CVC3::ExprMap< Data >::find(), isInteger(), processFiniteInterval(), and CVC3::CDList< T >::size().
void TheoryArith3::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 2001 of file theory_arith3.cpp.
References CVC3::Expr::arity(), CVC3::Expr::hasFind(), CVC3::Theory::reflexivityRule(), CVC3::Expr::setEqNext(), CVC3::Expr::setFind(), and setup().
ArithProofRules * TheoryArith3::createProofRules3 | ( | ) |
Definition at line 43 of file arith_theorem_producer3.cpp.
References CVC3::Theory::theoryCore().
Referenced by TheoryArith3().
void TheoryArith3::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 2015 of file theory_arith3.cpp.
References d_sharedTerms.
void TheoryArith3::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::TheoryArith.
Definition at line 2020 of file theory_arith3.cpp.
References CVC3::Theory::addSplitter(), addToBuffer(), d_buffer, d_bufferIdx, d_bufferThres, d_diseq, d_inModelCreation, d_rules, DebugAssert, CVC3::Theory::enqueueFact(), CVC3::ArithProofRules::expandDarkShadow(), CVC3::ArithProofRules::expandGrayShadow(), CVC3::ArithProofRules::expandGrayShadow0(), CVC3::geExpr(), CVC3::Theory::getCommonRules(), CVC3::Theorem::getExpr(), CVC3::Expr::getKind(), CVC3::Theorem::getLHS(), CVC3::Expr::getRational(), CVC3::Theorem::getRHS(), CVC3::GRAY_SHADOW, CVC3::ArithProofRules::grayShadowConst(), CVC3::gtExpr(), IF_DEBUG, CVC3::Theory::iffMP(), CVC3::int2string(), CVC3::isDarkShadow(), CVC3::Expr::isFalse(), CVC3::isGrayShadow(), CVC3::isIntPred(), CVC3::isLE(), CVC3::isLT(), CVC3::isMult(), CVC3::Expr::isRational(), CVC3::ArithProofRules::negatedInequality(), processBuffer(), CVC3::CDList< T >::push_back(), CVC3::Theory::setInconsistent(), CVC3::Theory::simplify(), CVC3::Theory::simplifyExpr(), CVC3::CDList< T >::size(), CVC3::ArithProofRules::splitGrayShadow(), CVC3::CommonProofRules::substitutivityRule(), CVC3::Theory::symmetryRule(), CVC3::Expr::toString(), CVC3::TRACE, and CVC3::Theory::transitivityRule().
void TheoryArith3::refineCounterExample | ( | ) | [virtual] |
Process disequalities from the arrangement for model generation.
Implements CVC3::TheoryArith.
Definition at line 2147 of file theory_arith3.cpp.
References CVC3::Theory::addSplitter(), CVC3::CDMap< Key, Data, HashFcn >::begin(), d_inModelCreation, d_sharedTerms, DebugAssert, CVC3::CDMap< Key, Data, HashFcn >::end(), CVC3::Expr::eqExpr(), CVC3::Theory::findExpr(), CVC3::Theory::getBaseType(), CVC3::Expr::getType(), CVC3::isReal(), CVC3::Theory::simplifyExpr(), CVC3::Type::toString(), CVC3::Expr::toString(), and CVC3::TRACE.
void TheoryArith3::computeModelBasic | ( | const std::vector< Expr > & | v | ) | [virtual] |
Assign concrete values to basic-type variables in v.
Implements CVC3::TheoryArith.
Definition at line 2282 of file theory_arith3.cpp.
References assignVariables(), d_inModelCreation, CVC3::Theory::findExpr(), and CVC3::TRACE.
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.
e | is the compound type expression to assign a value; | |
vars | are the variables actually assigned. Normally, 'e' is the only element of vars. However, e.g. in the case of uninterpreted functions, assigning 'f' means assigning all relevant applications of 'f' to constant values (f(0), f(5), etc.). Such applications might not be known before the model is constructed (they may be of the form f(x), f(y+z), etc., where x,y,z are still unassigned). |
Implements CVC3::TheoryArith.
Definition at line 2305 of file theory_arith3.cpp.
References CVC3::Theory::assignValue(), DebugAssert, CVC3::Theory::findExpr(), CVC3::isRational(), CVC3::Theory::simplify(), and CVC3::Expr::toString().
void TheoryArith3::checkSat | ( | bool | fullEffort | ) | [virtual] |
Check for satisfiability in the theory.
fullEffort | when it is false, checkSat can do as much or as little work as it likes, though simple inferences and checks for consistency should be done to increase efficiency. If fullEffort is true, checkSat must check whether the set of facts given by assertFact together with the arrangement of shared terms (provided by addSharedTerm) induced by the global find database equivalence relation are satisfiable. If satisfiable, checkSat does nothing. |
Implements CVC3::TheoryArith.
Definition at line 2124 of file theory_arith3.cpp.
References d_buffer, d_bufferIdx, d_diseq, d_diseqIdx, d_inModelCreation, d_rules, CVC3::ArithProofRules::diseqToIneq(), CVC3::Theory::enqueueFact(), CVC3::Theory::inconsistent(), processBuffer(), CVC3::CDList< T >::size(), and CVC3::TRACE.
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 2387 of file theory_arith3.cpp.
References canon(), canonPredEquiv(), CVC3::ArithProofRules::constPredicate(), d_rules, CVC3::DARK_SHADOW, DebugAssert, CVC3::EQ, CVC3::ArithProofRules::flipInequality(), CVC3::GE, CVC3::Theory::getCommonRules(), CVC3::Expr::getKind(), CVC3::Expr::getRational(), CVC3::Theorem::getRHS(), CVC3::GRAY_SHADOW, CVC3::GT, CVC3::CommonProofRules::iffTrue(), CVC3::IS_INTEGER, CVC3::Expr::isAbsLiteral(), CVC3::Expr::isAtomic(), CVC3::Expr::isEq(), CVC3::isGE(), CVC3::isGT(), CVC3::isIneq(), isIntegerDerive(), CVC3::Theory::isLeaf(), CVC3::Theorem::isNull(), CVC3::Expr::isRational(), CVC3::isRational(), CVC3::Expr::isTerm(), CVC3::LE, CVC3::Theory::leavesAreSimp(), CVC3::LT, CVC3::ArithProofRules::negatedInequality(), normalize(), CVC3::NOT, CVC3::Theory::reflexivityRule(), CVC3::CommonProofRules::rewriteUsingSymmetry(), CVC3::ArithProofRules::rightMinusLeft(), CVC3::Expr::setRewriteNormal(), CVC3::Theory::theoryOf(), CVC3::TRACE, CVC3::Theory::transitivityRule(), and CVC3::Theory::typePred().
Referenced by update().
void TheoryArith3::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.
Implements CVC3::TheoryArith.
Definition at line 2512 of file theory_arith3.cpp.
References CVC3::Expr::addToNotify(), CVC3::Expr::arity(), DebugAssert, CVC3::Expr::getKind(), CVC3::int2string(), CVC3::IS_INTEGER, CVC3::isDarkShadow(), CVC3::Expr::isEq(), CVC3::isGrayShadow(), CVC3::isLE(), CVC3::isLT(), CVC3::Expr::isNot(), CVC3::isRational(), CVC3::Expr::isTerm(), CVC3::Expr::toString(), and CVC3::TRACE.
Referenced by setupRec().
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.
Implements CVC3::TheoryArith.
Definition at line 2534 of file theory_arith3.cpp.
References CVC3::Theory::assertEqualities(), CVC3::TheoryArith::canonSimp(), DebugAssert, CVC3::Theory::enqueueFact(), CVC3::Theory::find(), CVC3::Theory::getCommonRules(), CVC3::Theorem::getExpr(), CVC3::Theorem::getLHS(), CVC3::Theorem::getRHS(), CVC3::Expr::hasFind(), IF_DEBUG, CVC3::Theory::iffMP(), CVC3::Theory::inconsistent(), CVC3::isIneq(), CVC3::Theory::leavesAreSimp(), rewrite(), CVC3::Theory::substitutivityRule(), CVC3::Theory::symmetryRule(), CVC3::Expr::toString(), CVC3::TRACE, CVC3::Theory::transitivityRule(), and CVC3::Theory::trueExpr().
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 2569 of file theory_arith3.cpp.
References DebugAssert, doSolve(), CVC3::Theorem::getLHS(), CVC3::Theorem::getRHS(), CVC3::Expr::getType(), CVC3::TheoryArith::intType(), isInteger(), CVC3::Theory::isLeaf(), CVC3::Theory::isLeafIn(), CVC3::Theorem::isRewrite(), CVC3::Expr::isTerm(), and CVC3::Theory::symmetryRule().
void TheoryArith3::checkAssertEqInvariant | ( | const Theorem & | e | ) | [virtual] |
A debug check used by the primary solver.
Implements CVC3::TheoryArith.
Definition at line 2643 of file theory_arith3.cpp.
References CVC3::CommonProofRules::andElim(), CVC3::Expr::arity(), CVC3::TheoryArith::canonSimp(), DebugAssert, CVC3::Theory::getCommonRules(), CVC3::Theorem::getExpr(), CVC3::Theorem::getLHS(), CVC3::Theorem::getRHS(), CVC3::Expr::hasFind(), CVC3::Expr::isFalse(), CVC3::Theory::isLeaf(), CVC3::Theory::isLeafIn(), CVC3::Theorem::isRewrite(), CVC3::Expr::isTerm(), CVC3::Theory::leavesAreSimp(), and CVC3::TheoryArith::recursiveCanonSimpCheck().
void TheoryArith3::checkType | ( | const Expr & | e | ) | [virtual] |
Check that e is a valid Type expr.
Implements CVC3::TheoryArith.
Definition at line 2695 of file theory_arith3.cpp.
References CVC3::Expr::arity(), DebugAssert, CVC3::Theory::getEM(), CVC3::Expr::getKind(), CVC3::Expr::getRational(), CVC3::INT, CVC3::isIntegerConst(), CVC3::REAL, CVC3::SUBRANGE, and CVC3::Expr::toString().
Cardinality TheoryArith3::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 2719 of file theory_arith3.cpp.
References CVC3::CARD_FINITE, CVC3::CARD_INFINITE, CVC3::Expr::getKind(), CVC3::Expr::getRational(), CVC3::Rational::getUnsigned(), CVC3::TheoryArith::rat(), and CVC3::SUBRANGE.
void TheoryArith3::computeType | ( | const Expr & | e | ) | [virtual] |
Compute and store the type of e.
e | is the expression whose type is computed. |
Implements CVC3::TheoryArith.
Definition at line 2747 of file theory_arith3.cpp.
References CVC3::Expr::arity(), CVC3::Theory::boolType(), CVC3::TheoryArith::d_intType, CVC3::TheoryArith::d_realType, CVC3::DARK_SHADOW, DebugAssert, CVC3::DIVIDE, CVC3::GE, CVC3::Theory::getBaseType(), CVC3::Theory::getEM(), CVC3::Expr::getKind(), CVC3::ExprManager::getKindName(), CVC3::Expr::getRational(), CVC3::Expr::getType(), CVC3::GRAY_SHADOW, CVC3::GT, CVC3::IS_INTEGER, isInteger(), CVC3::Rational::isInteger(), CVC3::Expr::isRational(), CVC3::LE, CVC3::LT, CVC3::MINUS, CVC3::MULT, CVC3::PLUS, CVC3::POW, CVC3::RATIONAL_EXPR, CVC3::REAL_CONST, CVC3::Expr::setType(), CVC3::Expr::toString(), CVC3::Type::toString(), and CVC3::UMINUS.
Compute the base type of the top-level operator of an arbitrary type.
Implements CVC3::TheoryArith.
Definition at line 2830 of file theory_arith3.cpp.
References DebugAssert, CVC3::Type::getExpr(), CVC3::Expr::getKind(), IF_DEBUG, CVC3::INT, CVC3::REAL, CVC3::TheoryArith::realType(), CVC3::SUBRANGE, and CVC3::Type::toString().
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 2597 of file theory_arith3.cpp.
References CVC3::Expr::begin(), CVC3::DIVIDE, CVC3::Expr::end(), CVC3::Theory::findExpr(), CVC3::Expr::getKind(), CVC3::MULT, CVC3::PLUS, CVC3::POW, CVC3::RATIONAL_EXPR, CVC3::Expr::toString(), and CVC3::TRACE.
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 2625 of file theory_arith3.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().
Compute and cache the TCC of e.
e | is an expression (term or formula). This function computes the TCC of e which is true iff the expression is defined. |
The default implementation is to compute TCCs recursively for all children, and return their conjunction.
Implements CVC3::TheoryArith.
Definition at line 2839 of file theory_arith3.cpp.
References CVC3::Expr::andExpr(), CVC3::Expr::arity(), CVC3::Theory::computeTCC(), DebugAssert, CVC3::DIVIDE, CVC3::Expr::getKind(), and CVC3::TheoryArith::rat().
ExprStream & TheoryArith3::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 2966 of file theory_arith3.cpp.
References CVC3::Expr::arity(), CVC3::Expr::begin(), CVC3::DARK_SHADOW, CVC3::DIVIDE, CVC3::Expr::end(), CVC3::GE, CVC3::Expr::getKind(), CVC3::Expr::getRational(), CVC3::GRAY_SHADOW, CVC3::GT, CVC3::INT, CVC3::IS_INTEGER, CVC3::isInt(), isInteger(), 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(), CVC3::RATIONAL_EXPR, CVC3::REAL, CVC3::REAL_CONST, CVC3::SIMPLIFY_LANG, CVC3::SMTLIB_LANG, CVC3::space(), CVC3::SUBRANGE, CVC3::TPTP_LANG, and CVC3::UMINUS.
Theory-specific parsing implemented by the DP.
Implements CVC3::TheoryArith.
Definition at line 2855 of file theory_arith3.cpp.
References CVC3::Expr::arity(), CVC3::Expr::begin(), DebugAssert, CVC3::DIVIDE, CVC3::divideExpr(), CVC3::Expr::end(), CVC3::GE, CVC3::geExpr(), CVC3::Expr::getEM(), CVC3::Theory::getEM(), CVC3::ExprManager::getKind(), CVC3::Expr::getKind(), CVC3::GT, CVC3::gtExpr(), CVC3::ID, CVC3::INT, CVC3::INTDIV, CVC3::IS_INTEGER, CVC3::LE, CVC3::leExpr(), CVC3::LT, CVC3::ltExpr(), CVC3::MINUS, CVC3::minusExpr(), CVC3::MOD, CVC3::MULT, CVC3::multExpr(), CVC3::NEGINF, CVC3::ExprManager::newLeafExpr(), CVC3::NULL_KIND, CVC3::Theory::parseExpr(), CVC3::PLUS, CVC3::plusExpr(), CVC3::POSINF, CVC3::POW, CVC3::powExpr(), CVC3::RAW_LIST, CVC3::REAL, CVC3::SUBRANGE, CVC3::Expr::toString(), CVC3::TRACE, CVC3::UMINUS, and CVC3::uminusExpr().
Returns the current maximal coefficient of the variable.
var | the variable. |
Definition at line 1571 of file theory_arith3.cpp.
References CVC3::CDMap< Key, Data, HashFcn >::end(), CVC3::CDMap< Key, Data, HashFcn >::find(), fixedMaxCoefficient, maxCoefficientLeft, and maxCoefficientRight.
Referenced by selectSmallestByCoefficient().
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.
var | the variable | |
max | the value to set it to |
Definition at line 1605 of file theory_arith3.cpp.
References fixedMaxCoefficient.
Referenced by selectSmallestByCoefficient().
void TheoryArith3::selectSmallestByCoefficient | ( | 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 1609 of file theory_arith3.cpp.
References currentMaxCoefficient(), and fixCurrentMaxCoefficient().
Referenced by pickMonomial().
std::ostream& operator<< | ( | std::ostream & | os, | |
const FreeConst & | fc | |||
) | [friend] |
std::ostream& operator<< | ( | std::ostream & | os, | |
const Ineq & | ineq | |||
) | [friend] |
CDList<Theorem> CVC3::TheoryArith3::d_diseq [private] |
Definition at line 29 of file theory_arith3.h.
Referenced by assertFact(), checkSat(), and TheoryArith3().
CDO<size_t> CVC3::TheoryArith3::d_diseqIdx [private] |
ArithProofRules* CVC3::TheoryArith3::d_rules [private] |
Definition at line 31 of file theory_arith3.h.
Referenced by addToBuffer(), assertFact(), canon(), checkSat(), doSolve(), isolateVariable(), normalize(), normalizeProjectIneqs(), processFiniteInterval(), processRealEq(), processSimpleIntEq(), projectInequalities(), rewrite(), TheoryArith3(), and ~TheoryArith3().
CDO<bool> CVC3::TheoryArith3::d_inModelCreation [private] |
Definition at line 32 of file theory_arith3.h.
Referenced by assertFact(), checkSat(), computeModelBasic(), and refineCounterExample().
ExprMap<CDList<Ineq> *> CVC3::TheoryArith3::d_inequalitiesRightDB [private] |
Database of inequalities with a variable isolated on the right.
Definition at line 75 of file theory_arith3.h.
Referenced by findBounds(), processFiniteIntervals(), projectInequalities(), and ~TheoryArith3().
ExprMap<CDList<Ineq> *> CVC3::TheoryArith3::d_inequalitiesLeftDB [private] |
Database of inequalities with a variable isolated on the left.
Definition at line 78 of file theory_arith3.h.
Referenced by findBounds(), processFiniteIntervals(), projectInequalities(), and ~TheoryArith3().
CDMap<Expr, FreeConst> CVC3::TheoryArith3::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 88 of file theory_arith3.h.
Referenced by updateSubsumptionDB().
CDList<Theorem> CVC3::TheoryArith3::d_buffer [private] |
Buffer of input inequalities.
Definition at line 91 of file theory_arith3.h.
Referenced by addToBuffer(), assertFact(), checkSat(), processBuffer(), and TheoryArith3().
CDO<size_t> CVC3::TheoryArith3::d_bufferIdx [private] |
Buffer index of the next unprocessed inequality.
Definition at line 93 of file theory_arith3.h.
Referenced by assertFact(), checkSat(), processBuffer(), and TheoryArith3().
const int* CVC3::TheoryArith3::d_bufferThres [private] |
Threshold when the buffer must be processed.
Definition at line 95 of file theory_arith3.h.
Referenced by assertFact().
CDMap<Expr, int> CVC3::TheoryArith3::d_countRight [private] |
Mapping of a variable to the number of inequalities where the variable would be isolated on the right.
Definition at line 101 of file theory_arith3.h.
Referenced by pickMonomial(), and updateStats().
CDMap<Expr, int> CVC3::TheoryArith3::d_countLeft [private] |
Mapping of a variable to the number of inequalities where the variable would be isolated on the left.
Definition at line 105 of file theory_arith3.h.
Referenced by pickMonomial(), and updateStats().
CDMap<Expr, bool> CVC3::TheoryArith3::d_sharedTerms [private] |
Set of shared terms (for counterexample generation).
Definition at line 108 of file theory_arith3.h.
Referenced by addSharedTerm(), and refineCounterExample().
CDMap<Expr, bool> CVC3::TheoryArith3::d_sharedVars [private] |
VarOrderGraph CVC3::TheoryArith3::d_graph [private] |
Definition at line 131 of file theory_arith3.h.
Referenced by assignVariables(), and pickMonomial().
CDMap<Expr, Rational> CVC3::TheoryArith3::maxCoefficientLeft [private] |
Map from variables to the maximal (by absolute value) of one of it's coefficients
Definition at line 323 of file theory_arith3.h.
Referenced by currentMaxCoefficient(), and updateStats().
CDMap<Expr, Rational> CVC3::TheoryArith3::maxCoefficientRight [private] |
Definition at line 324 of file theory_arith3.h.
Referenced by currentMaxCoefficient(), and updateStats().
CDMap<Expr, Rational> CVC3::TheoryArith3::fixedMaxCoefficient [private] |
Map from variables to the fixed value of one of it's coefficients
Definition at line 327 of file theory_arith3.h.
Referenced by currentMaxCoefficient(), and fixCurrentMaxCoefficient().