[Seq/Model] Do not enumerate elements of constants (#8179)
authorAndres Noetzli <andres.noetzli@gmail.com>
Mon, 28 Feb 2022 23:56:38 +0000 (15:56 -0800)
committerGitHub <noreply@github.com>
Mon, 28 Feb 2022 23:56:38 +0000 (23:56 +0000)
commit9fae9984fdb6e46713839655534e10639ec7f9d0
tree5753cd67cb580c57f6bfc8f28273e81e7e91ced7
parent95a9b6e26bac6a822248563681c1943d35367528
[Seq/Model] Do not enumerate elements of constants (#8179)

Fixes #8133. In the input from the issue, the string solver was
assigning a skeleton `(seq.unit smvX)` to a constant of sort `(Seq (Seq
Int))`. This constant was asserted to be different from `(seq.unit (as
seq.empty (Seq Int)))`. However, the `TheoryModelBuilder` was assigning
`smvX` the value `(as seq.empty (Seq Int))`, because `(as seq.empty (Seq
Int))` was not being registered with the equality engine. This is
because elements of constant sequences are not considered children, but
are a data member of the `Sequence` class. The commit updates
`TheoryStrings::collectModelInfoType()` to also register elements of
sequence constants with the equality engine.
src/theory/strings/core_solver.cpp
src/theory/strings/theory_strings.cpp
test/regress/CMakeLists.txt
test/regress/regress0/seq/issue8133-block-const-elems.smt2 [new file with mode: 0644]