Изменения

Перейти к: навигация, поиск
Альтернативное доказательство с использованием теоремы о рекурсии
= Определения = Свойства языков ==
Рассмотрим множество всех [[Перечислимые_языки|перечислимых]] языков <tex> \mathrm {RE } </tex>.
{{Определение
|definition='''Свойством языков''' (англ. ''property of languages'') называется множество <tex> A \subset \mathrm {RE } </tex>.
}}
{{Определение
|definition=Свойство называется '''тривиальным'''(англ. ''trivial''), если <tex> A = \varnothing </tex> или <tex> A = \mathrm {RE } </tex>.
}}
{{Определение
|definition='''Язык свойства''' (англ. ''language of property'') <tex> A </tex> {{---}} множество программ, языки которых обладают этим свойством: <tex>L(A) \overset{\underset{\mathrm{def}}{}}{=} \lbrace p | \mid L(p) \in A \rbrace </tex>.
}}
 
'''Отметим''', что принадлежность программы <tex>p</tex> языку свойства <tex>A</tex> можно выразить двумя эквивалентными утверждениями:
:<tex>L(p) \in A</tex>
:<tex>p \in L(A)</tex>
Далее в конспекте будет употребляться <tex>p \in L(A)</tex>.
 
{{Определение
|definition=Свойство <tex> A </tex> называется '''разрешимым'''(англ. ''recursive''), если <tex>L(A) </tex> является [[Разрешимые_(рекурсивные)_языки|разрешимым]].
}}
=== Примеры ===
'''Примеры свойств''':
# Язык должен содержать слово ''hello''.
# Язык должен содержать хотя бы одно простое число.
 
Псевдокод для разрешителя <tex>L(A)</tex>, где <tex>A = \mathrm {RE}: </tex>
<tex>p_A(p_X)</tex> <font color="green"> // <tex>p_X</tex> {{---}} полуразрешитель некоторого языка</font>
'''return''' ''true''
 
Псевдокод для программы в общем случае, то есть для проверки того, что язык удовлетворяет свойству :
<tex>p_A(p_X)</tex>
'''return''' <tex>p_X \in L(A)</tex>
 
Псевдокод полуразрешителя для языка свойства из первого примера:
<tex>p_A(p_X)</tex> <font color="green"> // <tex>X</tex> {{---}} перечислимый язык в общем случае, поэтому <tex>p_A</tex> {{---}} полуразрешитель (по [[Теорема Райса-Шапиро |теореме Райса-Шапиро]])</font>
'''return''' <tex>p_X</tex>('hello')
== Теорема Успенского-Райса==
{{Теорема
|statement=
Язык никакого нетривиального свойства не является разрешимым.|proof=Приведём доказательство от противного. Предположим, что <tex>A</tex> разрешимо и нетривиально, не является разрешимым.}}===Доказательство===Пусть <tex>p_Ap_\infty</tex> {{---}} программа, разрешающая <tex>A</tex>всегда зацикливающийся алгоритм.
Не умаляя общности'''Рассмотрим случай, можно считать, что когда <tex>p_\varnothing infty \notin A</tex> in L(в противном случае перейдём к <tex>RE \setminus A)</tex>, которое также будет разрешимым и нетривиальным). '''
Поскольку <tex>A</tex> непустоПриведём доказательство от противного. Предположим, то найдётся перечислимый язык что <tex>X \in A</tex>. Пусть <tex>p_X</tex> {{---}} полуразрешитель <tex>X</tex>разрешимо.
Рассмотрим вспомогательную программу: язык <tex>S</tex>, такой что <tex>g_S \in \overline{i,xA}(y):</tex> if U(iтакой язык существует, x) == 1 '''return''' так как <tex>p_X(y)A</tex> else {{---}} нетривиально). Тогда <tex>p_S \in L(\botoverline{A})</tex>.
Нетрудно понять, что в разумной модели вычислений номер этой программы можно вычислить по данным Рассмотрим также произвольное перечислимое неразрешимое множество <tex>i</tex> и <tex>xX</tex>. Значит, можно рассмотреть такую программу: Пусть <tex>USp_X(\langle i, x \rangle n)</tex> '''return''' {{---}} полуразрешитель <tex>p_A ( g_{i,x} ) X</tex>.
Заметим, чтоЗафиксируем произвольное <tex>n \in \mathbb{N}</tex> и построим следующую функцию <tex>LV_n(g_{i,x}) = \begin{cases} X, & Up_S(i, x) = 1; , n \in X \\ p_\varnothing, & Uinfty(i, x) , n \neq 1; notin X \\\end{cases}</tex>
Следовательно<code> '''function''' <tex>V_n</tex>(x): '''if''' <tex>p_X</tex>(n) == 1 '''return''' <tex>p_S</tex>(x) '''while''' ''true''</code> Получили, что если <tex>n \in X<br/tex> , то <tex> USV_n \in L(\langle ioverline A)</tex>, x а если <tex>n \notin X</tex>, то <tex>V_n \rangle in L(A) = p_A</tex>. Таким образом, <tex>n \in X \iff V_n \in L(g_\overline A)</tex>.  Так как <tex>\overline A</tex> {i{---}} разрешимо, то можно проверить для любого <tex>V_n</tex>,xлежит ли оно в <tex>L(\overline{A}) = </tex>. Но это тоже самое, что и проверка <tex>n \in X</tex>. Тогда можно для каждого <tex>n</tex> проверить, лежит ли оно в <tex>X</tex>, а следовательно и построить разрешитель для <tex>X</tex>. Так как <tex>X</tex> {{---}} неразрешимо, получили противоречие. '''Теперь рассмотрим случай, когда <tex>p_\infty \in L(\beginoverline{casesA})</tex>.'''   p_AТак как <tex>\overline{A}</tex> {{---}} нетривиально (p_Xкак дополнение к нетривиальному множеству), & U(iто по первой части доказательства оно неразрешимо. Следовательно, x) <tex>A</tex> также неразрешимо.===Альтернативное доказательство с использованием теоремы о рекурсии=== 1; \По [[Теорема о рекурсии | теореме о рекурсии]], программа может знать свой исходный код. Значит, в неё можно написать функцию <tex> \mathrm{getSrc()} </tex>, которая вернёт строку {{---}} исходный код программы. <tex> A </tex> {{---}} разрешимое семейство языков. <tex> L_A </tex> {{---}} множество программ, удовлетворяющих св-ву <tex> A </tex>. Теперь допустим, что язык <tex> L_A </tex> разрешим. Тогда напишем такую программу: <code> p_A<tex>propA(p_\varnothing code){:}</tex> // программа, & Uразрешающее свойство языка <tex> A </tex> <tex>f(i, x) {:}</tex> // такая программа <tex> f </tex>, что <tex>f \neq 1in A </tex>; \\\endсуществует потому что <tex> A </tex> {{cases---} = \begin{cases}нетривиальное свойство 1, & U<tex>g(i, x) = 1{:}</tex> // такая программа <tex> g </tex>, что <tex>g \notin A </tex>; \\существует потому что <tex> A </tex> {{---}} нетривиальное свойство 0, & U<tex>p(i, x) \neq 1; \\{:}</tex> '''if''' <tex>propA(\endmathrm{casesgetSrc()})</tex> '''return''' <tex>g(x)</tex> '''else''' '''return''' <tex>f(x)</tex></code> Если <tex> p </tex> не удовлетворяет свойству <tex> A </tex>, тогда будет выполняться всегда вторая ветка, и <tex> L(p) = L(f) </tex>. Но язык программы <tex> f </tex> принадлежит <tex> A </tex>. Получили противоречие. Если <tex> p </tex> удовлетворяет свойству <tex> A </tex>, то <tex> L(p) = L(g) </tex> , а <tex> g \notin A </tex>. Опять получили противоречие. == См. также ==* [[Теорема о рекурсии]]* [[Теорема Райса-Шапиро]] == Источники информации ==* [https://en.wikipedia.org/wiki/Rice%27s_theorem Wikipedia — Rice's theorem]* Rice, H. G. {{---}} Classes of Recursively Enumerable Sets and Their Decision Problems." {{---}} программаTrans. Amer. Math. Soc. 74, 358-366, 1953.* Хопкрофт Д., разрешающая универсальное множествоМотванн Р. Получили противоречие, Ульманн Д.{{---}}Введение в теорию автоматов, языков и вычислений {{---}}стр. 397.[[Категория: Теория формальных языков]][[Категория: Теория вычислимости]][[Категория: Разрешимые и перечислимые языки]]
313
правок

Навигация