Вы находитесь на странице: 1из 68

Appunti di Lambda Calcolo

dal corso di Fondamenti Logici


dellInformatica
tenuto dal prof. Andrea Asperti.
Anno Accademico 2004-2005.
Tutti i diritti riservati.
Wilmer Ricciotti
18 luglio 2005
2
Indice
I Il -calcolo puro 7
1 Implementazione 9
1.1 Implementazione per sostituzione testuale . . . . . . . . . . 9
1.2 Notazione di De Bruijn . . . . . . . . . . . . . . . . . . . . . . 10
1.2.1 Codica name-free dei -termini . . . . . . . . . . . . . 10
1.2.2 Riduzione . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.3 Ricerca dei redex . . . . . . . . . . . . . . . . . . . . . 12
1.2.4 Macchina di Krivine . . . . . . . . . . . . . . . . . . . 13
2 Conuenza 15
2.1 Sistemi di riscrittura e conuenza . . . . . . . . . . . . . . . . 16
2.2 Dimostrazione . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.1 -calcolo marcato . . . . . . . . . . . . . . . . . . . . . 19
2.2.2 Preparativi . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2.3 Dimostrazione dello strip lemma . . . . . . . . . . . . 21
2.2.4 Dimostrazione di Church-Rsser . . . . . . . . . . . . 25
2.3 Implicazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3 Teorie equazionali 27
3.1 Le teorie e . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2 Il teorema di separabilit . . . . . . . . . . . . . . . . . . . . . 30
3.2.1 Preparativi . . . . . . . . . . . . . . . . . . . . . . . . . 31
II Calcoli tipizzati 35
4 Il -calcolo tipizzato semplice 37
4.1 Sintassi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.2 Sistemi di tipi . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.2.1 Giudizi . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.2.2 Regole di tipo . . . . . . . . . . . . . . . . . . . . . . . 39
4.2.3 Applicazioni . . . . . . . . . . . . . . . . . . . . . . . . 40
4.3 Programmi in

. . . . . . . . . . . . . . . . . . . . . . . . . 41
4.3.1 Potere espressivo . . . . . . . . . . . . . . . . . . . . . 42
3
4 INDICE
4.4 Corrispondenza di Curry-Howard . . . . . . . . . . . . . . . 43
4.4.1 Il frammento implicativo . . . . . . . . . . . . . . . . 43
4.4.2 Il connettivo . . . . . . . . . . . . . . . . . . . . . . . 44
4.4.3 Il connettivo . . . . . . . . . . . . . . . . . . . . . . . 46
4.5 Teoremi di normalizzazione . . . . . . . . . . . . . . . . . . . 48
4.5.1 Teorema di normalizzazione debole . . . . . . . . . . 48
4.5.2 Teorema di normalizzazione forte . . . . . . . . . . . 51
5 Il Calcolo delle Costruzioni 57
5.1 Sintassi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.2 Sistemi di tipi . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.2.1 Giudizi . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.2.2 Regole di tipo . . . . . . . . . . . . . . . . . . . . . . . 59
5.2.3 Applicazioni . . . . . . . . . . . . . . . . . . . . . . . . 60
5.3 Programmi in

. . . . . . . . . . . . . . . . . . . . . . . . . 61
5.3.1 Potere espressivo . . . . . . . . . . . . . . . . . . . . . 62
5.4 Corrispondenza di Curry-Howard . . . . . . . . . . . . . . . 62
5.4.1 Il frammento implicativo . . . . . . . . . . . . . . . . 62
5.4.2 Il connettivo . . . . . . . . . . . . . . . . . . . . . . . 63
5.4.3 Il connettivo . . . . . . . . . . . . . . . . . . . . . . . 65
5.5 Teoremi di normalizzazione . . . . . . . . . . . . . . . . . . . 67
5.5.1 Teorema di normalizzazione debole . . . . . . . . . . 68
Elenco delle gure
2.1 Teorema di Church-Rsser . . . . . . . . . . . . . . . . . . . . 15
2.2 Strip lemma . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3 Dimostrazione dello strip lemma. . . . . . . . . . . . . . . . . 25
4.1 Espressioni di tipo nel -calcolo tipizzato semplice . . . . . . 38
4.2 Termini del -calcolo tipizzato semplice . . . . . . . . . . . . 38
4.3 Esempio generico di regola di tipo . . . . . . . . . . . . . . . 39
4.4 Regole di tipo per il -calcolo tipizzato semplice . . . . . . . 40
4.5 Regole di inferenza per il connettivo . . . . . . . . . . . . 43
4.6 Albero di prova con etichette . . . . . . . . . . . . . . . . . . 44
4.7 Regole di inferenza per il connettivo . . . . . . . . . . . . . 44
4.8 Regole di tipo per i tipi coppia . . . . . . . . . . . . . . . . . . 45
4.9 Regole di inferenza per il connettivo . . . . . . . . . . . . . 46
4.10 Regole di tipo per i tipi somma . . . . . . . . . . . . . . . . . 47
5.1 Espressioni di tipo nel -calcolo tipizzato semplice . . . . . . 58
5.2 Termini del -calcolo tipizzato semplice . . . . . . . . . . . . 58
5.3 Esempio generico di regola di tipo . . . . . . . . . . . . . . . 59
5.4 Regole di tipo per il -calcolo tipizzato semplice . . . . . . . 60
5.5 Regole di inferenza per il connettivo . . . . . . . . . . . . 62
5.6 Albero di prova con etichette . . . . . . . . . . . . . . . . . . 63
5.7 Regole di inferenza per il connettivo . . . . . . . . . . . . . 64
5.8 Regole di tipo per i tipi coppia . . . . . . . . . . . . . . . . . . 64
5.9 Regole di inferenza per il connettivo . . . . . . . . . . . . . 65
5.10 Regole di tipo per i tipi somma . . . . . . . . . . . . . . . . . 66
5
6 ELENCO DELLE FIGURE
Parte I
Il -calcolo puro
7
Capitolo 1
Implementazione
Dopo aver mostrato come nel -calcolo sia possibile esprimere qualunque
funzione calcolabile, giunto il momento di chiedersi come esso possa es-
sere implementato nei calcolatori. Largomento interessante in quanto il
lambda-calcolo rappresenta il modello formale su cui svariati linguaggi di
programmazione sono fondati: lesistenza di algoritmi pi o meno efcien-
ti per la riduzione di -termini si ripercuote dunque su molti linguaggi
funzionali.
1.1 Implementazione per sostituzione testuale
La tecnica pi semplice per limplementazione del -calcolo e della ridu-
zione di -termini, deriva dalla denizione stessa del linguaggio e della
-riduzione. Banalmente, si individua un qualunque redex (da reducible ex-
pression, espressione riducibile) nella forma (x.MN) e lo si sostituisce con
M[N/x] (secondo la regola della -riduzione).
Queste operazioni, a prima vista, possono essere compiute agevolmente
tanto sulla stringa che rappresenta il -termine, quanto sullalbero di sintas-
si astratta; tuttavia uno sguardo pi attento ci rivela la necessit di risolvere
problemi non banali, sacricando lefcienza. In particolare, notiamo che la
riduzione richiede una sostituzione che pu essere applicata soltanto pre-
vio occur-check. Ogni controllo di occorrenza richiede tempo lineare e, forse,
la ridenominazione di una variabile con una fresca. Non siamo disposti a
pagare un tempo lineare per ogni riduzione (specialmente se si considera
che nella gran parte dei casi il controllo di occorrenza non rivela collisioni,
ed dunque inutile), pertanto dovremo cambiare approccio.
Nella pratica, solamente le prime versioni di Lisp hanno utilizzato una
variante di questo approccio, mantenendo liste di associazioni nome-valore.
Ricordiamo per che Lisp non effettuava alcun controllo di occorrenza, im-
plementando dunque la semantica dello scope dinamico, che a noi non
interessa.
9
10 CAPITOLO 1. IMPLEMENTAZIONE
1.2 Notazione di De Bruijn
Dal momento che tutti i nostri problemi derivano dai nomi delle variabi-
li, non ci meraviglia che lidea che fornisce la soluzione del problema sia
quella di passare a una notazione name-free, ossia priva di nomi.
1.2.1 Codica name-free dei -termini
Osserviamo un -termine qualunque: come gi mostrato, esso pu essere
rappresentato con un albero, i cui nodi interni sono astrazioni e applicazio-
ni e le cui foglie sono le variabili. Per la propriet degli alberi, ogni nodo
collegato alla radice da un unico cammino: non c dunque nessuna am-
biguit nel denire ogni variabile non con un nome, ma con un indice nu-
merico (appartenente ai numeri naturali) che indica di quante astrazioni ri-
salire, lungo il cammino dalla foglia alla radice, per raggiungere lastrazio-
ne cui la variabile legata. Parallelamente, la notazione delle -astrazioni
pu essere modicata in modo da non indicare nomi di variabili, non pi
necessari. Pertanto un -termine
x.(x y.(y x))
viene trasformato in
.(0 .(0 1))
opportuno notare alcune particolarit di questa notazione, conosciuta
con il nome di notazione di De Bruijn
1
. Due occorrenze della stessa variabile
(ossia occorrenze di variabile legate allo stesso binder) possono assumere
a seconda della loro posizione dentro lalbero sintattico indici diversi; allo
stesso modo, non assolutamente detto che due indici uguali si riferiscano
alla stessa variabile: lunico modo per capire a quale binder si riferisca un
indice numerico quello di risalire lalbero sintattico di un numero di livelli
di astrazione pari al valore dellindice. Per questo la notazione di De Brui-
jn considerata abbastanza scomoda per la comprensione dei -termini e
viene utilizzata soltanto per gli algoritmi di riduzione automatica.
Deniamo ora un algoritmo per riscrivere -termini nella codica di
De Bruijn. Lalgoritmo denito per induzione strutturale e si suppone che
operi solamente su -termini chiusi.
[M]
vars
=
_
_
_
posizione di y in vars se M della forma y
.[M

]
x::vars
se M della forma x.M

([P]
vars
[Q]
vars
) se M della forma (P Q)
Lidea quella di decomporre ogni termine nei suoi sottotermini, tenen-
do traccia delle variabili legate ai livelli superiori. Per fare questo si utilizza
1
Si pronuncia de brain.
1.2. NOTAZIONE DI DE BRUIJN 11
una lista vars: inizialmente la lista vuota, poi ad ogni astrazione la si am-
plia premettendo la variabile legata e si propaga la nuova lista ai livelli
inferiori; nelle applicazioni ci si limita a propagare la lista ricevuta dal li-
vello superiore; inne le variabili vengono sostituite con lindice numerico
corrispondente alla posizione del nome della variabile nella lista vars.
1.2.2 Riduzione
La codica di De Bruijn sarebbe perfettamente inutile se non esistesse un
metodo efcace ed efciente per ridurre le espressioni codicate. Il metodo
esiste ma sfortunatamente non intuitivo quanto la sostituzione testua-
le; pertanto cercheremo di renderlo pi comprensibile per mezzo di alcuni
esempi.
Si supponga di voler ridurre il redex pi esterno di
z.(x.((z x) y.(y x)) w.(w z))
La parte destra del redex andr sostituita a tutte le occorrenze di x nella
parte sinistra. Nella codica di De Bruijn, loperazione diventa meno ovvia,
dato che le variabili non sono pi identicate per nome. Ad esempio in
.(.((1 0) .(0 1)) .(0 1))
la sostituzione dovr avvenire in corrispondenza di indici diversi (cer-
chiati in g. ); come se non bastasse, lindice corrispondente a z nella parte
sinistra del redex dovr essere decrementato (per via delleliminazione del-
la che legava x), mentre lindice corrispondente a z nella parte destra del
redex, essendo copiato due volte e a livelli di annidamento diversi in segui-
to alla riduzione, rimarr pari a 1 nel primo caso, mentre sar incrementato
a 2 nel secondo.
Per formulare un primo algoritmo in grado di ridurre termini codicati
secondo De Bruijn, notiamo che in seguito a una sostituzione:
gli indici di variabili libere (non locali) del sottotermine sinistro del
redex considerato devono essere decrementati di 1
gli indici di variabili legate del sottotermine sinistro, eccetto lindice
della variabile da sostituire, non sono modicati
gli indici della variabile da sostituire nel sottotermine sinistro sono
sostituiti con il sottotermine destro del redex, in cui le variabili libere
vengono incrementate di un valore pari allannidamento di ciascuna
occorrenza della variabile da sostituire.
12 CAPITOLO 1. IMPLEMENTAZIONE
Deniamo ora un algoritmo
2
per ridurre termini codicati secondo De
Bruijn. Per prima cosa deniamo una funzione lift per incrementare le
variabili libere di un -termine di un dato valore.
let lift n M =
let rec liftaux k M =
match M with
".P" -> "" ^ liftaux (k + 1) P
| "(P Q)" -> "(" ^ (liftaux k P) ^ (liftaux k Q) ^ ")"
| m -> (* indice di variabile *)
if m < k (* locale *) then m
else m + n
in liftaux 0 M;;
A questo punto possibile denire la funzione che sostituisce N in M
secondo la semantica della riduzione:
let subst N M =
let rec substaux k M =
match M with
".P" -> "" ^ substaux (k + 1) P
| "(P Q)" -> "(" ^ (substaux k P) ^ (substaux k Q) ^ ")"
| m -> (* indice di variabile *)
if m < k (* locale *) then m
else if m = k (* da sostituire *)
then lift k N
else (* libera in M *) m - 1
in substaux 0 M;;
1.2.3 Ricerca dei redex
Abbiamo denito un algoritmo per calcolare -riduzioni nella codica di
De Bruijn; tuttavia per interpretare il -calcolo necessario denire anche
una strategia per la ricerca dei redex: infatti in un termine possono essere
presenti molteplici redex e la scelta del redex da ridurre a ogni passo in-
uenza sia lefcienza dellinterpretazione (ossia il numero di riduzioni da
compiere prima di raggiungere la forma normale) sia la terminazione (non
ogni strategia di riduzione consente di giungere alla forma normale - se
esiste - in un numero nito di passi).
Due opposte strategie per la riduzione sono la chiamata per valore (in cui
vengono ridotte soltanto espressioni il cui termine destro privo di redex)
e la chiamata per nome (che al contrario riduce sempre il redex pi esterno,
qualunque sia la forma del parametro del redex).
La strategia leftmost-outermost implementa la chiamata per nome. Es-
sa esiste in due varianti:
2
Questo algoritmo e i successivi sono descritto con una notazione pseudo-ML. Si ricorda
che in ML loperatore esprime la concatenazione di stringhe e che listruzione match
corrisponde allincirca a uno switch-case.
1.2. NOTAZIONE DI DE BRUIJN 13
variante weak: non riduce mai allinterno di -astrazioni.
variante estesa: riduce anche allinterno di -astrazioni; si pu dimo-
strare che una strategia safe, nel senso che se un termine ha una for-
ma normale, sempre possibile raggiungerla seguendo questa strate-
gia.
Limplementazione della strategia leftmost-outermost estesa utilizza una
pila e una ricerca in profondit, nch non viene individuata una -astrazione.
codice pila codice pila
(M N) P M N::P
.M N::P (subst M N) P
.M dipende ...
1.2.4 Macchina di Krivine
Sorgenti di inefcienza
Nella strategia implementata n qui, purtroppo, ogni riduzione richiede
una scansione completa del ramo sinistro del redex. Pu capitare che due
riduzioni consecutive scandiscano due volte essenzialmente lo stesso al-
bero, mentre sarebbe opportuno scandirlo una sola volta e poi sostituire
contemporaneamente tutte le variabili coinvolte nelle riduzioni.
Per effettuare unoperazione del genere, in pratica, occorre tenere trac-
cia dei termini che andranno sostituiti. per questo che per migliorare lef-
cienza della nostra strategia introduciamo la nozione di ambiente. Lam-
biente (concettualmente simile alla pila dei record di attivazione utilizza-
ta dai linguaggi di programmazione) ci consente di differire ogni sostitu-
zione no a quando non strettamente necessaria, utilizzando una poli-
tica lazy. Limplementazione di questa strategia lazy necessita di una pro-
cedura msubst che valuta le variabili libere di un termine M allinterno
dellambiente e.
let msubst M e =
let n = length e in
let rec msubstaux M k = match M with
"(P Q)" -> "(" ^ (msubstaux P k) ^ (msubstaux Q k) ^ ")"
".P" -> "." ^ (msubstaux P (k + 1))
m -> if m < k (* locale *) then m
else if k <= m < k + n (* da sostituire *)
then (lift k (nth (m - k) e))
else (* libera *) m - n
in msubstaux M 0;;
La procedura msubst opera una sostituzione multipla e sfrutta la fun-
zione nth m e che restituisce lm-esimo elemento della lista e. Lalgoritmo
pu essere utilizzato secondo la seguente tabella:
14 CAPITOLO 1. IMPLEMENTAZIONE
ambiente codice pila ambiente codice pila
e (M N) P e M (msubst N e)::P
e .M N::P N::e M (msubst N e)::P
e m P (nth m e) P
Sfortunatamente msubst unoperazione complessa, che richiede un
tempo lineare, per via della scansione della lista dovuta alla funzione nth.
Si pu fare di meglio riprogettando la struttura dellambiente ed estenden-
do ulteriormente lapproccio lazy, come nella macchina che discuteremo
nel prossimo paragrafo.
La macchina di Krivine
La seguente tabella descrive la macchina di Krivine, proposta dallomonimo
matematico francese, tuttora vivente.
ambiente codice pila ambiente codice pila
e (M N) P e M N, e)::P
e .M c::P c::e M P
N, e)::e 0 P e N P
c::e n + 1 P e n P
e .M risultato = M, e)
Capitolo 2
Conuenza
Lobiettivo di questo capitolo sar dimostrare un importante teorema sul
-calcolo, dovuto a Church e Rsser, che qui enunciamo.
Teorema 2.1 (Church-Rsser). Sia M un termine. Se esistono due catene di
riduzioni tali che M

P e M

Q, allora esistono un termine N e altre due


catene di riduzioni P

N e Q

N.
M

.~
~
~
~
~
~
~
~

@
@
@
@
@
@
@
@
P


@
@
@
@
Q

.~
~
~
~
R
Figura 2.1: Teorema di Church-Rsser
Una rappresentazione graca del teorema data in g. 2.1. Ricordiamo
che le frecce continue esprimono una quanticazione universale, mentre
quelle tratteggiate esprimono una quanticazione esistenziale.
Prima di passare alla dimostrazione, abbastanza complessa, di questa
propriet del -calcolo (denominata conuenza), vogliamo spiegarne intui-
tivamente la portata.
In primo luogo, essa non dice nulla sulla terminazione del calcolo.
Sappiamo gi che il -calcolo ammette computazioni non terminanti, ossia
che non riducono a forma normale: precisiamo per che anche qualora un
termine possieda una forma normale, da esso possono avere origine catene
di riduzioni innite. Ad esempio, nel termine
(xy.y ( ))
15
16 CAPITOLO 2. CONFLUENZA
ogni riduzione sul redex interno riporta al termine iniziale, generando
una catena innita; daltra parte sempre possibile decidere di ridurre il
redex pi esterno, ottenendo
y.y
che un termine in forma normale. In pratica, anche se una strategia di
riduzione non conduce alla forma normale, in ogni momento posso decide-
re di cambiare strategia, e quindi con la strategia giusta calcolare la forma
normale.
2.1 Sistemi di riscrittura e conuenza
complicato dimostrare la conuenza generale nel -calcolo per via delle
due premesse di lunghezza arbitraria. evidente che per raggiungere qual-
che risultato dovremo cominciare dimostrando una versione semplicata
del problema e poi dimostrare che questa implica la conuenza generale.
Denizione 2.2 (propriet del diamante). Un sistema di riscrittura gode
della propriet del diamante (o Church-Rsser in un passo) se, dati un termine
M e due riduzioni (in un passo) M P e M Q, esistono un termine N
e due riduzioni (in un passo) P N e Q N.
Questa propriet una condizione sufciente per avere conuenza ge-
nerale: intuitivamente, con la conuenza in un passo potremmo riempire il
diamante grande della conuenza generale (la dimostrazione formale
lasciata come esercizio). Purtroppo questa propriet non vale nel -calcolo.
Si consideri ad esempio il termine
( (I I))
contenente due redex. Un passo di riduzione sul redex esterno produ-
ce ((I I) (I I)), mentre riducendo il redex interno otteniamo ( I). Lunica
riduzione successiva possibile in questultimo caso produce (I I), ma evi-
dente che per richiudersi su questo termine avendo seguito laltro lato del
diamante occorreranno due riduzioni. Questo dovuto al fatto che ogni ri-
duzione pu produrre pi copie del sottotermine di destra nel sottotermine
di sinistra
1
.
Unaltra propriet simile alla conuenza, ma pi semplice, la conuen-
za locale.
Denizione 2.3 (conuenza locale). Un sistema di riscrittura soddisfa la
conuenza locale se, dati un termine M e due riduzioni (in un passo) M
1
Esistono sistemi di riscrittura lineari, in cui i termini non vengono duplicati, per i quali
vale la propriet del diamante.
2.1. SISTEMI DI RISCRITTURA E CONFLUENZA 17
P e M Q, esistono un termine N e due catene di riduzioni P

N e
Q

N.
La conuenza locale, per, non implica la conuenza generale. Un si-
stema di riscrittura per cui vale la conuenza locale ma non la conuenza
generale schematizzato nel seguente diagramma:
C A

D
facile vedere che queste regole di riscrittura rispettano la conuenza
locale: nellunico caso interessante, da A possibile derivare in un passo
B e C, e inne conuire da B in C in due passi. Tuttavia la conuenza
generale non vale perch, sebbene sia possibile derivare da A in pi passi
sia C sia D, poi non possibile chiudere il diamante.
Un altro esempio di sistema in cui vale solo la conuenza locale mo-
strato nel seguente diagramma.

.
.
.


Dal momento che entrambi i sistemi di riscrittura mostrati in cui va-
le la conuenza locale ma non la conuenza generale sono non terminan-
ti, ci chiediamo se conuenza locale e terminazione siano una condizione
sufciente per garantire la conuenza generica. La risposta affermativa.
Teorema 2.4. Se in un sistema di riscrittura sempre terminante vale la conuenza
locale, allora vale anche la conuenza generale.
Dimostrazione. Sia (M) la funzione che restituisce la lunghezza massima
delle catene di riduzione aventi origine M. Indicando con
+
la riduzione
18 CAPITOLO 2. CONFLUENZA
in almeno un passo, senzaltro vale limplicazione:
M
+
P (M) > (P)
(si noti che questa proposizione vera soltanto se P non ammette catene di
derivazioni innite).
Vogliamo ora dimostrare che se da M si derivano in pi passi P e Q,
esiste un termine N tale che da P e da Q si deriva in pi passi N. La
dimostrazione per induzione su (M).
Nel caso base (M) = 0, deve essere M = P = Q = N, pertanto non
abbiamo nulla da dimostrare.
Nel caso induttivo, vale la conuenza generale per termini M

tali che
(M

) < (M) (per ipotesi induttiva). Supponiamo che le catene di ridu-


zioni da M a P e Q siano come le seguenti:
M M


P
M M


Q
Allora per lipotesi di conuenza locale esiste un termine R tale che M

R e M


R.
Daltra parte (M

) < (M); quindi per ipotesi induttiva esiste un


termine P

tale che P

P

e R

P

.
Inne anche (M

) < (M); quindi sempre per ipotesi induttiva esiste


un termine N tale che P


N e Q

N.
Si dimostra che nel -calcolo vale la conuenza locale. Tuttavia il -
calcolo puro non un formalismo terminante, pertanto ai nostri scopi anche
la conuenza locale inutile.
2.2 Dimostrazione
La propriet che dovremo dimostrare per derivare la conuenza generale
la seguente.
Lemma 2.5 (strip lemma). Sia M un termine. Dati due termini P e Q tali che
M

P (in un passo) e M

Q (in qualsiasi numero di passi), esiste un


termine N tale che P

N e Q

N (in qualsiasi numero di passi).


Il nome di questo lemma dovuto alla sua rappresentazione graca
(g. 2.2): una striscia (strip) del diagramma che rappresenta la conuenza
generale. Intuitivamente, riducendo il diagramma in tante strisce quante
sono necessarie, saremo in grado di dimostrare la conuenza.
Tuttavia, la dimostrazione dello strip lemma non banale: essa richiede
di tener traccia dei residui del redex R : M

P, che potrebbero essere


moltiplicati dalla catena di riduzioni : M

Q. Per riuscire nel nostro


intento, necessitiamo di una sintassi che ci consenta di marcare i residui.
2.2. DIMOSTRAZIONE 19
P
R








@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
Q

?
?
?
?
?
?
?
?
?
M

.}
}
}
}
R
Figura 2.2: Strip lemma
2.2.1 -calcolo marcato
Per tracciare i residui del redex R, lidea quella di etichettare R in modo
tale che letichetta sia mantenuta (eventualmente duplicata) dalla catena di
riduzioni . A questo scopo, dobbiamo estendere la sintassi del -calcolo.
Denizione 2.6 (-calcolo marcato). Linsieme dei termini del -calcolo
marcato, indicato con

, il pi piccolo insieme denito come segue:


se x una variabile, allora x

se M

e N

, allora (M N)

se M

e x una variabile, allora (x.M)

se M

, N

e x una variabile, allora (x.M N)

Le regole di conversione e riduzione sono analoghe a quelle per il calco-


lo non marcato. In particolare la -riduzione denita dalle regole seguen-
ti:
(x.M N)

M[
N
/x]
(x.M N)

M[
N
/x]
A rigore, bisognerebbe denire anche la sostituzione nel calcolo mar-
cato; noi daremo per scontata la denizione di sostituzione, limitandoci a
evidenziare che la sostituzione mantiene i redex marcati: in particolare una
sostituzione M[
N
/x] pu duplicare i redex marcati eventualmente presenti
in N, se x occorre in M pi di una volta.
Deniamo anche due funzioni di trasformazione da termini marcati a
termini non marcati: la funzione di cancellazione delle marche:
[ [ :

=
_

_
[x[ = x
[(M N)[ = ([M[ [N[)
[x.M[ = x.[M[
[(x.M N)[ = (x.M N)
20 CAPITOLO 2. CONFLUENZA
e la funzione di riduzione dei redex etichettati:
:

=
_

_
(x) = x
((M N)) = ((M) (N))
(x.M) = x.(M)
((x.M N)) = (M)[
(N)
/x]
2.2.2 Preparativi
Prima di dimostrare lo strip lemma, introduciamo le seguenti propriet
della sostituzione e del calcolo etichettato.
Lemma 2.7. Siano P, Q e R termini del -calcolo etichettato e x, y variabili: se y
non libera in R, allora P[
Q
/y][
R
/x] = P[
R
/x][
Q[
R
/x]
/y]].
(per il momento non lo dimostro: non fatto a lezione).
Lemma 2.8. Siano M e N termini del -calcolo etichettato e x una variabile:
allora (M)[
(N)
/x] = (M[
N
/x]).
Dimostrazione. Procediamo per induzione sulla struttura di M.
Se M = x:
(x)[
(N)
/x] = x[
(N)
/x] (def. di )
= (N) (def. di sostituzione)
= (x[
N
/x]) (def. di sostituz., allindietro)
Si noti il trucco, che sar utilizzato in tutti i passi della dimostra-
zione, in cui la parte nale dellequivalenza ottenuta procedendo
allindietro.
Se M = y ,= x:
(y)[
(N)
/x] = y[
(N)
/x] (def. di )
= y (def. di sostituzione)
= (y[
N
/x]) (def. di sostituz. e di , allindietro)
Se M = (P Q): in questo passo induttivo e nei successivi, dovendo dimo-
strare unequivalenza del tipo a = b, procederemo semplicando
prima a e poi b e mostrando inne che lequivalenza semplicata
banalmente implicata dallipotesi induttiva. Si ha:
((P Q))[
(N)
/x] = ((P) (Q))[
(N)
/x] (def. di )
= ((P)[
(N)
/x] (Q)[
(N)
/x]) (def. di sostituzione)
Parallelamente:
((P Q)[
N
/x]) = ((P[
N
/x] Q[
N
/x]) (def. di sostituzione)
= ((P[
N
/x]) (Q[
N
/x])) (def. di )
2.2. DIMOSTRAZIONE 21
Inne, per ipotesi induttiva:
((P)[
(N)
/x] (Q)[
(N)
/x]) = (P[
N
/x] Q[
N
/x])
Se M = y.P: possiamo supporre, senza perdita di generalit, che y non
sia una variabile libera in N (in caso contrario possiamo -convertire
M sostituendo y con una variabile fresca). Si ha:
(y.P)[
(N)
/x] = (y.(P))[
(N)
/x] (def. di )
= y.((P)[
(N)
/x]) (def. di sostituzione)
Parallelamente:
((y.P)[
N
/x]) = (y.(P[
N
/x])) (def. di sostituzione)
= y.(P[
N
/x]) (def. di )
Inne, per ipotesi induttiva:
y.((P)[
(N)
/x]) = y.(P[
N
/x])
Se M = (y.P Q): supponiamo, ancora senza perdita di generalit, che y
non sia una variabile libera in N. Si ha:
((y.P Q))[
(N)
/x] = (P)[
(Q)
/y][
(N)
/x] (def. di )
= (P)[
(N)
/x][
(Q)[
(N)
/x]
/y]] (lemma 2.7)
Parallelamente:
((y.P Q)[
N
/x]) = (y.P[
N
/x] Q[
N
/x]] (def. di sostituzione)
= (P[
N
/x])[
(Q[
N
/x)
/y]] (def. di )
Inne, per ipotesi induttiva:
(P)[
(N)
/x][
(Q)[
(N)
/x]
/y]] = (P[
N
/x])[
(Q[
N
/x])
/y]]
(si noti che qui lipotesi induttiva usata due volte, per (P)[
(N)
/x] =
(P[
N
/x]) e (Q)[
(N)
/x] = (Q[
N
/x]).
2.2.3 Dimostrazione dello strip lemma
La dimostrazione composta da tre sotto-lemmi, che enunceremo e dimo-
streremo singolarmente. Al termine, mostreremo come dai tre sotto-lemmi
derivi lo strip lemma.
22 CAPITOLO 2. CONFLUENZA
Lemma 2.9. Siano M e N termini del -calcolo standard. Per ogni catena di
riduzioni : M

N e per ogni termine M

del calcolo etichettato tale che


[M

[ = M, esistono un termine N

del calcolo etichettato e una catena di riduzioni


: M

tali che [N

[ = N. In altre parole il diagramma


()
M

N
(

)
M

||

_ _ _ _ _ _
N

||

commuta.
Il lemma ci dice che ogni riduzione del calcolo standard pu essere si-
mulata nel calcolo etichettato; dato che il calcolo etichettato identico al
calcolo standard eccetto che per i redex etichettati e che i redex etichetta-
ti vengono ridotti allo stesso modo dei redex normali, non dimostreremo
questa propriet, considerandola ovvia.
Lemma 2.10. Siano M

e N

termini del -calcolo etichettato. Per ogni catena di


riduzioni : M

esiste unaltra catena di riduzioni : (M

(N

). In altre parole il diagramma


(

)
M

() (M

_ _ _ _ _ _
(N

)
commuta.
Dimostrazione. La dimostrazione per induzione sulla lunghezza della ca-
tena . Ci limitiamo a dimostrare il caso base, ossia che sia una riduzio-
ne in un passo: procediamo per induzione sulla struttura dei termini che
partecipano alla riduzione.
(x.P Q)

P[
Q
/x]: si ha:
((x.P Q)) = (x.(P) (Q)) (def. di )

(P)[
(Q)
/x]
= (P[
Q
/x]) (lemma 2.8)
(x.P Q)

P[
Q
/x]: si ha:
((x.P Q)) = (P)[
(Q)
/x] (def. di )
= (P[
Q
/x]) (lemma 2.8)
2.2. DIMOSTRAZIONE 23
(P Q)

(P

Q): si hanno:
((P Q)) = ((P) (Q))
((P

Q)) = ((P

) (Q))
Daltra parte, per ipotesi induttiva, se P

allora (P)

(P

); pertanto ((P) (Q))


((P

) (Q)).
(P Q)

(P Q

): analogo al caso precedente.


x.P

x.P

: si hanno:
(x.P) = x.(P)
(x.P

) = x.(P

)
Daltra parte, per ipotesi induttiva, se P

allora (P)

(P

); pertanto x.(P)

x.(P

).
Lemma 2.11. Per ogni termine M

del -calcolo etichettato, esiste una catena di


riduzioni : [M

(M

). In altre parole il diagramma


(

)
M

||
{
{
{
{
{
{
{
{

F
F
F
F
F
F
F
F
F
() [M

_ _ _ _ _ _ _
(M

)
commuta.
Dimostrazione. La dimostrazione per induzione strutturale su M.
M = x: [x[ = x = (x), pertanto il lemma banalmente vericato.
M = (P Q): si ha:
[(P Q)[ = ([P[ [Q[)
((P Q)) = ((P) (Q))
Daltra parte, per ipotesi induttiva:

: [P[

(P)

: [Q[

(Q)
Pertanto : ([P[ [Q[)

((P) (Q)).
24 CAPITOLO 2. CONFLUENZA
M = x.P: si ha:
[x.P[ = x.[P[
(x.P) = x.(P)
Daltra parte, per ipotesi induttiva:

: [P[

(P)
Pertanto : (x.[P[)

x.(P).
M = (x.P Q): si ha:
[(x.P Q)[ = (x.[P[ [Q[)
((x.P Q)) = (P)[
(Q)
/x]
A questo punto possiamo ridurre in un passo:
(x.[P[ Q)

[P[[
|Q|
/x]
Per ipotesi induttiva:
[P[

(P)
[Q[

(Q)
Per dimostrare il teorema, quindi, ora sufciente dimostrare la se-
guente propriet:
M

M[
N
/x]

[
N

/x]
Per comodit, scomponiamo questa propriet in due parti:
M

M[
N
/x]

[
N
/x]
N

M[
N
/x]

M[
N

/x]
La prima pu essere dimostrata agevolmente per induzione; per la
seconda occorre dimostrare che la riduzione M

pu essere
compiuta sulle varie copie di M presenti in N in modo indipendente
(la dimostrazione completa per induzione strutturale).
2.3. IMPLICAZIONI 25
M
R
.|
|
|
|
|
|
|
|

L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
P

J
J
J
J
J
J
J
J
J
J
J
J
J M

||

K
K
K
K
K
K
K
K
K
K
K
K
K
K
Q

.y
y
y
y
y
(Q

) Q

||

Figura 2.3: Dimostrazione dello strip lemma.


Siamo ora in grado di dimostrare lo strip lemma. Dati un termine M e
due riduzioni R : M

P e : M

Q, costruiamo il termine M

del -calcolomarcato, identico a M tranne per il fatto che il redex R stato


marcato. Per costruzione:
[M

[ = M
(M

) = P
Per il lemma 2.9, la catena di riduzioni M

Q pu essere simulata
nel calcolo etichettato: esistono cio un termine Q

tale che [Q

[ = Q e una
catena di riduzioni per mezzo della quale M

. Dal lemma 2.11


segue invece lesistenza di una catena di riduzioni da Q = [Q

[ a (Q

).
Inne, per il lemma 2.10, esiste una catenza di riduzioni da P a (Q

).
Pertanto (Q

) il termine in cui conuiscono P e Q e lo strip lemma


dimostrato.
2.2.4 Dimostrazione di Church-Rsser
Per induzione sulla lunghezza n della catena M

P.
n = 1: segue direttamente dallo strip lemma.
n > 1: sia P

un termine tale che M

P. Per lo strip lemma,


esiste un termine Q

tale che P

e Q

. Per ipotesi
induttiva, essendo la catena P

P lunga n 1, esiste inne un


termine R tale che P

R e Q

R.
2.3 Implicazioni
Discutiamo brevemente alcune delle conseguenze immediate del teorema
di Church-Rsser.
26 CAPITOLO 2. CONFLUENZA
Corollario 2.12. Se la forma normale di un -termine esiste, questa unica.
Dimostrazione. Supponiamo che M abbia due forme normali distinte P e
Q. Dal teorema di Church-Rsser segue che esiste un termine R tale che
P

R e Q

R. Tuttavia, poich P e Q sono in forma normale,


queste derivazioni devono essere di lunghezza zero, ossia P = R = Q,
contro lipotesi che voleva P e Q distinti: assurdo.
Corollario 2.13. Se due termini M e N sono -equivalenti, esiste un termine P
tale che M

P e N

P.
Dimostrazione. Dalla denizione di -equivalenza, segue che esistono due
sequenze Q
1
, Q
2
, . . . Q
n1
e P
1
, P
2
, . . . P
n
di termini tali che:
M

P
1
Q
i1

P
i
i = 2, 3, . . . n
Q
i

P
i
i = 1, 2, . . . n 1
N

P
n
La dimostrazione per induzione su n.
n = 1: la dimostrazione ovvia, perch M e N riducono allo stesso termine
P
1
.
n > 1: per ipotesi induttiva, esiste un termine R tale che
M

R
Q
n1

R
Daltra parte, per la denizione di -equivalenza
Q
n1

P
n
N

P
n
Poich Q
n1
riduce ai due termini R e P
n
, per il teorema di Church-
Rsser esiste un termine P tale che
R

P
P
n

P
ma allora anche M ed N riducono in pi passi a P ed il corollario
dimostrato.
evidente che questultimo corollario ci offre un modo operativo per
vericare la -equivalenza di due termini dotati di forma normale: se la
forma normale la stessa, i due termini sono -equivalenti, mentre se le
forme normali sono differenti, i due termini non sono -equivalenti. Se in-
vece i due termini non hanno forma normale, questo procedimento non
funziona; questo non ci sorprende: si dimostra infatti che la -equivalenza
non decidibile nel caso generale.
Capitolo 3
Teorie equazionali
La relazione di -riduzione formalizza la nozione di calcolo nel -calcolo:
in altre parole due termini -equivalenti sono due costrutti sintatticamente
diversi che per denotano (dimostrabilmente) lo stesso oggetto. Come ab-
biamo visto (?), la -equivalenza una congruenza, ossia una relazione di
equivalenza preservata da ogni contesto. Le espressioni del tipo
M =

N
dove M e N sono termini, costituiscono un insieme di formule logiche che
desideriamo rendere provabili sotto unopportuna teoria. Ricordiamo che
una teoria un insieme di formule chiuso sotto una nozione di dimostrabi-
lit o derivabilit.
3.1 Le teorie e
La teoria formalizza la -equivalenza. Essa prevede regole per denire
= come una relazione di equivalenza:
s = s (RIFLESSIVIT)
s = t
t = s
(SIMMETRIA)
s = t t = u
s = u
(TRANSITIVIT)
regole che assicurano che = sia una congruenza:
s = s

t = t

(s t) = (s

)
(APPLICAZIONE)
27
28 CAPITOLO 3. TEORIE EQUAZIONALI
s = t
x.s = x.t
(ASTRAZIONE)
e la -equivalenza:
(x.s t) = s[
t
/x] ()
Lobiettivo, ovviamente, quello di catturare nella nostra teoria il mag-
gior numero possibile di equivalenze semantiche tra termini, pur sapen-
do (dal primo?? teorema di incompletezza di Gdel) che non sar pos-
sibile renderla completa, dal momento che possibile esprimere in essa
laritmetica di Peano.
Ci chiediamo dunque se esistono equivalenze interessanti che la teoria
non cattura e se possibile aggiungerle come assiomi, senza che la teoria
diventi inconsistente. Per vericare se lequivalenza di due termini P e Q
pu essere aggiunta alla teoria senza renderla inconsistente, basta vericare
se esiste una sequenza di termini N
1
, ..., N
k
tale che
(P N
1
... N
k
) = fst
(Q N
1
... N
k
) = snd
evidente che in un caso simile non potremmo aggiungere lequiva-
lenza alla teoria: infatti ne seguirebbe lequivalenza tra fst e snd, e quindi
lequivalenza tra ogni coppia di termini M, N, come segue:
fst = snd
(fst M N) = (snd M N)
(APPLICAZIONE)
M = N
()
In una situazione simile, i due termini P e Q sono quindi detti discrimi-
nabili.
In pratica, potrebbe essere interessante mostrare lequivalenza di vari
programmi diversi, ad esempio le due forme di funzione successore per gli
interi di Church:
P : nxy.(x (n x y))
Q : nxy.(n x (x y))
Sfortunatamente P e Q sono termini discriminabili, come mostra il se-
guente esempio:
3.1. LE TEORIE E 29
(P xy.snd z.fst N)

(z.fst (xy.snd z.fst N))

fst
(Q xy.snd z.fst N)

(xy.snd z.fst (N z.fst))

snd
da cui segue che in una teoria consistente i due termini non possono essere
uguagliati. Questo risultato potrebbe essere considerato sorprendente, dato
che ci aspetteremmo che il comportamento dei due termini che calcolano
il successore fosse coincidente; la spiegazione per molto semplice: i due
termini sono equivalenti soltanto se applicati agli interi di Church, e con
altri parametri possono manifestare comportamenti differenti.
Si considerino invece i due termini seguenti:
M
x.(M x)
Supponendo che M sia in forma normale, anche x.(M x) in forma nor-
male; daltra parte, come sappiamo, due forme normali diverse non sono
mai -equivalenti; tuttavia, abbastanza semplice convincersi che, qualo-
ra x non compaia libera in M, i due termini si comporteranno nello stesso
modo una volta applicati a un altro termine. Infatti, qualunque sia P:
(x.(M x) P)

(M P)
Introduciamo allora la seguente regola
M = x.(M x) ()
detta -equivalenza, tenendo presente che essa valida solamente se x non
compare libera in M. L-equivalenza introduce il principio dellequivalen-
za estensionale
1
.
Proposizione 3.1 (equivalenza estensionale). Due -termini M e N sono esten-
sionalmente equivalenti se e solo se sono -equivalenti, ossia per ogni termine P
vale
(M P) =

(N P) M =

N
1
Si ricorda che due programmi sono estensionalmente equivalenti se per ogni input
restituiscono lo stesso output
30 CAPITOLO 3. TEORIE EQUAZIONALI
Dimostrazione. ) Per ipotesi, vale (M P) =

(N P) per ogni P. Sceglia-


mo P = z / FV (M). Allora per la regola (ASTRAZIONE) si ha
(M z) =

(N z) z.(M z) =

(N z)z.(N z)
Poich, dalla regola ()
M =

z.(M z)
N =

z.(N z)
per la propriet (TRANSITIVA) si ha
M =

N
) Ovvia, dalla regola (APPLICAZIONE).
Osservazione 1. La -equivalenza una forma di estensionalit relativamen-
te debole, poich in genere siamo interessati a funzioni equivalenti non su
ogni parametro possibile, ma su ogni parametro appartenente a una certa
classe, come gli interi di Church relativamente alle due forme di funzione
successore.
Osservazione 2. Accanto alla -equivalenza, si pu considerare una nozione
di -riduzione
x.(M x)

M
soggetta alla stessa restrizione sulla variabile x, che non pu quindi com-
parire libera in M. Utilizzando anche questa regola, il calcolo rimane con-
uente, pertanto ha senso parlare di forme -normali.
3.2 Il teorema di separabilit
o di separazione?
Dimostreremo ora il seguente risultato, dovuto al matematico italiano Cor-
rado Bhm.
Teorema 3.2 (separabilit). Siano M e N due termini chiusi in forma -normale
e differenti. Allora esiste una sequenza di termini chiusi P
1
, . . . , P
k
tali che
_
(M P
1
. . . P
k
) = fst
(N P
1
. . . P
k
) = snd
3.2. IL TEOREMA DI SEPARABILIT 31
3.2.1 Preparativi
Diamo ora alcune denizioni che ci saranno utili nella dimostrazione del
teorema.
Denizione 3.3 (forma normale di testa). Un -termine si dice in forma nor-
male di testa (hnf) se della forma x
1
. . . x
n
.(y M
1
. . . M
k
), con M
1
. . . M
k
qualunque; y detta variabile di testa.
N una forma normale di testa di M se N in hnf e vale M =

N.
Le hnf si ottengono comunemente come passaggi intermedi di un pro-
cesso di riduzione leftmost-outermost. Ovviamente non tutti i termini pos-
siedono una hnf (si pensi al solito termine divergente ( )). Ogni forma
normale anche una hnf.
Denizione 3.4 (permutatore). Un permutatore di ordine n un termine della
forma

n
x
1
. . . x
n
x.(x x
1
. . . x
n
)
Denizione 3.5 (albero di Bhm). Lalbero di Bhm di un -termine M, in-
dicato con BT(M) denito come segue:
BT(M) =
_

_
se M non ha una forma normale di testa
x.y
t
t
t
t
t
t
t
t
t
J
J
J
J
J
J
J
J
J
BT(M
1
) BT(M
k
)
se M =

x.(y M
1
M
k
)
Due alberi di Bhm differiscono al primo livello se differiscono o nella
radice o nel numero dei gli della radice.
Denizione 3.6 (trasformazioni di Bhm). Si denisce trasformazione di Bhm
ogni composizione delle seguenti trasformazioni da -termini in -termini:
1. applicazioni B
N
: M (M N)
2. sostituzioni B
N,y
: M M[
N
/y]
Lapplicazione di una o pi trasformazioni a un termine M sar indicata
posponendo le trasformazioni al termine, ad esempio:
M B
P
B
Q
B
N,y
(M P Q)[
N
/y]
Le trasformazioni di Bhm consentono di istanziare le variabili libere di un
termine (utilizzando sostituzioni) e quelle legate in unastrazione posta al
primo livello dellalbero di Bhm corrispondente (utilizzando applicazio-
ni).
32 CAPITOLO 3. TEORIE EQUAZIONALI
Dimostrazione. La dimostrazione ragiona sul livello dellalbero di Bhm in
cui i due termini si differenziano: se si differenziano al primo livello, si
costruiscono delle liste argomenti che consentono di ridurre i due termini
rispettivamente a fst e a snd; in caso contrario, viene mostrata una tecnica,
detta Bhm-out che consente di far emergere la differenza, spostandola no
al primo livello, utilizzando solamente trasformazioni di Bhm.
M = x.(y P
1
. . . P
r
)
N = y.(z R
1
. . . R
s
)
si differenziano al primo livello se:
1. [ x[ , = [ y[
2. y ,= z
3. r ,= s
Nel caso 1 sempre possibile trasformare il termine avente la lista di
argomenti di lunghezza minore con -equivalenze, no a rendere le liste
di argomenti di M e N uguale lunghezza. Inoltre, se [x[ = [y[, sempre
possibile -convertire i due termini in modo che x = y.
Nel caso 2 i due termini sono della forma
M = x.(y P
1
. . . P
r
)
N = x.(z R
1
. . . R
s
)
In questo caso sfrutteremo la presenza di due variabili di testa differenti.
Istanzieremo y con:
w
1
. . . w
r
.fst
e z con:
w
1
. . . w
s
.snd
Tutte le variabili legate in x e diverse da y e z, potranno essere istan-
ziate dove necessario con un termine qualunque.
Nel caso 3 i due termini sono della forma
M = x.(y P
1
. . . P
r
)
N = x.(y R
1
. . . R
s
)
Possiamo raggiungere il nostro scopo sfruttando la variabile y e la dif-
ferenza nel numero di parametri che le vengono passati. Questa volta oc-
correr istanziare y con:
z
1
. . . z
s+1
.z
s+1
3.2. IL TEOREMA DI SEPARABILIT 33
Di seguito, istanzieremo tutte le variabili legate in x e diverse da y con
termini qualunque. Inne applicheremo la seguente lista di parametri:
w
1
. . . w
sr
.snd
. .
sr1
fst
dove gli asterischi indicano termini qualunque.
Nel caso in cui i due termini M e N differiscano a un livello inferiore,
utilizziamo la seguente tecnica (Bhm-out) per far risalire la differenza di
un livello. Supponiamo di avere i due termini
M = x.(y P
1
. . . P
r
)
N = x.(y R
1
. . . R
r
)
e di voler far risalire la differenza presente nei sottotermini P
k
e R
k
. Consi-
derando gli alberi di Bhm BT(M) e BT(N), si distinguono tre casi:
1. se la variabile di testa y non occorre altre volte nel percorso che con-
duce ai sottoalberi che differiscono al primo livello, pu essere istan-
ziata con lopportuna proiezione, ovvero x
1
x
r
.x
k
per far risalire
il sottoalbero differente;
2. se la variabile di testa y occorre pi volte nel percorso che conduce al-
la differenza, occorre effettuare unoperazione di linearizzazione per
ricondursi al caso precedente; sia h il massimo numero di gli di y nel
percorso suddetto: y verr istanziata con
h
(il permutatore di ordine
h;
3. ogni altra variabile, se necessario, andr istanziata con una variabile
libera fresca.
Osservazione 3. Se ci limitiamo a equazioni tra termini in forma normale,
non possibile estendere ulteriormente la nostra teoria: dal teorema di se-
parabilit segue che tutti i termini che applicati a un parametro qualunque
danno risultati equivalenti, sono a loro volta equivalenti. Pertanto la teo-
ria incompleta soltanto per quanto riguarda i termini che non hanno
forma normale. In particolare equivalenze come
( ) = (( ) N)
non sono derivabili n renderebbero la teoria inconsistente; ovviamente la
loro utilit pressoch nulla.
34 CAPITOLO 3. TEORIE EQUAZIONALI
Parte II
Calcoli tipizzati
35
Capitolo 4
Il -calcolo tipizzato semplice
Il concetto di tipo ci consente di trattare in maniera sintattica certe caratteri-
stiche semantiche dei programmi che si possono scrivere in un linguaggio.
Nei linguaggi tipizzati, necessario associare alle variabili, alle espressio-
ni e pi in generale ai termini dei programmi delle annotazioni di tipo. Le
annotazioni di tipo legali costituiscono il sottolinguaggio delle espressioni
di tipo ben formate. A seconda del linguaggio, le annotazioni di tipo devo-
no essere specicate esplicitamente dal programmatore, oppure possono
essere generate in modo automatico dallinterprete o dal compilatore.
Semanticamente, per tipo intendiamo linsieme di valori che una va-
riabile, unespressione o un frammento di programma possono assumere
durante lesecuzione. Nei linguaggi tipizzati, lintervallo di valori che una
variabile pu assumere limitato e i programmi devono soddisfare la pro-
priet di buona tipizzazione (well-typedness); nei linguaggi non tipizzati,
possibile effettuare operazioni prive di senso, e queste non saranno rile-
vate, proprio perch non richiesta una buona tipizzazione: introducendo
dei vincoli per il programmatore, la buona tipizzazione previene numerosi
errori di esecuzione.
In questo capitolo introdurremo il -calcolo tipizzato semplice (

),
analizzandone sintassi e semantica e vericandone il potere espressivo.
4.1 Sintassi
La sintassi del -calcolo tipizzato semplice si fonda su quella del -calcolo
puro, discostandosene ben poco. Lestensione di maggior rilievo riguar-
da ovviamente linsieme dei tipi legali: esso comprende un insieme nito
di tipi atomici (non strutturati), che indicheremo con le lettere maiuscole
A, B, C . . . e sui quali non faremo assunzioni, e un insieme numerabile di
tipi induttivi (strutturati), costruiti a partire da un numero nito di costrut-
tori di tipo. Il principale costruttore a cui siamo interessati per ovvi motivi
37
38 CAPITOLO 4. IL -CALCOLO TIPIZZATO SEMPLICE
il costruttore dei tipi funzione (), che prende due tipi T
1
e T
2
e costruisce
il tipo delle funzioni da T
1
in T
2
.
Linsieme dei tipi legali costituisce il sottolinguaggio delle espressioni
di tipo, descritto in forma di grammatica in g. 5.1. Perch non allinea i
::= ?
T) ::= AT) | T) T)
AT) ::= A | B | C | . . .
Figura 4.1: Espressioni di tipo nel -calcolo tipizzato semplice
La sintassi dei termini modicata soltanto nel caso dellastrazione:
infatti necessario specicare un tipo per ogni variabile legata. La gramma-
tica presentata in g. 5.2.
term) ::= var) | var):T).term) | (term) term))
var) ::= x | y | z | x
1
| . . .
Figura 4.2: Termini del -calcolo tipizzato semplice
4.2 Sistemi di tipi
Dopo aver denito la sintassi del calcolo tipizzato, ci chiediamo come sia
possibile assegnare un tipo ai termini del linguaggio. Allo stato attuale, in-
fatti, i tipi sono soltanto unaggiunta cosmetica che non pone alcun vincolo.
Ad esempio il termine
(x : A.x x : A.x)
dove A un tipo atomico, non dovrebbe essere considerato corretto perch
il termine passato come parametro non di tipo A, bens (intuitivamente)
di tipo A A. Termini come questo sono detti mal tipizzati e non ci in-
teressa esprimere computazioni su di essi (un compilatore li rigetterebbe
segnalando un errore di semantica statica).
Ci interessa tuttavia trovare un modo per denire la nozione di buo-
na tipizzazione e per distinguere i termini tipizzati bene da quelli tipiz-
zati male. I sistemi di tipi sono collezioni di regole che ci consentiranno di
raggiungere questo scopo.
Un buon sistema di tipi (utile in pratica per un linguaggio di program-
mazione) deve godere delle seguenti propriet [?]: ce lo mettiamo?
deve essere decidibilmente vericabile: deve esistere un algoritmo di
type-checking che verichi se un programma ben tipato.
4.2. SISTEMI DI TIPI 39
deve essere trasparente: il programmatore deve essere in grado di
prevedere se un programma ben tipato o meno e perch.
deve essere enforceable: le dichiarazioni di tipo dovrebbero essere il
pi possibile vericate staticamente, altrimenti dinamicamente. La
consistenza tra le dichiarazioni di tipo e il codice associato ad esse
devessere vericabile da un programma.
Introduciamo ora il formalismo dei sistemi di tipi.
4.2.1 Giudizi
Lentit atomica trattata dai sistemi di tipi un particolare tipo di espres-
sione formale denominato giudizio. Un giudizio ha la forma:
I
che si legge verica I. I unasserzione; detto contesto e de-
nisce i tipi delle variabili che compaiono libere in I, nella forma x
1
:
A
1
, . . . , x
n
: A
n
(qui il simbolo : rappresenta la relazione appartiene al
tipo). necessario che tutte le variabili libere nellasserzione siano dichia-
rate in . Per il calcolo tipizzato semplice, siamo interessati a una sola forma
di asserzione, vale a dire
M : T
dove M un termine e T un tipo qualunque, che si legge M ha tipo T in

Talvolta indicheremo un contesto in maniera esplicita elencandone le


componenti (ad esempio: x : S, y : T); indicheremo inoltre la concatenazio-
ne di ambienti con la virgola (ad esempio: ,

).
4.2.2 Regole di tipo
Un giudizio pu essere valido o non valido. La validit di un giudizio de-
nita sulla base di certe regole di inferenza che costituiscono il sistema di
tipi formale.
Una regola (g. 5.3) composta da un certo numero di giudizi (premesse)
posti sopra una linea orizzontale e da un unico giudizio (conclusione) posto
sotto la linea: se sono valide le premesse, valida la conclusione.

1
I
1
. . .
n
I
n
I
(REGOLA GENERICA)
Figura 4.3: Esempio generico di regola di tipo
40 CAPITOLO 4. IL -CALCOLO TIPIZZATO SEMPLICE
Se una regola non prevede premesse, si intende che la conclusione
intrinsecamente valida, cio un assioma.
Le regole possono essere composte in un albero di derivazione: la con-
seguenza di una qualsiasi regola pu essere utilizzata come premessa di
unaltra regola. Per vericare la validit di un giudizio occorre dare un al-
bero di derivazione corretto, le cui foglie siano assiomi e la cui radice sia il
giudizio da vericare.
Le regole di tipo (g. 5.4) per il calcolo tipizzato semplice sono tre, una
per ciascun tipo di termine. La regola per le variabili un assioma che as-
segna a x il tipo T, posto che x : T compaia nel contesto. Unapplicazione
ha tipo T
2
se la parte funzionale ha tipo T
1
T
2
e largomento ha tipo T
1
.
Unastrazione x : T
1
.M ha tipo T
1
T
2
se, supponendo che x abbia tipo
T
1
, M ha tipo T
2
.
x : T se x : T (T-AX)
M : T
1
T
2
N : T
1
(M N) : T
2
(T-APP)
, x : T
1
M : T
2
x : T
1
.M : T
1
T
2
(T-ABS)
Figura 4.4: Regole di tipo per il -calcolo tipizzato semplice
4.2.3 Applicazioni
Dato un sistema di tipi, un termine M ben tipizzato in un ambiente se
esiste un tipo A per cui il giudizio M : A valido. Il problema di con-
trollare lesistenza di un tipo ben formato per i termini di un programma
detto typechecking. Il problema di identicare, se esiste, il tipo di un termine
detto invece type inference o inferenza dei tipi.
Si noti che non per tutti i sistemi di tipi esistono algoritmi di typechec-
king o type inference (se esiste un algoritmo di type inference, ovviamente
esiste anche lalgoritmo di typechecking, ma non vero il contrario): per al-
cuni sistemi, questi problemi sono indecidibili (non possibile determinare
per via algoritmica se il problema ha soluzione o meno) o semidecidibili
(esiste un semialgoritmo che termina soltanto se il problema ha soluzio-
ne). Ovviamente in un sistema di tipi per un linguaggio di uso pratico il
typechecking, e alloccorrenza la type inference, devono essere decidibili.
Una propriet importante che i sistemi di tipi devono rispettare con-
nessa alla semantica operazionale dei programmi tipizzati. Afnch il siste-
ma di tipi sia corretto necessario garantire che se M : A un giudizio
4.3. PROGRAMMI IN

41
valido e il termine M riduce a un termine M

, allora M

: A. Questa
propriet detta propriet di riduzione del soggetto.
4.3 Programmi in

Per mostrare il potere espressivo del -calcolo tipizzato semplice, proce-


deremo come al solito mostrando codiche per booleani e naturali e per
le operazioni che li manipolano. Per quanto riguarda i booleani, potrem-
mo aggiungere in modo banale annotazioni di tipo alle codiche usate nel
-calcolo puro:
true x
T
1
.y
T
2
.x : T
1
T
2
T
1
false x
T
1
.y
T
2
.y : T
1
T
2
T
2
Notiamo per che in questo modo il principale costrutto che utilizza
booleani lif-then-else sarebbe praticamente impossibile da tipizzare,
sia perch true e false hanno tipo diverso, sia perch non sarebbe possibile
prevedere il tipo del risultato (T
1
o T
2
?).
La soluzione quindi quella di utilizzare lo stesso tipo per entrambe le
continuazioni dellif, e modicare quindi il tipo dei booleani di conseguen-
za.
true
T
x
T
.y
T
.x : T T T
false
T
x
T
.y
T
.y : T T T
Si possono quindi denire anche il tipo booleano e lif-then-else (si noti
che booleani e if-then-else sono parametrizzati rispetto al tipo delle conti-
nuazioni).
Bool
T
T T T
ITE
T
b
Bool
T
.x
T
.y
T
.(b x y) : Bool
T
T T T
Deniamo la codica di Church per gli interi in modo del tutto analogo
al -calcolo puro. In primo luogo lo zero:
0 x : T
1
.y : T
2
.y : T
1
T
2
T
2
La differenza sostanziale rispetto al caso non tipizzato sta nella necessi-
t di assegnare dei tipi ai parametri della funzione che rappresenta lo zero.
Questi tipi sono stati indicati genericamente con T
1
e T
2
, perch idealmente
vorremmo che lo zero fosse un valore polimorfo in cui T
1
e T
2
fossero istan-
ziabili con qualunque tipo. Vediamo cosa accade cercando di tipizzare la
denizione dell1.
1 x : T
1
T
2
.y : T
1
.(x y) : (T
1
T
2
) T
1
T
2
42 CAPITOLO 4. IL -CALCOLO TIPIZZATO SEMPLICE
Per l1 otteniamo un termine di tipo diverso. Anche in questo caso T
1
e T
2
stanno ad indicare due tipi qualunque. Vediamo inne il caso del
numero 2.
2 x : T T.y : T.(x (x y)) : (T T) T T
Anche in questo caso il tipo del termine differente; T denota un tipo
qualunque. Per i numeri interi maggiori di 2 si pu invece vericare che il
tipo risulta identico a quello del 2.
Questa situazione anomala si risolve vericando che possibile specia-
lizzare i tipi dei numeri 0 e 1, in modo che unichino con il tipo di 2. In par-
ticolare in 0 occorre sostituire T
1
con T T e T
2
con T; in 1 si sostituiscono
sia T
1
sia T
2
con T.
Per concludere, il tipo dei numeri interi denito in modo parametrico
rispetto a un qualunque tipo T, come segue:
Nat
T
(T T) T T
e anche gli interi di Church e la funzione successore sono deniti in modo
parametrico rispetto a T:
0
T
x : T T.y : T.y : Nat
T
1
T
x : T T.y : T.(x y) : Nat
T
2
T
x : T T.y : T.(x (x y)) : Nat
T
.
.
.
succ
T
n : Nat
T
.x : T T.y : T.(x (n x y)) : Nat
T
Nat
T
4.3.1 Potere espressivo
La possibilit di denire booleani e interi non sufciente a garantire une-
levata espressivit al nostro sistema di calcolo: sarebbe opportuno mostra-
re almeno una codica per le funzioni primitive ricorsive. Tuttavia, una
tale codica non esiste: per la precisione, il -calcolo tipizzato semplice
non consente di tipizzare nemmeno funzioni semplici come il predeces-
sore. In sostanza, le uniche funzioni esprimibili sono somma, prodotto e
composizioni di queste.
possibile estendere il potere espressivo di questo calcolo introducen-
do operatori ad hoc per la ricorsione, o equivalentemente un operatore pun-
to sso
FIX
T
: (T T) T
(FIX
T
M)

(M (FIX
T
M)) se M : T
Neanche in questo modo, tuttavia, il calcolo diventa Turing-completo. vericare il tipo di
M...
4.4. CORRISPONDENZA DI CURRY-HOWARD 43
4.4 Corrispondenza di Curry-Howard
In questa sezione presenteremo uninteressante analogia tra calcoli tipizzati
e sistemi logici deduttivi. La corrispondenza di Curry-Howard fa corrisponde-
re alle formule logiche i tipi di un linguaggio tipizzato, alle prove i termini
(e in particolare a una prova della formula A un termine di tipo A).
La corrispondenza funziona particolarmente bene per la logica intui-
zionista (e specialmente per certi frammenti di essa), ma pu essere estesa,
nello spirito di trasporre i progressi della logica nei linguaggi di program-
mazione e viceversa.
4.4.1 Il frammento implicativo
Il frammento implicativo della logica intuizionista include le formule logi-
che espresse per mezzo di proposizioni atomiche (A, B, ...) e del connettivo
.
Le dimostrazioni sono date, in deduzione naturale, per mezzo delle
regole (g. 5.5) di introduzione dellimplicazione ( i) e di eliminazione
dellimplicazione (modus ponens o e).
[A]
.
.
.
B
A B
( i)
A B A
B
( e)
Figura 4.5: Regole di inferenza per il connettivo
Secondo la regola di introduzione, possiamo derivare una dimostrazione
di A B (A implica B) se abbiamo un procedimento costruttivo (un algo-
ritmo) che trasforma dimostrazioni di A in dimostrazioni di B; la regola di
eliminazione ci consente invece di comporre una dimostrazione di A B
con una dimostrazione di A per ottenere una dimostrazione di B.
La corrispondenza di Curry-Howard ci consente di associare alle di-
mostrazioni ottenute componendo queste regole opportuni termini del -
calcolo tipizzato semplice. Al ne di rendere la corrispondenza pi eviden-
te, supporremo che alle foglie scaricate di un albero di prova e alle regole di
introduzione dellimplicazione sia sempre associata unetichetta (apparte-
nente allinsieme x, y, z, x
1
, . . .) in modo da identicare la specica regola
di introduzione in cui la foglia scaricata
1
(g. 5.6).
La corrispondenza data dalle seguenti regole induttive che associano
a dimostrazioni termini di

:
1
Questo accorgimento rende la corrispondenza di Curry-Howard un vero e proprio
isomorsmo.
44 CAPITOLO 4. IL -CALCOLO TIPIZZATO SEMPLICE
1. Data una dimostrazione costituita dalla singola ipotesi Anon scarica-
ta, si fa corrispondere una variabile fresca x : A.
2. Data una dimostrazione costituita dalla singola ipotesi A, scaricata ed
etichettata y, si fa corrispondere la variabile y : A.
3. Data una dimostrazione che termina con ( i), siano S T la con-
clusione della dimostrazione, y letichetta dellultimo passo di deri-
vazione e u il termine associato alla sottodimostrazione immedia-
tamente superiore. Si fa corrispondere il termine y : S.u : S
T.
4. Data una dimostrazione che termina con ( e), siano u : S T
e v : S i termini associati alle due sottodimostrazioni immediata-
mente superiori allultimo passo di derivazione. Si fa corrispondere il
termine (u v) : T.
4.4.2 Il connettivo
In g. 5.7 sono riportate le regole per la congiunzione logica in deduzio-
ne naturale. possibile dimostrare la congiunzione di due formule A e B
disponendo di due dimostrazioni, rispettivamente per A e per B; inver-
samente, avendo una dimostrazione di A B, possibile dimostrare A,
oppure dimostrare B.
Il costruttore di tipo che corrisponde (nel senso della corrispondenza di
Curry-Howard) al connettivo in

il costruttore dei tipi coppia, detto


anche prodotto cartesiano, che indicheremo con . Adifferenza che nel calco-
lo non tipizzato, in

non possibile esprimere coppie di termini in modo


generale, pertanto introducendo nuovi costrutti sintattici per supportare le
coppie aumenta il potere espressivo del calcolo.
[A]
x
B A
( i : y)
A (B A)
( i : x)
Figura 4.6: Albero di prova con etichette
A B
A B
(i)
A B
A
(e.1)
A B
B
(e.2)
Figura 4.7: Regole di inferenza per il connettivo
4.4. CORRISPONDENZA DI CURRY-HOWARD 45
Vogliamo quindi aumentare la sintassi del calcolo, aggiungendo alla
sintassi dei tipi il caso dei tipi coppia e alla sintassi dei termini il costrutto
coppia e le due proiezioni fst e snd:
T) ::= ... | T) T)
term) ::= ... | term),term)) | (fst term)) | (snd term))
differenziare le paren-
tesi angolari nel meta-
linguaggio
M : S N : T
M, N) : S T
(T-PAIR)
P : S T
(fst P) : S
(T-PROJ.1)
P : S T
(snd P) : T
(T-PROJ.2)
Figura 4.8: Regole di tipo per i tipi coppia
In g. 5.8 sono date le regole di tipizzazione per i tipi coppia. Si noti che
considereremo redex anche lapplicazione delle proiezioni a un costrutto
coppia, pertanto vanno aggiunte le seguenti nuove forme di -riduzione:
(fst M, N))

M
(snd M, N))

N
La corrispondenza di Curry-Howard per il -calcolo tipizzato semplice
esteso con coppie espressa dalle seguenti regole che, aggiunte a quelle
per il solo frammento implicativo, associano a dimostrazioni in deduzione
naturale termini del calcolo.
5. Data una dimostrazione che termina con (i), siano a : S e b : T i
termini associati alle due sottodimostrazioni immediatamente supe-
riori allultimo passo di derivazione. Si fa corrispondere il termine
a, b) : S T.
6. Data una dimostrazione che termina con (e.1), sia p : S T il termi-
ne associato alla sottodimostrazione immediatamente superiore. Si fa
corrispondere il termine (fst p) : S.
7. Data una dimostrazione che termina con (e.2), sia p : S T il termi-
ne associato alla sottodimostrazione immediatamente superiore. Si fa
corrispondere il termine (snd p) : T.
46 CAPITOLO 4. IL -CALCOLO TIPIZZATO SEMPLICE
4.4.3 Il connettivo
Lultimo connettivo tipico della logica intuizionista che ci interessa la di-
sgiunzione. In g. 5.9 sono riportate le regole della deduzione naturale re-
lative ad essa. Si pu ottenere una dimostrazione di A B a partire da una
dimostrazione di A, oppure a partire da una dimostrazione di B; la regola
di eliminazione invece pi complessa: combinando una dimostrazione di
AB e due dimostrazioni di A C e B C, otteniamo una dimostrazio-
ne di C (lidea che si pu concludere C ragionando per casi: se vero A,
posso concludere C da A C; se invece vero B, posso concludere C da
B C).
A
A B
(i.1)
B
A B
(i.2)
A B A C B C
C
(e)
Figura 4.9: Regole di inferenza per il connettivo
Alle disgiunzioni logiche, corrispondono i tipi somma (noti anche come
unioni disgiunte o varianti). Oggigiorno i tipi somma sono in disuso, ma in
passato ebbero una certa diffusione grazie alla possibilit di memorizzare
tipi di dati diversi nella stessa cella di memoria, minimizzando gli sprechi.
Come gi avevamo fatto per le coppie, adattiamo il -calcolo tipizzato
semplice aggiungendo alla sintassi dei tipi il caso dei tipi somma e alla
sintassi dei termini le due iniezioni in
1
e in
2
(che incapsulano unoggetto di
qualunque tipo in un tipo somma) e il costrutto case (che ci consentir di
ragionare sul tipo contenuto in una somma):
T) ::= ... | T) + T)
term) ::= ... | (in
1
term)) | (in
2
term)) | (case term) of (in
1
var))
term), (in
2
var)) term))
Per non appesantire ulteriormente la notazione, abbiamo utilizzato una
grammatica imprecisa: da una parte le due iniezioni dovrebbero specicare
il tipo somma destinazione (altrimenti il termine (in
1
true) potrebbe avere
tipo Bool +X per ogni X, e viceversa il termine (in
2
0) potrebbe avere tipo
Y +Nat per ogni Y ). Per motivi puramente tipograci assumeremo quindi
che le iniezioni restituiscano sempre il tipo somma opportuno. In g. 5.10
mostriamo le regole di tipo per i tipi somma.
Considereremo un redex anche lapplicazione del costrutto case a uni-
4.4. CORRISPONDENZA DI CURRY-HOWARD 47
M : S
(in
1
M) : S +T
(T-INJ.1)
N : T
(in
2
N) : S +T
(T-INJ.2)
M : S +T
, x : S P : U , y : T Q : U
(case M of (in
1
x) P, (in
2
y) Q) : U
(T-CASE)
Figura 4.10: Regole di tipo per i tipi somma
niezione, pertanto vanno aggiunte le seguenti nuove forme di -riduzione:
(case (in
1
M) of (in
1
x) P, (in
2
y) Q)

P[
M
/x]
(case (in
2
N) of (in
1
x) P, (in
2
y) Q)

Q[
N
/y]
La corrispondenza di Curry-Howard viene estesa con le seguenti re-
gole che, aggiunte a quelle per il solo frammento implicativo, associano a
dimostrazioni in deduzione naturale termini del calcolo.
8. Data una dimostrazione che termina con (i.1), sia ST la conclusio-
ne della dimostrazione e sia a : S il termine associato alla sottodimo-
strazione immediatamente superiore allultimo passo di derivazione.
Si fa corrispondere il termine (in
1
a) : S +T.
9. Data una dimostrazione che termina con (i.2), sia ST la conclusio-
ne della dimostrazione e sia b : T il termine associato alla sottodimo-
strazione immediatamente superiore allultimo passo di derivazione.
Si fa corrispondere il termine (in
2
b) : S +T.
10. Data una dimostrazione che termina con (e), siano
u : S +T
x : S.P : S U
y : T.Q : T U
i termini associati alle sottodimostrazioni immediatamente superiori
allultimo passo di derivazione. Si fa corrispondere il termine
(case uof (
1
x) P, (
2
y) Q) : U
48 CAPITOLO 4. IL -CALCOLO TIPIZZATO SEMPLICE
4.5 Teoremi di normalizzazione
Abbiamo gi avuto modo di precisare come il -calcolo tipizzato semplice
non consenta di esprimere numerose funzioni ricorsive, rivelandosi quindi
un calcolo non Turing-completo. Ha dunque senso chiedersi se il calcolo
tipizzato semplice non terminante come quello non tipizzato. In effetti,
come mostreremo in questa sezione, in

possibile esprimere solamente


funzioni totali; equivalentemente, ogni termine di

possiede una forma


normale. Il procedimento di riduzione a forma normale di un termine
detto normalizzazione; con la normalizzazione sono connesse le seguenti due
propriet.
Denizione 4.1 (normalizzazione debole). Un termine si dice debolmente
normalizzante se esiste una sequenza di riduzioni che lo trasforma in forma
normale. Un calcolo gode della propriet di normalizzazione debole se tutti i
termini in esso sono debolmente normalizzanti.
Denizione 4.2 (normalizzazione forte). Un termine si dice fortemente nor-
malizzante se ogni sequenza di riduzioni lo trasforma in forma normale. Un
calcolo gode della propriet di normalizzazione forte se tutti i termini in esso
sono fortemente normalizzanti.
Chiaramente, la normalizzazione forte implica quella debole; il vicever-
sa non vero, come mostra il seguente termine del -calcolo puro
(x.y ( ))
che riduce a se stesso se si opera sul redex interno, mentre giunge imme-
diatamente alla forma normale y se si opera sul redex esterno.
Entrambe le propriet valgono per il -calcolo tipizzato semplice: le
dimostreremo separatamente nei prossimi paragra.
4.5.1 Teorema di normalizzazione debole
Teorema 4.3 (normalizzazione debole). Per ogni termine del -calcolo tipizzato
semplice esiste una sequenza di riduzioni che lo trasforma in forma normale.
Dimostrazione. Nella dimostrazione di questo teorema useremo la seguente
nozione di ordinamento ben fondato.
Denizione 4.4. Un ordinamento parziale stretto si dice ben fondato se non
ammette catene discendenti innite.
Si noti che, afnch un ordinamento sia ben fondato, non occorre che
linsieme dei minoranti di ogni termine sia nito. Un esempio dato dal-
lordinamento su N , denito come nella seguente gura:
4.5. TEOREMI DI NORMALIZZAZIONE 49

o
o
o
o
o
o
o
o
o
o
o
o
o
o









M
M
M
M
M
M
M
M
M
M
M
M
M
0

O
O
O
O
O
O
O
O
O
O
O
O
O
O 1

?
?
?
?
?
?
?
2

n
.q
q
q
q
q
q
q
q
q
q
q
q
q

Le frecce mettono in relazione con ogni numero naturale, pertanto esi-


stono inniti minoranti di ; daltra parte, le catene massimali (ossia tutte
le catene che congiungono con ) hanno lunghezza 2.
Denire un ordinamento ben fondato sui termini ci consentir di sce-
gliere sempre un redex che faccia decrescere il termine no a raggiungere
la forma normale. Lordinamento cui siamo interessati quello lessicogra-
co tra coppie di naturali, denito come segue:
n, m) n

, m

) sse n < n

o n = n

e m < m

Proposizione 4.5. Lordinamento lessicograco tra coppie di naturali ben fon-


dato.
Possiamo convincerci (informalmente) di questo fatto visualizzando le
coppie di naturali in una tabella con innite righe e innite colonne:
_

_
.
.
. x, y)
2, 0)
.
.
.
1, 0) 1, 1)
.
.
.
0, 0) 0, 1) 0, 2)
_

_
Evidentemente linsieme delle coppie minori di una coppia ssata co-
stituito dalle coppie alla sua sinistra e dalle coppie appartenenti alle ri-
ghe sottostanti. Allora una qualsiasi catena avente origine in x, y) una
successione di coppie costituita da:
lelemento x, y)
al pi y coppie della forma x, i) con i che varia tra y 1 e 0
al pi k
1
coppie della forma x 1, i) con i compreso tra k
1
1 e 0
(dove k
1
un numero nito)
al pi k
2
coppie della forma x 2, i) con i compreso tra k
1
1 e 0
(dove k
2
un numero nito)
...
50 CAPITOLO 4. IL -CALCOLO TIPIZZATO SEMPLICE
al pi k
x
coppie della forma 0, i) con i compreso tra k
x
1 e 0 (dove
k
x
un numero nito)
La lunghezza della catena sar dunque al pi

x
i=1
k
i
+ y + 1, che un
numero nito. Pertanto lordinamento lessicograco ben fondato.
Tornando alla dimostrazione della normalizzazione debole, essa deve
risolvere due problemi: in primo luogo la riduzione di (x : T.M N) pu
duplicare i redex presenti nel parametro N; in secondo luogo possibile
che vengano creati nuovi redex (o tra il termine ridotto M[
N
/x] e il suo con-
testo, o allinterno del termine ridotto, in corrispondenza delle sostituzioni
di N dentro M). Chiaramente, non si pu sperare che le riduzioni diminui-
scano la taglia del termine iniziale (essa potrebbe anzi crescere, ad esempio
in termini che calcolano esponenziali). Dobbiamo denire un altro tipo di
grandezza.
Denizione 4.6 (tipo di un redex). Il tipo di un redex (x
T
.M N) il tipo
della sua parte funzionale, ossia T U, dove U il tipo di M.
Denizione 4.7 (norma). La norma di un tipo T la grandezza [T[ denita
induttivamente come segue:
1. se T un tipo atomico, [T[ = 1
2. se T = U V o T = U V , [T[ = [U[ +[V [ + 1.
La norma di un redex pari alla norma del suo tipo.
Denizione 4.8 (peso di un termine). Il peso di un termine M la grandez-
za
w(M) = m, n)
dove m la norma massima dei redex contenuti in M e n pari al numero
di redex aventi norma massima.
Notiamo ora che in seguito a una riduzione, se il redex originale era
(x
T
.M N) di tipo T U:
1. i redex creati tra il termine ridotto e il contesto sono di tipo U
2. i redex creati sostituendo N in M sono di tipo T
3. i redex residui di N mantengono il loro tipo.
Poich i nuovi redex sono sottotipi
2
del redex originale, la loro norma
strettamente minore di quella del redex originale. Sui redex residui, invece,
non possiamo dire nulla: in particolare, possibile che siano aumentati di
numero e che la loro norma sia massima.
2
In senso sintattico: nulla a che vedere con la nozione di sottotipo dei linguaggi orientati
agli oggetti
4.5. TEOREMI DI NORMALIZZAZIONE 51
Tuttavia, possibile ridurre sempre il redex pi interno, tra quelli di
norma massima: in questo modo, i residui duplicati avranno necessaria-
mente norma minore. Dimostriamo che utilizzando una strategia leftmost-
innermost sui redex di norma massima, se M

N, allora w(N)w(M).
Sia w(M) = m, n). Poich abbiamo scelto il redex pi interno tra quelli
di norma massima, i redex di norma massima diminuiscono di uno. Per
come abbiamo denito il peso, sono possibili due scenari:
1. se n > 1, allora w(N) = m, n 1)
2. se n = 1, allora w(N) = m

, p), con m

< m e p nito.
In entrambi i casi w(N) w(M), pertanto le catene di riduzioni genera-
no catene discendenti di pesi secondo lordinamento lessicograco, che es-
sendo ben fondato ammette solo catene di lunghezza nita. Di conseguen-
za anche le catene di riduzioni, secondo la predetta strategia, dovranno
condurre a forma normale con un numero nito di passi.
Osservazione 4. Si noti che la dimostrazione descritta non dice nulla sul-
la complessit della riduzione a forma normale. possibile dare un limi-
te alla complessit della riduzione in funzione del tipo del termine, ma la
dimostrazione diventa pi complessa.
4.5.2 Teorema di normalizzazione forte
Teorema 4.9 (normalizzazione forte). Dato un termine del -calcolo tipizzato
semplice, qualsiasi sequenza di riduzioni lo trasforma in forma normale.
La dimostrazione di questo teorema pi intricata di quella della nor-
malizzazione debole e passa attraverso la denizione della seguente pro-
priet.
Denizione 4.10 (riducibilit). Sia t un termine di tipo T; allora:
se T = A, dove A un tipo atomico, t riducibile di tipo A(t Red
A
)
se e solo se fortemente normalizzante;
se T = U V , t riducibile di tipo U V (t Red
UV
) se e solo se
(fst t) Red
U
e (snd t) Red
V
;
se T = U V , t riducibile di tipo U V (t Red
UV
) se e solo
se per ogni u Red
U
, (t u) Red
V
.
La riducibilit riassume tutte le propriet necessarie afnch un termi-
ne sia fortemente normalizzante. Il nostro obiettivo dimostrare che ogni
termine riducibile fortemente normalizzante e in seguito che ogni termine
riducibile.
52 CAPITOLO 4. IL -CALCOLO TIPIZZATO SEMPLICE
Condizioni di riducibilit
Per la dimostrazione, necessario provare prima le seguenti Condizioni di
riducibilit (CR).
Lemma 4.11 (Condizioni di riducibilit). Per i termini del -calcolo tipizzato
semplice, valgono le seguenti condizioni di riducibilit:
CR1 Se t riducibile di tipo T, allora fortemente normalizzante.
CR2 Se t riducibile di tipo T e t riduce a t

, allora t

riducibile di tipo T.
CR3 Se t un termine neutro (ossia non della forma x
T
.M o t
1
, t
2
)) e t


riducibile di tipo T per ogni ridotto t

di t, allora anche t riducibile di tipo


T.
CR4 Ogni termine neutro in forma normale riducibile del tipo opportuno.
Dimostrazione. La dimostrazione delle quattro propriet per induzione
strutturale sul tipo del termine. Ometteremo la dimostrazione della CR4,
che un corollario della CR3.
Caso base Come caso base, supponiamo che t sia di tipo atomico A.
CR1 La propriet banalmente vera (dalla denizione di riducibilit).
CR2 La propriet ci chiede di dimostrare che se t riducibile, ogni suo
ridotto lo . Dalla denizione di riducibilit, segue che t fortemente
normalizzante, quindi ogni suo ridotto lo . Ma allora, sempre per la
denizione di riducibilit, i ridotti di t sono anchessi riducibili.
CR3 Per questa propriet, notiamo che se tutti i ridotti di t sono riducibili,
sono anche fortemente normalizzanti. Ma allora anche t stesso lo .
Tipi coppia Come primo caso induttivo, dimostriamo che se le propriet
CR valgono per i tipi U e V , allora valgono anche per U V .
CR1 Per ipotesi, t Red
UV
. Dalla denizione di riducibilit, (fst t)
Red
U
. Ma allora, per ipotesi induttiva, CR1 vale per il tipo U, quindi
(fst t) fortemente normalizzante. Dato che t un sottotermine di
(fst t), anche t deve essere fortemente normalizzante, come richiesto.
CR2 Per ipotesi, t Red
UV
e t t

. Dalla denizione di riducibilit,


(fst t) Red
U
e (snd t) Red
V
. Per ipotesi induttiva, vale anche
che (fst t

) Red
U
e (snd t

) Red
V
. Allora dalla denizione di
riducibilit segue che t

Red
UV
.
4.5. TEOREMI DI NORMALIZZAZIONE 53
CR3 Per ipotesi, t neutro e quindi non della forma u, v). Sempre per
ipotesi, t

1
, . . . , t

n
Red
UV
, dove t

1
, . . . , t

n
sono tutti i ridotti di t.
Dato che t neutro, gli unici ridotti di (fst t) e (snd t) sono:
(fst t

1
) . . . (fst t

n
)
(snd t

1
) . . . (snd t

n
)
Per la denizione di riducibilit, essi sono tutti riducibili del tipo op-
portuno. Ma allora, per ipotesi induttiva, anche (fst t) Red
U
e
(snd t) Red
V
. Dalla denizione di riducibilit, segue quindi che
anche t Red
UV
.
Tipi freccia Dimostriamo che se le propriet CR valgono per U e V , allora
valgono anche per U V .
CR1 Per ipotesi, t Red
UV
. Sia x : U una variabile: per ipotesi induttiva, non si poteva prende-
re direttamente u
Red
U
come nel CR2?
dalla propriet CR4 segue che x Red
U
. Allora, per denizione di ri-
ducibilit, (t x) Red
V
e quindi, per ipotesi induttiva, dalla proprie-
t CR1 segue che (t x) fortemente normalizzante. Pertanto anche t
fortemente normalizzante, in quanto sottotermine di (t x).
CR2 Per ipotesi, t Red
UV
e t t

. Sia u Red
U
: allora, per denizio-
ne di riducibilit, vale (t u) Red
V
. Dato che (t u) (t

u), per ipo-


tesi induttiva (CR2) anche (t

u) Red
V
. Pertanto, dalla denizione
di riducibilit, segue che anche t

Red
UV
.
CR3 Per ipotesi, sia t : U V un termine neutro (in particolare, diverso
da una -astrazione) tale che, per tutti i ridotti t

1
, . . . , t

n
di t, vale
t

1
, . . . , t

n
Red
UV
. Dalla denizione di riducibilit, segue che
(t

1
u), . . . , (t

n
u) Red
V
Vorremmo ora applicare lipotesi induttiva per derivare che anche
(t u) Red
V
. Purtroppo per i termini di cui sopra non sono tutti i
ridotti di (t u): dovremmo infatti includere anche tutti i termini della
forma (t u

) dove u

un ridotto di u. Su questi termini non sappiamo


nulla, perci si rende necessaria la seguente sottoinduzione.
Sia (u) la funzione che restituisce la lunghezza massima delle catene
di riduzione aventi origine in u. Dimostriamo che qualunque sia (u),
(t u) Red
V
. Per induzione su (u):
Se (u) = 0, u in forma normale, pertanto i ridotti di (t u) sono
i soli termini (t

1
u), . . . , (t

n
u); quindi per ipotesi induttiva (CR3)
anche (t u) Red
V
.
54 CAPITOLO 4. IL -CALCOLO TIPIZZATO SEMPLICE
Se (u) > 0, per ipotesi induttiva (CR2) ogni ridotto u

di u
riducibile. Inoltre per ipotesi induttiva (essendo (u

) < (u))
vale anche (t u

) Red
V
. Pertanto, tutti i ridotti di (t u) so-
no riducibili e quindi per ipotesi induttiva (CR3) anche (t u)
Red
V
Concludiamo quindi che, essendo (t u) riducibile per qualunque u
Red
U
, anche t Red
UV
.
Osservazione 5. La dimostrazione delle propriet CR sfrutta il fatto che i
termini di un tipo T composto di U e V possono essere sintatticamen-
te pi semplici di termini dei tipi U e V . Linduzione sul tipo consente
quindi di dedurre propriet forti per tipi semplici e termini complessi, e
di trasmetterle a termini pi semplici, ma di tipo pi complesso.
Dimostrazione del teorema
Nella dimostrazione del teorema, utilizzaremo i seguenti due lemmi.
Lemma 4.12. Se u Red
U
e v Red
V
, allora anche u, v) Red
UV
.
Dimostrazione. La dimostrazione non ovvia, come saremmo tentati di di-
re, in quanto da un punto di vista sintattico (fst u, v)) , u. Dimostriamo
quindi la tesi per induzione su (u) +(v):
Se (u) + (v) = 0, allora lunico ridotto di (fst u, v)) u. Dato che
per ipotesi u Red
U
, per la CR3 anche (fst u, v)) Red
U
.
Se (u) + (v) > 0, siano u

1
, . . . , u

m
e v

1
, . . . , v

n
i ridotti in un passo
rispettivamente di u e v. Allora i ridotti di (fst u, v)) sono nella forma
u
oppure (fst u

i
, v)) (per i = 1, . . . , m)
oppure (fst u, v

j
)) (per j = 1, . . . , n)
Daltra parte u Red
U
per ipotesi, mentre per ipotesi induttiva (es-
sendo (u

i
) + (v) < (u) + (v) e (u) + (v

j
) < (u) + (v))
vale
(fst u

i
, v)), (snd u, v

j
)) Red
U
Dalla CR3 segue quindi che anche (fst u, v)) Red
U
.
In modo simile, si dimostra che (snd u, v)) Red
V
: il lemma segue
quindi dalla denizione di reducibilit.
Lemma 4.13. Se per ogni u Red
U
vale t[
u
/x] Red
V
allora x
U
.t Red
UV
.
4.5. TEOREMI DI NORMALIZZAZIONE 55
Dimostrazione. Notiamo che le ipotesi del lemma implicano che anche t
Red
V
(basta scegliere u = x, dove x una variabile di tipo U e come ta-
le riducibile); in particolare, t anche fortemente normalizzante (CR1),
pertanto il valore (t) ben denito.
Sia u Red
U
. Per induzione su (t) +(u):
Se (t) +(u) = 0, lunico ridotto di (x
U
.t u) t[
u
/x], che riducibile
per ipotesi. Pertanto, dalla CR3 segue (x
U
.t u) Red
V
.
Se (t) + (u) > 0, siano t

1
, . . . , t

m
e u

1
, . . . , u

n
i ridotti in un passo
rispettivamente di t e u. Allora i ridotti di (x
U
.t u) sono della forma
t[
u
/x]
oppure (x
U
.t

i
u) (per i = 1, . . . , m)
oppure (x
U
.t u

j
) (per i = j, . . . , n)
Daltra parte t[
u
/x] Red
V
per ipotesi, mentre per ipotesi induttiva
(essendo (t

i
) +(u) < (t) +(u) e (t) +(u

j
) < (t) +(u)) vale
(x
U
.t

i
u), (x
U
.t u

j
) Red
V
Dalla CR3 segue quindi che anche (x
U
.t u) Red
V
.
Il lemma segue quindi dalla denizione di riducibilit.
Ora siamo in grado di dimostrare che ogni termine del -calcolo tipiz-
zato semplice riducibile - e come tale fortemente normalizzante. Per farlo
dimostreremo in realt un enunciato pi forte (un trucco che ci consentir
di disporre di ipotesi induttive pi forti).
Proposizione 4.14. Sia t : T un termine e siano le sue variabili libere comprese
in x
1
: T
1
,...,x
n
: T
n
. Allora per ogni scelta di u
1
Red
T
1
, ..., u
n
Red
T
n
, vale
t[
u
1
,...,u
n
/x
1
,...,x
n
].
Dimostrazione. Per induzione strutturale sul termine t. Scriveremo t[
u
/ x] in
luogo di t[
u
1
,...,u
n
/x
1
,...,x
n
].
Se t = x
i
, si ha x
i
[
u
/ x] = u
i
Red
T
per ipotesi.
Se t = (fst t

), per ipotesi induttiva si ha t

[
u
/ x] Red
TU
e quindi,
per la denizione di riducibilit, anche (fst t

[
u
/ x]) Red
T
. Ma dalla
denizione di sostituzione si ha (fst t

)[
u
/ x] = (fst t

[
u
/ x]), pertanto
(fst t

)[
u
/ x] = t[
u
/ x] Red
T
.
Se t = (snd t

), il caso analogo al precedente.


56 CAPITOLO 4. IL -CALCOLO TIPIZZATO SEMPLICE
Se t = t

, t

), si applica quindi lipotesi induttiva in modo simile ai


casi precedenti e si ricava t

[
u
/ x], t

[
u
/ x]) Red
T

T
dal lemma 4.12
(dove T

e T

sono i tipi di t

e t

). Ma dalla denizione di sostitu-


zione si ha t

, t

)[
u
/ x] = t

[
u
/ x], t

[
u
/ x]), pertanto t

, t

)[
u
/ x] = t[
u
/ x]
Red
T

T
.
Se t = (t

), si applica quindi lipotesi induttiva in modo simile ai


casi precedenti e si ricava (t

[
u
/ x] t

[
u
/ x]) Red
T
dalla denizione di
riducibilit. Ma dalla denizione di sostituzione si ha (t

)[
u
/ x] =
(t

[
u
/ x] t

[
u
/ x]), pertanto (t

)[
u
/ x] = t[
u
/ x] Red
T
.
Se t = y
U
.t

(e T = U V ) per ipotesi induttiva t

[
u
/ x] Red
V
; si
noti che y o non compare in t

oppure compresa in x
1
, . . . , x
n
pertan-
to la precedente scrittura equivalente a t

[
u
/ x,
u
/y], ossia t

[
u
/ x][
u
/y] do-
ve u un qualunque termine riducibile di tipo U. Allora per il lemma
4.13 si ha y
U
.(t

[
u
/ x]) Red
UV
. Ma dalla denizione di sostituzio-
ne si ha (y
U
.t

)[
u
/ x] = y
U
.(t

[
u
/ x]), pertanto (y
U
.t

)[
u
/ x] = t[
u
/ x]
Red
UV
.
Corollario 4.15. Tutti i termini del -calcolo tipizzato semplice sono riducibili.
Dimostrazione. Dal teorema precedente, ponendo u = x.
Il teorema di normalizzazione forte segue immediatamente dal prece-
dente corollario, per mezzo della propriet CR1, secondo cui ogni termine
riducibile fortemente normalizzante.
Capitolo 5
Il Calcolo delle Costruzioni
Al termine della nostra descrizione dei vari modelli di -calcolo tipizzato,
opportuno guardarci indietro per comprenderne meglio le differenze e i
limiti.
Il -calcolo tipizzato semplice si differenziava dal -calcolo puro per
lintroduzione delle annotazioni di tipo nelle -astrazioni; il sistema di tipi
ne limitava molto il potere espressivo, poich la -astrazione permetteva
come prima di astrarre termini in termini, ma contemporaneamente ssava
il tipo del risultato.
Dopo la parentesi del Sistema T, che estendeva il calcolo tipizzato sem-
plice con un insieme di tipi induttivi e ricorsori predeniti, nel precedente
capitolo abbiamo presentato il Sistema F, che aumentava il potere espressi-
vo dei calcoli precedenti introducendo un nuovo modello di astrazione, da
tipi in termini.
Che cosa non possiamo fare nel Sistema F? A ben vedere esistono alme-
no due categorie di termini che non possono essere espresse direttamente
nel calcolo:
operatori che costruiscono tipi in funzione di altri tipi (questi opera-
tori, quali (List T), sono stati gi utilizzati solamente come abbrevia-
zioni sintattiche);
termini il cui tipo dipende da altri termini (ad esempio, il tipo delle
List di lunghezza 4).
Il Calcolo delle Costruzioni nasce da questa intuizione, e quindi dalla
generalizzazione dellastrazione per consentire di esprimere:
funzioni da termini in termini (come nel -calcolo tipizzato semplice)
funzioni da tipi in termini (i termini polimor del Sistema F)
funzioni da tipi in tipi (operatori di tipo)
funzioni da termini in tipi (tipi dipendenti).
57
58 CAPITOLO 5. IL CALCOLO DELLE COSTRUZIONI
5.1 Sintassi
T) ::= AT) | T) T)
AT) ::= A | B | C | . . .
Figura 5.1: Espressioni di tipo nel -calcolo tipizzato semplice
La sintassi dei termini modicata soltanto nel caso dellastrazione:
infatti necessario specicare un tipo per ogni variabile legata. La gramma-
tica presentata in g. 5.2.
term) ::= var) | var):T).term) | (term) term))
var) ::= x | y | z | x
1
| . . .
Figura 5.2: Termini del -calcolo tipizzato semplice
5.2 Sistemi di tipi
Dopo aver denito la sintassi del calcolo tipizzato, ci chiediamo come sia
possibile assegnare un tipo ai termini del linguaggio. Allo stato attuale, in-
fatti, i tipi sono soltanto unaggiunta cosmetica che non pone alcun vincolo.
Ad esempio il termine
(x : A.x x : A.x)
dove A un tipo atomico, non dovrebbe essere considerato corretto perch
il termine passato come parametro non di tipo A, bens (intuitivamente)
di tipo A A. Termini come questo sono detti mal tipizzati e non ci in-
teressa esprimere computazioni su di essi (un compilatore li rigetterebbe
segnalando un errore di semantica statica).
Ci interessa tuttavia trovare un modo per denire la nozione di buo-
na tipizzazione e per distinguere i termini tipizzati bene da quelli tipiz-
zati male. I sistemi di tipi sono collezioni di regole che ci consentiranno di
raggiungere questo scopo.
Un buon sistema di tipi (utile in pratica per un linguaggio di program-
mazione) deve godere delle seguenti propriet [?]: ce lo mettiamo?
deve essere decidibilmente vericabile: deve esistere un algoritmo di
type-checking che verichi se un programma ben tipato.
deve essere trasparente: il programmatore deve essere in grado di
prevedere se un programma ben tipato o meno e perch.
5.2. SISTEMI DI TIPI 59
deve essere enforceable: le dichiarazioni di tipo dovrebbero essere il
pi possibile vericate staticamente, altrimenti dinamicamente. La
consistenza tra le dichiarazioni di tipo e il codice associato ad esse
devessere vericabile da un programma.
Introduciamo ora il formalismo dei sistemi di tipi.
5.2.1 Giudizi
Lentit atomica trattata dai sistemi di tipi un particolare tipo di espres-
sione formale denominato giudizio. Un giudizio ha la forma:
I
che si legge verica I. I unasserzione; detto contesto e de-
nisce i tipi delle variabili che compaiono libere in I, nella forma x
1
:
A
1
, . . . , x
n
: A
n
(qui il simbolo : rappresenta la relazione appartiene al
tipo). necessario che tutte le variabili libere nellasserzione siano dichia-
rate in . Per il calcolo tipizzato semplice, siamo interessati a una sola forma
di asserzione, vale a dire
M : T
dove M un termine e T un tipo qualunque, che si legge M ha tipo T in

Talvolta indicheremo un contesto in maniera esplicita elencandone le


componenti (ad esempio: x : S, y : T); indicheremo inoltre la concatenazio-
ne di ambienti con la virgola (ad esempio: ,

).
5.2.2 Regole di tipo
Un giudizio pu essere valido o non valido. La validit di un giudizio de-
nita sulla base di certe regole di inferenza che costituiscono il sistema di
tipi formale.
Una regola (g. 5.3) composta da un certo numero di giudizi (premesse)
posti sopra una linea orizzontale e da un unico giudizio (conclusione) posto
sotto la linea: se sono valide le premesse, valida la conclusione.

1
I
1
. . .
n
I
n
I
(REGOLA GENERICA)
Figura 5.3: Esempio generico di regola di tipo
Se una regola non prevede premesse, si intende che la conclusione
intrinsecamente valida, cio un assioma.
60 CAPITOLO 5. IL CALCOLO DELLE COSTRUZIONI
Le regole possono essere composte in un albero di derivazione: la con-
seguenza di una qualsiasi regola pu essere utilizzata come premessa di
unaltra regola. Per vericare la validit di un giudizio occorre dare un al-
bero di derivazione corretto, le cui foglie siano assiomi e la cui radice sia il
giudizio da vericare.
Le regole di tipo (g. 5.4) per il calcolo tipizzato semplice sono tre, una
per ciascun tipo di termine. La regola per le variabili un assioma che as-
segna a x il tipo T, posto che x : T compaia nel contesto. Unapplicazione
ha tipo T
2
se la parte funzionale ha tipo T
1
T
2
e largomento ha tipo T
1
.
Unastrazione x : T
1
.M ha tipo T
1
T
2
se, supponendo che x abbia tipo
T
1
, M ha tipo T
2
.
x : T se x : T (T-AX)
M : T
1
T
2
N : T
1
(M N) : T
2
(T-APP)
, x : T
1
M : T
2
x : T
1
.M : T
1
T
2
(T-ABS)
Figura 5.4: Regole di tipo per il -calcolo tipizzato semplice
5.2.3 Applicazioni
Dato un sistema di tipi, un termine M ben tipizzato in un ambiente se
esiste un tipo A per cui il giudizio M : A valido. Il problema di con-
trollare lesistenza di un tipo ben formato per i termini di un programma
detto typechecking. Il problema di identicare, se esiste, il tipo di un termine
detto invece type inference o inferenza dei tipi.
Si noti che non per tutti i sistemi di tipi esistono algoritmi di typechec-
king o type inference (se esiste un algoritmo di type inference, ovviamente
esiste anche lalgoritmo di typechecking, ma non vero il contrario): per al-
cuni sistemi, questi problemi sono indecidibili (non possibile determinare
per via algoritmica se il problema ha soluzione o meno) o semidecidibili
(esiste un semialgoritmo che termina soltanto se il problema ha soluzio-
ne). Ovviamente in un sistema di tipi per un linguaggio di uso pratico il
typechecking, e alloccorrenza la type inference, devono essere decidibili.
Una propriet importante che i sistemi di tipi devono rispettare con-
nessa alla semantica operazionale dei programmi tipizzati. Afnch il siste-
ma di tipi sia corretto necessario garantire che se M : A un giudizio
valido e il termine M riduce a un termine M

, allora M

: A. Questa
propriet detta propriet di riduzione del soggetto.
5.3. PROGRAMMI IN

61
5.3 Programmi in

Per mostrare il potere espressivo del -calcolo tipizzato semplice, denia-


mo la codica di Church per gli interi, in modo del tutto analogo al -
calcolo puro. In primo luogo lo zero:
0 x : T
1
.y : T
2
.y : T
1
T
2
T
2
La differenza sostanziale rispetto al caso non tipizzato sta nella necessi-
t di assegnare dei tipi ai parametri della funzione che rappresenta lo zero.
Questi tipi sono stati indicati genericamente con T
1
e T
2
, perch idealmente
vorremmo che lo zero fosse un valore polimorfo in cui T
1
e T
2
fossero istan-
ziabili con qualunque tipo. Vediamo cosa accade cercando di tipizzare la
denizione dell1.
1 x : T
1
T
2
.y : T
1
.(x y) : (T
1
T
2
) T
1
T
2
Per l1 otteniamo un termine di tipo diverso. Anche in questo caso T
1
e T
2
stanno ad indicare due tipi qualunque. Vediamo inne il caso del
numero 2.
2 x : T T.y : T.(x (x y)) : (T T) T T
Anche in questo caso il tipo del termine differente; T denota un tipo
qualunque. Per i numeri interi maggiori di 2 si pu invece vericare che il
tipo risulta identico a quello del 2.
Questa situazione anomala si risolve vericando che possibile specia-
lizzare i tipi dei numeri 0 e 1, in modo che unichino con il tipo di 2. In par-
ticolare in 0 occorre sostituire T
1
con T T e T
2
con T; in 1 si sostituiscono
sia T
1
sia T
2
con T.
Per concludere, il tipo dei numeri interi denito in modo parametrico
rispetto a un qualunque tipo T, come segue:
Nat
T
(T T) T T
e anche gli interi di Church e la funzione successore sono deniti in modo
parametrico rispetto a T:
0
T
x : T T.y : T.y : Nat
T
1
T
x : T T.y : T.(x y) : Nat
T
2
T
x : T T.y : T.(x (x y)) : Nat
T
.
.
.
succ
T
n : Nat
T
.x : T T.y : T.(x (n x y)) : Nat
T
Nat
T
62 CAPITOLO 5. IL CALCOLO DELLE COSTRUZIONI
5.3.1 Potere espressivo
La possibilit di denire booleani e interi non sufciente a garantire une-
levata espressivit al nostro sistema di calcolo: sarebbe opportuno mostra-
re almeno una codica per le funzioni primitive ricorsive. Tuttavia, una
tale codica non esiste: per la precisione, il -calcolo tipizzato semplice
non consente di tipizzare nemmeno funzioni semplici come il predeces-
sore. In sostanza, le uniche funzioni esprimibili sono somma, prodotto e
composizioni di queste.
possibile estendere il potere espressivo di questo calcolo introducen-
do operatori ad hoc per la ricorsione, o equivalentemente un operatore pun-
to sso
FIX
T
: (T T) T
(FIX
T
M)

(M (FIX
T
M)) se M : T
Neanche in questo modo, tuttavia, il calcolo diventa Turing-completo. vericare...
5.4 Corrispondenza di Curry-Howard
In questa sezione presenteremo uninteressante analogia tra calcoli tipizzati
e sistemi logici deduttivi. La corrispondenza di Curry-Howard fa corrisponde-
re alle formule logiche i tipi di un linguaggio tipizzato, alle prove i termini
(e in particolare a una prova della formula A un termine di tipo A).
La corrispondenza funziona particolarmente bene per la logica intui-
zionista (e specialmente per certi frammenti di essa), ma pu essere estesa,
nello spirito di trasporre i progressi della logica nei linguaggi di program-
mazione e viceversa.
5.4.1 Il frammento implicativo
Il frammento implicativo della logica intuizionista include le formule logi-
che espresse per mezzo di proposizioni atomiche (A, B, ...) e del connettivo
.
Le dimostrazioni sono date, in deduzione naturale, per mezzo delle
regole (g. 5.5) di introduzione dellimplicazione ( i) e di eliminazione
dellimplicazione (modus ponens o e).
[A]
.
.
.
B
A B
( i)
A B A
B
( e)
Figura 5.5: Regole di inferenza per il connettivo
5.4. CORRISPONDENZA DI CURRY-HOWARD 63
Secondo la regola di introduzione, possiamo derivare una dimostrazione
di A B (A implica B) se abbiamo un procedimento costruttivo (un algo-
ritmo) che trasforma dimostrazioni di A in dimostrazioni di B; la regola di
eliminazione ci consente invece di comporre una dimostrazione di A B
con una dimostrazione di A per ottenere una dimostrazione di B.
La corrispondenza di Curry-Howard ci consente di associare alle di-
mostrazioni ottenute componendo queste regole opportuni termini del -
calcolo tipizzato semplice. Al ne di rendere la corrispondenza pi eviden-
te, supporremo che alle foglie scaricate di un albero di prova e alle regole di
introduzione dellimplicazione sia sempre associata unetichetta (apparte-
nente allinsieme x, y, z, x
1
, . . .) in modo da identicare la specica regola
di introduzione in cui la foglia scaricata
1
(g. 5.6).
[A]
x
B A
( i : y)
A (B A)
( i : x)
Figura 5.6: Albero di prova con etichette
La corrispondenza data dalle seguenti regole induttive che associano
a dimostrazioni termini di

:
1. Data una dimostrazione costituita dalla singola ipotesi Anon scarica-
ta, si fa corrispondere una variabile fresca x : A.
2. Data una dimostrazione costituita dalla singola ipotesi A, scaricata ed
etichettata y, si fa corrispondere la variabile y : A.
3. Data una dimostrazione che termina con ( i), siano S T la con-
clusione della dimostrazione, y letichetta dellultimo passo di deri-
vazione e u il termine associato alla sottodimostrazione immedia-
tamente superiore. Si fa corrispondere il termine y : S.u : S
T.
4. Data una dimostrazione che termina con ( e), siano u : S T
e v : S i termini associati alle due sottodimostrazioni immediata-
mente superiori allultimo passo di derivazione. Si fa corrispondere il
termine (u v) : T.
5.4.2 Il connettivo
In g. 5.7 sono riportate le regole per la congiunzione logica in deduzio-
ne naturale. possibile dimostrare la congiunzione di due formule A e B
1
Questo accorgimento rende la corrispondenza di Curry-Howard un vero e proprio
isomorsmo.
64 CAPITOLO 5. IL CALCOLO DELLE COSTRUZIONI
disponendo di due dimostrazioni, rispettivamente per A e per B; inver-
samente, avendo una dimostrazione di A B, possibile dimostrare A,
oppure dimostrare B.
A B
A B
(i)
A B
A
(e.1)
A B
B
(e.2)
Figura 5.7: Regole di inferenza per il connettivo
Il costruttore di tipo che corrisponde (nel senso della corrispondenza di
Curry-Howard) al connettivo in

il costruttore dei tipi coppia, detto


anche prodotto cartesiano, che indicheremo con . Adifferenza che nel calco-
lo non tipizzato, in

non possibile esprimere coppie di termini in modo


generale, pertanto introducendo nuovi costrutti sintattici per supportare le
coppie aumenta il potere espressivo del calcolo.
Vogliamo quindi aumentare la sintassi del calcolo, aggiungendo alla
sintassi dei tipi il caso dei tipi coppia e alla sintassi dei termini il costrutto
coppia e le due proiezioni fst e snd:
T) ::= ... | T) T)
term) ::= ... | term),term)) | (fst term)) | (snd term))
differenziare le paren-
tesi angolari nel meta-
linguaggio
M : S N : T
M, N) : S T
(T-PAIR)
P : S T
(fst P) : S
(T-PROJ.1)
P : S T
(snd P) : T
(T-PROJ.2)
Figura 5.8: Regole di tipo per i tipi coppia
In g. 5.8 sono date le regole di tipizzazione per i tipi coppia. Si noti che
considereremo redex anche lapplicazione delle proiezioni a un costrutto
coppia, pertanto vanno aggiunte le seguenti nuove forme di -riduzione:
(fst M, N))

M
(snd M, N))

N
5.4. CORRISPONDENZA DI CURRY-HOWARD 65
La corrispondenza di Curry-Howard per il -calcolo tipizzato semplice
esteso con coppie espressa dalle seguenti regole che, aggiunte a quelle
per il solo frammento implicativo, associano a dimostrazioni in deduzione
naturale termini del calcolo.
5. Data una dimostrazione che termina con (i), siano a : S e b : T i
termini associati alle due sottodimostrazioni immediatamente supe-
riori allultimo passo di derivazione. Si fa corrispondere il termine
a, b) : S T.
6. Data una dimostrazione che termina con (e.1), sia p : S T il termi-
ne associato alla sottodimostrazione immediatamente superiore. Si fa
corrispondere il termine (fst p) : S.
7. Data una dimostrazione che termina con (e.2), sia p : S T il termi-
ne associato alla sottodimostrazione immediatamente superiore. Si fa
corrispondere il termine (snd p) : T.
5.4.3 Il connettivo
Lultimo connettivo tipico della logica intuizionista che ci interessa la di-
sgiunzione. In g. 5.9 sono riportate le regole della deduzione naturale re-
lative ad essa. Si pu ottenere una dimostrazione di A B a partire da una
dimostrazione di A, oppure a partire da una dimostrazione di B; la regola
di eliminazione invece pi complessa: combinando una dimostrazione di
AB e due dimostrazioni di A C e B C, otteniamo una dimostrazio-
ne di C (lidea che si pu concludere C ragionando per casi: se vero A,
posso concludere C da A C; se invece vero B, posso concludere C da
B C).
A
A B
(i.1)
B
A B
(i.2)
A B A C B C
C
(e)
Figura 5.9: Regole di inferenza per il connettivo
Alle disgiunzioni logiche, corrispondono i tipi somma (noti anche come
unioni disgiunte o varianti). Oggigiorno i tipi somma sono in disuso, ma in
passato ebbero una certa diffusione grazie alla possibilit di memorizzare
tipi di dati diversi nella stessa cella di memoria, minimizzando gli sprechi.
Come gi avevamo fatto per le coppie, adattiamo il -calcolo tipizzato
semplice aggiungendo alla sintassi dei tipi il caso dei tipi somma e alla
sintassi dei termini le due iniezioni in
1
e in
2
(che incapsulano unoggetto
66 CAPITOLO 5. IL CALCOLO DELLE COSTRUZIONI
di qualunque tipo in un tipo somma) e il costrutto case (che ci consentir
di ragionare sul tipo contenuto in una somma):
T) ::= ... | T) + T)
term) ::= ... | (in
1
term)) | (in
2
term)) | (case term) of in
1
(var))
term), in
2
(var)) term))
Per non appesantire ulteriormente la notazione, abbiamo utilizzato una
grammatica imprecisa: da una parte le due iniezioni dovrebbero specicare
il tipo somma destinazione (altrimenti il termine (in
1
true) potrebbe avere
tipo Bool +X per ogni X, e viceversa il termine (in
2
0) potrebbe avere tipo
Y +Nat per ogni Y ). Per motivi puramente tipograci assumeremo quindi
che le iniezioni restituiscano sempre il tipo somma opportuno. In g. 5.10
mostriamo le regole di tipo per i tipi somma.
M : S
(in
1
M) : S +T
(T-INJ.1)
N : T
(in
2
N) : S +T
(T-INJ.2)
M : S +T
, x : S P : U , y : T Q : U
(case M of (in
1
x) P, (in
2
y) Q) : U
(T-CASE)
Figura 5.10: Regole di tipo per i tipi somma
Considereremo un redex anche lapplicazione del costrutto case a uni-
niezione, pertanto vanno aggiunte le seguenti nuove forme di -riduzione:
(case (in
1
M) of x : S P, y : T Q)

P[
M
/x]
(case (in
2
N) of x : S P, y : T Q)

Q[
N
/y]
La corrispondenza di Curry-Howard viene estesa con le seguenti re-
gole che, aggiunte a quelle per il solo frammento implicativo, associano a
dimostrazioni in deduzione naturale termini del calcolo.
8. Data una dimostrazione che termina con (i.1), sia ST la conclusio-
ne della dimostrazione e sia a : S il termine associato alla sottodimo-
strazione immediatamente superiore allultimo passo di derivazione.
Si fa corrispondere il termine (in
1
a) : S +T.
5.5. TEOREMI DI NORMALIZZAZIONE 67
9. Data una dimostrazione che termina con (i.2), sia ST la conclusio-
ne della dimostrazione e sia b : T il termine associato alla sottodimo-
strazione immediatamente superiore allultimo passo di derivazione.
Si fa corrispondere il termine (in
2
b) : S +T.
10. Data una dimostrazione che termina con (e), siano
u : S +T
x : S.P : S U
y : T.Q : T U
i termini associati alle sottodimostrazioni immediatamente superiori
allultimo passo di derivazione. Si fa corrispondere il termine
(case u of (in
1
x) P, (in
2
y) Q) : U
5.5 Teoremi di normalizzazione
Abbiamo gi avuto modo di precisare come il -calcolo tipizzato semplice
non consenta di esprimere numerose funzioni ricorsive, rivelandosi quindi
un calcolo non Turing-completo. Ha dunque senso chiedersi se il calcolo
tipizzato semplice non terminante come quello non tipizzato. In effetti,
come mostreremo in questa sezione, in

possibile esprimere solamente


funzioni totali; equivalentemente, ogni termine di

possiede una forma


normale. Il procedimento di riduzione a forma normale di un termine
detto normalizzazione; con la normalizzazione sono connesse le seguenti due
propriet.
Denizione 5.1 (normalizzazione debole). Un termine si dice debolmente
normalizzante se esiste una sequenza di riduzioni che lo trasforma in forma
normale. Un calcolo gode della propriet di normalizzazione debole se tutti i
termini in esso sono debolmente normalizzanti.
Denizione 5.2 (normalizzazione forte). Un termine si dice fortemente nor-
malizzante se ogni sequenza di riduzioni lo trasforma in forma normale. Un
calcolo gode della propriet di normalizzazione forte se tutti i termini in esso
sono fortemente normalizzanti.
Chiaramente, la normalizzazione forte implica quella debole; il vicever-
sa non vero, come mostra il seguente termine del -calcolo puro
(x.y ( ))
che riduce a se stesso se si opera sul redex interno, mentre giunge imme-
diatamente alla forma normale y se si opera sul redex esterno.
Entrambe le propriet valgono per il -calcolo tipizzato semplice: le
dimostreremo separatamente nei prossimi paragra.
68 CAPITOLO 5. IL CALCOLO DELLE COSTRUZIONI
5.5.1 Teorema di normalizzazione debole
Teorema 5.3 (normalizzazione debole). Per ogni termine del -calcolo tipizzato
semplice esiste una sequenza di riduzioni che lo trasforma in forma normale.
Nella dimostrazione di questo teorema useremo la seguente nozione di
ordinamento ben fondato.
Denizione 5.4. Un ordinamento parziale stretto si dice ben fondato se non
esistono catene discendenti innite.
Denire un ordinamento ben fondato sui termini ci consentir di sce-
gliere sempre un redex che faccia decrescere il termine no a raggiungere
la forma normale.
Lordinamento cui siamo interessati quello lessicograco tra coppie di
naturali:
n, m) n

, m

) sse n < n

o n = n

e m < m

La dimostrazione della normalizzazione debole deve risolvere due pro-


blemi: in primo luogo la riduzione pu duplicare redex...

Вам также может понравиться