From cbdf49815b2e93cc5125c5c6243ff220329d818b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 14 Mar 2026 17:53:27 +0000 Subject: [PATCH] seq_state: remove sgraph dep; seq_model: use snode sort for is_empty; remove NSB review comments Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> --- src/smt/seq/seq_model.cpp | 16 +++++----------- src/smt/seq/seq_state.h | 4 +--- src/smt/theory_nseq.cpp | 2 +- 3 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/smt/seq/seq_model.cpp b/src/smt/seq/seq_model.cpp index a2e6900b3..3ed249d9b 100644 --- a/src/smt/seq/seq_model.cpp +++ b/src/smt/seq/seq_model.cpp @@ -158,9 +158,11 @@ namespace smt { if (!n) return expr_ref(m); - // NSB review: use the sort of n - if (n->is_empty()) - return expr_ref(m_seq.str.mk_empty(m_seq.str.mk_string_sort()), m); + if (n->is_empty()) { + sort* srt = n->get_sort(); + if (!srt) srt = m_seq.str.mk_string_sort(); + return expr_ref(m_seq.str.mk_empty(srt), m); + } if (n->is_char() || n->is_unit()) { expr* e = n->get_expr(); @@ -229,8 +231,6 @@ namespace smt { exp_val = rational(0); // Build the repeated string: base^exp_val - - // NSB review: use the sort of n instead of mk_string_sort() if (exp_val.is_zero()) return expr_ref(m_seq.str.mk_empty(m_seq.str.mk_string_sort()), m); if (exp_val.is_one()) @@ -261,9 +261,6 @@ namespace smt { zstring result(buf.size(), buf.data()); return expr_ref(m_seq.str.mk_string(result), m); } - // NSB review: just return an expression of the form: - // mk_power(base_val, a.mk_int(n_val)) for large exponents - // Fallback: cap exponent to avoid divergence n_val = POWER_EXPAND_LIMIT; } @@ -278,9 +275,6 @@ namespace smt { return e ? expr_ref(e, m) : expr_ref(m); } - // NSB review: replace this by seq_rewriter::some_string_in_re when it is a regex over strings. - // add a routine that works for regular expressions over types other than strings to seq_rewriter - // use this for regexes over non-strings. expr_ref seq_model::generate_regex_witness(euf::snode* regex, unsigned depth) { if (!regex) return expr_ref(m_seq.str.mk_empty(m_seq.str.mk_string_sort()), m); diff --git a/src/smt/seq/seq_state.h b/src/smt/seq/seq_state.h index d136123ab..2158729b6 100644 --- a/src/smt/seq/seq_state.h +++ b/src/smt/seq/seq_state.h @@ -20,7 +20,6 @@ Author: #pragma once #include "util/vector.h" -#include "ast/euf/euf_sgraph.h" #include "smt/seq/seq_nielsen.h" #include "smt/smt_literal.h" @@ -46,7 +45,6 @@ namespace smt { }; class seq_state { - euf::sgraph& m_sg; vector m_str_eqs; vector m_str_mems; vector m_eq_sources; @@ -58,7 +56,7 @@ namespace smt { unsigned m_next_mem_id = 0; public: - seq_state(euf::sgraph& sg) : m_sg(sg) {} + seq_state() = default; void push() { m_str_eq_lim.push_back(m_str_eqs.size()); diff --git a/src/smt/theory_nseq.cpp b/src/smt/theory_nseq.cpp index a784f582d..78931e63f 100644 --- a/src/smt/theory_nseq.cpp +++ b/src/smt/theory_nseq.cpp @@ -35,7 +35,7 @@ namespace smt { m_sgraph(ctx.get_manager(), m_egraph), m_context_solver(ctx.get_manager()), m_nielsen(m_sgraph, m_context_solver), - m_state(m_sgraph), + m_state(), m_regex(m_sgraph), m_model(ctx.get_manager(), m_seq, m_rewriter, m_sgraph, m_regex) {}