<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Function_problem</id>
	<title>Function problem - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Function_problem"/>
	<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Function_problem&amp;action=history"/>
	<updated>2026-10-25T16:24:51Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=Function_problem&amp;diff=5140199&amp;oldid=prev</id>
		<title>~2025-31734-65 at 19:41, 9 December 2025</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Function_problem&amp;diff=5140199&amp;oldid=prev"/>
		<updated>2025-12-09T19:41:25Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Previous revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 19:41, 9 December 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{short description|Type of computational problem}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{short description|Type of computational problem}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;In [[computational complexity theory]], a &#039;&#039;&#039;function problem&#039;&#039;&#039; is a [[computational problem]] where a single output &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(of a [[total function]]) &lt;/del&gt;is expected for every input, but the output is more complex than that of a [[decision problem]]. For function problems, the output is not simply &#039;yes&#039; or &#039;no&#039;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;In [[computational complexity theory]], a &#039;&#039;&#039;function problem&#039;&#039;&#039; is a [[computational problem]] where a single output is expected for every input, but the output is more complex than that of a [[decision problem]]. For function problems, the output is not simply &#039;yes&#039; or &#039;no&#039;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Definition ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Definition ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;functional &lt;/del&gt;problem &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; is defined by a [[Relation (mathematics)|relation]] &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; over [[String (computer science)|strings]] of an arbitrary [[Alphabet (computer science)|alphabet]] &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;function &lt;/ins&gt;problem&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039; &lt;/ins&gt;&amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; is defined by a [[Relation (mathematics)|relation]] &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; over [[String (computer science)|strings]] of an arbitrary [[Alphabet (computer science)|alphabet]] &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;: &amp;lt;math&amp;gt;R \subseteq \Sigma^* \times \Sigma^*.&amp;lt;/math&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;: &amp;lt;math&amp;gt;R \subseteq \Sigma^* \times \Sigma^*.&amp;lt;/math&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;An algorithm solves &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; if for every input &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; such &lt;/del&gt;that &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;there exists a &lt;/del&gt;&amp;lt;math&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;y&amp;lt;/math&amp;gt; satisfying &amp;lt;math&amp;gt;(x, y) \in &lt;/del&gt;R&amp;lt;/math&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, the algorithm produces one such &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;, and if there are no such &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;, it rejects&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Note &lt;/ins&gt;that &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;does not have to be a [[Binary_relation#Types_of_binary_relations|functional]] binary relation&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A promise function problem &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;is allowed &lt;/del&gt;to do anything (thus may not terminate) if no such &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; exists.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;An [[algorithm]] solves &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; if for every input &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; such that there exists a &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; satisfying &amp;lt;math&amp;gt;(x, y) \in R&amp;lt;/math&amp;gt;, the algorithm produces one such &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;, and if there are no such &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;, it rejects.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;&lt;/ins&gt;promise function problem&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039; permits the algorithm &lt;/ins&gt;to do anything (thus may not terminate) if no such &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; exists.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Examples ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Examples ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A well-known function problem is given by the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Functional &lt;/del&gt;Boolean &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Satisfiability Problem&lt;/del&gt;, &#039;&#039;&#039;FSAT&#039;&#039;&#039; for short. The problem, which is closely related to the [[Boolean satisfiability problem|&#039;&#039;&#039;SAT&#039;&#039;&#039;]] decision problem, can be formulated as follows:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A well-known function problem is given by the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;functional &lt;/ins&gt;Boolean &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;satisfiability problem&lt;/ins&gt;, &#039;&#039;&#039;FSAT&#039;&#039;&#039; for short. The problem, which is closely related to the [[Boolean satisfiability problem|&#039;&#039;&#039;SAT&#039;&#039;&#039;]] decision problem, can be formulated as follows:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;:Given a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;boolean &lt;/del&gt;formula &amp;lt;math&amp;gt;\varphi&amp;lt;/math&amp;gt; with variables &amp;lt;math&amp;gt;x_1, \ldots, x_n&amp;lt;/math&amp;gt;, find an assignment &amp;lt;math&amp;gt;x_i \rightarrow \{ \text{TRUE}, \text{FALSE} \}&amp;lt;/math&amp;gt; such that &amp;lt;math&amp;gt;\varphi&amp;lt;/math&amp;gt; evaluates to &amp;lt;math&amp;gt;\text{TRUE}&amp;lt;/math&amp;gt; or decide that no such assignment exists.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;:Given a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[propositional &lt;/ins&gt;formula&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]] &lt;/ins&gt;&amp;lt;math&amp;gt;\varphi&amp;lt;/math&amp;gt; with variables &amp;lt;math&amp;gt;x_1, \ldots, x_n&amp;lt;/math&amp;gt;, find an assignment &amp;lt;math&amp;gt;x_i \rightarrow \{ \text{TRUE}, \text{FALSE} \}&amp;lt;/math&amp;gt; such that &amp;lt;math&amp;gt;\varphi&amp;lt;/math&amp;gt; evaluates to &amp;lt;math&amp;gt;\text{TRUE}&amp;lt;/math&amp;gt; or decide that no such assignment exists.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;In this case the relation &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; is given by &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;tuples &lt;/del&gt;of suitably encoded &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;boolean &lt;/del&gt;formulas and satisfying assignments.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;In this case the relation &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; is given by &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pairs &lt;/ins&gt;of suitably encoded &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;propositional &lt;/ins&gt;formulas and satisfying assignments.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;While a SAT algorithm, fed with a formula &amp;lt;math&amp;gt;\varphi&amp;lt;/math&amp;gt;, only needs to return &amp;quot;unsatisfiable&amp;quot; or &amp;quot;satisfiable&amp;quot;, an FSAT algorithm needs to return some satisfying assignment in the latter case.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;While a SAT algorithm, fed with a formula &amp;lt;math&amp;gt;\varphi&amp;lt;/math&amp;gt;, only needs to return &amp;quot;unsatisfiable&amp;quot; or &amp;quot;satisfiable&amp;quot;, an FSAT algorithm needs to return some satisfying assignment in the latter case.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l22&quot;&gt;Line 22:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 24:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Relationship to other complexity classes ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Relationship to other complexity classes ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Consider an arbitrary [[decision problem]] &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; in the class [[NP (complexity)|&#039;&#039;&#039;NP&#039;&#039;&#039;]]. By the definition of &#039;&#039;&#039;NP&#039;&#039;&#039;, each problem instance &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; that is answered &#039;yes&#039; has a polynomial-size certificate &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;which &lt;/del&gt;serves as a proof for the &#039;yes&#039; answer. Thus, the set of these &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;tuples &lt;/del&gt;&amp;lt;math&amp;gt;(x,y)&amp;lt;/math&amp;gt; forms a relation, representing the function problem &quot;given &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, find a certificate &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; for &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;&quot;. This function problem is called &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;the &lt;/del&gt;&#039;&#039;function variant&#039;&#039; of &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;; it belongs to the class &#039;&#039;&#039;[[FNP (complexity)|FNP]]&#039;&#039;&#039;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Consider an arbitrary [[decision problem]] &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; in the class [[NP (complexity)|&#039;&#039;&#039;NP&#039;&#039;&#039;]]. By the definition of &#039;&#039;&#039;NP&#039;&#039;&#039;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;there is a system of certificates such that &lt;/ins&gt;each problem instance &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; that is answered &#039;yes&#039; has a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[&lt;/ins&gt;polynomial&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]]&lt;/ins&gt;-size certificate &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;that &lt;/ins&gt;serves as a proof for the &#039;yes&#039; answer &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(and problem instances answered &#039;no&#039; have no such certificates)&lt;/ins&gt;. Thus, the set of these &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pairs &lt;/ins&gt;&amp;lt;math&amp;gt;(x,y)&amp;lt;/math&amp;gt; forms a relation, representing the function problem &quot;given &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, find a certificate &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; for &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;&quot;. This function problem is called &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;a &lt;/ins&gt;&#039;&#039;function variant&#039;&#039; of &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;; it belongs to the class &#039;&#039;&#039;[[FNP (complexity)|FNP]]&#039;&#039;&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Conversely, every problem &#039;&#039;R&#039;&#039; in &#039;&#039;&#039;FNP&#039;&#039;&#039; induces a (unique) corresponding decision problem: given &#039;&#039;x&#039;&#039;, decide if there exists some &#039;&#039;y&#039;&#039; such that &#039;&#039;R&#039;&#039;(&#039;&#039;x&#039;&#039;,&#039;&#039;y&#039;&#039;) holds&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&#039;&#039;&#039;FNP&#039;&#039;&#039; can be thought of as the function class analogue of &#039;&#039;&#039;NP&#039;&#039;&#039;, in that solutions of &#039;&#039;&#039;FNP&#039;&#039;&#039; problems can be efficiently (i.e., in [[polynomial time]] in terms of the length of the input) &#039;&#039;verified&#039;&#039;, but not necessarily efficiently &#039;&#039;found&#039;&#039;. In contrast, the class &#039;&#039;&#039;[[FP (complexity)|FP]]&#039;&#039;&#039;, which can be thought of as the function class analogue of &#039;&#039;&#039;P&#039;&#039;&#039;, consists of function problems &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;whose &lt;/del&gt;solutions can be found in polynomial time.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&#039;&#039;&#039;FNP&#039;&#039;&#039; can be thought of as the function class analogue of &#039;&#039;&#039;NP&#039;&#039;&#039;, in that solutions of &#039;&#039;&#039;FNP&#039;&#039;&#039; problems can be efficiently (i.e., in [[polynomial time]] in terms of the length of the input) &#039;&#039;verified&#039;&#039;, but not necessarily efficiently &#039;&#039;found&#039;&#039;. In contrast, the class &#039;&#039;&#039;[[FP (complexity)|FP]]&#039;&#039;&#039;, which can be thought of as the function class analogue of &#039;&#039;&#039;P&#039;&#039;&#039;, consists of function problems &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;for which &lt;/ins&gt;solutions can be found in polynomial time.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Self-reducibility ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Self-reducibility ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Observe that the problem &#039;&#039;&#039;FSAT&#039;&#039;&#039; introduced above can be solved using only polynomially many calls to a subroutine &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;which &lt;/del&gt;decides the &#039;&#039;&#039;SAT&#039;&#039;&#039; problem: An algorithm can first ask whether the formula &amp;lt;math&amp;gt;\varphi&amp;lt;/math&amp;gt; is satisfiable. After that the algorithm can fix variable &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; to TRUE and ask again. If the resulting formula is still satisfiable the algorithm keeps &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; fixed to TRUE and continues to fix &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt;, otherwise it decides that &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; has to be FALSE and continues. Thus, &#039;&#039;&#039;FSAT&#039;&#039;&#039; is solvable in polynomial time using an [[Oracle machine|oracle]] deciding &#039;&#039;&#039;SAT&#039;&#039;&#039;. In general, a problem in &#039;&#039;&#039;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;NP&lt;/del&gt;&#039;&#039;&#039; is called &#039;&#039;self-reducible&#039;&#039; if &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;its function variant &lt;/del&gt;can be solved in polynomial time using an oracle &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;deciding the original &lt;/del&gt;problem. Every &#039;&#039;&#039;[[NP-complete]]&#039;&#039;&#039; problem is self-reducible&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. It is conjectured {{By whom|date=February 2020}} that the [[integer factorization problem]] is not self-reducible, because deciding whether an integer is prime is in &#039;&#039;&#039;P&#039;&#039;&#039; (easy),&amp;lt;ref name=&quot;AKS&quot;&amp;gt;{{cite journal |first1=Manindra |last1=Agrawal |first2=Neeraj |last2=Kayal |first3=Nitin |last3=Saxena |url=http://www.cse.iitk.ac.in/users/manindra/algebra/primality_v6.pdf |title=PRIMES is in P |journal=[[Annals of Mathematics]] |volume=160 |year=2004 |issue=2 |pages=781–793 |doi=10.4007/annals.2004.160.781 |jstor=3597229 |doi-access=free }}&amp;lt;/ref&amp;gt; while the integer factorization problem is believed to be hard for a classical computer&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Observe that the problem &#039;&#039;&#039;FSAT&#039;&#039;&#039; introduced above can be solved using only polynomially many calls to a subroutine &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;that &lt;/ins&gt;decides the &#039;&#039;&#039;SAT&#039;&#039;&#039; problem: An algorithm can first ask whether the formula &amp;lt;math&amp;gt;\varphi&amp;lt;/math&amp;gt; is satisfiable. After that the algorithm can fix variable &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; to TRUE and ask again. If the resulting formula is still satisfiable the algorithm keeps &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; fixed to TRUE and continues to fix &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt;, otherwise it decides that &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; has to be FALSE and continues. Thus, &#039;&#039;&#039;FSAT&#039;&#039;&#039; is solvable in polynomial time using an [[Oracle machine|oracle]] deciding &#039;&#039;&#039;SAT&#039;&#039;&#039;. In general, a problem in &#039;&#039;&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;FNP&lt;/ins&gt;&#039;&#039;&#039; is called &#039;&#039;self-reducible&#039;&#039; if &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;it &lt;/ins&gt;can be solved in polynomial time using an oracle &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;for its induced decision &lt;/ins&gt;problem. Every &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;function variant of every &lt;/ins&gt;&#039;&#039;&#039;[[NP-complete]]&#039;&#039;&#039; problem is self-reducible.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;There are several (slightly different) notions of self-reducibility.&amp;lt;ref&amp;gt;{{cite journal |first= K.|last= Ko|title= On self-reducibility and weak P-selectivity|journal= Journal of Computer and System Sciences|volume= 26|issue=2|pages=209–221|year=1983|doi= 10.1016/0022-0000(83)90013-2}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite journal |first= C.|last=Schnorr|title=Optimal algorithms for self-reducible problems|journal=In S. Michaelson and R. Milner, Editors, Proceedings of the 3rd International Colloquium on Automata, Languages, and Programming|pages=322–337|year=1976}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite journal |first=A.|last=Selman|title=Natural self-reducible sets|journal=SIAM Journal on Computing|volume=  17|issue=5|pages=989–996|year=1988|doi=10.1137/0217062 }}&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;There are several (slightly different) notions of self-reducibility.&amp;lt;ref&amp;gt;{{cite journal |first= K.|last= Ko|title= On self-reducibility and weak P-selectivity|journal= &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[&lt;/ins&gt;Journal of Computer and System Sciences&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]]&lt;/ins&gt;|volume= 26|issue=2|pages=209–221|year=1983|doi= 10.1016/0022-0000(83)90013-2}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite journal |first= C.|last=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Schnorr|authorlink = Claus P. &lt;/ins&gt;Schnorr|title=Optimal algorithms for self-reducible problems|journal=In S. Michaelson and R. Milner, Editors, Proceedings of the 3rd &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[&lt;/ins&gt;International Colloquium on Automata, Languages, and Programming&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]]&lt;/ins&gt;|pages=322–337|year=1976}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite journal |first=A.|last=Selman|title=Natural self-reducible sets|journal=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[&lt;/ins&gt;SIAM Journal on Computing&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]]&lt;/ins&gt;|volume=  17|issue=5|pages=989–996|year=1988|doi=10.1137/0217062 }}&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Reductions and complete problems ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Reductions and complete problems ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Function problems can be [[Reduction (complexity)|reduced]] much like decision problems: Given function problems &amp;lt;math&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;\Pi_R&lt;/del&gt;&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;\Pi_S&lt;/del&gt;&amp;lt;/math&amp;gt; we say that &amp;lt;math&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;\Pi_R&lt;/del&gt;&amp;lt;/math&amp;gt; reduces to &amp;lt;math&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;\Pi_S&lt;/del&gt;&amp;lt;/math&amp;gt; if there &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;exists &lt;/del&gt;polynomially-time computable functions &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; such that for all instances &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; and possible solutions &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, it holds that&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Function problems can be [[Reduction (complexity)|reduced]] much like decision problems: Given function problems &amp;lt;math&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;R&lt;/ins&gt;&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;S&lt;/ins&gt;&amp;lt;/math&amp;gt; we say that &amp;lt;math&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;R&lt;/ins&gt;&amp;lt;/math&amp;gt; reduces to &amp;lt;math&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;S&lt;/ins&gt;&amp;lt;/math&amp;gt; if there &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;exist &lt;/ins&gt;polynomially-time computable functions &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; such that for all instances &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; and possible solutions &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, it holds that&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*If &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; has an &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;-solution, then &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; has an &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;-solution.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*If &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; has an &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;-solution, then &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; has an &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;-solution.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*&amp;lt;math&amp;gt;(f(x), y) \in S \implies (x, g(x,y)) \in R.&amp;lt;/math&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*&amp;lt;math&amp;gt;(f(x), y) \in S \implies (x, g(x,y)) \in R.&amp;lt;/math&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;It is therefore possible to define &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&lt;/del&gt;&#039;&#039;FNP-&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;complete&#039;&lt;/del&gt;&#039;&#039; problems analogous to &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;the &lt;/del&gt;NP-&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;complete problem&lt;/del&gt;:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;It is therefore possible to define &#039;&#039;FNP-&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;hard&lt;/ins&gt;&#039;&#039; problems analogous to NP-&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;hard problems&lt;/ins&gt;:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A problem &amp;lt;math&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;\Pi_R&lt;/del&gt;&amp;lt;/math&amp;gt; is &#039;&#039;&#039;FNP-&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;complete&lt;/del&gt;&#039;&#039;&#039; if every problem in &#039;&#039;&#039;FNP&#039;&#039;&#039; can be reduced to &amp;lt;math&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;\Pi_R&lt;/del&gt;&amp;lt;/math&amp;gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;The complexity class of &lt;/del&gt;&#039;&#039;&#039;FNP-complete&#039;&#039;&#039; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;problems &lt;/del&gt;is &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;denoted by &#039;&#039;&#039;&lt;/del&gt;FNP-&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;C&lt;/del&gt;&#039;&#039;&#039; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;or &#039;&#039;&#039;FNPC&lt;/del&gt;&#039;&#039;&#039;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Hence the &lt;/del&gt;problem &#039;&#039;&#039;FSAT&#039;&#039;&#039; is &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;also &lt;/del&gt;an &#039;&#039;&#039;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;FNP-complete&lt;/del&gt;&#039;&#039;&#039; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;problem, and &lt;/del&gt;it holds that &amp;lt;math&amp;gt;\mathbf{P} = \mathbf{NP}&amp;lt;/math&amp;gt; if and only if &amp;lt;math&amp;gt;\mathbf{FP} = \mathbf{FNP}&amp;lt;/math&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A problem &amp;lt;math&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;R&lt;/ins&gt;&amp;lt;/math&amp;gt; is &#039;&#039;&#039;FNP-&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;hard&lt;/ins&gt;&#039;&#039;&#039; if every problem in &#039;&#039;&#039;FNP&#039;&#039;&#039; can be reduced to &amp;lt;math&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;R&lt;/ins&gt;&amp;lt;/math&amp;gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;A problem &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; is &lt;/ins&gt;&#039;&#039;&#039;FNP-complete&#039;&#039;&#039; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;if it &lt;/ins&gt;is FNP-&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;hard and in &lt;/ins&gt;&#039;&#039;&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;FNP&lt;/ins&gt;&#039;&#039;&#039;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;The &lt;/ins&gt;problem &#039;&#039;&#039;FSAT&#039;&#039;&#039; is an &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;FNP-complete problem, and hence by self-reducibility of &lt;/ins&gt;&#039;&#039;&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;FSAT&lt;/ins&gt;&#039;&#039;&#039; it holds that &amp;lt;math&amp;gt;\mathbf{P} = \mathbf{NP}&amp;lt;/math&amp;gt; if and only if &amp;lt;math&amp;gt;\mathbf{FP} = \mathbf{FNP}&amp;lt;/math&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Total function problems ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Total function problems ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The relation &amp;lt;math&amp;gt;R(x, y)&amp;lt;/math&amp;gt; used to define function problems has the drawback of being incomplete: Not every input &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; has a counterpart &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; such that &amp;lt;math&amp;gt;(x, y) \in R&amp;lt;/math&amp;gt;. Therefore the question of computability of &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;proofs &lt;/del&gt;is not separated from the question of their existence. To overcome this problem it is convenient to consider the restriction of function problems to total relations yielding the class &#039;&#039;&#039;[[TFNP]]&#039;&#039;&#039; as a subclass of &#039;&#039;&#039;FNP&#039;&#039;&#039;. This class contains problems such as the computation of pure [[Nash equilibria]] in certain strategic games where a solution is guaranteed to exist. In addition, if &#039;&#039;&#039;TFNP&#039;&#039;&#039; contains any &#039;&#039;&#039;FNP-complete&#039;&#039;&#039; problem it follows that &amp;lt;math&amp;gt;\mathbf{NP} = \textbf{co-NP}&amp;lt;/math&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The relation &amp;lt;math&amp;gt;R(x, y)&amp;lt;/math&amp;gt; used to define function problems has the drawback of being &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;possibly &lt;/ins&gt;incomplete: Not every input &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;necessarily &lt;/ins&gt;has a counterpart &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; such that &amp;lt;math&amp;gt;(x, y) \in R&amp;lt;/math&amp;gt;. Therefore the question of computability of &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;outputs &lt;/ins&gt;is not separated from the question of their existence. To overcome this problem it is convenient to consider the restriction of function problems to total relations yielding the class &#039;&#039;&#039;[[TFNP]]&#039;&#039;&#039; as a subclass of &#039;&#039;&#039;FNP&#039;&#039;&#039;. This class contains problems such as the computation of pure [[Nash equilibria]] in certain strategic games where a solution is guaranteed to exist. In addition, if &#039;&#039;&#039;TFNP&#039;&#039;&#039; contains any &#039;&#039;&#039;FNP-complete&#039;&#039;&#039; problem it follows that &amp;lt;math&amp;gt;\mathbf{NP} = \textbf{co-NP}&amp;lt;/math&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==See also==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==See also==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>~2025-31734-65</name></author>
	</entry>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=Function_problem&amp;diff=397255&amp;oldid=prev</id>
		<title>imported&gt;Nyngwang: /* Formal definition */ meta: rename section to &quot;Definition&quot;.</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Function_problem&amp;diff=397255&amp;oldid=prev"/>
		<updated>2025-05-13T14:55:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Formal definition: &lt;/span&gt; meta: rename section to &amp;quot;Definition&amp;quot;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{short description|Type of computational problem}}&lt;br /&gt;
In [[computational complexity theory]], a &amp;#039;&amp;#039;&amp;#039;function problem&amp;#039;&amp;#039;&amp;#039; is a [[computational problem]] where a single output (of a [[total function]]) is expected for every input, but the output is more complex than that of a [[decision problem]]. For function problems, the output is not simply &amp;#039;yes&amp;#039; or &amp;#039;no&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
A functional problem &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; is defined by a [[Relation (mathematics)|relation]] &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; over [[String (computer science)|strings]] of an arbitrary [[Alphabet (computer science)|alphabet]] &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;R \subseteq \Sigma^* \times \Sigma^*.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An algorithm solves &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; if for every input &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; such that there exists a &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; satisfying &amp;lt;math&amp;gt;(x, y) \in R&amp;lt;/math&amp;gt;, the algorithm produces one such &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;, and if there are no such &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;, it rejects.&lt;br /&gt;
&lt;br /&gt;
A promise function problem is allowed to do anything (thus may not terminate) if no such &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; exists.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
A well-known function problem is given by the Functional Boolean Satisfiability Problem, &amp;#039;&amp;#039;&amp;#039;FSAT&amp;#039;&amp;#039;&amp;#039; for short. The problem, which is closely related to the [[Boolean satisfiability problem|&amp;#039;&amp;#039;&amp;#039;SAT&amp;#039;&amp;#039;&amp;#039;]] decision problem, can be formulated as follows:&lt;br /&gt;
&lt;br /&gt;
:Given a boolean formula &amp;lt;math&amp;gt;\varphi&amp;lt;/math&amp;gt; with variables &amp;lt;math&amp;gt;x_1, \ldots, x_n&amp;lt;/math&amp;gt;, find an assignment &amp;lt;math&amp;gt;x_i \rightarrow \{ \text{TRUE}, \text{FALSE} \}&amp;lt;/math&amp;gt; such that &amp;lt;math&amp;gt;\varphi&amp;lt;/math&amp;gt; evaluates to &amp;lt;math&amp;gt;\text{TRUE}&amp;lt;/math&amp;gt; or decide that no such assignment exists.&lt;br /&gt;
&lt;br /&gt;
In this case the relation &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; is given by tuples of suitably encoded boolean formulas and satisfying assignments.&lt;br /&gt;
While a SAT algorithm, fed with a formula &amp;lt;math&amp;gt;\varphi&amp;lt;/math&amp;gt;, only needs to return &amp;quot;unsatisfiable&amp;quot; or &amp;quot;satisfiable&amp;quot;, an FSAT algorithm needs to return some satisfying assignment in the latter case.&lt;br /&gt;
&lt;br /&gt;
Other notable examples include the [[travelling salesman problem]], which asks for the route taken by the salesman, and the [[integer factorization problem]], which asks for the list of factors.&lt;br /&gt;
&lt;br /&gt;
== Relationship to other complexity classes ==&lt;br /&gt;
Consider an arbitrary [[decision problem]] &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; in the class [[NP (complexity)|&amp;#039;&amp;#039;&amp;#039;NP&amp;#039;&amp;#039;&amp;#039;]]. By the definition of &amp;#039;&amp;#039;&amp;#039;NP&amp;#039;&amp;#039;&amp;#039;, each problem instance &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; that is answered &amp;#039;yes&amp;#039; has a polynomial-size certificate &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; which serves as a proof for the &amp;#039;yes&amp;#039; answer. Thus, the set of these tuples &amp;lt;math&amp;gt;(x,y)&amp;lt;/math&amp;gt; forms a relation, representing the function problem &amp;quot;given &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, find a certificate &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; for &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;&amp;quot;. This function problem is called the &amp;#039;&amp;#039;function variant&amp;#039;&amp;#039; of &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;; it belongs to the class &amp;#039;&amp;#039;&amp;#039;[[FNP (complexity)|FNP]]&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;FNP&amp;#039;&amp;#039;&amp;#039; can be thought of as the function class analogue of &amp;#039;&amp;#039;&amp;#039;NP&amp;#039;&amp;#039;&amp;#039;, in that solutions of &amp;#039;&amp;#039;&amp;#039;FNP&amp;#039;&amp;#039;&amp;#039; problems can be efficiently (i.e., in [[polynomial time]] in terms of the length of the input) &amp;#039;&amp;#039;verified&amp;#039;&amp;#039;, but not necessarily efficiently &amp;#039;&amp;#039;found&amp;#039;&amp;#039;. In contrast, the class &amp;#039;&amp;#039;&amp;#039;[[FP (complexity)|FP]]&amp;#039;&amp;#039;&amp;#039;, which can be thought of as the function class analogue of &amp;#039;&amp;#039;&amp;#039;P&amp;#039;&amp;#039;&amp;#039;, consists of function problems whose solutions can be found in polynomial time.&lt;br /&gt;
&lt;br /&gt;
== Self-reducibility ==&lt;br /&gt;
Observe that the problem &amp;#039;&amp;#039;&amp;#039;FSAT&amp;#039;&amp;#039;&amp;#039; introduced above can be solved using only polynomially many calls to a subroutine which decides the &amp;#039;&amp;#039;&amp;#039;SAT&amp;#039;&amp;#039;&amp;#039; problem: An algorithm can first ask whether the formula &amp;lt;math&amp;gt;\varphi&amp;lt;/math&amp;gt; is satisfiable. After that the algorithm can fix variable &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; to TRUE and ask again. If the resulting formula is still satisfiable the algorithm keeps &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; fixed to TRUE and continues to fix &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt;, otherwise it decides that &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; has to be FALSE and continues. Thus, &amp;#039;&amp;#039;&amp;#039;FSAT&amp;#039;&amp;#039;&amp;#039; is solvable in polynomial time using an [[Oracle machine|oracle]] deciding &amp;#039;&amp;#039;&amp;#039;SAT&amp;#039;&amp;#039;&amp;#039;. In general, a problem in &amp;#039;&amp;#039;&amp;#039;NP&amp;#039;&amp;#039;&amp;#039; is called &amp;#039;&amp;#039;self-reducible&amp;#039;&amp;#039; if its function variant can be solved in polynomial time using an oracle deciding the original problem. Every &amp;#039;&amp;#039;&amp;#039;[[NP-complete]]&amp;#039;&amp;#039;&amp;#039; problem is self-reducible. It is conjectured {{By whom|date=February 2020}} that the [[integer factorization problem]] is not self-reducible, because deciding whether an integer is prime is in &amp;#039;&amp;#039;&amp;#039;P&amp;#039;&amp;#039;&amp;#039; (easy),&amp;lt;ref name=&amp;quot;AKS&amp;quot;&amp;gt;{{cite journal |first1=Manindra |last1=Agrawal |first2=Neeraj |last2=Kayal |first3=Nitin |last3=Saxena |url=http://www.cse.iitk.ac.in/users/manindra/algebra/primality_v6.pdf |title=PRIMES is in P |journal=[[Annals of Mathematics]] |volume=160 |year=2004 |issue=2 |pages=781–793 |doi=10.4007/annals.2004.160.781 |jstor=3597229 |doi-access=free }}&amp;lt;/ref&amp;gt; while the integer factorization problem is believed to be hard for a classical computer.&lt;br /&gt;
There are several (slightly different) notions of self-reducibility.&amp;lt;ref&amp;gt;{{cite journal |first= K.|last= Ko|title= On self-reducibility and weak P-selectivity|journal= Journal of Computer and System Sciences|volume= 26|issue=2|pages=209–221|year=1983|doi= 10.1016/0022-0000(83)90013-2}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite journal |first= C.|last=Schnorr|title=Optimal algorithms for self-reducible problems|journal=In S. Michaelson and R. Milner, Editors, Proceedings of the 3rd International Colloquium on Automata, Languages, and Programming|pages=322–337|year=1976}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite journal |first=A.|last=Selman|title=Natural self-reducible sets|journal=SIAM Journal on Computing|volume=  17|issue=5|pages=989–996|year=1988|doi=10.1137/0217062 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reductions and complete problems ==&lt;br /&gt;
Function problems can be [[Reduction (complexity)|reduced]] much like decision problems: Given function problems &amp;lt;math&amp;gt;\Pi_R&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\Pi_S&amp;lt;/math&amp;gt; we say that &amp;lt;math&amp;gt;\Pi_R&amp;lt;/math&amp;gt; reduces to &amp;lt;math&amp;gt;\Pi_S&amp;lt;/math&amp;gt; if there exists polynomially-time computable functions &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; such that for all instances &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; and possible solutions &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, it holds that&lt;br /&gt;
&lt;br /&gt;
*If &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; has an &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;-solution, then &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; has an &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;-solution.&lt;br /&gt;
*&amp;lt;math&amp;gt;(f(x), y) \in S \implies (x, g(x,y)) \in R.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is therefore possible to define &amp;#039;&amp;#039;&amp;#039;FNP-complete&amp;#039;&amp;#039;&amp;#039; problems analogous to the NP-complete problem:&lt;br /&gt;
&lt;br /&gt;
A problem &amp;lt;math&amp;gt;\Pi_R&amp;lt;/math&amp;gt; is &amp;#039;&amp;#039;&amp;#039;FNP-complete&amp;#039;&amp;#039;&amp;#039; if every problem in &amp;#039;&amp;#039;&amp;#039;FNP&amp;#039;&amp;#039;&amp;#039; can be reduced to &amp;lt;math&amp;gt;\Pi_R&amp;lt;/math&amp;gt;. The complexity class of &amp;#039;&amp;#039;&amp;#039;FNP-complete&amp;#039;&amp;#039;&amp;#039; problems is denoted by &amp;#039;&amp;#039;&amp;#039;FNP-C&amp;#039;&amp;#039;&amp;#039; or &amp;#039;&amp;#039;&amp;#039;FNPC&amp;#039;&amp;#039;&amp;#039;. Hence the problem &amp;#039;&amp;#039;&amp;#039;FSAT&amp;#039;&amp;#039;&amp;#039; is also an &amp;#039;&amp;#039;&amp;#039;FNP-complete&amp;#039;&amp;#039;&amp;#039; problem, and it holds that &amp;lt;math&amp;gt;\mathbf{P} = \mathbf{NP}&amp;lt;/math&amp;gt; if and only if &amp;lt;math&amp;gt;\mathbf{FP} = \mathbf{FNP}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Total function problems ==&lt;br /&gt;
The relation &amp;lt;math&amp;gt;R(x, y)&amp;lt;/math&amp;gt; used to define function problems has the drawback of being incomplete: Not every input &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; has a counterpart &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; such that &amp;lt;math&amp;gt;(x, y) \in R&amp;lt;/math&amp;gt;. Therefore the question of computability of proofs is not separated from the question of their existence. To overcome this problem it is convenient to consider the restriction of function problems to total relations yielding the class &amp;#039;&amp;#039;&amp;#039;[[TFNP]]&amp;#039;&amp;#039;&amp;#039; as a subclass of &amp;#039;&amp;#039;&amp;#039;FNP&amp;#039;&amp;#039;&amp;#039;. This class contains problems such as the computation of pure [[Nash equilibria]] in certain strategic games where a solution is guaranteed to exist. In addition, if &amp;#039;&amp;#039;&amp;#039;TFNP&amp;#039;&amp;#039;&amp;#039; contains any &amp;#039;&amp;#039;&amp;#039;FNP-complete&amp;#039;&amp;#039;&amp;#039; problem it follows that &amp;lt;math&amp;gt;\mathbf{NP} = \textbf{co-NP}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Decision problem]]&lt;br /&gt;
*[[Search problem]]&lt;br /&gt;
*[[Counting problem (complexity)]]&lt;br /&gt;
*[[Optimization problem]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
{{more footnotes|date=October 2015}}&lt;br /&gt;
{{refbegin}}&lt;br /&gt;
* Raymond Greenlaw, H. James Hoover, &amp;#039;&amp;#039;Fundamentals of the theory of computation: principles and practice&amp;#039;&amp;#039;, Morgan Kaufmann, 1998, {{ISBN|1-55860-474-X}}, p.&amp;amp;nbsp;45-51&lt;br /&gt;
* [[Elaine Rich]], &amp;#039;&amp;#039;Automata, computability and complexity: theory and applications&amp;#039;&amp;#039;, Prentice Hall, 2008, {{ISBN|0-13-228806-0}}, section 28.10 &amp;quot;The problem classes FP and FNP&amp;quot;, pp.&amp;amp;nbsp;689–694&lt;br /&gt;
{{refend}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Computational problems]]&lt;br /&gt;
[[Category:Functions and mappings]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Nyngwang</name></author>
	</entry>
</feed>