Рассмотрим алгоритмически-лингвистическое моделирование процесса жизнь — сон (здесь под жизнью условно понимаем явь). Как уже неоднократно подчеркивалось, жизнь и сон в своей аналогии (особенно в творческом восприятии) заходят так далеко, что их следует считать проявлениями одной и той же алгоритмической процедуры. Эта процедура рекурсивно вызывает саму себя, и только значения локальных переменных внутри вызванной процедуры определяют периоды бытия (жизнь или сон). Локальная переменная — это переменная величина, возникающая каждый раз при вызове процедуры, и только операторы, выполняемые внутри данной вызванной процедуры, могут менять ее значения. С исчезновением вызванной процедуры исчезает и соответствующая локальная переменная. Подробно с тонкостями программирования с введением локальных и глобальных переменных можно познакомиться в книге известного голландского специалиста Е. Дейкстры «Дисциплина программирования».[94] Человек служит интерпретируемой машиной для этой процедуры. Он проходит через жизнь и все свои сны. Его восприятие реальности субъективно. Поэтому следует ввести глобальную переменную, пропускаемую через все вызовы процедур, принимающую значения жизнь или сон и выражающую осознание человеком момента своего существования. Разум анализирует текущую ситуацию (значения локальной переменной) и старается с наибольшей степенью достоверности определить значение этой переменной и присвоить его глобальной переменной. Это древний защитный рефлекс. Законы изменения значений жизнь и сон достаточно сложны и определяются психикой рассматриваемого индивидуума. Но, по меньшей мере, всегда после просыпаний сознание убеждено, что наступила жизнь. С учетом сказанного выше в условном алгоритмическом изобразительном языке программа, моделирующая жизнь — сон, имеет следующий вид:
Здесь и — локальная переменная. При каждом вызове процедуры Р создается своя новая переменная под именем и, доступная внутри вызванной процедуры. С исчезновением процедуры исчезает и локальная переменная. Переменная v глобальна, она передается от процедуры к процедуре и определяет субъективное восприятие жизни и сна. Величины и и v можно было бы считать наборами переменных, соответствующих процессам жизни и сна. Только для удобства и упрощения считаем их здесь одномерными переменными. Процедура ГЕНЕРИРОВАТЬ (u) задает действия, которые выполняются при заданном значении и. Можно считать, что эта процедура генерирует текст, соответствующий рассматриваемому периоду существования. Команда вернуться означает закрытие процедуры Р. После завершения выполнения вызванной процедуры вызывающая процедура продолжит свою работу, начиная со следующей после вызова команды. Значения переменной v могут меняться процедурой ГЕНЕРИРОВАТЬ. Единственное, что всегда выполняется, — установка v на жизнь после окончания сна. В этой программе сон — особый период жизни.
Последовательность выполнения команд в программе жизнь — сон следующая:
Как видим, жизнь сменяется сном, сон жизнью — и все повторяется вновь.
Произведем следующее преобразование программы жизнь — сон: заменим везде слова жизнь на сон, а сон на жизнь. Тогда сон будет главной процедурой, периодически вызывающей жизнь. Получаем симметричную программу сон — жизнь. В ней жизнь — некоторый период, существующий внутри первого вызова сна.
Какая из программ (жизнь — сон или сон — жизнь) адекватно моделирует действительность? Об этом много рассуждали философы от античности до наших дней. Все дело только в симметричной замене имен.