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 .λA × B → CA → ( B → C)ZAbZAbλ
Istnieje kategoria zestawów numerowanych. Zestaw numerowany jest parą gdzie A jest zbiorem, a ν A : N → A 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( A , νZA)ZAνZA: N → AZAν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: ( A , νZA) → ( B , νb)n ∈ Nfa( νZA(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ϕnfa
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.λ