Simplify strings term registration (#6174)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Sun, 21 Mar 2021 14:01:04 +0000 (09:01 -0500)
committerGitHub <noreply@github.com>
Sun, 21 Mar 2021 14:01:04 +0000 (14:01 +0000)
commitc0d4ac3d307b13c24471da5af2f916569a7f52b9
treebc458edc2a59fd3877e7952beb52d27997a15c8b
parent09097cd3b9cd3233b938ace34f3513a16ac17f80
Simplify strings term registration (#6174)

String terms may enter into the equality engine without appearing in assertions, due to eager context-dependent simplification internal to the equality engine (--strings-eager-eval). In rare cases, we did not catch when a new string constant appeared in the equality engine, meaning it would not be marked as relevant leading to bogus models in incremental mode.

This makes it so that proxy variables are stored in a user-context dependent manner, which impacts when terms marked as having a proxy variable are registered.

The PR also simplifies our policies for when string terms are registered slightly.

Fixes #6072.
src/theory/strings/term_registry.cpp
src/theory/strings/term_registry.h
src/theory/strings/theory_strings.cpp
test/regress/CMakeLists.txt
test/regress/regress1/strings/issue6072-inc-no-const-reg.smt2 [new file with mode: 0644]