Promise problems #
A promise problem is a pair of disjoint sets of instances, the yes-instances and the no-instances
Even, Selman and Yacobi, Goldreich. An instance in
neither set is outside the promise, and an algorithm solving the problem may answer anything on
it. A decision problem A : Set α is the promise problem whose yes-instances are A and whose
no-instances are Aᶜ (PromiseProblem.ofSet).
A class C of decision problems lifts to promise problems through completions:
promiseClass C consists of the promise problems separated by some problem in C, one that
contains every yes-instance and no no-instance. PromiseP enc and PromiseNP enc are the lifts
of P enc and NP enc, and they agree with Goldreich's definitions by polynomial-time algorithms
and verifiers that are only constrained on the promise (mem_PromiseP_iff, mem_PromiseNP_iff).
A decision problem is in a lifted class exactly when it is in the class
(ofSet_mem_promiseClass), so lifting is injective, and PromiseP enc = PromiseNP enc exactly
when P enc = NP enc (PromiseP_eq_PromiseNP_iff).
Main definitions #
Cslib.Complexity.PromiseProblem, with the complementQᶜexchanging the yes-instances and the no-instances.Cslib.Complexity.PromiseProblem.ofSet: a decision problem as a promise problem.Cslib.Complexity.PromiseProblem.SolvedBy: a Boolean function solves a promise problem.Cslib.Complexity.promiseClass: the lift of a class of decision problems.Cslib.Complexity.PromiseP,Cslib.Complexity.PromiseNP.
Main results #
Cslib.Complexity.ofSet_mem_promiseClass,Cslib.Complexity.promiseClass_inj: lifting reflects membership and equality of classes.Cslib.Complexity.mem_promiseClass_iff_solvedBy: the lift of a class defined by deciding functions consists of the promise problems solved by such functions.Cslib.Complexity.mem_PromiseP_iff,Cslib.Complexity.mem_PromiseNP_iff: Goldreich's definitions.Cslib.Complexity.PromiseP_eq_PromiseNP_iff:PromiseP = PromiseNP ↔ P = NP.
References #
The promise: the instances that are yes-instances or no-instances.
Instances For
f solves Q when it answers true on the yes-instances and false on the no-instances;
its answers outside the promise do not matter.
Instances For
A decision problem as a promise problem: every instance is in the promise.
Instances For
The complement of a promise problem exchanges its yes-instances and its no-instances.
A function solves the complement of a promise problem when its negation solves the problem.
Lifting classes of decision problems #
The lift of a class C of decision problems to promise problems: the promise problems
separated by a problem in C, which contains every yes-instance and no no-instance.
Instances For
A decision problem is in the lift of a class exactly when it is in the class.
Two classes of decision problems have the same lift to promise problems exactly when they are equal.
If a class is closed under complement, so is its lift.
If the problems in C are those decided by the functions satisfying Good, then the lift of
C consists of the promise problems solved by such functions.
Promise-P and promise-NP #
The promise problems solved by polynomial-time algorithms, with respect to the encoding enc
of instances: the lift of P enc Goldreich.
Instances For
Goldreich's definition of promise-P: a promise problem is in PromiseP when a
polynomial-time function solves it.
The promise problems with polynomial-time verifiers, with respect to the encoding enc of
instances: the lift of NP enc Goldreich.
Instances For
Goldreich's definition of promise-NP: a promise problem is in PromiseNP when a
polynomial-time verifier accepts some certificate for every yes-instance and none for any
no-instance.