Documentation

Complexitylib.SAT.Internal.LinearGuessVerify

Generic linear-witness interface for the SAT guess-and-verify machine #

The concrete machine in SAT.Internal.GuessVerify only assumes that guessed witnesses have length at most |x| + 1; most of its machine proof is already parametric in the verifier language. This module packages those generic theorems for any relation with that same linear bound.

Main result #

theorem Complexity.SAT.linearGuessVerify_acceptsInTime_of_mem {k : } {R : List BoolList BoolProp} {L : Language} (hbound : ∀ (x y : List Bool), R x yy.length x.length + 1) (hchar : ∀ (x : List Bool), x L ∃ (y : List Bool), R x y) (M : TM k) {f : } (hM : M.DecidesInTime (pairLang R) f) (x : List Bool) (hx : x L) :

A member with a linearly bounded witness has an accepting run of the generic guess-and-verify machine.

theorem Complexity.SAT.linearGuessVerify_not_acceptsInTime_of_not_mem {k : } {R : List BoolList BoolProp} {L : Language} (hchar : ∀ (x : List Bool), x L ∃ (y : List Bool), R x y) (M : TM k) {f : } (hM : M.DecidesInTime (pairLang R) f) (x : List Bool) (hx : xL) :

A nonmember has no accepting run of the generic guess-and-verify machine within its uniform time bound.

theorem Complexity.SAT.linearGuessVerify_decidesInTime {k : } {R : List BoolList BoolProp} {L : Language} (hbound : ∀ (x y : List Bool), R x yy.length x.length + 1) (hchar : ∀ (x : List Bool), x L ∃ (y : List Bool), R x y) (M : TM k) {f : } (hM : M.DecidesInTime (pairLang R) f) :

The generic SAT guess-and-verify machine decides any language described by a linearly bounded relation whose paired language is decided by M.

theorem Complexity.SAT.language_mem_NP_of_linear_witness_verifierP_direct {R : List BoolList BoolProp} {L : Language} (hbound : ∀ (x y : List Bool), R x yy.length x.length + 1) (hchar : ∀ (x : List Bool), x L ∃ (y : List Bool), R x y) (hverify : pairLang R P) :

A relation with witnesses bounded by |x| + 1 and a verifier in P places its existential language in NP.