Свойства перечислимых языков. Теорема Успенского-Райса — различия между версиями
Shersh (обсуждение | вклад) м (→Свойства языков) |
ExileHell (обсуждение | вклад) (→Теорема Успенского-Райса) |
||
Строка 41: | Строка 41: | ||
|statement= | |statement= | ||
Язык никакого нетривиального свойства <tex>A</tex> не является разрешимым. | Язык никакого нетривиального свойства <tex>A</tex> не является разрешимым. | ||
− | + | }} | |
− | + | ===Доказательство=== | |
Пусть <tex>p_\infty</tex> {{---}} всегда зацикливающийся алгоритм. | Пусть <tex>p_\infty</tex> {{---}} всегда зацикливающийся алгоритм. | ||
Строка 73: | Строка 73: | ||
Так как <tex>\overline{A}</tex> {{---}} нетривиально (как дополнение к нетривиальному множеству), то по первой части доказательства оно неразрешимо. Следовательно, <tex>A</tex> также неразрешимо. | Так как <tex>\overline{A}</tex> {{---}} нетривиально (как дополнение к нетривиальному множеству), то по первой части доказательства оно неразрешимо. Следовательно, <tex>A</tex> также неразрешимо. | ||
+ | ===Альтернативное доказательство с использованием теоремы о рекурсии=== | ||
+ | <tex> A </tex> {{---}} разрешимое семейство языков. | ||
+ | |||
+ | <tex> L_A </tex> {{---}} множество программ, удовлетворяющих св-ву <tex> A </tex>. | ||
+ | Теперь допустим, что язык <tex> L_A </tex> разрешим. Тогда напишем такую программу: | ||
− | }} | + | <code> |
+ | propA(code): | ||
+ | // программа, разрешающее свойство языка <tex> A </tex> | ||
+ | f(x): | ||
+ | // такая программа <tex> f </tex>, что <tex>f \in A </tex>; существует потому что <tex> A </tex> {{---}} нетривиальное свойство | ||
+ | g(x): | ||
+ | // такая программа <tex> g </tex>, что <tex>g \notin A </tex>; существует потому что <tex> A </tex> {{---}} нетривиальное свойство | ||
+ | p(x): | ||
+ | '''if''' propA(getSrc()) | ||
+ | '''return''' g(x) | ||
+ | '''else''' | ||
+ | '''return''' f(x) | ||
+ | </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>. Опять получили противоречие. | ||
== См. также == | == См. также == |
Версия 00:07, 26 декабря 2016
Содержание
Свойства языков
Рассмотрим множество всех перечислимых языков .
Определение: |
Свойством языков (англ. property of languages) называется множество | .
Определение: |
Свойство называется тривиальным (англ. trivial), если | или .
Определение: |
Язык свойства (англ. language of property) | — множество программ, языки которых обладают этим свойством: .
Отметим, что принадлежность программы языку свойства можно выразить двумя эквивалентными утверждениями:
Далее в конспекте будет употребляться
.
Определение: |
Свойство разрешимым. | называется разрешимым (англ. recursive), если является
Примеры
Примеры свойств:
- Язык должен содержать слово hello.
- Язык должен содержать хотя бы одно простое число.
Псевдокод для разрешителя
, где// — полуразрешитель некоторого языка return true
Псевдокод для программы в общем случае, то есть для проверки того, что язык удовлетворяет свойству :
return
Псевдокод полуразрешителя для языка свойства из первого примера:
теореме Райса-Шапиро) return ('hello')// — перечислимый язык в общем случае, поэтому — полуразрешитель (по
Теорема Успенского-Райса
Теорема: |
Язык никакого нетривиального свойства не является разрешимым. |
Доказательство
Пусть
— всегда зацикливающийся алгоритм.Рассмотрим случай, когда
.Приведём доказательство от противного. Предположим, что
разрешимо.Рассмотрим язык
, такой что (такой язык существует, так как — нетривиально). Тогда .Рассмотрим также произвольное перечислимое неразрешимое множество
. Пусть — полуразрешитель .Зафиксируем произвольное
и построим следующую функцию
function(x): if (n) == 1 return (x) while true
Получили, что если
, то , а если , то . Таким образом, .Так как
— разрешимо, то можно проверить для любого , лежит ли оно в . Но это тоже самое, что и проверка . Тогда можно для каждого проверить, лежит ли оно в , а следовательно и построить разрешитель для . Так как — неразрешимо, получили противоречие.Теперь рассмотрим случай, когда
.Так как
— нетривиально (как дополнение к нетривиальному множеству), то по первой части доказательства оно неразрешимо. Следовательно, также неразрешимо.Альтернативное доказательство с использованием теоремы о рекурсии
— разрешимое семейство языков.
— множество программ, удовлетворяющих св-ву .
Теперь допустим, что язык
разрешим. Тогда напишем такую программу:
propA(code): // программа, разрешающее свойство языкаf(x): // такая программа , что ; существует потому что — нетривиальное свойство g(x): // такая программа , что ; существует потому что — нетривиальное свойство p(x): if propA(getSrc()) return g(x) else return f(x)
Если
не удовлетворяет свойству , тогда будет выполняться всегда вторая ветка, и . Но язык программы принадлежит . Получили противоречие.Если
удовлетворяет свойству , то , а . Опять получили противоречие.См. также
Источники информации
- 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.