Cone: SAT Analysis via the Linear Cone of Clause Functions

Charles Dana — UC Berkeley (2023), rebuilt April 2026
Interactive demo · API

1. The Clause Function

Given a clause C = (l₁ ∨ l₂ ∨ ... ∨ l_s), define:

f(x) = -1 + Σ literal_value(x, l)

where literal_value(x, t) = x_t for positive, 1 - x_t for negative. Then:

Each f is affine in x: f(x) = b + Σ a_t x_t, where b = -1 + |negative literals| and a_t = +1 (positive) or -1 (negative).

2. The Linear Cone

The cone {Σ λ_k f_k | λ_k ≥ 0} is non-negative on every satisfying assignment, because each f_k ≥ 0 there. This is the soundness property.

Contrapositive: if Σ λ_k f_k(x) < 0 for all x, no satisfying assignment exists.

The optimization min_λ max_x Σ λ_k f_k(x) decomposes per variable:

max_x Σ_k λ_k f_k(x) = Σ_k λ_k b_k + Σ_t max(0, Σ_k λ_k a_{k,t})

This is O(m × n) per Frank-Wolfe iteration — no 2^n enumeration.

3. Resolution as Linear Algebra

The core observation: for two clauses sharing a variable in opposing polarity, their cone combination cancels that variable's coefficient.

f = -1 + x₁ + x₂        clause (x₁ ∨ x₂)
g = -x₁ + x₂             clause (¬x₁ ∨ x₂)

f + g = -1 + 2x₂         learned clause (x₂)

The x₁ coefficient cancels: 1 + (-1) = 0. What remains is a constraint on x₂ alone. This is resolution via the cone's algebra — matching weights on opposing polarities zeros out the resolved variable.

General principle: Σ λ_k a_{k,t} = 0 for variable t means t is resolved out. The surviving affine function encodes a clause on the remaining variables.

4. The Cone Cascade

The LP doesn't just certify UNSAT — it reveals which variable the adversary exploits. The variable with the largest positive coefficient Σ λ_k a_{k,t} is the adversary's best escape route.

Force it the other way. Then BCP propagates. The reduced formula has fewer variables. Repeat.

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(4)512250.12s
Tseitin(5)824480.46s
Random 3-SAT n=20201003143.3s
Random 3-SAT n=505025094957s

The cascade is not DPLL (it doesn't backtrack) and not resolution (it doesn't derive new clauses in the traditional sense). It uses the cone's global affine structure to identify the one decision that maximally constrains the solution space, then lets BCP handle the consequences.

5. Random Cone Mining

Every point λ on the probability simplex gives a cone combination h = Σ λ_k f_k that encodes an implied clause. Random sampling explores the space of implied clauses at ~70K samples/second.

From a 30-clause 8-variable formula: 881 unique implied clauses in 2 seconds, including 7 ternary clauses not in the original formula.

6. The Heuristic

The combination h(x) = const + Σ coeff_t x_t refutes assignments where h(x) < 0. The strongest refutation occurs at x_min = {x_t = 1 iff coeff_t < 0}:

h_min = const + Σ_{coeff_t < 0} coeff_t

A good heuristic maximizes |const| relative to the number of positive "escape routes" — variables the adversary can turn on to push h above zero. Each iteration of the LP eliminates escape routes by canceling variable coefficients, tightening the learned constraint.

7. What This Does NOT Do

8. Connection to the Broader Program

Cone v0.1.0 — Zero dependencies. Pure Python.
Charles Dana & Claude Opus 4.6 — April 2026
Try it · API