This module implements the logic to call CaDiCal (or CLI interface compatible SAT solvers) and extract an LRAT UNSAT proof or a model from its output.
The result of calling a SAT solver.
- sat: Array (Bool × Nat) → Lean.Elab.Tactic.BVDecide.External.SolverResult
The solver returned SAT with some literal assignment.
- unsat: Lean.Elab.Tactic.BVDecide.External.SolverResult
The solver returned UNSAT.
Equations
- One or more equations did not get rendered due to their size.
Parse the witness format of a SAT solver. The rough grammar for this is: line = "v" (" " lit)\n terminal_line = "v" (" " lit) (" " 0)\n witness = "s SATISFIABLE\n" line+ terminal_line
- success: {α : Type u} → α → Lean.Elab.Tactic.BVDecide.External.TimedOut α
- timeout: {α : Type u} → Lean.Elab.Tactic.BVDecide.External.TimedOut α
Run a process with args
until it terminates or the cancellation token in CoreM
tells us to abort
or timeout
seconds have passed.
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lean.Elab.Tactic.BVDecide.External.runInterruptible.killAndWait child = do child.kill discard child.wait
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Call the SAT solver in solverPath
with problemPath
as CNF input and ask it to output an LRAT
UNSAT proof (binary or non-binary depending on binaryProofs
) into proofOutput
. To avoid runaway
solvers the solver is run with timeout
in seconds as a maximum time limit to solve the problem.
Note: This function currently assume that the solver has the same CLI as CaDiCal.
Equations
- One or more equations did not get rendered due to their size.