Разрешимые (рекурсивные) языки — различия между версиями
Строка 1: | Строка 1: | ||
+ | == Основные определения == | ||
{{Определение | {{Определение | ||
− | |definition= | + | |definition= '''Рекурсивный язык (recursive language)''' <tex>L</tex> {{---}} язык, для которого существует программа <tex>p : \forall w \in L \Rightarrow p(w) = 1, \forall w \notin L \Rightarrow p(w) = 0</tex>. |
}} | }} | ||
− | == | + | Если мы рассматриваем язык <tex>L</tex> как проблему, то проблема называется ''разрешимой'', если язык <tex>L</tex> ''рекурсивный''. В противном случае проблема называется ''неразрешимой''. Но часто данные понятия просто отождествляются. |
+ | |||
+ | {{Определение | ||
+ | |definition= Класс всех разрешимых (рекурсивных) языков часто обозначается буквой <tex> \mathrm{R} </tex>. | ||
+ | }} | ||
+ | |||
+ | {{Определение | ||
+ | |definition = Функция <tex>f : N \rightarrow N \cup \lbrace \bot \rbrace</tex> называется '''вычислимой''' ('''computable function'''), если существует программа <tex>p : \forall n \in D(f) \Rightarrow p(n) = f(n), \forall n \notin D(f) \Rightarrow p(n) = \bot </tex>. | ||
+ | }} | ||
+ | |||
+ | {{Определение | ||
+ | |id=uni | ||
+ | |definition='''Универсальный язык''' ('''universal language''') <tex>\ U = \{\langle p, x \rangle \ |\ p(x) = 1\} </tex>. | ||
+ | }} | ||
+ | |||
+ | == Некоторые разрешимые множества == | ||
{{Лемма | {{Лемма | ||
|id=st1 | |id=st1 | ||
Строка 10: | Строка 26: | ||
|proof= | |proof= | ||
Приведём программу, разрешающую язык чётных чисел: | Приведём программу, разрешающую язык чётных чисел: | ||
− | <tex>p(i):</tex> | + | <tex>p(i): </tex> |
− | + | <tex>\mathrm{if} \ i \ mod \ 2 == 0 </tex> | |
− | + | <tex>\mathrm{return} \ 1 </tex> | |
− | + | <tex>\mathrm{else} </tex> | |
− | + | <tex>\mathrm{return} \ 0 </tex> | |
+ | |||
Заметим, что программа нигде не может зависнуть. | Заметим, что программа нигде не может зависнуть. | ||
}} | }} | ||
− | == | + | == Некоторые неразрешимые множества == |
− | |||
− | |||
− | |||
− | |||
− | |||
{{Лемма | {{Лемма | ||
Строка 30: | Строка 42: | ||
Универсальный язык неразрешим. | Универсальный язык неразрешим. | ||
|proof= | |proof= | ||
− | Приведём доказательство от противного. | + | Приведём доказательство от противного. |
− | Пусть язык <tex> U </tex> разрешим | + | |
+ | Пусть язык <tex>U</tex> разрешим, тогда существует программа <tex> u </tex> : <tex> \forall \langle p, x \rangle \in U \Rightarrow u(\langle p, x \rangle) = 1</tex>, <tex> \forall \langle p, x \rangle \notin U \Rightarrow u(\langle p, x \rangle) = 0</tex>. | ||
+ | |||
Составим следующую программу: | Составим следующую программу: | ||
<tex>r(x):</tex> | <tex>r(x):</tex> | ||
− | + | <tex> \mathrm{if} \ u(\langle x, x \rangle) == 1 </tex> | |
− | + | <tex>\mathrm{while} \ true </tex> | |
− | + | <tex> \mathrm{else} </tex> | |
− | + | <tex>\mathrm{return} \ 1 </tex> | |
− | + | Рассмотрим вызов <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>. |
− | + | Из предположения о разрешимости универсального языка мы пришли к противоречию. | |
}} | }} | ||
− | ==Источники информации== | + | == Источники информации == |
* Н. К. Верещагин, А. Шень. Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции. — М.: МЦНМО, 1999. С. 134. ISBN 5-900916-36-7 | * Н. К. Верещагин, А. Шень. Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции. — М.: МЦНМО, 1999. С. 134. ISBN 5-900916-36-7 | ||
* [http://en.wikipedia.org/wiki/Recursive_language Wikipedia — Recursive language] | * [http://en.wikipedia.org/wiki/Recursive_language Wikipedia — Recursive language] | ||
* [http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA Википедия — Рекурсивный язык] | * [http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA Википедия — Рекурсивный язык] | ||
+ | * Методические указания к курсу ”Сложность вычислений” Гамова А.Н. | ||
[[Категория: Теория формальных языков]] | [[Категория: Теория формальных языков]] | ||
[[Категория: Теория вычислимости]] | [[Категория: Теория вычислимости]] |
Версия 16:21, 7 января 2015
Содержание
Основные определения
Определение: |
Рекурсивный язык (recursive language) | — язык, для которого существует программа .
Если мы рассматриваем язык как проблему, то проблема называется разрешимой, если язык рекурсивный. В противном случае проблема называется неразрешимой. Но часто данные понятия просто отождествляются.
Определение: |
Класс всех разрешимых (рекурсивных) языков часто обозначается буквой | .
Определение: |
Функция | называется вычислимой (computable function), если существует программа .
Определение: |
Универсальный язык (universal language) | .
Некоторые разрешимые множества
Лемма: |
Язык чётных чисел разрешим. |
Доказательство: |
Приведём программу, разрешающую язык чётных чисел: Заметим, что программа нигде не может зависнуть. |
Некоторые неразрешимые множества
Лемма: |
Универсальный язык неразрешим. |
Доказательство: |
Приведём доказательство от противного. Пусть язык разрешим, тогда существует программа : , .Составим следующую программу: Рассмотрим вызов :
|
Источники информации
- Н. К. Верещагин, А. Шень. Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции. — М.: МЦНМО, 1999. С. 134. ISBN 5-900916-36-7
- Wikipedia — Recursive language
- Википедия — Рекурсивный язык
- Методические указания к курсу ”Сложность вычислений” Гамова А.Н.