Kostka lambdy
W logice matematycznej i teorii typów , sześcian λ (również zapisany sześcian lambda ) jest strukturą wprowadzoną przez Henka Barendregta w celu zbadania różnych wymiarów, w których rachunek konstrukcji jest uogólnieniem prostego rachunku λ . Każdy wymiar sześcianu odpowiada nowemu rodzajowi zależności między terminami i typami. Tutaj „zależność” odnosi się do zdolności terminu lub typu do wiązania terminu lub typu. Odpowiednie wymiary sześcianu λ odpowiadają:
- oś x ( ): typy, które mogą wiązać terminy, odpowiadające typom zależnym .
- oś y ( terminy, które mogą wiązać typy, odpowiadające polimorfizmowi .
- oś z ( typy, które mogą wiązać typy, odpowiadające (wiążącym) operatorom typów .
Różne sposoby łączenia tych trzech wymiarów dają 8 wierzchołków sześcianu, z których każdy odpowiada innemu rodzajowi systemu typowania. Sześcian λ można uogólnić na koncepcję systemu typu czystego .
Przykłady systemów
(λ→) Po prostu wpisany rachunek lambda
Najprostszym systemem znalezionym w kostce λ jest po prostu wpisany rachunek lambda , zwany także λ→. W tym systemie jedynym sposobem na skonstruowanie abstrakcji jest uzależnienie terminu od terminu , z regułą pisania
(λ2) Układ F
W Systemie F (nazywanym również λ2 od „rachunku lambda wpisanego drugiego rzędu”) istnieje inny typ abstrakcji, zapisany za pomocą , który pozwala terminom zależeć od typów , z następującą regułą:
Terminy zaczynające się na nazywane polimorficznymi , ponieważ można je zastosować do różnych typów, aby uzyskać różne funkcje, podobnie jak funkcje polimorficzne w językach podobnych do ML . Na przykład tożsamość polimorficzna
zabawa x -> x
OCaml ma typ
' a -> ' a
co oznacza, że może przyjąć argument dowolnego typu „a”
i zwrócić element tego typu. Ten typ odpowiada w λ2 typowi .
(λ ω ) Układ F ω
W Systemie wprowadzono konstrukcję typów dostaw zależnych innych Nazywa się to konstruktorem typu i umożliwia zbudowanie „funkcji z typem jako wartością ”. Przykładem takiego konstruktora typu jest , gdzie „ ” nieformalnie oznacza „ jest typem”. Jest funkcja, która przyjmuje parametr typu typ s wartości typu . W programowaniu konkretnym funkcja ta odpowiada możliwości definiowania konstruktorów typów wewnątrz języka, a nie traktowania ich jako prymitywów. Poprzedni konstruktor typu z grubsza odpowiada następującej definicji drzewa z etykietowanymi liśćmi w OCaml:
wpisz „ drzewo = | _ Liść ' a | _ Węzeł ' drzewa * ' drzewa _ _ _
Ten konstruktor typów można zastosować do innych typów w celu uzyskania nowych typów. Np. aby otrzymać rodzaj drzew liczb całkowitych:
wpisz int_tree = int drzewo
System generalnie nie jest używany samodzielnie, ale jest przydatny do izolowania niezależnej funkcji
(λP) Lambda-P
W systemie λP , zwanym także ΛΠ, i blisko spokrewnionym z LF Logical Framework , istnieją tak zwane typy zależne . Są to typy, które mogą zależeć od warunków . Kluczową zasadą wprowadzenia systemu jest
gdzie reprezentuje prawidłowe typy. Konstruktor nowego typu odpowiada poprzez izomorfizm -Howarda uniwersalnemu kwantyfikatorowi, a system λP jako całość odpowiada logice pierwszego rzędu z implikacją tylko łącznikiem. Przykładem tych typów zależnych w programowaniu konkretnym jest typ wektorów na określonej długości: długość jest terminem, od którego zależy typ.
(Fω) Układ Fω
System Fω łączy zarówno konstruktora Systemu F, jak i konstruktorów typów z Systemu fa . Λ . W ten sposób System Fω zapewnia zarówno terminy zależne od typów, jak i typy zależne od typów .
(λC) Rachunek konstrukcji
W rachunku konstrukcji , oznaczonym jako λC w sześcianie lub jako λPω, te cztery cechy współistnieją, tak że zarówno typy, jak i wyrazy mogą zależeć od typów i wyrazów. Wyraźna granica, która istnieje w λ → między terminami i typami, jest nieco zniesiona, ponieważ wszystkie typy oprócz uniwersalnego terminami z typem.
Definicja formalna
Jak w przypadku wszystkich systemów opartych na prostym typie rachunku lambda, wszystkie systemy w kostce są podane w dwóch krokach: najpierw surowe terminy wraz z pojęciem β-redukcji, a następnie wpisanie reguł pozwalających na wpisanie tych wyrazów.
Zbiór literę _ Istnieje również zestaw przez litery . Surowe terminy ośmiu systemów sześcianu są podane w następującej składni:
i _ , gdy nie występuje za darmo w .
Środowisko, jak to zwykle bywa w systemach typowanych, jest podane przez
Pojęcie β-redukcji jest wspólne dla wszystkich układów w kostce. Jest napisane i podane przez zasady.
Następujące zasady wpisywania są również wspólne dla wszystkich systemów w kostce:
zgodność między systemami a parami jest następująca:
λ→ | ||||
λP | ||||
λ2 | ||||
λ ω | ||||
λP2 | ||||
λP ω | ||||
λω | ||||
λC |
Każdy kierunek sześcianu odpowiada jednej parze (z wyłączeniem pary współdzielonej przez wszystkie systemy zależności między terminami i
- pozwala terminom zależeć od warunków.
- pozwala typom zależeć od terminów.
- pozwala terminom zależeć od typów.
- pozwala typom zależeć od typów.
Porównanie systemów
λ→
Typowe wyprowadzenie, które można uzyskać, to
Moc obliczeniowa jest dość słaba, odpowiada wielomianom rozszerzonym (wielomiany wraz z operatorem warunkowym).
λ2
W λ2 można otrzymać takie wyrazy jak
Polimorfizm pozwala również na konstruowanie funkcji, które nie były konstruowalne w λ→. Dokładniej, funkcje możliwe do zdefiniowania w λ2 są funkcjami dającymi się udowodnić w arytmetyce Peano drugiego rzędu . W szczególności wszystkie prymitywne funkcje rekurencyjne są definiowalne.
λP
W λP możliwość posiadania typów zależnych od terminów oznacza, że można wyrażać predykaty logiczne. Na przykład można wyprowadzić:
co odpowiada, poprzez izomorfizm Curry'ego-Howarda, dowodowi . Jednak z obliczeniowego punktu widzenia posiadanie typów zależnych nie zwiększa mocy obliczeniowej, a jedynie możliwość wyrażenia bardziej precyzyjnych właściwości typów.
Reguła konwersji jest bardzo potrzebna w przypadku typów zależnych, ponieważ umożliwia wykonywanie obliczeń na warunkach w typie. Na przykład, jeśli masz i ZA móc pisać .
λω
W λω następujący operator
Z obliczeniowego punktu widzenia λω jest niezwykle silne i zostało uznane za podstawę języków programowania.
λC
Rachunek konstrukcji ma zarówno wyrazistość predykatów λP, jak i moc obliczeniową λω, stąd λC jest również nazywany λPω, a więc jest bardzo potężny, zarówno po stronie logicznej, jak i obliczeniowej.
Stosunek do innych systemów
Z logicznego punktu widzenia system Automath jest podobny do λ2. Języki ML-podobne z punktu widzenia typowania leżą gdzieś pomiędzy λ→ a λ2, ponieważ dopuszczają ograniczony rodzaj typów polimorficznych, czyli typów w postaci normalnej prenex. Jednakże, ponieważ zawierają one pewne operatory rekurencji, ich moc obliczeniowa jest większa niż λ2. System Coq opiera się na rozszerzeniu λ C z liniową hierarchią wszechświatów, a nie tylko jednym nietypowalnym zdolności konstruowania typów indukcyjnych.
Systemy typu czystego można postrzegać jako uogólnienie sześcianu z dowolnym zestawem rodzajów, aksjomatów, iloczynów i reguł abstrakcji. I odwrotnie, systemy kostki lambda można wyrazić jako systemy typu czystego z dwoma rodzajami aksjomatem i zbiór reguł , .
Poprzez izomorfizm Curry'ego-Howarda istnieje zgodność jeden do jednego między systemami w kostce lambda a systemami logicznymi, a mianowicie:
Układ sześcianu | Układ logiczny |
---|---|
λ→ | (Pierwszego rzędu) rachunek zdań |
λ2 | Rachunek zdań drugiego rzędu |
λ ω | Słabo rachunek zdań wyższego rzędu |
λω | Rachunek zdań wyższego rzędu |
λP | (Pierwszy rząd) Logika predykatów |
λP2 | Rachunek predykatów drugiego rzędu |
λP ω | Słaby rachunek predykatów wyższego rzędu |
λC | Rachunek konstrukcji |
. jedynymi spójnikami są \ displaystyle lub w sposób impredicative w logice drugiego i wyższego rzędu. W słabych logikach wyższego rzędu istnieją zmienne dla predykatów wyższego rzędu, ale nie można ich określić ilościowo.
Wspólne właściwości
Cieszą się wszystkie systemy w kostce
- Churcha -Rossera : jeśli i to istnieje takie, że i ;
- właściwość redukcji podmiotu i M to ;
- ZA i b .
Wszystko to można udowodnić na ogólnych systemach typu czystego.
Każdy dobrze wpisany termin w systemie sześcianu jest silnie normalizujący, chociaż ta właściwość nie jest wspólna dla wszystkich systemów typu czystego. Żaden system w kostce nie jest kompletny w sensie Turinga.
Podtypowanie
Podtypowanie jednak nie jest reprezentowane w kostce, mimo że systemy takie jak , znane jako kwantyfikacja ograniczona wyższego rzędu, która łączy podtypowanie i polimorfizm, mają znaczenie praktyczne, fa < i można go dalej uogólnić na operatory typu ograniczonego. Dalsze rozszerzenia pozwalają na definiowanie obiektów czysto funkcjonalnych; systemy te zostały ogólnie opracowane po opublikowaniu artykułu o kostkach lambda.
Pomysł sześcianu pochodzi od matematyka Henka Barendregta (1991). Struktura systemów typu czystego uogólnia kostkę lambda w tym sensie, że wszystkie rogi kostki, jak również wiele innych systemów, można przedstawić jako instancje tej ogólnej struktury. Ta struktura jest starsza niż kostka lambda o kilka lat. W swoim artykule z 1991 roku Barendregt definiuje również rogi sześcianu w tych ramach.
Zobacz też
- W swojej Habilitation à diriger les recherches Olivier Ridoux podaje wycięty szablon sześcianu lambda, a także podwójną reprezentację sześcianu jako ośmiościanu, w którym 8 wierzchołków zastąpiono twarzami, a także podwójną reprezentację jako dwunastościan , gdzie 12 krawędzi zastąpiono ścianami.
- Teoria typów homotopii
Notatki
Dalsza lektura
-
Peyton Jones, Szymon; Meijer, Erik (1997). „Henk: wpisany język pośredni” (PDF) . Microsoftu .
Henk opiera się bezpośrednio na kostce lambda , ekspresyjnej rodzinie typowanych rachunków lambda.
Linki zewnętrzne
- Kostka Lambda Barendregta w kontekście systemów typu czystego autorstwa Rogera Bishopa Jonesa