enable proof printing through CMake option

This commit is contained in:
Fabian Posch 2024-08-09 18:51:50 +02:00
parent 6497ee686c
commit 8aeb017b09
2 changed files with 17 additions and 3 deletions

View file

@ -8,6 +8,7 @@ set(CMAKE_CXX_STANDARD 17)
option(STATIC_BINARIES "Link binaries statically." ON) option(STATIC_BINARIES "Link binaries statically." ON)
option(USE_SORELEASE "Use SORELEASE in shared library filename." ON) option(USE_SORELEASE "Use SORELEASE in shared library filename." ON)
option(PRINT_PROOFS "Enable the -c option in the minisat binary to print resolution proofs." ON)
#-------------------------------------------------------------------------------------------------- #--------------------------------------------------------------------------------------------------
# Library version: # Library version:
@ -36,6 +37,13 @@ include_directories(${minisat_SOURCE_DIR})
add_definitions(-D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS) add_definitions(-D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS)
#--------------------------------------------------------------------------------------------------
# Macro switches:
if(PRINT_PROOFS)
add_compile_definitions(ENABLE_PROOF)
endif()
#-------------------------------------------------------------------------------------------------- #--------------------------------------------------------------------------------------------------
# Build Targets: # Build Targets:

View file

@ -231,18 +231,24 @@ struct Checker : public ProofTraverser {
vec<vec<Lit> > clauses; vec<vec<Lit> > clauses;
void root (const vec<Lit>& c) { void root (const vec<Lit>& c) {
//**/printf("%d: ROOT", clauses.size()); for (int i = 0; i < c.size(); i++) printf(" %s%d", sign(c[i])?"-":"", var(c[i])+1); printf("\n"); #ifdef ENABLE_PROOF
printf("%d: ROOT", clauses.size()); for (int i = 0; i < c.size(); i++) printf(" %s%d", sign(c[i])?"-":"", var(c[i])+1); printf("\n");
#endif
clauses.push(); clauses.push();
c.copyTo(clauses.last()); } c.copyTo(clauses.last()); }
void chain (const vec<ClauseId>& cs, const vec<Var>& xs) { void chain (const vec<ClauseId>& cs, const vec<Var>& xs) {
//**/printf("%d: CHAIN %d", clauses.size(), cs[0]); for (int i = 0; i < xs.size(); i++) printf(" [%d] %d", xs[i]+1, cs[i+1]); #ifdef ENABLE_PROOF
printf("%d: CHAIN %d", clauses.size(), cs[0]); for (int i = 0; i < xs.size(); i++) printf(" [%d] %d", xs[i]+1, cs[i+1]);
#endif
clauses.push(); clauses.push();
vec<Lit>& c = clauses.last(); vec<Lit>& c = clauses.last();
clauses[cs[0]].copyTo(c); clauses[cs[0]].copyTo(c);
for (int i = 0; i < xs.size(); i++) for (int i = 0; i < xs.size(); i++)
resolve(c, clauses[cs[i+1]], xs[i]); resolve(c, clauses[cs[i+1]], xs[i]);
//**/printf(" =>"); for (int i = 0; i < c.size(); i++) printf(" %s%d", sign(c[i])?"-":"", var(c[i])+1); printf("\n"); #ifdef ENABLE_PROOF
printf(" =>"); for (int i = 0; i < c.size(); i++) printf(" %s%d", sign(c[i])?"-":"", var(c[i])+1); printf("\n");
#endif
} }
void deleted(ClauseId c) { void deleted(ClauseId c) {