Chciałbym tylko poznać kilka przykładów funkcji, które można obliczyć za pomocą niepisanego rachunku lambda, ale nie za pomocą wpisanego rachunku lambda.
Jako że jestem początkującym, doceniłbym powtórzenie podstawowych informacji.
Dzięki.
Edycja: za pomocą kalkulatora lambda, miałem zamiar wiedzieć o systemie F i rachunku lambda po prostu. Przez funkcję rozumiem dowolną funkcję obliczalną Turinga.
pl.programming-languages
type-theory
lambda-calculus
computable-analysis
Timothy Zacchari
źródło
źródło
Odpowiedzi:
Dobry przykład podaje Godelization: w rachunku lambda jedyne, co możesz zrobić z funkcją, to zastosować ją. W rezultacie nie ma możliwości napisania zamkniętej funkcji typu , która pobiera argument funkcji i zwraca dla niego kod Godela.( N → N ) → N
Dodanie tego jako aksjomatu do arytmetyki Heytinga jest zwykle nazywane „konstruktywną tezą Kościoła” i jest silnie antyklasycznym aksjomatem. Mianowicie, spójne jest dodawanie go do HA, ale nie do arytmetyki Peano! (Zasadniczo jest to klasyczny fakt, że każda maszyna Turinga zatrzymuje się lub nie, i nie ma żadnej obliczalnej funkcji, która byłaby tego świadkiem.)
źródło
Najprostszą odpowiedź daje fakt, że typowane lambda odpowiadają logice (po prostu typowany rachunek lambda -> logika predykatów; system f -> logika drugiego rzędu) i logika spójna nie może udowodnić swojej spójności.
Powiedzmy, że masz zapisane liczby naturalne (lub kodowanie liczb naturalnych w kościele) w zapisanym rachunku lambda. Możliwe jest wykonanie numeracji Gödla, która przypisuje każdy termin w systemie F unikatowej liczbie naturalnej. Następnie istnieje funkcja która przenosi dowolną liczbę naturalną (która odpowiada dobrze wpisanemu terminowi w Systemie F) na inną liczbę naturalną (która odpowiada normalnej formie tego dobrze wpisanego terminu w Systemie F) i robi coś innego dla dowolna liczba naturalna, która nie odpowiada dobrze wpisanemu terminowi w Systemie F (powiedzmy, zwraca zero). Funkcja f jest obliczalna, więc można ją obliczyć na podstawie niepisanego rachunku lambda, ale nie na podstawie wypisanego rachunku lambda (ponieważ ten ostatni byłby dowodem spójności logiki drugiego rzędu wf f logika drugiego rzędu, co oznaczałoby, że logika drugiego rzędu jest niespójna).
Zastrzeżenie 1: Jeśli logika drugiego rzędu jest niespójna, może być możliwe napisanie w Systemie F ... i / lub może nie być możliwe zapisanie f w nietypowym rachunku lambda - możesz coś napisać, ale może nie zawsze zakończ, co jest kryterium „obliczalnego”.f f
Zastrzeżenie 2: Czasami przez „prosty typ rachunku lambda” ludzie mają na myśli „prosty typ rachunku lambda z operatorem punktu stałego lub funkcjami rekurencyjnymi”. Byłby to mniej więcej PCF , który może obliczyć dowolną funkcję obliczeniową, podobnie jak niepisany rachunek lambda.
źródło
W Untyped -calculus posseses ogólnie rekursji w postaci Y combinator. Po prostu wpisany λ -calculus nie. Zatem dowolna funkcja wymagająca ogólnej rekurencji jest kandydatem, na przykład funkcja Ackermanna. (Pomijam kilka szczegółów na temat tego, jak dokładnie reprezentujemy liczby naturalne w każdym systemie, ale zasadniczo wystarczy każde rozsądne podejście).λ Y λ
Oczywiście zawsze możesz rozszerzyć prosty calculus, aby dopasować moc Y , ale wtedy zmieniasz reguły gry.λ Y
źródło
źródło
Jedną z wizji granic silnie normalizujących się kamieni, które lubię, jest kąt obliczalności. W silnie znormalizowanym rachunku różniczkowym, takim jak rachunek prosty lambda, System F lub Rachunek konstrukcji, masz dowód, że wszystkie warunki w końcu się kończą.
Jeśli ten dowód jest konstruktywny, otrzymujesz stały algorytm do oceny wszystkich terminów z gwarantowaną górną granicą czasu obliczeń. Możesz też przestudiować (niekoniecznie konstruktywny) dowód i wyodrębnić z niego górną granicę - co prawdopodobnie będzie ogromne , ponieważ rachunek różniczkowy jest ekspresyjny.
Granice te dają „naturalne” przykłady funkcji, których nie można wpisać w tym ustalonym rachunku lambda: wszystkie funkcje arytmetyczne, które są asymptotycznie lepsze od tej granicy.
Jeśli dobrze pamiętam, terminy pisane w po prostu wpisany lambda-rachunek może być oceniany w wieżach wykładniczy:
O(2^(2^(...(2^n)..)
; funkcja rosnąca szybciej niż wszystkie takie wieże nie będzie wyrażana w tym rachunku. System F odpowiada intuicyjnej logice drugiego rzędu, więc moc obliczeniowa jest po prostu ogromna. Aby wykorzystać siłę obliczeniową jeszcze mocniejszych teorii, zwykle rozumujemy w kategoriach teorii mnogości i teorii modeli (np. Jakie porządki można zbudować) zamiast teorii obliczalności.źródło
źródło
A
taki sposób, żeA \ident A \rightarrow A
nie dziwne? Brzmi dla mnie absurdalnie, co przeoczam?