Czy istnieją jakieś pełne kalkulacje lambda na maszynie Turinga? Jeśli tak, jakie są przykłady?
Czy istnieją jakieś pełne kalkulacje lambda na maszynie Turinga? Jeśli tak, jakie są przykłady?
Odpowiedzi:
Tak, oczywiście. Wiele typowanych obliczeń lambda akceptuje z założenia tylko silnie normalizujące terminy, więc nie mogą one wyrażać dowolnych obliczeń. Ale system typów może być dowolny; uczyń go wystarczająco szerokim, abyś mógł wyrazić wszystkie obliczenia deterministyczne.
Trywialny system typów, który obejmuje fragment rachunku różniczkowego lambda zawierający Turinga, to taki, który akceptuje każdy termin równie dobrze wpisany (z najwyższym typem ).
Mówiąc prościej, funkcjonalne języki programowania o statycznym typie mają u podstaw typowy rachunek lambda, który umożliwia także kombinację punktów stałych . Na przykład zacznij od prostego rachunku różniczkowego lambda (lub systemu typu ML, systemu F lub dowolnego innego systemu typów) i dodaj regułę, która tworzy kombinator punktów stałych, taki jak dobrze napisane. Γ ⊢ f : T → T Reguły przedstawione powyżej są raczej niezdarne, ponieważ tworzą terminy takie jakY
Interesującym systemem typów jest rachunek różniczkowy lambda z typem przecięcia.
Typy skrzyżowań mają interesujące właściwości w odniesieniu do normalizacji:
Zobacz Charakterystyka terminów lambda, które mają typy związków, aby dowiedzieć się, dlaczego typy skrzyżowań mają tak niezwykły zakres.
Masz więc system typów definiujący język Turinga (ponieważ każdy termin jest dobrze napisany) oraz prostą charakterystykę obliczeń kończących. Oczywiście, ponieważ ten typ systemu charakteryzuje normalizację, nie można go rozstrzygać.