3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-04 05:11:21 +00:00

using obj_hashtable instead of unordered_set as suggested by Nikolaj

This commit is contained in:
nilsbecker 2018-11-25 22:50:14 +01:00
parent 165b256d32
commit b57a483a6c

View file

@ -26,7 +26,7 @@ Revision History:
#include "smt/smt_quick_checker.h" #include "smt/smt_quick_checker.h"
#include "smt/mam.h" #include "smt/mam.h"
#include "smt/qi_queue.h" #include "smt/qi_queue.h"
#include <unordered_set> #include "util/obj_hashtable.h"
namespace smt { namespace smt {
@ -109,7 +109,7 @@ namespace smt {
\brief Ensures that all relevant proof steps to explain why the enode is equal to the root of its \brief Ensures that all relevant proof steps to explain why the enode is equal to the root of its
equivalence class are in the log and up-to-date. equivalence class are in the log and up-to-date.
*/ */
void log_justification_to_root(std::ostream & log, enode *en, std::unordered_set<enode *> &already_visited) { void log_justification_to_root(std::ostream & log, enode *en, obj_hashtable<enode> &already_visited) {
enode *root = en->get_root(); enode *root = en->get_root();
for (enode *it = en; it != root; it = it->get_trans_justification().m_target) { for (enode *it = en; it != root; it = it->get_trans_justification().m_target) {
if (already_visited.find(it) == already_visited.end()) already_visited.insert(it); if (already_visited.find(it) == already_visited.end()) already_visited.insert(it);
@ -141,7 +141,7 @@ namespace smt {
\brief Logs a single equality explanation step and, if necessary, recursively calls log_justification_to_root to log \brief Logs a single equality explanation step and, if necessary, recursively calls log_justification_to_root to log
equalities needed by the step (e.g. argument equalities for congruence steps). equalities needed by the step (e.g. argument equalities for congruence steps).
*/ */
void log_single_justification(std::ostream & out, enode *en, std::unordered_set<enode *> &already_visited) { void log_single_justification(std::ostream & out, enode *en, obj_hashtable<enode> &already_visited) {
smt::literal lit; smt::literal lit;
unsigned num_args; unsigned num_args;
enode *target = en->get_trans_justification().m_target; enode *target = en->get_trans_justification().m_target;
@ -208,7 +208,7 @@ namespace smt {
if (has_trace_stream()) { if (has_trace_stream()) {
std::ostream & out = trace_stream(); std::ostream & out = trace_stream();
std::unordered_set<enode *> already_visited; obj_hashtable<enode> already_visited;
// In the term produced by the quantifier instantiation the root of the equivalence class of the terms bound to the quantified variables // In the term produced by the quantifier instantiation the root of the equivalence class of the terms bound to the quantified variables
// is used. We need to make sure that all of these equalities appear in the log. // is used. We need to make sure that all of these equalities appear in the log.