Fix pruning of covering intervals in proofs (#8084)
authorGereon Kremer <gkremer@cs.stanford.edu>
Wed, 23 Feb 2022 15:18:07 +0000 (16:18 +0100)
committerGitHub <noreply@github.com>
Wed, 23 Feb 2022 15:18:07 +0000 (15:18 +0000)
commit3c23b18236556dc5ed5101cdc588c1c942ae4ed3
treedd5d88a9ee276c30e1a0483620f1723183663d45
parent281bda09e88c568d151464559e00e4ea73c7192f
Fix pruning of covering intervals in proofs (#8084)

We need to mirror the pruning of intervals in the coverings solver in the corresponding proof. To match the proof nodes with the coverings-internal intervals, we use ids, where non-interval nodes have the id zero. In this process, we had three separate issues that never showed up because we don't have a proof checker for CAD proofs:

we did not check for zeros, pruning all non-interval nodes
we ran the pruning on the direct children of a CAD_RECURSIVE proof step, which are SCOPE nodes that don't have ids
iterating over and then removing children was done by a custom but faulty reimplementation of std::remove_if
Thus, we now

never prune zero nodes,
prune based on the (single) child node, if we are checking a SCOPE node, and
simply use std::remove_if.
src/proof/lazy_tree_proof_generator.cpp
src/proof/lazy_tree_proof_generator.h
src/theory/arith/nl/cad/cdcac.cpp
src/theory/arith/nl/cad/cdcac_utils.cpp
src/theory/arith/nl/cad/proof_generator.cpp
src/theory/arith/nl/cad/proof_generator.h
test/unit/theory/theory_arith_cad_white.cpp