<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=217.66.158.24&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=217.66.158.24&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/217.66.158.24"/>
		<updated>2026-05-19T18:46:36Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B8&amp;diff=56715</id>
		<title>Теорема о рекурсии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B8&amp;diff=56715"/>
				<updated>2016-12-03T10:30:55Z</updated>
		
		<summary type="html">&lt;p&gt;217.66.158.24: /* Теорема о неподвижной точке */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Теорема о рекурсии==&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th1&lt;br /&gt;
|author=Клини&lt;br /&gt;
|about=о рекурсии / ''Kleene's recursion theorem''&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;V(n, x)&amp;lt;/tex&amp;gt; {{---}} вычислимая функция. Тогда найдётся такая вычислимая &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;\forall y&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;p(y) = V(p, y)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Приведем конструктивное доказательство теоремы.&lt;br /&gt;
Пусть есть вычислимая &amp;lt;tex&amp;gt;V(x,y)&amp;lt;/tex&amp;gt;. Будем поэтапно строить функцию &amp;lt;tex&amp;gt;p(y)&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; Предположим, что у нас в распоряжении есть функция &amp;lt;tex&amp;gt;getSrc()&amp;lt;/tex&amp;gt;, которая вернет код &amp;lt;tex&amp;gt;p(y)&amp;lt;/tex&amp;gt;. Тогда саму &amp;lt;tex&amp;gt;p(y)&amp;lt;/tex&amp;gt; можно переписать так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;font size = &amp;quot;3em&amp;quot;&amp;gt;&lt;br /&gt;
 p(y){ &lt;br /&gt;
      V(x,y) {...}&lt;br /&gt;
 &lt;br /&gt;
      main() {&lt;br /&gt;
          return V(getSrc(), y)&lt;br /&gt;
      }&lt;br /&gt;
  &lt;br /&gt;
      string getSrc() {...}&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Теперь нужно определить функцию &amp;lt;tex&amp;gt;getSrc()&amp;lt;/tex&amp;gt;. Предположим, что внутри &amp;lt;tex&amp;gt;p(y)&amp;lt;/tex&amp;gt; мы можем определить функцию &amp;lt;tex&amp;gt;getOtherSrc()&amp;lt;/tex&amp;gt;, состоящую из одного оператора &amp;lt;tex&amp;gt;return&amp;lt;/tex&amp;gt;, которая вернет весь предшествующий ей код. Тогда &amp;lt;tex&amp;gt;p(y)&amp;lt;/tex&amp;gt; перепишется так. &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;font size = &amp;quot;3em&amp;quot;&amp;gt; &lt;br /&gt;
  p(y){ &lt;br /&gt;
      V(x,y) {...}&lt;br /&gt;
 &lt;br /&gt;
      main() {&lt;br /&gt;
          return V(getSrc(), y)&lt;br /&gt;
      }&lt;br /&gt;
  &lt;br /&gt;
      string getSrc() {&lt;br /&gt;
          string src = getOtherSrc();&lt;br /&gt;
          return src + &amp;quot;string getOtherSrc() {&amp;quot; + &amp;quot;\n&amp;quot; + &amp;quot;return&amp;quot; + src + &amp;quot;\n&amp;quot; + &amp;quot;}&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
  &lt;br /&gt;
      string getOtherSrc() {...} &lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь &amp;lt;tex&amp;gt;getOtherSrc()&amp;lt;/tex&amp;gt; определяется очевидным образом, и мы получаем '''итоговую версию''' функции &amp;lt;tex&amp;gt;p(y)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;font size = &amp;quot;3em&amp;quot;&amp;gt; &lt;br /&gt;
  p(y){ &lt;br /&gt;
      V(x,y) {...}&lt;br /&gt;
 &lt;br /&gt;
      main() {&lt;br /&gt;
          return V(getSrc(), y)&lt;br /&gt;
      }&lt;br /&gt;
  &lt;br /&gt;
      string getSrc() {&lt;br /&gt;
          string src = getOtherSrc();&lt;br /&gt;
          return src + &amp;quot;string getOtherSrc() {&amp;quot; + &amp;quot;\n&amp;quot; + &amp;quot;return&amp;quot; + src + &amp;quot;\n&amp;quot; + &amp;quot;}&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
  &lt;br /&gt;
      string getOtherSrc() {&lt;br /&gt;
          return &amp;quot;  p(y){             // Возвращаем весь предыдущий код&lt;br /&gt;
                     V(x,y) {...}&lt;br /&gt;
 &lt;br /&gt;
                      main() {&lt;br /&gt;
                          return V(getSrc(), y)&lt;br /&gt;
                      }&lt;br /&gt;
  &lt;br /&gt;
                      string getSrc() {&lt;br /&gt;
                          string src = getOtherSrc();&lt;br /&gt;
                          return src + &amp;quot;string getOtherSrc() {&amp;quot; + &amp;quot;\n&amp;quot; + &amp;quot;return&amp;quot; + src + &amp;quot;\n&amp;quot; + &amp;quot;}&amp;quot;;&lt;br /&gt;
                  }&amp;quot;;&lt;br /&gt;
      } &lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
Если говорить неформально, теорема о рекурсии утверждает, что внутри программы можно использовать ее код. Это упрощает доказательство некоторых теорем.&lt;br /&gt;
&lt;br /&gt;
Приведем так же альтернативую формулировку теоремы и альтернативное (неконструктивное) доказательство.&lt;br /&gt;
&lt;br /&gt;
==Теорема о неподвижной точке==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th2&lt;br /&gt;
|author=Роджерс&lt;br /&gt;
|about=о неподвижной точке / ''Rogers' fixed-point theorem''&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;U&amp;lt;/tex&amp;gt; {{---}} [[Диагональный_метод|универсальная функция]] для класса вычислимых функций одного аргумента, &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt; {{---}} всюду определённая [[Вычислимые_функции|вычислимая функция]] одного аргумента. Тогда найдется такое &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;U_n=U_{h(n)}&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;h(n)&amp;lt;/tex&amp;gt; - номера одной функции.&lt;br /&gt;
|proof=&lt;br /&gt;
Начнём с доказательства леммы.&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement= Пусть на натуральных числах задано отношение эквивалентности &amp;lt;tex&amp;gt;\equiv&amp;lt;/tex&amp;gt;. Тогда следующие два утверждения не могут быть выполнены одновременно: &amp;lt;br&amp;gt;&lt;br /&gt;
# Пусть &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; {{---}} вычислимая функция. Тогда существует всюду определённое вычислимое &amp;lt;tex&amp;gt;\equiv&amp;lt;/tex&amp;gt; {{---}} продолжение &amp;lt;tex&amp;gt;g&amp;lt;/tex&amp;gt; функции &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;, то есть такая &amp;lt;tex&amp;gt;g&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;D(g)=N&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\forall x&amp;lt;/tex&amp;gt; такого, что &amp;lt;tex&amp;gt;f(x) \ne \perp&amp;lt;/tex&amp;gt;, выполнено &amp;lt;tex&amp;gt;f(x) \equiv g(x)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Найдётся такая всюду определенная вычислимая &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;\forall n &amp;lt;/tex&amp;gt; выполнено &amp;lt;tex&amp;gt;h(n) \not\equiv n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Приведем доказательство от противного. Пусть оба утверждения выполнены. &amp;lt;br&amp;gt;&lt;br /&gt;
Определим функцию &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; так: &amp;lt;tex&amp;gt;f(x)=U(x,x)&amp;lt;/tex&amp;gt;. Заметим, что никакая всюду вычислимая функция не отличается от &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; всюду. &amp;lt;br&amp;gt; Согласно первому утверждению найдётся всюду определённое вычислимое &amp;lt;tex&amp;gt;\equiv&amp;lt;/tex&amp;gt; {{---}} продолжение &amp;lt;tex&amp;gt;g&amp;lt;/tex&amp;gt; функции &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; Определим функцию &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; так: &amp;lt;tex&amp;gt;t(x)=h(g(x))&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt; {{---}} функция из второго утверждения. &amp;lt;br &amp;gt;Если &amp;lt;tex&amp;gt;f(x) \ne \perp&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;f(x)=g(x) \ne h(g(x))=t(x)&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;f(x) \ne t(x)&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;f(x)= \perp&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;f(x) \ne t(x)&amp;lt;/tex&amp;gt;, так как &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; всюду определена. Значит, &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; всюду отлична от &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, получили противоречие.&lt;br /&gt;
}}&lt;br /&gt;
Теперь определим отношение &amp;lt;tex&amp;gt;\equiv&amp;lt;/tex&amp;gt; так: &amp;lt;tex&amp;gt;x \equiv y \Leftrightarrow U_x = U_y&amp;lt;/tex&amp;gt;. Покажем, что для него выполнено первое утверждение леммы. &amp;lt;br&amp;gt; Для заданной &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; определим &amp;lt;tex&amp;gt;V(n,x) = U(f(n), x)&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; Так как &amp;lt;tex&amp;gt;U&amp;lt;/tex&amp;gt; {{---}} универсальная функция, то найдётся такая всюду определенная вычислимая функция &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;V(n,x) = U(s(n), x)&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; Тогда  &amp;lt;tex&amp;gt;\forall x &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; n &amp;lt;/tex&amp;gt; будет выполнено &amp;lt;tex&amp;gt;U(f(n), x) = U(s(n), x)&amp;lt;/tex&amp;gt;. Значит, &amp;lt;tex&amp;gt;\forall n &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; s(n) \equiv f(n)&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; {{---}} всюду определенное &amp;lt;tex&amp;gt;\equiv&amp;lt;/tex&amp;gt; {{---}} продолжение &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Значит, для нашего отношения эквивалентности второе утверждение леммы не верно, то есть для любого вычислимого всюду определенного &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists n&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;U_{h(n)} = U_n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Другими словами, нельзя найти алгоритма, преобразующего программы, который бы по каждой программе давал другую (не эквивалентную ей).&lt;br /&gt;
&lt;br /&gt;
==Пример использования==&lt;br /&gt;
Используя теорему о рекурсии, приведём простое доказательство неразрешимости языка &amp;lt;tex&amp;gt;L=\{p|p(\epsilon)=\perp\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=st2&lt;br /&gt;
|statement= Язык &amp;lt;tex&amp;gt;L=\{p|p(\epsilon)=\perp\}&amp;lt;/tex&amp;gt; неразрешим. &lt;br /&gt;
|proof=&lt;br /&gt;
Предположим обратное, тогда существует программа &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; разрещающая &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Рассмотрим следущую программу:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 p(x)&lt;br /&gt;
   if r(p)&lt;br /&gt;
      return 1&lt;br /&gt;
   while true&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p(\epsilon)=\perp&amp;lt;/tex&amp;gt;. Тогда условие &amp;lt;tex&amp;gt;r(p)&amp;lt;/tex&amp;gt; выполняется и &amp;lt;tex&amp;gt;p(\epsilon)=1&amp;lt;/tex&amp;gt;. Противоречие. Если &amp;lt;tex&amp;gt;p(\epsilon) \ne \perp&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;r(p)&amp;lt;/tex&amp;gt; не выполняется и &amp;lt;tex&amp;gt;p(\epsilon)=\perp&amp;lt;/tex&amp;gt;. Противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Доказательство [[Свойства перечислимых языков. Теорема Успенского-Райса|теоремы Успенского-Райса]] с использованием теоремы о рекурсии:&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th3&lt;br /&gt;
|statement=Язык никакого нетривиального свойства не является разрешимым.&lt;br /&gt;
|proof=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;F \subset RE, \varnothing \not= F \not= RE&amp;lt;/tex&amp;gt;. Предположим, что язык свойства &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; разрешается программой &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;f \in L(F), g \not\in L(F)&amp;lt;/tex&amp;gt;. Напишем следующую программу:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Q(x,y)&lt;br /&gt;
   if d(x)&lt;br /&gt;
     return g(y)&lt;br /&gt;
   else&lt;br /&gt;
     return f(y)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
По теореме о рекурсии, &amp;lt;tex&amp;gt;\exists p \; \forall y \; p(y) = Q(p,y)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;p \in L(F)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;Q(p,y) = g(y) \Rightarrow p(y) = g(y) \Rightarrow p \not\in L(F)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если же &amp;lt;tex&amp;gt;p \not\in L(F)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;Q(p,y) = f(y) \Rightarrow p(y) = f(y) \Rightarrow p \in L(F)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В обоих случаях получаем противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Источники==&lt;br /&gt;
* [[wikipedia:Kleene's_recursion_theorem | Wikipedia {{---}} Kleene's recursion theorem]]&lt;br /&gt;
* ''Верещагин Н. К., Шень А.'' '''Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции''' — М.: МЦНМО, 1999 - С. 176&lt;br /&gt;
* ''Kleene, Stephen'' '''On notation for ordinal numbers''' - The Journal of Symbolic Logic, 1938 - С. 150-155&lt;/div&gt;</summary>
		<author><name>217.66.158.24</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B8&amp;diff=56714</id>
		<title>Теорема о рекурсии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B8&amp;diff=56714"/>
				<updated>2016-12-03T10:27:51Z</updated>
		
		<summary type="html">&lt;p&gt;217.66.158.24: /* Теорема о неподвижной точке */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Теорема о рекурсии==&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th1&lt;br /&gt;
|author=Клини&lt;br /&gt;
|about=о рекурсии / ''Kleene's recursion theorem''&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;V(n, x)&amp;lt;/tex&amp;gt; {{---}} вычислимая функция. Тогда найдётся такая вычислимая &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;\forall y&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;p(y) = V(p, y)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Приведем конструктивное доказательство теоремы.&lt;br /&gt;
Пусть есть вычислимая &amp;lt;tex&amp;gt;V(x,y)&amp;lt;/tex&amp;gt;. Будем поэтапно строить функцию &amp;lt;tex&amp;gt;p(y)&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; Предположим, что у нас в распоряжении есть функция &amp;lt;tex&amp;gt;getSrc()&amp;lt;/tex&amp;gt;, которая вернет код &amp;lt;tex&amp;gt;p(y)&amp;lt;/tex&amp;gt;. Тогда саму &amp;lt;tex&amp;gt;p(y)&amp;lt;/tex&amp;gt; можно переписать так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;font size = &amp;quot;3em&amp;quot;&amp;gt;&lt;br /&gt;
 p(y){ &lt;br /&gt;
      V(x,y) {...}&lt;br /&gt;
 &lt;br /&gt;
      main() {&lt;br /&gt;
          return V(getSrc(), y)&lt;br /&gt;
      }&lt;br /&gt;
  &lt;br /&gt;
      string getSrc() {...}&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Теперь нужно определить функцию &amp;lt;tex&amp;gt;getSrc()&amp;lt;/tex&amp;gt;. Предположим, что внутри &amp;lt;tex&amp;gt;p(y)&amp;lt;/tex&amp;gt; мы можем определить функцию &amp;lt;tex&amp;gt;getOtherSrc()&amp;lt;/tex&amp;gt;, состоящую из одного оператора &amp;lt;tex&amp;gt;return&amp;lt;/tex&amp;gt;, которая вернет весь предшествующий ей код. Тогда &amp;lt;tex&amp;gt;p(y)&amp;lt;/tex&amp;gt; перепишется так. &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;font size = &amp;quot;3em&amp;quot;&amp;gt; &lt;br /&gt;
  p(y){ &lt;br /&gt;
      V(x,y) {...}&lt;br /&gt;
 &lt;br /&gt;
      main() {&lt;br /&gt;
          return V(getSrc(), y)&lt;br /&gt;
      }&lt;br /&gt;
  &lt;br /&gt;
      string getSrc() {&lt;br /&gt;
          string src = getOtherSrc();&lt;br /&gt;
          return src + &amp;quot;string getOtherSrc() {&amp;quot; + &amp;quot;\n&amp;quot; + &amp;quot;return&amp;quot; + src + &amp;quot;\n&amp;quot; + &amp;quot;}&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
  &lt;br /&gt;
      string getOtherSrc() {...} &lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь &amp;lt;tex&amp;gt;getOtherSrc()&amp;lt;/tex&amp;gt; определяется очевидным образом, и мы получаем '''итоговую версию''' функции &amp;lt;tex&amp;gt;p(y)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;font size = &amp;quot;3em&amp;quot;&amp;gt; &lt;br /&gt;
  p(y){ &lt;br /&gt;
      V(x,y) {...}&lt;br /&gt;
 &lt;br /&gt;
      main() {&lt;br /&gt;
          return V(getSrc(), y)&lt;br /&gt;
      }&lt;br /&gt;
  &lt;br /&gt;
      string getSrc() {&lt;br /&gt;
          string src = getOtherSrc();&lt;br /&gt;
          return src + &amp;quot;string getOtherSrc() {&amp;quot; + &amp;quot;\n&amp;quot; + &amp;quot;return&amp;quot; + src + &amp;quot;\n&amp;quot; + &amp;quot;}&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
  &lt;br /&gt;
      string getOtherSrc() {&lt;br /&gt;
          return &amp;quot;  p(y){             // Возвращаем весь предыдущий код&lt;br /&gt;
                     V(x,y) {...}&lt;br /&gt;
 &lt;br /&gt;
                      main() {&lt;br /&gt;
                          return V(getSrc(), y)&lt;br /&gt;
                      }&lt;br /&gt;
  &lt;br /&gt;
                      string getSrc() {&lt;br /&gt;
                          string src = getOtherSrc();&lt;br /&gt;
                          return src + &amp;quot;string getOtherSrc() {&amp;quot; + &amp;quot;\n&amp;quot; + &amp;quot;return&amp;quot; + src + &amp;quot;\n&amp;quot; + &amp;quot;}&amp;quot;;&lt;br /&gt;
                  }&amp;quot;;&lt;br /&gt;
      } &lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
Если говорить неформально, теорема о рекурсии утверждает, что внутри программы можно использовать ее код. Это упрощает доказательство некоторых теорем.&lt;br /&gt;
&lt;br /&gt;
Приведем так же альтернативую формулировку теоремы и альтернативное (неконструктивное) доказательство.&lt;br /&gt;
&lt;br /&gt;
==Теорема о неподвижной точке==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th2&lt;br /&gt;
|author=Роджерс&lt;br /&gt;
|about=о неподвижной точке / ''Rogers' fixed-point theorem''&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;U&amp;lt;/tex&amp;gt; {{---}} [[Диагональный_метод|универсальная функция]] для класса вычислимых функций одного аргумента, &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt; {{---}} всюду определённая [[Вычислимые_функции|вычислимая функция]] одного аргумента. Тогда найдется такое &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;U_n=U_{h(n)}&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;h(n)&amp;lt;/tex&amp;gt; - номера одной функции. Другими словами, нельзя найти алгоритма, преобразующего программы, который бы по каждой программе давал другую (не эквивалентную ей).&lt;br /&gt;
|proof=&lt;br /&gt;
Начнём с доказательства леммы.&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement= Пусть на натуральных числах задано отношение эквивалентности &amp;lt;tex&amp;gt;\equiv&amp;lt;/tex&amp;gt;. Тогда следующие два утверждения не могут быть выполнены одновременно: &amp;lt;br&amp;gt;&lt;br /&gt;
# Пусть &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; {{---}} вычислимая функция. Тогда существует всюду определённое вычислимое &amp;lt;tex&amp;gt;\equiv&amp;lt;/tex&amp;gt; {{---}} продолжение &amp;lt;tex&amp;gt;g&amp;lt;/tex&amp;gt; функции &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;, то есть такая &amp;lt;tex&amp;gt;g&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;D(g)=N&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\forall x&amp;lt;/tex&amp;gt; такого, что &amp;lt;tex&amp;gt;f(x) \ne \perp&amp;lt;/tex&amp;gt;, выполнено &amp;lt;tex&amp;gt;f(x) \equiv g(x)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Найдётся такая всюду определенная вычислимая &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;\forall n &amp;lt;/tex&amp;gt; выполнено &amp;lt;tex&amp;gt;h(n) \not\equiv n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Приведем доказательство от противного. Пусть оба утверждения выполнены. &amp;lt;br&amp;gt;&lt;br /&gt;
Определим функцию &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; так: &amp;lt;tex&amp;gt;f(x)=U(x,x)&amp;lt;/tex&amp;gt;. Заметим, что никакая всюду вычислимая функция не отличается от &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; всюду. &amp;lt;br&amp;gt; Согласно первому утверждению найдётся всюду определённое вычислимое &amp;lt;tex&amp;gt;\equiv&amp;lt;/tex&amp;gt; {{---}} продолжение &amp;lt;tex&amp;gt;g&amp;lt;/tex&amp;gt; функции &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; Определим функцию &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; так: &amp;lt;tex&amp;gt;t(x)=h(g(x))&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt; {{---}} функция из второго утверждения. &amp;lt;br &amp;gt;Если &amp;lt;tex&amp;gt;f(x) \ne \perp&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;f(x)=g(x) \ne h(g(x))=t(x)&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;f(x) \ne t(x)&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;f(x)= \perp&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;f(x) \ne t(x)&amp;lt;/tex&amp;gt;, так как &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; всюду определена. Значит, &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; всюду отлична от &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, получили противоречие.&lt;br /&gt;
}}&lt;br /&gt;
Теперь определим отношение &amp;lt;tex&amp;gt;\equiv&amp;lt;/tex&amp;gt; так: &amp;lt;tex&amp;gt;x \equiv y \Leftrightarrow U_x = U_y&amp;lt;/tex&amp;gt;. Покажем, что для него выполнено первое утверждение леммы. &amp;lt;br&amp;gt; Для заданной &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; определим &amp;lt;tex&amp;gt;V(n,x) = U(f(n), x)&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; Так как &amp;lt;tex&amp;gt;U&amp;lt;/tex&amp;gt; {{---}} универсальная функция, то найдётся такая всюду определенная вычислимая функция &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;V(n,x) = U(s(n), x)&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; Тогда  &amp;lt;tex&amp;gt;\forall x &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; n &amp;lt;/tex&amp;gt; будет выполнено &amp;lt;tex&amp;gt;U(f(n), x) = U(s(n), x)&amp;lt;/tex&amp;gt;. Значит, &amp;lt;tex&amp;gt;\forall n &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; s(n) \equiv f(n)&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; {{---}} всюду определенное &amp;lt;tex&amp;gt;\equiv&amp;lt;/tex&amp;gt; {{---}} продолжение &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Значит, для нашего отношения эквивалентности второе утверждение леммы не верно, то есть для любого вычислимого всюду определенного &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists n&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;U_{h(n)} = U_n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Пример использования==&lt;br /&gt;
Используя теорему о рекурсии, приведём простое доказательство неразрешимости языка &amp;lt;tex&amp;gt;L=\{p|p(\epsilon)=\perp\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=st2&lt;br /&gt;
|statement= Язык &amp;lt;tex&amp;gt;L=\{p|p(\epsilon)=\perp\}&amp;lt;/tex&amp;gt; неразрешим. &lt;br /&gt;
|proof=&lt;br /&gt;
Предположим обратное, тогда существует программа &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; разрещающая &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Рассмотрим следущую программу:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 p(x)&lt;br /&gt;
   if r(p)&lt;br /&gt;
      return 1&lt;br /&gt;
   while true&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p(\epsilon)=\perp&amp;lt;/tex&amp;gt;. Тогда условие &amp;lt;tex&amp;gt;r(p)&amp;lt;/tex&amp;gt; выполняется и &amp;lt;tex&amp;gt;p(\epsilon)=1&amp;lt;/tex&amp;gt;. Противоречие. Если &amp;lt;tex&amp;gt;p(\epsilon) \ne \perp&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;r(p)&amp;lt;/tex&amp;gt; не выполняется и &amp;lt;tex&amp;gt;p(\epsilon)=\perp&amp;lt;/tex&amp;gt;. Противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Доказательство [[Свойства перечислимых языков. Теорема Успенского-Райса|теоремы Успенского-Райса]] с использованием теоремы о рекурсии:&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th3&lt;br /&gt;
|statement=Язык никакого нетривиального свойства не является разрешимым.&lt;br /&gt;
|proof=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;F \subset RE, \varnothing \not= F \not= RE&amp;lt;/tex&amp;gt;. Предположим, что язык свойства &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; разрешается программой &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;f \in L(F), g \not\in L(F)&amp;lt;/tex&amp;gt;. Напишем следующую программу:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Q(x,y)&lt;br /&gt;
   if d(x)&lt;br /&gt;
     return g(y)&lt;br /&gt;
   else&lt;br /&gt;
     return f(y)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
По теореме о рекурсии, &amp;lt;tex&amp;gt;\exists p \; \forall y \; p(y) = Q(p,y)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;p \in L(F)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;Q(p,y) = g(y) \Rightarrow p(y) = g(y) \Rightarrow p \not\in L(F)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если же &amp;lt;tex&amp;gt;p \not\in L(F)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;Q(p,y) = f(y) \Rightarrow p(y) = f(y) \Rightarrow p \in L(F)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В обоих случаях получаем противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Источники==&lt;br /&gt;
* [[wikipedia:Kleene's_recursion_theorem | Wikipedia {{---}} Kleene's recursion theorem]]&lt;br /&gt;
* ''Верещагин Н. К., Шень А.'' '''Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции''' — М.: МЦНМО, 1999 - С. 176&lt;br /&gt;
* ''Kleene, Stephen'' '''On notation for ordinal numbers''' - The Journal of Symbolic Logic, 1938 - С. 150-155&lt;/div&gt;</summary>
		<author><name>217.66.158.24</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B8&amp;diff=56680</id>
		<title>Теорема о рекурсии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B8&amp;diff=56680"/>
				<updated>2016-12-02T19:50:02Z</updated>
		
		<summary type="html">&lt;p&gt;217.66.158.24: /* Источники */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Теорема о рекурсии==&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th1&lt;br /&gt;
|author=Клини&lt;br /&gt;
|about=о рекурсии / ''Kleene's recursion theorem''&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;V(n, x)&amp;lt;/tex&amp;gt; {{---}} вычислимая функция. Тогда найдётся такая вычислимая &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;\forall y&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;p(y) = V(p, y)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Приведем конструктивное доказательство теоремы.&lt;br /&gt;
Пусть есть вычислимая &amp;lt;tex&amp;gt;V(x,y)&amp;lt;/tex&amp;gt;. Будем поэтапно строить функцию &amp;lt;tex&amp;gt;p(y)&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; Предположим, что у нас в распоряжении есть функция &amp;lt;tex&amp;gt;getSrc()&amp;lt;/tex&amp;gt;, которая вернет код &amp;lt;tex&amp;gt;p(y)&amp;lt;/tex&amp;gt;. Тогда саму &amp;lt;tex&amp;gt;p(y)&amp;lt;/tex&amp;gt; можно переписать так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;font size = &amp;quot;3em&amp;quot;&amp;gt;&lt;br /&gt;
 p(y){ &lt;br /&gt;
      V(x,y) {...}&lt;br /&gt;
 &lt;br /&gt;
      main() {&lt;br /&gt;
          return V(getSrc(), y)&lt;br /&gt;
      }&lt;br /&gt;
  &lt;br /&gt;
      string getSrc() {...}&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Теперь нужно определить функцию &amp;lt;tex&amp;gt;getSrc()&amp;lt;/tex&amp;gt;. Предположим, что внутри &amp;lt;tex&amp;gt;p(y)&amp;lt;/tex&amp;gt; мы можем определить функцию &amp;lt;tex&amp;gt;getOtherSrc()&amp;lt;/tex&amp;gt;, состоящую из одного оператора &amp;lt;tex&amp;gt;return&amp;lt;/tex&amp;gt;, которая вернет весь предшествующий ей код. Тогда &amp;lt;tex&amp;gt;p(y)&amp;lt;/tex&amp;gt; перепишется так. &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;font size = &amp;quot;3em&amp;quot;&amp;gt; &lt;br /&gt;
  p(y){ &lt;br /&gt;
      V(x,y) {...}&lt;br /&gt;
 &lt;br /&gt;
      main() {&lt;br /&gt;
          return V(getSrc(), y)&lt;br /&gt;
      }&lt;br /&gt;
  &lt;br /&gt;
      string getSrc() {&lt;br /&gt;
          string src = getOtherSrc();&lt;br /&gt;
          return src + &amp;quot;string getOtherSrc() {&amp;quot; + &amp;quot;\n&amp;quot; + &amp;quot;return&amp;quot; + src + &amp;quot;\n&amp;quot; + &amp;quot;}&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
  &lt;br /&gt;
      string getOtherSrc() {...} &lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь &amp;lt;tex&amp;gt;getOtherSrc()&amp;lt;/tex&amp;gt; определяется очевидным образом, и мы получаем '''итоговую версию''' функции &amp;lt;tex&amp;gt;p(y)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;font size = &amp;quot;3em&amp;quot;&amp;gt; &lt;br /&gt;
  p(y){ &lt;br /&gt;
      V(x,y) {...}&lt;br /&gt;
 &lt;br /&gt;
      main() {&lt;br /&gt;
          return V(getSrc(), y)&lt;br /&gt;
      }&lt;br /&gt;
  &lt;br /&gt;
      string getSrc() {&lt;br /&gt;
          string src = getOtherSrc();&lt;br /&gt;
          return src + &amp;quot;string getOtherSrc() {&amp;quot; + &amp;quot;\n&amp;quot; + &amp;quot;return&amp;quot; + src + &amp;quot;\n&amp;quot; + &amp;quot;}&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
  &lt;br /&gt;
      string getOtherSrc() {&lt;br /&gt;
          return &amp;quot;  p(y){             // Возвращаем весь предыдущий код&lt;br /&gt;
                     V(x,y) {...}&lt;br /&gt;
 &lt;br /&gt;
                      main() {&lt;br /&gt;
                          return V(getSrc(), y)&lt;br /&gt;
                      }&lt;br /&gt;
  &lt;br /&gt;
                      string getSrc() {&lt;br /&gt;
                          string src = getOtherSrc();&lt;br /&gt;
                          return src + &amp;quot;string getOtherSrc() {&amp;quot; + &amp;quot;\n&amp;quot; + &amp;quot;return&amp;quot; + src + &amp;quot;\n&amp;quot; + &amp;quot;}&amp;quot;;&lt;br /&gt;
                  }&amp;quot;;&lt;br /&gt;
      } &lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
Если говорить неформально, теорема о рекурсии утверждает, что внутри программы можно использовать ее код. Это упрощает доказательство некоторых теорем.&lt;br /&gt;
&lt;br /&gt;
Приведем так же альтернативую формулировку теоремы и альтернативное (неконструктивное) доказательство.&lt;br /&gt;
&lt;br /&gt;
==Теорема о неподвижной точке==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th2&lt;br /&gt;
|author=Роджерс&lt;br /&gt;
|about=о неподвижной точке / ''Rogers' fixed-point theorem''&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;U&amp;lt;/tex&amp;gt; {{---}} [[Диагональный_метод|универсальная функция]], &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt; {{---}} всюду определённая [[Вычислимые_функции|вычислимая функция]]. Тогда найдется такое &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;U_n=U_{h(n)}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Другими словами: нельзя найти алгоритма, преобразующего программы, который бы по каждой программе давал другую (не эквивалентную ей).&lt;br /&gt;
|proof=&lt;br /&gt;
Начнём с доказательства леммы.&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement= Пусть на натуральных числах задано отношение эквивалентности &amp;lt;tex&amp;gt;\equiv&amp;lt;/tex&amp;gt;. Тогда следующие два утверждения не могут быть выполнены одновременно: &amp;lt;br&amp;gt;&lt;br /&gt;
# Пусть &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; {{---}} вычислимая функция. Тогда существует всюду определённое вычислимое &amp;lt;tex&amp;gt;\equiv&amp;lt;/tex&amp;gt; {{---}} продолжение &amp;lt;tex&amp;gt;g&amp;lt;/tex&amp;gt; функции &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;, то есть такая &amp;lt;tex&amp;gt;g&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;D(g)=N&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\forall x&amp;lt;/tex&amp;gt; такого, что &amp;lt;tex&amp;gt;f(x) \ne \perp&amp;lt;/tex&amp;gt;, выполнено &amp;lt;tex&amp;gt;f(x) \equiv g(x)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Найдётся такая всюду определенная вычислимая &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;\forall n &amp;lt;/tex&amp;gt; выполнено &amp;lt;tex&amp;gt;h(n) \not\equiv n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Приведем доказательство от противного. Пусть оба утверждения выполнены. &amp;lt;br&amp;gt;&lt;br /&gt;
Определим функцию &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; так: &amp;lt;tex&amp;gt;f(x)=U(x,x)&amp;lt;/tex&amp;gt;. Заметим, что никакая всюду вычислимая функция не отличается от &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; всюду. &amp;lt;br&amp;gt; Согласно первому утверждению найдётся всюду определённое вычислимое &amp;lt;tex&amp;gt;\equiv&amp;lt;/tex&amp;gt; {{---}} продолжение &amp;lt;tex&amp;gt;g&amp;lt;/tex&amp;gt; функции &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; Определим функцию &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; так: &amp;lt;tex&amp;gt;t(x)=h(g(x))&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt; {{---}} функция из второго утверждения. &amp;lt;br &amp;gt;Если &amp;lt;tex&amp;gt;f(x) \ne \perp&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;f(x)=g(x) \ne h(g(x))=t(x)&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;f(x) \ne t(x)&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;f(x)= \perp&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;f(x) \ne t(x)&amp;lt;/tex&amp;gt;, так как &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; всюду определена. Значит, &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; всюду отлична от &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, получили противоречие.&lt;br /&gt;
}}&lt;br /&gt;
Теперь определим отношение &amp;lt;tex&amp;gt;\equiv&amp;lt;/tex&amp;gt; так: &amp;lt;tex&amp;gt;x \equiv y \Leftrightarrow U_x = U_y&amp;lt;/tex&amp;gt;. Покажем, что для него выполнено первое утверждение леммы. &amp;lt;br&amp;gt; Для заданной &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; определим &amp;lt;tex&amp;gt;V(n,x) = U(f(n), x)&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; Так как &amp;lt;tex&amp;gt;U&amp;lt;/tex&amp;gt; {{---}} универсальная функция, то найдётся такая всюду определенная вычислимая функция &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;V(n,x) = U(s(n), x)&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; Тогда  &amp;lt;tex&amp;gt;\forall x &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; n &amp;lt;/tex&amp;gt; будет выполнено &amp;lt;tex&amp;gt;U(f(n), x) = U(s(n), x)&amp;lt;/tex&amp;gt;. Значит, &amp;lt;tex&amp;gt;\forall n &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; s(n) \equiv f(n)&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; {{---}} всюду определенное &amp;lt;tex&amp;gt;\equiv&amp;lt;/tex&amp;gt; {{---}} продолжение &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Значит, для нашего отношения эквивалентности второе утверждение леммы не верно, то есть для любого вычислимого всюду определенного &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists n&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;U_{h(n)} = U_n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Пример использования==&lt;br /&gt;
Используя теорему о рекурсии, приведём простое доказательство неразрешимости языка &amp;lt;tex&amp;gt;L=\{p|p(\epsilon)=\perp\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=st2&lt;br /&gt;
|statement= Язык &amp;lt;tex&amp;gt;L=\{p|p(\epsilon)=\perp\}&amp;lt;/tex&amp;gt; неразрешим. &lt;br /&gt;
|proof=&lt;br /&gt;
Предположим обратное, тогда существует программа &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; разрещающая &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Рассмотрим следущую программу:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 p(x)&lt;br /&gt;
   if r(p)&lt;br /&gt;
      return 1&lt;br /&gt;
   while true&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p(\epsilon)=\perp&amp;lt;/tex&amp;gt;. Тогда условие &amp;lt;tex&amp;gt;r(p)&amp;lt;/tex&amp;gt; выполняется и &amp;lt;tex&amp;gt;p(\epsilon)=1&amp;lt;/tex&amp;gt;. Противоречие. Если &amp;lt;tex&amp;gt;p(\epsilon) \ne \perp&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;r(p)&amp;lt;/tex&amp;gt; не выполняется и &amp;lt;tex&amp;gt;p(\epsilon)=\perp&amp;lt;/tex&amp;gt;. Противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Доказательство [[Свойства перечислимых языков. Теорема Успенского-Райса|теоремы Успенского-Райса]] с использованием теоремы о рекурсии:&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th3&lt;br /&gt;
|statement=Язык никакого нетривиального свойства не является разрешимым.&lt;br /&gt;
|proof=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;F \subset RE, \varnothing \not= F \not= RE&amp;lt;/tex&amp;gt;. Предположим, что язык свойства &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; разрешается программой &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;f \in L(F), g \not\in L(F)&amp;lt;/tex&amp;gt;. Напишем следующую программу:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Q(x,y)&lt;br /&gt;
   if d(x)&lt;br /&gt;
     return g(y)&lt;br /&gt;
   else&lt;br /&gt;
     return f(y)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
По теореме о рекурсии, &amp;lt;tex&amp;gt;\exists p \; \forall y \; p(y) = Q(p,y)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;p \in L(F)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;Q(p,y) = g(y) \Rightarrow p(y) = g(y) \Rightarrow p \not\in L(F)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если же &amp;lt;tex&amp;gt;p \not\in L(F)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;Q(p,y) = f(y) \Rightarrow p(y) = f(y) \Rightarrow p \in L(F)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В обоих случаях получаем противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Источники==&lt;br /&gt;
* [[wikipedia:Kleene's_recursion_theorem | Wikipedia {{---}} Kleene's recursion theorem]]&lt;br /&gt;
* ''Верещагин Н. К., Шень А.'' '''Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции''' — М.: МЦНМО, 1999 - С. 176&lt;br /&gt;
* ''Kleene, Stephen'' '''On notation for ordinal numbers''' - The Journal of Symbolic Logic, 1938 - С. 150-155&lt;/div&gt;</summary>
		<author><name>217.66.158.24</name></author>	</entry>

	</feed>