Arytmetyka w rachunku lambda

Z Wikipedii, wolnej encyklopedii

Arytmetyka w rachunku lambda – rodzaj arytmetyki związanej z rachunkiem lambda, opierającej się na liczbach naturalnych Churcha.

Następnik[edytuj | edytuj kod]

Funkcja 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[edytuj | edytuj kod]

Aby dodać dwie liczby naturalne Churcha i należy -krotnie zaaplikować 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 aplikujemy funkcję -krotnie do zmiennej

Mnożenie[edytuj | edytuj kod]

Mnoż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 sumie

Poprzednik[edytuj | edytuj kod]

Poprzednikiem 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[edytuj | edytuj kod]

Odejmowanie, 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[edytuj | edytuj kod]

Aby 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