🤖 AI Summary
Symmetry breaking in combinatorial solving is prone to errors, and existing certification methods rely on lexicographic verification over large-integer encodings of symmetries—severely limiting scalability. This paper introduces a novel order encoding scheme based on auxiliary variables that avoids large-integer representations while preserving logical completeness; it substantially reduces proof size and generation overhead. Integrated into the SAT solving pipeline, the method is compatible with the symmetry-breaking tool Satsuma and the proof verifier VeriPB, enabling end-to-end verifiable proof generation. Experiments demonstrate order-of-magnitude speedups in both proof generation and checking on large-scale symmetric instances. The approach significantly outperforms Bogaerts et al.’s (2023) general-purpose certification framework in verification efficiency and scalability, providing a more practical and efficient pathway for certified combinatorial solving.
📝 Abstract
Symmetry breaking is a crucial technique in modern combinatorial solving, but it is difficult to be sure it is implemented correctly. The most successful approach to deal with bugs is to make solvers certifying, so that they output not just a solution, but also a mathematical proof of correctness in a standard format, which can then be checked by a formally verified checker. This requires justifying symmetry reasoning within the proof, but developing efficient methods for this has remained a long-standing open challenge. A fully general approach was recently proposed by Bogaerts et al. (2023), but it relies on encoding lexicographic orders with big integers, which quickly becomes infeasible for large symmetries. In this work, we develop a method for instead encoding orders with auxiliary variables. We show that this leads to orders-of-magnitude speed-ups in both theory and practice by running experiments on proof logging and checking for SAT symmetry breaking using the state-of-the-art satsuma symmetry breaker and the VeriPB proof checking toolchain.