Разрешимые (рекурсивные) языки — различия между версиями
ExileHell (обсуждение | вклад) (→Примеры неразрешимых множеств) |
ExileHell (обсуждение | вклад) м (Отмена правки 58301 участника ExileHell (обсуждение)) |
||
| Строка 122: | Строка 122: | ||
Универсальный язык неразрешим. | Универсальный язык неразрешим. | ||
|proof= | |proof= | ||
| − | + | Приведём доказательство от противного. | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | Пусть язык <tex>U</tex> разрешим, тогда существует программа | |
| − | + | <tex>u(\langle p, x \rangle) = \begin{cases} | |
| − | \langle | + | 1, \ \langle p, x \rangle \in U \\ |
| + | 0, \ \langle p, x \rangle \notin U | ||
| + | \end{cases} | ||
| + | </tex> | ||
| + | |||
| + | |||
| + | Составим следующую программу: | ||
| + | |||
| + | <tex>r(x) {:} </tex> | ||
| + | '''if''' <tex>u(\langle x, x \rangle) == 1 </tex> | ||
| + | '''while''' ''true'' | ||
| + | '''else''' | ||
| + | '''return''' 1 | ||
| + | |||
| + | Рассмотрим вызов <tex> r(r) </tex>: | ||
| + | * Eсли <tex> u(\langle r, r \rangle) = 1 </tex>, то условие <tex>\mathrm{if}</tex> выполнится и программа зависнет, но, так как программа <tex> u </tex> разрешает универсальный язык, <tex> u(\langle r, r \rangle) = 1 \Rightarrow r(r) = 1</tex>; | ||
| + | * Eсли <tex> u(\langle r, r \rangle) = 0 </tex>, то условие <tex>\mathrm{if}</tex> не выполнится и программа вернет <tex>1</tex>, но, так как программа <tex> u </tex> разрешает универсальный язык, <tex> u(\langle r, r \rangle) = 0 \Rightarrow r(r) \ne 1</tex>. | ||
| + | |||
| + | Из предположения о разрешимости универсального языка мы пришли к противоречию. | ||
}} | }} | ||
Версия 23:04, 25 декабря 2016
Содержание
Основные определения
| Определение: |
| Рекурсивный язык (англ. recursive language) — язык, для которого существует программа |
| Определение: |
| Язык называется разрешимым, если существует такая вычислимая функция . |
Если мы рассматриваем язык как проблему, то проблема называется разрешимой, если язык рекурсивный. В противном случае проблема называется неразрешимой. Но часто данные понятия просто отождествляются.
| Определение: |
| Класс всех разрешимых (рекурсивных) языков (англ. Class of decidable (recursive) languages) часто обозначается буквой . |
| Определение: |
| Универсальный язык (англ. universal language) . |
Другими словами, универсальный язык — это язык всех таких пар "программа и её вход", что программа на входе возвращает .
Рассмотрим данное определение более детально, для чего докажем вспомогательную лемму:
| Лемма: |
Существует биекция между строками и натуральными числами. |
| Доказательство: |
| Приведем пример такой биекции: занумеруем подряд все строки длины , затем все строки длины и так далее — нумерация названий столбцов в , таким образом, каждому натуральному числу соответствует некоторая строка и наоборот. |
Биекция между строками и натуральными числами нам нужна, чтобы передавать пары "текст программы, текст входных данных" в качестве аргументов функций. Передавать можно в следующем виде:
, где — есть натуральные числа, соответствующие тексту программы и тексту входных данных соответственно.
Далее считаем, что входные данные программы и сама программа расположены над одним алфавитом .
Примеры разрешимых множеств
| Утверждение: |
Язык чётных чисел разрешим. |
|
Приведём программу, разрешающую язык чётных чисел: if return 1 else return 0Заметим, что программа нигде не может зависнуть. |
| Утверждение: |
Множество всех рациональных чисел, меньших числа (основания натуральных логарифмов) или , разрешимо. |
|
Для чисел существуют различные техники нахождения их точного представления, одна их которых описана в статье[1], таким образом, возможно получить необходимый знак чисел за конечное время. Десятичное представление рационального числа может быть получено с любой точностью. Приведем программу, разрешающую данную проблему для числа : if ( < 2) return 1 if ( > 3) return 0 for (i = 1 .. ) if (getDigit(, i) > getDigit(, i)) // getDigit — функция, которая получает i-ую цифру вещественной части переданного числа return 1 if (getDigit(, i) < getDigit(, i)) return 0Так как число иррационально, то ответ будет найден за конечное время. |
| Утверждение: |
Множество тех , для которых в числе есть не менее девяток подряд, разрешимо. |
|
Предположим, что в числе встречается девяток подряд, тогда, логично, что встречается и любое число девяток меньших . Рассмотрим все программы семейства:
return 1
if return 1 else return 0 if return 1 else return 0
if return 1 else return 0 По доказанному выше, какая-то программа из этого семейства будет разрешителем для искомого множества. Значит, искомое множество разрешимо. |
Примеры неразрешимых множеств
| Утверждение: |
Универсальный язык неразрешим. |
|
Приведём доказательство от противного. Пусть язык разрешим, тогда существует программа
if while true else return 1 Рассмотрим вызов :
|
Примечания
Источники информации
- Н. К. Верещагин, А. Шень. Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции. — М.: МЦНМО, 1999. С. 134. ISBN 5-900916-36-7
- Wikipedia — Recursive language
- Википедия — Рекурсивный язык