Czy Lambda Calculus jest czysto składniowy?


29

Czytałem od kilku tygodni o rachunku Lambda, ale jeszcze nie widziałem niczego, co różni się materialnie od istniejących funkcji matematycznych i chcę wiedzieć, czy to tylko kwestia notacji, czy też są jakieś nowe właściwości lub reguły utworzone przez aksjomaty rachunku lambda, które nie mają zastosowania do każdej funkcji matematycznej. Na przykład przeczytałem, że:

„Mogą istnieć funkcje anonimowe” : funkcje Lambda nie są anonimowe, wszystkie nazywane są po prostu lambda. W notacji matematycznej dopuszczalne jest używanie tej samej zmiennej dla różnych funkcji, jeśli nazwa nie jest ważna. Na przykład dwie funkcje w połączeniu Galois są często nazywane *.

„Funkcje mogą przyjmować funkcje jako dane wejściowe” : Nie jest nowością, można to zrobić za pomocą zwykłych funkcji.

„Funkcje to czarne skrzynki” : Tylko dane wejściowe i wyjściowe są również poprawnymi opisami funkcji matematycznych ...

To może wydawać się dyskusją lub opiniotwórczym pytaniem, ale uważam, że powinna istnieć „poprawna” odpowiedź na to pytanie. Chcę wiedzieć, czy rachunek lambda jest tylko konwencją notacyjną, czy syntaktyczną do pracy z funkcjami matematycznymi, czy też istnieją jakieś istotne lub semantyczne różnice między lambdami a funkcjami zwykłymi.


2
Nie chcę z tego uzyskać pełnej odpowiedzi, ale funkcje nie mogą zaakceptować funkcji jako danych wejściowych. Mogę pisać f (g (0)), ale nie mogę pisać f (g, 0). Ten ostatni nazywa się „funkcjonalnym” i wymaga innych reguł.
Cort Ammon - Przywróć Monikę

Funkcje funkcjonalne @CortAmmon są funkcjami. Funkcja jest tylko zbiorem par (chociaż, ściśle mówiąc, jest to potrójne (D, R, G), gdzie D to dziedzina R to zakres, a G to wykres (zestaw par), kolejny mały problem, który mam z zaakceptowaną odpowiedzią, ale nie ma jej tu ani tam). Więc jeśli D jest zbiorem funkcji i bierzesz pary, w których pierwszy element jest funkcją w D, to masz funkcję. Sprawdź Wikipedia: „Funkcjonalność to mapowanie [funkcja] ...”
Neil

To znaczy wszystkie funkcje są funkcjami, nie wszystkie funkcje są funkcjami. Ale wszystkie reguły dotyczące funkcji dotyczą funkcjonałów
Neil

Odpowiedzi:


63

Jak na ironię, tytuł ma rację, ale nie w sposób, w jaki wydaje się, że miałeś na myśli, że „rachunek lambda jest tylko konwencją notacyjną”, co nie jest dokładne.

Terminy lambda nie są funkcjami 1 . Są to fragmenty składni, tj. Zbiory symboli na stronie. Mamy zasady manipulowania tymi zbiorami symboli, przede wszystkim redukcją beta. Możesz mieć wiele różnych terminów lambda, które odpowiadają tej samej funkcji. 2)

Zajmę się twoimi punktami bezpośrednio.

Po pierwsze, lambda nie jest nazwą, która jest ponownie używana. Byłoby to nie tylko bardzo mylące, ale nie piszemy (lub ), co byśmy zrobili, gdyby była nazwą funkcji, tak jak piszemy . W moglibyśmy zastąpić (gdyby był zdefiniowany terminem lambda) terminem lambda dającym coś w rodzaju znaczenie jest wyrażeniem, które może reprezentować funkcję, a nie deklaracja deklarująca funkcję (o nazwieλ(x)(λ x)λf(x)f(x)f(λy.y)(x)(λy.y)λalbo coś innego). W każdym razie, kiedy przeciążamy terminologię / notację, jest to (można mieć nadzieję) zrobione w sposób, w którym można je jednoznacznie określić kontekstowo, z pewnością nie może tak być w przypadku terminów lambda.

Twój następny punkt jest w porządku, ale trochę nieistotny. To nie są zawody, w których obowiązują Warunki Team Lambda i Funkcje Drużynowe i tylko jeden może wygrać. Głównym zastosowaniem terminów lambda jest studiowanie i rozumienie określonych rodzajów funkcji. Wielomian nie jest funkcją, chociaż często niedbale je identyfikujemy. Badanie wielomianów nie oznacza, że ​​uważa się, że wszystkie funkcje powinny być wielomianami, ani też nie jest tak, że wielomiany muszą „robić” coś „nowego”, aby być wartym przestudiowania.

Ustawione funkcje teoretyczne nie są czarnymi skrzynkami, chociaż są one całkowicie zdefiniowane przez ich relację wejścia-wyjścia. (Dosłownie ich stosunek wejścia-wyjścia). Wyrażenia lambda nie są również czarne skrzynki i są nie zdefiniowane przez ich relacji nadawczo-odbiorczego. Jak już wspomniałem wcześniej, możesz mieć różne wyrażenia lambda, które wytwarzają tę samą relację przepływów międzygałęziowych. Podkreśla to również fakt, że terminy lambda nie mogą być funkcjami, ale mogą indukować funkcje. 2)

W rzeczywistości analogia między wielomianami a terminami lambda jest bardzo bliska i podejrzewam, że możesz nie docenić różnicy między wielomianem a funkcją, którą reprezentuje, więc rozwinę trochę. 3 Zazwyczaj po wprowadzeniu wielomianów, zwykle o rzeczywistych współczynnikach, są one traktowane jako rzeczywiste funkcje określonego typu. Rozważmy teraz teorię rejestrów przesuwnych z liniowym sprzężeniem zwrotnym (LFSR). Jest to w dużej mierze teoria wielomianów ) w stosunku do , ale jeśli uważamy to za funkcję od , to są najwyżej takie funkcje. Istnieje jednak nieskończona liczba wielomianów w . 4F2F 2 F 2 4 F 2 F 2 F 2 F 2 2 N 2 N. F2F24F2Jednym ze sposobów na to jest to, że możemy interpretować te wielomiany jako coś innego niż , w rzeczywistości każda zrobi to. W przypadku LFSR zwykle interpretujemy wielomiany jako operacje na strumieniach bitów, które, jeśli chcemy, mogą być reprezentowane jako funkcje , chociaż zdecydowana większość takich funkcji nie byłaby obrazem interpretacji LFSR.F2F2F22N2N

Dotyczy to również terminów lambda, możemy interpretować oba z nich jako rzeczy inne niż funkcje. Są to zarówno znacznie łatwiejsze w obsłudze obiekty do pracy niż typowo nieskończenie nieskończone zestawy funkcji. Oba są znacznie bardziej obliczeniowe niż funkcje arbitralne. Potrafię napisać program do manipulowania wielomianami (o współczynnikach, które co najmniej są obliczalne) i wyrażeniami lambda. Rzeczywiście, niepoprawione terminy lambda są jednym z oryginalnych modeli funkcji obliczalnych. Ta bardziej symboliczna / syntaktyczna, obliczeniowa / obliczeniowa perspektywa jest zwykle bardziej podkreślana, szczególnie w przypadku niepisanego rachunku lambda, niż bardziej semantyczne interpretacje rachunku lambda. WpisanyTerminy lambda są znacznie łatwiejsze w zarządzaniu i zwykle (choć nie zawsze) można je łatwo interpretować jako ustawione funkcje teoretyczne, ale zwykle można je interpretować jako jeszcze szerszą klasę rzeczy oprócz funkcji niż niepoprawny rachunek lambda. Mają też bogatą własną teorię syntaktyczną i bardzo głębokie powiązanie z logiką .

1 Możliwe, że problem może pójść w drugą stronę. Być może masz nieporozumienie na temat funkcji.

2 W rzeczywistości nie jest to takie proste. W przypadku niepisanego rachunku lambda tak naprawdę nie ma sensu naiwnie interpretować arbitralnych terminów lambda jako funkcji teoretycznych . Możesz zacząć to dostrzegać, próbując wyrazić, jaka powinna być dziedzina interpretacji. Jeśli interpretuję termin lambda jako element zestawu , chcę również móc interpretować go jako funkcję na i na ponieważ chcę interpretować aplikację jako aplikację funkcji. Skończysz na (lub jego osłabienie), co jest prawdziwe tylko dla zestawu singletonów. Tym, czego potrzebujemy do nietypowego rachunku lambda, jest obiekt refleksyjnyDDDDDD, a dla kategorii zestawów nie ma nietrywialnych obiektów refleksyjnych. Historia jest nieco inna w przypadku typowanych wyrażeń lambda, ale wciąż może być nietrywialna.

3 Jeśli jasno rozumiesz to rozróżnienie, wówczas analogia powinna być bardzo pouczająca.

4 Ten problem nie występuje w przypadku pól o charakterystyce 0, takich jak liczby zespolone, liczby rzeczywiste, liczby wymierne lub liczby całkowite, więc rozróżnienie nie jest tak wyraźne, choć nadal istnieje.


8
To niesamowita odpowiedź, którą muszę powiedzieć. Naprawdę wyjaśnia mi długie nieporozumienia. Dzięki!
the0ther

4
Chciałbym móc szczegółowo na to odpowiedzieć! Wiele rzeczy chciałbym kontynuować. Ogólnie rzecz biorąc, było to dla mnie bardzo przydatne i najwyraźniej także dla kilku innych osób, więc dziękuję za dokładną i przemyślaną odpowiedź.
Neil

1
Jest tylko jedna kwestia, z którą będę się tutaj zajmować, a mianowicie twoje twierdzenie, że wielomiany nie muszą „robić” czegoś „nowego”, aby być wartym przestudiowania. Oczywiście, że tak! Oczywiście, w zależności od dziedziny, „nowy” może mieć różne znaczenia (np. Czysty matematyk nie rozróżnia wektorów kolumnowych i wektorów wierszowych, ponieważ są one izomorficzne, ale statystycy mogą uznać to rozróżnienie za przydatne do obliczeń). Każdy nowy formalizm musi się usprawiedliwić.
Neil

2
@Neil: W szczególności przypis 2 zawiera pewne bardzo wyraźne dowody na to, że rachunek lambda „robi coś nowego”, czego „zwykłe” funkcje „nie mogą zrobić”. Aby uzyskać bardziej konkretny przykład nieuzasadnionego wyrażenia lambda, zobacz kombinatory stałoprzecinkowe . Te cyfry Kościół także do fascynującej lektury, zwłaszcza funkcji poprzednika.
Kevin

1
Dodałbym, że lambda, ponieważ funkcje nie robią nic użytecznego. Jedyne, co możesz zrobić z lambda, to przekazać jej lambda, a ona zwróci lambda. Nie ma sposobu, aby sprawdzić, co robi wynikowa lambda. Możesz przekazać mu tylko inną lambda, aby otrzymać w zamian kolejną lambdę. Jako funkcje zestaw „funkcji lambda” zachowuje się dokładnie tak jak zestaw singletonów zawierający tylko funkcję tożsamości. Jedynie poprzez uwzględnienie danych wejściowych i wyjściowych lambda jako wyrażeń można rozróżnić lambda.
Florian F,

0

Pomyśl o koncepcji zmiennych. W starych językach, takich jak podstawowy, nie miałeś alokacji dynamicznej i potrzebujesz jednej nazwy dla każdej zmiennej. (Nie jest to do końca dokładne, ponieważ masz tablice, ale chodzi o to, że ...) w wielu problemach musisz być w stanie przydzielić tyle zmiennych, ile chcesz, bez ograniczenia liczby nazw definiowanych przez twój program.

Funkcje Lambda pozwalają pozbyć się tego samego ograniczenia dotyczącego nazw funkcji, umożliwiając Twojemu programowi zdefiniowanie tylu funkcji, ile potrzebuje i „przechowywanie” ich w tych samych złożonych strukturach danych, co innych zmiennych. Nie jest to coś, co można zrobić z konwencjonalnymi nazwanymi funkcjami.


Dlaczego nie mogę tego zrobić z konwencjonalnymi nazwanymi funkcjami? Jeśli napiszę f(x)=let g(y)=x+y in g, każdy matematyk natychmiast zrozumie, co to znaczy, i zgodzi się, że jest to rozsądny obiekt matematyczny (być może nawet pewne spory dotyczące jasności co do dziedziny f). Będą również bardzo szczęśliwi, jeśli następnie zapiszę zestaw {f(n) | n ∈ ℕ}, który zawiera nieskończenie wiele funkcji, a w szczególności nie jest ograniczony tylko przez skończoną liczbę nazw do użycia.
Daniel Wagner

Pytanie dotyczy rachunku lambda. Chociaż jest to powiązane, to nie to samo, co funkcje lambda w językach programowania.
Andy Dent
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.