mirror of
https://github.com/Z3Prover/z3
synced 2026-06-06 09:00:52 +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)
|
if (!n)
|
||||||
return expr_ref(m);
|
return expr_ref(m);
|
||||||
|
|
||||||
// NSB review: use the sort of n
|
if (n->is_empty()) {
|
||||||
if (n->is_empty())
|
sort* srt = n->get_sort();
|
||||||
return expr_ref(m_seq.str.mk_empty(m_seq.str.mk_string_sort()), m);
|
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()) {
|
if (n->is_char() || n->is_unit()) {
|
||||||
expr* e = n->get_expr();
|
expr* e = n->get_expr();
|
||||||
|
|
@ -229,8 +231,6 @@ namespace smt {
|
||||||
exp_val = rational(0);
|
exp_val = rational(0);
|
||||||
|
|
||||||
// Build the repeated string: base^exp_val
|
// Build the repeated string: base^exp_val
|
||||||
|
|
||||||
// NSB review: use the sort of n instead of mk_string_sort()
|
|
||||||
if (exp_val.is_zero())
|
if (exp_val.is_zero())
|
||||||
return expr_ref(m_seq.str.mk_empty(m_seq.str.mk_string_sort()), m);
|
return expr_ref(m_seq.str.mk_empty(m_seq.str.mk_string_sort()), m);
|
||||||
if (exp_val.is_one())
|
if (exp_val.is_one())
|
||||||
|
|
@ -261,9 +261,6 @@ namespace smt {
|
||||||
zstring result(buf.size(), buf.data());
|
zstring result(buf.size(), buf.data());
|
||||||
return expr_ref(m_seq.str.mk_string(result), m);
|
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
|
// Fallback: cap exponent to avoid divergence
|
||||||
n_val = POWER_EXPAND_LIMIT;
|
n_val = POWER_EXPAND_LIMIT;
|
||||||
}
|
}
|
||||||
|
|
@ -278,9 +275,6 @@ namespace smt {
|
||||||
return e ? expr_ref(e, m) : expr_ref(m);
|
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) {
|
expr_ref seq_model::generate_regex_witness(euf::snode* regex, unsigned depth) {
|
||||||
if (!regex)
|
if (!regex)
|
||||||
return expr_ref(m_seq.str.mk_empty(m_seq.str.mk_string_sort()), m);
|
return expr_ref(m_seq.str.mk_empty(m_seq.str.mk_string_sort()), m);
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,6 @@ Author:
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "util/vector.h"
|
#include "util/vector.h"
|
||||||
#include "ast/euf/euf_sgraph.h"
|
|
||||||
#include "smt/seq/seq_nielsen.h"
|
#include "smt/seq/seq_nielsen.h"
|
||||||
#include "smt/smt_literal.h"
|
#include "smt/smt_literal.h"
|
||||||
|
|
||||||
|
|
@ -46,7 +45,6 @@ namespace smt {
|
||||||
};
|
};
|
||||||
|
|
||||||
class seq_state {
|
class seq_state {
|
||||||
euf::sgraph& m_sg;
|
|
||||||
vector<seq::str_eq> m_str_eqs;
|
vector<seq::str_eq> m_str_eqs;
|
||||||
vector<seq::str_mem> m_str_mems;
|
vector<seq::str_mem> m_str_mems;
|
||||||
vector<eq_source> m_eq_sources;
|
vector<eq_source> m_eq_sources;
|
||||||
|
|
@ -58,7 +56,7 @@ namespace smt {
|
||||||
unsigned m_next_mem_id = 0;
|
unsigned m_next_mem_id = 0;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
seq_state(euf::sgraph& sg) : m_sg(sg) {}
|
seq_state() = default;
|
||||||
|
|
||||||
void push() {
|
void push() {
|
||||||
m_str_eq_lim.push_back(m_str_eqs.size());
|
m_str_eq_lim.push_back(m_str_eqs.size());
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ namespace smt {
|
||||||
m_sgraph(ctx.get_manager(), m_egraph),
|
m_sgraph(ctx.get_manager(), m_egraph),
|
||||||
m_context_solver(ctx.get_manager()),
|
m_context_solver(ctx.get_manager()),
|
||||||
m_nielsen(m_sgraph, m_context_solver),
|
m_nielsen(m_sgraph, m_context_solver),
|
||||||
m_state(m_sgraph),
|
m_state(),
|
||||||
m_regex(m_sgraph),
|
m_regex(m_sgraph),
|
||||||
m_model(ctx.get_manager(), m_seq, m_rewriter, m_sgraph, m_regex)
|
m_model(ctx.get_manager(), m_seq, m_rewriter, m_sgraph, m_regex)
|
||||||
{}
|
{}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue