Hejto.pl
Dodaj post

Wpisz coś do wyszukania (minimum 2 znaki)

Wpis użytkownika redve w Hydepark

Fanatyk

w Hydepark

48piorunów

Co będzie jeżeli przemnożymy przez siebie dodawanie oraz dodawanie?
Pytanie może sugerować że zadająca je osoba ma udar i bredzi bez sensu, ale w zasadzie, jest to możliwe.

W XIX wieku w matematyce nastąpił kryzys. Okazało się że kilka teorii (teorii, a więc posiadających dowody swojej prawdziwości) jest ze sobą sprzeczne, a dalsze badania ujawniły, że cała metodologia dowodzenia twierdzeń prowadziła do wielu paradoksów, i trzeba było ją wynaleźć od nowa (przykładowo, za pomocą indukcji matematycznej można przeprowadzić zupełnie poprawny dowód twierdzenia, jakoby wszystkie konie były tego samego koloru).
Wtedy też zaczęto się bardziej przyglądać sposobom w jakie uprawiana wtedy była matematyka. Jednym ze skutków było powstanie logiki, arytmetyki Boola, twierdzeń Gödla, ale dzisiaj chcę opisać dziedzinę, znaną jako Rachunek Lambda.
W skrócie? Zakładamy że wszystko jest funkcją.

Rachunek Lambda ma trzy najważniejsze "operatory":
-Zmienna. Jest to coś, co jest argumentem funkcji, używane przez funkcje, i zwracane przez funkcje. Przykładowo, w równaniu
f(x) = x+3
zmienną jest x

-Deklaracja nowej funkcji. Używa ona greckiej litery Lambda (λ_,_ znanej z loga organizacji Black Mesa ). Składa się z tego jaki argument przyjmuje funkcja, i co zwraca. Dobrze czytanie: argument. Nie argumenty. Funkcje w rachunku Lambda w zasadzie mają zawsze tylko jeden argument, i jest cwane obejście problemu funkcji które wymagają więcej argumentów. Przykładem zadeklarowania nowej funkcji, jest f(x) = x+3

Stosowana jest następująca notacja:
λx.x+3
czyli:
λ - znak że deklarujemy nową funkcje
x - zmienna która jest tym co funkcja przyjmuje
x+3 - to co funkcja nam zwraca

-Wywołanie funkcji, przykładowo f(5)=5+3=8

Więc przykładowo, jeżeli chcemy użyć rachunku Lambda do policzenia 5^2, to zapiszemy to jako:
(λx.x^2)(5) = 25
w pierwszym nawiasie deklarujemy funkcję, a kolejnymi nawiasami ją wywołujemy.

Czym to się różni od "klasycznej" matematyki? Pokażemy to na przykładzie:
W klasycznej matematyce, liczby naturalne i dodawanie są zdefiniowane za pomocą aksjomatów Peano:

1. 1 jest liczbą naturalną
2. jeżeli a jest liczbą naturalną, to a+1 również jest liczbą naturalną
3. nie istnieje taka liczba naturalna a, że a+1 = 1
4. a + (b+1) = (a+b) + 1

Pierwsze dwa aksjomaty pozwalają nam powiedzieć, że 2 oraz 3 są liczbami naturalnymi. Czwarty aksjomat mówi nam o tym w jaki sposób je ze sobą dodać:

* 2 = (1+1) = (0 + 1 + 1), 3 = (0 + 1 + 1 + 1)
* 2 + 3 = 2 + (2 + 1) = (2 + 2) + 1 = (2 + (1 + 1)) + 1 = ((2 + 1) + 1) + 1 = 5

Z kolei w rachunku Lambda, liczby definiujemy w następujący sposób:

1. 0 = λf.λx.x
2. Jeżeli x jest n-tą liczbą naturalną (w myśl obecnej definicji), to (n+1) liczba jest dana wzorem λf.λx.f(x)

Czyli 0 jest funkcją, która przyjmuje jako argument pewne "f", i zwraca funkcję która dla dowolnego argumentu x zwraca x, a każda kolejna liczba naturalna N jest funkcją która przyjmuje jako argument funkcję f, oraz argument x, i zwraca funkcję f złożoną z samą sobą N razy.
Zagmatwane? No k⁎⁎wa raczej że tak xD ale pokażemy to na przykładzie:
Niech naszą funkcją f będzie znany sinus, a x pewną liczbą rzeczywistą.
W takim wypadku:
0(f, x) = x
1(f, x) = sin(x)
2(f, x) = sin(sin(x))
3(f,x) = sin(sin(sin(x)))
...

no, albo możemy np. napisać
3(λx.x^2, 3) = (((3^2)^2)^2) = 6561

Zastosowałem tutaj jednak pewien skrót, którego wcześniej nie opisałem.
Funkcja 3 jest zgodnie z tym co pisałem wyżej funkcją tylko jednego argumentu, a ja tutaj użyłem dwóch. Troche nielegalizm.
Jak więc zdefiniować funkcję kilku argumentów, na przykład dodawanie?
A no tak:
funkcja add(x,y) której wynikiem będzie x+y, będzie zdefiniowana jako:
add = λx.λy.x+y
czyli funkcja add jest funkcją która przyjmuje jakiś argument (np. 3), i zwraca funkcję która zwraca wynik dodawania jakiegoś y z podanym x. W takim wypadku więc add(3) jest funkcją, która przyjmuje jako argument pewien y, i zwraca wynik operacji y+3

Pokręcone? Tak, ale taki system pozwala nam zrobić w nim właściwie wszystko, włącznie z mnożeniem funkcji przez siebie.
Jako że ten wpis jest już dosyć długi, to zostawię was z samym rozwiązaniem, oraz filmem który to lepiej rozwija:
https://www.youtube.com/watch?v=RcVA8Nj6HEo
Teraz możecie zupełnie śmiało powiedzieć, że +*+(3)(1)(3)(2)=262144

Komentarze (10)

Koneser1piorunów

O takie hejto walczę nie robiąc nic. Czekam na więcej. Łap pieruna

Mocarz2piorunów

Piękny wpis, więcej takich prosze

Gruba ryba2piorunów

@redve rachunek lambda to jedna z pierwszych rzeczy w moim zyciu, przy ktorych stwierdzilem, ze nie jestem tak madry, jak mi sie zawsze wydawalo. Po⁎⁎⁎⁎ne gowno

GURU10piorunów

@redve Dałbym Ci 10 piorunów, gdybym mógł. Bo temat jest mile przedstawiony i ciekawy. Poza tym, dostatecznie abstrakcyjny. (miałem rachunek lambda lata temu i używam go - tak, można używać takich rzeczy 😁 )

GURU8piorunów

Nic nie rozumiem... Brzmi mądrze... Piorun...

Gruba ryba3piorunów

@sireplama haha właśnie chciałem napisać coś w tym stylu xD xD

Autorytet4piorunów

Bardzo ładny wpis.