Ввод и вывод в виде церковных цифр .
00000000 01011111 01100101 11101101 0
В лямбда-исчислении это λ m . λ н . λ ф . λ x . m f ( n f x ).
Индекс де Брейна : λ λ λ λ 4 2 (3 2 1)
Лямбда-исчисление - это краткий способ описания отображения (функции).
Например, эта задача может быть записана как λ x . λ y . х + у
Следует отметить, что это не лямбда (функция), которая принимает два аргумента. Это на самом деле вложенная лямбда. Тем не менее, он ведет себя как лямбда, которая принимает два аргумента, поэтому его можно неофициально описать как таковой. Каждая лямбда формально принимает только один аргумент.
Например, если мы применим эту лямбду к 3 и 4:
(λ x . λ y . x + y ) 3 4 ≡ (λ y . 3 + y ) 4 ≡ 3 + 4 = 7
Итак, первая лямбда фактически возвращает другую лямбду.
Церковные цифры - это способ избавиться от лишних знаков, оставляя только лямбда-символы и переменные.
Каждое число в церковной системе на самом деле является лямбда-выражением, которое указывает, сколько раз функция применяется к элементу.
Пусть функция будет f, а элемент x .
Итак, число 1 будет соответствовать λ f . λ x . f x , что означает применение f к x ровно один раз.
Число 3, например, будет λ f . λ x . f ( f ( f x )), что означает применение f к x ровно три раза.
Поэтому, чтобы сложить две церковные цифры (скажем, m и n ) вместе, это то же самое, что применить f к x , m + n раз.
Мы можем заметить, что это то же самое, что сначала применить f к x , n раз, а затем применить f к результирующему элементу m раз.
Например, 2 будет означать f(f(x))
и 3 будет означать f(f(f(x)))
, так что 2 + 3 будет f(f(f(f(f(x)))))
.
Чтобы применить f к x , n раз, мы имеем n f x .
Вы можете просматривать m и n как функции, принимающие два аргумента, неформально.
Затем мы снова применяем f к этому результирующему элементу, m раз: m f ( n f x ).
Затем мы добавляем обратно шаблон для получения λ m . λ н . λ ф . λ x . m f ( n f x ).
Теперь мы должны преобразовать его в индекс Де Брюина .
Во-первых, мы подсчитываем «относительное расстояние» между каждой переменной до лямбда-объявления. Например, m будет иметь расстояние 4, потому что оно объявлено 4 лямбда "назад". Аналогично, n будет иметь расстояние 3, f будет иметь расстояние 2, а x будет иметь расстояние 1.
Итак, запишем это как промежуточную форму: λ m . λ н . λ ф . λ x . 4 2 (3 2 1)
Затем мы удаляем объявления переменных, оставляя нас с: λ λ λ λ 4 2 (3 2 1)
Теперь мы конвертируем его в двоичное лямбда-исчисление .
Правила таковы:
- λ становится
00
.
- m n (группировка) становится
01 m n
.
- числа я становится
1
я раз + 0
, например 4 становится 11110
.
λ λ λ λ 4 2 (3 2 1)
≡ λ λ λ λ 11110
110
( 1110
110
10
)
≡ λ λ λ λ 11110
110
0101 111011010
≡ λ λ λ λ 0101
111101100101111011010
≡ 00
00
00
00
0101
111101100101 111011010
≡ 000000000101111101100101111011010