2.13.4. ОГРАНИЧЕНИЯ НА ИСПОЛЬЗОВАНИЕ ПЕРЕМЕННЫХ Переменные, появляющиеся в определении функции, должны удовлетворять определенным ограничениям.
А именно, если переменная используется в результатном выражении, она должна быть к этому моменту определена. Определением переменной является ее появление в образце, если к этому моменту она еще не была определена.
Если в каком то месте являются определенными несколько различных переменных, их индексы должны быть попарно различны.
{}
обозначает пустое множество.v1+v2
обозначает объединение множеств v1 и v2.v1++v2
обозначает пополнение множества переменных v1 переменными из v2. А именно, v1++v2 содержит все переменные из v2, а также все переменные из v1, индексы которых отличаются от индексов всех переменных из v2. Например, {sX, sY} ++ {eY, eZ} = {sX, eY, eZ}. Запись v |- Q означает, что все переменные из v имеют разные индексы, и все переменные, значения которых могут понадобиться для вычисления тропы Q, входят в v. Поскольку хвосты, источники и результатные выражения являются частными случаями троп, то же самое обозначение используется и для них.Аналогично, запись
v |- Palt означает, что все переменные из v имеют разные индексы, и все переменные, значения которых могут понадобиться для вычисления образцового распутья Palt, входят в v.Пусть функция
Fname имеет определение Fname Palt. Тогда должно выполняться {} |- Palt. Отношения v |- Q и v |- Palt определяются с помощью следующих правил.v |- S v |- S
v |- R v++vars[He] |- R
---------- -----------------
v |- S R v |- S :: He R
v |- S"
v++vars[He] |- S' v |- S
v++vars[He] |- R v+vars[P] |- R
------------------------- ---------------
v |- S" $iter S' :: He R v |- S : P R
v |- S
v |- Q v |- R v |- Q
--------- ----------- ----------
v |- , Q v |- # S R v |- \? Q
v |- Q v |- Q
---------- v |- $fail ---------
v |- \! Q v |- = Q
v |- Q
v |- Q v |- Palt
-------------- ------------------------
v |- $error Q v |- $trap Q $with Palt
v |- Qj для всех j=1,...,n
----------------------------
v |- \{Q1; ... Qn;}
v |- S
v |- Palt
--------------
v |- S : Palt
все переменные из v имеют разные индексы
все переменные из vars[Re] входят в v
-----------------------------------------
v |- Re
v+vars[Pj] |- Rj для всех j=1,...,n
-------------------------------------
v |- \{P1 R1; ... Pn Rn;}