Перечислимые языки — различия между версиями
(merge) |
|||
Строка 6: | Строка 6: | ||
{{Определение | {{Определение | ||
|definition = | |definition = | ||
− | '''Перечислимый язык''' {{---}} язык, для которого существует программа <tex>g</tex> такая, что <tex>g(i) = x_i, L = \{x_1, x_2, .., x_n, ..\}</tex>. | + | '''Перечислимый язык''' {{---}} язык, для которого существует программа <tex>g</tex> такая, что <tex>g(i) = x_i, L = \{x_1, x_2, .., x_n, ..\}</tex>. Язык <tex>L</tex> называется '''коперечислимым''', если <tex>\overline L</tex> {{---}}перечислимый. |
}} | }} | ||
{{Определение | {{Определение | ||
|definition = | |definition = | ||
− | Пусть имеется некоторая программа <tex>p</tex>, которая может либо завершиться за конечное время и что-то вернуть, либо зависнуть. | + | Пусть имеется некоторая программа <tex>p</tex>, которая может либо завершиться за конечное время и что-то вернуть, либо зависнуть. Запуск программы <tex>p</tex> с '''тайм-лимитом''' <tex>TL</tex> будем обозначать как <tex>p|_{TL}</tex> и иметь в виду следующее: если за <tex>TL</tex> операций программа <tex>p</tex> корректно завершилась и что-то вернула, то <tex>p|_{TL}</tex> вернёт то же самое; если же за <tex>TL</tex> операций программа <tex>p</tex> не успела завершиться, то <tex>p|_{TL}</tex> вернёт <tex>\bot</tex> (символ зависания). |
}} | }} | ||
− | |||
{{Теорема | {{Теорема | ||
Строка 54: | Строка 53: | ||
Любой разрешимый язык <tex>L</tex> является полуразрешимым. Так как любой полуразрешимый язык является перечислимым, то <tex>L</tex> является перечислимым. | Любой разрешимый язык <tex>L</tex> является полуразрешимым. Так как любой полуразрешимый язык является перечислимым, то <tex>L</tex> является перечислимым. | ||
}} | }} | ||
+ | |||
+ | {{Теорема | ||
+ | |statement= | ||
+ | <tex>L</tex> {{---}} перечислим и коперечислим <tex>\Rightarrow</tex> <tex>L</tex> {{---}} [[Разрешимые_(рекурсивные)_языки|разрешим]]. | ||
+ | |proof= | ||
+ | Рассмотрим полуразрешители для <tex>L</tex> и <tex>\overline L</tex> и одновременно запустим их для одного и того же элемента <tex>x</tex>. <tex>x</tex> принадлежит либо <tex> L </tex>, либо <tex>\overline{L}</tex>, поэтому один из полуразрешителей успешно отработает и не зависнет. Значит, мы за конечное время узнаем, лежит ли <tex>x</tex> в <tex>L</tex> или нет. Таким образом, мы построили разрешитель для <tex>L</tex>, то есть <tex>L</tex> {{---}} разрешимый. | ||
+ | }} | ||
+ | |||
== Литература == | == Литература == | ||
* Н. К. Верещагин, А. Шень. Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции. {{---}} М.: МЦНМО, 1999. С. 134. ISBN 5-900916-36-7 | * Н. К. Верещагин, А. Шень. Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции. {{---}} М.: МЦНМО, 1999. С. 134. ISBN 5-900916-36-7 |
Версия 21:43, 7 декабря 2012
Определение: |
Полуразрешимый язык — язык, для которого существует программа | такая, что .
Определение: |
Перечислимый язык — язык, для которого существует программа | такая, что . Язык называется коперечислимым, если —перечислимый.
Определение: |
Пусть имеется некоторая программа | , которая может либо завершиться за конечное время и что-то вернуть, либо зависнуть. Запуск программы с тайм-лимитом будем обозначать как и иметь в виду следующее: если за операций программа корректно завершилась и что-то вернула, то вернёт то же самое; если же за операций программа не успела завершиться, то вернёт (символ зависания).
Теорема: |
— перечислимый — полуразрешимый. |
Доказательство: |
Пусть — перечислимый язык. Тогда для него существует программа , которая по номеру выводит слово из . Значит, для всех из путем перебора значений функции мы можем найти такое , что . Следовательно, существует программа , такая, что . Тогда является полуразрешимым языком.for if return Пусть — полуразрешимый язык. Тогда для него существует программа , результат которой равен для любого слова из . Чтобы программа не зависала на словах, которые не принадлежат , будем запускать ее с тайм-лимитом. Для поиска -го слова из языка будем перебирать — тайм-лимит с которым будем запускать программу . Таким образом существует программа , которая выводит слово языка с повторениями. Для того, чтобы выводить слова без повторений, заведем множество , в котором будем хранить уже выведенные слова. Программа доказывает, что является перечислимым языком.Приведённые программы доказывают эквивалентность определений. for for if ++ if return for if ++ if return |
Теорема: |
Любой разрешимый язык является перечислимым. |
Доказательство: |
Любой разрешимый язык | является полуразрешимым. Так как любой полуразрешимый язык является перечислимым, то является перечислимым.
Теорема: |
— перечислим и коперечислим — |
Доказательство: |
Рассмотрим полуразрешители для | и и одновременно запустим их для одного и того же элемента . принадлежит либо , либо , поэтому один из полуразрешителей успешно отработает и не зависнет. Значит, мы за конечное время узнаем, лежит ли в или нет. Таким образом, мы построили разрешитель для , то есть — разрешимый.
Литература
- Н. К. Верещагин, А. Шень. Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции. — М.: МЦНМО, 1999. С. 134. ISBN 5-900916-36-7