Программируя Вселенную. Квантовый компьютер и будущее науки - Ллойд Сет
Если Вселенная действительно является квантовым компьютером, это позволяет немедленно объяснить сложность, которую мы видим вокруг. Чтобы понять, как и почему способность Вселенной выполнять вычисления, по сути, гарантирует ее нынешнюю сложность, давайте вернемся к истории Людвига Больцмана и печатающих обезьян. Как мы помним, Больцман утверждал, что сложность Вселенной возникла чисто случайно. То, что мы видим вокруг, утверждал он, – просто результат статистической флуктуации, не отличающийся от исхода длинной серии подбрасывания монетки. На первый взгляд это объяснение кажется привлекательным: в бесконечно длинной серии бросков рано или поздно выпадет любая желаемая конечная последовательность «орлов» и «решек», включая любой желаемый текст или математическое выражение, закодированное в двоичной форме. Такое случайное возникновение текстов описано в рассказе Хорхе Луиса Борхеса «Вавилонская библиотека», где описана вымышленная библиотека, содержащая все возможные тексты. История обезьян, печатающих на машинках текст «Гамлета», – один из вариантов этой версии происхождения сложности.
Легко показать, что объяснение происхождения сложности, предложенное Больцманом, ошибочно. Броски монетки почти никогда не приводят к возникновению порядка или сложности. Если сложность возникает случайным образом, то какое бы упорядоченное или сложное поведение мы ни наблюдали до сих пор, все, что произойдет потом, будет случайным. Независимо от того, до какого места «Гамлета» может дойти обезьяна, следующее нажатие клавиши, скорее всего, приведет к ошибке. Во Вселенной, где все возникает случайным образом, наш следующий вздох будет последним, ведь наши атомы немедленно распадутся в случайное состояние. (В рассказе Борхеса книга, снятая с полки наугад, содержит бессмыслицу, а шифр для каждой книги такой же длинный, как и сама книга. Вавилонская библиотека бесполезна.)
Больцман и сам понял, что его объяснение Вселенной как статистической флуктуации ошибочно, и больше не возвращался к этому вопросу. Но в идее Больцмана все же есть зерно истины. Как и в третьей главе, чтобы найти наиболее вероятное объяснение происхождению сложности, вообразим, что обезьяны не печатают текст на пишущих машинках, а вводят его в компьютеры. Компьютер затем интерпретирует эту бессмыслицу как ряд инструкций, написанных, скажем, на языке Java. Что он выдаст? Мусор на входе – мусор на выходе: скорее всего, попавший в руки обезьяны компьютер выдаст сообщение об ошибке. Но время от времени один из них, возможно, создаст что-то более интересное. Вероятность того, что обезьяна напишет любую заданную программу, быстро уменьшается с ее длиной, как и в случае «Гамлета». Но достоверно известно, что существуют короткие программы, которые дают на выходе разнообразные и интересные результаты.
Обезьяны, печатающие текст на пишущих машинках (рис. 15a), выдают бессмыслицу. Если же обезьяны будут вводить текст в компьютеры (рис. 15b), то компьютер интерпретирует эту бессмыслицу как компьютерную программу и начнет создавать сложные структуры
В начале 1960-х гг. специалисты по информатике разработали подробную теорию того, с какой вероятностью компьютер, запрограммированный случайным образом, может выдать интересные результаты. Эта теория основана на идее «алгоритмической информации».
Алгоритмическая информация
Алгоритмическая информация – это мера того, как трудно представить текст или строку битов с применением компьютера. Алгоритмическое информационное содержание текста или строки битов равно длине (в битах) самой короткой компьютерной программы, которая дает на выходе этот текст или стоку битов.
Во второй главе мы видели, что компьютерные языки позволяют придавать строкам битов тот или иной смысл. На таком языке эти строки можно интерпретировать как инструкции, побуждающие компьютер создавать те или иные выходные данные. Однако для любого желаемого выхода есть множество возможных языков, и, как правило, желаемый результат могут выдать многие компьютерные программы. Например, существует много разных программ, которые на выходе дают первый миллион цифр числа p. Важно отметить, однако, что не все эти программы одинаковой длины. Одна программа просто говорит: «Напечатать 3,1415926…» (где «…» состоит из остальных 999 992 цифр). Эта программа очень простая, но длинная. Более короткая, хотя и более сложная программа будет описывать конкретный способ для вычисления этого миллиона цифр. Например, такая программа может следовать примеру древних греков и аппроксимировать окружность в виде последовательности сторон многоугольника все меньшей длины. Такая программа для вычисления числа p может состоять всего из нескольких сотен инструкций.
Для любого желаемого набора выходных данных наиболее интересна самая короткая из программ, позволяющая получить эти данные. Для любого числа «алгоритмическое информационное содержание» определяется как длина (в битах) самой короткой компьютерной программы, позволяющей компьютеру напечатать это число. Эту самую короткую компьютерную программу можно считать самой компактной репрезентацией данного числа на данном компьютерном языке.
Алгоритмическое информационное содержание независимо друг от друга открыли в начале и середине 1960-х гг. ученый Рэй Соломонофф из Кембриджа, Массачусетс, российский математик Андрей Николаевич Колмогоров и Грегори Хайтин, которому тогда было 18 лет и который учился в Сити-колледже в Нью-Йорке. Все эти исследователи отметили, что алгоритмическое информационное содержание обеспечивает в некоторых случаях более удовлетворительное измерение информации, чем длина записи числа в битах (это еще один способ описать информационное содержание числа), потому что алгоритмическая информация учитывает присущую числу математическую регулярность, а длина в битах на это не способна.
Для большинства чисел алгоритмическое информационное содержание близко к длине числа в битах. Оно не может намного превышать длину числа, ведь любое число, например 01110110101110111011101, можно получить с помощью простейшей программы, которая говорит: «Напечатать 01110110101110111011101». Для большинства чисел алгоритмическое информационное содержание не может быть и намного короче самого числа, просто потому что коротких программ гораздо меньше, чем длинных чисел. Например, можно спросить, сколько двадцатибитных чисел могут создавать десятибитные программы. Существует 220 (то есть 1 048 576) двадцатибитных чисел, но только 1024 = 210 возможных десятибитных программ. Поэтому в самом лучшем случае десятибитные программы могут создать лишь одно из каждых 1024 двадцатибитных чисел.
Числа, которые могут быть созданы короткими программами, – это математически регулярные, правильные числа. p – одно из таких чисел, но таким является, например, и число из миллиарда единиц, которое может выдать программа, которая – в переводе на обычный язык – говорит: «Печатать 1 один миллиард раз». Но, как мы уже сказали, большинство чисел не обладают существенной математической регулярностью. Большинство чисел, по существу, являются случайными.
Самая короткая компьютерная программа, создающая число, всегда определяется для данного компьютерного языка – Java, C, Fortran, BASIC. Но ее длина не слишком сильно зависит от того, какой именно язык использован. Большинство языков могут выдать первый миллион цифр числа p с помощью всего нескольких сотен инструкций. Более того, такую программу, написанную на фортране, можно превратить в программу, написанную на Java и создающую те же самые числа, с помощью специальной программы-переводчика. Но тогда самая короткая программа на Java, позволяющая создать первый миллион цифр числа p, не будет длиннее, чем самая короткая программа на фортране плюс длина программы преобразования. Если задавать все более длинные числа, длина программы преобразования будет все меньше и меньше по сравнению с основной программой, добавляя сравнительно небольшую длину к алгоритмическому информационному содержанию.