Перечислимые языки
Содержание
Основные определения
| Определение: |
Полуразрешимый язык (англ. semi-decidable language) — язык, для которого существует программа такая, что
|
| Определение: |
| Перечислимый язык (англ. recursively enumerable language) — язык, для которого существует программа такая, что . Язык называется коперечислимым (англ. co-enumerable), если — перечислимый. Класс всех перечислимых языков называется , а всех коперечислимих - . |
| Определение: |
| Пусть имеется некоторая программа , которая может либо завершиться за конечное время и что-то вернуть, либо зависнуть. Запуск программы с тайм-лимитом (англ. time limit) будем обозначать как и иметь в виду следующее: если за операций программа корректно завершилась и что-то вернула, то вернёт то же самое; если же за операций программа не успела завершиться, то вернёт (символ зависания). |
| Теорема: |
— перечислимый — полуразрешимый. |
| Доказательство: |
|
: Пусть — перечислимый язык. Тогда для него существует программа , которая по номеру выводит слово из . Значит, для всех из путем перебора значений функции мы можем найти такое , что . Следовательно, существует программа , такая, что . Тогда является полуразрешимым языком. (x): for if x return : Пусть — полуразрешимый язык. Тогда для него существует программа , результат которой равен для любого слова из . Чтобы программа не зависала на словах, которые не принадлежат , будем запускать ее с тайм-лимитом. Для поиска -го слова из языка будем перебирать — тайм-лимит с которым будем запускать программу . Таким образом существует программа , которая выводит слово языка с повторениями. Для того, чтобы выводить слова без повторений, заведем множество , в котором будем хранить уже выведенные слова. Программа доказывает, что является перечислимым языком.
(i): for for if ++ if return
(i): for if ++ if return |
| Теорема: |
Любой разрешимый язык является перечислимым. |
| Доказательство: |
| Любой разрешимый язык является полуразрешимым. Так как любой полуразрешимый язык является перечислимым, то является перечислимым. |
| Теорема: |
— перечислим и коперечислим — разрешим. |
| Доказательство: |
| Рассмотрим полуразрешители для и и одновременно запустим их для одного и того же элемента . принадлежит либо , либо , поэтому один из полуразрешителей успешно отработает и не зависнет. Значит, мы за конечное время узнаем, лежит ли в или нет. Таким образом, мы построили разрешитель для , то есть — разрешимый. |
Примеры перечислимых языков
| Утверждение: |
Язык натуральных чисел перечислим. |
|
Приведём программу, перечисляющую язык натуральных чисел:
return i
|
| Утверждение: |
Язык чётных неотрицательных чисел перечислим. |
|
Приведём программу, перечисляющую язык чётных неотрицательных чисел:
return i * 2
|
Примеры коперечислимых языков
| Утверждение: |
Язык нечётных неотрицательных чисел коперечислим. |
| - язык чётных неотрицательных чисел. Так как язык чётных неотрицательных чисел перечислим, то и язык нечётных неотрицательных чисел тоже перечислим. |
Примеры неперечислимых языков
| Утверждение: |
Язык пар неперечислим. |
| Функция busy beaver — невычислима, следовательно такой язык неперечислим. |
Источники информации
- Н. К. Верещагин, А. Шень. Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции. — М.: МЦНМО, 1999. С. 134. ISBN 5-900916-36-7
- Wikipedia — Recursively enumerable language
- Википедия — Рекурсивно перечислимый язык