In computational complexity theory, the complexity class FNP is the function problem extension of the decision problem class NP. The name is somewhat of a misnomer, since technically it is a class of binary relations, not functions, as the following formal definition explains:
This definition does not involve nondeterminism and is analogous to the verifier definition of NP. See FP for an explanation of the distinction between FP and FNP. There is an NP language directly corresponding to every FNP relation, sometimes called the decision problem induced by or corresponding to said FNP relation. It is the language formed by taking all the x for which P(x,y) holds given some y; however, there may be more than one FNP relation for a particular decision problem.
Many problems in NP, including many NP-complete problems, ask whether a particular object exists, such as a satisfying assignment, a graph coloring, or a clique of a certain size. The FNP versions of these problems ask not only if it exists but what its value is if it does. This means that the FNP version of every NP-complete problem is NP-hard. Bellare and Goldwasser showed in 1994 using some standard assumptions that there exist problems in NP such that their FNP versions are not self-reducible, implying that they are harder than their corresponding decision problem.
For each P(x,y) in FNP, the search problem associated with P(x,y) is: given x, find a y such that P(x,y) holds, or state that no such y exists. The search problem for every relation in FNP can be solved in polynomial time if and only if P = NP. This result is usually stated as "FP = FNP if and only if P = NP"; however, for this statement to be true, it is necessary to redefine FP and FNP so that the members of FP and FNP are not relations, but are instead search problems associated with relations.