CVC3::ArithTheoremProducer Class Reference

#include <arith_theorem_producer.h>

Inheritance diagram for CVC3::ArithTheoremProducer:

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

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


Constructor & Destructor Documentation

CVC3::ArithTheoremProducer::ArithTheoremProducer ( TheoremManager *  tm,
TheoryArith *  theoryArith 
) [inline]

Constructor.

Definition at line 66 of file arith_theorem_producer.h.


Member Function Documentation

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

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

Definition at line 2084 of file arith_theorem_producer.cpp.

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

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

Expr ArithTheoremProducer::create_t ( const Expr &  eqn  )  [private]

Create the term 't'. See eqElimIntRule().

Definition at line 2024 of file arith_theorem_producer.cpp.

References CLASS_NAME, DebugAssert, CVC3::Expr::getRational(), CVC3::isMult(), CVC3::isPlus(), monomialModM(), CVC3::multExpr(), CVC3::plusExpr(), rat(), sumModM(), CVC3::Rational::toString(), and CVC3::Expr::toString().

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

Create the term 't2'. See eqElimIntRule().

Definition at line 2043 of file arith_theorem_producer.cpp.

References DebugAssert, CVC3::Expr::getRational(), CVC3::isPlus(), CVC3::Expr::isRational(), monomialModM(), CVC3::plusExpr(), rat(), sumModM(), and CVC3::Rational::toString().

Referenced by eqElimIntRule().

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

Create the term 't3'. See eqElimIntRule().

Definition at line 2063 of file arith_theorem_producer.cpp.

References DebugAssert, CVC3::Expr::getRational(), CVC3::isPlus(), CVC3::Expr::isRational(), monomialMulF(), CVC3::plusExpr(), rat(), sumMulF(), and CVC3::Rational::toString().

Referenced by eqElimIntRule().

void ArithTheoremProducer::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 2100 of file arith_theorem_producer.cpp.

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

Referenced by create_t(), and create_t2().

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

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

Definition at line 2120 of file arith_theorem_producer.cpp.

References CVC3::Expr::arity(), DebugAssert, CVC3::Expr::getKids(), CVC3::Expr::getRational(), CVC3::isMult(), modEq(), CVC3::multExpr(), rat(), CVC3::Expr::toString(), CVC3::Rational::toString(), and CVC3::TRACE.

Referenced by create_t(), create_t2(), and sumModM().

void ArithTheoremProducer::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 2148 of file arith_theorem_producer.cpp.

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

Referenced by create_t3().

Expr ArithTheoremProducer::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 2168 of file arith_theorem_producer.cpp.

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

Referenced by create_t3(), and sumMulF().

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

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

Definition at line 2093 of file arith_theorem_producer.cpp.

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

Referenced by monomialMulF(), and sumMulF().

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

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

Definition at line 2185 of file arith_theorem_producer.cpp.

References CVC3::ExprMap< Data >::end(), CVC3::ExprMap< Data >::find(), CVC3::isMult(), CVC3::isPlus(), and CVC3::plusExpr().

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

Create Expr from Rational (for convenience).

Definition at line 70 of file arith_theorem_producer.h.

References CVC3::TheoremProducer::d_em, and CVC3::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(), eqElimIntRule(), expandGrayShadow(), expandGrayShadowConst(), grayShadowConst(), integerSplit(), intVarEqnConst(), leftMinusRight(), lessThanToLE(), minusToPlus(), monomialModM(), monomialMulF(), moveSumConstantRight(), rafineStrictInteger(), rightMinusLeft(), sumModM(), sumMulF(), uMinusToMult(), and varToMult().

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

Definition at line 71 of file arith_theorem_producer.h.

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

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

Definition at line 72 of file arith_theorem_producer.h.

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

Referenced by eqElimIntRule().

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

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

Referenced by darkGrayShadow2ab(), darkGrayShadow2ba(), and expandDarkShadow().

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

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

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

Theorem ArithTheoremProducer::varToMult ( const Expr &  e  )  [virtual]

==> e = 1 * e

Implements CVC3::ArithProofRules.

Definition at line 55 of file arith_theorem_producer.cpp.

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

Theorem ArithTheoremProducer::uMinusToMult ( const Expr &  e  )  [virtual]

==> -(e) = (-1) * e

Implements CVC3::ArithProofRules.

Definition at line 62 of file arith_theorem_producer.cpp.

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

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

==> x - y = x + (-1) * y

Implements CVC3::ArithProofRules.

Definition at line 75 of file arith_theorem_producer.cpp.

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

Theorem ArithTheoremProducer::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 89 of file arith_theorem_producer.cpp.

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

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

(c) / d ==> (c/d), takes c and d

Canon Rules for division by constant 'd'

Implements CVC3::ArithProofRules.

Definition at line 98 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CLASS_NAME, CVC3::TheoremProducer::d_hole, CVC3::Assumptions::emptyAssump(), CVC3::Expr::getRational(), CVC3::isRational(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), rat(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

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

(c * x) / d ==> (c/d) * x, takes (c*x) and d

Implements CVC3::ArithProofRules.

Definition at line 117 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CLASS_NAME, CVC3::Assumptions::emptyAssump(), CVC3::Expr::getRational(), CVC3::isMult(), CVC3::isRational(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), rat(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::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 145 of file arith_theorem_producer.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 ArithTheoremProducer::canonDivideVar ( const Expr &  e1,
const Expr &  e2 
) [virtual]

x / d ==> (1/d) * x, takes x and d

Implements CVC3::ArithProofRules.

Definition at line 168 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CLASS_NAME, CVC3::Assumptions::emptyAssump(), CVC3::Expr::getRational(), CVC3::isRational(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), rat(), and CVC3::TheoremProducer::withProof().

bool ArithTheoremProducer::greaterthan ( const Expr &  ,
const Expr &   
) [static]

Definition at line 2211 of file arith_theorem_producer.cpp.

References CVC3::Expr::arity(), CVC3::Expr::begin(), DebugAssert, CVC3::Expr::end(), CVC3::Expr::getKind(), CVC3::Expr::isRational(), CVC3::MULT, CVC3::PLUS, CVC3::POW, and CVC3::RATIONAL_EXPR.

Referenced by MonomialLess::operator()().

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

Definition at line 203 of file arith_theorem_producer.cpp.

References DebugAssert, and CVC3::multExpr().

Referenced by canonMultConstMult(), canonMultLeafLeaf(), canonMultLeafOrPowMult(), canonMultPowLeaf(), and canonMultPowPow().

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

Definition at line 214 of file arith_theorem_producer.cpp.

References CVC3::Expr::arity(), CVC3::Expr::begin(), DebugAssert, CVC3::Expr::end(), CVC3::Expr::getKind(), CVC3::Expr::getRational(), CVC3::isRational(), CVC3::Expr::isRational(), CVC3::MULT, rat(), simplifiedMultExpr(), and CVC3::Expr::toString().

Referenced by canonMultMtermMterm().

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

Definition at line 237 of file arith_theorem_producer.cpp.

References CVC3::Expr::arity(), CVC3::Expr::begin(), canonMultMtermMterm(), d_theoryArith, DebugAssert, CVC3::Expr::end(), CVC3::Expr::getKind(), CVC3::Expr::getOp(), CVC3::Theorem::getRHS(), CVC3::Expr::isRational(), CVC3::PLUS, and CVC3::Theory::substitutivityRule().

Referenced by canonMultMtermMterm().

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

Definition at line 256 of file arith_theorem_producer.cpp.

References DebugAssert, CVC3::Expr::getKind(), CVC3::Expr::getRational(), CVC3::POW, CVC3::powExpr(), rat(), and simplifiedMultExpr().

Referenced by canonMultMtermMterm().

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

Definition at line 296 of file arith_theorem_producer.cpp.

References DebugAssert, CVC3::Expr::getKind(), CVC3::Expr::getRational(), CVC3::POW, CVC3::powExpr(), rat(), and simplifiedMultExpr().

Referenced by canonMultMtermMterm().

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

Definition at line 335 of file arith_theorem_producer.cpp.

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

Referenced by canonMultMtermMterm().

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

Definition at line 363 of file arith_theorem_producer.cpp.

References CVC3::Expr::arity(), CVC3::Expr::begin(), DebugAssert, CVC3::Expr::end(), CVC3::Expr::getKind(), CVC3::Expr::getRational(), CVC3::MULT, CVC3::POW, CVC3::powExpr(), rat(), and simplifiedMultExpr().

Referenced by canonMultMtermMterm().

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

Definition at line 434 of file arith_theorem_producer.cpp.

References CVC3::Expr::begin(), DebugAssert, CVC3::MULT, CVC3::multExpr(), and rat().

Referenced by canonMultLeafOrPowOrMultPlus(), canonMultPlusPlus(), and canonPlus().

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

Definition at line 532 of file arith_theorem_producer.cpp.

References CVC3::Expr::begin(), canonCombineLikeTerms(), canonMultMtermMterm(), DebugAssert, CVC3::Expr::end(), CVC3::Expr::getKind(), and CVC3::PLUS.

Referenced by canonMultMtermMterm().

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

Definition at line 551 of file arith_theorem_producer.cpp.

References CVC3::Expr::begin(), canonCombineLikeTerms(), canonMultMtermMterm(), DebugAssert, CVC3::Expr::end(), CVC3::Expr::getKind(), and CVC3::PLUS.

Referenced by canonMultMtermMterm().

Theorem ArithTheoremProducer::canonMultMtermMterm ( const Expr &  e  )  [virtual]

Implements CVC3::ArithProofRules.

Definition at line 574 of file arith_theorem_producer.cpp.

References CVC3::Expr::begin(), canonMultConstConst(), canonMultConstMult(), canonMultConstPlus(), canonMultLeafLeaf(), canonMultLeafOrPowMult(), canonMultLeafOrPowOrMultPlus(), canonMultOne(), canonMultPlusPlus(), canonMultPowLeaf(), canonMultPowPow(), canonMultZero(), CHECK_PROOFS, CHECK_SOUND, d_theoryArith, CVC3::Assumptions::emptyAssump(), FatalAssert, CVC3::Expr::getKind(), CVC3::Expr::getRational(), CVC3::Theorem::getRHS(), CVC3::isMult(), CVC3::Expr::isRational(), CVC3::MULT, CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), CVC3::PLUS, CVC3::POW, CVC3::RATIONAL_EXPR, CVC3::Theory::reflexivityRule(), and CVC3::TheoremProducer::withProof().

Referenced by canonInvertMult(), canonMult(), canonMultConstPlus(), canonMultLeafOrPowOrMultPlus(), and canonMultPlusPlus().

Theorem ArithTheoremProducer::canonPlus ( const Expr &  e  )  [virtual]

Canonize (PLUS t1 ... tn).

Implements CVC3::ArithProofRules.

Definition at line 746 of file arith_theorem_producer.cpp.

References CVC3::Expr::begin(), canonCombineLikeTerms(), DebugAssert, CVC3::Assumptions::emptyAssump(), CVC3::Expr::end(), CVC3::Expr::getKind(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), CVC3::PLUS, and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::canonInvertConst ( const Expr &  e  )  [virtual]

Definition at line 815 of file arith_theorem_producer.cpp.

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

Referenced by canonInvert().

Theorem ArithTheoremProducer::canonInvertLeaf ( const Expr &  e  )  [virtual]

Definition at line 831 of file arith_theorem_producer.cpp.

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

Referenced by canonInvert().

Theorem ArithTheoremProducer::canonInvertPow ( const Expr &  e  )  [virtual]

Definition at line 843 of file arith_theorem_producer.cpp.

References DebugAssert, CVC3::Assumptions::emptyAssump(), CVC3::Expr::getKind(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), CVC3::POW, CVC3::powExpr(), rat(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

Referenced by canonInvert().

Theorem ArithTheoremProducer::canonInvertMult ( const Expr &  e  )  [virtual]

Definition at line 862 of file arith_theorem_producer.cpp.

References CVC3::Expr::arity(), canonInvert(), canonMultMtermMterm(), DebugAssert, CVC3::Assumptions::emptyAssump(), CVC3::Expr::getKind(), CVC3::Theorem::getRHS(), CVC3::MULT, CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), rat(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

Referenced by canonInvert().

Theorem ArithTheoremProducer::canonInvert ( const Expr &  e  )  [virtual]

==> 1/e = e' where e' is canonical; takes e.

Implements CVC3::ArithProofRules.

Definition at line 885 of file arith_theorem_producer.cpp.

References canonInvertConst(), canonInvertLeaf(), canonInvertMult(), canonInvertPow(), DebugAssert, CVC3::Expr::getKind(), CVC3::MULT, CVC3::PLUS, CVC3::POW, CVC3::RATIONAL_EXPR, and CVC3::Expr::toString().

Referenced by canonDivide(), and canonInvertMult().

Theorem ArithTheoremProducer::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 2577 of file arith_theorem_producer.cpp.

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

Theorem ArithTheoremProducer::canonDivide ( const Expr &  e  )  [virtual]

e[0]/e[1] ==> e[0]*(e[1])^-1

Implements CVC3::ArithProofRules.

Definition at line 907 of file arith_theorem_producer.cpp.

References canonInvert(), canonMult(), d_theoryArith, DebugAssert, CVC3::DIVIDE, CVC3::Assumptions::emptyAssump(), CVC3::Expr::getKind(), CVC3::Theorem::getRHS(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), CVC3::Expr::toString(), CVC3::Theory::transitivityRule(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::canonMult ( const Expr &  e  )  [virtual]

Multiply out the operands of the multiplication (each of them is expected to be canonised

Implements CVC3::ArithProofRules.

Definition at line 781 of file arith_theorem_producer.cpp.

References CVC3::Expr::arity(), CVC3::Expr::begin(), canonMultMtermMterm(), DebugAssert, CVC3::Assumptions::emptyAssump(), CVC3::Expr::end(), CVC3::Expr::getKind(), CVC3::Theorem::getRHS(), CVC3::MULT, CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), and CVC3::TheoremProducer::withProof().

Referenced by canonDivide().

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

t*c ==> c*t, takes constant c and term t

Implements CVC3::ArithProofRules.

Definition at line 931 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CLASS_NAME, CVC3::Assumptions::emptyAssump(), CVC3::isRational(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::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 945 of file arith_theorem_producer.cpp.

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

Theorem ArithTheoremProducer::canonMultZero ( const Expr &  e  )  [virtual]

0*t ==> 0, takes 0*t

Implements CVC3::ArithProofRules.

Definition at line 958 of file arith_theorem_producer.cpp.

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

Referenced by canonMultMtermMterm().

Theorem ArithTheoremProducer::canonMultOne ( const Expr &  e  )  [virtual]

1*t ==> t, takes 1*t

Implements CVC3::ArithProofRules.

Definition at line 967 of file arith_theorem_producer.cpp.

References d_theoryArith, CVC3::Assumptions::emptyAssump(), CVC3::Theory::isLeaf(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), rat(), CVC3::Theory::reflexivityRule(), and CVC3::TheoremProducer::withProof().

Referenced by canonMultMtermMterm().

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

c1*c2 ==> c', takes constant c1*c2

Implements CVC3::ArithProofRules.

Definition at line 983 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CLASS_NAME, CVC3::Assumptions::emptyAssump(), CVC3::Expr::getRational(), CVC3::isRational(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), rat(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

Referenced by canonMultMtermMterm().

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

c1*(c2*t) ==> c'*t, takes c1 and c2 and t

Implements CVC3::ArithProofRules.

Definition at line 1001 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CLASS_NAME, CVC3::Assumptions::emptyAssump(), CVC3::Expr::getRational(), CVC3::isRational(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), rat(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

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

c1*(+ c2 v1 ...) ==> (+ c' c1v1 ...), takes c1 and the sum

Implements CVC3::ArithProofRules.

Definition at line 1021 of file arith_theorem_producer.cpp.

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

Theorem ArithTheoremProducer::canonPowConst ( const Expr &  pow  )  [virtual]

c^n = c' (compute the constant power expression)

Implements CVC3::ArithProofRules.

Definition at line 1043 of file arith_theorem_producer.cpp.

References CVC3::Expr::arity(), CHECK_PROOFS, CHECK_SOUND, CVC3::Assumptions::emptyAssump(), CVC3::Expr::getKind(), CVC3::Expr::getRational(), CVC3::Expr::isRational(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), CVC3::pow(), CVC3::POW, rat(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::canonFlattenSum ( const Expr &  e  )  [virtual]

flattens the input. accepts a PLUS expr

Implements CVC3::ArithProofRules.

Definition at line 1070 of file arith_theorem_producer.cpp.

References CVC3::Expr::begin(), CHECK_PROOFS, CHECK_SOUND, CLASS_NAME, CVC3::Assumptions::emptyAssump(), CVC3::Expr::end(), CVC3::Expr::getKind(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), CVC3::PLUS, CVC3::plusExpr(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::canonComboLikeTerms ( const Expr &  e  )  [virtual]

combine like terms. accepts a flattened PLUS expr

Implements CVC3::ArithProofRules.

Definition at line 1097 of file arith_theorem_producer.cpp.

References CVC3::ExprMap< Data >::begin(), CVC3::Expr::begin(), CHECK_PROOFS, CHECK_SOUND, CLASS_NAME, CVC3::ExprMap< Data >::count(), CVC3::Assumptions::emptyAssump(), CVC3::ExprMap< Data >::end(), CVC3::Expr::end(), CVC3::isMult(), CVC3::isPlus(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), CVC3::plusExpr(), rat(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::constPredicate ( const Expr &  e  )  [virtual]

e0 @ e1 <==> true | false, where @ is {=,<,<=,>,>=}

Parameters:
e takes e is (e0@e1) where e0 and e1 are constants

Implements CVC3::ArithProofRules.

Definition at line 1159 of file arith_theorem_producer.cpp.

References CVC3::Expr::arity(), CHECK_PROOFS, CHECK_SOUND, CLASS_NAME, CVC3::TheoremProducer::d_em, CVC3::Assumptions::emptyAssump(), CVC3::EQ, CVC3::ExprManager::falseExpr(), CVC3::GE, CVC3::Expr::getKind(), CVC3::Expr::getRational(), CVC3::GT, CVC3::isRational(), CVC3::LE, CVC3::LT, CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), CVC3::Expr::toString(), CVC3::ExprManager::trueExpr(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::rightMinusLeft ( const Expr &  e  )  [virtual]

e[0] @ e[1] <==> 0 @ e[1] - e[0], where @ is {=,<,<=,>,>=}

Implements CVC3::ArithProofRules.

Definition at line 1199 of file arith_theorem_producer.cpp.

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

Theorem ArithTheoremProducer::leftMinusRight ( const Expr &  e  )  [virtual]

e[0] @ e[1] <==> e[0] - e[1] @ 0, where @ is {=,<,<=,>,>=}

Implements CVC3::ArithProofRules.

Definition at line 1216 of file arith_theorem_producer.cpp.

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

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

x @ y <==> x + z @ y + z, where @ is {=,<,<=,>,>=} (given as 'kind')

Implements CVC3::ArithProofRules.

Definition at line 1235 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::Assumptions::emptyAssump(), CVC3::EQ, CVC3::GE, CVC3::GT, CVC3::LE, MiniSat::left(), CVC3::LT, CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), MiniSat::right(), and CVC3::TheoremProducer::withProof().

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

x = y <==> x * z = y * z, where z is a non-zero constant

Implements CVC3::ArithProofRules.

Definition at line 1254 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::Assumptions::emptyAssump(), CVC3::Expr::eqExpr(), CVC3::Expr::getRational(), CVC3::Expr::isRational(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::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 1269 of file arith_theorem_producer.cpp.

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

Theorem ArithTheoremProducer::eqToIneq ( const Expr &  e  )  [virtual]

x = y ==> x <= y and x >= y

Implements CVC3::ArithProofRules.

Definition at line 2622 of file arith_theorem_producer.cpp.

References CVC3::andExpr(), CHECK_PROOFS, CHECK_SOUND, CVC3::Assumptions::emptyAssump(), CVC3::geExpr(), CVC3::Expr::isEq(), CVC3::leExpr(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::flipInequality ( const Expr &  e  )  [virtual]

"op1 GE|GT op2" <==> op2 LE|LT op1

Implements CVC3::ArithProofRules.

Definition at line 1347 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::Assumptions::emptyAssump(), CVC3::isGE(), CVC3::isGT(), CVC3::LE, CVC3::LT, CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::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 1367 of file arith_theorem_producer.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 ArithTheoremProducer::realShadow ( const Theorem &  alphaLTt,
const Theorem &  tLTbeta 
) [virtual]

Real shadow: a <(=) t, t <(=) b ==> a <(=) b.

Implements CVC3::ArithProofRules.

Definition at line 1396 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::Theorem::getExpr(), CVC3::Expr::getKind(), CVC3::Theorem::getProof(), CVC3::isLE(), CVC3::isLT(), CVC3::LT, CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newTheorem(), CVC3::Theorem::toString(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::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 1431 of file arith_theorem_producer.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 ArithTheoremProducer::finiteInterval ( const Theorem &  aLEt,
const Theorem &  tLEac,
const Theorem &  isInta,
const Theorem &  isIntt 
) [virtual]

Finite interval for integers: a <= t <= a + c ==> G(t, a, 0, c).

Implements CVC3::ArithProofRules.

Definition at line 1463 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::Theorem::getExpr(), CVC3::Theorem::getProof(), grayShadow(), CVC3::isIntPred(), CVC3::isLE(), CVC3::isPlus(), CVC3::isRational(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newTheorem(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::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 1527 of file arith_theorem_producer.cpp.

References CVC3::Expr::arity(), CHECK_PROOFS, CHECK_SOUND, darkShadow(), CVC3::Theorem::getExpr(), CVC3::Theorem::getProof(), CVC3::Expr::getRational(), grayShadow(), CVC3::isIntPred(), isIntx(), 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 ArithTheoremProducer::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 1610 of file arith_theorem_producer.cpp.

References CVC3::Expr::arity(), CHECK_PROOFS, CHECK_SOUND, darkShadow(), CVC3::Theorem::getExpr(), CVC3::Theorem::getProof(), CVC3::Expr::getRational(), grayShadow(), CVC3::isIntPred(), isIntx(), 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 ArithTheoremProducer::expandDarkShadow ( const Theorem &  darkShadow  )  [virtual]

takes a dark shadow and expands it into an inequality.

Implements CVC3::ArithProofRules.

Definition at line 1695 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, darkShadow(), CVC3::isDarkShadow(), CVC3::leExpr(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newTheorem(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::expandGrayShadow0 ( const Theorem &  grayShadow  )  [virtual]

GRAY_SHADOW(v, e, c, c) ==> v=e+c.

Implements CVC3::ArithProofRules.

Definition at line 1710 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, grayShadow(), CVC3::isGrayShadow(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::splitGrayShadow ( const Theorem &  grayShadow  )  [virtual]

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

Definition at line 1735 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::Theorem::getAssumptionsRef(), CVC3::Theorem::getExpr(), CVC3::Theorem::getProof(), CVC3::Expr::getRational(), grayShadow(), CVC3::isGrayShadow(), CVC3::Rational::isInteger(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newTheorem(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::expandGrayShadow ( const Theorem &  grayShadow  )  [virtual]

G(x, e, c1, c2) ==> e+c1 <= x AND x <= e+c2.

Implements CVC3::ArithProofRules.

Definition at line 1765 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::Theorem::getAssumptionsRef(), CVC3::Theorem::getExpr(), CVC3::Theorem::getProof(), CVC3::Expr::getRational(), CVC3::isGrayShadow(), CVC3::Rational::isInteger(), CVC3::leExpr(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newTheorem(), rat(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::expandGrayShadowConst ( const Theorem &  grayShadow  )  [virtual]

Optimized rules: GRAY_SHADOW(a*x, c, c1, c2) ==> [expansion].

Implements three versions of the rule:

\[\frac{\mathrm{GRAY\_SHADOW}(ax,c,c1,c2)} {ax = c + i - \mathrm{sign}(i)\cdot j(c,i,a) \lor GRAY\_SHADOW(ax, c, i-\mathrm{sign}(i)\cdot (a+j(c,i,a)))}\]

where the conclusion may become FALSE or without the GRAY_SHADOW part, depending on the values of a, c and i.

Implements CVC3::ArithProofRules.

Definition at line 1796 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, constRHSGrayShadow(), CVC3::TheoremProducer::d_em, CVC3::Expr::eqExpr(), CVC3::ExprManager::falseExpr(), CVC3::Theorem::getAssumptionsRef(), CVC3::Theorem::getExpr(), CVC3::Theorem::getProof(), CVC3::Expr::getRational(), CVC3::GRAY_SHADOW, CVC3::isGrayShadow(), CVC3::Rational::isInteger(), CVC3::isMult(), CVC3::Expr::isRational(), CVC3::isRational(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), CVC3::TheoremProducer::newTheorem(), CVC3::Expr::orExpr(), rat(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::grayShadowConst ( const Theorem &  g  )  [virtual]

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

Definition at line 1861 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::TheoremProducer::d_em, d_theoryArith, CVC3::ExprManager::falseExpr(), CVC3::Theorem::getAssumptionsRef(), CVC3::Theorem::getExpr(), CVC3::Theorem::getProof(), CVC3::Expr::getRational(), grayShadow(), CVC3::isGrayShadow(), CVC3::Rational::isInteger(), CVC3::Expr::isRational(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newTheorem(), rat(), CVC3::TheoryArith::separateMonomial(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

Rational ArithTheoremProducer::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 1901 of file arith_theorem_producer.cpp.

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

Referenced by expandGrayShadowConst().

Theorem ArithTheoremProducer::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 1919 of file arith_theorem_producer.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 ArithTheoremProducer::intVarEqnConst ( const Expr &  eqn,
const Theorem &  isIntx 
) [virtual]

Parameters:
eqn is an equation 0 = a.x or 0 = c + a.x
isIntx is a proof of IS_INTEGER(x)
Returns:
the theorem 0 = c + a.x <==> x=-c/a if -c/a is int else return the theorem 0 = c + a.x <==> false.
It also handles the special case of 0 = a.x <==> x = 0

Implements CVC3::ArithProofRules.

Definition at line 1970 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::TheoremProducer::d_em, d_theoryArith, CVC3::Expr::eqExpr(), CVC3::ExprManager::falseExpr(), CVC3::Expr::getRational(), CVC3::isIntPred(), isIntx(), CVC3::isMult(), CVC3::isPlus(), CVC3::isRational(), MiniSat::left(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), rat(), MiniSat::right(), CVC3::TheoryArith::separateMonomial(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

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

\[\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 2335 of file arith_theorem_producer.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(), intType(), CVC3::isDivide(), CVC3::isInt(), CVC3::Rational::isInteger(), CVC3::isIntPred(), isIntx(), CVC3::isPlus(), CVC3::isRational(), CVC3::Theorem::isRewrite(), CVC3::ExprManager::newBoundVarExpr(), CVC3::ExprManager::newClosureExpr(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newTheorem(), rat(), CVC3::TheoryArith::separateMonomial(), CVC3::Expr::setType(), CVC3::Rational::toString(), CVC3::Expr::toString(), CVC3::Theorem::toString(), CVC3::TRACE, and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::isIntConst ( const Expr &  e  )  [virtual]

return e <=> TRUE/FALSE for e == IS_INTEGER(c), where c is a constant

Parameters:
e is a predicate IS_INTEGER(c) where c is a rational constant

Implements CVC3::ArithProofRules.

Definition at line 2427 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::TheoremProducer::d_em, CVC3::Assumptions::emptyAssump(), CVC3::ExprManager::falseExpr(), CVC3::Expr::getRational(), CVC3::isInt(), CVC3::Rational::isInteger(), CVC3::isIntPred(), CVC3::isRational(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), CVC3::ExprManager::trueExpr(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::equalLeaves1 ( const Theorem &  e  )  [virtual]

Implements CVC3::ArithProofRules.

Definition at line 2443 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::Theorem::getAssumptionsRef(), CVC3::Theorem::getProof(), CVC3::Theorem::getRHS(), CVC3::MULT, CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), CVC3::PLUS, CVC3::RATIONAL_EXPR, and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::equalLeaves2 ( const Theorem &  e  )  [virtual]

Implements CVC3::ArithProofRules.

Definition at line 2472 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::Theorem::getAssumptionsRef(), CVC3::Theorem::getProof(), CVC3::Theorem::getRHS(), CVC3::MULT, CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), CVC3::PLUS, CVC3::RATIONAL_EXPR, and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::equalLeaves3 ( const Theorem &  e  )  [virtual]

Implements CVC3::ArithProofRules.

Definition at line 2501 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::Theorem::getAssumptionsRef(), CVC3::Theorem::getProof(), CVC3::Theorem::getRHS(), CVC3::MULT, CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), CVC3::PLUS, CVC3::RATIONAL_EXPR, and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::equalLeaves4 ( const Theorem &  e  )  [virtual]

Implements CVC3::ArithProofRules.

Definition at line 2530 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::Theorem::getAssumptionsRef(), CVC3::Theorem::getProof(), CVC3::Theorem::getRHS(), CVC3::MULT, CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), CVC3::PLUS, CVC3::RATIONAL_EXPR, and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::diseqToIneq ( const Theorem &  diseq  )  [virtual]

x /= y ==> (x < y) OR (x > y)

Used in concrete model generation

Implements CVC3::ArithProofRules.

Definition at line 2558 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::Theorem::getAssumptionsRef(), CVC3::Theorem::getExpr(), CVC3::Theorem::getProof(), CVC3::gtExpr(), CVC3::Expr::isEq(), CVC3::Expr::isNot(), CVC3::ltExpr(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newTheorem(), CVC3::orExpr(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

Theorem ArithTheoremProducer::dummyTheorem ( const Expr &  e  )  [virtual]

Implements CVC3::ArithProofRules.

Definition at line 2643 of file arith_theorem_producer.cpp.

References CVC3::TheoremProducer::d_em, CVC3::Assumptions::emptyAssump(), CVC3::TheoremProducer::newRWTheorem(), and CVC3::ExprManager::trueExpr().

Theorem ArithTheoremProducer::oneElimination ( const Expr &  x  )  [virtual]

Implements CVC3::ArithProofRules.

Definition at line 2648 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::Assumptions::emptyAssump(), CVC3::isMult(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), and CVC3::TheoremProducer::withProof().

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

Implements CVC3::ArithProofRules.

Definition at line 2669 of file arith_theorem_producer.cpp.

References CVC3::Assumptions::add(), CHECK_PROOFS, CHECK_SOUND, CVC3::TheoremProducer::d_em, CVC3::ExprManager::falseExpr(), CVC3::Theorem::getExpr(), CVC3::Expr::getRational(), CVC3::isGE(), CVC3::isGT(), CVC3::isLE(), CVC3::isLT(), CVC3::isRational(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newTheorem(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

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

Implements CVC3::ArithProofRules.

Definition at line 2708 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::Theorem::getExpr(), CVC3::Expr::getKind(), CVC3::Theorem::getProof(), CVC3::GT, CVC3::isGE(), CVC3::isGT(), CVC3::isIneq(), CVC3::isLE(), CVC3::isLT(), CVC3::LT, CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newTheorem(), CVC3::plusExpr(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

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

Implements CVC3::ArithProofRules.

Definition at line 2753 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::Assumptions::emptyAssump(), CVC3::Expr::impExpr(), CVC3::isGE(), CVC3::isGT(), CVC3::isIneq(), CVC3::isLE(), CVC3::isLT(), CVC3::isRational(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newTheorem(), CVC3::Rational::toString(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

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

Implements CVC3::ArithProofRules.

Definition at line 2799 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::Assumptions::emptyAssump(), CVC3::Expr::getRational(), CVC3::Expr::impExpr(), CVC3::isGE(), CVC3::isGT(), CVC3::isIneq(), CVC3::isLE(), CVC3::isLT(), CVC3::isRational(), CVC3::Expr::negate(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newTheorem(), CVC3::Rational::toString(), CVC3::Expr::toString(), and CVC3::TheoremProducer::withProof().

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

Implements CVC3::ArithProofRules.

Definition at line 2844 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::Assumptions::emptyAssump(), CVC3::geExpr(), CVC3::IS_INTEGER, CVC3::Rational::isInteger(), CVC3::leExpr(), CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newTheorem(), CVC3::orExpr(), rat(), CVC3::Rational::toString(), and CVC3::TheoremProducer::withProof().

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

Implements CVC3::ArithProofRules.

Definition at line 2831 of file arith_theorem_producer.cpp.

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

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

Implements CVC3::ArithProofRules.

Definition at line 2863 of file arith_theorem_producer.cpp.

References CHECK_PROOFS, CHECK_SOUND, CVC3::GE, CVC3::Theorem::getAssumptionsRef(), CVC3::Theorem::getExpr(), CVC3::Expr::getKind(), CVC3::Theorem::getProof(), CVC3::Expr::getRational(), CVC3::GT, CVC3::isIneq(), CVC3::Rational::isInteger(), CVC3::isRational(), CVC3::LE, CVC3::LT, CVC3::TheoremProducer::newPf(), CVC3::TheoremProducer::newRWTheorem(), rat(), and CVC3::TheoremProducer::withProof().


Member Data Documentation

TheoryArith* CVC3::ArithTheoremProducer::d_theoryArith [private]

Definition at line 33 of file arith_theorem_producer.h.

Referenced by canonDivide(), canonMultConstPlus(), canonMultMtermMterm(), canonMultOne(), darkShadow(), eqElimIntRule(), grayShadow(), grayShadowConst(), intType(), intVarEqnConst(), and realType().


The documentation for this class was generated from the following files:
Generated on Tue Jul 3 14:41:28 2007 for CVC3 by  doxygen 1.5.1