CVC3::ArithTheoremProducerOld Class Reference

#include <arith_theorem_producer_old.h>

Inheritance diagram for CVC3::ArithTheoremProducerOld:

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

Collaboration graph
[legend]

List of all members.

Public Member Functions

Static Public Member Functions

Private Member Functions

Auxiliary functions for eqElimIntRule()
Methods that compute the subterms used in eqElimIntRule()

Private Attributes


Detailed Description

Definition at line 31 of file arith_theorem_producer_old.h.


Constructor & Destructor Documentation

CVC3::ArithTheoremProducerOld::ArithTheoremProducerOld ( TheoremManager tm,
TheoryArithOld theoryArith 
) [inline]

Constructor.

Definition at line 66 of file arith_theorem_producer_old.h.


Member Function Documentation

Rational ArithTheoremProducerOld::modEq ( const Rational i,
const Rational m 
) [private]

Compute the special modulus: i - m*floor(i/m+1/2).

Definition at line 2429 of file arith_theorem_producer_old.cpp.

References DebugAssert, CVC3::Rational::toString(), and CVC3::TRACE.

Referenced by f(), monomialModM(), and sumModM().

Expr ArithTheoremProducerOld::create_t ( const Expr eqn  )  [private]

Expr ArithTheoremProducerOld::create_t2 ( const Expr lhs,
const Expr rhs,
const Expr t 
) [private]

Expr ArithTheoremProducerOld::create_t3 ( const Expr lhs,
const Expr rhs,
const Expr t 
) [private]

void ArithTheoremProducerOld::sumModM ( std::vector< Expr > &  summands,
const Expr sum,
const Rational m,
const Rational divisor 
) [private]

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.

Definition at line 2445 of file arith_theorem_producer_old.cpp.

References CVC3::Expr::begin(), CLASS_NAME, DebugAssert, CVC3::Expr::end(), CVC3::Expr::getRational(), CVC3::Expr::isRational(), modEq(), monomialModM(), rat(), and CVC3::Rational::toString().

Referenced by create_t(), and create_t2().

Expr ArithTheoremProducerOld::monomialModM ( const Expr e,
const Rational m,
const Rational divisor 
) [private]

void ArithTheoremProducerOld::sumMulF ( std::vector< Expr > &  summands,
const Expr sum,
const Rational m,
const Rational divisor 
) [private]

Compute the special modulus: i - m*floor(i/m+1/2).

Definition at line 2493 of file arith_theorem_producer_old.cpp.

References CVC3::Expr::begin(), CLASS_NAME, DebugAssert, CVC3::Expr::end(), f(), CVC3::Expr::getRational(), CVC3::Expr::isRational(), monomialMulF(), rat(), and CVC3::Rational::toString().

Referenced by create_t3().

Expr ArithTheoremProducerOld::monomialMulF ( const Expr e,
const Rational m,
const Rational divisor 
) [private]

Compute the special modulus: i - m*floor(i/m+1/2).

Definition at line 2513 of file arith_theorem_producer_old.cpp.

References DebugAssert, f(), CVC3::isMult(), CVC3::multExpr(), rat(), and CVC3::Rational::toString().

Referenced by create_t3(), and sumMulF().

Rational ArithTheoremProducerOld::f ( const Rational i,
const Rational m 
) [private]

Compute floor(i/m+1/2) + mod(i,m).

Definition at line 2438 of file arith_theorem_producer_old.cpp.

References DebugAssert, modEq(), and CVC3::Rational::toString().

Referenced by monomialMulF(), and sumMulF().

Expr ArithTheoremProducerOld::substitute ( const Expr term,
ExprMap< Expr > &  eMap 
) [private]

void ArithTheoremProducerOld::getLeaves ( const Expr e,
std::set< Rational > &  s,
ExprHashMap< bool > &  cache 
) [private]

Expr CVC3::ArithTheoremProducerOld::rat ( Rational  r  )  [inline]

Type CVC3::ArithTheoremProducerOld::realType (  )  [inline]

Definition at line 71 of file arith_theorem_producer_old.h.

References d_theoryArith, and CVC3::TheoryArith::realType().

Type CVC3::ArithTheoremProducerOld::intType (  )  [inline]

Definition at line 72 of file arith_theorem_producer_old.h.

References d_theoryArith, and CVC3::TheoryArith::intType().

Referenced by eqElimIntRule().

Expr CVC3::ArithTheoremProducerOld::darkShadow ( const Expr lhs,
const Expr rhs 
) [inline]

Construct the dark shadow expression representing lhs <= rhs.

Definition at line 74 of file arith_theorem_producer_old.h.

References d_theoryArith, and CVC3::TheoryArith::darkShadow().

Expr CVC3::ArithTheoremProducerOld::grayShadow ( const Expr v,
const Expr e,
const Rational c1,
const Rational c2 
) [inline]

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 80 of file arith_theorem_producer_old.h.

References d_theoryArith, and CVC3::TheoryArith::grayShadow().

Referenced by darkGrayShadow2ab(), darkGrayShadow2ba(), finiteInterval(), grayShadowConst(), implyDiffLogicBothBounds(), and splitGrayShadow().

Theorem ArithTheoremProducerOld::varToMult ( const Expr e  )  [virtual]

Theorem ArithTheoremProducerOld::uMinusToMult ( const Expr e  )  [virtual]

Theorem ArithTheoremProducerOld::minusToPlus ( const Expr x,
const Expr y 
) [virtual]

Theorem ArithTheoremProducerOld::canonUMinusToDivide ( const Expr e  )  [virtual]

-(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 CVC3::ArithProofRules.

Definition at line 83 of file arith_theorem_producer_old.cpp.

References CVC3::Assumptions::emptyAssump(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), rat(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducerOld::canonDivideConst ( const Expr c,
const Expr d 
) [virtual]

Theorem ArithTheoremProducerOld::canonDivideMult ( const Expr cx,
const Expr d 
) [virtual]

Theorem ArithTheoremProducerOld::canonDividePlus ( const Expr e,
const Expr d 
) [virtual]

(+ 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 CVC3::ArithProofRules.

Definition at line 139 of file arith_theorem_producer_old.cpp.

References CVC3::Expr::arity(), CVC3::Expr::begin(), CHECK_PROOFS, CHECK_SOUND, CLASS_NAME, CVC3::Assumptions::emptyAssump(), CVC3::Expr::end(), CVC3::isPlus(), CVC3::isRational(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), CVC3::plusExpr(), rat(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducerOld::canonDivideVar ( const Expr e,
const Expr d 
) [virtual]

bool ArithTheoremProducerOld::greaterthan ( const Expr l,
const Expr r 
) [static]

Expr ArithTheoremProducerOld::simplifiedMultExpr ( std::vector< Expr > &  mulKids  )  [virtual]

Expr ArithTheoremProducerOld::canonMultConstMult ( const Expr c,
const Expr e 
) [virtual]

Expr ArithTheoremProducerOld::canonMultConstPlus ( const Expr e1,
const Expr e2 
) [virtual]

Expr ArithTheoremProducerOld::canonMultPowPow ( const Expr e1,
const Expr e2 
) [virtual]

Expr ArithTheoremProducerOld::canonMultPowLeaf ( const Expr e1,
const Expr e2 
) [virtual]

Expr ArithTheoremProducerOld::canonMultLeafLeaf ( const Expr e1,
const Expr e2 
) [virtual]

Definition at line 330 of file arith_theorem_producer_old.cpp.

References CVC3::powExpr(), rat(), and simplifiedMultExpr().

Referenced by canonMultMtermMterm().

Expr ArithTheoremProducerOld::canonMultLeafOrPowMult ( const Expr e1,
const Expr e2 
) [virtual]

Expr ArithTheoremProducerOld::canonCombineLikeTerms ( const std::vector< Expr > &  sumExprs  )  [virtual]

Expr ArithTheoremProducerOld::canonMultLeafOrPowOrMultPlus ( const Expr e1,
const Expr e2 
) [virtual]

Expr ArithTheoremProducerOld::canonMultPlusPlus ( const Expr e1,
const Expr e2 
) [virtual]

Theorem ArithTheoremProducerOld::canonMultMtermMterm ( const Expr e  )  [virtual]

Theorem ArithTheoremProducerOld::canonPlus ( const Expr e  )  [virtual]

Theorem ArithTheoremProducerOld::canonInvertConst ( const Expr e  )  [virtual]

Theorem ArithTheoremProducerOld::canonInvertLeaf ( const Expr e  )  [virtual]

Theorem ArithTheoremProducerOld::canonInvertPow ( const Expr e  )  [virtual]

Theorem ArithTheoremProducerOld::canonInvertMult ( const Expr e  )  [virtual]

Theorem ArithTheoremProducerOld::canonInvert ( const Expr e  )  [virtual]

Theorem ArithTheoremProducerOld::moveSumConstantRight ( const Expr e  )  [virtual]

Transform e = (SUM r t1 ... tn) @ 0 into (SUM t1 ... tn) @ -r. The first sum term (r) must be a rational and t1 ... tn terms must be canonised.

Parameters:
e the expression to transform
Returns:
rewrite theorem representing the transformation

Implements CVC3::ArithProofRules.

Definition at line 911 of file arith_theorem_producer_old.cpp.

References CVC3::Expr::begin(), CHECK_PROOFS, CHECK_SOUND, CVC3::Assumptions::emptyAssump(), CVC3::Expr::end(), CVC3::Expr::getKind(), CVC3::Expr::isEq(), CVC3::isIneq(), CVC3::isPlus(), CVC3::Expr::isRational(), CVC3::isRational(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), CVC3::plusExpr(), rat(), MiniSat::right(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducerOld::canonDivide ( const Expr e  )  [virtual]

Theorem ArithTheoremProducerOld::canonMult ( const Expr e  )  [virtual]

Theorem ArithTheoremProducerOld::canonMultTermConst ( const Expr c,
const Expr t 
) [virtual]

Theorem ArithTheoremProducerOld::canonMultTerm1Term2 ( const Expr t1,
const Expr t2 
) [virtual]

t1*t2 ==> Error, takes t1 and t2 where both are non-constants

Implements CVC3::ArithProofRules.

Definition at line 989 of file arith_theorem_producer_old.cpp.

References CHECK_PROOFS, CHECK_SOUND, and CVC3::Expr::toString().

Theorem ArithTheoremProducerOld::canonMultZero ( const Expr e  )  [virtual]

Theorem ArithTheoremProducerOld::canonMultOne ( const Expr e  )  [virtual]

Theorem ArithTheoremProducerOld::canonMultConstConst ( const Expr c1,
const Expr c2 
) [virtual]

Theorem ArithTheoremProducerOld::canonMultConstTerm ( const Expr c1,
const Expr c2,
const Expr t 
) [virtual]

Theorem ArithTheoremProducerOld::canonMultConstSum ( const Expr c1,
const Expr sum 
) [virtual]

Theorem ArithTheoremProducerOld::canonPowConst ( const Expr pow  )  [virtual]

Theorem ArithTheoremProducerOld::canonFlattenSum ( const Expr e  )  [virtual]

Theorem ArithTheoremProducerOld::canonComboLikeTerms ( const Expr e  )  [virtual]

Theorem ArithTheoremProducerOld::multEqZero ( const Expr expr  )  [virtual]

Theorem ArithTheoremProducerOld::powEqZero ( const Expr expr  )  [virtual]

Theorem ArithTheoremProducerOld::elimPower ( const Expr expr  )  [virtual]

Theorem ArithTheoremProducerOld::elimPowerConst ( const Expr expr,
const Rational root 
) [virtual]

Theorem ArithTheoremProducerOld::evenPowerEqNegConst ( const Expr expr  )  [virtual]

Theorem ArithTheoremProducerOld::intEqIrrational ( const Expr expr,
const Theorem isInt 
) [virtual]

Theorem ArithTheoremProducerOld::constPredicate ( const Expr e  )  [virtual]

Theorem ArithTheoremProducerOld::rightMinusLeft ( const Expr e  )  [virtual]

Theorem ArithTheoremProducerOld::leftMinusRight ( const Expr e  )  [virtual]

Theorem ArithTheoremProducerOld::plusPredicate ( const Expr x,
const Expr y,
const Expr z,
int  kind 
) [virtual]

Theorem ArithTheoremProducerOld::multEqn ( const Expr x,
const Expr y,
const Expr z 
) [virtual]

Theorem ArithTheoremProducerOld::divideEqnNonConst ( const Expr x,
const Expr y,
const Expr z 
) [virtual]

Theorem ArithTheoremProducerOld::multIneqn ( const Expr e,
const Expr z 
) [virtual]

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 CVC3::ArithProofRules.

Definition at line 1474 of file arith_theorem_producer_old.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::Assumptions::emptyAssump(), CVC3::GE, CVC3::Expr::getKind(), CVC3::Expr::getOp(), CVC3::Expr::getRational(), CVC3::GT, CVC3::Expr::isRational(), CVC3::LE, CVC3::LT, CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducerOld::eqToIneq ( const Expr e  )  [virtual]

Theorem ArithTheoremProducerOld::flipInequality ( const Expr e  )  [virtual]

Theorem ArithTheoremProducerOld::negatedInequality ( const Expr e  )  [virtual]

Propagating negation over <,<=,>,>=.

NOT (op1 < op2) <==> (op1 >= op2)

NOT (op1 <= op2) <==> (op1 > op2)

NOT (op1 > op2) <==> (op1 <= op2)

NOT (op1 >= op2) <==> (op1 < op2)

Implements CVC3::ArithProofRules.

Definition at line 1673 of file arith_theorem_producer_old.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::Assumptions::emptyAssump(), CVC3::GE, CVC3::GT, CVC3::isGT(), CVC3::isIneq(), CVC3::isLE(), CVC3::isLT(), CVC3::Expr::isNot(), CVC3::LE, CVC3::LT, CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducerOld::realShadow ( const Theorem alphaLTt,
const Theorem tLTbeta 
) [virtual]

Theorem ArithTheoremProducerOld::realShadowEq ( const Theorem alphaLEt,
const Theorem tLEalpha 
) [virtual]

alpha <= t <= alpha ==> t = alpha

takes two ineqs "|- alpha LE t" and "|- t LE alpha" and returns "|- t = alpha"

Implements CVC3::ArithProofRules.

Definition at line 1737 of file arith_theorem_producer_old.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::Theorem::getExpr(), CVC3::Theorem::getProof(), CVC3::isLE(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), CVC3::Theorem::toString(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducerOld::finiteInterval ( const Theorem aLEt,
const Theorem tLEac,
const Theorem isInta,
const Theorem isIntt 
) [virtual]

Theorem ArithTheoremProducerOld::darkGrayShadow2ab ( const Theorem betaLEbx,
const Theorem axLEalpha,
const Theorem isIntAlpha,
const Theorem isIntBeta,
const Theorem isIntx 
) [virtual]

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 CVC3::ArithProofRules.

Definition at line 1833 of file arith_theorem_producer_old.cpp.

References CHECK_PROOFS, CHECK_SOUND, d_theoryArith, CVC3::geExpr(), CVC3::Theorem::getExpr(), CVC3::Theorem::getProof(), CVC3::Expr::getRational(), grayShadow(), CVC3::isIntPred(), CVC3::isLE(), CVC3::minusExpr(), CVC3::multExpr(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newTheorem(), rat(), CVC3::TheoryArithOld::separateMonomial(), CVC3::Expr::toString(), CVC3::Theorem::toString(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducerOld::darkGrayShadow2ba ( const Theorem betaLEbx,
const Theorem axLEalpha,
const Theorem isIntAlpha,
const Theorem isIntBeta,
const Theorem isIntx 
) [virtual]

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 CVC3::ArithProofRules.

Definition at line 1926 of file arith_theorem_producer_old.cpp.

References CHECK_PROOFS, CHECK_SOUND, d_theoryArith, CVC3::geExpr(), CVC3::Theorem::getExpr(), CVC3::Theorem::getProof(), CVC3::Expr::getRational(), grayShadow(), CVC3::isIntPred(), CVC3::isLE(), CVC3::minusExpr(), CVC3::multExpr(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newTheorem(), rat(), CVC3::TheoryArithOld::separateMonomial(), CVC3::Expr::toString(), CVC3::Theorem::toString(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducerOld::expandDarkShadow ( const Theorem darkShadow  )  [virtual]

Theorem ArithTheoremProducerOld::expandGrayShadow0 ( const Theorem g  )  [virtual]

Theorem ArithTheoremProducerOld::splitGrayShadow ( const Theorem g  )  [virtual]

Theorem ArithTheoremProducerOld::splitGrayShadowSmall ( const Theorem grayShadow  )  [virtual]

Theorem ArithTheoremProducerOld::expandGrayShadow ( const Theorem g  )  [virtual]

Theorem ArithTheoremProducerOld::expandGrayShadowConst ( const Theorem g  )  [virtual]

Theorem ArithTheoremProducerOld::grayShadowConst ( const Theorem g  )  [virtual]

Rational ArithTheoremProducerOld::constRHSGrayShadow ( const Rational c,
const Rational b,
const Rational a 
)

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 2227 of file arith_theorem_producer_old.cpp.

References DebugAssert, and CVC3::Rational::isInteger().

Referenced by expandGrayShadowConst().

Theorem ArithTheoremProducerOld::lessThanToLE ( const Theorem less,
const Theorem isIntLHS,
const Theorem isIntRHS,
bool  changeRight 
) [virtual]

Takes a Theorem(\alpha < \beta) and returns Theorem(\alpha < \beta <==> \alpha <= \beta -1) where \alpha and \beta are integer expressions

Implements CVC3::ArithProofRules.

Definition at line 2245 of file arith_theorem_producer_old.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::Theorem::getExpr(), CVC3::Theorem::getProof(), CVC3::isIntPred(), CVC3::isLT(), CVC3::leExpr(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), rat(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducerOld::lessThanToLERewrite ( const Expr ineq,
const Theorem isIntLHS,
const Theorem isIntRHS,
bool  changeRight 
) [virtual]

Takes a Theorem(\alpha < \beta) and returns Theorem(\alpha < \beta <==> \alpha <= \beta -1) where \alpha and \beta are integer expressions

Implements CVC3::ArithProofRules.

Definition at line 3416 of file arith_theorem_producer_old.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::Theorem::getExpr(), CVC3::Theorem::getProof(), CVC3::isIntPred(), CVC3::isLT(), CVC3::leExpr(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), rat(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducerOld::intVarEqnConst ( const Expr eqn,
const Theorem isIntx 
) [virtual]

Theorem ArithTheoremProducerOld::IsIntegerElim ( const Theorem isIntx  )  [virtual]

Theorem ArithTheoremProducerOld::eqElimIntRule ( const Theorem eqn,
const Theorem isIntx,
const std::vector< Theorem > &  isIntVars 
) [virtual]

Equality elimination rule for integers:

\[\frac{\mathsf{int}(a\cdot x)\quad \mathsf{int}(C+\sum_{i=1}^{n}a_{i}\cdot x_{i})} {a\cdot x=C+\sum_{i=1}^{n}a_{i}\cdot x_{i} \quad\equiv\quad x=t_{2}\wedge 0=t_{3}} \]

See the detailed description for explanations.

This rule implements a step in the iterative algorithm for eliminating integer equality. The terms in the rule are defined as follows:

\[\begin{array}{rcl} t_{2} & = & -(C\ \mathbf{mod}\ m+\sum_{i=1}^{n}(a_{i}\ \mathbf{mod}\ m) \cdot x_{i}-m\cdot\sigma(t))\\ & & \\ t_{3} & = & \mathbf{f}(C,m)+\sum_{i=1}^{n}\mathbf{f}(a_{i},m)\cdot x_{i} -a\cdot\sigma(t)\\ & & \\ t & = & (C\ \mathbf{mod}\ m+\sum_{i=1}^{n}(a_{i}\ \mathbf{mod}\ m) \cdot x_{i}+x)/m\\ & & \\ m & = & a+1\\ & & \\ \mathbf{f}(i,m) & = & \left\lfloor \frac{i}{m} +\frac{1}{2}\right\rfloor +i\ \mathbf{mod}\ m\\ & & \\ i\ \mathbf{mod}\ m & = & i-m\left\lfloor\frac{i}{m} +\frac{1}{2}\right\rfloor \end{array} \]

All the variables and coefficients are integer, and a >= 2.

Parameters:
eqn is the equation

\[a\cdot x = C + \sum_{i=1}^n a_i\cdot x_i.\]

\[\frac{\Gamma\models ax=t\quad \Gamma'\models\mathsf{int}(x)\quad \{\Gamma_i\models\mathsf{int}(x_i) | x_i\mbox{ is var in }t\}} {\Gamma,\Gamma',\bigcup_i\Gamma_i\models \exists (y:\mathrm{int}).\ x=t_2(y)\wedge 0=t_3(y)} \]

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:

\[\begin{array}{rcl} t & = & C+\sum_{i=1}^na_{i}\cdot x_{i}\\ t_{2}(y) & = & -(C\ \mathbf{mod}\ m+\sum_{i=1}^{n}(a_{i}\ \mathbf{mod}\ m) \cdot x_{i}-m\cdot y)\\ & & \\ t_{3}(y) & = & \mathbf{f}(C,m)+\sum_{i=1}^{n}\mathbf{f}(a_{i},m)\cdot x_{i} -a\cdot y\\ & & \\ m & = & a+1\\ & & \\ \mathbf{f}(i,m) & = & \left\lfloor \frac{i}{m} +\frac{1}{2}\right\rfloor +i\ \mathbf{mod}\ m\\ & & \\ i\ \mathbf{mod}\ m & = & i-m\left\lfloor\frac{i}{m} +\frac{1}{2}\right\rfloor \end{array} \]

All the variables and coefficients are integer, and a >= 2.

Parameters:
eqn is the equation ax=t:

\[a\cdot x = C + \sum_{i=1}^n a_i\cdot x_i.\]

isIntx is a Theorem deriving the integrality of the LHS variable: IS_INTEGER(x)
isIntVars is a vector of Theorems deriving the integrality of all variables on the RHS

Implements CVC3::ArithProofRules.

Definition at line 2708 of file arith_theorem_producer_old.cpp.

References CVC3::Expr::arity(), CHECK_PROOFS, CHECK_SOUND, create_t2(), create_t3(), CVC3::TheoremProducer::d_em, d_theoryArith, CVC3::Expr::eqExpr(), CVC3::EXISTS, CVC3::Theorem::getExpr(), CVC3::Theorem::getLHS(), CVC3::Theorem::getProof(), CVC3::Expr::getRational(), CVC3::Theorem::getRHS(), CVC3::int2string(), intType(), CVC3::isDivide(), CVC3::isInt(), CVC3::Rational::isInteger(), CVC3::isIntPred(), CVC3::isPlus(), CVC3::isRational(), CVC3::Theorem::isRewrite(), CVC3::ExprManager::newBoundVarExpr(), CVC3::ExprManager::newClosureExpr(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newTheorem(), rat(), CVC3::TheoryArithOld::separateMonomial(), CVC3::Expr::setType(), CVC3::Rational::toString(), CVC3::Expr::toString(), CVC3::Theorem::toString(), CVC3::TRACE, and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducerOld::isIntConst ( const Expr e  )  [virtual]

Theorem ArithTheoremProducerOld::equalLeaves1 ( const Theorem e  )  [virtual]

Theorem ArithTheoremProducerOld::equalLeaves2 ( const Theorem e  )  [virtual]

Theorem ArithTheoremProducerOld::equalLeaves3 ( const Theorem e  )  [virtual]

Theorem ArithTheoremProducerOld::equalLeaves4 ( const Theorem e  )  [virtual]

Theorem ArithTheoremProducerOld::diseqToIneq ( const Theorem diseq  )  [virtual]

Theorem ArithTheoremProducerOld::dummyTheorem ( const Expr e  )  [virtual]

Theorem ArithTheoremProducerOld::oneElimination ( const Expr x  )  [virtual]

Theorem ArithTheoremProducerOld::clashingBounds ( const Theorem lowerBound,
const Theorem upperBound 
) [virtual]

Theorem ArithTheoremProducerOld::addInequalities ( const Theorem thm1,
const Theorem thm2 
) [virtual]

Theorem ArithTheoremProducerOld::addInequalities ( const std::vector< Theorem > &  thms  )  [virtual]

Theorem ArithTheoremProducerOld::implyWeakerInequality ( const Expr expr1,
const Expr expr2 
) [virtual]

Theorem ArithTheoremProducerOld::implyNegatedInequality ( const Expr expr1,
const Expr expr2 
) [virtual]

Theorem ArithTheoremProducerOld::integerSplit ( const Expr intVar,
const Rational intPoint 
) [virtual]

Theorem ArithTheoremProducerOld::trustedRewrite ( const Expr expr1,
const Expr expr2 
) [virtual]

Theorem ArithTheoremProducerOld::rafineStrictInteger ( const Theorem isIntConstrThm,
const Expr constr 
) [virtual]

Theorem ArithTheoremProducerOld::simpleIneqInt ( const Expr ineq,
const Theorem isIntRHS 
) [virtual]

Theorem ArithTheoremProducerOld::intEqualityRationalConstant ( const Theorem isIntConstrThm,
const Expr constr 
) [virtual]

Theorem ArithTheoremProducerOld::cycleConflict ( const std::vector< Theorem > &  inequalitites  )  [virtual]

Theorem ArithTheoremProducerOld::implyEqualities ( const std::vector< Theorem > &  inequalities  )  [virtual]

Theorem ArithTheoremProducerOld::implyWeakerInequalityDiffLogic ( const std::vector< Theorem > &  antecedentThms,
const Expr implied 
) [virtual]

Theorem ArithTheoremProducerOld::implyNegatedInequalityDiffLogic ( const std::vector< Theorem > &  antecedentThms,
const Expr implied 
) [virtual]

Theorem ArithTheoremProducerOld::expandGrayShadowRewrite ( const Expr theShadow  )  [virtual]

Theorem ArithTheoremProducerOld::compactNonLinearTerm ( const Expr nonLinear  )  [virtual]

Theorem ArithTheoremProducerOld::nonLinearIneqSignSplit ( const Theorem ineqThm  )  [virtual]

Theorem ArithTheoremProducerOld::implyDiffLogicBothBounds ( const Expr x,
std::vector< Theorem > &  c1_le_x,
Rational  c1,
std::vector< Theorem > &  x_le_c2,
Rational  c2 
) [virtual]

Theorem ArithTheoremProducerOld::powerOfOne ( const Expr e  )  [virtual]

Theorem ArithTheoremProducerOld::rewriteLeavesConst ( const Expr e  )  [virtual]


Member Data Documentation


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

Generated on Thu Oct 15 22:26:00 2009 for CVC3 by  doxygen 1.5.8