3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-07-12 01:56:22 +00:00

Give up with we have nasty replace_all or friends (otw. we would be unsound due to Nielsen saturation)

This commit is contained in:
CEisenhofer 2026-06-26 15:14:44 +02:00
parent ff7cbe9406
commit 63a668a71f
5 changed files with 68 additions and 0 deletions

View file

@ -137,6 +137,15 @@ namespace euf {
n->m_level = 1;
n->m_length = 1;
n->m_is_classical = false;
// Defined seq operations (str.replace*, str.replace_all, str.replace_re*) are
// classified as s_var because they have no dedicated snode kind, but they are NOT
// free variables: their value is fixed by the recfun/axiom layer. Mark them rigid
// so the Nielsen modifiers never eliminate or split them (see snode::is_rigid).
{
expr* e = n->m_expr;
n->m_rigid = e && (m_seq.str.is_replace(e) || m_seq.str.is_replace_all(e) ||
m_seq.str.is_replace_re(e) || m_seq.str.is_replace_re_all(e));
}
break;
case snode_kind::s_unit: