Kostka lambdy

Kostka lambda. Kierunek każdej strzałki jest kierunkiem włączenia.

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.

Jego zwrotne, przechodnie zamknięcie jest zapisane .

Następujące zasady wpisywania są również wspólne dla wszystkich systemów w kostce:

na parach sortowań, w następujących dwóch regułach

zgodność między systemami a parami jest następująca:

λ→ Yes No No No
λP Yes Yes No No
λ2 Yes No Yes No
λ ω Yes No No Yes
λP2 Yes Yes Yes No
λP ω Yes Yes No Yes
λω Yes No Yes Yes
λC Yes Yes Yes Yes

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

lub za pomocą skrótu strzałkowego
bardzo przypominający tożsamość (typu λ→. Zauważ, że wszystkie użyte typy muszą pojawić się w kontekście, ponieważ jedyne wyprowadzenie, które można wykonać w pustym kontekście, to .

Moc obliczeniowa jest dość słaba, odpowiada wielomianom rozszerzonym (wielomiany wraz z operatorem warunkowym).

λ2

W λ2 można otrzymać takie wyrazy jak

gdzie . Jeśli ktoś odczytuje jako uniwersalną kwantyfikację, poprzez izomorfizm Curry'ego-Howarda, można to postrzegać jako dowód zasady eksplozji. Ogólnie rzecz biorąc, λ2 dodaje możliwość posiadania impredykacyjnych , takich jak , czyli terminów kwantyfikujących wszystkie typy, w tym siebie.
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

. wyprowadzenie
można uzyskać już w λ2, jednak polimorfizm występuje również reguła

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

Linki zewnętrzne