def
definition
Assignment
show as:
view math explainer →
open explainer
Read the cached plain-language explainer.
open lean source
IndisputableMonolith.Complexity.RSatEncoding on GitHub at line 54.
browse module
All declarations in this module, on Recognition.
explainer page
depends on
used by
-
BooleanCircuitWithEval -
CircuitDecides -
CircuitLedgerCert -
CircuitSeparation -
CircuitWithEvalDecides -
moat_width_unsat -
moat_zero_sat -
clause_unchanged_by_flip -
flipBit -
flipBit_flipBit -
flipBit_ne -
flipBit_other -
jcostDegree -
jcostDegree_nonneg -
jcostEdgeWeight -
jcostEdgeWeight_le_clauses -
jcostEdgeWeight_le_varDegree_prop -
jcostEdgeWeight_nonneg -
jcostEdgeWeight_symm -
literal_unchanged_by_flip -
PvsNPDissolution -
Clause -
CNFFormula -
CNFFormula -
CNFFormula -
Literal -
RSATSeparation -
satJCost -
satJCost_nonneg -
satJCost_zero_iff -
sat_reaches_zero -
sat_recognition_time_bound -
unsat_cost_lower_bound -
unsat_positive_jcost -
bp_step_sound -
clauseUnit_correct -
compatible -
compatible_setVar -
consistent -
getD_of_compat_isSome'
formal source
51 var_count_eq : var_count = n
52
53/-- An assignment is a Boolean function on variables. -/
54def Assignment (n : ℕ) := Fin n → Bool
55
56/-- A literal is satisfied by an assignment. -/
57def Literal.satisfiedBy {n : ℕ} (lit : Fin n × Bool) (a : Assignment n) : Bool :=
58 if lit.2 then a lit.1 else !a lit.1
59
60/-- A clause is satisfied if at least one literal is satisfied. -/
61def Clause.satisfiedBy {n : ℕ} (c : Clause n) (a : Assignment n) : Bool :=
62 c.literals.any (fun lit => Literal.satisfiedBy lit a)
63
64/-- A CNF formula is satisfied if all clauses are satisfied. -/
65def CNFFormula.satisfiedBy {n : ℕ} (f : CNFFormula n) (a : Assignment n) : Bool :=
66 f.clauses.all (fun c => c.satisfiedBy a)
67
68/-- A formula is satisfiable if there exists a satisfying assignment. -/
69def CNFFormula.isSAT {n : ℕ} (f : CNFFormula n) : Prop :=
70 ∃ a : Assignment n, f.satisfiedBy a = true
71
72/-- A formula is UNSAT if no assignment satisfies it. -/
73def CNFFormula.isUNSAT {n : ℕ} (f : CNFFormula n) : Prop :=
74 ∀ a : Assignment n, f.satisfiedBy a = false
75
76/-! ## J-Cost Landscape for SAT -/
77
78/-- The J-cost of a formula under an assignment.
79 J = 0 iff all clauses are satisfied (zero defect = satisfying assignment).
80 J = (number of unsatisfied clauses) > 0 iff UNSAT under this assignment. -/
81noncomputable def satJCost {n : ℕ} (f : CNFFormula n) (a : Assignment n) : ℝ :=
82 (f.clauses.filter (fun c => !c.satisfiedBy a)).length
83
84/-- J-cost is nonneg (number of unsatisfied clauses ≥ 0). -/