Шрифт:
Интервал:
Закладка:
Все логические элементы выполняют операции трех базовых типов: НЕ, И и ИЛИ. Конвей сконструировал также состоящие из ружей и пожирателей конфигурации, имитирующие логические элементы для операций И и ИЛИ. Он показал, что можно сделать так, чтобы потоки глайдеров меняли направление движения, что моделировало изгибы проводников. Конвей также продемонстрировал, как сделать потоки глайдеров разреженными, чтобы два потока могли пересечься, избежав при этом столкновения глайдеров, что изображало пересечение проводников. Кроме того, он показал, как сделать регистр памяти из блоков. Каждый блок представляет собой какое-то число в зависимости от его расстояния от определенной точки. Глайдеры, которые врезаются в блок, перемещают его ближе к этой точке или дальше от нее, меняя значение блока. Это подтвердило правильность выдвинутой Конвеем гипотезы: построив в игре «Жизнь» проводники, логические элементы и регистр памяти, он доказал, что игра, ставшая его математическим хобби, теоретически способна (при наличии достаточно большой сетки) имитировать любой существующий в нашем мире компьютер.
Получив приведенное выше доказательство, Джон Конвей потерял интерес к игре «Жизнь». (В 1986 году он переехал в Принстон, чтобы возглавить кафедру математики вместо Джона фон Неймана.) Однако многие ее поклонники были настолько ею увлечены, что у них появилась зависимость, которая со временем лишь усиливалась. Международное сообщество любителей игры «Жизнь» насчитывает около сотни членов; к их числу относился и Пол Чэпмен, решивший на рубеже столетий построить компьютер в игре «Жизнь». «Знать, что что-то можно сделать, и сделать это — совершенно разные вещи», — заявил он.
Логический элемент отрицания содержит ружье, которое выстреливает в глайдеры, движущиеся перпендикулярно входящему потоку
Подобно многим любителям игры «Жизнь», Пол не был научным сотрудником. В 1970-х он изучал математику в Кембридже (и слушал лекции Конвея), а затем стал консультантом по информационным технологиям. В настоящее время Пол живет в центре Лондона, неподалеку от ресторана, в котором мы с ним встретились. Он предпочел столик на улице, несмотря на плохую погоду, поскольку ему не нравился запрет на курение внутри заведения. Когда мы разговаривали, Пол скручивал собственные сигареты. «Я люблю “Жизнь” потому, что она полна сюрпризов, — признался он. — Каждый раз, когда вы ищете способ сделать что-то лучше, вы найдете десятки таких способов».
У обычного компьютера есть аппаратное и программное обеспечение; точно так же и созданная в игре «Жизнь» конфигурация, имитирующая работу ПК, имела «железо» и «программы». Первое моделировало кабели машины, а второе — программу, которую она должна читать. В своем прототипе компьютера в игре «Жизнь» Пол использовал не созданную Конвеем сеть из ружей, глайдеров и пожирателей, а более современную и эффективную технологию, основанную на исходном шаблоне из семи клеток под названием «Гершель». Его конфигурация состояла из нескольких миллионов живых клеток и программы, содержащей инструкции по поводу того, как вычислить сумму 1 + 2. «Для поиска суммы 2 + 3 понадобилось бы слишком много времени», — объяснил Пол. Конфигурация начиналась с космического корабля, поражающего устойчивую фигуру, которая порождала сигнал о столкновении с разными элементами, а те, в свою очередь, порождали другие сигналы, и маршрут перемещения сигналов по всей системе напоминал гигантскую игру в одну из разновидностей бильярда. В конце концов блок в регистре вывода показывал число 3. «Я был в восторге, — сказал Пол. — Если я могу сложить один и два, это говорит о том, что эта же машина может рассчитать миллионную цифру числа π, управлять системой Windows или, если ввести правильные параметры, смоделировать жизненный цикл звезды!»
Безусловно, компьютер, построенный Полом в игре «Жизнь», был неприменим на практике для выполнения всех этих задач. Но он вернул «Жизнь» к ее истокам. Джон фон Нейман выдвинул идею клеточного автомата во время изучения процесса самовоспроизведения. Конфигурация Пола открыла заманчивую возможность создания самовоспроизводящихся сущностей в игре «Жизнь».
На первый взгляд фигуры, эволюционирующие на решетке игры «Жизнь», кажутся живыми, так как по мере смены поколений они трансформируются и меняют направление. Однако для того, чтобы некий объект действительно был живым, он должен обладать способностью к самовоспроизведению. Но что это такое? Глайдер, например, воспроизводит себя достаточно просто. Это состоящая из пяти клеток фигура, которая каждые четыре поколения возвращается в исходную форму, сместившись на одну клетку вниз и одну в сторону. Фон Нейман хотел знать, как машина может построить точную копию самой себя. Для того чтобы это понять, ему предстояло решить математическую головоломку, поскольку механическая сторона процесса самовоспроизведения содержит один логический парадокс.
Мы с вами уже говорили о том, что компьютеры состоят из аппаратного и программного обеспечения. Давайте назовем аппаратное обеспечение «конструктором», а программу, которую мы вводим в конструктор, чтобы он построил копию себя, — «макетом». Мы рассчитываем на то, что после ввода макета конструктор воспроизведет новый конструктор вместе с новым макетом, по сути, создав копии двух исходных элементов. Но здесь возникает вопрос: содержит ли макет инструкции относительно создания нового макета? Если да, тогда они должны также содержать инструкции по поводу создания нового макета, который, в свою очередь, должен содержать инструкции по поводу того, как создать инструкции в отношении построения нового макета — и так далее до бесконечности. В итоге мы получаем бесконечную регрессию инструкций, содержащихся в данном макете, что недопустимо, поскольку макет должен быть конечным. С другой стороны, если макет не включает никакую информацию о себе, машина не сможет себя полностью воссоздать, поскольку в новой машине нет макета. Прежде чем думать о технической стороне дела, фон Нейману следовало разобраться с математикой.
В итоге фон Нейман пришел к такому выводу: для того чтобы машина могла воспроизвести себя, необходимо ввести в систему новый элемент, который бы воссоздавал макет, другими словами — устройство для копирования макета. Таким образом, когда конструктор считывает макет, он строит новую машину, совершенную во всех отношениях, кроме одного — в ней нет макета. На последнем этапе устройство копирования должно создать копию макета и отправить ее в новую машину. Следовательно, самовоспроизводящаяся машина фон Неймана использует макет двумя разными способами: конструктор читает его как набор инструкций, а копировальное устройство создает его копию. Только применение макета один раз в качестве программы, а другой — в качестве объекта позволило решить чрезвычайно трудную проблему бесконечной регрессии.