Можно показать, что два вида крепко связаны, если один из них или какое-то составляющее 'ОБЫЧНОЕ' одного из них может крепко приводиться к другому (правила k, 1), что потребует некоторой последовательности из нуля или более раскрывающих приведений и затем не более одного объединения (6.4.1.а). Возможна ли такая последовательность приведений между двумя видами, определяется предикатом 'скреплены' (правила т, п).
'ПАРА1' делает, кроме того, недоступной 'ПАРУ2' во внешнем 'СЛОЕ', если эта ’ПАРА2’ зависит от 'ПАРЫГ; например,
начало цел х;
нач вещ х; ft здесь 'ПАРАГ есть 'буква икс лат для имени вещественного' ft
пропуск
кон
конец
и аналогично
начало оп ? = (цел і) цел : 1, цел к := 2;
нач оп ? = (имя цел і) цел : 3;
? к ft вырабатывает 3, а ? 4 не может встретиться в этом контексте, поскольку его обозначение-операции здесь недоступно ft
кон
конец.}Идентификация в средах
{ Этот раздел обеспечивает, что для каждого использующего-индикато- ра существует соответствующая 'ПАРА' в некотором подходящем 'СЛОЕ его среды. J
Синтаксис
{?ПАРЫ !ПАРЫ; ПУСТО.
.’ПАРЫ :: ПАРА; .’ПАРЫ ПАРА.
ПАРА :: ОПИСАНИЕ; МЕТКА; ПОЛЕ.
ПРИЗНАК :: ВИД; ЗНАЧЕНИЕ НОМЕР;
БИНАРНОЕ; метка; выборка ВИДА.
ОБОЗНАЧЕНИЕ .-. СЛОВО; ИНДИКАНТ; ИНФИКС; ПРЕФИКС.] а) ЕСЛИ ПАРА идентифицирована в СРЕДЕ
с новыми 7ПАРАМИ { a, 48b, 542а] :
если ПАРА находится в ?ПАРАХ { Ь, с, -} , ЕСЛИ истина;
если ПАРА не зависит от ?ПАР { 71а, Ь, с} ,
ЕСЛИ ПАРА идентифицирована в СРЕДЕ {а, -} .
ЕСЛИ ПАРА1 находится в !ПАРАХ2 ПАРЕ? { a, b, 48d} :
ЕСЛИ ПАРА1 находится в ПАРЕ2 { с, -}
или ПАРА1 находится в .’ПАРАХ2 { Ь, с, -} .
ЕСЛИ ОБОЗНАЧЕНИЕ для ПРИЗНАКАІ находится
в ОБОЗНАЧЕНИИ для ПРИЗНАКА2 { a, b, 48d} :
если (ПРИЗНАК1) есть (метка) или (ПРИЗНАК1) есть (БИНАРНОЕ) или (ПРИЗНАК!) есть (выборка ВИДА), ЕСЛИ (ПРИЗНАК1) есть (ПРИЗНАК2);
если (ПРИЗНАК!) есть (ЗНАЧЕНИЕ! 7НОМЕР) и (ПРИЗНАК2) есть (ЗНАЧЕНИЕ? 7НОМЕР), ЕСЛИ ЗНАЧЕНИЕ! эквивалентно ЗНАЧЕНИЮ2 {73а} .
{Всякая среда, исключая первичную (которая есть просто 'новое'), есть некоторая 'СРЕДА с СЛОЕМ' (т.е. 'СРЕДА с новыми 7ПАРАМИ'). Идентификация 'ПАРЫ' происходит сначала путем поиска ее в данном 'СЛОЕ' (правило а). Если эта 'ПАРА' есть 'ОБОЗНАЧЕНИЕ для метки' или 'ОБОЗНАЧЕНИЕ для БИНАРНОГО', то простое обнаружение соответствующей 'ПАРЫ' служит достаточной проверкой (правило с). Если же эта 'ПАРА' есть ' ОБОЗНАЧЕНИЕ для ЗНАЧЕНИЯ 7НОМЕР', то необходимо обратиться к механизму эквивалентности (правило с). Если данная 'ПАРА' не найдется в указанном 'СЛОЕ', то поиск продолжается в 'СРЕДЕ' (без этого 'СЛОЯ'), при условии что она не зависит от всех 'ПАР' этого 'СЛОЯ', а иначе поиск обрывается (правило а). Отметим, что правила b и с несут двойную нагрузку, поскольку они применяются также и для проверки законности использующих-указателей-поля (4.8.1 .d).}
Семантика
Если некоторый блок-в-СРЕДЕ R (З-O.l.f), содержит использующий- индикатор 1 (4.8. l.b), для которого существует наследник если-ПАРА-иден- тифицирована-в-СРЁДЕ-с-СЛОЕМ, но не существует наследника если-ПАРА- идентифицирована-в-СРЕДЕ, то R — „определяющий блок” данного 1. {Эта 'СРЕДА' всегда будет средой, действующей как раз за пределами данного блока.}
Всякой использующий-ОБОЗНАЧЕНИЕ-индикатор-выдающий- ПРИЗНАК 1, определяющий блок-в-СРЕДЕ { a J которого есть R, „идентифицирует” содержащийся в R определяющий-СЛОВО-индикатор-в-СРЕДЕ-с- СЛОЕМ-выдающий-ПРИЗНАК.
{ Например, в
(ft 1 0 вещ і = 2,0; (ft 2 цел і = I: (уі 3 вещ х; печ (і)
(fi 3 fi) Д 2 fi) 1 fl)
три блока. В силу синтаксиса использующий-идентификатор і в печ (і) вынужден , быть использующим-букву-и-лат-идентификатором-в-СРЕДЕ-с-но- вой-буквой-и-лат-для-вещественного-новой-буквой-и-лат-для-целого-новой- буквой-икс-лат-для-имени-вещественного-выдающим-целое (4.8.1.b). Его определяющим блоком является определяющее-новую-букву-и-лат-для-це- лого-последовательное-предложение-в-СРЕДЕ-с-новой-буквой-и-лат-для вещественного (3.2.1.а) с номером 0 2 он идентифицирует определяющий- идентификатор і, содержащийся в цел і (а не в вещ і), и его видом является 'целое'.}
[ Благодаря наличию аналогичного механизма некоторую БИНАРНУЮ- формулу (5.4.2.1.а) можно назвать „идентифицирующей” то определяю- щее-обозначение-операции-выдающее-БИНАРНОЕ (4.8.1-а), которое определяет ее приоритет.}
Окружение Е, „необходимое для” конструкта С в окружении Е1, определяется следующим образом:
Если Е1 ■ первичное окружение (2.2.2.а), то Е есть Е1;
иначе пусть Е1 будет составлено из участка L, соответствующего каким-то '7ПАРАМ', и другого окружения Е2;
Если С содержит любой использующий-СЛОВО-индикатор-выдающий- ПРИЗНАК,
не идентифицирующий { b} никакого определяющего-индикатора, содержащегося в С,
не являющийся прямым наследником индикатором-вида для формального или виртуального-описателя и
такой, что предикат 'если ОБОЗНАЧЕНИЕ для ПРИЗНАКА находится в 7ПАРАХ' {7.2.1 ,b} выполняется,
то Е есть Е1;
иначе { L не необходимо для С и } Е — окружение, необходимое для С в Е2. {Окружение, необходимое для конструкта, используется в семантике текстов-процеДуры (5.4.1.2) ив „устанавливании” (3.2.2.Ь). Например, в ft 2 проц пуст рр; цел n; (ft 1 проц р = пуст: печ (п); рр : = р), если Е1 и Е2 — окружения, устанавливаемые в результате исполнения последовательных-предложений, отмеченных примечаниями 0 1 ф и то Е2 — окружение, необходимое в Е1 для текста-процедуры пуст: печ (п), так что процедура, выдаваемая р в Е1, составлена из этого текста-процедуры и Е2 (5.4.1.2). Следовательно, область действия данной процедуры есть об
ласть действия окружения Е2 (2.1.3.5.с), а отсюда вытекает, что присваивание (5.2.1.2.Ь), вызываемое посредством рр ; = р, корректно определено.
Эквивалентность видов
{ В этом разделе определяется эквивалентность или неэквивалентность различных 'ЗНАЧЕНИЙ'. Обсуждение эквивалентных 'ЗНАЧЕНИЙ' см. в 2.1.1.2.}
{ Один из способов увидеть рекурсивные виды — рассматривать их как бесконечные деревья. Такое „дерево вида” получается повторной подстановкой в некотором выписывании 'ВИДА' из соответствующего 'ЦИ определения ВИДА' вместо каждого 'использования ЦИ'. Таким образом, выписывание 'ци I определение структуры содержащей букву и лат для выборки целого букву эн лат для выборки имени использования ци I в себе' будет создавать следующее дерево вида:
с
'в себе'
'букву 'для
и лат' выборки'
'целого'
букву эн лат'
'для выборки'
'
1
'в себе’
'букву эн лат'
'для выборки'
имени'г 1 .
структура содержащая
'букву 'для 'целого' и лат' выборки'
'имени'
(и т. д.)
Два выписывания эквивалентны тогда и только тогда, когда они обусловливают идентичные деревья вида. Настоящий синтаксис эквивалентности проверяет эквивалентность двух выписываний посредством, так сказать, одновременного развертывания этих двух деревьев до тех пор, пока не найдется какая-нибудь разница (что приведет к тупику) или пока не станет явным, что никакой разницы найтись не может. В некоторой степени структура деревьев вида отображается в растущем дереве порождения. }
Синтаксис
УКРЫТИЕ :: укрытое; ЦИ помнит ВИД УКРЫТИЕ; инь УКРЫТИЕ;
ян УКРЫТИЕ; запомненные ЗНАЧЕНИЕІ ЗНАЧЕНИЕ2 УКРЫТИЕ.
ПРОЛОГ :: ПРОСТОЕ; ПРИСТАВКА {71А} ; структура содержащая
;7ПОДВИЖНЫЙ МАССИВ из; процедура с; объединение;
пустое значение.
7ЭПИЛОГ :: ЗНАЧЕНИЕ; !ПОЛЯ в себе;
ПАРАМЕТРАМИ вырабатывающая ЗНАЧЕНИЕ; 10БЫЧНЫХ воедино; ПУСТО.
ІЧАСТИ :: ЧАСТЬ; !ЧАСТИ ЧАСТЬ.
ЧАСТЬ :: ПОЛЕ; ПАРАМЕТР.
ЕСЛИ ЗНАЧЕНИЕ! эквивалентно ЗНАЧЕНИЮ2 [64b, 71m, 72с Г ЕСЛИ укрытое ЗНАЧЕНИЕ 1 эквивалентно
укрытому ЗНАЧЕНИЮ2 { о} .
ЕСЛИ УКРЫТИЕ1 ЗНАЧЕНИЕІ эквивалентны
УКРЫТИЮ2 ЗНАЧЕНИЮ2 { a, b, е, i, j, n} :
если (УКРЫТИЕ1) содержит (запомненные
ЗНАЧЕНИЕІ ЗНАЧЕНИЕ2) или (УКРЫТИЕ2) содержит (запомненные ЗНАЧЕНИЕ2 ЗНАЧЕНИЕІ), ЕСЛИ истина;
если неверно что (УКРЫТИЕ1) содержит (запомненные ЗНАЧЕНИЕ! ЗНАЧЕНИЕ2) или (УКРЫТИЕ2) содержит (запомненные ЗНАЧЕНИЕ2 ЗНАЧЕНИЕІ),
ЕСЛИ (ПРОЛОГЗ) есть (ПРОЛОГ4) и
запомненные ЗНАЧЕНИЕІ ЗНАЧЕНИЕ2 УКРЫТИЕЗ
7ЭПИЛОГЗ эквивалентны
УКРЫТИЮ4 7ЭПИЛОГУ4 { b, d, е, k, q, -} ,
если УКРЫТИЕЗ ПРОЛОГЗ 7ЭПИЛОГЗ развертываются из УКРЫТИЯ! ЗНАЧЕНИЯ!{с }
и УКРЫТИЕ4 ПРОЛОГ4 7ЭПИЛОГ4 развертываются из УКРЫТИЯ2ЗНАЧЕНИЯ2{с}.
ЕСЛИ УКРЫТИЕ2 ПРОЛОГ 7ЭПИЛОГ развертываются из УКРЫТИЯ! ЗНАЧЕНИЯ [ Ь, с}:
если (ЗНАЧЕНИЕ) есть (ПРОЛОГ 7ЭПИЛОГ), ЕСЛИ (ПРОЛОГ) меняет УКРЫТИЕ! на
УКРЫТИЕ2 { 74а, b, с, d, ;
если (ЗНАЧЕНИЕ) есть (ЦИ определение ВИДА), если неверно что (УКРЫТИЕ!) содержит (ЦИ помнит), ЕСЛИ УКРЫТИЕ2 ПРОЛОГ 7ЭПИЛОГ развертываются из ЦИ помнит ВИД УКРЫТИЯ ВИДА { с};
если (ЗНАЧЕНИЕ) есть (использование ЦИ)
и (УКРЫТИЕ!) есть (ПОНЯТИЕ ЦИ помнит ВИД УКРЫТИЕЗ) и (ПОНЯТИЕ) содержит (инь)
и (ПОНЯТИЕ) содержит (ян),
ЕСЛИ УКРЫТИЕ2 ПРОЛОГ ’ЭПИЛОГ развертываются из УКРЫТИЯ! ВИДА { с}.
ЕСЛИ УКРоІТИЕ! ’ПОЛЯ 1 в себе эквивалентны
УКРЫТИЮ2 ІП0ЛЯМ2 в себе { b} :
ЕСЛИ УКРЫТИЕ! ІП0ЛЯ1 эквивалентны
УКРЫТИЮ2 'П0ЛЯМ2 [ f, g, h, і).
ЕСЛИ УКРЫТИЕ! [ПАРАМЕТРАМИ!
вырабатывающая ЗНАЧЕНИЕІ
эквивалентны УКРЫТИЮ? [ПАРАМЕТРАМИ? вырабатывающей ЗНАЧЕНИЕ? { b}:
ЕСЛИ УКРЫТИЕ1 !ПАРАМЕТРЫ1 эквивалентны УКРЫТИЮ? [ПАРАМЕТРАМ? { f, g, h, j J и УКРЫТИЕ! ЗНАЧЕНИЕІ эквивалентны УКРЫТИЮ? ЗНАЧЕНИЮ? f b }. f) ЕСЛИ УКРЫТИЕ! [ЧАСТИ! ЧАСТЫ эквивалентны
УКРЫТИЮ? [ЧАСТЯМ? ЧАСТИ? { d, е, f} :
ЕСЛИ УКРЫТИЕ! !ЧАСТИ1 эквивалентны
УКРЫТИЮ? [ЧАСТЯМ? (f, g, h, і, j} и УКРЫТИЕ! ЧАСТЫ эквивалентны УКРЫТИЮ? ЧАСТИ? [i, j}. g) ЕСЛИ УКРЫТИЕ! [ЧАСТИ! ЧАСТЫ эквивалентны
УКРЫТИЮ? ЧАСТИ? f d, е, f} : ЕСЛИ ложь.
ЕСЛИ УКРЫТИЕ! ЧАСТЫ эквивалентны УКРЫТИЮ? [ЧАСТЯМ? ЧАСТИ? { d, е, f J /ЕСЛИ ложь.
ЕСЛИ УКРЫТИЕ! СЛОВО! для выборки ВИДА! эквивалентны УКРЫТИЮ? СЛОВУ? для выборки ВИДА? f d, f J:
ЕСЛИ (СЛОВО!) есть (СЛОВО?) и
УКРЫТИЕ! ВИДІ эквивалентны УКРЫТИЮ? ВИДА? { b] .
ЕСЛИ УКРЫТИЕ! параметр вида ВИД! эквивалентны УКРЫТИЮ? параметру вида ВИД? £ е, f}:
ЕСЛИ УКРЫТИЕ! ВИДІ эквивалентны УКРЫТИЮ? ВИДУ? { b к) ЕСЛИ УКРЫТИЕ! [ОБЫЧНЫХ! воедино эквивалентны
УКРЫТИЮ? [ОБЫЧНЫХ? воедино [ b} :
ЕСЛИ УКРЫТИЕ! [ОБЫЧНЫЕ! входят в УКРЫТИЕ? [ОБЫЧНЫЕ? {1,т п} и УКРЫТИЕ? [ОБЫЧНЫЕ?
входят в УКРЫТИЕ! ’.ОБЫЧНЫЕ! { 1, m, п} и число [ОБоІЧНЫХ! равно числу [ОБЫЧНЫХ? fo, р} .
1) ЕСЛИ УКРЫТИЕ! [ОБЫЧНЫЕ! ОБЫЧНОЕ! входят в УКРЫТИЕ? [ОБЫЧНЫЕ2 { k, 1, m, 46s, 64b} :
ЕСЛИ УКРЫТИЕ! [ОБЫЧНЫЕ! входят в УКРЫТИЕ? [ОБЫЧНЫЕ? (1, т, п} и УКРЫТИЕ! ОБЫЧНОЕ! входят в УКРЫТИЕ? [ОБЫЧНЫЕ? { т, п|, т) ЕСЛИ УКРЫТИЕ! ОБЫЧНОЕ! входят в УКРЫТИЕ2
[ОБЫЧНЫЕ? ОБЫЧНОЕ? {к, I, т, 46s, 64b} :
ЕСЛИ УКРЫТИЕ! ОБЫЧНОЕ! входят в УКРЫТИЕ? [ОБЫЧНЫЕ2 {т, п} или УКРЫТИЕ! ОБЫЧНОЕ! входят в УКРЫТИЕ? ОБЫЧНОЕ2 [nJ.
п) ЕСЛИ УКРЫТИЕ! ОБЫЧНОЕ! входит
в УКРЫТИЕ? ОБЫЧНОЕ? { к, 1, т, 64b};
ЕСЛИ УКРЫТИЕ! ОБЫЧНОЕ! эквивалентны УКРЫТИЮ? ОБЫЧНОМУ? { b} .
о) ЕСЛИ число [ОБЫЧНЫХ! ОБЫЧНОГО! равно числу [ОБЫЧНЫХ? ОБЫЧНОГО? к, о } :ЕСЛИ число ЮБЫЧНЫХ1 равно числу ЮБЫЧНЫХ2 £о, р, р) ЕСЛИ число ОБЫЧНОГО1 равно числу
ОБЫЧНОГО2 { к, о } : ЕСЛИ истина.
q) ЕСЛИ УКРЫТИЕ1 ПУСТО эквивалентны
УКРЫТИЕ2 ПУСТО { b} : ЕСЛИ истина.
t Правило а вводит 'УКРЫТИЯ', используемые в ходе определения эквивалентности как ассоциативная память. Таких 'УКРЫТИЙ' два, по одному для каждого вида. Правило b приводит к немедленному заключению, если рассматриваемые 'ЗНАЧЕНИЯ' уже запомнены (см. ниже) в каком- нибудь подходящем 'УКРЫТИИ' в форме 'запомненные ЗНАЧЕНИЕ 1 ЗНАЧЕНИЕ2'. Если это не так, то указанные два 'ЗНАЧЕНИЯ' сначала запоминаются в 'УКРЫТИИ' (в том, которое слева), а затем каждое 'ЗНАЧЕНИЕ' развертывается (правило с) и разбивается на его 'ПРОЛОГ' и его '7ЭПИЛОГ', например 'имя вещественного’ разбивается на 'имя' и 'вещественное'.
Если 'ПРОЛОГИ' различны, то вопрос решен (правило Ь) ; в противном случае данные '7ЭПИЛОГИ' анализируются в соответствии с их структурами (которые должны совпадать, если соответствующие 'ПРОЛОГИ' идентичны). Во всех случаях, кроме того, когда 'ПРОЛОГИ' были 'объединение', эквивалентность проверяется исследованием соответствующих состав
лающих согласно схеме |
||
правило |
7ЭПИЛОГ' |
составляющие |
d |
'ПОЛЯ в себе' |
'!ПОЛЯ' |
е |
'ПАРАМЕТРАМИ вырабатывающая ЗНАЧЕНИЕ' |
^ПАРАМЕТРЫ'и 'ЗНАЧЕНИЕ' |
f |
'ШОЛЯ ПОЛЕ' |
'!ПОЛЯ' и 'ПОЛЕ' |
f |
^ПАРАМЕТРЫ ПАРАМЕТР' |
'ПАРАМЕТРЫ' и 'ПАРАМЕТР' |
і |
'СЛОВО для выборки ВИДА' |
'СЛОВО' и 'ВИД' |
j |
'параметр вида ВИД' |
'ВИД' |
ляя объединения соответствующие '7ЭПИЛОГИ' имеют форму 'ІОБЫЧ- НЫХ1 воедино' и 'ІОБЫЧНЫХ2 воедино'. Поскольку внутри эквивалентных объединений 'ОБЫЧНЫЕ' могут переставляться, как в специфицируемых об (вещ, цел) и об (цел, вещ) видах, то дня них эквивалентность определяется проверкой того, что 'ЮБЫЧНЫЕ1' входят (в теоретико-множественном смысле) в '!ОБЫЧНЫЕ2' и 'ЮБЫЧНЫЕ2' входят в 'ОБЫЧ- НЫЕ1'; при этом, конечно, проверка на вхождение рекурсивно обращается к проверке эквивалентности (правила k, 1, т, п, о, р).
Всякое 'ЗНАЧЕНИЕ' развертывается (правило с) в форму 'ПРОЛОГ 7ЭПИЛОГ' посредством определения того, что:
оно уже имеет эту форму: в таком случае в его 'УКРЫТИЕ' могут помещаться маркерЬі ('инь' и 'ян') для того, чтобы позднее определить правильность построения этого 'ЗНАЧЕНИЯ' (см. 7.4) ;