(proof-new) Prepare the theory of strings for proof reconstruction (#4885)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Mon, 17 Aug 2020 18:07:13 +0000 (13:07 -0500)
committerGitHub <noreply@github.com>
Mon, 17 Aug 2020 18:07:13 +0000 (13:07 -0500)
commit5c78f336b8276a2ed8916e2a9447a29a2caca069
tree76ecd372682f6489e7917a0fc76eafe2d7fcc238
parentb4ae9cc5fd26ecbb51870020d05c427fc97c7103
(proof-new) Prepare the theory of strings for proof reconstruction (#4885)

This updates the internal data structure for strings inferences "InferInfo" such that it is amenable to proof reconstruction.

Currently, the explanation for a conclusion is in two parts:
(1) d_ant, the antecedents that can be explained by the current equality engine,
(2) d_antn, the antecedents that cannot.

For proof reconstruction, the order of some antecedents matters. This is difficult with the above data structure since elements in these two vectors are not given an ordering relative to each other. After this PR, we store:
(1) d_ant, all antecedants, which are ordered in a way that is amenable to proofs (to be introduced on following PRs),
(2) d_noExplain, the subset of d_ant that cannot be explained by the current equality engine.

This PR modifies calls to InferenceManager in preparation for extending it with a proof reconstructor InferProofCons which will convert strings::InferInfo into instructions for building ProofNode.
src/theory/strings/core_solver.cpp
src/theory/strings/extf_solver.cpp
src/theory/strings/extf_solver.h
src/theory/strings/infer_info.cpp
src/theory/strings/infer_info.h
src/theory/strings/inference_manager.cpp
src/theory/strings/inference_manager.h
src/theory/strings/regexp_solver.cpp
src/theory/strings/theory_strings.cpp