summaryrefslogtreecommitdiff
path: root/src/theory/arith/operator_elim.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/theory/arith/operator_elim.cpp')
-rw-r--r--src/theory/arith/operator_elim.cpp92
1 files changed, 54 insertions, 38 deletions
diff --git a/src/theory/arith/operator_elim.cpp b/src/theory/arith/operator_elim.cpp
index 5c43189ea..17efa53a5 100644
--- a/src/theory/arith/operator_elim.cpp
+++ b/src/theory/arith/operator_elim.cpp
@@ -170,21 +170,25 @@ Node OperatorElim::eliminateOperators(Node node,
nm->mkNode(
LT,
num,
- nm->mkNode(MULT,
- den,
- nm->mkNode(PLUS, v, nm->mkConst(Rational(1))))));
+ nm->mkNode(
+ MULT,
+ den,
+ nm->mkNode(
+ PLUS, v, nm->mkConst(CONST_RATIONAL, Rational(1))))));
}
else
{
lem = nm->mkNode(
AND,
leqNum,
- nm->mkNode(
- LT,
- num,
- nm->mkNode(MULT,
- den,
- nm->mkNode(PLUS, v, nm->mkConst(Rational(-1))))));
+ nm->mkNode(LT,
+ num,
+ nm->mkNode(MULT,
+ den,
+ nm->mkNode(PLUS,
+ v,
+ nm->mkConst(CONST_RATIONAL,
+ Rational(-1))))));
}
}
else
@@ -194,30 +198,34 @@ Node OperatorElim::eliminateOperators(Node node,
AND,
nm->mkNode(
IMPLIES,
- nm->mkNode(GT, den, nm->mkConst(Rational(0))),
+ nm->mkNode(GT, den, nm->mkConst(CONST_RATIONAL, Rational(0))),
nm->mkNode(
AND,
leqNum,
nm->mkNode(
LT,
num,
- nm->mkNode(
- MULT,
- den,
- nm->mkNode(PLUS, v, nm->mkConst(Rational(1))))))),
+ nm->mkNode(MULT,
+ den,
+ nm->mkNode(PLUS,
+ v,
+ nm->mkConst(CONST_RATIONAL,
+ Rational(1))))))),
nm->mkNode(
IMPLIES,
- nm->mkNode(LT, den, nm->mkConst(Rational(0))),
+ nm->mkNode(LT, den, nm->mkConst(CONST_RATIONAL, Rational(0))),
nm->mkNode(
AND,
leqNum,
nm->mkNode(
LT,
num,
- nm->mkNode(
- MULT,
- den,
- nm->mkNode(PLUS, v, nm->mkConst(Rational(-1))))))));
+ nm->mkNode(MULT,
+ den,
+ nm->mkNode(PLUS,
+ v,
+ nm->mkConst(CONST_RATIONAL,
+ Rational(-1))))))));
}
Node intVar = mkWitnessTerm(
v, lem, "linearIntDiv", "the result of an intdiv-by-k term", lems);
@@ -251,9 +259,10 @@ Node OperatorElim::eliminateOperators(Node node,
checkNonLinearLogic(node);
Node rw = nm->mkNode(k, num, den);
Node v = bvm->mkBoundVar<ArithWitnessVarAttribute>(rw, nm->realType());
- Node lem = nm->mkNode(IMPLIES,
- den.eqNode(nm->mkConst(Rational(0))).negate(),
- nm->mkNode(MULT, den, v).eqNode(num));
+ Node lem = nm->mkNode(
+ IMPLIES,
+ den.eqNode(nm->mkConst(CONST_RATIONAL, Rational(0))).negate(),
+ nm->mkNode(MULT, den, v).eqNode(num));
return mkWitnessTerm(
v, lem, "nonlinearDiv", "the result of a non-linear div term", lems);
break;
@@ -267,7 +276,8 @@ Node OperatorElim::eliminateOperators(Node node,
{
checkNonLinearLogic(node);
Node divByZeroNum = getArithSkolemApp(num, SkolemFunId::DIV_BY_ZERO);
- Node denEq0 = nm->mkNode(EQUAL, den, nm->mkConst(Rational(0)));
+ Node denEq0 =
+ nm->mkNode(EQUAL, den, nm->mkConst(CONST_RATIONAL, Rational(0)));
ret = nm->mkNode(ITE, denEq0, divByZeroNum, ret);
}
return ret;
@@ -285,7 +295,8 @@ Node OperatorElim::eliminateOperators(Node node,
checkNonLinearLogic(node);
Node intDivByZeroNum =
getArithSkolemApp(num, SkolemFunId::INT_DIV_BY_ZERO);
- Node denEq0 = nm->mkNode(EQUAL, den, nm->mkConst(Rational(0)));
+ Node denEq0 =
+ nm->mkNode(EQUAL, den, nm->mkConst(CONST_RATIONAL, Rational(0)));
ret = nm->mkNode(ITE, denEq0, intDivByZeroNum, ret);
}
return ret;
@@ -302,7 +313,8 @@ Node OperatorElim::eliminateOperators(Node node,
{
checkNonLinearLogic(node);
Node modZeroNum = getArithSkolemApp(num, SkolemFunId::MOD_BY_ZERO);
- Node denEq0 = nm->mkNode(EQUAL, den, nm->mkConst(Rational(0)));
+ Node denEq0 =
+ nm->mkNode(EQUAL, den, nm->mkConst(CONST_RATIONAL, Rational(0)));
ret = nm->mkNode(ITE, denEq0, modZeroNum, ret);
}
return ret;
@@ -311,10 +323,11 @@ Node OperatorElim::eliminateOperators(Node node,
case ABS:
{
- return nm->mkNode(ITE,
- nm->mkNode(LT, node[0], nm->mkConst(Rational(0))),
- nm->mkNode(UMINUS, node[0]),
- node[0]);
+ return nm->mkNode(
+ ITE,
+ nm->mkNode(LT, node[0], nm->mkConst(CONST_RATIONAL, Rational(0))),
+ nm->mkNode(UMINUS, node[0]),
+ node[0]);
break;
}
case SQRT:
@@ -350,10 +363,11 @@ Node OperatorElim::eliminateOperators(Node node,
// satisfiable. On the original formula, this would require that we
// simultaneously interpret sqrt(1) as 1 and -1, which is not a valid
// model.
- lem = nm->mkNode(ITE,
- nm->mkNode(GEQ, node[0], nm->mkConst(Rational(0))),
- nonNeg,
- uf);
+ lem = nm->mkNode(
+ ITE,
+ nm->mkNode(GEQ, node[0], nm->mkConst(CONST_RATIONAL, Rational(0))),
+ nonNeg,
+ uf);
}
else
{
@@ -363,9 +377,10 @@ Node OperatorElim::eliminateOperators(Node node,
Node rlem;
if (k == ARCSINE || k == ARCTANGENT || k == ARCCOSECANT)
{
- Node half = nm->mkConst(Rational(1) / Rational(2));
+ Node half = nm->mkConst(CONST_RATIONAL, Rational(1) / Rational(2));
Node pi2 = nm->mkNode(MULT, half, pi);
- Node npi2 = nm->mkNode(MULT, nm->mkConst(Rational(-1)), pi2);
+ Node npi2 =
+ nm->mkNode(MULT, nm->mkConst(CONST_RATIONAL, Rational(-1)), pi2);
// -pi/2 < var <= pi/2
rlem = nm->mkNode(
AND, nm->mkNode(LT, npi2, var), nm->mkNode(LEQ, var, pi2));
@@ -373,9 +388,10 @@ Node OperatorElim::eliminateOperators(Node node,
else
{
// 0 <= var < pi
- rlem = nm->mkNode(AND,
- nm->mkNode(LEQ, nm->mkConst(Rational(0)), var),
- nm->mkNode(LT, var, pi));
+ rlem = nm->mkNode(
+ AND,
+ nm->mkNode(LEQ, nm->mkConst(CONST_RATIONAL, Rational(0)), var),
+ nm->mkNode(LT, var, pi));
}
Kind rk =
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback