Комбінатори для примітивних рекурсивних функцій


Відповіді:


17

Так, але вам доведеться враховувати набрані комбінатори. Тобто вам потрібно надати і такі схеми типів: де і - мета-змінні, які можна примірник будь-якого конкретного типу при кожному використанні.K K : A B A S : ( A B C ) ( A B ) ( A C ) A , B CSK

K:ABAS:(ABC)(AB)(AC)
A,BC

Потім потрібно додати тип натуральних чисел до мови типів і додати наступні комбінатори: z : N s u c c : NN i t e r : N( NN ) NNN

z:Nsucc:NNiter:N(NN)NN

Правилами рівності для доповнень є:

iterifz=iiterif(succe)=f(iterife)

Набагато простіше читати програми, які ви пишете, якщо ви просто пишете програми в просто набраному лямбдальному обчисленні, доповненому цифрами та ітерацією. Описана мною система - це обмеження Т на Геделя , мова арифметики вищого типу. У T Goedel введення тексту для ітерації менш обмежене: У T , ви можете інстанціювати будь-якого типу, а не лише типу натуральних чисел. Це призведе до минулої примітивної рекурсії і дозволяє визначити такі речі, як функція Акермана. iter

iter:A(AA)NA
iter

EDIT: Xoff запитав, як кодувати функцію попередника. Це випливає за допомогою стандартного трюку. Для пояснення я використовую лямбда-позначення для цього (яке можна усунути дужкою-абстракцією), оскільки це набагато читабельніше. Спочатку припустимо, що у нас є пари і більш загальний тип для . Тоді ми можемо визначити:iter

pred=λk.iter(z,z)(λ(n,n).(succn,n))kpred=λk.snd(predk)

Якщо у вас просто є ітератор типу nat, ви повинні використовувати ізоморфізм, щоNN×N


Отже, це менше, ніж Тьюрінг - повне обмеження набраних комбінаторів? Чи можуть змінні типу (рекурсивно) позначати функції над змінними типів (наприклад, A = D -> E для деяких типів D і E)?
NietzscheanAI

2
SK

Ніл, дякую. Чи було б я правильно, думаючи, що можна зобразити z, succ і iter у відношенні S і K через кодування Церкви цифрами?
NietzscheanAI

00(succx)x

@Xoff: функція попередника має добре відоме з точки зору визначення лінійного часу iter. Це може бути предметом запитання на cs.stackexchange.com ...
cody
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.