Implement LRAT proof certification for SAT Competition 2025#304
Implement LRAT proof certification for SAT Competition 2025#304Copilot wants to merge 4 commits intodev-0.18.0-trial2026from
Conversation
|
Just as a heads up, I was blocked by some firewall rules while working on your feedback. Expand below for details. Warning Firewall rules blocked me from connecting to one or more addresses (expand for details)I tried to connect to the following addresses, but was blocked by firewall rules:
If you need me to access, download, or install something from one of these locations, you can either:
|
|
@copilot No files have been updated. What's up? |
Co-authored-by: shnarazk <997855+shnarazk@users.noreply.github.com>
Done in fc6a296. The DPR proof format is now implemented:
CDCL learned clauses remain as plain RUP lines (valid DPR with no witness needed), so the proof format is fully backwards compatible with dpr-trim. |
|
@copilot |
Co-authored-by: shnarazk <997855+shnarazk@users.noreply.github.com>
Done in 9909974. The DPR implementation has been replaced with LRAT (Linear Resolution Asymmetric Tautologies) certification:
|
|
Summary of LRAT Certificate Bugs and Fixes Bug 1: Input unit clauses written to proof file (Major —
|
Issue #303 tracks adding proof output support for SAT Competition 2025. This PR implements LRAT (Linear Resolution Asymmetric Tautologies) proof certification in splr, replacing the earlier DPR approach.
Key findings
Changes
unsat_certificate.rs: Replaced the DRAT queue-based system with direct LRAT writes. Three methods:add_input_clause()allocates a step ID for original clauses without writing (LRAT verifier knows them from the CNF);add_clause_lrat(clause, hints)writesid lit* 0 hint* 0\n;delete_clause_lrat(id)writesstep_id d clause_id 0\n. A no-op stub is provided for theno_IOfeature.types/clause.rs: Addedlrat_id: u64field toClause(gated onnot(feature = "no_IO")) to track each clause's LRAT proof step ID.state.rs: Addedlrat_hints: Vec<u64>toState(gated onnot(feature = "no_IO")) for collecting antecedent clause IDs during conflict analysis.cdb/mod.rs(ClauseDBIFtrait): Removednew_clause_pr/certificate_add_clause_pr; addednew_clause_lrat(&mut self, asg, v, hints: &[u64]) -> RefClause,certificate_add_assertion_lrat(&mut self, lit, hints), andis_certification_active() -> bool.cdb/db.rs:new_clausecallsadd_input_clause()for original clauses andadd_clause_lrat(v, &[])for other learnt clauses;new_clause_lratwrites with proper hints;new_clause_storeaccepts and stores thelrat_id; all transform functions (transform_by_elimination,transform_by_replacement,transform_by_simplification) save the old LRAT ID before in-place modification and assign a new one after;remove_clause_fndeletes by LRAT ID viadelete_clause_lrat(c.lrat_id).solver/conflict.rs:conflict_analyzeclearsstate.lrat_hintsat the start and collects antecedent LRAT IDs —cdb[cid].lrat_idforImplication(cid)reasons and the matching binary clause ID (viacdb.binary_links) forBinaryLink(l)reasons.handle_conflictusesnew_clause_lratfor multi-literal learned clauses andcertificate_add_assertion_lratfor unit learned clauses, both with the collected hints.processor/eliminate.rs: Reverted to plainnew_clause(BVE is skipped when certification is active).solver/search.rs: Added!cdb.is_certification_active()guard on the preprocessing elimination step so BVE is skipped when LRAT output is requested.config.rs: Updated help/doc strings from "DPR" → "LRAT"; default output filename remainsproof.out.Testing
no_IOfeature flag.✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.