diff options
author | Andres Noetzli <andres.noetzli@gmail.com> | 2020-07-20 19:12:07 -0700 |
---|---|---|
committer | Andres Noetzli <andres.noetzli@gmail.com> | 2020-07-20 19:12:07 -0700 |
commit | 12c4818bc041e43cd5db5ef6fb4fab9b00d10274 (patch) | |
tree | 8c507a9c581c76bb7d9a37890bfbe3e8a86a4bc5 | |
parent | 96c168b25d940ccbb20c80087bc17bf7687cc9ab (diff) |
Fix 4771fix4771
-rw-r--r-- | src/theory/arrays/theory_arrays.cpp | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/src/theory/arrays/theory_arrays.cpp b/src/theory/arrays/theory_arrays.cpp index 37443c070..15c3c9eba 100644 --- a/src/theory/arrays/theory_arrays.cpp +++ b/src/theory/arrays/theory_arrays.cpp @@ -1705,6 +1705,17 @@ void TheoryArrays::checkRIntro1(TNode a, TNode b) if (d_infoMap.getStores(b)->size() > 0) { // Case (a): two stores become equal apply = true; + + /* + if (a.getKind() == kind::STORE && b.getKind() == kind::STORE) + { + if (!d_equalityEngine.areEqual(a[0], b[0])) + { + NodeManager* nm = NodeManager::currentNM(); + d_out->lemma(nm->mkNode(kind::IMPLIES, a.eqNode(b), a[0].eqNode(b[0]))); + } + } + */ } else { const CTNodeList* i_b = d_infoMap.getIndices(b); @@ -1728,10 +1739,16 @@ void TheoryArrays::checkRIntro1(TNode a, TNode b) if (apply) { NodeManager* nm = NodeManager::currentNM(); - d_infoMap.setRIntro1Applied(s); - Node ni = nm->mkNode(kind::SELECT, s, s[1]); - preRegisterTermInternal(ni); - d_equalityEngine.assertEquality(ni.eqNode(s[2]), true, d_true, d_reasonRow1); + + while (s.getKind() == kind::STORE) + { + d_infoMap.setRIntro1Applied(s); + Node ni = nm->mkNode(kind::SELECT, s, s[1]); + preRegisterTermInternal(ni); + d_equalityEngine.assertEquality( + ni.eqNode(s[2]), true, d_true, d_reasonRow1); + s = s[0]; + } } } |