diff options
author | Andrew Reynolds <andrew.j.reynolds@gmail.com> | 2021-04-08 09:15:31 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-08 14:15:31 +0000 |
commit | cd8fd2e4909513b4253ce8f9aa272eb87ae6bf83 (patch) | |
tree | 713ef362a026a676363894277219a54658a9e05e /src/theory/strings | |
parent | 889daf13112f71b6f5dd98444af99ec7656195be (diff) |
Add identifiers for sources of incompleteness (#6311)
This PR classifies all internal kinds of incompleteness as identifiers.
It makes it so TheoryEngine records an identifier when its incomplete flag is set.
The next step will be to possibly communicate this value to the user.
Diffstat (limited to 'src/theory/strings')
-rw-r--r-- | src/theory/strings/core_solver.cpp | 4 | ||||
-rw-r--r-- | src/theory/strings/inference_manager.cpp | 2 | ||||
-rw-r--r-- | src/theory/strings/inference_manager.h | 6 | ||||
-rw-r--r-- | src/theory/strings/regexp_solver.cpp | 2 |
4 files changed, 3 insertions, 11 deletions
diff --git a/src/theory/strings/core_solver.cpp b/src/theory/strings/core_solver.cpp index 6a461cb7a..f38acfac2 100644 --- a/src/theory/strings/core_solver.cpp +++ b/src/theory/strings/core_solver.cpp @@ -1778,7 +1778,7 @@ CoreSolver::ProcessLoopResult CoreSolver::processLoop(NormalForm& nfi, } else if (options::stringProcessLoopMode() == options::ProcessLoopMode::NONE) { - d_im.setIncomplete(); + d_im.setIncomplete(IncompleteId::STRINGS_LOOP_SKIP); return ProcessLoopResult::SKIPPED; } @@ -1931,7 +1931,7 @@ CoreSolver::ProcessLoopResult CoreSolver::processLoop(NormalForm& nfi, else if (options::stringProcessLoopMode() == options::ProcessLoopMode::SIMPLE) { - d_im.setIncomplete(); + d_im.setIncomplete(IncompleteId::STRINGS_LOOP_SKIP); return ProcessLoopResult::SKIPPED; } diff --git a/src/theory/strings/inference_manager.cpp b/src/theory/strings/inference_manager.cpp index ff3803b7e..8a0429fae 100644 --- a/src/theory/strings/inference_manager.cpp +++ b/src/theory/strings/inference_manager.cpp @@ -241,8 +241,6 @@ bool InferenceManager::sendSplit(Node a, Node b, InferenceId infer, bool preq) return true; } -void InferenceManager::setIncomplete() { d_out.setIncomplete(); } - void InferenceManager::addToExplanation(Node a, Node b, std::vector<Node>& exp) const diff --git a/src/theory/strings/inference_manager.h b/src/theory/strings/inference_manager.h index cb5560f2b..cfb8614ca 100644 --- a/src/theory/strings/inference_manager.h +++ b/src/theory/strings/inference_manager.h @@ -201,12 +201,6 @@ class InferenceManager : public InferenceManagerBuffered * otherwise. A split is trivial if a=b rewrites to a constant. */ bool sendSplit(Node a, Node b, InferenceId infer, bool preq = true); - /** - * Set that we are incomplete for the current set of assertions (in other - * words, we must answer "unknown" instead of "sat"); this calls the output - * channel's setIncomplete method. - */ - void setIncomplete(); //----------------------------constructing antecedants /** diff --git a/src/theory/strings/regexp_solver.cpp b/src/theory/strings/regexp_solver.cpp index 7510b26ca..85d66cd54 100644 --- a/src/theory/strings/regexp_solver.cpp +++ b/src/theory/strings/regexp_solver.cpp @@ -303,7 +303,7 @@ void RegExpSolver::check(const std::map<Node, std::vector<Node> >& mems) else { // otherwise we are incomplete - d_im.setIncomplete(); + d_im.setIncomplete(IncompleteId::STRINGS_REGEXP_NO_SIMPLIFY); } } if (d_state.isInConflict()) |