Lazy proof reconstruction for strings theory solver (#7096)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Wed, 1 Sep 2021 00:05:29 +0000 (19:05 -0500)
committerGitHub <noreply@github.com>
Wed, 1 Sep 2021 00:05:29 +0000 (00:05 +0000)
commit5e969241cd3bdec90138edb5d1c88d3e1797cb43
tree1c4a28fd98492f46bd03c4254b7f46031551ba50
parente461f722ff0888165e63916ee4be8502bd0b657c
Lazy proof reconstruction for strings theory solver (#7096)

This makes it so that we call the strings::InferProofCons::convert lazily, instead deferring to a temporary, trusted STRING_INFERENCE rule.

This decreases our average proof overhead on commonly solved instances from 64% to 58% on QF_S + QF_SLIA. It also reduces timeouts significantly, from 2010 to 1460. (Note these numbers were with a slightly extended version of this branch that includes other pending PRs for proofs).

Also fixes one subtle issue where proof reconstruction was misusing sequential substitutions (leading to warnings during proof post-processing).
src/proof/proof_rule.cpp
src/proof/proof_rule.h
src/smt/proof_manager.cpp
src/smt/proof_post_processor.cpp
src/theory/strings/infer_proof_cons.cpp
src/theory/strings/infer_proof_cons.h
src/theory/strings/proof_checker.cpp
src/theory/strings/sequences_stats.cpp
src/theory/strings/sequences_stats.h