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ć.

  1. ^ 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 .
  2. ^   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 .
  3. ^   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 .
  4. ^   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 .
  5. ^    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 .