Purify substitutions in strings proof reconstruction (#7035)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Mon, 23 Aug 2021 21:57:13 +0000 (16:57 -0500)
committerGitHub <noreply@github.com>
Mon, 23 Aug 2021 21:57:13 +0000 (21:57 +0000)
commita9ac3972bd3d0f0328e957bc04d8c0ef12811a51
tree511dbc95203898fcfafa646db23a20ac2045f215
parent982b585a1b766a933055d7328579cdb482504fe4
Purify substitutions in strings proof reconstruction (#7035)

This fixes an issue in strings proof reconstruction where sequential substitutions are used over possibly non-atomic terms like (str.replace x a b) and x simultaneously.

This leads to cases where we failed to reconstruct proofs, since a substitution x -> c, (str.replace x a b) -> d may unintentionally generate the term (str.replace c a b), after which the second substitution fails to apply.
src/theory/strings/infer_proof_cons.cpp
src/theory/strings/infer_proof_cons.h
test/regress/CMakeLists.txt
test/regress/regress0/strings/delta-trust-subs.smt2 [new file with mode: 0644]