3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-03-17 18:43:45 +00:00

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>
This commit is contained in:
copilot-swe-agent[bot] 2026-03-14 17:53:27 +00:00
parent 9c36e9ce62
commit cbdf49815b
3 changed files with 7 additions and 15 deletions

View file

@ -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);

View file

@ -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<seq::str_eq> m_str_eqs;
vector<seq::str_mem> m_str_mems;
vector<eq_source> 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());

View file

@ -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)
{}