Skip to content

Preprcessor for Propagation Redundant Clause Learning

License

Notifications You must be signed in to change notification settings

jreeves3/PReLearn

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

# PReLearn
Preprocessor for Propagation Redundant Clause Learning

PReLearn is a SAT preprocessor built from the SDCL solver SaDiCaL. 
(found at http://fmv.jku.at/sadical/)
PReLearn modifies the outer solver of SaDiCaL to find and learn PR clauses.
The PR clauses are written to a file along with the PR proof 
(associating a witness with each clause). Proofs can be verified with dpr-trim.
(found at https://github.com/marijnheule/dpr-trim)
The PR clauses can be appended to the original formula and solved by a SAT 
solver such as Kissat. 
(found at https://github.com/arminbiere/kissat)

This respository contains evaluation results for the mutilated chessboard 
problem and some SAT competition benchmarks.

Results using preprocessing and variable permutation for the JAR 23
submission are also available, with a Python script for extracting 
tables and figures.

To build use

  cd PReLearn
  ./configure.sh && make 


To run on a CNF formula use
  
  ./sadical [--pre_{option}] formula

Default options correspond with the CADE '22 submission other than
--pre_iterations=50.

For extending depth of neighbors use
--pre_neighbors_depth=[i] \\ default i=0
Note i=0 corresponds with a single call to neighbors, denoted neighbors(1)
in the paper.

For the reduced heuristic to construct candidates instead of neighbors use
--pre_reduced=1

For only negative literals (-p) in the frist variable of a PR clause use
--pre_both_phases=0

For batch learning use
--pre_addinstant=0 \\ default addinstant=1 learns clauses as they are found
--pre_batch_size=[i]
and to determine how clauses are added per batch
--pre_batch_random=1
or
--pre_batch_sort=1

For learning clauses up to length i
--pre_length_end=[i] \\ default 3, so only binary clauses or units learned


Output files include

pr_units.cnf        - list of units (pr units and failed literals) learned
pr_units_full.dpr   - units with witnesses (dpr proof format)
pr_clauses.cnf      - list of clauses learned
pr_clauses_full.dpr - list of clauses and witnesses (dpr proof format)

Additional output information included in the terminal ouptut for 
every completed iteration and upon exiting. This output contains
commulative resulsts after each iteration.


To solve an instance use

  timeout 100s ./sadical [--pre_<options>] formula
  cat formula pr_clauses.cnf > formula_with_PR.cnf
  ./kissat formula_with_PR.cnf --relaxed 


To solve and verify a complete refutation proof use

  timeout 100s ./sadical [--pre_<options>] formula
  cat formula pr_clauses.cnf > formula_with_PR.cnf
  ./kissat formula_with_PR.cnf proof --relaxed --no-binary
  cat pr_clauses_full.dpr proof > complete_proof.pr
  ./dpr-trim formula complete_proof.pr


To verify PReLearn proof is a correct derivation use
  
  timeout 100s ./sadical [--pre_<options>] formula
  ./dpr-trim formula pr_clauses_full.dpr -f

About

Preprcessor for Propagation Redundant Clause Learning

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages