The Lautemann shifted-cover disjunction runs in polynomial time
ProvedSipserGacsLautemann.shifted_cover_verifier_poly_timeLet be a predicate decided in polynomial time by a deterministic two-tape machine of the mission's model. Consider the three-tape predicate that, on input , an existential string , and a universal string of length , reads as a tuple of translation vectors (the -th vector being the length- window of starting at position , zero-padded), and asks whether
This theorem asserts that this bounded disjunction is again decidable in polynomial time. It is the second of the two machine-model closure facts needed by the Sipser–Gács–Lautemann development: it is the predicate that the characterization quantifies over, so the shifted-cover argument only produces a genuine language once this computational claim is discharged. The number of disjuncts is and each translation is an -bit window of , so the whole predicate costs calls to the given machine on inputs of length at most .
import Definitions.Def_sipser_gacs_lautemann import Definitions.Def_sgl_verifier_constructions
namespace SipserGacsLautemann
theorem shifted_cover_verifier_poly_time
(verifier : List Bool → List Bool → Bool)
(hverifier :
DecidesInPolynomialTime
(fun input : Fin 2 → List Bool =>
verifier (input 0) (input 1) = true)) :
DecidesInPolynomialTime
(fun input : Fin 3 → List Bool =>
∃ i : Fin (coverShiftCountConstruction (input 2).length),
verifier (input 0)
(List.zipWith (· != ·) (input 2)
(decodeCoverTranslationConstruction
(input 2).length (input 1) i)) = true) := by sorry
end SipserGacsLautemann