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:
parent
9c36e9ce62
commit
cbdf49815b
3 changed files with 7 additions and 15 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue