def
definition
mentionsVarLit
show as:
view math explainer →
open explainer
Read the cached plain-language explainer.
open lean source
IndisputableMonolith.Complexity.SAT.PC on GitHub at line 16.
browse module
All declarations in this module, on Recognition.
explainer page
depends on
used by
formal source
13deriving Repr
14
15/-- Whether a variable is mentioned in a literal. -/
16def mentionsVarLit {n} (l : Lit n) (v : Var n) : Bool :=
17 match l with
18 | .pos u => decide (u = v)
19 | .neg u => decide (u = v)
20
21/-- Whether a variable is mentioned in a clause. -/
22def mentionsVarClause {n} (C : Clause n) (v : Var n) : Bool :=
23 C.any (fun l => mentionsVarLit l v)
24
25/-- Whether a variable is mentioned in an XOR constraint. -/
26def mentionsVarXOR {n} (X : XORConstraint n) (v : Var n) : Bool :=
27 X.vars.any (fun u => decide (u = v))
28
29/-- Whether a variable is mentioned in a mixed constraint. -/
30def mentionsVar {n} (K : Constraint n) (v : Var n) : Bool :=
31 match K with
32 | .cnf C => mentionsVarClause C v
33 | .xor X => mentionsVarXOR X v
34
35/-- Satisfaction semantics for mixed constraints. -/
36def satisfiesConstraint {n} (a : Assignment n) (K : Constraint n) : Prop :=
37 match K with
38 | .cnf C => evalClause a C = true
39 | .xor X => parityOf a X.vars = X.parity
40
41/-- The constraint K determines variable v w.r.t. reference assignment `aRef`:
42 fixing all non-v variables to `aRef` and requiring `K` forces `v = aRef v`. -/
43def determinesVar {n}
44 (aRef : Assignment n) (K : Constraint n) (v : Var n) : Prop :=
45 ∀ (a' : Assignment n),
46 (∀ w : Var n, w ≠ v → a' w = aRef w) →