Редукция графа

JScript

function foo(x) {

if (x==null) // если список пуст,

then new Array[x,3] //то результат- пара х,3

else 4 // ,иначе 4

 

}

 

Расширенное λ - исчисление.

(λх(if x(@

( @ cons x).

(quote 3))

(quote 4))

cons ab →(a,b)

head (cons ab) →a

tail (cons ab) →b

 

Любая программа может быть представлена ее синтаксическим деревом разбора.

Так как в “чистом” λ-исчислении всего две операции: λ и @, то будем в дальнейшем их использовать.

Пример. (λх.+х3)4

1-ый способ 2-ой способ

 

Здесь меняем все свободные вхождения х на 4

В качестве примера свернем это дерево разбора

Определение:

Аппликативный порядок редукции - такой порядок редукции, который предписывает свертывать самый левый из самых внутренних редексов.

Определение:

Нормальный порядок редукции - порядок редукции, который предписывает

свертывать самый левый из самых внешних редексов.


Пример. А: λх. If x≠ 0 then x else 3/Ø . Вычислим А от 4

(Это откровенная ошибка)

При аппликативном порядке редукции мы

получим ошибку.

При аппликативном порядке вычисляются

все аргументы функции, а уже затем – сама функция.

При нормальном порядке редукции аргументы

вычисляются по мере надобности.

При редуцировании графа мы будем пользоваться

нормальным порядком редукции.

 

Алгоритм редукции графа (РГ)

Редукция графа будет осуществляться циклически.

Повторить:

Спускаемся по левой ветви графа до первой вершины, которая не является аппликацией, т.е. не помечена символом @.

Если эта вершина является корнем графа, то все выражение, находится в нормальной форме, значит окончание вычислений. Если она не является корнем, то она должна являться примитивной функцией либо аппликацией и у нее должны быть все необходимые аргументы (в противном случае ошибка). Мы рекурсивно применяем алгоритм для всех поддеревьев, являющихся аргументами.

Если текущая вершина является λ- вершиной, то рассматриваем следующие варианты:

1. она является корнем графа, значит выражение в нормальной форме.

2. если она не является корнем, то над ней может быть только аппликация @и мы на место формального параметра λ-абстракции подставляем второе выражение из правой ветви аппликации. При необходимости это поддерево копируется.

Пример. (λх.+хх)7

 

(λху.+ху)3((λх.х)4)