Так, це те саме.
Каррінг - поняття від -калькуляції. Це перетворення між A × B → C і A → ( B → C ) . Подумайте про це як "якщо у нас є функція з двох аргументів типів A і B , тоді ми можемо виправити перший аргумент (типу A ), і ми отримаємо функцію аргументу, що залишився (типу B )". Насправді ця трансформація є ізоморфізмом. Це зроблено математично точно математичними моделями (набраних) λ -калькулів, які є декартовими закритими категоріями .λA×B→CA→(B→C)ABABλ
Існує категорія нумерованих наборів. Нумерований набір - це пара де A - це множина, а ν A : N → A - часткова витісняння, тобто карта з чисел на A , яка також може бути невизначеною. Якщо , то ми говоримо , що є кодом з . У теорії обчислюваності є багато прикладів. Щоразу, коли ми кодуємо якусь інформацію числом, ми отримуємо нумерований набір. Наприклад, існує стандартна нумерація часткових обчислювальних функцій, так що(A,νA)AνA:N→AAn x φ φ n ( k ) - число, обчислене частковою обчислювальною функцією, закодованої n при застосуванні до k . (Результат може бути невизначеним.)νA(n)=xnxφφn(k)nk
Морфізм нумерованих множин - це реалізована карта , що означає, що існує n ∈ N такий, що f ( ν A ( k ) ) = ν B ( φ n ( до ) ) для всіх до в області v , A . Це виглядає складно, але все це говорить, що φ nf:(A,νA)→(B,νB)n∈Nf(νA(k))=νB(φn(k))kνAφnробить для кодування того, що робить для елементів. Математичний спосіб сказати, що "програма ϕ n реалізує функцію f ".fϕnf
Ось пункт пунктину: категорія пронумерованих наборів - декартова закрита. Тому ми можемо інтерпретувати введений -рахунок у ньому та запитати, яка програма реалізує операцію currying. Відповідь: програма, задана теоремою smn.λ