Teoria typów - Type theory

W matematyce , logice i informatyce , wykorzystując układ typu jest formalny system , w którym każdy ma termin „typ”, który określa jego znaczenie i operacje, które mogą być wykonywane na nim. Teoria typów to akademickie studium systemów typów.

Niektóre teorie typów służą jako alternatywy dla teorii mnogości jako podstawy matematyki . Dwa dobrze znane takie teorie są Alonzo Church „s wpisany λ kamienia nazębnego i Per Martin-Löf ” s intuicjonistycznej teoria typu .

Teoria typów została stworzona, aby uniknąć paradoksów w poprzednich założeniach, takich jak naiwna teoria mnogości , logika formalna i systemy przepisywania .

Teoria typów jest ściśle powiązana, aw niektórych przypadkach pokrywa się z systemami typów obliczeniowych , które są funkcją języka programowania używaną do redukcji błędów i ułatwienia pewnych optymalizacji kompilatorów .

Historia

W latach 1902-1908 Bertrand Russell zaproponował różne „teorie typu” w odpowiedzi na swoje odkrycie, że wersja naiwnej teorii mnogości Gottloba Fregego była dotknięta paradoksem Russella . W 1908 Russell doszedł do „rozgałęzionej” teorii typów wraz z „ aksjomatem redukowalności ”, z których oba znalazły się na pierwszym miejscu w Whitehead i Principia Mathematica Russella , opublikowanych w latach 1910-1913. Próbowali rozwiązać paradoks Russella, najpierw tworząc hierarchię. typów, a następnie przypisanie każdej konkretnej matematycznej (i ewentualnie innej) encji do typu. Encje danego typu są zbudowane wyłącznie z encji tych typów, które są niżej w swojej hierarchii, co uniemożliwia przypisanie encji do samej siebie.

W latach 20. XX wieku Leon Chwistek i Frank P. Ramsey zaproponowali teorię typów nierozgałęzionych, obecnie znaną jako „teoria typów prostych” lub teoria typów prostych , która zawaliła hierarchię typów we wcześniejszej teorii rozgałęzionej i jako taka nie wymagała aksjomat redukowalności.

Powszechnie używa się „teorii typów”, gdy te typy są używane z terminem rewrite system . Najbardziej znanym przykładem jest wcześnie Alonzo Church „s po prostu wpisane rachunek lambda . Teoria typów Churcha pomogła systemowi formalnemu uniknąć paradoksu Kleene-Rossera, który dotknął pierwotny nieopisany rachunek lambda. Church wykazał, że może służyć jako podstawa matematyki i był określany mianem logiki wyższego rzędu .

Niektóre inne teorie typu obejmują Per Martin-LOF „s intuicjonistycznej teorię typu , który został fundament stosowane w niektórych obszarach konstruktywnych matematyki . Thierry Coquand dydaktycznego rachunek konstrukcji i jej pochodne są podstawą wykorzystywane przez Coq , Lean i innych. Dziedzina ta jest obszarem aktywnych badań, jak pokazuje teoria typu homotopii .

Podstawowe koncepcje

Współczesna prezentacja systemów typów w kontekście teorii typów została usystematyzowana przez ramy pojęciowe wprowadzone przez Henka Barendregta .

Typ, termin, wartość

W systemie teorii typów termin jest przeciwieństwem typu . Na przykład 4 , 2 + 2 i wszystkie są oddzielnymi terminami z typem nat dla liczb naturalnych. Tradycyjnie po tym terminie występuje dwukropek i jego typ, np. 2 : nat - oznacza to, że liczba 2 jest typu nat . Poza tą opozycją i składnią niewiele można powiedzieć o typach w tym uogólnieniu, ale często są one interpretowane jako pewien rodzaj kolekcji (niekoniecznie zestawów) wartości , do których może szacować termin. Zwykle terminy oznacza się przez e, a typy przez τ . Sposób kształtowania terminów i typów zależy od konkretnego systemu typów i jest uściślany przez pewną składnię i dodatkowe ograniczenia dotyczące prawidłowego sformułowania .

Środowisko pisania, przypisanie typu, ocena typu

Pisanie zwykle odbywa się w jakimś kontekście lub środowisku oznaczonym symbolem . Często środowisko to lista par . Ta para jest czasami nazywana przypisaniem . Kontekst dopełnia powyższą opozycję. Razem tworzą wyrok oznaczony .

Przepisywanie reguł, konwersja, redukcja

Teorie typów mają jawne obliczenia i są one zakodowane w regułach przepisywania terminów. Są to tak zwane reguły konwersji lub, jeśli reguła działa tylko w jednym kierunku, reguła redukcji . Na przykład i są składniowo różnymi terminami, ale pierwszy sprowadza się do drugiego. Ta redukcja jest napisana . Zasady te ustanawiają również odpowiednie równoważności między terminami pisanymi .

Termin sprowadza się do . Ponieważ nie można go dalej redukować, nazywa się to formą normalną . Różne systemy typowanego rachunku lambda, w tym po prostu typizowany rachunek lambda , system F Jeana-Yvesa Girarda oraz rachunek konstrukcji Thierry'ego Coquand'a są silnie normalizujące . W takich systemach pomyślne sprawdzenie typu oznacza dowód wypowiedzenia terminu.

Wpisz zasady

Na podstawie osądów i równoważności reguły wnioskowania o typach można wykorzystać do opisania, w jaki sposób system typów przypisuje typ do konstrukcji składniowych (warunków), podobnie jak w dedukcji naturalnej . Aby były znaczące, reguły konwersji i typów są zwykle ściśle powiązane, jak np. przez właściwość redukcji podmiotu , która może stanowić część poprawności systemu typów.

Problemy decyzyjne

System typu jest naturalnie związany z problemów decyzyjnych od typu kontroli , typability i typ osadnictwa .

Sprawdzanie typu

Problem decyzyjny sprawdzania typu (w skrócie ) to:

Biorąc pod uwagę środowisko typu , termin i typ , zdecyduj, czy terminowi można przypisać typ w środowisku typu .

Rozstrzygalność sprawdzania typu oznacza, że można zweryfikować bezpieczeństwo typu dowolnego tekstu programu (kodu źródłowego).

Typowalność

Problem decyzyjny typowalności (w skrócie ) to:

Biorąc pod uwagę termin , zdecyduj, czy istnieje środowisko typu i typ taki, że termin może być przypisany do typu w środowisku typu .

Wariantem typowalności jest typability wrt. środowisko typu (w skrócie ), dla którego środowisko typu jest częścią danych wejściowych. Jeśli dany termin nie zawiera odniesień zewnętrznych (takich jak zmienne terminów swobodnych), to typowalność pokrywa się z typowalnością wrt. puste środowisko typu.

Typowalność jest ściśle związana z wnioskowaniem o typie . Podczas gdy typowalność (jako problem decyzyjny) dotyczy istnienia typu dla danego terminu, wnioskowanie o typie (jako problem obliczeniowy) wymaga obliczenia rzeczywistego typu.

Rodzaj zamieszkania

Problem decyzyjny typu zamieszkiwania (w skrócie ) to:

Biorąc pod uwagę środowisko typu i typ , zdecyduj, czy istnieje termin , któremu można przypisać typ w środowisku typu .

Paradoks Girarda pokazuje, że zamieszkiwanie typów jest silnie związane ze spójnością systemu typów z korespondencją Curry-Howarda. Aby być zdrowym, taki system musi mieć typy niezamieszkane.

Opozycja terminów i typów może być również postrzegana jako opozycja implementacji i specyfikacji . Poprzez syntezę programów (obliczeniowy odpowiednik) zamieszkiwanie typów (patrz niżej) może być wykorzystywane do konstruowania (całości lub części) programów na podstawie specyfikacji podanej w formie informacji o typie.

Interpretacje teorii typów

Teoria typów jest ściśle powiązana z wieloma dziedzinami aktywnych badań. W szczególności korespondencja Curry-Howard zapewnia głęboki izomorfizm między logiką intuicjonistyczną, typizowanym rachunkiem lambda i kartezjańskimi kategoriami zamkniętymi.

Logika intuicjonistyczna

Oprócz poglądu na typy jako zbiór wartości terminu, teoria typów oferuje drugą interpretację opozycji terminu i typów. Typy mogą być postrzegane jako zdania, a terminy jako dowody . W tym sposobie odczytywania typowania typ funkcji jest postrzegany jako implikacja , czyli jako zdanie, które wynika z .

Teoria kategorii

Język wewnętrzny z kartezjańskim kategorii zamkniętym jest po prostu wpisane rachunek lambda . Ten widok można rozszerzyć na inne typy rachunków lambda. Pewne kartezjańskie kategorie zamknięte, toposy, zostały zaproponowane jako ogólne ustawienie matematyki zamiast tradycyjnej teorii mnogości.

Różnica w stosunku do teorii mnogości

Istnieje wiele różnych teorii mnogości i wiele różnych systemów teorii typów, więc to, co następuje, to uogólnienia.

  • Teoria mnogości opiera się na logice. Wymaga osobnego systemu, takiego jak logika predykatów . W teorii typów pojęcia takie jak „i” i „lub” mogą być zakodowane jako typy w samej teorii typów.
  • W teorii zbiorów element nie jest ograniczony do jednego zbioru. W teorii typów terminy (ogólnie) należą tylko do jednego typu. (Gdyby użyto podzbioru, teoria typów ma tendencję do używania funkcji predykatu, która zwraca prawdę, jeśli termin znajduje się w podzbiorze i zwraca fałsz, jeśli wartość nie jest. Połączenie dwóch typów można zdefiniować jako nowy typ zwany sumą wpisz , który zawiera nowe terminy).
  • Teoria mnogości zwykle koduje liczby jako zbiory. (0 jest zbiorem pustym, 1 jest zbiorem zawierającym zbiór pusty itd. Zobacz teoretyczną definicję liczb naturalnych .) Teoria typów może kodować liczby jako funkcje przy użyciu kodowania Churcha lub bardziej naturalnie jako typy indukcyjne . Typy indukcyjne tworzą nowe stałe dla funkcji następnika i zera, bardzo przypominając aksjomaty Peano .
  • Teoria typów ma proste połączenie z konstruktywną matematyką poprzez interpretację BHK . Można go połączyć z logiką przez izomorfizm Curry-Howarda . Niektóre teorie typów są ściśle związane z teorią kategorii .

Funkcje opcjonalne

Typy zależne

Rodzaj zależny jest typem, który zależy od terminu lub innego typu. Dlatego typ zwracany przez funkcję może zależeć od argumentu funkcji.

Na przykład lista o długości 4 może być innego typu niż lista o długości 5. W teorii typów z typami zależnymi można zdefiniować funkcję, która przyjmuje parametr „n” i zwraca listę zawierające „n” zer. Wywołanie funkcji z 4 dałoby wyraz innego typu niż w przypadku wywołania funkcji z 5.

Innym przykładem jest typ składający się z dowodów, że termin argumentowy ma pewną własność, np. termin typu, np. dana liczba naturalna jest liczbą pierwszą. Zobacz Korespondencja Curry-Howarda .

Typy zależne odgrywają kluczową rolę w intuicjonistycznej teorii typów oraz w projektowaniu funkcjonalnych języków programowania, takich jak Idris , ATS , Agda i Epigram .

Rodzaje równości

Wiele systemów teorii typów ma typ, który reprezentuje równość typów i terminów. Ten typ różni się od wymienialności i jest często oznaczany równością zdań .

W intuicjonistycznej teorii typów typ równości (zwany również typem tożsamości) jest znany jako tożsamość. Jest to rodzaj kiedy to typ i i to zarówno pod względem rodzaju . Termin typu jest interpretowany jako oznaczający, że jest równy .

W praktyce możliwe jest zbudowanie typu, ale nie będzie takiego terminu. W intuicjonistycznej teorii typów nowe warunki równości zaczynają się od refleksyjności. Jeżeli jest terminem typu , to istnieje termin typu . Bardziej skomplikowane równości można stworzyć, tworząc zwrot zwrotny, a następnie dokonując redukcji z jednej strony. Więc jeśli jest terminem typu , to istnieje termin typu i poprzez redukcję generujemy termin typu . Zatem w tym systemie typ równości oznacza, że ​​dwie wartości tego samego typu można zamienić przez redukcje.

Posiadanie typu równości jest ważne, ponieważ można nim manipulować w systemie. Zwykle nie ma osądu, aby powiedzieć, że dwa warunki nie są równe; zamiast tego, tak jak w interpretacji Brouwera–Heytinga–Kolmogorova , mapujemy do , gdzie jest typem dolnym, który nie ma wartości. Istnieje termin z typem , ale nie z typem .

Teoria typów homotopii różni się od teorii typów intuicjonistycznych głównie tym, że zajmuje się typem równości.

Typy indukcyjne

System teorii typów wymaga pewnych podstawowych terminów i typów do działania. Niektóre systemy budują je z funkcji wykorzystujących kodowanie Church . Inne systemy mają typy indukcyjne : zestaw typów bazowych i zestaw konstruktorów typów, które generują typy o dobrze zachowujących się właściwościach. Na przykład pewne funkcje rekurencyjne wywoływane na typach indukcyjnych mają gwarancję zakończenia.

Typy koindukcyjne to nieskończone typy danych tworzone przez nadanie funkcji, która generuje następny element (elementy). Zobacz Koindukcja i współkursje .

Indukcja to funkcja do deklarowania typu indukcyjnego i rodziny typów, która zależy od typu indukcyjnego.

Rekurencja indukcyjna umożliwia szerszy zakres dobrze zachowujących się typów, umożliwiając jednoczesne zdefiniowanie typu i funkcji rekurencyjnych na nim działających.

Typy wszechświata

Typy zostały stworzone, aby zapobiec paradoksom, takim jak paradoks Russella . Jednak motywy, które prowadzą do tych paradoksów – możliwość mówienia rzeczy o wszystkich typach – nadal istnieją. Tak więc wiele teorii typów ma „typ wszechświata”, który zawiera wszystkie inne typy (a nie sam).

W systemach, w których możesz chcieć powiedzieć coś o typach wszechświatów, istnieje hierarchia typów wszechświatów, z których każdy zawiera ten znajdujący się poniżej w hierarchii. Hierarchię definiuje się jako nieskończoną, ale stwierdzenia muszą odnosić się tylko do skończonej liczby poziomów wszechświata.

Wszechświaty typów są szczególnie trudne w teorii typów. Początkowa propozycja teorii typów intuicjonistycznych cierpiała na paradoks Girarda .

Komponent obliczeniowy

Wiele systemów teorii typów, takich jak rachunek lambda z prostym typem , intuicjonistyczna teoria typów i rachunek konstrukcji , to także języki programowania. Oznacza to, że mówi się, że mają „komponent obliczeniowy”. Obliczenie polega na redukcji wyrazów języka za pomocą reguł przepisywania .

System teorii typów, który ma dobrze zachowany komponent obliczeniowy, ma również proste połączenie z konstruktywną matematyką poprzez interpretację BHK .

Matematyka niekonstruktywna w tych systemach jest możliwa dzięki dodaniu operatorów na kontynuacjach, takich jak wywołanie z bieżącą kontynuacją . Jednak operatory te mają tendencję do łamania pożądanych właściwości, takich jak kanoniczność i parametryczność .

Teorie typów

Poważny

Mniejszy

Aktywny

Praktyczny wpływ

Języki programowania

Istnieje rozległe nakładanie się i interakcja między dziedzinami teorii typów i systemów typów. Systemy typów to funkcja języka programowania przeznaczona do identyfikowania błędów. Każda statyczna analiza programu , taka jak algorytmy sprawdzania typu w fazie analizy semantycznej kompilatora , ma związek z teorią typów.

Doskonałym przykładem jest Agda , język programowania, który wykorzystuje UTT (zunifikowaną teorię typów zależnych Luo) dla swojego systemu typów. Język programowania ML został opracowany do manipulowania teoriami typów (patrz LCF ), a ich własny system typów był pod ich wpływem.

Podstawy matematyczne

Pierwszy asystent dowodzenia komputerowego, zwany Automath , wykorzystywał teorię typów do kodowania matematyki na komputerze. Martin-Löf specjalnie opracował teorię typów intuicjonistycznych, aby zakodować całą matematykę, aby służyła jako nowa podstawa matematyki. Trwają badania nad podstawami matematycznymi z wykorzystaniem teorii typu homotopii .

Matematycy zajmujący się teorią kategorii mieli już trudności w pracy z powszechnie akceptowaną podstawą teorii mnogości Zermelo-Fraenkla . Doprowadziło to do powstania takich propozycji, jak elementarna teoria kategorii zbiorów (ETCS) Lawvere'a. Teoria typów homotopii kontynuuje tę linię, wykorzystując teorię typów. Naukowcy badają powiązania między typami zależnymi (zwłaszcza typem tożsamości) a topologią algebraiczną (w szczególności homotopia ).

Asystenci dowodu

Wiele z obecnych badań nad teorią typów jest napędzanych przez kontrolery dowodu , interaktywnych asystentów dowodu i zautomatyzowane dowodzenie twierdzeń . Większość z tych systemów wykorzystuje teorię typów jako matematyczną podstawę kodowania dowodów, co nie jest zaskakujące, biorąc pod uwagę ścisły związek między teorią typów a językami programowania:

Wiele teorii typów jest wspieranych przez LEGO i Isabelle . Isabelle wspiera również fundacje poza teoriami typu, takimi jak ZFC . Mizar jest przykładem systemu dowodowego, który wspiera tylko teorię mnogości.

Językoznawstwo

Teoria typ jest również szeroko stosowany w formalnych teorii semantyki z języków naturalnych , zwłaszcza Montague gramatyki i jego potomków. W szczególności gramatyki kategorialne i gramatyki przedgrupowe intensywnie używają konstruktorów typów do definiowania typów ( rzeczownika , czasownika itp.) słów.

Najpopularniejsza konstrukcja bierze odpowiednio typy podstawowe i indywidua oraz wartości prawdziwościowe i definiuje zbiór typów rekurencyjnie w następujący sposób:

  • jeśli i są typami, to tak jest ;
  • nic poza typami podstawowymi, a tym, co można z nich skonstruować za pomocą poprzedniej klauzuli, są typy.

Typ złożony to typ funkcji od jednostek typu do jednostek typu . Mamy więc typy takie, które są interpretowane jako elementy zbioru funkcji od encji do wartości logicznych, czyli funkcje wskaźnikowe zbiorów encji. Wyrażeniem typu jest funkcja od zbiorów encji do wartości prawdziwościowych, czyli zbiór zbiorów (funkcja wskaźnikowa a). Ten ostatni typ jest standardowo uważany za rodzaj kwantyfikatorów języka naturalnego , jak „ wszyscy albo nikt” ( Montague 1973, Barwise i Cooper 1981).

Nauki społeczne

Gregory Bateson wprowadził do nauk społecznych teorię typów logicznych; jego koncepcje podwójnego wiązania i poziomów logicznych są oparte na teorii typów Russella.

Związek z teorią kategorii

Chociaż początkowa motywacja teorii kategorii była daleka od fundamentalizmu, okazało się, że te dwie dziedziny mają głębokie powiązania. Jak John Bell Lane pisze: „W rzeczywistości kategoriach mogą sami być postrzegana jako typ teorii pewnego rodzaju; sam ten fakt wskazuje, że teoria typ jest znacznie bardziej zbliżona do teorii kategorii, niż jest do teorii mnogości”. W skrócie, kategorię można postrzegać jako teorię typów, traktując jej obiekty jako typy (lub rodzaje), tj. „Z grubsza mówiąc, kategorię można traktować jako teorię typów pozbawioną składni”. W ten sposób następuje szereg znaczących wyników:

Wzajemne oddziaływanie, znane jako logika kategoryczna , było od tego czasu przedmiotem aktywnych badań; patrz np. monografia Jacobsa (1999).

Zobacz też

Uwagi

Bibliografia

  • Rolnik, William M. (2008). „Siedem zalet prostej teorii typu”. Dziennik Logiki Stosowanej . 6 (3): 267–286. doi : 10.1016/j.jal.2007.11.001 .

Dalsza lektura

Zewnętrzne linki