Разрешимые (рекурсивные) языки — различия между версиями
Slavian (обсуждение | вклад) (→Примеры неразрешимых множества) |
|||
| Строка 1: | Строка 1: | ||
== Основные определения == | == Основные определения == | ||
{{Определение | {{Определение | ||
| − | |definition= '''Рекурсивный язык''' (англ. ''recursive language'') <tex>L</tex> {{---}} язык, для которого существует программа <tex>p | + | |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>. |
}} | }} | ||
| Строка 7: | Строка 7: | ||
{{Определение | {{Определение | ||
| − | |definition= | + | |definition = Язык <tex>L</tex> называется '''разрешимым''', если существует такая [http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D0%B5_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8 вычислимая] (англ. ''computable'') функция <tex>f : \Sigma^* \to \{0, 1\} : x \in L \Leftrightarrow f(x) = 1</tex>. |
}} | }} | ||
{{Определение | {{Определение | ||
| − | |definition = | + | |definition= '''Класс всех разрешимых (рекурсивных) языков''' (англ. ''Class of decidable (recursive) languages'') часто обозначается буквой <tex> \mathrm{R} </tex>. |
}} | }} | ||
{{Определение | {{Определение | ||
| − | |definition = | + | |id=uni |
| + | |definition='''Универсальный язык''' (англ. ''universal language'') <tex> \ U = \{\langle p, x \rangle \ |\ p(x) = 1\} </tex>. | ||
}} | }} | ||
| − | + | На словах, ''универсальный язык'' можно определить следующим образом: | |
| − | + | ||
| − | + | ''Универсальный язык'' {{---}} это язык всех пар "программа и её вход" таких, что программа на входе возвращает 1, входные данные программы и сама программа должны быть расположены над одним алфавитом. | |
| − | + | Так как программа {{---}} это набор строк, занумеровав которые, можем получить биекцию "число" <tex>\to</tex> "строка" | |
| − | == Примеры разрешимых | + | == Примеры разрешимых множества == |
| − | {{ | + | {{Утверждение |
|id=st1 | |id=st1 | ||
|statement= | |statement= | ||
| Строка 40: | Строка 41: | ||
| − | {{ | + | {{Утверждение |
|statement= | |statement= | ||
| − | Множество всех рациональных чисел, меньших числа | + | Множество всех рациональных чисел, меньших числа <tex>e</tex> (основания натуральных логарифмов) или <tex>\pi</tex>, разрешимо. |
|proof= | |proof= | ||
| − | + | Для чисел <tex>e, \pi</tex> существуют различные техники нахождения их точного представления, одна их которых описана в статье [http://www.mathpropress.com/stan/bibliography/spigot.pdf «A Spigot Algorithm for the Digits of Pi»]. Авторами алгоритма и его нарицателями являются американские математики Стенли Рабинович (Stanley Rabinowitz) и Стен Вэгон (Stan Wagon), которые создали свой алгоритм для нахождения цифр числа <tex>\pi</tex> в 1995 году. Сама же идея алгоритма вышла из-под пера некого Сейла (Sale) ещё в 1968 году, и предназначался тот алгоритм для нахождения цифр числа <tex>e</tex>. | |
| + | Десятично представление рационального числа <tex>r</tex> может быть получено с любой точностью. | ||
| + | |||
| + | Приведем программу, разрешающую данную проблему для числа <tex>e</tex>: | ||
| + | |||
<tex>p(r): </tex> | <tex>p(r): </tex> | ||
| − | <tex> | + | '''if''' (<tex>r</tex> < 2) |
| − | <tex> | + | '''return''' 1 |
| − | + | '''if''' (<tex>r</tex> > 3) | |
| − | <tex> | + | '''return''' 0 |
| − | + | '''for'''(i = 0;; ++i) | |
| − | <tex> | + | '''if''' (getDigit(<tex>e</tex>, i) > getDigit(<tex>r</tex>, i)) |
| − | + | '''return''' 1 | |
| − | Так как число ''e'' иррационально, то ответ будет найден. | + | '''if''' (getDigit(<tex>e</tex>, i) < getDigit(<tex>r</tex>, i)) |
| + | '''return''' 0 | ||
| + | Так как число ''e'' иррационально (не существует его рационального представления), то ответ будет найден. | ||
}} | }} | ||
| − | == Примеры неразрешимых | + | == Примеры неразрешимых множества == |
| − | {{ | + | {{Утверждение |
|id=st1 | |id=st1 | ||
|statement= | |statement= | ||
| Строка 71: | Строка 78: | ||
<tex>r(x):</tex> | <tex>r(x):</tex> | ||
| − | <tex> | + | '''if''' <tex>u(\langle x, x \rangle) == 1 </tex> |
| − | + | '''while''' (true) | |
| − | + | '''else''' | |
| − | + | '''return''' 1 | |
Рассмотрим вызов <tex> r(r) </tex>: | Рассмотрим вызов <tex> r(r) </tex>: | ||
| Строка 87: | Строка 94: | ||
* [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 Википедия — Рекурсивный язык] | ||
| − | * | + | * [http://www.mathpropress.com/stan/bibliography/spigot.pdf «A Spigot Algorithm for the Digits of Pi»] |
[[Категория: Теория формальных языков]] | [[Категория: Теория формальных языков]] | ||
[[Категория: Теория вычислимости]] | [[Категория: Теория вычислимости]] | ||
Версия 21:53, 9 января 2015
Содержание
Основные определения
| Определение: |
| Рекурсивный язык (англ. recursive language) — язык, для которого существует программа . |
Если мы рассматриваем язык как проблему, то проблема называется разрешимой, если язык рекурсивный. В противном случае проблема называется неразрешимой. Но часто данные понятия просто отождествляются.
| Определение: |
| Язык называется разрешимым, если существует такая вычислимая (англ. computable) функция . |
| Определение: |
| Класс всех разрешимых (рекурсивных) языков (англ. Class of decidable (recursive) languages) часто обозначается буквой . |
| Определение: |
| Универсальный язык (англ. universal language) . |
На словах, универсальный язык можно определить следующим образом:
Универсальный язык — это язык всех пар "программа и её вход" таких, что программа на входе возвращает 1, входные данные программы и сама программа должны быть расположены над одним алфавитом. Так как программа — это набор строк, занумеровав которые, можем получить биекцию "число" "строка"
Примеры разрешимых множества
| Утверждение: |
Язык чётных чисел разрешим. |
|
Приведём программу, разрешающую язык чётных чисел: Заметим, что программа нигде не может зависнуть. |
| Утверждение: |
Множество всех рациональных чисел, меньших числа (основания натуральных логарифмов) или , разрешимо. |
|
Для чисел существуют различные техники нахождения их точного представления, одна их которых описана в статье «A Spigot Algorithm for the Digits of Pi». Авторами алгоритма и его нарицателями являются американские математики Стенли Рабинович (Stanley Rabinowitz) и Стен Вэгон (Stan Wagon), которые создали свой алгоритм для нахождения цифр числа в 1995 году. Сама же идея алгоритма вышла из-под пера некого Сейла (Sale) ещё в 1968 году, и предназначался тот алгоритм для нахождения цифр числа . Десятично представление рационального числа может быть получено с любой точностью. Приведем программу, разрешающую данную проблему для числа : if ( < 2) return 1 if ( > 3) return 0 for(i = 0;; ++i) if (getDigit(, i) > getDigit(, i)) return 1 if (getDigit(, i) < getDigit(, i)) return 0Так как число e иррационально (не существует его рационального представления), то ответ будет найден. |
Примеры неразрешимых множества
| Утверждение: |
Универсальный язык неразрешим. |
|
Приведём доказательство от противного. Пусть язык разрешим, тогда существует программа : , . Составим следующую программу: 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»