Разрешимые (рекурсивные) языки — различия между версиями
(→Примеры неразрешимых множества) |
Shersh (обсуждение | вклад) м (→Примеры разрешимых множества) |
||
Строка 62: | Строка 62: | ||
'''if''' (<tex>r</tex> > 3) | '''if''' (<tex>r</tex> > 3) | ||
'''return''' 0 | '''return''' 0 | ||
− | '''for'''(i = 1 .. <tex>\infty </tex>) | + | '''for''' (i = 1 .. <tex>\infty </tex>) |
'''if''' (getDigit(<tex>e</tex>, i) > getDigit(<tex>r</tex>, i)) <font color="green">// getDigit {{---}} функция, которая получает i-ый бит вещественной части переданного числа</font> | '''if''' (getDigit(<tex>e</tex>, i) > getDigit(<tex>r</tex>, i)) <font color="green">// getDigit {{---}} функция, которая получает i-ый бит вещественной части переданного числа</font> | ||
'''return''' 1 | '''return''' 1 |
Версия 23:25, 11 января 2015
Содержание
Основные определения
Определение: |
Рекурсивный язык (англ. 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 иррационально, то ответ будет найден за конечное время. |
Утверждение: |
множество тех , для которых в числе есть не менее девяток подряд, разрешимо. |
Предположим, что в числе встречается девяток подряд, тогда, логично, что встречается и любое число девяток меньших . В таком случае, разрешитель будет выглядеть следующим образом:if return 1 else 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»