Czy twierdzenie smn to ta sama koncepcja co curry?

12

Studiuję twierdzenie smn, a koncepcja przypominała mi curry.

Z artykułu w Wikipedii o twierdzeniu smn :

twierdzenie mówi, że dla danego języka programowania i dodatnich liczb całkowitych m i n istnieje szczególny algorytm, który przyjmuje jako dane wejściowe kod źródłowy programu z m + n dowolnymi zmiennymi, wraz z m wartościami. Ten algorytm generuje kod źródłowy, który skutecznie zastępuje wartości pierwszych m wolnych zmiennych, pozostawiając resztę zmiennych wolnych.

Z artykułu o curry :

Intuicyjnie curry mówi „jeśli naprawisz niektóre argumenty, otrzymasz funkcję pozostałych argumentów”

Wydaje mi się, że ten sam pomysł jest dla mnie. Jedynym powodem, dla którego nie jestem pewien, jest to, że materiały, które natknąłem się na smn, nie wspominają o curry (i vice versa), więc chciałem się z nimi skonsultować, aby upewnić się, że naprawdę je otrzymam.

emanek
źródło
W rzeczy samej. Niektóre dowody obliczeniowe mają smak jagnięcia. Twierdzenie smn, z grubsza, pozwala udawać, że indeksy funkcji rekurencyjnych są terminami lambda, tak że biorąc pod uwagę możemy stworzyć nieformalne i twierdzą, że jest pierwotną rekurencyjną. Nawet drugi dowód twierdzenia o rekurencji (wykorzystujący smn) jest kombinatorem kumulatora stałoprzecinkowego w przebraniu, ukrytym za zastosowaniami . Kluczową kwestią jest to, że nawet jeśli zdefiniowano wyliczenie wyliczając, powiedzmy, TM (lub Java, lub ...), nadal możemy udawać, że mamy lambdas! g ( x ) = # λ y . ϕ i ( x , y ) g s ( ) ϕ iϕja(-,-)sol(x)=#λy.ϕja(x,y)sols()ϕja
chi
Cóż, smn tworzy instrukcję egzystencjalną, podczas gdy istnienie funkcji curry zapewnia „kompilator”. Ale pomysł jest taki sam.
Raphael

Odpowiedzi:

15

Tak, to jest to samo.

Curry to koncepcja z rachunku. Jest to transformacja między A × B C i A ( B C ) . Pomyśl o tym jak „jeśli mamy funkcję dwóch argumentów typu A i B , wówczas możemy naprawić pierwszy argument (typu A ), a otrzymamy funkcję pozostałego argumentu (typu B )”. W rzeczywistości ta transformacja jest izomorfizmem. Dokonują tego matematycznie precyzyjne modele matematyczne (typowanego) λ- rachunku, które są kartezjańskimi kategoriami zamkniętymi .λZA×bdoZA(bdo)ZAbZAbλ

Istnieje kategoria zestawów numerowanych. Zestaw numerowany jest parą gdzie A jest zbiorem, a ν A : NA jest częściowym przypuszczeniem, tj. Mapą liczb na A , która również może być niezdefiniowana. Jeśli ν ( n ) = x mówimy, że n jest to kod o x . W teorii obliczalności istnieje wiele przykładów. Ilekroć kodujemy jakieś informacje za pomocą liczby, otrzymujemy zestaw numerowany. Na przykład istnieje standardowa numeracja(ZA,νZA)ZAνZA:N.ZAZAνZA(n)=xnx częściowych funkcji obliczalnych, tak że φ n ( k ) jest liczbą obliczoną przez częściową funkcję obliczalną zakodowaną przez n, gdy zastosowana do k . (Wynik może być niezdefiniowany.)φφn(k)nk

Morfizm zbiorów numerowanych to zrealizowana mapa , co oznacza, że ​​istnieje n N, takie że f ( ν A ( k ) ) = ν B ( φ n ( k ) ) dla wszystkich k w dziedzinie v A . To wygląda na skomplikowane, ale mówi tylko tyle, że φ nfa:(ZA,νZA)(b,νb)nN.f(νA(k))=νB(φn(k))kνAφnrobi kodom, co robi z elementami. Jest to matematyczny sposób powiedzenia, że ​​„program ϕ n implementuje funkcję f ”.fϕnf

Oto punkt zwrotny: kategoria zestawów numerowanych jest kartezjańska zamknięta. Możemy zatem zinterpretować w nim wpisany calulus i zapytać, jaki program realizuje operację curry. Odpowiedź brzmi: program podany przez twierdzenie smn.λ

Andrej Bauer
źródło
Ciekawy. Czy ta kategoria jest ściśle związana z ? ν A wydaje się indukować PER. P.miR(ZA)νZA
chi
1
Tak, te dwie kategorie są równoważne, a trzecia równoważna wersja to wersja skromnych zestawów (wyszukaj „skromne zestawy i zespoły”).
Andrej Bauer,