summaryrefslogtreecommitdiff
path: root/src/smt
diff options
context:
space:
mode:
authorMorgan Deters <mdeters@cs.nyu.edu>2013-06-24 19:35:58 -0400
committerMorgan Deters <mdeters@cs.nyu.edu>2013-06-24 20:07:39 -0400
commit0a3422299da7e882bae22c5fa3e5ec3c80b42046 (patch)
treed00f31a33f03f11608ee046b851f4c63e194fe87 /src/smt
parent30d21b25af6ee619e5f53d1ca8821b710fad4cb7 (diff)
Support for abs, to_int, is_int, divisible in SMT-LIB; also --rewrite-divk allows linearization of div,mod,/ by a constant.
Diffstat (limited to 'src/smt')
-rw-r--r--src/smt/boolean_terms.cpp3
-rw-r--r--src/smt/smt_engine.cpp9
2 files changed, 10 insertions, 2 deletions
diff --git a/src/smt/boolean_terms.cpp b/src/smt/boolean_terms.cpp
index b3e69619f..80518fcdf 100644
--- a/src/smt/boolean_terms.cpp
+++ b/src/smt/boolean_terms.cpp
@@ -736,7 +736,8 @@ Node BooleanTermConverter::rewriteBooleanTermsRec(TNode top, theory::TheoryId pa
k != kind::TUPLE_SELECT &&
k != kind::TUPLE_UPDATE &&
k != kind::RECORD_SELECT &&
- k != kind::RECORD_UPDATE) {
+ k != kind::RECORD_UPDATE &&
+ k != kind::DIVISIBLE) {
Debug("bt") << "rewriting: " << top.getOperator() << endl;
result.top() << rewriteBooleanTermsRec(top.getOperator(), theory::THEORY_BUILTIN, quantBoolVars);
Debug("bt") << "got: " << result.top().getOperator() << endl;
diff --git a/src/smt/smt_engine.cpp b/src/smt/smt_engine.cpp
index ca89ce36d..2d2e8e099 100644
--- a/src/smt/smt_engine.cpp
+++ b/src/smt/smt_engine.cpp
@@ -1366,6 +1366,7 @@ Node SmtEnginePrivate::expandDefinitions(TNode n, hash_map<Node, Node, NodeHashF
node = expandBVDivByZero(node);
break;
}
+
case kind::DIVISION: {
// partial function: division
if(d_divByZero.isNull()) {
@@ -1423,6 +1424,12 @@ Node SmtEnginePrivate::expandDefinitions(TNode n, hash_map<Node, Node, NodeHashF
break;
}
+ case kind::ABS: {
+ Node out = nm->mkNode(kind::ITE, nm->mkNode(kind::LT, node[0], nm->mkConst(Rational(0))), nm->mkNode(kind::UMINUS, node[0]), node[0]);
+ cache[n] = out;
+ return out;
+ }
+
case kind::APPLY: {
// application of a user-defined symbol
TNode func = n.getOperator();
@@ -2691,7 +2698,7 @@ void SmtEnginePrivate::processAssertions() {
Trace("simplify") << "SmtEnginePrivate::simplify(): expanding definitions" << endl;
TimerStat::CodeTimer codeTimer(d_smt.d_stats->d_definitionExpansionTime);
hash_map<Node, Node, NodeHashFunction> cache;
- for (unsigned i = 0; i < d_assertionsToPreprocess.size(); ++ i) {
+ for(unsigned i = 0; i < d_assertionsToPreprocess.size(); ++ i) {
d_assertionsToPreprocess[i] =
expandDefinitions(d_assertionsToPreprocess[i], cache);
}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback