Правила вывода.
П1.
.
П2.
.
П3.
для всех возможных контекстов
.
Правила 1-5 формализуют
термы вида
,
которые играют роль операторов
присваивания в языках программирования.
Правило 6 является аналогом правила
замены операторной переменной (
-правила
в
-исчислении).
Правило 7 оправдывает имя константы
(«распроцедуривание»). Правила 8 и 9
формализуют некоторые свойства блоков.
Правило 10 – аналог
-правила
в
-исчислении,
а правило 11 (правило подстановки) –
аналог правила
-редукции
в
-исчислении.
Правило 12 – правило рекурсивной
подстановки. Правила 13 и 14 позволяют
расширить возможности применения
большинства других правил за счет
внесения в тело блока внешних элементов.
Правило 15 конкретизирует начальную
инициализацию операторных переменных
блоков. Наконец, правило 16 позволяет
формализовать преобразование, известное
в языках программирования как «сборка
мусора». Правило вывода П1 устанавливает
рефлексивность, а правило вывода П2 –
транзитивность отношения редукции
термов. Правило вывода П3 позволяет
применять правила редукции к подтермам.
Связь с
-исчислением.
Рассмотрим
подмножество языка Falgol, из числа
элементов которого исключены символы
присваивания, блоки и рекурсивные
процедуры, т.е. атомами являются только
константа
и символы вызова значений переменных,
а в качестве элементов термов, помимо
атомов, используются только функции и
процедуры. Исчисление редукций термов
этого языка назовем
-исчислением:
Правила редукции:
;
;
;
;
.
Правила вывода.
П1.
.
П2.
.
П3.
для всех возможных контекстов
.
Напомним синтаксис
и формулировку основного исчисления
редукций
-термов:
символ переменной
–
-терм;если
–
-термы,
то
–
-терм;если
–
-терм,
то
–
-терм;других
-термов
нет.
Правила редукции:
![]()
;
.
Правила вывода.
П1.
.
П2.
.
П3.
для всех возможных контекстов
.
Определим
теперь трансляцию
-термов
в язык
-исчисления
с правилами редукции
,
и
нижеследующим образом (
-терм
будем называть
-образом
-терма
):
,
,
.
Очевидно,
что
.
Правило
замены
операторной переменной имеет место и
в том, и в другом исчислении. Рассмотрим
правило
:
![]()
![]()
![]()
Следовательно, имеет место диаграмма
.
Очевидно
и то, что если
-терм
находится в
-нормальной
форме, то
-терм
также находится в
-нормальной
форме. Таким образом, подмножество
-образов
-термов
с
-правилами
образуют систему, изоморфную
-исчислению,
со всеми вытекающими отсюда следствиями.
Некоторые практически важные расширения языка Falgol. Во-первых, рассмотрим пополнение множества атомов языка Falgol символами констант. Пусть
– множество элементарных констант
расширения, для которого определена
функция
,
задающая арность
констант. Если
,
константу
назовем объектной
(множество элементарных объектных
констант обозначим как
),
в противном случае – функциональной.
Примем соглашение, что две любые
различные объектные константы –
содержательно несравнимы, т.е.
,
в результате чего отношение содержательной
несравнимости будем определять так:
![]()
![]()
![]()
![]()
,
где
– подмножество всех термов, построенных
с применением только объектных констант
из
в качестве атомов.
Для введенных констант определим новые правила редукции:
;
.
Кроме того, можно вводить любые правила (с попарно различными левыми частями!) следующего вида
,
где
и
– терм-константа.
Такие правила формализуют аппликативные свойства функциональных констант по отношению к объектным константам.
Описанным способом можно так расширить язык Falgol, что он приблизится к реальным языкам программирования высокого уровня по своим изобразительным возможностям описания обработки базовых типов данных, а, во многом, и превзойти их, так как в языке становится возможным изменять программу средствами высокого уровня в процессе ее выполнения.
Хотя вычислительная
универсальность языка Falgol
не вызывает сомнений, не все в нем может
быть реализовано непосредственно. Так,
например, невозможно ввести по определению
предикат, распознающий терм
среди всевозможных термов вида
,
т.е. построить терм
,
такой, что
и
для
,
где
– функции выбора,
,
(очевидно, что
и
).
При этом распознавание термов
и
для любых конкретных
(
)
не вызывает затруднений. Действительно,
пусть
,
и
.
Тогда ![]()
Однако
можно без нарушения метасемантики
ввести как новый атом с новыми правилами
редукции:
,
для
.
Для обоснования
корректности такого расширения определим
взаимно-однозначное отображение
,
где

Нетрудно убедиться,
что из
следует, что
.
Рассмотрим терм
.
Теперь мы можем построить терм
,
такой, что
и
для
.
Для доказательства
положим, что
.
Большинство других
полезных с практической точки зрения
расширений может быть введено «по
определению». Например, если
,
,
,
то
,
а
,
т.е.
играет роль ссылки на переменную
,
а
и
– операций вызова и присваивания
значения переменной по ссылке. Оператор
присваивания языка Си удобно реализовать
с использованием новых атомов
,
и т.д.
Заключение. Очевидно, что представление в Falgol’е основных программных объектов известных языков программирования общего назначения, в том числе и основных структур данных, не вызывает каких-либо теоретических проблем. К сожалению, за рамками этой статьи остались многие вопросы, рассмотрение которых необходимо для того, чтобы оценить Falgol как основу построения реального процессора смешанных вычислений с внутренним языком высокого уровня. Такая работа, в основном, уже проделана: разработан машинный язык и архитектура процессора, базирующегося на оригинальном обобщенном теговом машинном представлении всех программных объектов, предложен и технически обоснован принцип ассоциативного управления работой процессора. В настоящее время работа над проектом Falgol-процессора ведется на уровне компьютерного моделирования. В частности, исследуется вопрос об аппаратной и программной поддержке построения и выполнения Falgol-программ, разработанных с применением некоторого обобщения стиля объектно-ориентированного программирования. Предполагается , что все полученные результаты будет представлены в последующих публикациях.
