Distinguish purification types for strings proof reconstruction (#7521)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Tue, 18 Jan 2022 21:03:26 +0000 (15:03 -0600)
committerGitHub <noreply@github.com>
Tue, 18 Jan 2022 21:03:26 +0000 (21:03 +0000)
commit30aca1c6289f57ec8178c20736e9a8420fd6f9f1
tree525c3f60ace02a388744f0e78390b6e5a8b0cf03
parent3f4895d558bc5f4d59cd50f88167f1575f746e8f
Distinguish purification types for strings proof reconstruction (#7521)

This improves the success rate for strings proof reconstruction for context-dependent simplifications.

It also makes a minor modification to how EXTF inferences work. As a special case, A => B becomes A ^ ~B => false when B is already equal to false. This PR removes this behavior for the sake of consistency. (This could be explored as a more general strategy for turning facts to conflicts from any source if necessary).

The strings solver applies context-dependent simplification in various ways. This ensures that the proof reconstruction is faithful for cases of congruence + rewriting instead of substitution+rewriting, which the inferences STRINGS_EXTF and STRINGS_EXTF_N rely on.

This fixes 11 cases where proof reconstruction fails for string theory lemmas on Amazon benchmarks.
src/theory/strings/extf_solver.cpp
src/theory/strings/infer_proof_cons.cpp
src/theory/strings/infer_proof_cons.h