#include <arith_theorem_producer.h>
Inheritance diagram for CVCL::ArithTheoremProducer:
Definition at line 40 of file arith_theorem_producer.h.
|
Constructor.
Definition at line 74 of file arith_theorem_producer.h. |
|
Compute the special modulus: i - m*floor(i/m+1/2).
Definition at line 2019 of file arith_theorem_producer.cpp. References CVCL::floor(), CVCL::Rational::toString(), and CVCL::TRACE. Referenced by f(), and monomialModM(). |
|
Create the term 't'. See eqElimIntRule().
Definition at line 1959 of file arith_theorem_producer.cpp. References CVCL::Expr::getRational(), CVCL::isMult(), CVCL::isPlus(), monomialModM(), CVCL::multExpr(), CVCL::plusExpr(), rat(), sumModM(), CVCL::Rational::toString(), and CVCL::Expr::toString(). |
|
Create the term 't2'. See eqElimIntRule().
Definition at line 1978 of file arith_theorem_producer.cpp. References CVCL::Expr::getRational(), CVCL::isPlus(), CVCL::Expr::isRational(), monomialModM(), CVCL::plusExpr(), rat(), sumModM(), and CVCL::Rational::toString(). |
|
Create the term 't3'. See eqElimIntRule().
Definition at line 1998 of file arith_theorem_producer.cpp. References CVCL::Expr::getRational(), CVCL::isPlus(), CVCL::Expr::isRational(), monomialMulF(), CVCL::plusExpr(), rat(), sumMulF(), and CVCL::Rational::toString(). |
|
Takes sum = a_0 + a_1*x_1+...+a_n*x_n and returns the vector of similar monomials (in 'summands') with coefficients mod(a_i, m). If divide flag is true, the coefficients will be mod(a_i,m)/m.
Referenced by create_t(), and create_t2(). |
|
Compute the special modulus: i - m*floor(i/m+1/2).
Definition at line 2055 of file arith_theorem_producer.cpp. References CVCL::Expr::arity(), CVCL::Expr::getKids(), CVCL::Expr::getRational(), CVCL::isMult(), CVCL::Expr::isNull(), modEq(), CVCL::multExpr(), rat(), CVCL::Expr::toString(), CVCL::Rational::toString(), and CVCL::TRACE. Referenced by create_t(), and create_t2(). |
|
Compute the special modulus: i - m*floor(i/m+1/2).
Referenced by create_t3(). |
|
Compute the special modulus: i - m*floor(i/m+1/2).
Definition at line 2103 of file arith_theorem_producer.cpp. References f(), CVCL::isMult(), CVCL::multExpr(), rat(), and CVCL::Rational::toString(). Referenced by create_t3(). |
|
Compute floor(i/m+1/2) + mod(i,m).
Definition at line 2028 of file arith_theorem_producer.cpp. References CVCL::floor(), modEq(), and CVCL::Rational::toString(). Referenced by monomialMulF(). |
|
Compute the special modulus: i - m*floor(i/m+1/2).
Definition at line 2120 of file arith_theorem_producer.cpp. References CVCL::Expr::begin(), CVCL::Expr::end(), CVCL::ExprMap< Data >::end(), CVCL::ExprMap< Data >::find(), CVCL::isMult(), CVCL::isPlus(), and CVCL::plusExpr(). |
|
Create Expr from Rational (for convenience).
Reimplemented in CVCL::RefinedArithTheoremProducer. Definition at line 78 of file arith_theorem_producer.h. References CVCL::TheoremProducer::d_em, and CVCL::ExprManager::newRatExpr(). Referenced by canonCombineLikeTerms(), canonComboLikeTerms(), canonDivideConst(), canonDivideMult(), canonDividePlus(), canonDivideVar(), canonInvertConst(), canonInvertLeaf(), canonInvertMult(), canonInvertPow(), canonMultConstConst(), canonMultConstMult(), canonMultConstTerm(), canonMultLeafLeaf(), canonMultLeafOrPowMult(), canonMultOne(), canonMultPowLeaf(), canonMultPowPow(), canonMultZero(), canonPowConst(), canonUMinusToDivide(), create_t(), create_t2(), create_t3(), darkGrayShadow2ab(), darkGrayShadow2ba(), expandGrayShadow(), expandGrayShadowConst(), grayShadowConst(), intVarEqnConst(), lessThanToLE(), minusToPlus(), monomialModM(), monomialMulF(), rightMinusLeft(), simplifiedMultExpr(), and uMinusToMult(). |
|
Definition at line 79 of file arith_theorem_producer.h. References d_theoryArith, and CVCL::TheoryArith::realType(). |
|
Definition at line 80 of file arith_theorem_producer.h. References d_theoryArith, and CVCL::TheoryArith::intType(). |
|
Construct the dark shadow expression representing lhs <= rhs.
Definition at line 82 of file arith_theorem_producer.h. References d_theoryArith, and CVCL::TheoryArith::darkShadow(). Referenced by darkGrayShadow2ab(), and darkGrayShadow2ba(). |
|
Construct the gray shadow expression representing c1 <= v - e <= c2. Alternatively, v = e + i for some i s.t. c1 <= i <= c2 Definition at line 88 of file arith_theorem_producer.h. References d_theoryArith, and CVCL::TheoryArith::grayShadow(). Referenced by darkGrayShadow2ab(), darkGrayShadow2ba(), finiteInterval(), grayShadowConst(), and splitGrayShadow(). |
|
==> -(e) = (-1) * e
Implements CVCL::ArithProofRules. Reimplemented in CVCL::RefinedArithTheoremProducer. Definition at line 63 of file arith_theorem_producer.cpp. References CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), rat(), and CVCL::TheoremProducer::withProof(). |
|
==> x - y = x + (-1) * y
Implements CVCL::ArithProofRules. Reimplemented in CVCL::RefinedArithTheoremProducer. Definition at line 72 of file arith_theorem_producer.cpp. References CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), rat(), and CVCL::TheoremProducer::withProof(). |
|
-(e) ==> e / (-1); takes 'e' Canon Rule for unary minus: it just converts it to division by -1, the result is not yet canonical: Implements CVCL::ArithProofRules. Definition at line 83 of file arith_theorem_producer.cpp. References CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), rat(), and CVCL::TheoremProducer::withProof(). |
|
(c) / d ==> (c/d), takes c and d Canon Rules for division by constant 'd' Implements CVCL::ArithProofRules. Definition at line 93 of file arith_theorem_producer.cpp. References CVCL::TheoremProducer::d_hole, CVCL::Expr::getRational(), CVCL::isRational(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), rat(), CVCL::Expr::toString(), and CVCL::TheoremProducer::withProof(). |
|
(c * x) / d ==> (c/d) * x, takes (c*x) and d
Implements CVCL::ArithProofRules. Definition at line 113 of file arith_theorem_producer.cpp. References CVCL::Expr::getRational(), CVCL::isMult(), CVCL::isRational(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), rat(), CVCL::Expr::toString(), and CVCL::TheoremProducer::withProof(). |
|
(+ c ...)/d ==> push division to all the coefficients. The result is not canonical, but canonizing the summands will make it canonical. Takes (+ c ...) and d Implements CVCL::ArithProofRules. Definition at line 142 of file arith_theorem_producer.cpp. References CVCL::Expr::arity(), CVCL::Expr::begin(), CVCL::Expr::end(), CVCL::isPlus(), CVCL::isRational(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), CVCL::plusExpr(), rat(), CVCL::Expr::toString(), and CVCL::TheoremProducer::withProof(). |
|
x / d ==> (1/d) * x, takes x and d
Implements CVCL::ArithProofRules. Definition at line 166 of file arith_theorem_producer.cpp. References CVCL::Expr::getRational(), CVCL::isRational(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), rat(), CVCL::Expr::toString(), and CVCL::TheoremProducer::withProof(). |
|
Definition at line 2146 of file arith_theorem_producer.cpp. References CVCL::Expr::arity(), CVCL::Expr::begin(), CVCL::Expr::end(), CVCL::Expr::getKind(), CVCL::Expr::getRational(), CVCL::Expr::isRational(), CVCL::MULT, CVCL::PLUS, CVCL::POW, and CVCL::RATIONAL_EXPR. Referenced by MonomialLess::operator()(). |
|
Definition at line 202 of file arith_theorem_producer.cpp. References CVCL::multExpr(), and rat(). Referenced by canonMultConstMult(), canonMultLeafLeaf(), canonMultLeafOrPowMult(), canonMultPowLeaf(), and canonMultPowPow(). |
|
Definition at line 215 of file arith_theorem_producer.cpp. References CVCL::Expr::arity(), CVCL::Expr::begin(), CVCL::Expr::end(), CVCL::Expr::getKind(), CVCL::Expr::getRational(), CVCL::Expr::isRational(), CVCL::MULT, rat(), simplifiedMultExpr(), and CVCL::Expr::toString(). Referenced by canonMultMtermMterm(). |
|
Definition at line 237 of file arith_theorem_producer.cpp. References CVCL::Expr::arity(), CVCL::Expr::begin(), canonMultMtermMterm(), d_theoryArith, CVCL::Expr::end(), CVCL::Expr::getKind(), CVCL::Expr::getOp(), CVCL::Theorem::getRHS(), CVCL::Expr::isRational(), CVCL::PLUS, and CVCL::Theory::substitutivityRule(). Referenced by canonMultMtermMterm(). |
|
Definition at line 256 of file arith_theorem_producer.cpp. References CVCL::Expr::getKind(), CVCL::Expr::getRational(), CVCL::POW, CVCL::powExpr(), rat(), and simplifiedMultExpr(). Referenced by canonMultMtermMterm(). |
|
Definition at line 296 of file arith_theorem_producer.cpp. References CVCL::Expr::getKind(), CVCL::Expr::getRational(), CVCL::POW, CVCL::powExpr(), rat(), and simplifiedMultExpr(). Referenced by canonMultMtermMterm(). |
|
Definition at line 335 of file arith_theorem_producer.cpp. References CVCL::powExpr(), rat(), and simplifiedMultExpr(). Referenced by canonMultMtermMterm(). |
|
Definition at line 363 of file arith_theorem_producer.cpp. References CVCL::Expr::arity(), CVCL::Expr::begin(), CVCL::Expr::end(), CVCL::Expr::getKind(), CVCL::Expr::getRational(), CVCL::MULT, CVCL::POW, CVCL::powExpr(), rat(), and simplifiedMultExpr(). Referenced by canonMultMtermMterm(). |
|
Definition at line 435 of file arith_theorem_producer.cpp. References CVCL::Expr::arity(), CVCL::Expr::begin(), canonMultMtermMterm(), CVCL::Expr::end(), CVCL::Expr::getKind(), CVCL::Expr::getRational(), CVCL::Theorem::getRHS(), CVCL::Expr::isRational(), CVCL::MULT, CVCL::multExpr(), CVCL::plusExpr(), and rat(). Referenced by canonMultLeafOrPowOrMultPlus(), canonMultPlusPlus(), and canonPlus(). |
|
Definition at line 516 of file arith_theorem_producer.cpp. References CVCL::Expr::begin(), canonCombineLikeTerms(), canonMultMtermMterm(), CVCL::Expr::end(), CVCL::Expr::getKind(), and CVCL::PLUS. Referenced by canonMultMtermMterm(). |
|
Definition at line 535 of file arith_theorem_producer.cpp. References CVCL::Expr::begin(), canonCombineLikeTerms(), canonMultMtermMterm(), CVCL::Expr::end(), CVCL::Expr::getKind(), and CVCL::PLUS. Referenced by canonMultMtermMterm(). |
|
|
Canonize (PLUS t1 ... tn).
Implements CVCL::ArithProofRules. Reimplemented in CVCL::RefinedArithTheoremProducer. Definition at line 725 of file arith_theorem_producer.cpp. References CVCL::Expr::begin(), canonCombineLikeTerms(), CVCL::Expr::end(), CVCL::Expr::getKind(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), CVCL::PLUS, and CVCL::TheoremProducer::withProof(). Referenced by CVCL::RefinedArithTheoremProducer::canonPlus(). |
|
Canonize (MULT t1 ... tn).
Implements CVCL::ArithProofRules. Definition at line 759 of file arith_theorem_producer.cpp. References CVCL::Expr::arity(), CVCL::Expr::begin(), canonMultMtermMterm(), CVCL::Expr::end(), CVCL::Expr::getKind(), CVCL::Theorem::getRHS(), CVCL::MULT, CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), and CVCL::TheoremProducer::withProof(). Referenced by canonDivide(). |
|
Definition at line 778 of file arith_theorem_producer.cpp. References CVCL::Expr::getRational(), CVCL::isRational(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), rat(), CVCL::Expr::toString(), and CVCL::TheoremProducer::withProof(). Referenced by canonInvert(). |
|
Definition at line 795 of file arith_theorem_producer.cpp. References CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), CVCL::powExpr(), rat(), and CVCL::TheoremProducer::withProof(). Referenced by canonInvert(). |
|
Definition at line 808 of file arith_theorem_producer.cpp. References CVCL::Expr::getKind(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), CVCL::POW, CVCL::powExpr(), rat(), CVCL::Expr::toString(), and CVCL::TheoremProducer::withProof(). Referenced by canonInvert(). |
|
Definition at line 828 of file arith_theorem_producer.cpp. References CVCL::Expr::arity(), canonInvert(), canonMultMtermMterm(), CVCL::Expr::getKind(), CVCL::Theorem::getRHS(), CVCL::MULT, CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), rat(), CVCL::Expr::toString(), and CVCL::TheoremProducer::withProof(). Referenced by canonInvert(). |
|
==> 1/e = e' where e' is canonical; takes e.
Implements CVCL::ArithProofRules. Definition at line 852 of file arith_theorem_producer.cpp. References canonInvertConst(), canonInvertLeaf(), canonInvertMult(), canonInvertPow(), CVCL::Expr::getKind(), CVCL::MULT, CVCL::PLUS, CVCL::POW, CVCL::RATIONAL_EXPR, and CVCL::Expr::toString(). Referenced by canonDivide(), and canonInvertMult(). |
|
Canonize t1/t2.
Implements CVCL::ArithProofRules. Definition at line 875 of file arith_theorem_producer.cpp. References canonInvert(), canonMult(), d_theoryArith, CVCL::DIVIDE, CVCL::Expr::getKind(), CVCL::Theorem::getRHS(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), CVCL::Expr::toString(), CVCL::Theory::transitivityRule(), and CVCL::TheoremProducer::withProof(). |
|
t*c ==> c*t, takes constant c and term t
Implements CVCL::ArithProofRules. Definition at line 894 of file arith_theorem_producer.cpp. References CVCL::isRational(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), CVCL::Expr::toString(), and CVCL::TheoremProducer::withProof(). |
|
t1*t2 ==> Error, takes t1 and t2 where both are non-constants
Implements CVCL::ArithProofRules. Definition at line 909 of file arith_theorem_producer.cpp. References CVCL::Expr::toString(). |
|
0*t ==> 0, takes 0*t
Implements CVCL::ArithProofRules. Definition at line 923 of file arith_theorem_producer.cpp. References CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), rat(), and CVCL::TheoremProducer::withProof(). Referenced by canonMultMtermMterm(). |
|
1*t ==> t, takes 1*t
Implements CVCL::ArithProofRules. Definition at line 932 of file arith_theorem_producer.cpp. References CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), rat(), and CVCL::TheoremProducer::withProof(). Referenced by canonMultMtermMterm(). |
|
c1*c2 ==> c', takes constant c1*c2
Implements CVCL::ArithProofRules. Definition at line 942 of file arith_theorem_producer.cpp. References CVCL::Expr::getRational(), CVCL::isRational(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), rat(), CVCL::Expr::toString(), and CVCL::TheoremProducer::withProof(). Referenced by canonMultMtermMterm(). |
|
c1*(c2*t) ==> c'*t, takes c1 and c2 and t
Implements CVCL::ArithProofRules. Definition at line 961 of file arith_theorem_producer.cpp. References CVCL::Expr::getRational(), CVCL::isRational(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), rat(), CVCL::Expr::toString(), and CVCL::TheoremProducer::withProof(). |
|
c1*(+ c2 v1 ...) ==> (+ c' c1v1 ...), takes c1 and the sum
Implements CVCL::ArithProofRules. Definition at line 982 of file arith_theorem_producer.cpp. References CVCL::Expr::begin(), CVCL::Expr::end(), CVCL::Expr::getKind(), CVCL::isRational(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), CVCL::PLUS, CVCL::plusExpr(), CVCL::Expr::toString(), and CVCL::TheoremProducer::withProof(). |
|
c^n = c' (compute the constant power expression)
Implements CVCL::ArithProofRules. Definition at line 1006 of file arith_theorem_producer.cpp. References CVCL::Expr::arity(), CVCL::Expr::getKind(), CVCL::Expr::getRational(), CVCL::Rational::isInteger(), CVCL::Expr::isRational(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), CVCL::pow(), CVCL::POW, rat(), CVCL::Expr::toString(), and CVCL::TheoremProducer::withProof(). |
|
flattens the input. accepts a PLUS expr
Implements CVCL::ArithProofRules. Definition at line 1029 of file arith_theorem_producer.cpp. References CVCL::Expr::begin(), CVCL::Expr::end(), CVCL::Expr::getKind(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), CVCL::PLUS, CVCL::plusExpr(), CVCL::Expr::toString(), and CVCL::TheoremProducer::withProof(). |
|
combine like terms. accepts a flattened PLUS expr
Implements CVCL::ArithProofRules. Definition at line 1057 of file arith_theorem_producer.cpp. References CVCL::ExprMap< Data >::begin(), CVCL::Expr::begin(), CVCL::ExprMap< Data >::count(), CVCL::ExprMap< Data >::end(), CVCL::Expr::end(), CVCL::isMult(), CVCL::isPlus(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), CVCL::plusExpr(), rat(), and CVCL::TheoremProducer::withProof(). |
|
e0 @ e1 <==> true | false, where @ is {=,<,<=,>,>=}
Implements CVCL::ArithProofRules. Definition at line 1120 of file arith_theorem_producer.cpp. References CVCL::Expr::arity(), CVCL::TheoremProducer::d_em, CVCL::EQ, CVCL::ExprManager::falseExpr(), CVCL::GE, CVCL::Expr::getKind(), CVCL::Expr::getRational(), CVCL::GT, CVCL::isRational(), CVCL::LE, CVCL::LT, CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), CVCL::Expr::toString(), CVCL::ExprManager::trueExpr(), and CVCL::TheoremProducer::withProof(). |
|
e[0] @ e[1] <==> 0 @ e[1] - e[0], where @ is {=,<,<=,>,>=}
Implements CVCL::ArithProofRules. Definition at line 1160 of file arith_theorem_producer.cpp. References CVCL::EQ, CVCL::GE, CVCL::Expr::getKind(), CVCL::Expr::getOp(), CVCL::GT, CVCL::LE, CVCL::LT, CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), rat(), and CVCL::TheoremProducer::withProof(). |
|
x @ y <==> x + z @ y + z, where @ is {=,<,<=,>,>=} (given as 'kind')
Implements CVCL::ArithProofRules. Definition at line 1179 of file arith_theorem_producer.cpp. References CVCL::EQ, CVCL::GE, CVCL::GT, CVCL::LE, CVCL::LT, CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), and CVCL::TheoremProducer::withProof(). |
|
x = y <==> x * z = y * z, where z is a non-zero constant
Implements CVCL::ArithProofRules. Definition at line 1199 of file arith_theorem_producer.cpp. References CVCL::Expr::eqExpr(), CVCL::Expr::getRational(), CVCL::Expr::isRational(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), and CVCL::TheoremProducer::withProof(). |
|
Multiplying inequation by a non-zero constant. z>0 ==> e[0] @ e[1] <==> e[0]*z @ e[1]*z z<0 ==> e[0] @ e[1] <==> e[1]*z @ e[0]*z for @ in {<,<=,>,>=}: Implements CVCL::ArithProofRules. Definition at line 1214 of file arith_theorem_producer.cpp. References CVCL::GE, CVCL::Expr::getKind(), CVCL::Expr::getOp(), CVCL::Expr::getRational(), CVCL::GT, CVCL::Expr::isRational(), CVCL::LE, CVCL::LT, CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), CVCL::Expr::toString(), and CVCL::TheoremProducer::withProof(). |
|
"op1 GE|GT op2" <==> op2 LE|LT op1
Implements CVCL::ArithProofRules. Definition at line 1243 of file arith_theorem_producer.cpp. References CVCL::isGE(), CVCL::isGT(), CVCL::LE, CVCL::LT, CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), CVCL::Expr::toString(), and CVCL::TheoremProducer::withProof(). |
|
Propagating negation over <,<=,>,>=. NOT (op1 < op2) <==> (op1 >= op2) NOT (op1 <= op2) <==> (op1 > op2) NOT (op1 > op2) <==> (op1 <= op2) NOT (op1 >= op2) <==> (op1 < op2) Implements CVCL::ArithProofRules. Definition at line 1264 of file arith_theorem_producer.cpp. References CVCL::GE, CVCL::GT, CVCL::isGT(), CVCL::isIneq(), CVCL::isLE(), CVCL::isLT(), CVCL::Expr::isNot(), CVCL::LE, CVCL::LT, CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), CVCL::Expr::toString(), and CVCL::TheoremProducer::withProof(). |
|
Real shadow: a <(=) t, t <(=) b ==> a <(=) b.
Implements CVCL::ArithProofRules. Definition at line 1294 of file arith_theorem_producer.cpp. References CVCL::Theorem::getExpr(), CVCL::Expr::getKind(), CVCL::Theorem::getProof(), CVCL::isLE(), CVCL::isLT(), CVCL::LT, CVCL::merge(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newTheorem(), CVCL::Theorem::toString(), CVCL::TheoremProducer::withAssumptions(), and CVCL::TheoremProducer::withProof(). |
|
alpha <= t <= alpha ==> t = alpha takes two ineqs "|- alpha LE t" and "|- t LE alpha" and returns "|- t = alpha" Implements CVCL::ArithProofRules. Definition at line 1332 of file arith_theorem_producer.cpp. References CVCL::Theorem::getExpr(), CVCL::Theorem::getProof(), CVCL::isLE(), CVCL::merge(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), CVCL::Theorem::toString(), CVCL::TheoremProducer::withAssumptions(), and CVCL::TheoremProducer::withProof(). |
|
Finite interval for integers: a <= t <= a + c ==> G(t, a, 0, c).
Implements CVCL::ArithProofRules. Definition at line 1367 of file arith_theorem_producer.cpp. References CVCL::Theorem::getExpr(), CVCL::Theorem::getProof(), grayShadow(), CVCL::isIntPred(), CVCL::isLE(), CVCL::isPlus(), CVCL::isRational(), CVCL::merge(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newTheorem(), CVCL::Expr::toString(), CVCL::TheoremProducer::withAssumptions(), and CVCL::TheoremProducer::withProof(). |
|
Dark & Gray shadows when a <= b. takes two integer ineqs (i.e. all vars are ints) "|- beta <= b.x" and "|- a.x <= alpha" and checks if "1 <= a <= b" and returns (D or G) and (!D or !G), where D = Dark_Shadow(ab-1, b.alpha - a.beta), G = Gray_Shadow(a.x, alpha, -(a-1), 0). Implements CVCL::ArithProofRules. Definition at line 1434 of file arith_theorem_producer.cpp. References CVCL::Expr::arity(), b, darkShadow(), CVCL::Theorem::getExpr(), CVCL::Theorem::getProof(), CVCL::Expr::getRational(), grayShadow(), CVCL::isIntPred(), CVCL::isLE(), CVCL::isMult(), CVCL::merge(), CVCL::minusExpr(), CVCL::multExpr(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newTheorem(), rat(), CVCL::Expr::toString(), CVCL::Theorem::toString(), CVCL::TheoremProducer::withAssumptions(), and CVCL::TheoremProducer::withProof(). |
|
Dark & Gray shadows when b <= a. takes two integer ineqs (i.e. all vars are ints) "|- beta <= b.x" and "|- a.x <= alpha" and checks if "1 <= b < a" and returns (D or G) and (!D or !G), where D = Dark_Shadow(ab-1, b.alpha - a.beta), G = Gray_Shadow(b.x, beta, 0, b-1). Implements CVCL::ArithProofRules. Definition at line 1520 of file arith_theorem_producer.cpp. References CVCL::Expr::arity(), b, darkShadow(), CVCL::Theorem::getExpr(), CVCL::Theorem::getProof(), CVCL::Expr::getRational(), grayShadow(), CVCL::isIntPred(), CVCL::isLE(), CVCL::isMult(), CVCL::merge(), CVCL::minusExpr(), CVCL::multExpr(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newTheorem(), rat(), CVCL::Expr::toString(), CVCL::Theorem::toString(), CVCL::TheoremProducer::withAssumptions(), and CVCL::TheoremProducer::withProof(). |
|
takes a dark shadow and expands it into an inequality. Implements CVCL::ArithProofRules. Definition at line 1608 of file arith_theorem_producer.cpp. References CVCL::Theorem::getAssumptionsCopy(), CVCL::Theorem::getExpr(), CVCL::Theorem::getProof(), CVCL::isDarkShadow(), CVCL::leExpr(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newTheorem(), CVCL::Expr::toString(), CVCL::TheoremProducer::withAssumptions(), and CVCL::TheoremProducer::withProof(). |
|
GRAY_SHADOW(v, e, c, c) ==> v=e+c.
Implements CVCL::ArithProofRules. Definition at line 1626 of file arith_theorem_producer.cpp. References CVCL::Theorem::getAssumptionsCopy(), CVCL::Theorem::getExpr(), CVCL::Theorem::getProof(), CVCL::isGrayShadow(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), CVCL::Expr::toString(), CVCL::TheoremProducer::withAssumptions(), and CVCL::TheoremProducer::withProof(). |
|
G(x, e, c1, c2) ==> (G1 or G2) and (!G1 or !G2). Here G1 = G(x,e,c1,c), G2 = G(x,e,c+1,c2), and c = floor((c1+c2)/2). Implements CVCL::ArithProofRules. Definition at line 1654 of file arith_theorem_producer.cpp. References CVCL::floor(), CVCL::Theorem::getAssumptionsCopy(), CVCL::Theorem::getExpr(), CVCL::Theorem::getProof(), CVCL::Expr::getRational(), grayShadow(), CVCL::isGrayShadow(), CVCL::Rational::isInteger(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newTheorem(), CVCL::Expr::toString(), CVCL::TheoremProducer::withAssumptions(), and CVCL::TheoremProducer::withProof(). |
|
G(x, e, c1, c2) ==> e+c1 <= x AND x <= e+c2.
Implements CVCL::ArithProofRules. Definition at line 1687 of file arith_theorem_producer.cpp. References CVCL::Theorem::getAssumptionsCopy(), CVCL::Theorem::getExpr(), CVCL::Theorem::getProof(), CVCL::Expr::getRational(), CVCL::isGrayShadow(), CVCL::Rational::isInteger(), CVCL::leExpr(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newTheorem(), rat(), CVCL::Expr::toString(), CVCL::TheoremProducer::withAssumptions(), and CVCL::TheoremProducer::withProof(). |
|
Optimized rules: GRAY_SHADOW(a*x, c, c1, c2) ==> [expansion]. Implements three versions of the rule:
where the conclusion may become FALSE or without the GRAY_SHADOW part, depending on the values of a, c and i. Implements CVCL::ArithProofRules. Definition at line 1721 of file arith_theorem_producer.cpp. References CVCL::abs(), b, constRHSGrayShadow(), CVCL::TheoremProducer::d_em, CVCL::Expr::eqExpr(), CVCL::ExprManager::falseExpr(), CVCL::Theorem::getAssumptionsCopy(), CVCL::Theorem::getExpr(), CVCL::Theorem::getProof(), CVCL::Expr::getRational(), CVCL::GRAY_SHADOW, CVCL::isGrayShadow(), CVCL::Rational::isInteger(), CVCL::isMult(), CVCL::Expr::isRational(), CVCL::isRational(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), CVCL::TheoremProducer::newTheorem(), CVCL::Expr::orExpr(), rat(), CVCL::Expr::toString(), CVCL::TheoremProducer::withAssumptions(), and CVCL::TheoremProducer::withProof(). |
|
|- G(ax, c, c1, c2) ==> |- G(x, 0, ceil((c1+c)/a), floor((c2+c)/a)) In the case the new c1 > c2, return |- FALSE Implements CVCL::ArithProofRules. Definition at line 1789 of file arith_theorem_producer.cpp. References CVCL::ceil(), CVCL::TheoremProducer::d_em, d_theoryArith, CVCL::ExprManager::falseExpr(), CVCL::floor(), CVCL::Theorem::getAssumptionsCopy(), CVCL::Theorem::getExpr(), CVCL::Theorem::getProof(), CVCL::Expr::getRational(), grayShadow(), CVCL::isGrayShadow(), CVCL::Rational::isInteger(), CVCL::Expr::isRational(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newTheorem(), rat(), CVCL::TheoryArith::separateMonomial(), CVCL::Expr::toString(), CVCL::TheoremProducer::withAssumptions(), and CVCL::TheoremProducer::withProof(). |
|
Implements j(c,b,a). accepts 3 integers a,b,c and returns (b > 0)? (c+b) mod a : (a - (c+b)) mod a Definition at line 1831 of file arith_theorem_producer.cpp. References CVCL::Rational::isInteger(), and CVCL::mod(). Referenced by expandGrayShadowConst(). |
|
Takes a Theorem(\alpha < \beta) and returns Theorem(\alpha < \beta <==> \alpha <= \beta -1) where \alpha and \beta are integer expressions Implements CVCL::ArithProofRules. Definition at line 1849 of file arith_theorem_producer.cpp. References CVCL::Theorem::getExpr(), CVCL::Theorem::getProof(), CVCL::isIntPred(), CVCL::isLT(), CVCL::leExpr(), CVCL::merge(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), rat(), CVCL::Expr::toString(), CVCL::TheoremProducer::withAssumptions(), and CVCL::TheoremProducer::withProof(). |
|
Implements CVCL::ArithProofRules. Definition at line 1903 of file arith_theorem_producer.cpp. References CVCL::Expr::arity(), CVCL::TheoremProducer::d_em, d_theoryArith, CVCL::Expr::eqExpr(), CVCL::ExprManager::falseExpr(), CVCL::Theorem::getAssumptionsCopy(), CVCL::Theorem::getExpr(), CVCL::Theorem::getProof(), CVCL::Expr::getRational(), CVCL::Rational::isInteger(), CVCL::isIntPred(), CVCL::isMult(), CVCL::isPlus(), CVCL::Expr::isRational(), CVCL::isRational(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), rat(), CVCL::TheoryArith::separateMonomial(), CVCL::Expr::toString(), CVCL::TheoremProducer::withAssumptions(), and CVCL::TheoremProducer::withProof(). |
|
Equality elimination rule for integers:
See the detailed description for explanations.
See detailed docs for more information. This rule implements a step in the iterative algorithm for eliminating integer equality. The terms in the rule are defined as follows:
All the variables and coefficients are integer, and a >= 2.
Implements CVCL::ArithProofRules. |
|
return e <=> TRUE/FALSE for e == IS_INTEGER(c), where c is a constant
Implements CVCL::ArithProofRules. Definition at line 2365 of file arith_theorem_producer.cpp. References CVCL::TheoremProducer::d_em, CVCL::ExprManager::falseExpr(), CVCL::Expr::getRational(), CVCL::isInt(), CVCL::Rational::isInteger(), CVCL::isIntPred(), CVCL::isRational(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newRWTheorem(), CVCL::Expr::toString(), CVCL::ExprManager::trueExpr(), and CVCL::TheoremProducer::withProof(). |
|
|
|
|
|
x /= y ==> (x < y) OR (x > y) Used in concrete model generation Implements CVCL::ArithProofRules. Definition at line 2509 of file arith_theorem_producer.cpp. References CVCL::Theorem::getAssumptions(), CVCL::Theorem::getExpr(), CVCL::Theorem::getProof(), CVCL::gtExpr(), CVCL::Expr::isEq(), CVCL::Expr::isNot(), CVCL::ltExpr(), CVCL::TheoremProducer::newPf(), CVCL::TheoremProducer::newTheorem(), CVCL::orExpr(), CVCL::Expr::toString(), CVCL::TheoremProducer::withAssumptions(), and CVCL::TheoremProducer::withProof(). |
|
Definition at line 41 of file arith_theorem_producer.h. Referenced by canonDivide(), canonMultConstPlus(), canonMultMtermMterm(), darkShadow(), grayShadow(), grayShadowConst(), intType(), intVarEqnConst(), and realType(). |