Колмогоровская сложность — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
м (rollbackEdits.php mass rollback)
 
(не показано 30 промежуточных версий 6 участников)
Строка 1: Строка 1:
'''Колмогоровскую сложность''' можно рассматривать как способ измерения количества информации в строке.
+
'''Колмогоровскую сложность''' (англ. ''Kolmogorov complexity'') можно рассматривать как способ измерения количества информации в строке.
  
 
Но как понять, какое ''количество информации'' содержит в себе строка? Один из классических способов {{---}} это подсчет количества битов (число, пропорциональное длине строки). Рассмотрим следующий пример:
 
Но как понять, какое ''количество информации'' содержит в себе строка? Один из классических способов {{---}} это подсчет количества битов (число, пропорциональное длине строки). Рассмотрим следующий пример:
Строка 5: Строка 5:
 
Понятно, что эту строку можно описать более компактно на естественном языке, "128 нулей", всего 9 символов.
 
Понятно, что эту строку можно описать более компактно на естественном языке, "128 нулей", всего 9 символов.
  
Можем дать следующее определение. ''Количество информации'', которое несет строка {{---}} это размер архива, полученного сжатием строки каким-то конкретным архиватором (например, [http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_LZW LZW]). Это более нетривиальная задача, но мы можем придумать строку, которая явно несет в себе мало информации, но которую архиватор тем не менее не сожмет.
+
Можем дать следующее определение. ''Количество информации'', которое несет строка {{---}} это размер файла, полученного сжатием строки каким-то конкретным компрессором (например, [[Алгоритм LZW|LZW]]). Но мы по-прежнему можем придумать строку, которая явно несет в себе мало информации, но которую компрессор тем не менее не сожмет.
  
Еще более сильное определение. ''Количество информации'', которое несет строка {{---}} это размер архива, сжатого максимальным образом, самым лучшим архиватором. Но тогда встает вопрос, почему такой архиватор существует. На самом деле он есть, и в некотором смысле '''колмогоровская сложность''' строки {{---}} это размер наименьшей программы, которая печатает эту строку.
+
Еще более сильное определение. ''Количество информации'', которое несет строка {{---}} это размер файла, сжатого максимальным образом, самым лучшим компрессором. Но тогда встает вопрос, почему такой компрессор существует. На самом деле он есть, и в некотором смысле '''колмогоровская сложность''' строки {{---}} это размер наименьшей программы, которая печатает эту строку.
  
 
==Определения==
 
==Определения==
Строка 13: Строка 13:
 
{{Определение
 
{{Определение
 
|definition=
 
|definition=
Назовём '''декомпрессором''' <tex>D : \{0, 1\}^* \to
+
Назовём '''декомпрессором''' (англ. ''decompressor'') <tex>D : \{0, 1\}^* \to
 
\left[\begin{array}{l}\{0, 1\}^* \\
 
\left[\begin{array}{l}\{0, 1\}^* \\
 
\bot\end{array}\right.</tex> алгоритм, восстанавливающий разжатый текст из сжатого.
 
\bot\end{array}\right.</tex> алгоритм, восстанавливающий разжатый текст из сжатого.
Строка 24: Строка 24:
 
Пусть <tex>x \in \{0, 1\}^* </tex>, тогда назовем '''колмогоровской сложностью''' строки <tex>K_D(x) = \min \limits_{y}\ \{|y|\ |\ D(y) = x \}</tex>, размер минимальной строки <tex>y</tex>, такой, что <tex>D(y) = x</tex>. <br> Если такого <tex>y</tex> не существует, тогда <tex>K_D(x) = +\infty</tex>.
 
Пусть <tex>x \in \{0, 1\}^* </tex>, тогда назовем '''колмогоровской сложностью''' строки <tex>K_D(x) = \min \limits_{y}\ \{|y|\ |\ D(y) = x \}</tex>, размер минимальной строки <tex>y</tex>, такой, что <tex>D(y) = x</tex>. <br> Если такого <tex>y</tex> не существует, тогда <tex>K_D(x) = +\infty</tex>.
 
}}
 
}}
 +
 
===Примеры===
 
===Примеры===
 
* <tex>D(x) = x</tex>, тогда <tex>K_D(x) = |x|</tex>  
 
* <tex>D(x) = x</tex>, тогда <tex>K_D(x) = |x|</tex>  
Строка 29: Строка 30:
 
{{Определение
 
{{Определение
 
|definition=
 
|definition=
Будем говорить, что декомпрессор <tex>D_1</tex> '''лучше''', чем декомпрессор <tex>D_2</tex>, если <tex>\exists c:\forall x \in \{0, 1\}^*\ K_{D_1}(x) \leqslant K_{D_2}(x) + c</tex>.
+
Будем говорить, что декомпрессор <tex>D_1</tex> не хуже, чем декомпрессор <tex>D_2</tex>, если <tex>\exists c > 0:\forall x \in \{0, 1\}^*\ K_{D_1}(x) \leqslant K_{D_2}(x) + c</tex>.
 
}}
 
}}
  
 
{{Теорема
 
{{Теорема
|statement = Существует оптимальный декомпрессор <tex>U</tex>, который лучше всех остальных.
+
|statement = Существует '''оптимальный декомпрессор''' (англ. ''optimal decompressor'') <tex>U</tex>, который не хуже всех остальных.
|proof = Пусть <tex>p</tex> {{---}} некоторая строка, <tex>|p| = n</tex>. Обозначим за <tex>\hat{p}</tex> строку <tex>p_1 p_1 p_2 p_2 ... p_n p_n 0 1</tex> (мы удвоили каждый бит строки <tex>p</tex> и добавили в конце <tex>01</tex>).<br>
+
|proof = Пусть <tex>p</tex> {{---}} некоторая строка, <tex>|p| = n</tex>. Обозначим за <tex>\hat{p}</tex> строку <tex>p_1 p_1 p_2 p_2 \dots p_n p_n 0 1</tex> (мы удвоили каждый бит строки <tex>p</tex> и добавили в конце <tex>01</tex>).<br>
 
Оптимальный декомпрессор будет работать следующим образом: <tex>U(\hat{p}x) = \langle p \rangle(x)</tex>, т.е. он интерпретирует <tex>p</tex> как программу, а <tex>x</tex> как входные данные и запускает <tex>p</tex> на входе <tex>x</tex>.
 
Оптимальный декомпрессор будет работать следующим образом: <tex>U(\hat{p}x) = \langle p \rangle(x)</tex>, т.е. он интерпретирует <tex>p</tex> как программу, а <tex>x</tex> как входные данные и запускает <tex>p</tex> на входе <tex>x</tex>.
Покажем, что такой декомпрессор будет лучше любого другого. <br> Пусть <tex>D</tex> {{---}} другой декомпрессор. По определению <tex>D</tex> {{---}} это алгоритм, значит есть программа, которая исполняет <tex>D</tex>. <br>
+
Покажем, что такой декомпрессор будет не хуже любого другого. <br> Пусть <tex>D</tex> {{---}} другой декомпрессор. По определению <tex>D</tex> {{---}} это алгоритм, значит есть программа, которая исполняет <tex>D</tex>. <br>
 
<tex>p</tex> {{---}} номер алгоритма <tex>D,\ p = \#D</tex>. Тогда:<br>
 
<tex>p</tex> {{---}} номер алгоритма <tex>D,\ p = \#D</tex>. Тогда:<br>
 
<tex>K_U(x) \leqslant K_D(x) + 2|p| + 2</tex>, т.к. <tex>K_D(x)</tex> достигается на <tex>D(y) = U(\hat{p}y) = x</tex>, т.е. для этого <tex>y</tex> есть строка <tex>\hat{p}y</tex>, которая даёт тот же самый результат и имеет длину не больше, чем на <tex>2|p| + 2</tex>. <br>
 
<tex>K_U(x) \leqslant K_D(x) + 2|p| + 2</tex>, т.к. <tex>K_D(x)</tex> достигается на <tex>D(y) = U(\hat{p}y) = x</tex>, т.е. для этого <tex>y</tex> есть строка <tex>\hat{p}y</tex>, которая даёт тот же самый результат и имеет длину не больше, чем на <tex>2|p| + 2</tex>. <br>
Строка 56: Строка 57:
 
</tex>
 
</tex>
 
}}
 
}}
 +
 
==Свойства==
 
==Свойства==
 
===Тривиальные свойства===
 
===Тривиальные свойства===
 
* <tex>KS(x) \leqslant |x| + c</tex>
 
* <tex>KS(x) \leqslant |x| + c</tex>
* <tex>KS(x,y) \leqslant KS(x) + KS(y) + 2\lceil log_2 KS(x) \rceil + 2</tex>  
+
* <tex>KS(x,y) \leqslant KS(x) + KS(y) + 2\lceil \log_2 KS(x) \rceil + 2</tex>  
 
* Если <tex>A</tex> {{---}} алгоритм, то <tex>KS(A(x)) \leqslant KS(x) + c_A</tex> <br> (<tex>A(x)</tex> запишем как пару {{---}} информация об алгоритме <tex>A</tex> и информация о строке <tex>x</tex>, по предыдущему пункту нам нужно закодировать только сложность первого аргумента, что есть константа)
 
* Если <tex>A</tex> {{---}} алгоритм, то <tex>KS(A(x)) \leqslant KS(x) + c_A</tex> <br> (<tex>A(x)</tex> запишем как пару {{---}} информация об алгоритме <tex>A</tex> и информация о строке <tex>x</tex>, по предыдущему пункту нам нужно закодировать только сложность первого аргумента, что есть константа)
* '''Принцип несжимаемости:''' <tex>\exists x \in \{0,1\}^n : KS(x) \geqslant n</tex> <br> (Какой бы у нас ни был архиватор, он не может все строки фиксированной длины делать меньше. Строк длины меньшей, чем <tex>n</tex> {{---}} <tex>(2^n-1)</tex>, мы не сможем деархивировать)
+
* '''Принцип несжимаемости:''' <tex>\exists x \in \{0,1\}^n : KS(x) \geqslant n</tex> <br> (Какой бы у нас ни был компрессор, он не может все строки фиксированной длины делать меньше. Строк длины меньшей, чем <tex>n</tex> {{---}} <tex>(2^n-1)</tex>, мы не сможем декомпрессировать)
 
* <tex>KS</tex> {{---}} невычислимая функция.
 
* <tex>KS</tex> {{---}} невычислимая функция.
  
 
Докажем последнее свойство:
 
Докажем последнее свойство:
 
===Невычислимость===
 
===Невычислимость===
{{Лемма
+
{{Утверждение
 +
|about=Лемма
 
|statement=
 
|statement=
Если <tex>f:\{0,1\}^* \rightarrow  N</tex> {{---}} вычислимая функция, такая, что <tex>\forall x : f(x) \leqslant KS(x)</tex>, тогда <tex>f = O(1)</tex>.
+
Если <tex>f:\{0,1\}^* \rightarrow  N</tex> {{---}} [[Вычислимые функции|вычислимая функция]], такая, что <tex>\forall x : f(x) \leqslant KS(x)</tex>, тогда <tex>f = O(1)</tex>.
 
|proof=
 
|proof=
 
Пусть <tex>A(n) = \arg\min \limits_{x} f(x) \geqslant n</tex>, где <tex>n \in N</tex>, тогда <tex>A(n)</tex> {{---}} вычислимая (т.к <tex>f(x)</tex> {{---}} вычислима и ограничена), всюду определенная функция. <br>
 
Пусть <tex>A(n) = \arg\min \limits_{x} f(x) \geqslant n</tex>, где <tex>n \in N</tex>, тогда <tex>A(n)</tex> {{---}} вычислимая (т.к <tex>f(x)</tex> {{---}} вычислима и ограничена), всюду определенная функция. <br>
По свойству невозрастания <tex>KS(x)</tex> при алгоритмических преобразованиях, <tex>KS(A(n)) \leqslant KS(n) + c_1 \leqslant log_2 n + c_2</tex>. <br> Вспомним, что <tex>f(x) \leqslant KS(x)</tex>, следовательно <tex>KS(A(n)) \geqslant f(A(n)) \geqslant n</tex>. <br> Отсюда: <tex>\forall n : log_2 n + c_2 \geqslant n</tex>, но ясно, что при больших <tex>n</tex> это неравенство не выполняется. Противоречие.
+
По свойству невозрастания <tex>KS(x)</tex> при алгоритмических преобразованиях, <tex>KS(A(n)) \leqslant KS(n) + c_1 \leqslant \log_2 n + c_2</tex>. <br> Вспомним, что <tex>f(x) \leqslant KS(x)</tex>, следовательно <tex>KS(A(n)) \geqslant f(A(n)) \geqslant n</tex>. <br> Отсюда: <tex>\forall n : \log_2 n + c_2 \geqslant n</tex>, но ясно, что при больших <tex>n</tex> это неравенство не выполняется. Противоречие.
 
}}
 
}}
 
<hr>
 
<hr>
Строка 80: Строка 83:
 
|statement=
 
|statement=
 
<tex>KS(x)</tex> невычислима.
 
<tex>KS(x)</tex> невычислима.
|proof=
 
Пусть <tex>KS(x)</tex> вычислима. Возьмем вместо <tex>f(x)\  KS(x)</tex>. Очевидно, что <tex>KS(x) \leqslant KS(x)</tex>, но из принципа несжимаемости ясно, что <tex>KS(x)</tex> неограничена. Противоречие. Следовательно, <tex>KS(x)</tex> невычислима.
 
 
}}
 
}}
 +
 +
Пусть <tex>KS(x)</tex> вычислима. Возьмем вместо <tex>f(x)\  KS(x)</tex>. Очевидно, что <tex>\forall x : f(x) \leqslant KS(x)</tex>, но из принципа несжимаемости ясно, что <tex>KS(x)</tex> неограничена. Противоречие. Следовательно, <tex>KS(x)</tex> невычислима.
 +
 +
<tex> \forall x > x_0: K(x) > f(x)</tex>, если только <tex>f \leqslant const </tex> или <tex> f </tex> {{---}} невычислима.
 +
 +
====Альтернативное доказательство с использованием теоремы о рекурсии====
 +
Функция <tex> K(x) </tex> {{---}} это минимальная длина программы <tex> p : p(\varepsilon) = x </tex>.
 +
Допустим, что <tex> K </tex> вычислима, тогда напишем такую программу:
 +
<code>
 +
  <tex>p(\varepsilon){:}</tex>
 +
    '''foreach''' <tex>x\in ~ \Sigma^* </tex> <span style="color:Green">//перебираем слова по возрастанию длины</span>
 +
      '''if''' <tex> K(x) > |p|</tex> <span style="color:Green">//теорема о рекурсии используется здесь</span>
 +
        '''return'''<tex>(x)</tex>   
 +
</code>
 +
 +
Длина этой программы меньше длины минимальной программы, которая возвращает <tex>x</tex> на пустом входе. Поэтому возникает противоречие.  Следовательно <tex> K </tex> невычислима.
  
 
==Применение==
 
==Применение==
 
===Альтернативное доказательство теоремы Гёделя о неполноте===
 
===Альтернативное доказательство теоремы Гёделя о неполноте===
[http://ru.wikipedia.org/wiki/%D0%A5%D0%B0%D0%B9%D1%82%D0%B8%D0%BD,_%D0%93%D1%80%D0%B5%D0%B3%D0%BE%D1%80%D0%B8 Г. Хайтин] заметил следующее:
+
Г. Хайтин<ref name=chaitin/> заметил следующее:
 
{{Утверждение
 
{{Утверждение
 
|statement= В данной фиксированной системе вывода существует недоказуемое утверждение вида <tex>KS(x) \geqslant n</tex>
 
|statement= В данной фиксированной системе вывода существует недоказуемое утверждение вида <tex>KS(x) \geqslant n</tex>
Строка 100: Строка 117:
 
|statement= Простых чисел бесконечно много.
 
|statement= Простых чисел бесконечно много.
 
|proof=
 
|proof=
Предположим, что простых чисел конечное число. Тогда любое число <tex>n = {p_1}^{\alpha_1}{p_2}^{\alpha_2}\dots{p_k}^{\alpha_k}</tex>, где <tex>k</tex> {{---}} это некоторая константа. Возьмём <tex>n</tex> наибольшей колмогоровской сложности. Тогда <tex>KS(n) \geqslant log_2 n</tex>, но также <tex>KS(n) \leqslant 2 k log_2 log_2 n + c</tex>, т.к. <tex>\alpha_i \leqslant log_2 n</tex>. Но это неравенство не будет выполняться на достаточно больших <tex>n</tex>, противоречие.  
+
Предположим, что простых чисел конечное число. Тогда любое число <tex>n = {p_1}^{\alpha_1}{p_2}^{\alpha_2}\dots{p_k}^{\alpha_k}</tex>, где <tex>k</tex> {{---}} это некоторая константа. Возьмём <tex>n</tex> наибольшей колмогоровской сложности. Тогда <tex>KS(n) \geqslant \log_2 n</tex>, но также <tex>KS(n) \leqslant 2 k \log_2 \log_2 n + c</tex>, т.к. <tex>\alpha_i \leqslant \log_2 n</tex>. Но это неравенство не будет выполняться на достаточно больших <tex>n</tex>, противоречие.  
 
}}
 
}}
  
== Источники ==
+
== См. также ==
 +
* [[Busy beaver]]
 +
 
 +
== Примечания ==
 +
<references>
 +
<ref name=chaitin> [https://ru.wikipedia.org/wiki/%D0%A5%D0%B0%D0%B9%D1%82%D0%B8%D0%BD,_%D0%93%D1%80%D0%B5%D0%B3%D0%BE%D1%80%D0%B8 Грегори Джон Хайтин] {{---}} аргентино-американский математик и информатик, внёс вклад в метаматематику, совместно с Андреем Колмогоровым считается основателем алгоритмической теории информации. </ref>
 +
</references>
 +
 
 +
== Источники информации ==
 
* [https://www.lektorium.tv/lecture/13494?id=13494 Лекция Дмитрия Ицыксона в CS центре]
 
* [https://www.lektorium.tv/lecture/13494?id=13494 Лекция Дмитрия Ицыксона в CS центре]
 
* [https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BB%D0%BC%D0%BE%D0%B3%D0%BE%D1%80%D0%BE%D0%B2%D1%81%D0%BA%D0%B0%D1%8F_%D1%81%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D1%8C Wikipedia — Колмогоровская сложность]
 
* [https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BB%D0%BC%D0%BE%D0%B3%D0%BE%D1%80%D0%BE%D0%B2%D1%81%D0%BA%D0%B0%D1%8F_%D1%81%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D1%8C Wikipedia — Колмогоровская сложность]
 
  
 
[[Категория: Теория формальных языков]]
 
[[Категория: Теория формальных языков]]
 
[[Категория: Теория вычислимости]]
 
[[Категория: Теория вычислимости]]

Текущая версия на 19:26, 4 сентября 2022

Колмогоровскую сложность (англ. Kolmogorov complexity) можно рассматривать как способ измерения количества информации в строке.

Но как понять, какое количество информации содержит в себе строка? Один из классических способов — это подсчет количества битов (число, пропорциональное длине строки). Рассмотрим следующий пример:

00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Понятно, что эту строку можно описать более компактно на естественном языке, "128 нулей", всего 9 символов.

Можем дать следующее определение. Количество информации, которое несет строка — это размер файла, полученного сжатием строки каким-то конкретным компрессором (например, LZW). Но мы по-прежнему можем придумать строку, которая явно несет в себе мало информации, но которую компрессор тем не менее не сожмет.

Еще более сильное определение. Количество информации, которое несет строка — это размер файла, сжатого максимальным образом, самым лучшим компрессором. Но тогда встает вопрос, почему такой компрессор существует. На самом деле он есть, и в некотором смысле колмогоровская сложность строки — это размер наименьшей программы, которая печатает эту строку.

Определения

Декомпрессор

Определение:
Назовём декомпрессором (англ. decompressor) D:{0,1}[{0,1} алгоритм, восстанавливающий разжатый текст из сжатого.

Примечание: для простоты мы будем рассматривать бинарный алфавит, но все утверждения мы можем обобщить на строки произвольного алфавита.

Относительно каждого декомпрессора мы можем определить понятие сложности строки:

Определение:
Пусть x{0,1}, тогда назовем колмогоровской сложностью строки KD(x)=miny {|y| | D(y)=x}, размер минимальной строки y, такой, что D(y)=x.
Если такого y не существует, тогда KD(x)=+.


Примеры

  • D(x)=x, тогда KD(x)=|x|
  • D(x)=xx, тогда KD(0000)=2,KD(01)=+
Определение:
Будем говорить, что декомпрессор D1 не хуже, чем декомпрессор D2, если c>0:x{0,1} KD1(x)KD2(x)+c.


Теорема:
Существует оптимальный декомпрессор (англ. optimal decompressor) U, который не хуже всех остальных.
Доказательство:

Пусть p — некоторая строка, |p|=n. Обозначим за ˆp строку p1p1p2p2pnpn01 (мы удвоили каждый бит строки p и добавили в конце 01).
Оптимальный декомпрессор будет работать следующим образом: U(ˆpx)=p(x), т.е. он интерпретирует p как программу, а x как входные данные и запускает p на входе x. Покажем, что такой декомпрессор будет не хуже любого другого.
Пусть D — другой декомпрессор. По определению D — это алгоритм, значит есть программа, которая исполняет D.
p — номер алгоритма D, p=#D. Тогда:
KU(x)KD(x)+2|p|+2, т.к. KD(x) достигается на D(y)=U(ˆpy)=x, т.е. для этого y есть строка ˆpy, которая даёт тот же самый результат и имеет длину не больше, чем на 2|p|+2.
Нетрудно заметить, что 2|p|+2 зависит только от D, но никак не зависит от x, т.е. является константой.

Следовательно, U — оптимальный декомпрессор.
Определение:
Пусть D — это оптимальный декомпрессор, тогда колмогоровская сложность KS(x)=KD(x).
Утверждение:
Очевидно, что если D1 и D2 — оптимальные декомпрессоры, то c1,c2:x:{KD1(x)KD2(x)+c1KD2(x)KD1(x)+c2

Свойства

Тривиальные свойства

  • KS(x)|x|+c
  • KS(x,y)KS(x)+KS(y)+2log2KS(x)+2
  • Если A — алгоритм, то KS(A(x))KS(x)+cA
    (A(x) запишем как пару — информация об алгоритме A и информация о строке x, по предыдущему пункту нам нужно закодировать только сложность первого аргумента, что есть константа)
  • Принцип несжимаемости: x{0,1}n:KS(x)n
    (Какой бы у нас ни был компрессор, он не может все строки фиксированной длины делать меньше. Строк длины меньшей, чем n(2n1), мы не сможем декомпрессировать)
  • KS — невычислимая функция.

Докажем последнее свойство:

Невычислимость

Утверждение (Лемма):
Если f:{0,1}Nвычислимая функция, такая, что x:f(x)KS(x), тогда f=O(1).

Пусть A(n)=argminxf(x)n, где nN, тогда A(n) — вычислимая (т.к f(x) — вычислима и ограничена), всюду определенная функция.

По свойству невозрастания KS(x) при алгоритмических преобразованиях, KS(A(n))KS(n)+c1log2n+c2.
Вспомним, что f(x)KS(x), следовательно KS(A(n))f(A(n))n.
Отсюда: n:log2n+c2n, но ясно, что при больших n это неравенство не выполняется. Противоречие.

Примечание: если функция f(x) определена только на M{0,1}, то лемма остается в силе с единственным отличием, что x пробегает все значения из M в порядке перечисления.

Утверждение (следствие из леммы):
KS(x) невычислима.

Пусть KS(x) вычислима. Возьмем вместо f(x) KS(x). Очевидно, что x:f(x)KS(x), но из принципа несжимаемости ясно, что KS(x) неограничена. Противоречие. Следовательно, KS(x) невычислима.

x>x0:K(x)>f(x), если только fconst или f — невычислима.

Альтернативное доказательство с использованием теоремы о рекурсии

Функция K(x) — это минимальная длина программы p:p(ε)=x. Допустим, что K вычислима, тогда напишем такую программу:

 [math]p(\varepsilon){:}[/math]
   foreach [math]x\in ~ \Sigma^* [/math] //перебираем слова по возрастанию длины
     if [math] K(x) \gt  |p|[/math] //теорема о рекурсии используется здесь
       return[math](x)[/math]     

Длина этой программы меньше длины минимальной программы, которая возвращает x на пустом входе. Поэтому возникает противоречие. Следовательно K невычислима.

Применение

Альтернативное доказательство теоремы Гёделя о неполноте

Г. Хайтин[1] заметил следующее:

Утверждение:
В данной фиксированной системе вывода существует недоказуемое утверждение вида KS(x)n

Выпишем множество пар {(x,n)|  утверждение KS(x)n доказуемо }. Возможны два варианта:

  • Все nn0. Это означает, что для всех строк будет доказуемо только KS(x)n0. Но т.к. мы знаем, что KS(x) неограничена, то существуют истинные, но недоказуемые утверждения.
  • В этом множестве встречаются сколь угодно большие n, т.е. есть бесконечная последовательность (xi,ni), в которой ni+1>ni. Заметим, что эта последовательность задает график какой-то функции. А если график функции перечислим, то сама функция является вычислимой. Также заметим, что всегда выполняется условие KS(xi)ni, т.е. эта вычислимая функция является нижней оценкой на KS(x), а мы знаем, что такие функции обязаны быть ограниченными. Противоречие.

Заметим, что во всех множествах пар все n ограничены какой-то константой, следовательно существует огромное число истинных, но недоказуемых утверждений вида KS(x)n

Доказательство бесконечности простых чисел

Утверждение:
Простых чисел бесконечно много.
Предположим, что простых чисел конечное число. Тогда любое число n=p1α1p2α2pkαk, где k — это некоторая константа. Возьмём n наибольшей колмогоровской сложности. Тогда KS(n)log2n, но также KS(n)2klog2log2n+c, т.к. αilog2n. Но это неравенство не будет выполняться на достаточно больших n, противоречие.

См. также

Примечания

  1. Перейти Грегори Джон Хайтин — аргентино-американский математик и информатик, внёс вклад в метаматематику, совместно с Андреем Колмогоровым считается основателем алгоритмической теории информации.

Источники информации