<?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=5.167.172.0&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=5.167.172.0&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/5.167.172.0"/>
		<updated>2026-05-12T03:35:08Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Shersh/%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=58572</id>
		<title>Участник:Shersh/Теорема о рекурсии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Shersh/%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=58572"/>
				<updated>2017-01-02T20:56:06Z</updated>
		
		<summary type="html">&lt;p&gt;5.167.172.0: /* Пример использования */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;По [[Теорема о рекурсии | теореме о рекурсии]], программа может знать свой исходный код. Значит, в неё можно написать функцию &amp;lt;tex&amp;gt; \mathrm{getSrc()} &amp;lt;/tex&amp;gt;, которая вернёт строку {{---}} исходный код программы. Далее будем считать, что такая функция определена в каждой программе.&lt;br /&gt;
== Неразрешимость универсального языка ==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=proposalU. &lt;br /&gt;
|statement=[[Разрешимые (рекурсивные) языки#Пример неразрешимого множества | Универсальный язык]] неразрешим&lt;br /&gt;
|proof=&lt;br /&gt;
Допустим, что он разрешим. Тогда напишем такую программу:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  p(x):&lt;br /&gt;
    '''if''' u(getSrc(), x)&lt;br /&gt;
      '''while''' ''true''&lt;br /&gt;
    '''else'''&lt;br /&gt;
      '''return''' 1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt; u(p, x) = 1 &amp;lt;/tex&amp;gt;, тогда программа &amp;lt;tex&amp;gt; p &amp;lt;/tex&amp;gt; на входе &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должна вернуть &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;, но по условию &amp;lt;tex&amp;gt; if &amp;lt;/tex&amp;gt; она зависает, а следовательно, не принадлежит универсальному языку.&lt;br /&gt;
&lt;br /&gt;
Если же &amp;lt;tex&amp;gt; u(p, x) \neq 1 &amp;lt;/tex&amp;gt;, то мы пойдём во вторую ветку условного оператора и вернём &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;, значит, пара &amp;lt;tex&amp;gt; &lt;br /&gt;
\langle p, x \rangle &amp;lt;/tex&amp;gt; принадлежит универсальному языку, но &amp;lt;tex&amp;gt; u(p, x) \neq 1 &amp;lt;/tex&amp;gt;, значит, пара не принадлежит. Опять получили противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема Успенского-Райса ==&lt;br /&gt;
&amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} разрешимое семейство языков.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; L_A &amp;lt;/tex&amp;gt; {{---}} множество программ, удовлетворяющих св-ву &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь допустим, что язык &amp;lt;tex&amp;gt; L_A &amp;lt;/tex&amp;gt; разрешим. Тогда напишем такую программу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  propA(code):&lt;br /&gt;
    // программа, разрешающее свойство языка &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt;&lt;br /&gt;
  f(x):&lt;br /&gt;
    // такая программа &amp;lt;tex&amp;gt; f &amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;f \in A &amp;lt;/tex&amp;gt;; существует потому что &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} нетривиальное свойство&lt;br /&gt;
  g(x):&lt;br /&gt;
    // такая программа &amp;lt;tex&amp;gt; g &amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;g \notin A &amp;lt;/tex&amp;gt;; существует потому что &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} нетривиальное свойство &lt;br /&gt;
  p(x):&lt;br /&gt;
    '''if''' propA(getSrc())&lt;br /&gt;
        '''return''' g(x)&lt;br /&gt;
    '''else'''&lt;br /&gt;
        '''return''' f(x)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt; p &amp;lt;/tex&amp;gt; не удовлетворяет свойству &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt;, тогда будет выполняться всегда вторая ветка, и &amp;lt;tex&amp;gt; L(p) = L(f) &amp;lt;/tex&amp;gt;. Но язык программы &amp;lt;tex&amp;gt; f &amp;lt;/tex&amp;gt; принадлежит &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt;. Получили противоречие.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt; p &amp;lt;/tex&amp;gt; удовлетворяет свойству &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; L(p) = L(g) &amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt; g \notin A &amp;lt;/tex&amp;gt;. Опять получили противоречие.&lt;br /&gt;
== Колмогоровская сложность ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=defK. &lt;br /&gt;
|definition='''Колмогоровской сложностью''' строки &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; называется функция &amp;lt;tex&amp;gt; K(x) &amp;lt;/tex&amp;gt;, которая равна минимальной длине программы &amp;lt;tex&amp;gt; p : p(\varepsilon) = x &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Сложность считается в каком-то фиксированном языке программирования. Так, например, у языков C++ и Python будет разная колмогоровская сложность одной программы.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
Колмогоровская сложность программы, выводящей &amp;lt;tex&amp;gt; n &amp;lt;/tex&amp;gt; нулей &amp;lt;tex&amp;gt; K(0^n) \leqslant n + c &amp;lt;/tex&amp;gt;. Просто программа, в которой записано &amp;lt;tex&amp;gt; n &amp;lt;/tex&amp;gt; нулей. Но можно записать и более короткую программу для больших &amp;lt;tex&amp;gt; n &amp;lt;/tex&amp;gt; со сложностью &amp;lt;tex&amp;gt; K(0^n) \leqslant \log{n} + c &amp;lt;/tex&amp;gt;, например вот такую:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;tex&amp;gt;p_n&amp;lt;/tex&amp;gt;():&lt;br /&gt;
    '''for''' i = 1..n&lt;br /&gt;
      print(0)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=thK. &lt;br /&gt;
|about=Невычислимость Колмогоровской сложности&lt;br /&gt;
|statement=Колмогоровская сложность {{---}} невычислимая функция.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt; \forall x &amp;gt; x_0: K(x) &amp;gt; f(x)&amp;lt;/tex&amp;gt;, если только &amp;lt;tex&amp;gt;f \leqslant const &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; f &amp;lt;/tex&amp;gt; {{---}} невычислима.&lt;br /&gt;
&lt;br /&gt;
Допустим, что &amp;lt;tex&amp;gt; K &amp;lt;/tex&amp;gt; вычислима, тогда напишем такую программу:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  p(&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;):&lt;br /&gt;
    '''foreach''' x &amp;lt;tex&amp;gt;\in ~ \Sigma^* &amp;lt;/tex&amp;gt; // перебираем слова по возрастанию длины&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt; K(x) &amp;gt; |p|&amp;lt;/tex&amp;gt; // теорема о рекурсии используется здесь&lt;br /&gt;
        print(x)&lt;br /&gt;
        exit     &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Начиная с &amp;lt;tex&amp;gt; x_0 &amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; f(x) &amp;gt; |p| &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Busy beaver ==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=proposalU. &lt;br /&gt;
|statement=Функция [[Busy beaver]] невычислима.&lt;br /&gt;
|proof= Предположим, что это не так. Тогда напишем такую программу&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  p():&lt;br /&gt;
    '''for''' i = 1..BB(&amp;lt;tex&amp;gt;|\mathrm{getSrc()}|&amp;lt;/tex&amp;gt;) + 1&lt;br /&gt;
      do smth&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Такая программа всегда совершает больше шагов, чем функция &amp;lt;tex&amp;gt; BB &amp;lt;/tex&amp;gt; от этой программы. А это невозможно, так &amp;lt;tex&amp;gt; BB(|p|) &amp;lt;/tex&amp;gt; равна максимальному числу шагов как раз этой программы. Получили противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Аналог I теоремы Гёделя о неполноте ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id = thGI. &lt;br /&gt;
|statement = В любой &amp;quot;достаточно богатой системе&amp;quot; существует истинное недоказуемое утверждение.&lt;br /&gt;
|proof =&lt;br /&gt;
Поясним, что это значит. Так как любой язык программирования эквивалентен [[Машина Тьюринга | машине Тьюринга]], то всё связанное с ним кодируется в [[Теории первого порядка | логике первого порядка]] с [[Классы_чисел#Аксиомы_Пеано | аксиомами Пеано]] (для этого достаточно, чтобы программа умела прибавлять к числу единицу и вызывать подпрограммы), поэтому можно в терминах программ получать утверждения, эквивалентные тем, что строил Гёдель.&lt;br /&gt;
&lt;br /&gt;
Можно переформулировать теорему следующим образом: невозможно доказать, что &amp;lt;tex&amp;gt; p(x) = \perp &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом напишем такую программу:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  p(x):&lt;br /&gt;
    '''foreach''' q &amp;lt;tex&amp;gt; \in ~ \Sigma^* &amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' q proves &amp;quot;p(x) зависает&amp;quot;&lt;br /&gt;
        exit    &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема о неподвижной точке ==&lt;br /&gt;
Зафиксируем [[Главные нумерации | главную нумерацию]] &amp;lt;tex&amp;gt; W &amp;lt;/tex&amp;gt;. Обозначим за &amp;lt;tex&amp;gt; W_n &amp;lt;/tex&amp;gt; множество слов, допускаемых программой с номером &amp;lt;tex&amp;gt; n &amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=идентификатор (необязательно), пример: proposalF. &lt;br /&gt;
|statement = &amp;lt;tex&amp;gt; \exists n : W_n = \{n\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Напишем такую программу:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  p(q):&lt;br /&gt;
    '''if''' p.getSrc() == q.getSrc()&lt;br /&gt;
      '''return''' 1&lt;br /&gt;
    '''else'''&lt;br /&gt;
      '''while''' ''true''&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Программа &amp;lt;tex&amp;gt; p &amp;lt;/tex&amp;gt; знает свой код, что то же самое, что и знает свой номер. Как видно из её кода, она допускает только одно число {{---}} свой номер.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [[wikipedia:Kolmogorov_complexity | Wikipedia {{---}} Kolmogorov_complexity]]&lt;br /&gt;
* [http://people.cs.uchicago.edu/~fortnow/papers/kaikoura.pdf Kolmogorov Complexity]&lt;br /&gt;
* [http://www.lektorium.tv/lecture/?id=13494 Дмитрий Ицыксон {{---}} Вычислимость и логика, Колмогоровская сложность]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;/div&gt;</summary>
		<author><name>5.167.172.0</name></author>	</entry>

	</feed>