Свойства перечислимых языков. Теорема Успенского-Райса — различия между версиями
| ExileHell (обсуждение | вклад)  (→Альтернативное доказательство с использованием теоремы о рекурсии) | м (rollbackEdits.php mass rollback) | ||
| (не показаны 2 промежуточные версии 2 участников) | |||
| Строка 59: | Строка 59: | ||
| \end{cases} </tex> | \end{cases} </tex> | ||
| − | |||
|   '''function''' <tex>V_n</tex>(x): |   '''function''' <tex>V_n</tex>(x): | ||
|     '''if''' <tex>p_X</tex>(n) == 1 |     '''if''' <tex>p_X</tex>(n) == 1 | ||
|       '''return''' <tex>p_S</tex>(x) |       '''return''' <tex>p_S</tex>(x) | ||
|     '''while''' ''true'' |     '''while''' ''true'' | ||
| − | |||
| Получили, что если <tex>n \in X</tex>, то <tex>V_n \in L(\overline A)</tex>, а если <tex>n \notin X</tex>, то <tex>V_n \in L(A)</tex>. Таким образом, <tex>n \in X \iff V_n \in L(\overline A)</tex>.   | Получили, что если <tex>n \in X</tex>, то <tex>V_n \in L(\overline A)</tex>, а если <tex>n \notin X</tex>, то <tex>V_n \in L(A)</tex>. Таким образом, <tex>n \in X \iff V_n \in L(\overline A)</tex>.   | ||
| Строка 82: | Строка 80: | ||
| Теперь допустим, что язык <tex> L_A </tex> разрешим. Тогда напишем такую программу: | Теперь допустим, что язык <tex> L_A </tex> разрешим. Тогда напишем такую программу: | ||
| − | |||
|    <tex>propA(code){:}</tex> |    <tex>propA(code){:}</tex> | ||
|      // программа, разрешающее свойство языка <tex> A </tex> |      // программа, разрешающее свойство языка <tex> A </tex> | ||
| Строка 94: | Строка 91: | ||
|      '''else''' |      '''else''' | ||
|          '''return''' <tex>f(x)</tex> |          '''return''' <tex>f(x)</tex> | ||
| − | |||
| Если <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(f) </tex>. Но язык программы <tex> f </tex> принадлежит <tex> A </tex>. Получили противоречие. | ||
Текущая версия на 19:05, 4 сентября 2022
Содержание
Свойства языков
Рассмотрим множество всех перечислимых языков .
| Определение: | 
| Свойством языков (англ. property of languages) называется множество . | 
| Определение: | 
| Свойство называется тривиальным (англ. trivial), если или . | 
| Определение: | 
| Язык свойства (англ. language of property) — множество программ, языки которых обладают этим свойством: . | 
Отметим, что принадлежность программы  языку свойства  можно выразить двумя эквивалентными утверждениями: 
Далее в конспекте будет употребляться .
| Определение: | 
| Свойство называется разрешимым (англ. recursive), если является разрешимым. | 
Примеры
Примеры свойств:
- Язык должен содержать слово hello.
- Язык должен содержать хотя бы одно простое число.
Псевдокод для разрешителя , где
// — полуразрешитель некоторого языка return true
Псевдокод для программы в общем случае, то есть для проверки того, что язык удовлетворяет свойству :
return
Псевдокод полуразрешителя для языка свойства из первого примера:
// — перечислимый язык в общем случае, поэтому — полуразрешитель (по теореме Райса-Шапиро) return ('hello')
Теорема Успенского-Райса
| Теорема: | 
| Язык никакого нетривиального свойства  не является разрешимым. | 
Доказательство
Пусть — всегда зацикливающийся алгоритм.
Рассмотрим случай, когда .
Приведём доказательство от противного. Предположим, что разрешимо.
Рассмотрим язык , такой что (такой язык существует, так как — нетривиально). Тогда .
Рассмотрим также произвольное перечислимое неразрешимое множество . Пусть — полуразрешитель .
Зафиксируем произвольное и построим следующую функцию
function (x): if (n) == 1 return (x) while true
Получили, что если , то , а если , то . Таким образом, .
Так как — разрешимо, то можно проверить для любого , лежит ли оно в . Но это тоже самое, что и проверка . Тогда можно для каждого проверить, лежит ли оно в , а следовательно и построить разрешитель для . Так как — неразрешимо, получили противоречие.
Теперь рассмотрим случай, когда .
Так как — нетривиально (как дополнение к нетривиальному множеству), то по первой части доказательства оно неразрешимо. Следовательно, также неразрешимо.
Альтернативное доказательство с использованием теоремы о рекурсии
По теореме о рекурсии, программа может знать свой исходный код. Значит, в неё можно написать функцию , которая вернёт строку — исходный код программы.
— разрешимое семейство языков.
— множество программ, удовлетворяющих св-ву .
Теперь допустим, что язык разрешим. Тогда напишем такую программу:
// программа, разрешающее свойство языка // такая программа , что ; существует потому что — нетривиальное свойство // такая программа , что ; существует потому что — нетривиальное свойство if return else return
Если не удовлетворяет свойству , тогда будет выполняться всегда вторая ветка, и . Но язык программы принадлежит . Получили противоречие.
Если удовлетворяет свойству , то , а . Опять получили противоречие.
См. также
Источники информации
- 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.
