AFTD Auto-Formalizing Theoretical Domains

CnfSatisfiable

def

A CNF formula (a list of clauses, each a list of literals) is satisfiable if there is a truth assignment such that every clause contains at least one true literal.

Statement

def CnfSatisfiable {V : Type*} (f : List (List (CnfLit V))) : Prop
Verified
06 Sep 2026
Axioms
none listed
Built on 1
  • CnfLitA CNF literal over a variable type V is either a positive variable or a negated variable.
Used by 5
  • cnf_satisfiable_append_sum_iffLet f be a CNF formula over a variable type V and g a CNF formula over a variable type W. Replace every literal of f by the literal of the…
  • cnf_satisfiable_subsetIf every clause of a CNF formula `f1` is contained in a CNF formula `f2` (that is, `f1 ⊆ f2`), and `f2` is satisfiable (`CnfSatisfiable…
  • cnf_single_clause_satisfiable_iffA CNF formula consisting of a single clause `c`, namely `[c]`, is satisfiable (`CnfSatisfiable [c]`) if and only if the clause `c` is…
  • cnf_satisfiable_of_appendIf the concatenation `f1 ++ f2` of two CNF formulas is satisfiable (`CnfSatisfiable (f1 ++ f2)`), then both `f1` and `f2` are satisfiable…
  • cnf_empty_satisfiableThe empty CNF formula has no clauses to satisfy, hence is satisfiable under any truth assignment.

Lean source view module on GitHub

/-- A CNF formula is satisfiable if there exists a truth assignment satisfying at least one literal in each clause. -/
def CnfSatisfiable {V : Type*} (f : List (List (CnfLit V))) : Prop := ∃ τ : V → Bool, ∀ c ∈ f, ∃ l ∈ c, match l with
    | CnfLit.pos v => τ v = true
    | CnfLit.neg v => τ v = false
Discuss this resultChallenge it