Введення та вихід у вигляді церковних цифр .
00000000 01011111 01100101 11101101 0
У лямбдальному обчисленні вона дорівнює λ m . λ n . λ f . λ x . m f ( n f x ).
Індекс Де Бруйна : λ λ λ λ 4 2 (3 2 1)
Обчислення лямбда - це стислий спосіб опису відображення (функції).
Наприклад, це завдання можна записати як λ x . λ у . х + у
Варто зазначити, що це не лямбда (функція), яка бере два аргументи. Це насправді вкладена лямбда. Однак він поводиться як лямбда, який бере два аргументи, тому його можна неофіційно описати як такого. Кожна лямбда формально бере лише один аргумент.
Наприклад, якщо застосувати цю лямбда до 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 ).
Потім ми додаємо назад котельну плиту, щоб отримати λ м . λ n . λ f . λ x . m f ( n f x ).
Тепер ми повинні перетворити його в індекс De Bruijn .
По-перше, ми рахуємо "відносну відстань" між кожною змінною до лямбда-декларації. Наприклад, m мала б відстань у 4, тому що це оголошено 4 лямбда "тому". Аналогічно, n мав би відстань 3, f мала б відстань 2, а x мала б відстань 1.
Отже, записуємо його як цю проміжну форму: λ m . λ n . λ f . λ x . 4 2 (3 2 1)
Потім ми видаляємо декларації змінної, залишаючи нам: λ λ λ λ 4 2 (3 2 1)
Тепер ми перетворюємо це на двійкове обчислення лямбда .
Правила такі:
- λ стає
00
.
- m n (групування) стає
01 m n
.
- числа i стає
1
i разів + 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