diff --git a/src/smt/seq/seq_nielsen.cpp b/src/smt/seq/seq_nielsen.cpp index 098f58518..810198963 100644 --- a/src/smt/seq/seq_nielsen.cpp +++ b/src/smt/seq/seq_nielsen.cpp @@ -310,7 +310,7 @@ namespace seq { } unsigned nielsen_node::var_ub(euf::snode* var) const { - SASSERT(!var); + SASSERT(var); unsigned v = UINT_MAX; m_var_ub.find(var->id(), v); return v; diff --git a/src/smt/seq/seq_regex.cpp b/src/smt/seq/seq_regex.cpp index 0a8eca302..c0597bd51 100644 --- a/src/smt/seq/seq_regex.cpp +++ b/src/smt/seq/seq_regex.cpp @@ -1173,7 +1173,8 @@ namespace seq { seq_util& seq = m_sg.get_seq_util(); unsigned max_c = seq.max_char(); - VERIFY(re_expr); + if (!re_expr) + return char_set::full(max_c); // full_char: the whole alphabet [0, max_char] if (seq.re.is_full_char(re_expr)) diff --git a/src/smt/seq_model.cpp b/src/smt/seq_model.cpp index 724ac360d..256db7a91 100644 --- a/src/smt/seq_model.cpp +++ b/src/smt/seq_model.cpp @@ -324,6 +324,8 @@ namespace smt { SASSERT(sat_node); for (auto const& mem : sat_node->str_mems()) { SASSERT(mem.m_str && mem.m_regex); + if (mem.is_trivial()) + continue; // empty string in nullable regex: already satisfied, no variable to constrain VERIFY(mem.is_primitive()); // everything else should have been eliminated already euf::snode* first = mem.m_str->first(); unsigned id = first->id();