Fix out-of-sync pruning in CDCAC proofs (#7470)
authorGereon Kremer <nafur42@gmail.com>
Fri, 22 Oct 2021 21:49:50 +0000 (14:49 -0700)
committerGitHub <noreply@github.com>
Fri, 22 Oct 2021 21:49:50 +0000 (21:49 +0000)
commit0dfbf4b80f25bc9edd1c843ba9a9bb37bace79a9
tree432a07f4119f031f14c0247982f86f6d76ca9ab0
parentf1db161860d0283cb5537ad8847e0b52d1485e28
Fix out-of-sync pruning in CDCAC proofs (#7470)

This PR resolves a subtle issue with CDCAC proofs.
The CDCAC proof is maintained as a tree where (mostly) every node corresponds to an (infeasible) interval generated within the CDCAC method. We prune these intervals regularly to get rid of redundant intervals, which also sorts intervals. The pruning however relied on a stable ordering of both intervals and child nodes within the proof tree, as there was no easy way to map nodes back to intervals.
This PR adds an objectId field to the proof tree nodes and assigns ids to the CDCAC intervals. This allows for a robust mapping between the two, even if the interval list is reordered.

Fixes cvc5/cvc5-projects#313.
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.h
src/theory/arith/nl/cad/cdcac_utils.h
src/theory/arith/nl/cad/proof_generator.cpp
src/theory/arith/nl/cad/proof_generator.h
src/theory/arith/nl/cad_solver.cpp
test/regress/regress1/nl/factor_agg_s.smt2