Разрешимые (рекурсивные) языки — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 11: Строка 11:
 
Приведём программу, разрешающую язык чётных чисел:
 
Приведём программу, разрешающую язык чётных чисел:
 
  <tex>p(i):</tex>
 
  <tex>p(i):</tex>
  '''if''' <tex> (i \  mod \  2 == 0) </tex>
+
  '''if''' <tex> i \  mod \  2 == 0 </tex>
 
   '''return''' <tex> 1 </tex>
 
   '''return''' <tex> 1 </tex>
 
  '''else'''
 
  '''else'''
Строка 34: Строка 34:
  
 
  <tex>r(x):</tex>
 
  <tex>r(x):</tex>
  '''if''' (<tex> u(\langle x, x \rangle) == 1) </tex>
+
  '''if''' <tex> u(\langle x, x \rangle) == 1 </tex>
 
   '''while''' <tex> true </tex>
 
   '''while''' <tex> true </tex>
 
  '''else'''
 
  '''else'''

Версия 08:50, 23 декабря 2011

Определение:
Язык [math]L[/math] называется разрешимым (рекурсивным), если существует такая программа [math] p [/math], что [math] \forall w \in L: p(w) = 1[/math], а [math] \forall w \notin L: p(w) = 0[/math].


Пример разрешимого множества

Утверждение:
Язык чётных чисел разрешим.
[math]\triangleright[/math]

Приведём программу, разрешающую язык чётных чисел:

[math]p(i):[/math]
if [math] i \  mod \  2 == 0 [/math]
  return [math] 1 [/math]
else
  return [math] 0 [/math]
Заметим, что программа нигде не может зависнуть.
[math]\triangleleft[/math]

Пример неразрешимого множества

Определение:
Язык [math]\ U = \{\langle p, x \rangle \ |\ p(x) = 1\} [/math] называется универсальным.


Утверждение:
Универсальный язык неразрешим.
[math]\triangleright[/math]

Приведем доказательство от противного.
Пусть язык [math] U [/math] разрешим. Тогда существует такая программа [math] u [/math], что [math] \forall \langle p, x \rangle \in U: u(\langle p, x \rangle) = 1[/math], а [math] \forall \langle p, x \rangle \notin U: u(\langle p, x \rangle) = 0[/math].
Составим следующую программу:

[math]r(x):[/math]
if [math] u(\langle x, x \rangle) == 1 [/math]
  while [math] true [/math]
else
  return [math] 1 [/math]

Теперь рассмотрим вызов [math] r(r) [/math]:

  • если [math] u(\langle r, r \rangle) = 1 [/math], то условие if выполнится и программа зависнет. Но так как программа [math] u [/math] разрешает универсальный язык, [math] u(\langle r, r \rangle) = 1 \Rightarrow r(r) = 1[/math];
  • если [math] u(\langle r, r \rangle) = 0 [/math], то условие if не выполнится и программа вернет [math]1[/math]. Но так как программа [math] u [/math] разрешает универсальный язык, [math] u(\langle r, r \rangle) = 0 \Rightarrow r(r) \ne 1[/math].
Таким образом, из предположения о разрешимости универсального языка мы пришли к противоречию.
[math]\triangleleft[/math]

Литература

  • Н. К. Верещагин, А. Шень. Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции. — М.: МЦНМО, 1999. С. 134. ISBN 5-900916-36-7