ГЕДЕЛЬ, ЭШЕР, БАХ: эта бесконечная гирлянда.
Самовоспроизводящаяся программа.
Понятие квайнирования и его использование для получения автореференции уже было объяснено в Диалоге, так что мы здесь не будем на нем останавливаться. Давайте лучше посмотрим, как компьютер может воспользоваться той же самой техникой, чтобы воспроизвести самого себя. Следующее самовоспроизводящее высказывание написано на языке, подобном Блупу, и основано на следовании за фразой ее собственной цитаты (поскольку порядок здесь обратный квайнированию, я назову эту операцию ENIUQ — QUINE, записанное наоборот):
ОПРЕДЕЛИТЬ ПРОЦЕДУРУ «ENIUQ» [ШАБЛОН]. НАПЕЧАТАТЬ.
[ШАБЛОН, ЛЕВАЯ СКОБКА, КАВЫЧКА, ШАБЛОН, КАВЫЧКА,
ПРАВАЯ СКОБКА, ТОЧКА].
ENIUQ.
['ОПРЕДЕЛИТЬ ПРОЦЕДУРУ «ENIUQ» [ШАБЛОН].
НАПЕЧАТАТЬ [ШАБЛОН, ЛЕВАЯ СКОБКА, КАВЫЧКА, ШАБЛОН,
КАВЫЧКА, ПРАВАЯ СКОБКА, ТОЧКА].
ENIUQ'].
ENIUQ — это процедура, определенная в двух первых строчках, и вводные данные этой процедуры называются «ШАБЛОНОМ». Когда процедура вызывается, значением ШАБЛОНА является некая строчка типографских символов. Результатом ENIUQ является операция печатания, при которой ШАБЛОН напечатан дважды: первый раз просто так, а второй раз — заключенный в кавычки и квадратные скобки и снабженный точкой в конце. Например, если бы ШАБЛОН содержал ПОВТОРЕНИЕ-МАТЬ-УЧЕНИЯ, то после операции ENIUQ у нас получилось бы:
ПОВТОРЕНИЕ-МАТЬ-УЧЕНИЯ [«ПОВТОРЕНИЕ-МАТЬ-УЧЕНИЯ»].
В последних четырех строчках вышеприведенной программы мы вызывали процедуру ENIUQ с определенным значением ШАБЛОНА, а именно, длинная строчка в кавычках: ОПРЕДЕЛИТЬ...ENIUQ. Это значение было тщательно подобрано; оно состоит из определения самой процедуры ENIUQ, за которым следует слово ENIUQ. Результатом является напечатанная еще раз программа — или, если хотите, точная копия программы. Это напоминает Квайнову версию парадокса Эпименида:
«Предваренное цитатой самого себя, порождает ложь».
Предваренное цитатой самого себя, порождает ложь.
Очень важно заметить, что строчка символов, появляющаяся в кавычках в последних трех строках вышеприведенной программы (то есть, значение ШАБЛОНА), никогда не интерпретируется как набор команд То. что здесь она выглядит, как команда, получилось чисто случайно. Как мы сказали, это могло быть ПОВТОРЕНИЕ-МАТЬ-УЧЕНИЯ или любая другая строчка символов. Красота этой схемы — в том, что когда та же самая строчка появляется в первых двух строках этой программы, она интерпретируется именно как программа (поскольку там она не заключена в кавычки). Таким образом, в этой программе одна и та же строчка играет две роли один раз она функционирует в качестве программы, а другой раз — в качестве вводных данных В этом и заключается секрет самовоспроизводящихся программ и, как мы скоро увидим самовоспроизводящихся молекул. В дальнейшем я буду иногда называть самовоспроизводящиеся объекты авто-реп (сокращение от «авторепродукция»), а самоупоминающие объекты — авто-реф (сокращение от «автореференция»).
Предыдущая программа — изящный пример самовоспроизводящейся программы, написанной на языке, не предназначенном для создания подобных программ. Поэтому нам пришлось использовать понятия и операции являющиеся частью языка, такие, как слова «КАВЫЧКИ» и команда «НАПЕЧАТАТЬ». Но представьте себе, что в нашем распоряжении — язык, специально созданный для написания авто-репов, тогда программы стали бы намного короче. Операция ENIUQ-ирования уже содержалась бы в таком языке и, следовательно, не нуждалась бы в определении (такой операцией в предыдущей программе было НАПЕЧАТАТЬ). Тогда миниатюрным авто-репом было бы:
ENIUQ ['ENIUQ'].
Это очень похоже на Черепаший вариант Квайновой версии парадокса Эпименида, где мы предполагаем, что глагол «квайнировать» заранее известен:
«Предваренное цитатой самого себя порождает ложь,».
Предваренное цитатой самого себя, порождает ложь.
Но авто-реф может быть и короче. Например, можно представить себе компьютерный язык, программы которого должны быть сначала скопированы и только затем выполнены, если их первым символом является астериск. Тогда программа, состоящая из одного только астериска уже была бы авто-репом! Вы можете возразить, что это глупо, поскольку целиком зависит от придуманного условия. Такое возражение вторило бы моему предыдущему замечанию о том, что использование фразы «это высказывание» — почти жульничество, потому что оно слишком зависит от процессора и недостаточно — от явных указаний для достижения самовоспроизводства. Использование астериска в качестве примера авто-репа подобно использованию слова «я» как примера автореференции в обоих случаях глубинные аспекты проблемы оказываются скрытыми.
Это напоминает другой интересный тип автореференции, получаемый при помощи ксерокса. Можно сказать, что всякий письменный документ является авто-репом, потому что он может быть воспроизведен путем ксерокопирования. Однако это в некотором смысле противоречит нашему понятию о самовоспроизводстве лист бумаги в данном случае совершенно пассивен и не управляет собственным воспроизводством. В этом случае, все опять зависит от процессора. Прежде, чем мы сможем назвать некий объект авто-репом, мы должны быть уверены в том, что в этом объекте содержатся максимально ясные инструкции по его самовоспроизводству.
Разумеется, ясность и подробность указаний всегда относительны, однако существует некая интуитивная граница, по одну сторону которой мы видим настоящее самовоспроизводство, а по другую — копирование при помощи негибкого и автономного копирующего механизма.