![Page 1: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/1.jpg)
Type Assignment System
Descrizione formale del sistema di tipi
Descrizione formale del sistema di tipi Type Assignment System 1 / 54
![Page 2: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/2.jpg)
Analisi semantica
Terza fase del compilatoreControllo statico sul codice (albero sintattico)
estrarre informazioni:
symbol table: associo a identificatori tipo, scopo
eseguire i controlli non realizzabili con grammatiche liberi dalcontesto
numero dei parametri proceduraidentificatore dichiarato prima di essere usacicli for non modificano la variabile di cilco
type checking: il controllo principale
Descrizione formale del sistema di tipi Type Assignment System 2 / 54
![Page 3: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/3.jpg)
Type system
Testo di riferimento: articolo di Cardelli, vedi pagina web corso:
alcune differenze nell’uso dei termini
“strongly typed” vs “save”
no untrapped error: tutti gli errori causano un eccezione
In precedenza, discussione generale le sui sistemi di tipiIl sistema di tipi viene:
descritto informalmente nella documentazioneimplementato come codice nel compilatore, algoritmo di typechecking
Descrizione formale del sistema di tipi Type Assignment System 3 / 54
![Page 4: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/4.jpg)
Type system
È possibile una definizione formale del controllo di tipi.attraverso un sistema di regole derivo giudizi nella formax1 : A1, x2 : A2, ...xn : An ` M : A
quando un espressione M del mio linguaggiha tipo A,nell’ambiente statico (con le ipotesi),x1 : A1, x2 : A2, ...xn : Anche assegna un tipo alle variabili di M,
Altri giudizi ausiliarix1 : A1, x2 : A2, ...xn : An ` AA è un espressione di tipo corretta nella ambientex1:A1, x2:A2, ... xn:Anx1 : A1, x2 : A2, ...xn : An ` ·l’ambiente è ben formato.
Per i linguaggi che considereremo questi giudizi non necessari,posso definire tipi e ambienti corretti attraverso grammatiche libereNotazione: uso Gamma o G per indicare un generico ambiente
Descrizione formale del sistema di tipi Type Assignment System 4 / 54
![Page 5: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/5.jpg)
Regole di derivazione
simili alla deduzione naturale, o calcolo dei sequentiun insieme di giudizi premessa, porta ad un giudizio conclusione
Gamma1 |- M1 : A1 ... GammaN |- Mn : An-----------------------------------------
Gamma |- M : A
regole senza premesse sono gli assiomiregole date per induzione sulla struttura di M
ad ogni costrutto del linguaggio si associa una regola (qualcheeccezione)
all’arricchirsi del linguaggio, aumentano le regole,approccio modulare:
singole regole restano valide, all’arricchirsi del linguaggioregole piuttosto semplici,l’analisi del sistema di derivazione più complessa
Descrizione formale del sistema di tipi Type Assignment System 5 / 54
![Page 6: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/6.jpg)
Derivazioni
hanno una struttura ad albero,
da un insieme di assiomi: fogliederivo un giudizio finale: radice
Permettono di derivare i giudizi validi
Sistemi definiti mediante regole di derivazione sono frequenti:
in logicanella descrizione formale dei linguaggisistema di tipisemantica operazionale
Descrizione formale del sistema di tipi Type Assignment System 6 / 54
![Page 7: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/7.jpg)
Type checking, type inference
Dato un sistema di tipi, considero diversi problemi:
problema di controllo di tipo, type checking,
dato un termine M,un tipo Aun ambiente Gamma,determinare se Gamma |- M : A sia valido
problema di inferenza di tipo, type inference,
dato un termine M, e ambiente Gamma,trovare un tipo A tale che Gamma |- M : A sia valido
l’analisi semantica risolve problemi di type inference:
nel codice definito il tipo delle variabilinecessario inferire il tipo delle (sotto)-espressioniin Python, Haskell possibile non dichiarare il tipi delle variabili:necessario inferire anche l’ambientel’inferenza di tipo può essere un problema complesso
Descrizione formale del sistema di tipi Type Assignment System 7 / 54
![Page 8: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/8.jpg)
Type soundness
Errore di tipo, in un espressione Mnon esiste A tale che Gamma |- M : A
definizione indiretta
Desiderata: programmi che superano il controllo di tipo non generanountrapped error durante la computazione
Per dimostrare la type soundness necessario collegarecomputazione e type system,possibile formulazione del collegamento:
se |- M : A eM riduce (viene trasformato dalla computazione in Nallora |- N : A
ossia, la computazione preserva i tipise inoltre mostro che nessun programma tipato generaimmediatamente un untrapped errorho la garantisce formale dell’assenza di untrapped error durante lacomputazione
Descrizione formale del sistema di tipi Type Assignment System 8 / 54
![Page 9: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/9.jpg)
Esempi sistemi di tipi
Nel seguito presentiamo, in maniera incrementale
semplici linguaggi di programmazionerelative regole di tipo.
Regole illustrative:
linguaggi diversi usano regole diverse, simili nello spirito,
Regole singolarmente semplici ma sistema di tipi complesso,
numero di regole elevatopiccole modifiche, ad una singola regola, possono portare adinconsistenze
Descrizione formale del sistema di tipi Type Assignment System 9 / 54
![Page 10: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/10.jpg)
Sistemi di tipi al prim’ordine.
Prim’ordine, perché nessuna variabile di tipo
non ci sono i tipi polimorfi
Presentiamo alcuni esempi
linguaggio baseun insieme di estensioniogni estensione richiede nuove regolele regole precedenti vengono preservatestruttura modulare.
Descrizione formale del sistema di tipi Type Assignment System 10 / 54
![Page 11: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/11.jpg)
Sistema F1, (lambda calcolo tipato semplice)
quasi un frammento minimo di Haskell, con tipi espliciti, nonpolimorfiTipi . . . A, B
un insieme di tipi base K in Basictipi funzioni A -> B
Termini, codice . . . M, Nvariabili xcostanti c : Kfunzioni \ x:A -> Mapplicazioni M N
si associa un tipo al parametro formale di ogni funzione
diversamente da Haskellsimilmente a quasi tutti gli altri linguaggi
Descrizione formale del sistema di tipi Type Assignment System 11 / 54
![Page 12: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/12.jpg)
Regole
ovvie per i giudizi di ‘buona formazione’ e ‘buon tipo’,
definibili mediante grammatiche libere
(Var)
G, x:A, G' |- x : A
(Fun)
G, x : A |- M : B--------------------------G |- (\ x:A -> M) : A->B
(App)
G |- M : A->B G |- N : A----------------------------G |- M N : B
Descrizione formale del sistema di tipi Type Assignment System 12 / 54
![Page 13: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/13.jpg)
Esempio type inference per
\ f -> \ x -> f (f x)
Descrizione formale del sistema di tipi Type Assignment System 13 / 54
![Page 14: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/14.jpg)
Costruzione di una derivazione
Costruzione top-downa partire da un termine da tipare
seleziono la regola da applicareriduco il problema a quello di tipare i sottotermini
Ad ogni passo due problemi:
selezionare la regola (schema di regole) da applicaresufficiente osservare il costrutto principale del termineistanziare lo schema di regole
regole generiche, fanno riferimento a generici termini, tipida istanziare nel caso particolaresimili a meccanismi di pattern matching
Descrizione formale del sistema di tipi Type Assignment System 14 / 54
![Page 15: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/15.jpg)
Tipi base e costanti
Ad ogni costante si associa una regola che ne assegna tipoTipo base semplice con un unico elemento
(unit)
G |- unit : Unit
In Haskell: enupla vuota () : ()
Descrizione formale del sistema di tipi Type Assignment System 15 / 54
![Page 16: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/16.jpg)
Booleani
Costanti - (true) (false)
G |- true : Bool G |- false : Bool
Funzioni collegate: - (ite)
G |- (if_A _ then _ else _) : Bool -> A -> A -> A
o alternativamente
G |- M : Bool G |- N1 : A G |- N2 : A----------------------------------------
G |- if_A M then N1 else N2 : A
Marcare il costrutto if_A con il tipo A semplifica l’Inferenzaaltrimenti più complessa
Descrizione formale del sistema di tipi Type Assignment System 16 / 54
![Page 17: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/17.jpg)
Naturali
linguaggio minimale
G |- 0 : Nat G |- succ : Nat -> Nat
G |- pred : Nat -> Nat G |- isZero : Nat -> Bool
estensioni
insieme infinito di regole per infinite constanti
G |- 1 : Nat G |- 2 : Nat G |- 3 : Nat ...
operazioni aritmetiche
G |- N1 : Nat G |- N2 : Nat----------------------------
G |- N1 + N2 : Nat
Descrizione formale del sistema di tipi Type Assignment System 17 / 54
![Page 18: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/18.jpg)
Naturali
O in alternativa:
G |- (+) : Nat -> Nat -> Nat
Descrizione formale del sistema di tipi Type Assignment System 18 / 54
![Page 19: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/19.jpg)
Esempio
\ y:Nat -> \ z:Nat -> (y + 2) + z
Descrizione formale del sistema di tipi Type Assignment System 19 / 54
![Page 20: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/20.jpg)
Tipi prodotto, coppia
nuovo costruttore di tipi A * B
Regole
(Pair)
G |- M : A G |- N : B--------------------------G |- (M,N) : A*B
(First) (Second)
G |- first : A*B -> A G |- second : A*B -> B
Descrizione formale del sistema di tipi Type Assignment System 20 / 54
![Page 21: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/21.jpg)
Esempio
\ y : (Int*Int) -> (first y) + (second y)
Descrizione formale del sistema di tipi Type Assignment System 21 / 54
![Page 22: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/22.jpg)
Tipi unione
nuovo costruttore di tipi A + B
Regole
(InLeft), (InRight)
G |- inLeft : A -> A+B G |- inRight : B -> A+B
(IsLeft), (IsRight)
G |- isLeft : A+B -> Bool G |- isRight : A+B -> Bool
(AsLeft), (AsRight)
G |- asLeft : A+B -> A G |- asRight : A+B -> B
possono causare errore di tipo a tempo di esecuzioneforzano un anche type checking dinamico
Descrizione formale del sistema di tipi Type Assignment System 22 / 54
![Page 23: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/23.jpg)
segue
Solo type-checkint statico con(case)
G |- M : A1 + A2 G, x1:A1 |- N1:B G, x2:A2 |- N2:B-------------------------------------------------------------G |- case M of(inLeft(x1:A1) ->N1)(inRight(x2:A2) -> N2) : B
sintassi alternativa [Cardelli]
case M of (inLeft(x1:A1)->N1) (inRight(x2:A2)->N2) : Bscritto come:case M of x1:A1 then N1 | x2:A2 then N2
Descrizione formale del sistema di tipi Type Assignment System 23 / 54
![Page 24: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/24.jpg)
Record (Structure)
Estensione del tipo prodotto
un numero arbitrario di componentisistema di etichette l
nuovo costruttore di tipo { l1 : A1, ... , ln : An }
regole
(Record)
G |- M1 : A1 G |- M2:A2 ... G |- Mn:An---------------------------------------------------G |- { l1:M1, ..., ln:Mn } : { l1:A1, ..., ln:An }
(Record Select)
G |- M : { l1 : A1, ... , ln : An }-----------------------------------
G |- M.li : Ai
Descrizione formale del sistema di tipi Type Assignment System 24 / 54
![Page 25: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/25.jpg)
segue
Un alternativa, poco usata, a (Record Select)
(Record With)
G |- M:{l1:A1, ..., ln:An} G, x1:A1,... , xn:An |- N : B-------------------------------------------------------------
G |- case M of {x1:A1,... , xn:An} -> N of B
Descrizione formale del sistema di tipi Type Assignment System 25 / 54
![Page 26: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/26.jpg)
Variant type
Estensione del tipo unione
un numero arbitrario di componentisistema di etichette l
Descrizione formale del sistema di tipi Type Assignment System 26 / 54
![Page 27: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/27.jpg)
Reference type
definiscono locazioni di memoriaintroducono la memoria, lo statodistinguo in maniera esplicita
la locazione di memoriadal suo contenuto
separazione sfumata in altri linguaggicostrutto simile in MLcostruttore di tipo Ref A
Descrizione formale del sistema di tipi Type Assignment System 27 / 54
![Page 28: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/28.jpg)
Costrutti e regole
(Ref)
G |- M : A------------------G |- ref M : Ref A
creo una nuova locazione di tipo che inizializzo con valore Mposso tradurre
var x = M;N
con
let x = ref M in N
oppure con
(\ x -> N) (ref M)
Descrizione formale del sistema di tipi Type Assignment System 28 / 54
![Page 29: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/29.jpg)
Costrutti e regole
(Deref) accedo al contenuto
G |- deref : (Ref A) -> A
(Assign)
G |- M : Ref A G |- N : A------------------------------
G |- M := N : Unit
Descrizione formale del sistema di tipi Type Assignment System 29 / 54
![Page 30: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/30.jpg)
Composizione di comandi
posso tradurre la composizione di comandi C1; C2 con(\ y : Unit -> C2) C1in un linguaggio call-by-value
posso tradurre un linguaggio imperativo in uno funzionale + Ref
In generale è interessante analizzare
quali costrutti di un linguaggio posso essere derivati dagli altridefinibili come zucchero sintatticoregole di tipo e semantica definibili mediante traduzione
Descrizione formale del sistema di tipi Type Assignment System 30 / 54
![Page 31: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/31.jpg)
Esempio: la regola per Composition derivabile
(Composition)
G |- C1 : Unit G |- C2 : Unit------------------------------
G |- C1; C2 : Unit
(C1;C2) = (\ y : Unit -> C2) C1
Descrizione formale del sistema di tipi Type Assignment System 31 / 54
![Page 32: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/32.jpg)
Esempi
var x = 3;x = (deref x) + 1
(\ x :(Ref Nat) -> x := (deref x) + 1) (ref 3)
Descrizione formale del sistema di tipi Type Assignment System 32 / 54
![Page 33: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/33.jpg)
Esempivar x = 3;
x = x + 1;x = x + 2;
(\ x :(Ref Nat) -> ((\y : Unit -> x := (deref x) + 2)(x := (deref x) + 1)) (ref 3)
Descrizione formale del sistema di tipi Type Assignment System 33 / 54
![Page 34: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/34.jpg)
Tipi di dati ricorsivi
Il tipo data di Haskell ne sono un esempio.
Introduco variabili di tipo YUn funzione di punto fisso mu sui tipimu Y.Amu Y.A denota un tipo isomorfo aA [ mu Y. A / Y]Analogia con Haskell
liste di naturali
data ListInt = Nil | Cons Int ListInt`
diventa
mu Y . Unit + (Int * Y)
isomorfo a
Unit + (Int * (mu Y . Unit + (Int * Y))
Descrizione formale del sistema di tipi Type Assignment System 34 / 54
![Page 35: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/35.jpg)
Fold, unfold
Per costruire valori di tipo ricorsivo, si usa una famiglia di costruttori
fold_(mu Y.A)
uno per ogni tipo ricorsivo.Regola (Fold)
G |- M : A [ mu Y. A / Y]-------------------------G |- fold M : mu Y . A
per brevità ometto l’indice di tipoPer esaminare valori di tipo ricorsivo, si usa una famiglia didistruttori
unfold_(mu Y.A)
Descrizione formale del sistema di tipi Type Assignment System 35 / 54
![Page 36: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/36.jpg)
Regole
(Unfold)
G |- M : mu Y. A--------------------------------G |- unfold M : A [ mu X. A / Y]
Descrizione formale del sistema di tipi Type Assignment System 36 / 54
![Page 37: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/37.jpg)
Esempio:
i costruttori di liste si possono definire come:
Nil = fold(inLeft unit)Cons x xs = fold(inRight (x,xs))
i distruttori di liste
head xs = first (asRight (unfold xs))tail xs = second (asRight (unfold xs))
i costrutti (mu, fold, unfold) sono:concettualmente semplici, ma poco pratici, i costrutti standardmodellabili attraverso di essiTutti i dati ricorsivi, non mutuamente ricorsivi e non parametrici, diHaskell, trattabili in questo modo.codifica non troppo complessa
Descrizione formale del sistema di tipi Type Assignment System 37 / 54
![Page 38: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/38.jpg)
Esempio
Nil = fold(inLeft unit)
Descrizione formale del sistema di tipi Type Assignment System 38 / 54
![Page 39: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/39.jpg)
Esempioas: ListInt |- head as : Int
as : mu Y . Unit + (Int * Y)|- first (asRight (unfold as)) : Int `
Descrizione formale del sistema di tipi Type Assignment System 39 / 54
![Page 40: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/40.jpg)
Linguaggio imperativo, simil C.
Considero tre categorie sintattiche
Espressioni
E ::= const | id | E binop E | unop E
Comandi
C ::= id = E | C; C | while E {C} |if E then C else C | I(E, ... E) | {D ; C}
Dichiarazione
D ::= A id = E | id(A1 id1, ... , An idn) { C } |epsilon | D; D
Descrizione formale del sistema di tipi Type Assignment System 40 / 54
![Page 41: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/41.jpg)
Regole, espressioni
Per le espressione, valgono le corrispondenti regole del linguaggiofunzionale
(Id, (Var))
G, id:A, G' |- id : A
G |- true : Bool G |- false : Bool
(ite)
G |- (if _ then _ else _) : Bool -> A -> A -> A
G |- 1 : Nat G |- 2 : Nat G |- 3 : Nat ...
operazioni aritmetiche
G |- E1 : Nat G |- E2 : Nat--------------------------------G |- E1 + E2 : Nat
Descrizione formale del sistema di tipi Type Assignment System 41 / 54
![Page 42: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/42.jpg)
Comandi
(Assign)
G |- id : A G |- E : A--------------------------
G |- id = E : Unit
(Sequence)
G |- C1 : Unit G |- C2 : Unit------------------------------
G |- C1; C2 : Unit
(While)
G |- E : Bool G |- C : Unit-------------------------------
G |- while E {C} : Unit
Descrizione formale del sistema di tipi Type Assignment System 42 / 54
![Page 43: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/43.jpg)
segue
(If Then Else)
G |- E : Bool G |- C1 : Unit G |- C2 : Unit------------------------------------------------
G |- if E then C1 else C2 : Unit
(Procedure)
G |- id : (A1 * ... * An) -> Unit G |- E1 : A1 ... G |- En : An------------------------------------------------------------------
G |- id (E1, ..., En) : Unit
(Blocco)
G |- D :: G1 G, G1 |- C : Unit---------------------------------
G |- {D;C} : Unit
Descrizione formale del sistema di tipi Type Assignment System 43 / 54
![Page 44: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/44.jpg)
Dichiarazioni
Le dichiarazione necessitano di un nuovo tipo di giudizio
Una dichiarazione crea un ambiente, che viene utilizzato nel bloccodella dichiarazioneGiudizi nella forma
G |- D :: G1
Descrizione formale del sistema di tipi Type Assignment System 44 / 54
![Page 45: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/45.jpg)
Regole
(Id)
G |- E : A (A tipo memorizzabile)--------------------------------------G |- A id = E :: (id : A)
(Proc)
G, id1 : A1, ..., idn : An |- C : Unit------------------------------------------------------------G |- id(A1 id1, ... idn){ C } :: id : (A1 x...x An) -> Unit
(Recursive Proc)
G, id1 : A1, ... An, id : (A1 *...* An) -> Unit |- C : Unit--------------------------------------------------------------G |- id(A1 id1, ... idn){ C } :: id : (A1 x...x An) -> Unit
Descrizione formale del sistema di tipi Type Assignment System 45 / 54
![Page 46: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/46.jpg)
segue
(Sequenza)
G |- D1 :: G1 G, G1 |- D2 :: G2-------------------------------------------
G |- D1; D2 :: G1, G2
Descrizione formale del sistema di tipi Type Assignment System 46 / 54
![Page 47: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/47.jpg)
Array
Devo formalizzare le due differente interpretazioni delle espressionia sinistra della assegnazione ‘=’a destra dell’assegnazione
finora a sinistra solo identificatori ‘id’
Tipi, aggiungo un costruttore di tipo
A[B] con le opportune restrizioniA a memorizzabileB tipo enumerazione
Espressioni, distinguo tra espressioni sinistre e destre
LE ::= id | LE[RE]RE ::= LE | const | RE binop RE | unop RE
Una nuova versione dell’assegnamento
C ::= LE = RE | ...Descrizione formale del sistema di tipi Type Assignment System 47 / 54
![Page 48: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/48.jpg)
Regole
Per le espressioni distinguo due giudizi,
G |-l E : A (E denota una locazione di tipo A)G |-r E : A (E denota un valore di tipo A)(Assign)
G |-l E1 : A G |-r E2 : A-------------------------------G |-l E1 = E2 : Unit
(Left-Right)
G |-l E : A--------------G |-r E : A
(Var)
G, x:A, G' |-l x : A
Descrizione formale del sistema di tipi Type Assignment System 48 / 54
![Page 49: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/49.jpg)
segue
(Array)
G |-l E : A[B] G |-r E1 : B---------------------------------G |-l E[E1] : A
Le restanti regole per le espressioni restano inalterate, diventandoregole per giudizi right |-r.
Descrizione formale del sistema di tipi Type Assignment System 49 / 54
![Page 50: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/50.jpg)
Polimorfismo di sottotipo.
Maggiore flessibilità permetto ad un espressione di avere più tipi
Varie forme di polimorfismo
ad hocdi sottotipoparametricocombinazioni dei precedenti
Sottotipo ( e ad hoc)
introduco una relazione di sottotipo, con relativi giudizi e regole
G |- A <: B
(Subsumtion)
G |-r E : A G |- A <: B----------------------------
G |-r E : B
Descrizione formale del sistema di tipi Type Assignment System 50 / 54
![Page 51: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/51.jpg)
Regole per i giudizi di sottotipo
Posso trattare il polimorfismo ad-hoc, con assiomi del tipo.
G |- Int <: Float
Polimorfismo dei linguaggi ad oggetti:
un tipo oggetto con più campi, sottoggetto di uno con meno.formalizziamolo con i tipi Record
G |- A1 <: B1 ... G |- Am <:Bm m < n--------------------------------------------------G |- { l1:A1, ..., ln:An } <: { l1:B1, ..., lm:Bm}
Descrizione formale del sistema di tipi Type Assignment System 51 / 54
![Page 52: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/52.jpg)
segue
Definisco regole di sottotipo per ogni costruttore di tipi.
(Prod <:)
G |- A1 <: B1 G |- A2 <:B2-------------------------------G |- A1 x A2 <: B1 x B2
Regole sempre covariante con eccezione
(Arrow <:)
G |- A1 <: B1 G |- A2 <:B2-------------------------------G |- B1 -> A2 <: A1 -> B2
controvariante sul primo argomento.
Descrizione formale del sistema di tipi Type Assignment System 52 / 54
![Page 53: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/53.jpg)
Regola non ovvia, tipi ricorsivi.
(Mu <:)
G, X <: Y |- A <: B--------------------------G |- mu X. A <: mu Y . B
la regola
(Mu <: Wrong)
G, X |- A <: B--------------------------G |- mu X. A <: mu X . B
mi permette di derivare
G |- mu X. X -> Int <: mu X . X -> Float
non corretto.Descrizione formale del sistema di tipi Type Assignment System 53 / 54
![Page 54: Type Assignment System - Uniudpietro.digianantonio/linguaggi/lucidi_1x/... · Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi](https://reader033.vdocument.in/reader033/viewer/2022042709/5f51a45d3c42b87fa516fcda/html5/thumbnails/54.jpg)
Esempi
{ Int[0..3] V = [2, 3, 4, 5]; V[V[1]] = V[1]}
Descrizione formale del sistema di tipi Type Assignment System 54 / 54