diff options
author | Morgan Deters <mdeters@cs.nyu.edu> | 2013-06-24 19:35:58 -0400 |
---|---|---|
committer | Morgan Deters <mdeters@cs.nyu.edu> | 2013-06-24 20:07:39 -0400 |
commit | 0a3422299da7e882bae22c5fa3e5ec3c80b42046 (patch) | |
tree | d00f31a33f03f11608ee046b851f4c63e194fe87 /src/smt/smt_engine.cpp | |
parent | 30d21b25af6ee619e5f53d1ca8821b710fad4cb7 (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/smt_engine.cpp')
-rw-r--r-- | src/smt/smt_engine.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
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); } |