Promise problems and promise complexity classes #
This module exposes disjoint yes/no promise problems, semantic Boolean solvers,
side-preserving maps, polynomial-time many-one reductions, complements, and the
total embedding of ordinary languages. PromiseClass lifts an ordinary
language class by completions, yielding PromiseP, PromiseNP, and
PromiseCoNP without assigning semantics outside the promise.
A promised yes-instance cannot also be a promised no-instance.
A promised no-instance cannot also be a promised yes-instance.
The promise is exactly the union of the two constrained sides.
Complementing a promise problem twice recovers it.
Complementing a problem does not change its promised input set.
Solving the complemented promise is equivalent to complementing the Boolean output of a solver for the original problem.
The ordinary-language embedding promises every input.
Identity preserves both sides of every promise problem.
Side-preserving maps compose.
Polynomial-time promise reducibility is reflexive.
Polynomial-time promise reductions compose.
On total embedded languages, preserving both promised sides is equivalent to the usual membership equivalence.
Promise-class membership transports backward along a polynomial-time side-preserving reduction whenever the underlying language class is closed under polynomial-time preimages.
PromiseP is closed backward under polynomial-time promise reductions.
PromiseNP is closed backward under polynomial-time promise reductions.
A promise problem belongs to PromiseNP whenever its yes-instance
language itself belongs to NP.
An FNP relation characterizing the promised yes-instances yields
PromiseNP membership, conditional only on the generic guess-and-verify NTM
construction.
A total embedded language lies in a lifted promise class exactly when the language lies in the underlying class.
Total-language embedding preserves and reflects P.
Total-language embedding preserves and reflects NP.
Total-language embedding preserves and reflects coNP.
Every completion induces an identity reduction from the promise problem to the corresponding total embedded language.
Embedding a total language is promise-NP-complete exactly when the original language is NP-complete.
Inclusion of ordinary language classes lifts to their completion-based promise classes.
Deterministic polynomial-time promise problems lie in PromiseNP.
Hardness against all total languages in C is equivalent to hardness
against every problem in the completion-based promise lift of C.
In particular, NP-hardness of a promise target may equivalently quantify
over every source problem in PromiseNP.
Promise hardness transfers forward along a side-preserving polynomial reduction.
PromiseP is closed under swapping its promised yes and no sides.
Complementing a promise problem preserves PromiseP in both directions.
If an NP-hard promise target has a deterministic polynomial-time
completion, then P = NP.
Assuming P ≠ NP, no NP-hard promise target can have a deterministic
polynomial-time completion.
A promise-NP-complete problem lies in PromiseP exactly if P = NP.