rachunek kappa
W logice matematycznej , teorii kategorii i informatyce rachunek kappa jest formalnym systemem definiowania funkcji pierwszego rzędu .
W przeciwieństwie do rachunku lambda , rachunek kappa nie ma funkcji wyższego rzędu ; jego funkcje nie są obiektami pierwszej klasy . Rachunek kappa można uznać za „przeformułowanie fragmentu pierwszego rzędu wpisanego rachunku lambda”.
Ponieważ jego funkcje nie są obiektami pierwszej klasy, ocena wyrażeń rachunku różniczkowego kappa nie wymaga domknięć .
Definicja
Poniższa definicja została zaadaptowana z diagramów na stronach 205 i 207 Hasegawy.
Gramatyka
Rachunek kappa składa się z typów i wyrażeń podanych w poniższej gramatyce:
Innymi słowy,
- 1 jest typem
- τ i są typami, to jest typem.
- Każda zmienna jest wyrażeniem
- Jeśli τ jest typem, to jest wyrażeniem
- Jeśli τ jest typem, to jest wyrażeniem
- Jeśli τ jest typem, a e jest wyrażeniem, to winda jest wyrażeniem.
- mi i są wyrażeniami, to wyrażeniem
- Jeśli x jest zmienną, τ jest typem, a e jest wyrażeniem, to jest wyrażeniem
The i indeksy dolne id , ! i gdy można je jednoznacznie określić na podstawie kontekstu.
Zestawienie jest często używane jako skrót dla kombinacji i kompozycji:
Zasady pisania
Prezentacja tutaj wykorzystuje sekwencje ( aby ułatwić porównanie z prostym typem Wymaga to dodatkowej reguły Var, która nie występuje w Hasegawie
W rachunku kappa wyrażenie ma dwa typy: typ jego źródła i typ jego celu . Mi jest używane do wskazania, że wyrażenie e ma typ źródła i typ docelowy .
Wyrażeniom w rachunku kappa przypisuje się typy według następujących zasad:
(Wartość) (ID) (Huk) (komp.) (Winda) (kapa)
Innymi słowy,
- Var: przy założeniu pozwala stwierdzić, że
- Id: dla dowolnego typu τ ,
- Bang: dla dowolnego typu τ ,
- Komp: jeśli typ docelowy pasuje do typu źródłowego mogą być skomponowane w celu utworzenia wyrażenia z typem źródła docelowym mi
- mi : to
- Kappa: jeśli możemy stwierdzić, że przy założeniu, że bez tego założenia możemy wnioskować , że
Równości
Rachunek Kappa przestrzega następujących równości:
- Neutralność: Jeśli wtedy fa
- Asocjatywność: Jeśli , i , a następnie .
- Końcowość: Jeśli i wtedy
- Redukcja podnoszenia:
- Redukcja Kappa: jeśli x nie jest wolne w h
Ostatnie dwie równości to reguły redukcji rachunku różniczkowego, przepisując je od lewej do prawej.
Nieruchomości
Typ 1 można uznać za typ jednostki . Z tego powodu dowolne dwie funkcje, których typ argumentu jest taki sam, a typ wyniku to 1 , powinny być równe – ponieważ istnieje tylko jedna wartość typu 1 , obie funkcje muszą zwracać tę wartość dla każdego argumentu ( Terminality ).
Wyrażenia typu traktować jako „stałe” lub wartości „typu podłoża”; dzieje się tak, ponieważ 1 jest typem jednostki, a zatem funkcja tego typu jest z konieczności funkcją stałą. Zauważ ma typ dla τ . Jest to podstawowy mechanizm, który zapewnia, że wszystkie funkcje są pierwszego rzędu.
Semantyka kategoryczna
Rachunek kappa ma być wewnętrznym językiem kategorii kontekstowo pełnych .
Przykłady
Wyrażenia z wieloma argumentami mają typy źródeł, które są drzewami binarnymi „niezrównoważonymi w prawo”. Na przykład funkcja f z trzema argumentami typu A, B i C oraz typem wyniku D będzie miała typ
Jeśli zdefiniujemy lewe zestawienie asocjacyjne skrót dla to - zakładając, że za , i - możemy zastosować tę funkcję:
Ponieważ wyrażenie typ źródłowy , jest to „wartość podstawowa” i może zostać przekazane jako argument do Jeśli , to
funkcja w :
są zaangażowane żadne wyższe typy (tj. Zauważ, że ponieważ typem źródłowym fa nie jest 1 , następujące wyrażenie nie może zostać poprawnie wpisane przy dotychczasowych założeniach:
Ponieważ kolejne zastosowanie jest używane dla wielu argumentów, nie jest konieczna znajomość liczby funkcji , aby określić jej typ; na przykład, jeśli wiemy, że to wyrażenie
- jc
jest dobrze wpisany, o ile j ma typ
- dla pewnego α
i β . Ta właściwość jest ważna przy obliczaniu głównego typu wyrażenia, co może być trudne przy próbie wykluczenia funkcji wyższego rzędu z typowanych rachunków lambda poprzez ograniczenie gramatyki typów.
Historia
Barendregt pierwotnie wprowadził termin „kompletność funkcjonalna” w kontekście algebry kombinatorycznej. Rachunek Kappa powstał w wyniku wysiłków Lambeka zmierzających do sformułowania odpowiedniego odpowiednika kompletności funkcjonalnej dla dowolnych kategorii (patrz Hermida i Jacobs, sekcja 1). Hasegawa rozwinął później rachunek kappa w użyteczny (choć prosty) język programowania, w tym arytmetykę na liczbach naturalnych i prymitywną rekurencję. Połączenia ze strzałami zostały później zbadane przez Powera, Thielecke i innych.
Warianty
Możliwe jest eksplorowanie wersji rachunku kappa z typami podstrukturalnymi, takimi jak typy liniowe , afiniczne i uporządkowane . Te rozszerzenia wymagają wyeliminowania lub ograniczenia wyrażenie. W takich okolicznościach × nie jest prawdziwym iloczynem kartezjańskim i jest zwykle zapisywany jako ⊗ , aby to wyjaśnić.
-
^ abcd Hasegawa , Masahito (
1995). „Rozkład wpisanego rachunku lambda na kilka kategorycznych języków programowania”. W Pitt, David; Rydeheard, David E.; Johnstone, Peter (red.). Teoria kategorii i informatyka . Teoria kategorii i informatyka: 6. Międzynarodowa Konferencja, CTCS '95 Cambridge, Wielka Brytania, 7–11 sierpnia 1995 Proceedings . Notatki z wykładów z informatyki. Tom. 953. Springer-Verlag Berlin Heidelberg. s. 200–219. CiteSeerX 10.1.1.53.715 . doi : 10.1007/3-540-60164-3_28 . ISBN 978-3-540-60164-7 . ISSN 0302-9743 .
- Adama (31 sierpnia 2010). „Czym są kategorie κappa?” . Przepełnienie matematyki .
- ^ Barendregt, Hendrik Pieter, wyd. (1 października 1984). Rachunek lambda: jego składnia i semantyka . Studia z logiki i podstaw matematyki . Tom. 103 (wyd. Poprawione). Amsterdam, Holandia Północna: Elsevier Science. ISBN 978-0-444-87508-2 .
-
^
Lambek, Joachim (1 sierpnia 1973). „Funkcjonalna kompletność kategorii kartezjańskich” . Annals of Mathematical Logic (opublikowane w marcu 1974). 6 (3–4): 259–292. doi : 10.1016/0003-4843(74)90003-5 . ISSN 0003-4843 .
- Adama (31 sierpnia 2010). „Czym są kategorie κappa?” . Przepełnienie matematyki .
- ^ Hermida, Claudio; Jacobs, Bart (grudzień 1995). „Fibracje z nieokreślonościami: kompletność kontekstualna i funkcjonalna dla polimorficznych rachunków lambda” . Struktury matematyczne w informatyce . 5 (4): 501–531. doi : 10.1017/S0960129500001213 . ISSN 1469-8072 .
- ^ Moc, Jan; Thielecke, Hayo (1999). Wiedermann, Jiří; van Emde Boas, Peter ; Nielsen, Mogens (red.). kategorie Freyda i κ . Automaty, języki i programowanie: 26. Międzynarodowe Kolokwium, ICALP'99 Praga, Czechy, 11–15 lipca 1999 Proceedings . Notatki z wykładów z informatyki. Tom. 1644. Springer-Verlag Berlin Heidelberg. s. 625–634. CiteSeerX 10.1.1.42.2151 . doi : 10.1007/3-540-48523-6_59 . ISBN 978-3-540-66224-2 . ISSN 0302-9743 .