4.3. Окрестностный анализатор 59
4.3.2 Обоснование окрестностного анализатора
Идея алгоритма nan состоит в следующем. В окрестностном анализаторе выполняет-
ся обычное в ычисление p d
∗
⇒ res, которое будем называть эталонным вычислением.
Этaлонное вычисление выполняется в точности так, как это делается в интерпре-
таторе int—см. раздел 1.3.
Одновременно и синхронно с эталонным вычислением выполняется обобщенное вы-
числение программы p над c-данными—над окрестностью O
d
данных d. В начале обоб-
щенных вычислений в качестве окрестности данных d выбирается максимально воз-
можная окрестность, представляющая множество Dom(p) всех возможных данных для
программы p. Обо бщенное вычисление выполняется в точности так, как это делается
в алгоритме построения дерева процессов ptr—см. раздел 3.2.
В тех случаях, когда данные из множества, представленного O
d
, не все однознач-
но выбирают тот вариант продолжения вычисления, что и в эталонном вычислении,
nan проводит сужение O
d
, отбрасывая ровно те данные из представляемого окрестно-
стью множества, которые выбрали иное продолжение истории вычисления. То есть , в
обобщенном вычислении, выполняемом в nan, отслеживается та самая ветвь в дереве
процессов, которая соответствует эталонному вычислению. Другие ветви отсекаются.
Текст тех фрагментов алгоритма nan, которые относятся к обобщенному вычислению,
абсолютно совпадает с соответствующими фрагментами текста ptr
3
.
Таким образом обеспечива ется построение представления множества тех данных,
которые имеют ту же трассу вычисления, что и данные d
4
.
Рассмотрим подробнее алго ритм nan.
Функция nan по заданной программе p и входным данным ds формирует аргументы
функции eval’:
• t
0
= (CALL f prms)—терм, который необходимо вычислить, где f—первая функ-
ция из программы p, prms —список ее параметров.
• O
d
0
= (ces
0
, r
0
) начальную окрестность d, представляющую множество всех воз-
можных входных данных программы p, где ces
0
определен равенством
(ces
0
, i
0
) = mkCExps prms 1,
а начальное значение рестрикции r
0
= RESTR[];
• e
0
= mkEnv prms ds—начальную среду эталонного вычисления;
• ce
0
= mkEnv prms ces
0
—начальную с реду обобщенного вычисления;
• i
0
—начальное значение своб одного индекса c-переменных.
3
Можно было определить nan следующим эквивалентным образом: строится дерево процессов
tree = ptr p O
d
, выполняется эталонное вычисление и осуществляется выбор из дерева tree той
ветви, которая отвечает эталонному вычислению. Однако, выбранное здесь определение nan представ-
ляется более удобным для обоснования алгоритма.
4
Заметим, что в начале развития окрестностного анализа для окрестностей использовался термин
“класс конвениальности”, что подчеркивало их смысл—множество данных, выбирающих один и тот же
путь в дереве процессов.