Typ jest właściwością obliczeń. To, co piszesz po prawej stronie jelita grubego.
Pozwól mi rozwinąć tę kwestię. Zauważ, że terminologia nie jest całkowicie standardowa: niektóre artykuły lub książki mogą używać różnych słów dla niektórych pojęć.
Termin jest elementem składni abstrakcyjnej, która jest przeznaczona do reprezentowania obliczeń. Intuicyjnie jest to parsowane drzewo. Formalnie jest to skończone drzewo, w którym węzły należą do jakiegoś alfabetu. Rachunek bez typu definiuje składnię terminów. Na przykład (nietypowy) rachunek lambda zawiera terminy (zapisane , itd.) Zbudowane z trzech typów węzłów:NM.N.
- zmienne, arity 0 (ich niezliczona kolekcja), zapisane , itd .;yxy
- zastosowanie zmiennej arity 1 (jej niezliczona kolekcja, z bijectmem do zmiennych), zapisany itp .;λ x . M.
- aplikacji z Arity 2, napisany .M.N.
Termin jest konstrukcją składniową. A semantyka dotyczy warunków do obliczeń. Istnieje wiele rodzajów semantyki, z których najczęstszą jest operacyjna (opisująca, w jaki sposób terminy mogą zostać przekształcone w inne terminy) lub denotacyjna (opisująca warunki poprzez transformację w inną przestrzeń, zwykle zbudowaną z teorii mnogości).
Typ jest własnością warunkach. System typów dla rachunku bez typów opisuje, które terminy mają jakie typy. Z matematycznego punktu widzenia system typów jest relacją między terminami i typami. Dokładniej, system typów jest rodziną takich relacji, indeksowaną przez konteksty - zazwyczaj kontekst zapewnia co najmniej typy zmiennych (tzn. Kontekst jest funkcją częściową od zmiennych do typów), tak że termin może mieć tylko typ w kontekstach, które zapewniają typ dla wszystkich wolnych zmiennych. Rodzaj obiektu matematycznego zależy od systemu typów.
Niektóre systemy typów są opisywane typami jako zbiory, używając pojęć teorii zbiorów, takich jak przecięcie, połączenie i zrozumienie. Ma to tę zaletę, że opiera się na znanych podstawach matematycznych. Ograniczeniem tego podejścia jest to, że nie pozwala na rozumowanie na temat równoważnych typów.
Wiele systemów typów opisuje same typy jako terminy w rachunku typów. W zależności od systemu typów mogą to być te same warunki lub różne warunki. Użyję wyrażenia bazowego, aby odnieść się do rachunku różniczkowego opisującego obliczenia. Na przykład, prosty typ rachunku lambda wykorzystuje następujący rachunek typów (zapisany itp.):τ
- typy podstawowe, o rodzaju 0 (ich skończony lub dający się zliczyć zbiór), zapisane , itd .;B.ZAb
- funkcja, arity 2, zapisana .τ0→ τ1
Relacja między terminami i typami, która definiuje prosty typ rachunku lambda, jest zwykle definiowana przez reguły pisania . Reguły pisania nie są jedynym sposobem definiowania systemu typów, ale są wspólne. Działają dobrze w systemach typu kompozycyjnego, tj. Systemach typu, w których typ (-y) terminu jest zbudowany z typów podtermów. Reguły typowania definiują system typów indukcyjnie: każda reguła typowania jest aksjomatem, który stwierdza, że dla dowolnej instancji formuł powyżej reguły poziomej obowiązuje również wzór pod regułą. Zobacz Jak czytać zasady pisania? po więcej szczegółów. Czy istnieje pełny rachunek lambda na maszynie Turinga? może również być interesujące.
W przypadku prostego rachunku lambda, wynik pisania oznacza, że ma typ w kontekście . Pominąłem formalną definicję kontekstów.
M τ Tt x : τ ∈ TtΓ ⊢ M.: τM.τΓ
x : τ∈ ΓΓ ⊢ x : τ( Γ )Γ , x : τ0⊢ M.: τ1Γ ⊢ λ x . M.: τ0→ τ1( → I)Γ ⊢ M.: τ0→ τ1Tt ⊢ N: τ0Γ ⊢ M.N.: τ1( → E)
Na przykład, jeśli i są typami bazowymi, to ma typ w dowolnym kontekście (od dołu do góry, zastosuj dwa razy, a następnie i wreszcie na każdym oddziale).ZAbλ x . λ y. xy( A → B ) → A → B( → I)( → E)( Γ )
Możliwe jest interpretowanie typów prostych rachunków lambda jako zbiorów. Sprowadza się to do podania denotacyjnej semantyki dla typów. Dobra semantyka denotacyjna dla terminów podstawowych przypisuje każdemu terminowi podstawowemu element denotacji wszystkich jego typów.
Intuicyjna teoria typów (znana również jako teoria typu Martina-Löfa) jest bardziej złożona niż zwykły rachunek lambda, ponieważ zawiera znacznie więcej elementów w rachunku typów (a także dodaje kilka stałych do warunków podstawowych). Ale podstawowe zasady są takie same. Ważną cechą teorii typów Martina-Löfa jest to, że typy mogą zawierać terminy podstawowe (są to typy zależne ): wszechświat terminów podstawowych i wszechświat typów są takie same, chociaż można je odróżnić za pomocą prostych reguł składniowych (zwykle znanych jako sortowanie, tj. przypisywanie rodzajów do terminów w teorii przepisywania).
Istnieją systemy typów, które idą dalej i całkowicie mieszają typy i warunki podstawowe, dzięki czemu nie ma rozróżnienia między nimi. Mówi się, że takie systemy typu są wyższego rzędu . W takich kamieni, typy mają typy - typ może pojawić się na lewej stronie z . Rachunek budowy jest paradygmat wyższego rzędu typu zależnych. Kostki lambda (znany również jako sześcian Barendregt'a) systemy klasyfikuje typu pod względem tego, czy pozwalają one na warunkach, które zależą od rodzaju ( polimorfizm - niektóre terminy bazowe zawierają typy jak subterms) rodzaje zależy od warunków (typ zależnego) lub typu zależy na typach ( operatory typów - rachunek typów ma pojęcie obliczeń).:
Większość systemów typów ma semantykę teoretyczną, aby powiązać je ze zwykłymi podstawami matematyki.
W jaki sposób powiązane są języki programowania i podstawy matematyki? a
jaka jest różnica między widokami semantycznymi i syntaktycznymi typów funkcji? może być tutaj interesujące. Trwają również prace nad wykorzystaniem teorii typów jako podstawy matematyki - teoria zbiorów jest historycznym fundamentem, ale nie jest to jedyny możliwy wybór. Teoria typów homotopii jest ważnym kamieniem milowym w tym kierunku: opisuje semantykę umyślnej intuicyjnej teorii typów w kategoriach teorii homotopii i konstruuje teorię zbiorów w tych ramach.
Polecam książki Benjamina Pierce'a Rodzaje i języki programowania oraz postępy Tematy w typach i językach programowania . Są one dostępne dla każdego studenta bez żadnych innych wymagań poza podstawową znajomością formalnego rozumowania matematycznego. TAPL opisuje wiele systemów typów; typy zależne są przedmiotem rozdziału 2 ATTAPL.