def
definition
extractFromPC
show as:
view math explainer →
open explainer
Generate a durable explainer page for this declaration.
open lean source
IndisputableMonolith.Complexity.SAT.PC on GitHub at line 122.
browse module
All declarations in this module, on Recognition.
explainer page
depends on
-
H -
Assignment -
Assignment -
CNF -
Var -
Constraint -
constraintsOf -
determinesVar -
InputSet -
mentionsVar -
PC -
XORSystem -
K -
K -
U -
H -
for -
U
used by
formal source
119 (PC inputs aRef φ H) ↔ (ForcedArborescence inputs aRef φ H)
120
121/-- Helper to extract one (K, v) pair from PC condition. -/
122noncomputable def extractFromPC {n : Nat} (inputs : InputSet n) (aRef : Assignment n)
123 (φ : CNF n) (H : XORSystem n) (hPC : PC inputs aRef φ H)
124 (U : Finset (Var n)) (hU : U ⊆ inputs) (hne : U.Nonempty) :
125 { p : Constraint n × Var n //
126 p.1 ∈ constraintsOf φ H ∧
127 p.2 ∈ U ∧
128 mentionsVar p.1 p.2 = true ∧
129 (∀ w ∈ U, w ≠ p.2 → mentionsVar p.1 w = false) ∧
130 determinesVar aRef p.1 p.2 } := by
131 have h := hPC U hU hne
132 choose K hK using h
133 choose v hv using hK.2
134 exact ⟨(K, v), hK.1, hv.1, hv.2.1, hv.2.2.1, hv.2.2.2⟩
135
136/-- Bundled result type for peeling construction. -/
137structure PeelingResult {n : Nat} (inputs : InputSet n) (aRef : Assignment n)
138 (φ : CNF n) (H : XORSystem n) (U : Finset (Var n)) where
139 vars : List (Var n)
140 constrs : List (Constraint n)
141 len_eq : vars.length = constrs.length
142 nodup : vars.Nodup
143 cover : ∀ v, v ∈ vars ↔ v ∈ U
144 step : ∀ k (hk : k < vars.length),
145 let v := vars.get ⟨k, hk⟩
146 let K := constrs.get ⟨k, by omega⟩
147 mentionsVar K v = true ∧
148 (∀ w ∈ vars.drop k.succ, mentionsVar K w = false) ∧
149 determinesVar aRef K v
150
151/-- **PROVED**: Build the peeling order via Finset induction.
152 At each step, PC gives constraint K and variable v ∈ U that K uniquely determines.