summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/theory/strings/theory_strings.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/theory/strings/theory_strings.cpp b/src/theory/strings/theory_strings.cpp
index 23b818984..24b1887f3 100644
--- a/src/theory/strings/theory_strings.cpp
+++ b/src/theory/strings/theory_strings.cpp
@@ -3075,7 +3075,17 @@ void TheoryStrings::processSimpleNEq( std::vector< std::vector< Node > > &normal
Node length_eq = NodeManager::currentNM()->mkNode( kind::EQUAL, length_term_i, length_term_j );
length_eq = Rewriter::rewrite( length_eq );
//set info
- info.d_conc = NodeManager::currentNM()->mkNode( kind::OR, length_eq, length_eq.negate() );
+ if (TheoryStringsRewriter::checkEntailArith(length_term_i, length_term_j, true)) {
+ info.d_conc = Rewriter::rewrite(NodeManager::currentNM()->mkNode(kind::GT, length_term_i, length_term_j));
+ } else if (TheoryStringsRewriter::checkEntailArith(length_term_i, length_term_j, false)) {
+ info.d_conc = NodeManager::currentNM()->mkNode(kind::OR, length_eq, Rewriter::rewrite(NodeManager::currentNM()->mkNode(kind::GT, length_term_i, length_term_j)));
+ } else if (TheoryStringsRewriter::checkEntailArith(length_term_j, length_term_i, true)) {
+ info.d_conc = Rewriter::rewrite(NodeManager::currentNM()->mkNode(kind::GT, length_term_j, length_term_i));
+ } else if (TheoryStringsRewriter::checkEntailArith(length_term_i, length_term_j, false)) {
+ info.d_conc = NodeManager::currentNM()->mkNode(kind::OR, length_eq, Rewriter::rewrite(NodeManager::currentNM()->mkNode(kind::GT, length_term_j, length_term_i)));
+ } else {
+ info.d_conc = NodeManager::currentNM()->mkNode(kind::OR, length_eq, length_eq.negate());
+ }
info.d_pending_phase[ length_eq ] = true;
info.d_id = INFER_LEN_SPLIT;
info_valid = true;
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback