Arytmetyka w rachunku lambda
Arytmetyka w rachunku lambda – rodzaj arytmetyki związanej z rachunkiem lambda, opierającej się na liczbach naturalnych Churcha.
Następnik
edytujFunkcja
następnika jest zdefiniowana następująco:Procedura ta nie robi nic innego jak „dodaje” jeszcze jedno wywołanie funkcji do pewnej liczby, przez co staje się ona liczbą o jeden większą.
Dodawanie
edytujAby dodać dwie liczby naturalne Churcha
i należy -krotnie zastosować funkcję następnika do liczby (lub na odwrót, dodawanie jest przemienne):Z definicji liczb naturalnych Churcha wiemy, że wywołując funkcję pewnej liczby
na dwóch argumentach – funkcji i zmiennej stosujemy funkcję -krotnie do zmiennejMnożenie
edytujMnożenie w rachunku lambda zdefiniowane jest następująco:
Obliczając według tej funkcji iloczyn
-krotnie powielamy term po czym podstawiając przy każdym -owym powieleniu, dostajemy wywołań – w sumiePoprzednik
edytujPoprzednikiem liczby
nazywamy taką liczbę że następnikiem liczby jest (liczba nie ma poprzednika, przez co jest ona poprzednikiem siebie samej). W zapisie matematycznym:W rachunku lambda stworzenie takiej funkcji nie jest tak łatwe jak stworzenie funkcji następnika
Do tego posługujemy się strukturami danych opisanymi w artykule rachunek lambda.Tworzymy funkcję
która z pary tworzy paręFunkcja poprzednika
liczby jest zdefiniowana jako -krotna aplikacja funkcji do pary a potem pobranie drugiego jej elementu:Odejmowanie
edytujOdejmowanie, podobnie jak w przypadku dodawania, jest zdefiniowane jako wielokrotna aplikacja funkcji poprzednika (w tym wypadku pamiętając o przemienności – odejmowanie przemienne nie jest):
Potęgowanie
edytujAby policzyć potęgę
należy wykorzystać to, że jest naturalne. Wiadomo, że:Tak więc na przykład
w rachunku lambda będzie zapisane jako:Widzimy, że jest to parokrotna aplikacja funkcji
– można by posłużyć się podobnym algorytmem jak przy dodawaniu lub odejmowaniu, gdyby nie to, że jest funkcją dwuargumentową. W takim wypadku możemy zdefiniować funkcję która pobiera parę i zwraca paręWięc aplikując
-krotnie funkcję do pary i zabierając jej pierwszy element otrzymamy