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

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 1: Строка 1:
 +
== Основные определения ==
 
{{Определение
 
{{Определение
|definition=Язык <tex>L</tex> называется '''разрешимым''' ('''рекурсивным, recursive language'''), если существует такая программа <tex> p </tex>, что <tex> \forall w \in L: p(w) = 1</tex>, а <tex> \forall w \notin L: p(w) = 0</tex>. Класс всех разрешимых языков часто обозначается через <tex> \mathrm{R} </tex>.
+
|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>
  '''if''' <tex> i \  mod \  2 == 0 </tex>
+
  <tex>\mathrm{if} \ i \  mod \  2 == 0 </tex>
   '''return''' <tex> 1 </tex>
+
   <tex>\mathrm{return} \ 1 </tex>
  '''else'''
+
  <tex>\mathrm{else} </tex>
   '''return''' <tex> 0 </tex>
+
   <tex>\mathrm{return} \ 0 </tex>
 +
 
 
Заметим, что программа нигде не может зависнуть.
 
Заметим, что программа нигде не может зависнуть.
 
}}
 
}}
  
==Пример неразрешимого множества==
+
== Некоторые неразрешимые множества ==
 
 
{{Определение
 
|id=uni
 
|definition=Язык <tex>\  U = \{\langle p, x \rangle \ |\ p(x) = 1\} </tex> называется '''универсальным''' ('''universal language''').
 
}}
 
  
 
{{Лемма
 
{{Лемма
Строка 30: Строка 42:
 
Универсальный язык неразрешим.
 
Универсальный язык неразрешим.
 
|proof=
 
|proof=
Приведём доказательство от противного. <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>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>
  '''if''' <tex> u(\langle x, x \rangle) == 1 </tex>
+
  <tex> \mathrm{if} \ u(\langle x, x \rangle) == 1 </tex>
   '''while''' <tex> true </tex>
+
   <tex>\mathrm{while} \ true </tex>
  '''else'''
+
  <tex> \mathrm{else} </tex>
   '''return''' <tex> 1 </tex>
+
   <tex>\mathrm{return} \ 1 </tex>
  
Теперь рассмотрим вызов <tex> r(r) </tex>:
+
Рассмотрим вызов <tex> r(r) </tex>:
* если <tex> u(\langle r, r \rangle) = 1 </tex>, то условие '''if''' выполнится и программа зависнет. Но так как программа <tex> u </tex> разрешает универсальный язык, <tex> u(\langle r, r \rangle) = 1 \Rightarrow r(r) = 1</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>;
* если <tex> u(\langle r, r \rangle) = 0 </tex>, то условие '''if''' не выполнится и программа вернет <tex>1</tex>. Но так как программа <tex> u </tex> разрешает универсальный язык, <tex> u(\langle r, r \rangle) = 0 \Rightarrow r(r) \ne 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) [math]L[/math] — язык, для которого существует программа [math]p : \forall w \in L \Rightarrow p(w) = 1, \forall w \notin L \Rightarrow p(w) = 0[/math].


Если мы рассматриваем язык [math]L[/math] как проблему, то проблема называется разрешимой, если язык [math]L[/math] рекурсивный. В противном случае проблема называется неразрешимой. Но часто данные понятия просто отождествляются.


Определение:
Класс всех разрешимых (рекурсивных) языков часто обозначается буквой [math] \mathrm{R} [/math].


Определение:
Функция [math]f : N \rightarrow N \cup \lbrace \bot \rbrace[/math] называется вычислимой (computable function), если существует программа [math]p : \forall n \in D(f) \Rightarrow p(n) = f(n), \forall n \notin D(f) \Rightarrow p(n) = \bot [/math].


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


Некоторые разрешимые множества

Лемма:
Язык чётных чисел разрешим.
Доказательство:
[math]\triangleright[/math]

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

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

Некоторые неразрешимые множества

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

Приведём доказательство от противного.

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

Составим следующую программу:

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

Рассмотрим вызов [math] r(r) [/math]:

  • Eсли [math] u(\langle r, r \rangle) = 1 [/math], то условие [math]\mathrm{if}[/math] выполнится и программа зависнет, но, так как программа [math] u [/math] разрешает универсальный язык, [math] u(\langle r, r \rangle) = 1 \Rightarrow r(r) = 1[/math];
  • Eсли [math] u(\langle r, r \rangle) = 0 [/math], то условие [math]\mathrm{if}[/math] не выполнится и программа вернет [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
  • Wikipedia — Recursive language
  • Википедия — Рекурсивный язык
  • Методические указания к курсу ”Сложность вычислений” Гамова А.Н.