Разрешимые (рекурсивные) языки — различия между версиями
| Строка 12: | Строка 12: | ||
Приведём программу, разрешающую наш язык: | Приведём программу, разрешающую наш язык: | ||
<tex>p(i)</tex> | <tex>p(i)</tex> | ||
| − | '''if''' | + | '''if''' остаток от деления i на 2 = 0 |
'''return''' 1 | '''return''' 1 | ||
'''else''' | '''else''' | ||
| Строка 30: | Строка 30: | ||
Универсальный язык неразрешим. | Универсальный язык неразрешим. | ||
|proof= | |proof= | ||
| − | Докажем от противного. </ | + | Докажем от противного. <br/> |
| − | Пусть язык <tex> U </tex> разрешим. </ | + | Пусть язык <tex> U </tex> разрешим. <br/> |
| − | Тогда существует такая программа <tex> u </tex>, что | + | Тогда существует такая программа <tex> u </tex>, что <tex> \forall \langle p, x \rangle \in U: u(\langle p, x \rangle) = 1</tex>, а для <tex> \forall \langle p, x \rangle \notin U: u(\langle p, x \rangle) = 0</tex>. <br/> |
| − | <tex> | + | Составим следующую программу: |
| − | '''if''' ( | + | |
| + | <tex>r(x)</tex> | ||
| + | '''if''' u(<x, x>) = 1 | ||
| + | '''while''' true | ||
| + | '''else''' | ||
'''return''' 1 | '''return''' 1 | ||
| − | + | ||
| − | + | Теперь рассмотрим вызов <tex> r(r) </tex>. | |
| − | + | * Если <tex> u(\langle r, r \rangle) = 1 </tex>, то условие '''if''' выполнится и вызов зациклится. Но, <tex> u(\langle r, r \rangle) = 1 \Rightarrow r(r) = 1</tex>. | |
| + | * Если <tex> u(\langle r, r \rangle) = 0 </tex>, то условие '''if''' не выполнится и вызов вернёт <tex>1</tex>. Но, <tex> u(\langle r, r \rangle) = 0 \Rightarrow r(r) \ne 1</tex>. | ||
| + | |||
| + | Таким образом, из предположения о разрешимости универсального языка мы пришли к противоречию. | ||
}} | }} | ||
Версия 07:07, 14 декабря 2011
| Определение: |
| Язык называется разрешимым (рекурсивным), если существует такая программа , что , а для . |
Примеры
Пример разрешимого множества
| Утверждение: |
Язык чётных чисел разрешим. |
|
Приведём программу, разрешающую наш язык:
if остаток от деления i на 2 = 0
return 1
else
return 0
Заметим, что программа нигде не может зависнуть. |
Пример неразрешимого множества
| Определение: |
| Язык называется универсальным. |
| Утверждение: |
Универсальный язык неразрешим. |
|
Докажем от противного.
if u(<x, x>) = 1
while true
else
return 1
Теперь рассмотрим вызов .
|