CVC3::ArithTheoremProducer3 Class Reference

#include <arith_theorem_producer3.h>

Inheritance diagram for CVC3::ArithTheoremProducer3:
CVC3::ArithProofRules CVC3::TheoremProducer

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 32 of file arith_theorem_producer3.h.


Constructor & Destructor Documentation

CVC3::ArithTheoremProducer3::ArithTheoremProducer3 ( TheoremManager *  tm,
TheoryArith3 *  theoryArith 
) [inline]

Constructor.

Definition at line 66 of file arith_theorem_producer3.h.


Member Function Documentation

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

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

Definition at line 2227 of file arith_theorem_producer3.cpp.

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

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

Expr ArithTheoremProducer3::create_t ( const Expr &  eqn  )  [private]
Expr ArithTheoremProducer3::create_t2 ( const Expr &  lhs,
const Expr &  rhs,
const Expr &  t 
) [private]
Expr ArithTheoremProducer3::create_t3 ( const Expr &  lhs,
const Expr &  rhs,
const Expr &  t 
) [private]
void ArithTheoremProducer3::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 2243 of file arith_theorem_producer3.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 ArithTheoremProducer3::monomialModM ( const Expr &  e,
const Rational &  m,
const Rational &  divisor 
) [private]
void ArithTheoremProducer3::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 2291 of file arith_theorem_producer3.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 ArithTheoremProducer3::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 2311 of file arith_theorem_producer3.cpp.

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

Referenced by create_t3(), and sumMulF().

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

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

Definition at line 2236 of file arith_theorem_producer3.cpp.

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

Referenced by monomialMulF(), and sumMulF().

Expr ArithTheoremProducer3::substitute ( const Expr &  term,
ExprMap< Expr > &  eMap 
) [private]
Expr CVC3::ArithTheoremProducer3::rat ( Rational  r  )  [inline]
Type CVC3::ArithTheoremProducer3::realType (  )  [inline]

Definition at line 71 of file arith_theorem_producer3.h.

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

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

Definition at line 72 of file arith_theorem_producer3.h.

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

Referenced by eqElimIntRule().

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

Construct the dark shadow expression representing lhs <= rhs.

Definition at line 74 of file arith_theorem_producer3.h.

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

Referenced by darkGrayShadow2ab(), and darkGrayShadow2ba().

Expr CVC3::ArithTheoremProducer3::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_producer3.h.

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

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

Theorem ArithTheoremProducer3::varToMult ( const Expr &  e  )  [virtual]
Theorem ArithTheoremProducer3::uMinusToMult ( const Expr &  e  )  [virtual]
Theorem ArithTheoremProducer3::minusToPlus ( const Expr &  x,
const Expr &  y 
) [virtual]
Theorem ArithTheoremProducer3::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 82 of file arith_theorem_producer3.cpp.

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

Theorem ArithTheoremProducer3::canonDivideConst ( const Expr &  c,
const Expr &  d 
) [virtual]
Theorem ArithTheoremProducer3::canonDivideMult ( const Expr &  cx,
const Expr &  d 
) [virtual]
Theorem ArithTheoremProducer3::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 138 of file arith_theorem_producer3.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 ArithTheoremProducer3::canonDivideVar ( const Expr &  e,
const Expr &  d 
) [virtual]
bool ArithTheoremProducer3::greaterthan ( const Expr &  l,
const Expr &  r 
) [static]
Expr ArithTheoremProducer3::simplifiedMultExpr ( std::vector< Expr > &  mulKids  )  [virtual]
Expr ArithTheoremProducer3::canonMultConstMult ( const Expr &  c,
const Expr &  e 
) [virtual]
Expr ArithTheoremProducer3::canonMultConstPlus ( const Expr &  e1,
const Expr &  e2 
) [virtual]
Expr ArithTheoremProducer3::canonMultPowPow ( const Expr &  e1,
const Expr &  e2 
) [virtual]
Expr ArithTheoremProducer3::canonMultPowLeaf ( const Expr &  e1,
const Expr &  e2 
) [virtual]
Expr ArithTheoremProducer3::canonMultLeafLeaf ( const Expr &  e1,
const Expr &  e2 
) [virtual]

Definition at line 329 of file arith_theorem_producer3.cpp.

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

Referenced by canonMultMtermMterm().

Expr ArithTheoremProducer3::canonMultLeafOrPowMult ( const Expr &  e1,
const Expr &  e2 
) [virtual]
Expr ArithTheoremProducer3::canonCombineLikeTerms ( const std::vector< Expr > &  sumExprs  )  [virtual]
Expr ArithTheoremProducer3::canonMultLeafOrPowOrMultPlus ( const Expr &  e1,
const Expr &  e2 
) [virtual]
Expr ArithTheoremProducer3::canonMultPlusPlus ( const Expr &  e1,
const Expr &  e2 
) [virtual]
Theorem ArithTheoremProducer3::canonMultMtermMterm ( const Expr &  e  )  [virtual]
Theorem ArithTheoremProducer3::canonPlus ( const Expr &  e  )  [virtual]
Theorem ArithTheoremProducer3::canonInvertConst ( const Expr &  e  )  [virtual]
Theorem ArithTheoremProducer3::canonInvertLeaf ( const Expr &  e  )  [virtual]
Theorem ArithTheoremProducer3::canonInvertPow ( const Expr &  e  )  [virtual]
Theorem ArithTheoremProducer3::canonInvertMult ( const Expr &  e  )  [virtual]
Theorem ArithTheoremProducer3::canonInvert ( const Expr &  e  )  [virtual]
Theorem ArithTheoremProducer3::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 861 of file arith_theorem_producer3.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 ArithTheoremProducer3::canonDivide ( const Expr &  e  )  [virtual]
Theorem ArithTheoremProducer3::canonMult ( const Expr &  e  )  [virtual]
Theorem ArithTheoremProducer3::canonMultTermConst ( const Expr &  c,
const Expr &  t 
) [virtual]
Theorem ArithTheoremProducer3::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 939 of file arith_theorem_producer3.cpp.

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

Theorem ArithTheoremProducer3::canonMultZero ( const Expr &  e  )  [virtual]
Theorem ArithTheoremProducer3::canonMultOne ( const Expr &  e  )  [virtual]
Theorem ArithTheoremProducer3::canonMultConstConst ( const Expr &  c1,
const Expr &  c2 
) [virtual]
Theorem ArithTheoremProducer3::canonMultConstTerm ( const Expr &  c1,
const Expr &  c2,
const Expr &  t 
) [virtual]
Theorem ArithTheoremProducer3::canonMultConstSum ( const Expr &  c1,
const Expr &  sum 
) [virtual]
Theorem ArithTheoremProducer3::canonPowConst ( const Expr &  pow  )  [virtual]
Theorem ArithTheoremProducer3::canonFlattenSum ( const Expr &  e  )  [virtual]
Theorem ArithTheoremProducer3::canonComboLikeTerms ( const Expr &  e  )  [virtual]
Theorem ArithTheoremProducer3::multEqZero ( const Expr &  expr  )  [virtual]
Theorem ArithTheoremProducer3::powEqZero ( const Expr &  expr  )  [virtual]
Theorem ArithTheoremProducer3::elimPower ( const Expr &  expr  )  [virtual]
Theorem ArithTheoremProducer3::elimPowerConst ( const Expr &  expr,
const Rational &  root 
) [virtual]
Theorem ArithTheoremProducer3::evenPowerEqNegConst ( const Expr &  expr  )  [virtual]
Theorem ArithTheoremProducer3::intEqIrrational ( const Expr &  expr,
const Theorem &  isInt 
) [virtual]
Theorem ArithTheoremProducer3::constPredicate ( const Expr &  e  )  [virtual]
Theorem ArithTheoremProducer3::rightMinusLeft ( const Expr &  e  )  [virtual]
Theorem ArithTheoremProducer3::leftMinusRight ( const Expr &  e  )  [virtual]
Theorem ArithTheoremProducer3::plusPredicate ( const Expr &  x,
const Expr &  y,
const Expr &  z,
int  kind 
) [virtual]
Theorem ArithTheoremProducer3::multEqn ( const Expr &  x,
const Expr &  y,
const Expr &  z 
) [virtual]
Theorem ArithTheoremProducer3::divideEqnNonConst ( const Expr &  x,
const Expr &  y,
const Expr &  z 
) [virtual]
Theorem ArithTheoremProducer3::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 1406 of file arith_theorem_producer3.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 ArithTheoremProducer3::eqToIneq ( const Expr &  e  )  [virtual]
Theorem ArithTheoremProducer3::flipInequality ( const Expr &  e  )  [virtual]
Theorem ArithTheoremProducer3::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 1475 of file arith_theorem_producer3.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 ArithTheoremProducer3::realShadow ( const Theorem &  alphaLTt,
const Theorem &  tLTbeta 
) [virtual]
Theorem ArithTheoremProducer3::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 1539 of file arith_theorem_producer3.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 ArithTheoremProducer3::finiteInterval ( const Theorem &  aLEt,
const Theorem &  tLEac,
const Theorem &  isInta,
const Theorem &  isIntt 
) [virtual]
Theorem ArithTheoremProducer3::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 1635 of file arith_theorem_producer3.cpp.

References CVC3::Expr::arity(), CHECK_PROOFS, CHECK_SOUND, darkShadow(), CVC3::Theorem::getExpr(), CVC3::Theorem::getProof(), CVC3::Expr::getRational(), grayShadow(), CVC3::isIntPred(), CVC3::isLE(), CVC3::isMult(), CVC3::minusExpr(), CVC3::multExpr(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newTheorem(), rat(), CVC3::Expr::toString(), CVC3::Theorem::toString(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer3::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 1726 of file arith_theorem_producer3.cpp.

References CVC3::Expr::arity(), CHECK_PROOFS, CHECK_SOUND, darkShadow(), CVC3::Theorem::getExpr(), CVC3::Theorem::getProof(), CVC3::Expr::getRational(), grayShadow(), CVC3::isIntPred(), CVC3::isLE(), CVC3::isMult(), CVC3::minusExpr(), CVC3::multExpr(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newTheorem(), rat(), CVC3::Expr::toString(), CVC3::Theorem::toString(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer3::expandDarkShadow ( const Theorem &  darkShadow  )  [virtual]
Theorem ArithTheoremProducer3::expandGrayShadow0 ( const Theorem &  g  )  [virtual]
Theorem ArithTheoremProducer3::splitGrayShadow ( const Theorem &  g  )  [virtual]
Theorem ArithTheoremProducer3::splitGrayShadowSmall ( const Theorem &  grayShadow  )  [virtual]

Implements CVC3::ArithProofRules.

Definition at line 3024 of file arith_theorem_producer3.cpp.

References DebugAssert.

Theorem ArithTheoremProducer3::expandGrayShadow ( const Theorem &  g  )  [virtual]
Theorem ArithTheoremProducer3::expandGrayShadowConst ( const Theorem &  g  )  [virtual]
Theorem ArithTheoremProducer3::grayShadowConst ( const Theorem &  g  )  [virtual]
Rational ArithTheoremProducer3::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 2025 of file arith_theorem_producer3.cpp.

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

Referenced by expandGrayShadowConst().

Theorem ArithTheoremProducer3::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 2043 of file arith_theorem_producer3.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 ArithTheoremProducer3::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 3103 of file arith_theorem_producer3.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 ArithTheoremProducer3::intVarEqnConst ( const Expr &  eqn,
const Theorem &  isIntx 
) [virtual]
Theorem ArithTheoremProducer3::IsIntegerElim ( const Theorem &  isIntx  )  [virtual]
Theorem ArithTheoremProducer3::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 2506 of file arith_theorem_producer3.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::TheoryArith3::separateMonomial(), CVC3::Expr::setType(), CVC3::Rational::toString(), CVC3::Expr::toString(), CVC3::Theorem::toString(), CVC3::TRACE, and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer3::isIntConst ( const Expr &  e  )  [virtual]
Theorem ArithTheoremProducer3::equalLeaves1 ( const Theorem &  e  )  [virtual]
Theorem ArithTheoremProducer3::equalLeaves2 ( const Theorem &  e  )  [virtual]
Theorem ArithTheoremProducer3::equalLeaves3 ( const Theorem &  e  )  [virtual]
Theorem ArithTheoremProducer3::equalLeaves4 ( const Theorem &  e  )  [virtual]
Theorem ArithTheoremProducer3::diseqToIneq ( const Theorem &  diseq  )  [virtual]
Theorem ArithTheoremProducer3::dummyTheorem ( const Expr &  e  )  [virtual]
Theorem ArithTheoremProducer3::oneElimination ( const Expr &  x  )  [virtual]
Theorem ArithTheoremProducer3::clashingBounds ( const Theorem &  lowerBound,
const Theorem &  upperBound 
) [virtual]
Theorem ArithTheoremProducer3::addInequalities ( const Theorem &  thm1,
const Theorem &  thm2 
) [virtual]
Theorem ArithTheoremProducer3::addInequalities ( const std::vector< Theorem > &  thms  )  [virtual]

Implements CVC3::ArithProofRules.

Definition at line 3061 of file arith_theorem_producer3.cpp.

References DebugAssert.

Theorem ArithTheoremProducer3::implyWeakerInequality ( const Expr &  expr1,
const Expr &  expr2 
) [virtual]
Theorem ArithTheoremProducer3::implyNegatedInequality ( const Expr &  expr1,
const Expr &  expr2 
) [virtual]
Theorem ArithTheoremProducer3::integerSplit ( const Expr &  intVar,
const Rational &  intPoint 
) [virtual]
Theorem ArithTheoremProducer3::trustedRewrite ( const Expr &  expr1,
const Expr &  expr2 
) [virtual]
Theorem ArithTheoremProducer3::rafineStrictInteger ( const Theorem &  isIntConstrThm,
const Expr &  constr 
) [virtual]
Theorem ArithTheoremProducer3::simpleIneqInt ( const Expr &  ineq,
const Theorem &  isIntRHS 
) [virtual]

Implements CVC3::ArithProofRules.

Definition at line 3073 of file arith_theorem_producer3.cpp.

References DebugAssert.

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

Implements CVC3::ArithProofRules.

Definition at line 3083 of file arith_theorem_producer3.cpp.

References DebugAssert.

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

Implements CVC3::ArithProofRules.

Definition at line 3088 of file arith_theorem_producer3.cpp.

References DebugAssert.

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

Implements CVC3::ArithProofRules.

Definition at line 3093 of file arith_theorem_producer3.cpp.

References DebugAssert.

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

Implements CVC3::ArithProofRules.

Definition at line 3029 of file arith_theorem_producer3.cpp.

References DebugAssert.

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

Implements CVC3::ArithProofRules.

Definition at line 3034 of file arith_theorem_producer3.cpp.

References DebugAssert.

Theorem ArithTheoremProducer3::expandGrayShadowRewrite ( const Expr &  theShadow  )  [virtual]

Implements CVC3::ArithProofRules.

Definition at line 3039 of file arith_theorem_producer3.cpp.

References DebugAssert.

Theorem ArithTheoremProducer3::compactNonLinearTerm ( const Expr &  nonLinear  )  [virtual]

Implements CVC3::ArithProofRules.

Definition at line 3044 of file arith_theorem_producer3.cpp.

References DebugAssert.

Theorem ArithTheoremProducer3::nonLinearIneqSignSplit ( const Theorem &  ineqThm  )  [virtual]

Implements CVC3::ArithProofRules.

Definition at line 3049 of file arith_theorem_producer3.cpp.

References DebugAssert.

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

Implements CVC3::ArithProofRules.

Definition at line 3054 of file arith_theorem_producer3.cpp.

References DebugAssert.

Theorem ArithTheoremProducer3::powerOfOne ( const Expr &  e  )  [virtual]

Implements CVC3::ArithProofRules.

Definition at line 3066 of file arith_theorem_producer3.cpp.

References DebugAssert.


Member Data Documentation


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

Generated on 19 Nov 2009 for CVC3 by  doxygen 1.6.1