Разрешимые (рекурсивные) языки
Основные определения
Определение: |
Рекурсивный язык (англ. recursive language) | — язык, для которого существует программа
Определение: |
Язык вычислимая функция . | называется разрешимым, если существует такая
Если мы рассматриваем язык
как проблему, то проблема называется разрешимой, если язык рекурсивный. В противном случае проблема называется неразрешимой. Но часто данные понятия просто отождествляются.
Определение: |
Класс всех разрешимых (рекурсивных) языков (англ. Class of decidable (recursive) languages) часто обозначается буквой | .
Определение: |
Универсальный язык (англ. universal language) | .
Другими словами, универсальный язык — это язык всех пар "программа и её вход" таких, что программа на входе возвращает .
Так как в теории вычислимости нету структур данных, то для представления программы и её входных данных можно использовть число вида:
, где — есть биекция между текстом программы, текстом входных данных и натуральным числом (например, можно занумеровать подряд все строки длинны , затем все строки длинны и так далее — нумерация названий столбцов в ).
Далее считаем, что входные данные программы и сама программа расположены над одним алфавитом
.Примеры разрешимых множества
Утверждение: |
Язык чётных чисел разрешим. |
Приведём программу, разрешающую язык чётных чисел: Заметим, что программа нигде не может зависнуть. if return 1 else return 0 |
Утверждение: |
Множество всех рациональных чисел, меньших числа (основания натуральных логарифмов) или , разрешимо. |
Для чисел статье, таким образом, возможно получить необходимый знак чисел за конечное время. существуют различные техники нахождения их точного представления, одна их которых описана вДесятичное представление рационального числа может быть получено с любой точностью.Приведем программу, разрешающую данную проблему для числа :Так как число 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
- Википедия — Рекурсивный язык
- «A Spigot Algorithm for the Digits of Pi»