summaryrefslogtreecommitdiff
path: root/src/theory
diff options
context:
space:
mode:
Diffstat (limited to 'src/theory')
-rw-r--r--src/theory/strings/base_solver.cpp10
-rw-r--r--src/theory/strings/base_solver.h6
-rw-r--r--src/theory/strings/core_solver.cpp2
-rw-r--r--src/theory/strings/theory_strings.cpp11
4 files changed, 17 insertions, 12 deletions
diff --git a/src/theory/strings/base_solver.cpp b/src/theory/strings/base_solver.cpp
index 69d41e9d7..69d50a7d9 100644
--- a/src/theory/strings/base_solver.cpp
+++ b/src/theory/strings/base_solver.cpp
@@ -46,7 +46,7 @@ void BaseSolver::checkInit()
// build term index
d_eqcInfo.clear();
d_termIndex.clear();
- d_stringsEqc.clear();
+ d_stringLikeEqc.clear();
Trace("strings-base") << "BaseSolver::checkInit" << std::endl;
// count of congruent, non-congruent per operator (independent of type),
@@ -65,7 +65,7 @@ void BaseSolver::checkInit()
std::map<Kind, TermIndex>& tti = d_termIndex[tn];
if (tn.isStringLike())
{
- d_stringsEqc.push_back(eqc);
+ d_stringLikeEqc.push_back(eqc);
emps = Word::mkEmptyWord(tn);
}
Node var;
@@ -512,7 +512,7 @@ void BaseSolver::checkCardinality()
// between lengths of string terms that are disequal (DEQ-LENGTH-SP).
std::map<TypeNode, std::vector<std::vector<Node> > > cols;
std::map<TypeNode, std::vector<Node> > lts;
- d_state.separateByLength(d_stringsEqc, cols, lts);
+ d_state.separateByLength(d_stringLikeEqc, cols, lts);
for (std::pair<const TypeNode, std::vector<std::vector<Node> > >& c : cols)
{
checkCardinalityType(c.first, c.second, lts[c.first]);
@@ -759,9 +759,9 @@ Node BaseSolver::explainBestContentEqc(Node n, Node eqc, std::vector<Node>& exp)
return Node::null();
}
-const std::vector<Node>& BaseSolver::getStringEqc() const
+const std::vector<Node>& BaseSolver::getStringLikeEqc() const
{
- return d_stringsEqc;
+ return d_stringLikeEqc;
}
Node BaseSolver::TermIndex::add(TNode n,
diff --git a/src/theory/strings/base_solver.h b/src/theory/strings/base_solver.h
index bf61b93b2..96d275cd5 100644
--- a/src/theory/strings/base_solver.h
+++ b/src/theory/strings/base_solver.h
@@ -106,7 +106,7 @@ class BaseSolver : protected EnvObj
/**
* Get the set of equivalence classes of type string.
*/
- const std::vector<Node>& getStringEqc() const;
+ const std::vector<Node>& getStringLikeEqc() const;
//-----------------------end query functions
private:
@@ -236,8 +236,8 @@ class BaseSolver : protected EnvObj
* for more information.
*/
std::map<Node, BaseEqcInfo> d_eqcInfo;
- /** The list of equivalence classes of type string */
- std::vector<Node> d_stringsEqc;
+ /** The list of equivalence classes of string-like types */
+ std::vector<Node> d_stringLikeEqc;
/** A term index for each type, function kind pair */
std::map<TypeNode, std::map<Kind, TermIndex> > d_termIndex;
/** the cardinality of the alphabet */
diff --git a/src/theory/strings/core_solver.cpp b/src/theory/strings/core_solver.cpp
index cc9365d38..46f75bd10 100644
--- a/src/theory/strings/core_solver.cpp
+++ b/src/theory/strings/core_solver.cpp
@@ -131,7 +131,7 @@ void CoreSolver::checkCycles()
d_eqc.clear();
// Rebuild strings eqc based on acyclic ordering, first copy the equivalence
// classes from the base solver.
- const std::vector<Node>& eqc = d_bsolver.getStringEqc();
+ const std::vector<Node>& eqc = d_bsolver.getStringLikeEqc();
d_strings_eqc.clear();
for (const Node& r : eqc)
{
diff --git a/src/theory/strings/theory_strings.cpp b/src/theory/strings/theory_strings.cpp
index 8324e3edb..ed00758a8 100644
--- a/src/theory/strings/theory_strings.cpp
+++ b/src/theory/strings/theory_strings.cpp
@@ -877,7 +877,7 @@ void TheoryStrings::computeCareGraph(){
void TheoryStrings::checkRegisterTermsPreNormalForm()
{
- const std::vector<Node>& seqc = d_bsolver.getStringEqc();
+ const std::vector<Node>& seqc = d_bsolver.getStringLikeEqc();
for (const Node& eqc : seqc)
{
eq::EqClassIterator eqc_i = eq::EqClassIterator(eqc, d_equalityEngine);
@@ -906,9 +906,14 @@ void TheoryStrings::checkCodes()
// str.code applied to the proxy variables for each equivalence classes that
// are constants of size one
std::vector<Node> const_codes;
- const std::vector<Node>& seqc = d_bsolver.getStringEqc();
+ const std::vector<Node>& seqc = d_bsolver.getStringLikeEqc();
for (const Node& eqc : seqc)
{
+ if (!eqc.getType().isString())
+ {
+ continue;
+ }
+
NormalForm& nfe = d_csolver.getNormalForm(eqc);
if (nfe.d_nf.size() == 1 && nfe.d_nf[0].isConst())
{
@@ -972,7 +977,7 @@ void TheoryStrings::checkCodes()
void TheoryStrings::checkRegisterTermsNormalForms()
{
- const std::vector<Node>& seqc = d_bsolver.getStringEqc();
+ const std::vector<Node>& seqc = d_bsolver.getStringLikeEqc();
for (const Node& eqc : seqc)
{
NormalForm& nfi = d_csolver.getNormalForm(eqc);
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback