Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
м (переименовал Сведение по Карпу. Трудные и полные задачи в [[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные за...)
м (rollbackEdits.php mass rollback)
 
(не показано 17 промежуточных версий 6 участников)
Строка 2: Строка 2:
 
{{Определение
 
{{Определение
 
|definition =
 
|definition =
<tex>D</tex> — множество языков, <tex>\widetilde{D}</tex> — класс функций, соответствующих языкам из <tex>D</tex>.
+
'''Язык <tex>L_1</tex> сводится по Карпу к языку <tex>L_2</tex> (<tex>L_1 \leq L_2</tex>)''', если существует такая функция <tex>f</tex>, работающая за полином, что <tex>x</tex> принадлежит <tex>L_1</tex> тогда и только тогда, когда <tex>f(x)</tex> принадлежит <tex>L_2</tex>.
'''Язык <tex>L_1</tex> сводится к языку <tex>L_2</tex> относительно <tex>\widetilde{D}</tex> (<tex>L_1 \leq_{\widetilde{D}} L_2</tex>)''', если существует такая функция <tex>f(x)</tex> из <tex>\widetilde{D}</tex>, что <tex>x</tex> принадлежит <tex>L_1</tex> тогда и только тогда, когда <tex>f(x)</tex> принадлежит <tex>L_2</tex>:<br>
 
<tex> (L_1 \leq_{\widetilde{D}} L_2) \overset{\underset{\mathrm{def}}{}}{\iff} ( \exists f \in \widetilde{D} : x \in L_1 \Leftrightarrow f(x) \in L_2 ) </tex>.
 
}}
 
{{Определение
 
|definition =
 
Сведение относительно <tex>\widetilde{P}</tex> называется '''сведением по Карпу'''.
 
 
}}
 
}}
  
'''Замечание.''' Часто используется именно сведение по Карпу, поэтому слова «относительно сведения по Карпу» и индекс у символа сведения обычно опускаются. Например, [[Примеры NP-полных языков. Теорема Кука | NP-полные языки]].
+
== Простой пример сведения по Карпу ==
 
 
== Банальный пример сведения по Карпу ==
 
 
Зададим следующие языки:
 
Зададим следующие языки:
* <tex>IND</tex> — множество пар вида <tex> \langle G, k \rangle </tex>, где <tex>G</tex> — граф, а <tex>k</tex> — число, таких, что в <tex>G</tex> есть [http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D0%BD%D0%B5%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D0%BC_%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B5#.D0.9E.D0.BF.D1.80.D0.B5.D0.B4.D0.B5.D0.BB.D0.B5.D0.BD.D0.B8.D1.8F независимое множество] размера <tex>k</tex>.
+
* <tex>IND</tex> — множество пар вида <tex> \langle G, k \rangle </tex>, где <tex>G</tex> — граф, а <tex>k</tex> — число, такое, что в <tex>G</tex> есть [http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D0%BD%D0%B5%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D0%BC_%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B5#.D0.9E.D0.BF.D1.80.D0.B5.D0.B4.D0.B5.D0.BB.D0.B5.D0.BD.D0.B8.D1.8F независимое множество] размера <tex>k</tex>.
 
* <tex>CLIQUE</tex> — множество пар вида <tex> \langle G, k \rangle </tex>, где <tex>G</tex> — граф, а <tex>k</tex> — число, такое, что в <tex>G</tex> есть [http://ru.wikipedia.org/wiki/%D0%9A%D0%BB%D0%B8%D0%BA%D0%B0_(%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D0%B3%D1%80%D0%B0%D1%84%D0%BE%D0%B2) клика] размера <tex>k</tex>.
 
* <tex>CLIQUE</tex> — множество пар вида <tex> \langle G, k \rangle </tex>, где <tex>G</tex> — граф, а <tex>k</tex> — число, такое, что в <tex>G</tex> есть [http://ru.wikipedia.org/wiki/%D0%9A%D0%BB%D0%B8%D0%BA%D0%B0_(%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D0%B3%D1%80%D0%B0%D1%84%D0%BE%D0%B2) клика] размера <tex>k</tex>.
 
{{Теорема
 
{{Теорема
 
|statement= <tex>IND \leq CLIQUE</tex>
 
|statement= <tex>IND \leq CLIQUE</tex>
 
|proof=
 
|proof=
Рассмотрим функцию <tex>f( \langle G, k \rangle ) = \langle \overline{G}, k \rangle</tex>, где <tex>\overline{G}</tex> — [http://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D0%B0 дополнение графа] <tex>G</tex>. <tex>f</tex> вычислима за линейное время от длины входа, если граф представлен в видел матрицы смежности.<br>
+
Рассмотрим функцию <tex>f( \langle G, k \rangle ) = \langle \overline{G}, k \rangle</tex>, где <tex>\overline{G}</tex> — [http://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D0%B0 дополнение графа] <tex>G</tex>. <tex>f</tex> вычислима за линейное время от длины входа, если граф задан в виде матрицы смежности.<br>
* (<tex>x \in L_1 \Rightarrow f(x) \in L_2</tex>) Заметим, что, если в <tex>G</tex> было независимое множество размера <tex>k</tex>, то в <tex>\overline{G}</tex> будет клика такого же размера (вершины, которые были в независимом множестве, в <tex>\overline{G}</tex> попарно соединены рёбрами и образуют клику).
+
* (<tex>x \in L_1 \Rightarrow f(x) \in L_2</tex>). Заметим, что, если в <tex>G</tex> было независимое множество размера <tex>k</tex>, то в <tex>\overline{G}</tex> будет клика такого же размера (вершины, которые были в независимом множестве, в <tex>\overline{G}</tex> попарно соединены рёбрами и образуют клику).
* (<tex>x \in L_1 \Leftarrow f(x) \in L_2</tex>) Обратно, если в <tex>\overline{G}</tex> есть клика размера <tex>k</tex>, то в исходном графе было независимое множество размера <tex>k</tex>.
+
* (<tex>x \in L_1 \Leftarrow f(x) \in L_2</tex>). Обратно, если в <tex>\overline{G}</tex> есть клика размера <tex>k</tex>, то в исходном графе было независимое множество размера <tex>k</tex>.
 
Таким образом, <tex>IND \leq CLIQUE</tex> по определению.
 
Таким образом, <tex>IND \leq CLIQUE</tex> по определению.
 
}}
 
}}
'''Замечание.''' Многие другие примеры сведения по Карпу могут быть найдены в статье про [[Примеры NP-полных языков. Теорема Кука | примеры NP-полных языков]].
+
'''Замечание.''' Другие примеры сведения по Карпу приведены в статье, содержащей [[Примеры NP-полных языков. Теорема Кука | примеры NP-полных языков]].
  
 
== Свойства сведения ==
 
== Свойства сведения ==
Строка 33: Строка 25:
 
|statement=Сведение по Карпу транзитивно, то есть: <tex> ( L_1 \leq L_2, L_2 \leq L_3 ) \Rightarrow L_1 \leq L_3 </tex>.
 
|statement=Сведение по Карпу транзитивно, то есть: <tex> ( L_1 \leq L_2, L_2 \leq L_3 ) \Rightarrow L_1 \leq L_3 </tex>.
 
|proof=
 
|proof=
Пусть <tex>f</tex> и <tex>g</tex> — функции из определения сведения для <tex> L_1 \leq L_2 </tex> и <tex> L_2 \leq L_3 </tex> соответственно. Из определения следует: <tex>x \in L_1 \Leftrightarrow f(x) \in L_2 \Leftrightarrow g(f(x)) \in L_3</tex>.<br>
+
Пусть <tex>f</tex> и <tex>g</tex> — функции из определения сведения для <tex> L_1 \leq L_2 </tex> и <tex> L_2 \leq L_3 </tex> соответственно. Из определения следует: <tex>x \in L_1 \Leftrightarrow f(x) \in L_2 \Leftrightarrow g(f(x)) \in L_3</tex>.
Проверим, что <tex>g(f(x))</tex> вычислима за полиномиальное время от <tex>|x|</tex>. В самом деле, сначала нужно вычислить <tex>f(x)</tex>, на это необходимо не более, чем <tex>p_1(|x|)</tex> времени (<tex>p_1</tex> — полином). Более того, длина входа <tex>g</tex> в <tex>g(f(x))</tex> не превышает того же <tex>p_1(|x|)</tex>, так как за единицу времени может быть выведен максимум один символ. Значит, вычисление <tex>g</tex> на <tex>f(x)</tex> займёт времени не более, чем <tex>p_2(|f(x)|)</tex> (<tex>p_2</tex> тоже полином), что, по выше сказанному, не превосходит <tex>p_2(p_1(|x|))</tex>.
+
 
В итоге получаем, что итоговое время работы <tex>g(f(x))</tex> не более, чем <tex>p_2(p_1(|x|)) + p_1(|x|)</tex>, что является полиномом от <tex>|x|</tex>.
+
Проверим, что <tex>g(f(x))</tex> вычислима за полиномиальное от <tex>|x|</tex> время.<br/>
 +
Действительно, первым делом необходимо вычислить <tex>f(x)</tex>, на это уйдет полином от <tex>|x|</tex> времени.<br/>
 +
Кроме того, длина входа <tex>g</tex>, являющегося выводом <tex>f(x)</tex>, тоже полиномиальна, так как за единицу времени может быть выведено не более, чем константное число символов. Значит, вычисление <tex>g(f(x))</tex> также займет времени не более, чем полином от <tex>|x|</tex>.
 +
 
 +
Таким образом, полное время работы программы есть сумма полиномов от <tex>|x|</tex> и потому тоже является полиномом от <tex>|x|</tex>.
 +
}}
 +
 
 +
== Определения трудных и полных задач ==
 +
 
 +
{{Определение
 +
|definition =
 +
<tex>C</tex> — сложностный класс. Язык <tex>L</tex> называется '''<tex>C</tex>-трудным (относительно полиномиального сведения) (<tex>C</tex>-hard)''', если любой язык <tex>M</tex> из <tex>C</tex> сводится по Карпу к <tex>L</tex>:<br>
 +
<tex> (L </tex> — <tex>C</tex>-hard <tex>) \overset{\underset{\mathrm{def}}{}}{\Leftrightarrow} ( \forall M \in C \Rightarrow M \leq L) </tex>.
 +
}}
 +
 
 +
{{Определение
 +
|definition =
 +
<tex>C</tex> — сложностный класс. Язык <tex>L</tex> называется '''<tex>C</tex>-полным (относительно полиномиального сведения) (<tex>C</tex>-complete)''', если <tex>L</tex> является <tex>C</tex>-трудным и сам лежит в <tex>C</tex>.
 
}}
 
}}
 +
 +
== Обобщение на другие ограничения на сведения ==
 +
{{Определение
 +
|definition =
 +
<tex>D</tex> — класс языков, распознаваемых программами с некоторыми ограничениями. Тогда обозначим <tex>\widetilde{D}</tex> класс вычислимых функций, вычисляемых программами с теми же ограничениями.
 +
}}
 +
{{Определение
 +
|definition =
 +
'''Язык <tex>L_1</tex> <tex>\widetilde{D}</tex>-сводится по Карпу к языку <tex>L_2</tex> (<tex>L_1 \leq_{\widetilde{D}} L_2</tex>)''', если существует такая функция <tex>f</tex> из <tex>\widetilde{D}</tex>, что <tex>x</tex> принадлежит <tex>L_1</tex> тогда и только тогда, когда <tex>f(x)</tex> принадлежит <tex>L_2</tex>:<br>
 +
<tex> (L_1 \leq_{\widetilde{D}} L_2) \overset{\underset{\mathrm{def}}{}}{\iff} ( \exists f \in \widetilde{D} : x \in L_1 \Leftrightarrow f(x) \in L_2 ) </tex>.
 +
}}
 +
'''Замечание.''' Часто используется сведение из <tex>\widetilde{P}</tex>, поэтому вместо «<tex>\widetilde{P}</tex>-сводится по Карпу» говорят просто «сводится». Также индекс у символа сведения обычно опускают.
  
 
{{Лемма
 
{{Лемма
 
|statement=<tex>(L_1 \leq_{\widetilde{D}} L_2) \Leftrightarrow (\overline {L_1} \leq_{\widetilde{D}} \overline {L_2})</tex>
 
|statement=<tex>(L_1 \leq_{\widetilde{D}} L_2) \Leftrightarrow (\overline {L_1} \leq_{\widetilde{D}} \overline {L_2})</tex>
 +
|id=lemma
 
|proof=
 
|proof=
 
По определению сведения существует такая функция <tex>f</tex> из класса <tex>\widetilde{D}</tex>, что <tex>x \in L_1 \Leftrightarrow f(x) \in L_2</tex>. Для того, чтобы свести <tex>\overline{L_1}</tex> к <tex>\overline{L_2}</tex> будем использовать ту же функцию <tex>f</tex>.<br>
 
По определению сведения существует такая функция <tex>f</tex> из класса <tex>\widetilde{D}</tex>, что <tex>x \in L_1 \Leftrightarrow f(x) \in L_2</tex>. Для того, чтобы свести <tex>\overline{L_1}</tex> к <tex>\overline{L_2}</tex> будем использовать ту же функцию <tex>f</tex>.<br>
 
В самом деле: <tex>( x \in L_1 \Leftrightarrow f(x) \in L_2 ) \iff ( \overline{x \in L_1} \Leftrightarrow \overline{f(x) \in L_2} ) </tex> <tex>\iff ( x \in \overline{L_1} \Leftrightarrow f(x) \in \overline{L_2} ) \iff (\overline {L_1} \leq_{\widetilde{D}} \overline {L_2})</tex>.
 
В самом деле: <tex>( x \in L_1 \Leftrightarrow f(x) \in L_2 ) \iff ( \overline{x \in L_1} \Leftrightarrow \overline{f(x) \in L_2} ) </tex> <tex>\iff ( x \in \overline{L_1} \Leftrightarrow f(x) \in \overline{L_2} ) \iff (\overline {L_1} \leq_{\widetilde{D}} \overline {L_2})</tex>.
 
}}
 
}}
 
== Определения трудных и сложных задач ==
 
  
 
{{Определение
 
{{Определение
 
|definition =
 
|definition =
<tex>C</tex> — сложностный класс, <tex>\widetilde{D}</tex> — сведение. Язык <tex>L</tex> называется '''<tex>C</tex>-трудным относительно <tex>\widetilde{D}</tex>-сведения (<tex>C</tex>-hard)''', если любой язык <tex>M</tex> из <tex>C</tex> сводится к <tex>L</tex> относительно <tex>\widetilde{D}</tex>:<br>
+
<tex>C</tex> — сложностный класс, <tex>\widetilde{D}</tex> — класс вычислимых функций. Язык <tex>L</tex> называется '''<tex>C</tex>-трудным относительно <tex>\widetilde{D}</tex>-сведения (<tex>C</tex>-hard)''', если любой язык <tex>M</tex> из <tex>C</tex> <tex>\widetilde{D}</tex>-сводится к <tex>L</tex>:<br>
 
<tex> (L </tex> — <tex>C</tex>-hard <tex>) \overset{\underset{\mathrm{def}}{}}{\Leftrightarrow} ( \forall M \in C \Rightarrow M \leq_{f} L, f \in \widetilde{D} ) </tex>.
 
<tex> (L </tex> — <tex>C</tex>-hard <tex>) \overset{\underset{\mathrm{def}}{}}{\Leftrightarrow} ( \forall M \in C \Rightarrow M \leq_{f} L, f \in \widetilde{D} ) </tex>.
 
}}
 
}}
Строка 55: Строка 75:
 
{{Определение
 
{{Определение
 
|definition =
 
|definition =
<tex>C</tex> — сложностный класс, <tex>\widetilde{D}</tex> — сведение. Язык <tex>L</tex> называется '''<tex>C</tex>-полным относительно <tex>\widetilde{D}</tex>-сведения (<tex>C</tex>-complete)''', если <tex>L</tex> является <tex>C</tex>-трудным относительно <tex>\widetilde{D}</tex>-сведения и сам лежит в <tex>C</tex>.
+
<tex>C</tex> — сложностный класс, <tex>\widetilde{D}</tex> — класс вычислимых функций. Язык <tex>L</tex> называется '''<tex>C</tex>-полным относительно <tex>\widetilde{D}</tex>-сведения (<tex>C</tex>-complete)''', если <tex>L</tex> является <tex>C</tex>-трудным относительно <tex>\widetilde{D}</tex>-сведения и сам лежит в <tex>C</tex>.
 
}}
 
}}
 +
 +
[[Категория: Теория сложности]]

Текущая версия на 19:37, 4 сентября 2022

Определения

Определение:
Язык [math]L_1[/math] сводится по Карпу к языку [math]L_2[/math] ([math]L_1 \leq L_2[/math]), если существует такая функция [math]f[/math], работающая за полином, что [math]x[/math] принадлежит [math]L_1[/math] тогда и только тогда, когда [math]f(x)[/math] принадлежит [math]L_2[/math].


Простой пример сведения по Карпу

Зададим следующие языки:

  • [math]IND[/math] — множество пар вида [math] \langle G, k \rangle [/math], где [math]G[/math] — граф, а [math]k[/math] — число, такое, что в [math]G[/math] есть независимое множество размера [math]k[/math].
  • [math]CLIQUE[/math] — множество пар вида [math] \langle G, k \rangle [/math], где [math]G[/math] — граф, а [math]k[/math] — число, такое, что в [math]G[/math] есть клика размера [math]k[/math].
Теорема:
[math]IND \leq CLIQUE[/math]
Доказательство:
[math]\triangleright[/math]

Рассмотрим функцию [math]f( \langle G, k \rangle ) = \langle \overline{G}, k \rangle[/math], где [math]\overline{G}[/math]дополнение графа [math]G[/math]. [math]f[/math] вычислима за линейное время от длины входа, если граф задан в виде матрицы смежности.

  • ([math]x \in L_1 \Rightarrow f(x) \in L_2[/math]). Заметим, что, если в [math]G[/math] было независимое множество размера [math]k[/math], то в [math]\overline{G}[/math] будет клика такого же размера (вершины, которые были в независимом множестве, в [math]\overline{G}[/math] попарно соединены рёбрами и образуют клику).
  • ([math]x \in L_1 \Leftarrow f(x) \in L_2[/math]). Обратно, если в [math]\overline{G}[/math] есть клика размера [math]k[/math], то в исходном графе было независимое множество размера [math]k[/math].
Таким образом, [math]IND \leq CLIQUE[/math] по определению.
[math]\triangleleft[/math]

Замечание. Другие примеры сведения по Карпу приведены в статье, содержащей примеры NP-полных языков.

Свойства сведения

Теорема (о транзитивности):
Сведение по Карпу транзитивно, то есть: [math] ( L_1 \leq L_2, L_2 \leq L_3 ) \Rightarrow L_1 \leq L_3 [/math].
Доказательство:
[math]\triangleright[/math]

Пусть [math]f[/math] и [math]g[/math] — функции из определения сведения для [math] L_1 \leq L_2 [/math] и [math] L_2 \leq L_3 [/math] соответственно. Из определения следует: [math]x \in L_1 \Leftrightarrow f(x) \in L_2 \Leftrightarrow g(f(x)) \in L_3[/math].

Проверим, что [math]g(f(x))[/math] вычислима за полиномиальное от [math]|x|[/math] время.
Действительно, первым делом необходимо вычислить [math]f(x)[/math], на это уйдет полином от [math]|x|[/math] времени.
Кроме того, длина входа [math]g[/math], являющегося выводом [math]f(x)[/math], тоже полиномиальна, так как за единицу времени может быть выведено не более, чем константное число символов. Значит, вычисление [math]g(f(x))[/math] также займет времени не более, чем полином от [math]|x|[/math].

Таким образом, полное время работы программы есть сумма полиномов от [math]|x|[/math] и потому тоже является полиномом от [math]|x|[/math].
[math]\triangleleft[/math]

Определения трудных и полных задач

Определение:
[math]C[/math] — сложностный класс. Язык [math]L[/math] называется [math]C[/math]-трудным (относительно полиномиального сведения) ([math]C[/math]-hard), если любой язык [math]M[/math] из [math]C[/math] сводится по Карпу к [math]L[/math]:
[math] (L [/math][math]C[/math]-hard [math]) \overset{\underset{\mathrm{def}}{}}{\Leftrightarrow} ( \forall M \in C \Rightarrow M \leq L) [/math].


Определение:
[math]C[/math] — сложностный класс. Язык [math]L[/math] называется [math]C[/math]-полным (относительно полиномиального сведения) ([math]C[/math]-complete), если [math]L[/math] является [math]C[/math]-трудным и сам лежит в [math]C[/math].


Обобщение на другие ограничения на сведения

Определение:
[math]D[/math] — класс языков, распознаваемых программами с некоторыми ограничениями. Тогда обозначим [math]\widetilde{D}[/math] класс вычислимых функций, вычисляемых программами с теми же ограничениями.


Определение:
Язык [math]L_1[/math] [math]\widetilde{D}[/math]-сводится по Карпу к языку [math]L_2[/math] ([math]L_1 \leq_{\widetilde{D}} L_2[/math]), если существует такая функция [math]f[/math] из [math]\widetilde{D}[/math], что [math]x[/math] принадлежит [math]L_1[/math] тогда и только тогда, когда [math]f(x)[/math] принадлежит [math]L_2[/math]:
[math] (L_1 \leq_{\widetilde{D}} L_2) \overset{\underset{\mathrm{def}}{}}{\iff} ( \exists f \in \widetilde{D} : x \in L_1 \Leftrightarrow f(x) \in L_2 ) [/math].

Замечание. Часто используется сведение из [math]\widetilde{P}[/math], поэтому вместо «[math]\widetilde{P}[/math]-сводится по Карпу» говорят просто «сводится». Также индекс у символа сведения обычно опускают.

Лемма:
[math](L_1 \leq_{\widetilde{D}} L_2) \Leftrightarrow (\overline {L_1} \leq_{\widetilde{D}} \overline {L_2})[/math]
Доказательство:
[math]\triangleright[/math]

По определению сведения существует такая функция [math]f[/math] из класса [math]\widetilde{D}[/math], что [math]x \in L_1 \Leftrightarrow f(x) \in L_2[/math]. Для того, чтобы свести [math]\overline{L_1}[/math] к [math]\overline{L_2}[/math] будем использовать ту же функцию [math]f[/math].

В самом деле: [math]( x \in L_1 \Leftrightarrow f(x) \in L_2 ) \iff ( \overline{x \in L_1} \Leftrightarrow \overline{f(x) \in L_2} ) [/math] [math]\iff ( x \in \overline{L_1} \Leftrightarrow f(x) \in \overline{L_2} ) \iff (\overline {L_1} \leq_{\widetilde{D}} \overline {L_2})[/math].
[math]\triangleleft[/math]


Определение:
[math]C[/math] — сложностный класс, [math]\widetilde{D}[/math] — класс вычислимых функций. Язык [math]L[/math] называется [math]C[/math]-трудным относительно [math]\widetilde{D}[/math]-сведения ([math]C[/math]-hard), если любой язык [math]M[/math] из [math]C[/math] [math]\widetilde{D}[/math]-сводится к [math]L[/math]:
[math] (L [/math][math]C[/math]-hard [math]) \overset{\underset{\mathrm{def}}{}}{\Leftrightarrow} ( \forall M \in C \Rightarrow M \leq_{f} L, f \in \widetilde{D} ) [/math].


Определение:
[math]C[/math] — сложностный класс, [math]\widetilde{D}[/math] — класс вычислимых функций. Язык [math]L[/math] называется [math]C[/math]-полным относительно [math]\widetilde{D}[/math]-сведения ([math]C[/math]-complete), если [math]L[/math] является [math]C[/math]-трудным относительно [math]\widetilde{D}[/math]-сведения и сам лежит в [math]C[/math].