Чи теорема smn те саме поняття, що і currying?


12

Я вивчаю теорему smn, і ця концепція нагадала мені про те, що б то не було.

З статті wikipedia про теорему smn :

теорема говорить, що для даної мови програмування та натуральних чисел m і n існує певний алгоритм, який приймає вхідний код програми з m + n вільними змінними разом із m значеннями. Цей алгоритм генерує вихідний код, який ефективно замінює значення для перших m вільних змінних, залишаючи решту змінних вільними.

Зі статті про каррі :

Інтуїтивно зрозумілий, що говорить, "якщо ви виправите деякі аргументи, ви отримаєте функцію решти аргументів"

Мені здається така ж ідея. Єдиною причиною, чому я не впевнений, є те, що матеріали, на які я потрапив на smn, не згадують каррі (і навпаки), тому я хотів проконсультуватися з цим, щоб переконатися, що я його справді отримав.


Справді. Деякі доказові обчислення мають багряний смак. Теорема smn дуже грубо дозволяє зробити вигляд, що індекси рекурсивних функцій є лямбда-термінами, так що, даючи ми можемо неформальний і стверджують, що - примітивний рекурсивний. Навіть другий доказ теореми про рекурсію (який експлуатує smn) - це комбінатор неподвижної точки Церкви в маскуванні, прихованому за використанням . Ключовим моментом тут є те, що навіть якщо перерахування визначено перерахуванням, скажімо, ТМ (або Java, або ...), ми все одно можемо робити вигляд, що у нас є лямбда! g ( x ) = # λ y . ϕ i ( x , y ) g s ( ) ϕ iϕi(,)g(x)=#λy.ϕi(x,y)gs()ϕi
чі

Ну, smn робить екзистенційне твердження, тоді як існування curried функції забезпечує "компілятор". Але ідея та сама.
Рафаель

Відповіді:


15

Так, це те саме.

Каррінг - поняття від -калькуляції. Це перетворення між A × B C і A ( B C ) . Подумайте про це як "якщо у нас є функція з двох аргументів типів A і B , тоді ми можемо виправити перший аргумент (типу A ), і ми отримаємо функцію аргументу, що залишився (типу B )". Насправді ця трансформація є ізоморфізмом. Це зроблено математично точно математичними моделями (набраних) λ -калькулів, які є декартовими закритими категоріями .λA×BCA(BC)ABABλ

Існує категорія нумерованих наборів. Нумерований набір - це пара де A - це множина, а ν A : NA - часткова витісняння, тобто карта з чисел на A , яка також може бути невизначеною. Якщо , то ми говоримо , що є кодом з . У теорії обчислюваності є багато прикладів. Щоразу, коли ми кодуємо якусь інформацію числом, ми отримуємо нумерований набір. Наприклад, існує стандартна нумерація часткових обчислювальних функцій, так що(A,νA)AνA:NAAn 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)nNf(νA(k))=νB(φn(k))kνAφnробить для кодування того, що робить для елементів. Математичний спосіб сказати, що "програма ϕ n реалізує функцію f ".fϕnf

Ось пункт пунктину: категорія пронумерованих наборів - декартова закрита. Тому ми можемо інтерпретувати введений -рахунок у ньому та запитати, яка програма реалізує операцію currying. Відповідь: програма, задана теоремою smn.λ


Цікаво. Чи тісно пов'язана ця категорія з ? ν A, здається, викликає PER. PER(A)νA
чі

1
Так, дві категорії еквівалентні, а третя еквівалентна версія - це скромні набори (пошук "скромних наборів та зборів").
Андрій Бауер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.