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 : τ0⊢ M: τ1Γ ⊢ λ x . M: τ0→ τ1( → I)Γ ⊢ 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(A→B)→A→B 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.