Изменения

Перейти к: навигация, поиск

Разрешимые (рекурсивные) языки

1570 байт добавлено, 19:23, 4 сентября 2022
м
rollbackEdits.php mass rollback
|statement=
Универсальный язык неразрешим.
|proof}}===Доказательство===Приведём доказательство от противного. Пусть язык <tex>U</tex> разрешим, тогда существует программа  <tex>u(\langle p, x \rangle) = \begin{cases}1, \ \langle p, x \rangle \in U \\0, \ \langle p, x \rangle \notin U\end{cases}</tex>  Составим следующую программу:  <tex>r(x) {:} </tex> '''if''' <tex>u(\langle x, x \rangle) == 1 </tex> '''while''' ''true'' '''else''' '''return''' 1 Рассмотрим вызов <tex> r(r) </tex>:* Eсли <tex> u(\langle r, r \rangle) = 1 </tex>, то условие <tex>\mathrm{if}</tex> выполнится и программа зависнет, но, так как программа <tex> u </tex> разрешает универсальный язык, <tex> u(\langle r, r \rangle) = 1 \Rightarrow r(r) = 1</tex>;* Eсли <tex> u(\langle r, r \rangle) = 0 </tex>, то условие <tex>\mathrm{if}</tex> не выполнится и программа вернет <tex>1</tex>, но, так как программа <tex> u </tex> разрешает универсальный язык, <tex> u(\langle r, r \rangle) = 0 \Rightarrow r(r) \ne 1</tex>. Из предположения о разрешимости универсального языка мы пришли к противоречию. ===Альтернативное доказательство с использованием теоремы о рекурсии===
По [[Теорема о рекурсии | теореме о рекурсии]], программа может знать свой исходный код. Значит, в неё можно написать функцию <tex> \mathrm{getSrc()} </tex>, которая вернёт строку {{---}} исходный код программы.
Допустим, что он язык разрешим. Тогда напишем такую программу:  <codetex> p(x){:}</tex> '''if''' <tex>u(\mathrm{getSrc()}, x)</tex>
'''while''' ''true''
'''else'''
'''return''' 1
</code>
 Если <tex> u(p, x) = 1 </tex>, тогда программа <tex> p </tex> на входе <tex> x </tex> должна вернуть <tex> 1 </tex>, но по условию <tex> \mathrm{if } </tex> она зависает, а следовательно, не принадлежит универсальному языку.
Если же <tex> u(p, x) \neq 1 </tex>, то мы пойдём во вторую ветку условного оператора и вернём <tex> 1 </tex>, значит, пара <tex>
\langle p, x \rangle </tex> принадлежит универсальному языку, но <tex> u(p, x) \neq 1 </tex>, значит, пара не принадлежит. Опять получили противоречие.
}}
== Примечания ==
1632
правки

Навигация