Introduzione alla teoria dei tipi di Martin-Löf


36

Quale sarebbe la migliore introduzione alle idee di Per Martin-Löfs sulla teoria dei tipi? Ho visto alcune lezioni della scuola estiva dell'Oregon PL, ma sono ancora perplesso dalla seguente domanda:

Che cos'è un tipo?

So cos'è un set, dal momento che puoi definirli dai soliti assiomi ZF e hanno un modello concreto molto intuitivo; basti pensare a un cestino pieno di roba. Tuttavia, devo ancora vedere una definizione ragionevole di un tipo e mi chiedevo se ci fosse qualche fonte che avrebbe distillato questa idea per manichino.


4
Il libro HoTT ha un'introduzione che mette a confronto tipi e insiemi, forse questo aiuterà, vedi la Sezione 1.1 di homotopytypetheory.org/book . Ma soprattutto, vuoi che ti impiantiamo direttamente nella testa l'idea corretta dei tipi, mentre per i set sei felice di averli descritti dagli assiomi, senza insistere per sapere "cosa sono realmente". Bene, i tipi sono descritti dalle regole di inferenza per i tipi. E hanno un modello concreto molto intuitivo, sai, un crogiolo pieno di blocchi Lego. Qualunque cosa tu possa costruire da loro è nel tipo.
Andrej Bauer,

Penso che allontanare il mio cervello dalla teoria degli insiemi sia il problema più grande. Tuttavia, non sono sicuro di quanto sia buona l'analogia di Lego. Quali sono i blocchi? Se x: A e y: A in genere non riesco a costruire nulla da loro a meno che A non sia un tipo di freccia ricorsiva. Certo che posso mescolare spesso roba di tipo diverso di costruire qualcosa di un terzo tipo ...
DST

4
I blocchi Lego sono i costruttori di tipi. Così, per esempio da e y : A è possibile costruire ( x , y ) e ( x , x ) e i n l ( x ) , e R e L f x e λ Z : A . x . Puoi anche creare nuovi tipi, ad esempio I d ( x , y ) e zX:UNy:UN(X,y)(X,X)ionl(X)relfXλz:UN.Xiod(X,y)e così via. Le persone hanno diverse intuizioni sui tipi. Set è uno di questi, ma grezzo. I tipi sono anche come spazi topologici. Sono anche come dati strutturati nella programmazione. Sono anche comeω-groupoids. Questa è la bellezza, la ricchezza delle possibilità. Scegli una possibilità e corri con essa. Σz:UNiod(X,z)ω
Andrej Bauer,

Risposte:


31

Un tipo è una proprietà dei calcoli. È quello che scrivi sul lato destro di due punti.

Vorrei approfondire questo. Nota che la terminologia non è completamente standard: alcuni articoli o libri possono usare parole diverse per determinati concetti.

Un termine è un elemento di una sintassi astratta che intende rappresentare il calcolo. Intuitivamente, è un albero di analisi. Formalmente, è un albero finito in cui i nodi appartengono ad un certo alfabeto. Un calcolo non tipizzato definisce una sintassi per i termini. Ad esempio, il calcolo lambda (non tipizzato) contiene termini (scritti , N , ecc.) Costruiti da tre tipi di nodi:MN

  • variabili, di arity 0 (una loro raccolta denumerabile), scritte , y , ecc .;Xy
  • applicazione di una variabile, di arity 1 (una raccolta numerosa di essa, con una biiezione a variabili), scritta λX.M , ecc .;
  • applicazione, di arity 2, scritta .MN

Un termine è una costruzione sintattica. Una semantica mette in relazione i termini con i calcoli. Esistono molti tipi di semantica, la più comune è operativa (che descrive come i termini possono essere trasformati in altri termini) o denotazionale (che descrive i termini mediante una trasformazione in un altro spazio, generalmente costruito dalla teoria degli insiemi).

Un tipo è una proprietà dei termini. Un sistema di tipi per un calcolo non tipizzato descrive quali termini hanno quali tipi. Matematicamente, al centro, un sistema di tipi è una relazione tra termini e tipi. Più precisamente, un sistema di tipi è una famiglia di tali relazioni, indicizzata da contesti - in genere, un contesto fornisce almeno tipi di variabili (ovvero un contesto è una funzione parziale da variabili a tipi), in modo che un termine possa avere solo un tipo in contesti che forniscono un tipo per tutte le sue variabili libere. Che tipo di oggetto matematico è un tipo dipende dal sistema di tipi.

Alcuni sistemi di tipi sono descritti con tipi come insiemi, usando nozioni di teoria degli insiemi come intersezione, unione e comprensione. Ciò ha il vantaggio di basarsi su basi matematiche familiari. Una limitazione di questo approccio è che non consente il ragionamento su tipi equivalenti.

Molti sistemi di tipi descrivono i tipi stessi come termini in un calcolo di tipi. A seconda del sistema di tipi, questi possono essere gli stessi termini o termini diversi. Userò il termine frase base per fare riferimento a un termine del calcolo che descrive il calcolo. Ad esempio, il calcolo lambda tipizzato in modo semplice utilizza il seguente calcolo di tipi (scritto , ecc.):τ

  • tipi di base, di arity 0 (una raccolta finita o denumerabile), scritti , B , ecc .;UNB
  • funzione, di arity 2, scritta .τ0τ1

La relazione tra termini e tipi che definisce il calcolo lambda tipizzato in modo semplice è generalmente definita da regole di battitura . Le regole di digitazione non sono l'unico modo per definire un sistema di tipi, ma sono comuni. Funzionano bene per i sistemi di tipo compositivo, vale a dire i sistemi di tipo in cui il tipo (i) di un termine è costruito dai tipi di subterm. Le regole di digitazione definiscono un sistema di tipi in modo induttivo: ogni regola di digitazione è un assioma che afferma che per ogni istanza delle formule sopra la regola orizzontale, anche la formula sotto la regola è vera. Vedi Come leggere le regole di battitura? per ulteriori dettagli. Esiste un calcolo lambda tipizzato completo di Turing? potrebbe anche essere di interesse.

Per il calcolo lambda tipizzato in modo semplice, il giudizio di battitura significa che M ha il tipo τ nel contesto Γ . Ho omesso la definizione formale di contesti. x : τ ΓΓM:τMτΓ

X:τΓΓX:τ(Γ)Γ,X:τ0M:τ1ΓλX.M:τ0τ1(io)ΓM:τ0τ1ΓN:τ0ΓMN:τ1(E)

Ad esempio, se e B sono tipi basati, allora λ x . λ y . XUNB ha il tipo ( A B ) A B in qualsiasi contesto (dal basso verso l'alto, applica ( λx.λy.xy(AB)AB due volte, quindi ( E ) , e infine ( Γ ) su ciascun ramo).(I)(E)(Γ)

È possibile interpretare i tipi del calcolo lambda semplicemente digitato come set. Ciò equivale a dare una semantica denotazionale per i tipi. Una buona semantica denotazionale per i termini di base assegnerebbe a ciascun termine di base un membro della denotazione di tutti i suoi tipi.

La teoria dei tipi intuitiva (nota anche come teoria dei tipi di Martin-Löf) è più complessa del semplice calcolo del lambda, poiché ha molti più elementi nel calcolo dei tipi (e aggiunge anche alcune costanti ai termini di base). Ma i principi fondamentali sono gli stessi. Una caratteristica importante della teoria dei tipi di Martin-Löf è che i tipi possono contenere termini di base (sono tipi dipendenti ): l'universo dei termini di base e l'universo dei tipi sono gli stessi, sebbene possano essere distinti da semplici regole sintattiche (di solito note come ordinamento, ovvero assegnando una sorta di termini, nella teoria della riscrittura).

:

Alla maggior parte dei sistemi di tipo è stata data una semantica teorica set, per legarli ai soliti fondamenti della matematica. In che modo sono correlati i linguaggi di programmazione e le basi della matematica? e Qual è la differenza tra le viste semantiche e sintattiche dei tipi di funzione? potrebbe essere di interesse qui. C'è stato anche un lavoro sull'uso della teoria dei tipi come base della matematica - la teoria degli insiemi è la base storica, ma non è l'unica scelta possibile. La teoria dei tipi di omotopia è una pietra miliare importante in questa direzione: descrive la semantica della teoria intenzionale del tipo intuizionista in termini di teoria dell'omotopia e costruisce la teoria degli insiemi in questo quadro.

Consiglio i libri di Benjamin Pierce Tipi e linguaggi di programmazione e anticipazioni Argomenti su tipi e linguaggi di programmazione . Sono accessibili a qualsiasi studente universitario senza prerequisiti diversi dalla familiarità di base con il ragionamento matematico formale. TAPL descrive molti tipi di sistemi; i tipi dipendenti sono oggetto del capitolo 2 di ATTAPL.


+1 per TAPL. Sono stato in grado di insegnarmi un po 'sui tipi dalla lettura di quel libro.
Guy Coder,

Non sono sicuro che ATTAPL sia un buon punto di partenza per conoscere i tipi dipendenti.
Martin Berger,

15

Forse una domanda migliore per qualcuno che proviene dalla teoria degli insiemi e alle prese con la differenza tra teoria degli insiemi e teoria dei tipi di Martin-Löf, è riflettere su quali insiemi siano. Le tue intuizioni sulla teoria degli insiemi e le basi della matematica saranno infettate da ipotesi di teoria dell'insieme indiscusse che dai per scontate. Purtroppo la teoria dei tipi Martin-Löf non condivide questi presupposti.

Contrariamente alla comprensione convenzionale, la teoria degli insiemi è una teoria di due relazioni: l' uguaglianza e l' insieme dell'appartenenza , non solo l'insieme dell'appartenenza. E queste due relazioni sono costruite in fasi sostanzialmente distinte.

  1. Costruiamo la logica del primo ordine come teoria dell'uguaglianza delle cose arbitrarie (non solo degli insiemi). La logica del primo ordine usa un nozione di prova informale . La dimostrazione del concetto non è di per sé esprimibile formalmente nella sola logica del primo ordine.

  2. Quindi costruiamo la teoria degli insiemi sopra la logica del primo ordine come teoria degli insiemi e l'appartenenza agli insiemi.

  3. L'appartenenza agli insiemi e l'uguaglianza sono quindi correlati dall'assioma dell'estremalità che afferma che due insiemi sono uguali esattamente quando hanno gli stessi membri.

  4. Infine, il concetto informale di prova di (1) ottiene una razionalizzazione ex post come determinati insiemi (alberi di prova).

È importante rendersi conto che la nozione di prova è quindi un cittadino di seconda classe nella teoria degli insiemi.

Questa configurazione funziona bene per la matematica convenzionale di piccole / medie dimensioni, ma poiché stiamo affrontando prove su larga scala, come la classificazione di tutti i gruppi semplici finiti o la verifica di programmi per computer non banali, cade a pezzi, perché non porta a una facile meccanizzazione.

TT .

λ


Questo è stato estremamente utile. Penso che uno dei maggiori problemi di chiunque entri nella matematica costruttiva sia disimparare molte cose.
dst

Sono d'accordo. Ci vuole un po 'di tempo per disimparare le proprie assunzioni teoriche non riconosciute. Fare molta programmazione Agda mi ha aiutato e potrebbe funzionare anche per te se provieni da un background informatico.
Martin Berger,

10

Non sono a conoscenza di facili percorsi nella teoria dei tipi di Martin-Löf. Immagino che quanto segue possa servire da introduzione.

Tuttavia, se sei perplesso dalla domanda "che cos'è un tipo", suggerisco di entrare prima in teorie del tipo molto più semplici. Qualunque linguaggio di programmazione tipizzato lo farà, ma ad esempio Ocaml, F # e Haskell sarebbero particolarmente utili. Semplificando un po ', si potrebbe dire che la teoria dei tipi di Martin-Löf estende i tipi dietro le lingue di cui sopra in due modi:

  1. Con tipi dipendenti . Li trovi in ​​forma più domata in vari linguaggi di programmazione.
  2. Con tipi di identità. Questa è la principale innovazione di Martin-Löf rispetto alle precedenti teorie del tipo dipendente.

L'idea chiave dietro i tipi dipendenti è semplice: i tipi possono essere parametrizzati dai programmi. Questo non è possibile (semplificando un po ') nei sistemi di tipizzazione più convenzionali come quelli sopra menzionati. Sebbene semplici, le conseguenze sono profonde: i tipi dipendenti elevano la corrispondenza Curry-Howard alla logica costruttiva del primo ordine. I tipi di identità sono un po 'insoliti. Se / quando ti senti a tuo agio con una lingua come Haskell, potresti imparare Agda , che è fondamentalmente Haskell con la teoria dei tipi di Martin-Löf. Sento che Agda è molto più facile da imparare per un programmatore che leggere i libri di cui sopra.


In realtà conosco Haskell. Il mio problema è che qualsiasi tutorial ti dirà solo come definire i tipi, ma mai quello che sono in realtà. Sembra solo un tag magico collegato a tutti i tuoi dati, in modo che il controllo del tipo possa scegliere la versione corretta di una funzione polimorfica e verificare che le cose non siano mescolate in modi che non hanno senso. Lasciano ancora aperta la domanda su che tipo sia. Sono particolarmente perplesso da questo, dal momento che Voevodsky & Co. sta cercando di basare tutta la matematica su questo, eppure non ho mai visto una definizione precisa.
DST

2
In Haskell hai giudizi di battitura ΓM:α dove M è un programma, α è il tipo di M, supponendo che MLe variabili libere vengono digitate come presupposto nell'ambiente di digitazione Γ. In prima approssimazione, i tipi di Haskell stessi sono "chiazze", marcatori sintattici. È esattamente lo stesso nella teoria dei tipi di Martin-Löf. Accade semplicemente che i tipi, i "blob", i marker sintattici della teoria dei tipi di Martin-Löf siano più complicati di quelli di Haskell.
Martin Berger,

I tipi sono definiti con precisione in Haskell, nella teoria dei tipi di Martin-Löf e nella teoria dei tipi di omotopia di Voevodsky. Non c'è alcuna ambiguità. Ad esempio, l'Appendice A.2 fornisce un sistema di prova per tutti i termini e tipi di teoria dei tipi di omotopia. Se vuoi ancora più rigore, puoi guardare le formalizzazione di Coq o Agda .
Martin Berger,

2
Forse hai bisogno di ingoiare quei tipi non hanno altra essenza se non come sono definiti. Questo non è diverso per esempio con gli Insiemi, sono dati dagli assiomi della teoria degli insiemi. (Questo non è del tutto vero, ma è comunque importante capire.)
Martin Berger,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.