Авто-реп с увеличением
Продолжая наше сравнение авто-репов с канонами, давайте теперь попытаемся найти, чему соответствует канон с увеличением. Одна возможность такова программа, содержащая пустую петлю, предназначенную единственно для замедления программы. Некий параметр указывает, как часто эта петля должна повторяться. Можно представить себе такую самовоспроизводящуюся программу, которая печатает собственные копии, но с измененным параметром, так что каждая следующая копия будет в два раза медленнее предыдущей Ни одна из этих программ не повторяется в точности, но все они явно принадлежат к одной «семье».
Это напоминает воспроизводство живых организмов Ясно, что никакой индивидуум не является точной копией своих родителей, почему же тогда производство на свет потомства называется «самовоспроизводством»? Дело в том, что между родителями и ребенком существует приблизительный изоморфизм — изоморфизм, сохраняющий информацию о виде. Таким образом, здесь воспроизводится скорее класс, чем пример. То же самое происходит и на рекурсивном графике G в главе V, хотя соответствие между «магнитными бабочками» разных размеров и форм весьма приблизительно, и ни одна «бабочка» не повторяет другую в точности, все они принадлежат к одному и тому же «виду», и соответствие сохраняет именно эту информацию. В терминах самовоспроизводящихся программ это соответствовало бы семье программ, написанных на разных «диалектах» одного и того же компьютерного языка, любая из них может воспроизвести себя саму, но в немного измененном виде, так что результатом является диалект первоначального языка.
Кимов авто-реп
Возможно, самым хитрым примером авто-репа является следующий вместо того, чтобы написать «правильное» выражение на языке компилятора, вы печатаете одно из посланий, указывающее на ошибку в этом языке. Ваша «программа» сбивает компилятор с толку, потому что она неграмматична, поэтому компилятор печатает сообщение об ошибке. Все, что нужно для получения авто-репа, — это добиться, чтобы компилятор выдал такое же сообщение об ошибке, как то, что вы ввели первоначально. Этот тип самовоспроизводства, придуманный Скоттом Кимом, исследует такие аспекты системы, которые обычно остаются без внимания. Хотя это кажется шуткой, на самом деле нечто подобное может существовать в сложных системах, где авто-репы соперничают друг с другом в борьбе за выживание, вскоре мы рассмотрим подобные случаи.
Что такое оригинал?
Кроме вопроса о том, что такое копия, существует еще один глубокий философский вопрос, касающийся авто-репов. Этот вопрос — обратная сторона монеты «Что такое оригинал?» Лучше всего пояснить это на примерах:
(1) программа которая, будучи интерпретирована неким интерпретатором на некоем компьютере, печатает саму себя,
(2) программа, которая, будучи интерпретирована неким интерпретатором на некоем компьютере, печатает саму себя вместе с полной копией интерпретатора (который, в конце концов, тоже является программой),
(3) программа, которая, будучи интерпретирована неким интерпретатором на некоем компьютере, печатает не только саму себя вместе с полной копией интерпретатора, но также приводит в действие процесс сборки второго компьютера, идентичного первому.
Ясно, что в (1) программа является авто-репом. Но что является авто-репом в (3) — сама программа, комбинация программы с интерпретатором или система, состоящая из программы, интерпретатора и процессора?
Понятно, что здесь самовоспроизводство включает нечто большее, чем просто распечатка самой программы. Оставшаяся часть этой главы посвящена, в основном, анализу авто-репов, в которых вводные данные, программа, интерпретатор и процессор переплетены между собой и в которых самовоспроизводство включает воспроизведение всей этой системы.
Типогенетика
Сейчас мы обратимся к одной из самых интересных и глубоких тем двадцатого столетия: науке о «молекулярной логике живых организмов», как образно выразился Альберт Ленингер. Действительно, это и есть логика — но более сложного и прекрасного типа, чем тот, который способен вообразить человеческий разум. Мы подойдем к обсуждению этого по-новому, воспользовавшись игрой, которую я для этого придумал. В эту игру можно играть в одиночку; она называется «типогенетика» (сокращенное «типографская генетика»). В типогенетике я попытался выразить некоторые идеи молекулярной генетики в типографской системе, которая на первый взгляд кажется очень похожей на формальные системы типа MIU. Разумеется, типогенетика — система очень упрощенная и используется, в основном, для дидактических целей.
Должен предупредить читателя, что область молекулярной биологии — это область, в которой взаимодействуют явления на нескольких уровнях, в то время как типогенетика иллюстрирует только события на одном или двух уровнях. В частности, совершенно не упоминаются химические процессы, поскольку они происходят на уровне ниже того, который мы здесь обсуждаем; также не упоминаются аспекты классической (немолекулярной) генетики — они принадлежат к высшему уровню. В типогенетике я хотел дать общую идею о процессах, участвующих в знаменитой «Центральной догме молекулярной биологии», сформулированной Фрэнсисом Криком (одним из открывателей двойной спирали ДНК):
ДНК => РНК => белки
Я надеюсь, что при помощи моей схематической модели мне удастся помочь читателю почувствовать некоторые объединяющие принципы, действующие в этой области, — принципы, которые могут быть легко упущены из вида за невероятной сложностью взаимодействия событий на многих уровнях. Надеюсь, что, пожертвовав точностью, нам удастся получить некое общее понимание картины.
Цепочки, основания, энзимы
Игра в типогенетику включает типографские манипуляции последовательностями букв. У нас имеется четыре буквы:
А С G Т
Любые последовательности этих букв называются цепочками. Вот примеры цепочек:
GGGG
АТТАССА
САТСАТВАТВАТ
Иногда я буду называть буквы А С G Т основаниями, а позиции которые они занимают — подразделениями. Так, в средней цепочке есть семь подразделений в четвертом из которых находится основание А.
Цепочку можно изменять ее разными способами. Можно также производить новые цепочки копируя старые либо разрезая их на части. Некоторые операции удлиняют цепочки некоторые их укорачивают а некоторые оставляют их длину неизменной.
Обычно мы имеем дело с наборами различных операций выполняемых по порядку. Такой набор операций напоминает запрограммированную машину которая двигает цепочку вверх и вниз и изменяет ее. Такие машины называются «типографскими энзимами», или для краткости энзимами. Энзимы действуют одновременно только на одно подразделение цепочки, мы говорим, что они прикреплены к тому подразделению, на которое они в данный момент действуют.
Попытаюсь привести пример того как некоторые энзимы действуют на определенные цепочки. Каждый энзим для начала «прикрепляется» к одной определенной букве. Таким образом, существует четыре типа энзимов: те которые предпочитают А, те которые предпочитают С и так далее. Анализируя последовательность операций выполненных при помощи того или иного энзима можно определить какую букву тот предпочитает, пока однако, я буду приводить примеры, не вдаваясь в подробности. Вот пример энзима, состоящего из трех операций:
(1) Стереть подразделение к которому прикреплен энзим (и затем прикрепить его к следующему справа подразделению)
(2) Подвинуться на одно подразделение вправо
(3) Вставить Т (справа от этого подразделения)
Этот энзим оказывается «любителем» буквы А. Вот пример простой цепочки:
АСА
Что получится если наш энзим прикрепится к левому А и начнет действовать? Первый шаг стирает А так что у нас остается С. А — теперь энзим прикреплен к С. Второй шаг продвигает энзим направо, к А и третий шаг прибавляет Т на конце. У нас получилась новая цепочка — CAT.