Cone: SAT Analysis via Linear Algebra

Charles Dana — Berkeley 2023, rebuilt April 2026 — Paper · API docs

Clause → affine function. Cone combination → resolution. LP → variable forcing.

The idea: Map each clause to f_k(x) = -1 + Σ literal_values. The linear cone {Σ λ_k f_k | λ_k ≥ 0} is non-negative on satisfying assignments. Three tools built on this:

Try it

Paste a CNF in DIMACS format:

Presets

Results

Cone Cascade (LP → force → BCP)

InstancenmRoundsForcedTime
x ∧ ¬x12010.00s
All-signs 2-var24120.02s
PHP(3,2)69160.07s
PHP(4,3)12222110.36s
PHP(5,4)20453181.28s
Tseitin(5)824480.46s
Random n=505025094957s

Resolution via Cone

InstanceStatusRoundsLearned
(x₁∨x₂) + (¬x₁∨x₂)learns (x₂)11
All-signs 2-varUNSAT14
PHP(3,2)UNSAT363

Random Cone Mining (2s budget)

InstanceSamplesMined3-SAT4-SAT5-SAT
Random 8-var 30-clause135K881759208

Each random λ on the simplex gives a different cone combination encoding a different implied clause.

How it works

Clause function: (x₁ ∨ ¬x₂ ∨ x₃) → f(x) = -1 + x₁ + (1-x₂) + x₃

f(x) ≥ 0 iff clause satisfied. f(x) = -1 when no literal true.

Cone property: Σ λ_k f_k ≥ 0 on satisfying assignments (λ_k ≥ 0).

Resolution: λf + μg cancels shared variable when opposing polarities match. What remains is a constraint on the surviving variables.

Cascade: The LP min_λ max_x Σ λ_k f_k(x) decomposes per variable: O(m × n). No 2^n enumeration. Frank-Wolfe converges in O(1/t). The optimal λ reveals which variable the adversary exploits most — force it, BCP cascade.

API

# Cascade: LP-guided variable forcing + BCP
curl -X POST https://cone.aws.monce.ai/cascade \
  -H "Content-Type: application/json" \
  -d '{"dimacs": "p cnf 2 4\n1 2 0\n-1 2 0\n1 -2 0\n-1 -2 0"}'

# Resolution: cancel variables via cone algebra
curl -X POST https://cone.aws.monce.ai/resolve \
  -H "Content-Type: application/json" \
  -d '{"dimacs": "p cnf 2 2\n1 2 0\n-1 2 0"}'

# Mining: random cone sampling (2s budget)
curl -X POST https://cone.aws.monce.ai/mine \
  -H "Content-Type: application/json" \
  -d '{"dimacs": "p cnf 4 6\n1 2 0\n-1 3 0\n-2 4 0\n-3 -4 0\n1 -3 0\n-1 -4 0"}'

Cone v0.1.0 — Zero dependencies. Pure Python.
Charles Dana & Claude Opus 4.6 — cone.aws.monce.ai