Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti...

68
Appunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal prof. Andrea Asperti. Anno Accademico 2004-2005. Tutti i diritti riservati. Wilmer Ricciotti 18 luglio 2005

Transcript of Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti...

Page 1: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

Appunti di Lambda Calcolodal corso di Fondamenti Logici

dell’Informaticatenuto dal prof. Andrea Asperti.

Anno Accademico 2004-2005.Tutti i diritti riservati.

Wilmer Ricciotti

18 luglio 2005

Page 2: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

2

Page 3: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

Indice

I Il λ-calcolo puro 7

1 Implementazione 91.1 Implementazione per sostituzione testuale . . . . . . . . . . 91.2 Notazione di De Bruijn . . . . . . . . . . . . . . . . . . . . . . 10

1.2.1 Codifica name-free dei λ-termini . . . . . . . . . . . . . 101.2.2 Riduzione . . . . . . . . . . . . . . . . . . . . . . . . . 111.2.3 Ricerca dei redex . . . . . . . . . . . . . . . . . . . . . 121.2.4 Macchina di Krivine . . . . . . . . . . . . . . . . . . . 13

2 Confluenza 152.1 Sistemi di riscrittura e confluenza . . . . . . . . . . . . . . . . 162.2 Dimostrazione . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2.2.1 λ-calcolo marcato . . . . . . . . . . . . . . . . . . . . . 192.2.2 Preparativi . . . . . . . . . . . . . . . . . . . . . . . . . 202.2.3 Dimostrazione dello strip lemma . . . . . . . . . . . . 212.2.4 Dimostrazione di Church-Rösser . . . . . . . . . . . . 25

2.3 Implicazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3 Teorie equazionali 273.1 Le teorie λβ e λβη . . . . . . . . . . . . . . . . . . . . . . . . . 273.2 Il teorema di separabilità . . . . . . . . . . . . . . . . . . . . . 30

3.2.1 Preparativi . . . . . . . . . . . . . . . . . . . . . . . . . 31

II Calcoli tipizzati 35

4 Il λ-calcolo tipizzato semplice 374.1 Sintassi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374.2 Sistemi di tipi . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

4.2.1 Giudizi . . . . . . . . . . . . . . . . . . . . . . . . . . . 394.2.2 Regole di tipo . . . . . . . . . . . . . . . . . . . . . . . 394.2.3 Applicazioni . . . . . . . . . . . . . . . . . . . . . . . . 40

4.3 Programmi in λ→ . . . . . . . . . . . . . . . . . . . . . . . . . 414.3.1 Potere espressivo . . . . . . . . . . . . . . . . . . . . . 42

3

Page 4: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

4 INDICE

4.4 Corrispondenza di Curry-Howard . . . . . . . . . . . . . . . 434.4.1 Il frammento implicativo . . . . . . . . . . . . . . . . 434.4.2 Il connettivo ∧ . . . . . . . . . . . . . . . . . . . . . . . 444.4.3 Il connettivo ∨ . . . . . . . . . . . . . . . . . . . . . . . 46

4.5 Teoremi di normalizzazione . . . . . . . . . . . . . . . . . . . 484.5.1 Teorema di normalizzazione debole . . . . . . . . . . 484.5.2 Teorema di normalizzazione forte . . . . . . . . . . . 51

5 Il Calcolo delle Costruzioni 575.1 Sintassi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585.2 Sistemi di tipi . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

5.2.1 Giudizi . . . . . . . . . . . . . . . . . . . . . . . . . . . 595.2.2 Regole di tipo . . . . . . . . . . . . . . . . . . . . . . . 595.2.3 Applicazioni . . . . . . . . . . . . . . . . . . . . . . . . 60

5.3 Programmi in λ→ . . . . . . . . . . . . . . . . . . . . . . . . . 615.3.1 Potere espressivo . . . . . . . . . . . . . . . . . . . . . 62

5.4 Corrispondenza di Curry-Howard . . . . . . . . . . . . . . . 625.4.1 Il frammento implicativo . . . . . . . . . . . . . . . . 625.4.2 Il connettivo ∧ . . . . . . . . . . . . . . . . . . . . . . . 635.4.3 Il connettivo ∨ . . . . . . . . . . . . . . . . . . . . . . . 65

5.5 Teoremi di normalizzazione . . . . . . . . . . . . . . . . . . . 675.5.1 Teorema di normalizzazione debole . . . . . . . . . . 68

Page 5: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

Elenco delle figure

2.1 Teorema di Church-Rösser . . . . . . . . . . . . . . . . . . . . 152.2 Strip lemma . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.3 Dimostrazione dello strip lemma. . . . . . . . . . . . . . . . . 25

4.1 Espressioni di tipo nel λ-calcolo tipizzato semplice . . . . . . 384.2 Termini del λ-calcolo tipizzato semplice . . . . . . . . . . . . 384.3 Esempio generico di regola di tipo . . . . . . . . . . . . . . . 394.4 Regole di tipo per il λ-calcolo tipizzato semplice . . . . . . . 404.5 Regole di inferenza per il connettivo ⇒ . . . . . . . . . . . . 434.6 Albero di prova con etichette . . . . . . . . . . . . . . . . . . 444.7 Regole di inferenza per il connettivo ∧ . . . . . . . . . . . . . 444.8 Regole di tipo per i tipi coppia . . . . . . . . . . . . . . . . . . 454.9 Regole di inferenza per il connettivo ∨ . . . . . . . . . . . . . 464.10 Regole di tipo per i tipi somma . . . . . . . . . . . . . . . . . 47

5.1 Espressioni di tipo nel λ-calcolo tipizzato semplice . . . . . . 585.2 Termini del λ-calcolo tipizzato semplice . . . . . . . . . . . . 585.3 Esempio generico di regola di tipo . . . . . . . . . . . . . . . 595.4 Regole di tipo per il λ-calcolo tipizzato semplice . . . . . . . 605.5 Regole di inferenza per il connettivo ⇒ . . . . . . . . . . . . 625.6 Albero di prova con etichette . . . . . . . . . . . . . . . . . . 635.7 Regole di inferenza per il connettivo ∧ . . . . . . . . . . . . . 645.8 Regole di tipo per i tipi coppia . . . . . . . . . . . . . . . . . . 645.9 Regole di inferenza per il connettivo ∨ . . . . . . . . . . . . . 655.10 Regole di tipo per i tipi somma . . . . . . . . . . . . . . . . . 66

5

Page 6: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

6 ELENCO DELLE FIGURE

Page 7: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

Parte I

Il λ-calcolo puro

7

Page 8: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal
Page 9: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

Capitolo 1

Implementazione

Dopo aver mostrato come nel λ-calcolo sia possibile esprimere qualunquefunzione calcolabile, è giunto il momento di chiedersi come esso possa es-sere implementato nei calcolatori. L’argomento è interessante in quanto illambda-calcolo rappresenta il modello formale su cui svariati linguaggi diprogrammazione sono fondati: l’esistenza di algoritmi più o meno efficien-ti per la riduzione di λ-termini si ripercuote dunque su molti linguaggifunzionali.

1.1 Implementazione per sostituzione testuale

La tecnica più semplice per l’implementazione del λ-calcolo e della ridu-zione di λ-termini, deriva dalla definizione 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 conM [N/x] (secondo la regola della β-riduzione).

Queste operazioni, a prima vista, possono essere compiute agevolmentetanto sulla stringa che rappresenta il λ-termine, quanto sull’albero di sintas-si astratta; tuttavia uno sguardo più attento ci rivela la necessità di risolvereproblemi non banali, sacrificando l’efficienza. In particolare, notiamo che lariduzione 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 apagare un tempo lineare per ogni riduzione (specialmente se si considerache 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 unavariante 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 noninteressa.

9

Page 10: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

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 l’idea che fornisce la soluzione del problema siaquella di passare a una notazione name-free, ossia priva di nomi.

1.2.1 Codifica name-free dei λ-termini

Osserviamo un λ-termine qualunque: come già mostrato, esso può essererappresentato 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 definire 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 l’astrazio-ne cui la variabile è legata. Parallelamente, la notazione delle λ-astrazionipuò essere modificata 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, conosciutacon il nome di notazione di De Bruijn1. Due occorrenze della stessa variabile(ossia occorrenze di variabile legate allo stesso binder) possono assumerea seconda della loro posizione dentro l’albero sintattico indici diversi; allostesso modo, non è assolutamente detto che due indici uguali si riferiscanoalla stessa variabile: l’unico modo per capire a quale binder si riferisca unindice numerico è quello di risalire l’albero sintattico di un numero di livellidi astrazione pari al valore dell’indice. Per questo la notazione di De Brui-jn è considerata abbastanza scomoda per la comprensione dei λ-termini eviene utilizzata soltanto per gli algoritmi di riduzione automatica.

Definiamo ora un algoritmo per riscrivere λ-termini nella codifica diDe Bruijn. L’algoritmo è definito per induzione strutturale e si suppone cheoperi 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)

L’idea è quella di decomporre ogni termine nei suoi sottotermini, tenen-do traccia delle variabili legate ai livelli superiori. Per fare questo si utilizza

1Si pronuncia de brain.

Page 11: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

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 livelliinferiori; nelle applicazioni ci si limita a propagare la lista ricevuta dal li-vello superiore; infine le variabili vengono sostituite con l’indice numericocorrispondente alla posizione del nome della variabile nella lista vars.

1.2.2 Riduzione

La codifica di De Bruijn sarebbe perfettamente inutile se non esistesse unmetodo efficace ed efficiente per ridurre le espressioni codificate. Il metodoesiste ma sfortunatamente non è intuitivo quanto la sostituzione testua-le; pertanto cercheremo di renderlo più comprensibile per mezzo di alcuniesempi.

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 nellaparte sinistra. Nella codifica di De Bruijn, l’operazione diventa meno ovvia,dato che le variabili non sono più identificate per nome. Ad esempio in

λ.(λ.((1 0) λ.(0 1)) λ.(0 1))

la sostituzione dovrà avvenire in corrispondenza di indici diversi (cer-chiati in fig. ); come se non bastasse, l’indice corrispondente a z nella partesinistra del redex dovrà essere decrementato (per via dell’eliminazione del-la λ che legava x), mentre l’indice corrispondente a z nella parte destra delredex, essendo copiato due volte e a livelli di annidamento diversi in segui-to alla riduzione, rimarrà pari a 1 nel primo caso, mentre sarà incrementatoa 2 nel secondo.

Per formulare un primo algoritmo in grado di ridurre termini codificatisecondo De Bruijn, notiamo che in seguito a una sostituzione:

• gli indici di variabili libere (non locali) del sottotermine sinistro delredex considerato devono essere decrementati di 1

• gli indici di variabili legate del sottotermine sinistro, eccetto l’indicedella variabile da sostituire, non sono modificati

• gli indici della variabile da sostituire nel sottotermine sinistro sonosostituiti con il sottotermine destro del redex, in cui le variabili liberevengono incrementate di un valore pari all’annidamento di ciascunaoccorrenza della variabile da sostituire.

Page 12: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

12 CAPITOLO 1. IMPLEMENTAZIONE

Definiamo ora un algoritmo2 per ridurre termini codificati secondo DeBruijn. Per prima cosa definiamo una funzione lift per incrementare levariabili 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 melse m + n

in liftaux 0 M;;

A questo punto è possibile definire la funzione che sostituisce N in Msecondo 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 melse if m = k (* da sostituire *)

then lift k Nelse (* libera in M *) m - 1

in substaux 0 M;;

1.2.3 Ricerca dei redex

Abbiamo definito un algoritmo per calcolare β-riduzioni nella codifica diDe Bruijn; tuttavia per interpretare il λ-calcolo è necessario definire ancheuna strategia per la ricerca dei redex: infatti in un termine possono esserepresenti molteplici redex e la scelta del redex da ridurre a ogni passo in-fluenza sia l’efficienza dell’interpretazione (ossia il numero di riduzioni dacompiere prima di raggiungere la forma normale) sia la terminazione (nonogni strategia di riduzione consente di giungere alla forma normale - seesiste - in un numero finito di passi).

Due opposte strategie per la riduzione sono la chiamata per valore (in cuivengono 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:

2Questo algoritmo e i successivi sono descritto con una notazione pseudo-ML. Si ricordache in ML l’operatore ˆ esprime la concatenazione di stringhe e che l’istruzione matchcorrisponde all’incirca a uno switch-case.

Page 13: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

1.2. NOTAZIONE DI DE BRUIJN 13

• variante weak: non riduce mai all’interno di λ-astrazioni.

• variante estesa: riduce anche all’interno 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.

L’implementazione della strategia leftmost-outermost estesa utilizza unapila e una ricerca in profondità, finché 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 inefficienza

Nella strategia implementata fin qui, purtroppo, ogni riduzione richiedeuna scansione completa del ramo sinistro del redex. Può capitare che dueriduzioni consecutive scandiscano due volte essenzialmente lo stesso al-bero, mentre sarebbe opportuno scandirlo una sola volta e poi sostituirecontemporaneamente tutte le variabili coinvolte nelle riduzioni.

Per effettuare un’operazione del genere, in pratica, occorre tenere trac-cia dei termini che andranno sostituiti. È per questo che per migliorare l’ef-ficienza della nostra strategia introduciamo la nozione di ambiente. L’am-biente (concettualmente simile alla pila dei record di attivazione utilizza-ta dai linguaggi di programmazione) ci consente di differire ogni sostitu-zione fino a quando non è strettamente necessaria, utilizzando una poli-tica lazy. L’implementazione di questa strategia lazy necessita di una pro-cedura msubst che valuta le variabili libere di un termine M all’internodell’ambiente 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 - nin msubstaux M 0;;

La procedura msubst opera una sostituzione multipla e sfrutta la fun-zione nth m e che restituisce l’m-esimo elemento della lista e. L’algoritmopuò essere utilizzato secondo la seguente tabella:

Page 14: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

14 CAPITOLO 1. IMPLEMENTAZIONE

ambiente codice pila → ambiente codice pilae (M N) P e M (msubst N e)::Pe λ.M N ::P N ::e M (msubst N e)::Pe m P ∅ (nth m e) P

Sfortunatamente msubst è un’operazione complessa, che richiede untempo lineare, per via della scansione della lista dovuta alla funzione nth.Si può fare di meglio riprogettando la struttura dell’ambiente ed estenden-do ulteriormente l’approccio lazy, come nella macchina che discuteremonel prossimo paragrafo.

La macchina di Krivine

La seguente tabella descrive la macchina di Krivine, proposta dall’omonimomatematico francese, tuttora vivente.

ambiente codice pila → ambiente codice pilae (M N) P e M 〈N, e〉::Pe λ.M c::P c::e M P〈N, e〉::e’ 0 P e N Pc::e n + 1 P e n Pe λ.M ∅ risultato = 〈λM, e〉

Page 15: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

Capitolo 2

Confluenza

L’obiettivo di questo capitolo sarà dimostrare un importante teorema sulλ-calcolo, dovuto a Church e Rösser, che qui enunciamo.

Teorema 2.1 (Church-Rösser). Sia M un termine. Se esistono due catene diriduzioni 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-Rösser

Una rappresentazione grafica del teorema è data in fig. 2.1. Ricordiamoche le frecce continue esprimono una quantificazione universale, mentrequelle tratteggiate esprimono una quantificazione esistenziale.

Prima di passare alla dimostrazione, abbastanza complessa, di questaproprietà del λ-calcolo (denominata confluenza), 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, ossiache non riducono a forma normale: precisiamo però che anche qualora untermine possieda una forma normale, da esso possono avere origine catenedi riduzioni infinite. Ad esempio, nel termine

(λxy.y (δ δ))

15

Page 16: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

16 CAPITOLO 2. CONFLUENZA

ogni riduzione sul redex interno riporta al termine iniziale, generandouna catena infinita; d’altra parte è sempre possibile decidere di ridurre ilredex più esterno, ottenendo

λy.y

che è un termine in forma normale. In pratica, anche se una strategia diriduzione non conduce alla forma normale, in ogni momento posso decide-re di cambiare strategia, e quindi con la strategia giusta calcolare la formanormale.

2.1 Sistemi di riscrittura e confluenza

È complicato dimostrare la confluenza generale nel λ-calcolo per via delledue premesse di lunghezza arbitraria. È evidente che per raggiungere qual-che risultato dovremo cominciare dimostrando una versione semplificatadel problema e poi dimostrare che questa implica la confluenza generale.

Definizione 2.2 (proprietà del diamante). Un sistema di riscrittura godedella proprietà del diamante (o Church-Rösser in un passo) se, dati un termineM e due riduzioni (in un passo) M → P e M → Q, esistono un termine Ne due riduzioni (in un passo) P → N e Q → N .

Questa proprietà è una condizione sufficiente per avere confluenza ge-nerale: intuitivamente, con la confluenza in un passo potremmo riempire il“diamante grande” della confluenza 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). L’unicariduzione successiva possibile in quest’ultimo caso produce (I I), ma è evi-dente che per richiudersi su questo termine avendo seguito l’altro lato deldiamante occorreranno due riduzioni. Questo è dovuto al fatto che ogni ri-duzione può produrre più copie del sottotermine di destra nel sottoterminedi sinistra1.

Un’altra proprietà simile alla confluenza, ma più semplice, è la confluen-za locale.

Definizione 2.3 (confluenza locale). Un sistema di riscrittura soddisfa laconfluenza locale se, dati un termine M e due riduzioni (in un passo) M →

1Esistono sistemi di riscrittura lineari, in cui i termini non vengono duplicati, per i qualivale la proprietà del diamante.

Page 17: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

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 confluenza locale, però, non implica la confluenza generale. Un si-stema di riscrittura per cui vale la confluenza locale ma non la confluenzagenerale è schematizzato nel seguente diagramma:

C Aoo""Bbb

// D

È facile vedere che queste regole di riscrittura rispettano la confluenzalocale: nell’unico caso interessante, da A è possibile derivare in un passoB e C, e infine confluire da B in C in due passi. Tuttavia la confluenzagenerale non vale perché, sebbene sia possibile derivare da A in più passisia C sia D, poi non è possibile chiudere il diamante.

Un altro esempio di sistema in cui vale solo la confluenza locale è mo-strato nel seguente diagramma.

��

//

��

//

��

��

//

��

//

��

��

//

��

//

. . .

��// // //

Dal momento che entrambi i sistemi di riscrittura mostrati in cui va-le la confluenza locale ma non la confluenza generale sono non terminan-ti, ci chiediamo se confluenza locale e terminazione siano una condizionesufficiente per garantire la confluenza generica. La risposta è affermativa.

Teorema 2.4. Se in un sistema di riscrittura sempre terminante vale la confluenzalocale, allora vale anche la confluenza generale.

Dimostrazione. Sia ν(M) la funzione che restituisce la lunghezza massimadelle catene di riduzione aventi origine M . Indicando con +→ la riduzione

Page 18: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

18 CAPITOLO 2. CONFLUENZA

in almeno un passo, senz’altro vale l’implicazione:

M+→ P ⇒ ν(M) > ν(P )

(si noti che questa proposizione è vera soltanto se P non ammette catene diderivazioni infinite).

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 . Ladimostrazione è per induzione su ν(M).

Nel caso base ν(M) = 0, deve essere M = P = Q = N , pertanto nonabbiamo nulla da dimostrare.

Nel caso induttivo, vale la confluenza 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 l’ipotesi di confluenza locale esiste un termine R tale che M ′ ∗→R e M ′′ ∗→ R.

D’altra parte ν(M ′) < ν(M); quindi per ipotesi induttiva esiste untermine P ′ tale che P

∗→ P ′ e R∗→ P ′.

Infine anche ν(M ′′) < ν(M); quindi sempre per ipotesi induttiva esisteun termine N tale che P ′ ∗→ N e Q

∗→ N .

Si dimostra che nel λ-calcolo vale la confluenza locale. Tuttavia il λ-calcolo puro non è un formalismo terminante, pertanto ai nostri scopi anchela confluenza locale è inutile.

2.2 Dimostrazione

La proprietà che dovremo dimostrare per derivare la confluenza generaleè la seguente.

Lemma 2.5 (strip lemma). Sia M un termine. Dati due termini P e Q tali cheM →β P (in un passo) e M

∗→β Q (in qualsiasi numero di passi), esiste untermine N tale che P

∗→β N e Q∗→β N (in qualsiasi numero di passi).

Il nome di questo lemma è dovuto alla sua rappresentazione grafica(fig. 2.2): una striscia (strip) del diagramma che rappresenta la confluenzagenerale. Intuitivamente, riducendo il diagramma in tante strisce quantesono necessarie, saremo in grado di dimostrare la confluenza.

Tuttavia, la dimostrazione dello strip lemma non è banale: essa richiededi tener traccia dei residui del redex R : M →β P , che potrebbero esseremoltiplicati dalla catena di riduzioni σ : M

∗→β Q. Per riuscire nel nostrointento, necessitiamo di una sintassi che ci consenta di “marcare” i residui.

Page 19: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

2.2. DIMOSTRAZIONE 19

PR

������

���

∗σ

��@@@

@@@@

@@@@

@@@@

@@@@

Q

��??

??

??

??

?

M∗

~~}}

}}

R

Figura 2.2: Strip lemma

2.2.1 λ-calcolo marcato

Per tracciare i residui del redex R, l’idea è quella di etichettare R in modotale che l’etichetta sia mantenuta (eventualmente duplicata) dalla catena diriduzioni σ. A questo scopo, dobbiamo estendere la sintassi del λ-calcolo.

Definizione 2.6 (λ-calcolo marcato). L’insieme dei termini del λ-calcolomarcato, indicato con Λ∗, è il più piccolo insieme definito 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 è definita dalle regole seguen-ti:

(λx.M N) →β M [N/x](λx.M N) →β M [N/x]

A rigore, bisognerebbe definire anche la sostituzione nel calcolo mar-cato; noi daremo per scontata la definizione di sostituzione, limitandoci aevidenziare che la sostituzione mantiene i redex marcati: in particolare unasostituzione M [N/x] può duplicare i redex marcati eventualmente presentiin N , se x occorre in M più di una volta.

Definiamo anche due funzioni di trasformazione da termini marcati atermini non marcati: la funzione di cancellazione delle marche:

| · | : Λ∗ → Λ =

|x| = x

|(M N)| = (|M | |N |)|λx.M | = λx.|M |

|(λx.M N)| = (λx.M N)

Page 20: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

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 ynon è 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., all’indietro)

Si noti il trucco, che sarà utilizzato in tutti i passi della dimostra-zione, in cui la parte finale dell’equivalenza è ottenuta procedendo“all’indietro”.

Se M = y 6= x:

ϕ(y)[ϕ(N)/x] = y[ϕ(N)/x] (def. di ϕ)= y (def. di sostituzione)= ϕ(y[N/x]) (def. di sostituz. e di ϕ, all’indietro)

Se M = (P Q): in questo passo induttivo e nei successivi, dovendo dimo-strare un’equivalenza del tipo a = b, procederemo semplificandoprima a e poi b e mostrando infine che l’equivalenza semplificata èbanalmente implicata dall’ipotesi 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 ϕ)

Page 21: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

2.2. DIMOSTRAZIONE 21

Infine, 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 nonsia una variabile libera in N (in caso contrario possiamo α-convertireM 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 ϕ)

Infine, per ipotesi induttiva:

λy.(ϕ(P )[ϕ(N)/x]) = λy.ϕ(P [N/x])

Se M = (λy.P Q): supponiamo, ancora senza perdita di generalità, che ynon 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 ϕ)

Infine, per ipotesi induttiva:

ϕ(P )[ϕ(N)/x][ϕ(Q)[ϕ(N)/x]/y]] = ϕ(P [N/x])[ϕ(Q[N/x])/y]]

(si noti che qui l’ipotesi 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-lemmiderivi lo strip lemma.

Page 22: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

22 CAPITOLO 2. CONFLUENZA

Lemma 2.9. Siano M e N termini del λ-calcolo standard. Per ogni catena diriduzioni σ : 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 ′ ∗→β N ′ tali che |N ′| = N . In altre parole il diagramma

(Λ) Mσ∗

// N

(Λ∗) M ′

|·|

OO

τ∗

//______ N ′

|·|

OO

commuta.

Il lemma ci dice che ogni riduzione del calcolo standard può essere si-mulata nel calcolo etichettato; dato che il calcolo etichettato è identico alcalcolo standard eccetto che per i redex etichettati e che i redex etichetta-ti vengono ridotti allo stesso modo dei redex normali, non dimostreremoquesta proprietà, considerandola ovvia.

Lemma 2.10. Siano M ′ e N ′ termini del λ-calcolo etichettato. Per ogni catena diriduzioni τ : M ′ ∗−→β N ′ esiste un’altra catena di riduzioni σ : ϕ(M ′) ∗−→β

ϕ(N ′). In altre parole il diagramma

(Λ∗) M ′

ϕ

��

τ∗

// N ′

ϕ

��(Λ) ϕ(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 chepartecipano 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)

Page 23: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

2.2. DIMOSTRAZIONE 23

(P Q) −→β (P ′ Q): si hanno:

ϕ((P Q)) = (ϕ(P ) ϕ(Q))ϕ((P ′ Q)) = (ϕ(P ′) ϕ(Q))

D’altra parte, per ipotesi induttiva, se P −→β 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 ′)

D’altra parte, per ipotesi induttiva, se P −→β P ′ allora ϕ(P ) ∗−→β

ϕ(P ′); pertanto λx.ϕ(P ) ∗−→β λx.ϕ(P ′).

Lemma 2.11. Per ogni termine M ′ del λ-calcolo etichettato, esiste una catena diriduzioni σ : |M ′| ∗−→β ϕ(M ′). In altre parole il diagramma

(Λ∗) M ′

|·|

}}{{{{

{{{{ ϕ

""FFF

FFFF

FF

(Λ) |M ′| σ∗

//_______ ϕ(M ′)

commuta.

Dimostrazione. La dimostrazione è per induzione strutturale su M .

M = x: |x| = x = ϕ(x), pertanto il lemma è banalmente verificato.

M = (P Q): si ha:

|(P Q)| = (|P | |Q|)ϕ((P Q)) = (ϕ(P ) ϕ(Q))

D’altra parte, per ipotesi induttiva:

∃σ′ : |P | ∗−→β ϕ(P )

∃σ′′ : |Q| ∗−→β ϕ(Q)

Pertanto ∃σ : (|P | |Q|) ∗−→β (ϕ(P ) ϕ(Q)).

Page 24: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

24 CAPITOLO 2. CONFLUENZA

M = λx.P : si ha:

|λx.P | = λx.|P |ϕ(λx.P ) = λx.ϕ(P )

D’altra 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 sufficiente dimostrare la se-guente proprietà:

M∗−→β M ′ N

∗−→β N ′

M [N/x] ∗−→β M ′[N ′/x]

Per comodità, scomponiamo questa proprietà in due parti:

M∗−→β M ′

M [N/x] ∗−→β M ′[N/x]

N∗−→β N ′

M [N/x] ∗−→β M [N ′/x]

La prima può essere dimostrata agevolmente per induzione; per laseconda occorre dimostrare che la riduzione M

∗−→β M ′ può esserecompiuta sulle varie copie di M presenti in N in modo indipendente(la dimostrazione completa è per induzione strutturale).

Page 25: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

2.3. IMPLICAZIONI 25

MR

~~||||

||||

σ∗

&&LLLLLLLLLLLLLLLLLLLLLLLLLLL

P

%%JJ

JJ

JJ

JJ

JJ

JJ

J M ′ϕ

oo

|·|

OO

%%KKKKKKKKKKKKKK

Q

||yy

yy

y

ϕ(Q′) Q′ϕoo

|·|

OO

Figura 2.3: Dimostrazione dello strip lemma.

Siamo ora in grado di dimostrare lo strip lemma. Dati un termine M edue riduzioni R : M −→β P e σ : M

∗−→β Q, costruiamo il termine M ′

del λ-calcolomarcato, identico a M tranne per il fatto che il redex R è statomarcato. 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 unacatena di riduzioni per mezzo della quale M ′ ∗−→β Q′. Dal lemma 2.11segue invece l’esistenza di una catena di riduzioni da Q = |Q′| a ϕ(Q′).Infine, per il lemma 2.10, esiste una catenza di riduzioni da P a ϕ(Q′).

Pertanto ϕ(Q′) è il termine in cui confluiscono P e Q e lo strip lemma èdimostrato.

2.2.4 Dimostrazione di Church-Rösser

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 ′ ∗−→β P . Per lo strip lemma,esiste un termine Q′ tale che P ′ ∗−→β Q′ e Q

∗−→β Q′. Per ipotesiinduttiva, essendo la catena P ′ ∗−→β P lunga n − 1, esiste infine untermine R tale che P

∗−→β R e Q′ ∗−→β R.

2.3 Implicazioni

Discutiamo brevemente alcune delle conseguenze immediate del teoremadi Church-Rösser.

Page 26: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

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 eQ. Dal teorema di Church-Rösser segue che esiste un termine R tale cheP

∗−→β 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 l’ipotesi 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 definizione di β-equivalenza, segue che esistono duesequenze Q1, Q2, . . . Qn−1 e P1, P2, . . . Pn di termini tali che:

M∗−→β P1

Qi−1∗−→β Pi i = 2, 3, . . . n

Qi∗−→β Pi i = 1, 2, . . . n− 1

N∗−→β Pn

La dimostrazione è per induzione su n.

n = 1: la dimostrazione è ovvia, perché M e N riducono allo stesso termineP1.

n > 1: per ipotesi induttiva, esiste un termine R tale che

M∗−→β R

Qn−1∗−→β R

D’altra parte, per la definizione di β-equivalenza

Qn−1∗−→β Pn

N∗−→β Pn

Poiché Qn−1 riduce ai due termini R e Pn, per il teorema di Church-Rösser esiste un termine P tale che

R∗−→β P

Pn∗−→β P

ma allora anche M ed N riducono in più passi a P ed il corollario èdimostrato.

È evidente che quest’ultimo corollario ci offre un modo operativo perverificare la β-equivalenza di due termini dotati di forma normale: se laforma normale è la stessa, i due termini sono β-equivalenti, mentre se leforme normali sono differenti, i due termini non sono β-equivalenti. Se in-vece i due termini non hanno forma normale, questo procedimento nonfunziona; questo non ci sorprende: si dimostra infatti che la β-equivalenzanon è decidibile nel caso generale.

Page 27: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

Capitolo 3

Teorie equazionali

La relazione di β-riduzione formalizza la nozione di calcolo nel λ-calcolo:in altre parole due termini β-equivalenti sono due costrutti sintatticamentediversi che però denotano (dimostrabilmente) lo stesso oggetto. Come ab-biamo visto (?), la β-equivalenza è una congruenza, ossia una relazione diequivalenza preservata da ogni contesto. Le espressioni del tipo

M =β N

dove M e N sono termini, costituiscono un insieme di formule logiche chedesideriamo rendere provabili sotto un’opportuna teoria. Ricordiamo cheuna 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 definire= 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′ t′)(APPLICAZIONE)

27

Page 28: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

28 CAPITOLO 3. TEORIE EQUAZIONALI

s = t

λx.s = λx.t(ASTRAZIONE)

e la β-equivalenza:

(λx.s t) = s[t/x] (β)

L’obiettivo, 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 Gödel) che non sarà pos-sibile renderla completa, dal momento che è possibile esprimere in essal’aritmetica di Peano.

Ci chiediamo dunque se esistono equivalenze interessanti che la teoriaλβ non cattura e se è possibile aggiungerle come assiomi, senza che la teoriadiventi inconsistente. Per verificare se l’equivalenza di due termini P e Qpuò essere aggiunta alla teoria senza renderla inconsistente, basta verificarese esiste una sequenza di termini N1, ..., Nk tale che

(P N1 ... Nk) = fst

(Q N1 ... Nk) = snd

È evidente che in un caso simile non potremmo aggiungere l’equiva-lenza alla teoria: infatti ne seguirebbe l’equivalenza tra fst e snd, e quindil’equivalenza 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 l’equivalenza di variprogrammi diversi, ad esempio le due forme di funzione successore per gliinteri 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:

Page 29: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

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 essereuguagliati. Questo risultato potrebbe essere considerato sorprendente, datoche ci aspetteremmo che il comportamento dei due termini che calcolanoil successore fosse coincidente; la spiegazione è però molto semplice: i duetermini sono equivalenti soltanto se applicati agli interi di Church, e conaltri 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; d’altra parte, come sappiamo, due forme normali diverse non sonomai β-equivalenti; tuttavia, è abbastanza semplice convincersi che, qualo-ra x non compaia libera in M , i due termini si comporteranno nello stessomodo 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 noncompare libera in M . L’η-equivalenza introduce il principio dell’equivalen-za estensionale1.

Proposizione 3.1 (equivalenza estensionale). Due λ-termini M e N sono esten-sionalmente equivalenti se e solo se sono βη-equivalenti, ossia per ogni termine Pvale

(M P ) =βη (N P ) ⇔ M =βη N

1Si ricorda che due programmi sono estensionalmente equivalenti se per ogni inputrestituiscono lo stesso output

Page 30: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

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 suogni parametro possibile, ma su ogni parametro appartenente a una certaclasse, come gli interi di Church relativamente alle due forme di funzionesuccessore.

Osservazione 2. Accanto alla η-equivalenza, si può considerare una nozionedi η-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-fluente, 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 Böhm.

Teorema 3.2 (separabilità). Siano M e N due termini chiusi in forma βη-normalee differenti. Allora esiste una sequenza di termini chiusi P1, . . . , Pk tali che{

(M P1 . . . Pk) = fst(N P1 . . . Pk) = snd

Page 31: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

3.2. IL TEOREMA DI SEPARABILITÀ 31

3.2.1 Preparativi

Diamo ora alcune definizioni che ci saranno utili nella dimostrazione delteorema.

Definizione 3.3 (forma normale di testa). Un λ-termine si dice in forma nor-male di testa (hnf) se è della forma λx1 . . . xn.(y M1 . . .Mk), con M1 . . .Mk

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 formanormale è anche una hnf.

Definizione 3.4 (permutatore). Un permutatore di ordine n è un termine dellaforma

αn , λx1 . . . xnx.(x x1 . . . xn)

Definizione 3.5 (albero di Böhm). L’albero di Böhm di un λ-termine M , in-dicato con BT(M) è definito come segue:

BT(M) =

⊥ se M non ha una forma normale di testa

λx.y

ttttttttt

JJJJJJJJJ

BT(M1) ··········· BT(Mk)

se M =β λx.(y M1 · · ·Mk)

Due alberi di Böhm differiscono al primo livello se differiscono o nellaradice o nel numero dei figli della radice.

Definizione 3.6 (trasformazioni di Böhm). Si definisce trasformazione di Böhmogni composizione delle seguenti trasformazioni da λ-termini in λ-termini:

1. applicazioni BN : M 7→ (M N)

2. sostituzioni BN,y : M 7→ M [N/y]

L’applicazione di una o più trasformazioni a un termine M sarà indicataposponendo le trasformazioni al termine, ad esempio:

M BP BQ BN,y ≡ (M P Q)[N/y]

Le trasformazioni di Böhm consentono di istanziare le variabili libere di untermine (utilizzando sostituzioni) e quelle legate in un’astrazione posta alprimo livello dell’albero di Böhm corrispondente (utilizzando applicazio-ni).

Page 32: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

32 CAPITOLO 3. TEORIE EQUAZIONALI

Dimostrazione. La dimostrazione ragiona sul livello dell’albero di Böhm incui i due termini si differenziano: se si differenziano al primo livello, sicostruiscono delle liste argomenti che consentono di ridurre i due terminirispettivamente a fst e a snd; in caso contrario, viene mostrata una tecnica,detta Böhm-out che consente di far emergere la differenza, spostandola finoal primo livello, utilizzando solamente trasformazioni di Böhm.

M = λx.(y P1 . . . Pr)N = λy.(z R1 . . . Rs)

si differenziano al primo livello se:

1. |x| 6= |y|

2. y 6= z

3. r 6= s

Nel caso 1 è sempre possibile trasformare il termine avente la lista diargomenti di lunghezza minore con η-equivalenze, fino a rendere le listedi argomenti di M e N uguale lunghezza. Inoltre, se |x| = |y|, è semprepossibile α-convertire i due termini in modo che x = y.

Nel caso 2 i due termini sono della forma

M = λx.(y P1 . . . Pr)N = λx.(z R1 . . . Rs)

In questo caso sfrutteremo la presenza di due variabili di testa differenti.Istanzieremo y con:

λw1 . . . wr.fst

e z con:λw1 . . . ws.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 P1 . . . Pr)N = λx.(y R1 . . . Rs)

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:

λz1 . . . zs+1.zs+1

Page 33: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

3.2. IL TEOREMA DI SEPARABILITÀ 33

Di seguito, istanzieremo tutte le variabili legate in λx e diverse da y contermini qualunque. Infine applicheremo la seguente lista di parametri:

λw1 . . . ws−r.snd ∗ · · · ∗︸ ︷︷ ︸s−r−1

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 (Böhm-out) per far risalire la differenza diun livello. Supponiamo di avere i due termini

M = λx.(y P1 . . . Pr)N = λx.(y R1 . . . Rr)

e di voler far risalire la differenza presente nei sottotermini Pk e Rk. Consi-derando gli alberi di Böhm 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 l’opportuna proiezione, ovvero λx1 · · ·xr.xk per far risalireil sottoalbero differente;

2. se la variabile di testa y occorre più volte nel percorso che conduce al-la differenza, occorre effettuare un’operazione di linearizzazione perricondursi al caso precedente; sia h il massimo numero di figli di y nelpercorso suddetto: y verrà istanziata con αh (il permutatore di ordineh;

3. ogni altra variabile, se necessario, andrà istanziata con una variabilelibera 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 qualunquedanno risultati equivalenti, sono a loro volta equivalenti. Pertanto la teo-ria λβη è incompleta soltanto per quanto riguarda i termini che non hannoforma normale. In particolare equivalenze come

(δ δ) = ((δ δ) N)

non sono derivabili né renderebbero la teoria inconsistente; ovviamente laloro utilità è pressoché nulla.

Page 34: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

34 CAPITOLO 3. TEORIE EQUAZIONALI

Page 35: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

Parte II

Calcoli tipizzati

35

Page 36: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal
Page 37: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

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. Leannotazioni di tipo legali costituiscono il sottolinguaggio delle espressionidi tipo ben formate. A seconda del linguaggio, le annotazioni di tipo devo-no essere specificate esplicitamente dal programmatore, oppure possonoessere generate in modo automatico dall’interprete o dal compilatore.

Semanticamente, per tipo intendiamo l’insieme di valori che una va-riabile, un’espressione o un frammento di programma possono assumeredurante l’esecuzione. Nei linguaggi tipizzati, l’intervallo di valori che unavariabile 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: introducendodei vincoli per il programmatore, la buona tipizzazione previene numerosierrori di esecuzione.

In questo capitolo introdurremo il λ-calcolo tipizzato semplice (λ→),analizzandone sintassi e semantica e verificandone il potere espressivo.

4.1 Sintassi

La sintassi del λ-calcolo tipizzato semplice si fonda su quella del λ-calcolopuro, discostandosene ben poco. L’estensione di maggior rilievo riguar-da ovviamente l’insieme dei tipi legali: esso comprende un insieme finitodi tipi atomici (non strutturati), che indicheremo con le lettere maiuscoleA,B, C . . . e sui quali non faremo assunzioni, e un insieme numerabile ditipi induttivi (strutturati), costruiti a partire da un numero finito di costrut-tori di tipo. Il principale costruttore a cui siamo interessati è per ovvi motivi

37

Page 38: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

38 CAPITOLO 4. IL λ-CALCOLO TIPIZZATO SEMPLICE

il costruttore dei tipi funzione (→), che prende due tipi T1 e T2 e costruisceil tipo delle funzioni da T1 in T2.

L’insieme dei tipi legali costituisce il sottolinguaggio delle espressionidi tipo, descritto in forma di grammatica in fig. 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 è modificata soltanto nel caso dell’astrazione: èinfatti necessario specificare un tipo per ogni variabile legata. La gramma-tica è presentata in fig. 5.2.

〈term〉 ::= 〈var〉 | λ〈var〉:〈T〉.〈term〉 | (〈term〉 〈term〉)

〈var〉 ::= x | y | z | x1 | . . .

Figura 4.2: Termini del λ-calcolo tipizzato semplice

4.2 Sistemi di tipi

Dopo aver definito la sintassi del calcolo tipizzato, ci chiediamo come siapossibile assegnare un tipo ai termini del linguaggio. Allo stato attuale, in-fatti, i tipi sono soltanto un’aggiunta 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 rigetterebbesegnalando un errore di semantica statica).

Ci interessa tuttavia trovare un modo per definire 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 diraggiungere 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 verificabile: deve esistere un algoritmo ditype-checking che verifichi se un programma è ben tipato.

Page 39: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

4.2. SISTEMI DI TIPI 39

• deve essere trasparente: il programmatore deve essere in grado diprevedere se un programma è ben tipato o meno e perché.

• deve essere enforceable: le dichiarazioni di tipo dovrebbero essere ilpiù possibile verificate staticamente, altrimenti dinamicamente. Laconsistenza tra le dichiarazioni di tipo e il codice associato ad essedev’essere verificabile da un programma.

Introduciamo ora il formalismo dei sistemi di tipi.

4.2.1 Giudizi

L’entità atomica trattata dai sistemi di tipi è un particolare tipo di espres-sione formale denominato giudizio. Un giudizio ha la forma:

Γ ` I

che si legge “Γ verifica I”. I è un’asserzione; Γ è detto contesto e de-finisce i tipi delle variabili che compaiono libere in I, nella forma x1 :A1, . . . , xn : An (qui il simbolo ‘:’ rappresenta la relazione “appartiene altipo”). È necessario che tutte le variabili libere nell’asserzione siano dichia-rate in Γ. Per il calcolo tipizzato semplice, siamo interessati a una sola formadi 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 lecomponenti (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-finita sulla base di certe regole di inferenza che costituiscono il sistema ditipi formale.

Una regola (fig. 5.3) è composta da un certo numero di giudizi (premesse)posti sopra una linea orizzontale e da un unico giudizio (conclusione) postosotto la linea: se sono valide le premesse, è valida la conclusione.

Γ1 ` I1 . . .Γn ` In

Γ ` I(REGOLA GENERICA)

Figura 4.3: Esempio generico di regola di tipo

Page 40: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

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 diun’altra regola. Per verificare la validità di un giudizio occorre dare un al-bero di derivazione corretto, le cui foglie siano assiomi e la cui radice sia ilgiudizio da verificare.

Le regole di tipo (fig. 5.4) per il calcolo tipizzato semplice sono tre, unaper 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. Un’applicazioneha tipo T2 se la parte funzionale ha tipo T1 → T2 e l’argomento ha tipo T1.Un’astrazione λx : T1.M ha tipo T1 → T2 se, supponendo che x abbia tipoT1, M ha tipo T2.

Γ ` x : T se x : T ∈ Γ (T-AX)

Γ ` M : T1 → T2 Γ ` N : T1

Γ ` (M N) : T2(T-APP)

Γ, x : T1 ` M : T2

Γ ` λx : T1.M : T1 → T2(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 Γ seesiste un tipo A per cui il giudizio Γ ` M : A è valido. Il problema di con-trollare l’esistenza di un tipo ben formato per i termini di un programma èdetto typechecking. Il problema di identificare, 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, ovviamenteesiste anche l’algoritmo di typechecking, ma non è vero il contrario): per al-cuni sistemi, questi problemi sono indecidibili (non è possibile determinareper 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 iltypechecking, e all’occorrenza la type inference, devono essere decidibili.

Una proprietà importante che i sistemi di tipi devono rispettare è con-nessa alla semantica operazionale dei programmi tipizzati. Affinché il siste-ma di tipi sia corretto è necessario garantire che se Γ ` M : A è un giudizio

Page 41: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

4.3. PROGRAMMI IN λ→ 41

valido e il termine M riduce a un termine M ′, allora Γ ` M ′ : A. Questaproprietà è 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 codifiche per booleani e naturali e perle operazioni che li manipolano. Per quanto riguarda i booleani, potrem-mo aggiungere in modo banale annotazioni di tipo alle codifiche usate nelλ-calcolo puro:

true , λxT1 .λyT2 .x : T1 → T2 → T1

false , λxT1 .λyT2 .y : T1 → T2 → T2

Notiamo però che in questo modo il principale costrutto che utilizzabooleani – l’if-then-else – sarebbe praticamente impossibile da tipizzare,sia perché true e false hanno tipo diverso, sia perché non sarebbe possibileprevedere il tipo del risultato (T1 o T2?).

La soluzione è quindi quella di utilizzare lo stesso tipo per entrambe lecontinuazioni dell’if, e modificare quindi il tipo dei booleani di conseguen-za.

trueT , λxT .λyT .x : T → T → T

falseT , λxT .λyT .y : T → T → T

Si possono quindi definire anche il tipo booleano e l’if-then-else (si notiche booleani e if-then-else sono parametrizzati rispetto al tipo delle conti-nuazioni).

BoolT , T → T → T

ITET , λbBoolT .λxT .λyT .(b x y) : BoolT → T → T → T

Definiamo la codifica di Church per gli interi in modo del tutto analogoal λ-calcolo puro. In primo luogo lo zero:

0 , λx : T1.λy : T2.y : T1 → T2 → T2

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 T1 e T2, perché idealmentevorremmo che lo zero fosse un valore polimorfo in cui T1 e T2 fossero istan-ziabili con qualunque tipo. Vediamo cosa accade cercando di tipizzare ladefinizione dell’1.

1 , λx : T1 → T2.λy : T1.(x y) : (T1 → T2) → T1 → T2

Page 42: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

42 CAPITOLO 4. IL λ-CALCOLO TIPIZZATO SEMPLICE

Per l’1 otteniamo un termine di tipo diverso. Anche in questo caso T1

e T2 stanno ad indicare due tipi qualunque. Vediamo infine il caso delnumero 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 tipoqualunque. Per i numeri interi maggiori di 2 si può invece verificare che iltipo risulta identico a quello del 2.

Questa situazione anomala si risolve verificando che è possibile specia-lizzare i tipi dei numeri 0 e 1, in modo che unifichino con il tipo di 2. In par-ticolare in 0 occorre sostituire T1 con T → T e T2 con T ; in 1 si sostituisconosia T1 sia T2 con T .

Per concludere, il tipo dei numeri interi è definito in modo parametricorispetto a un qualunque tipo T , come segue:

NatT , (T → T ) → T → T

e anche gli interi di Church e la funzione successore sono definiti in modoparametrico rispetto a T :

0T , λx : T → T.λy : T.y : NatT1T , λx : T → T.λy : T.(x y) : NatT2T , λx : T → T.λy : T.(x (x y)) : NatT...succT , λn : NatT .λx : T → T.λy : T.(x (n x y)) : NatT → NatT

4.3.1 Potere espressivo

La possibilità di definire booleani e interi non è sufficiente a garantire un’e-levata espressività al nostro sistema di calcolo: sarebbe opportuno mostra-re almeno una codifica per le funzioni primitive ricorsive. Tuttavia, unatale codifica non esiste: per la precisione, il λ-calcolo tipizzato semplicenon consente di tipizzare nemmeno funzioni “semplici” come il predeces-sore. In sostanza, le uniche funzioni esprimibili sono somma, prodotto ecomposizioni di queste.

È possibile estendere il potere espressivo di questo calcolo introducen-do operatori ad hoc per la ricorsione, o equivalentemente un operatore pun-to fisso

FIXT : (T → T ) → T(FIXT M) −→β (M (FIXT M)) se M : T

Neanche in questo modo, tuttavia, il calcolo diventa Turing-completo.verificare il tipo diM ...

Page 43: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

4.4. CORRISPONDENZA DI CURRY-HOWARD 43

4.4 Corrispondenza di Curry-Howard

In questa sezione presenteremo un’interessante analogia tra calcoli tipizzatie 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 delleregole (fig. 5.5) di introduzione dell’implicazione (⇒ i) e di eliminazionedell’implicazione (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 dimostrazionedi A ⇒ B (A implica B) se abbiamo un procedimento costruttivo (un algo-ritmo) che trasforma dimostrazioni di A in dimostrazioni di B; la regola dieliminazione ci consente invece di comporre una dimostrazione di A ⇒ Bcon 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 fine di rendere la corrispondenza più eviden-te, supporremo che alle foglie scaricate di un albero di prova e alle regole diintroduzione dell’implicazione sia sempre associata un’etichetta (apparte-nente all’insieme {x, y, z, x1, . . .}) in modo da identificare la specifica regoladi introduzione in cui la foglia è scaricata1 (fig. 5.6).

La corrispondenza è data dalle seguenti regole induttive che associanoa dimostrazioni termini di λ→:

1Questo accorgimento rende la corrispondenza di Curry-Howard un vero e proprioisomorfismo.

Page 44: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

44 CAPITOLO 4. IL λ-CALCOLO TIPIZZATO SEMPLICE

1. Data una dimostrazione costituita dalla singola ipotesi A non scarica-ta, si fa corrispondere una variabile fresca x : A.

2. Data una dimostrazione costituita dalla singola ipotesi A, scaricata edetichettata 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 l’etichetta dell’ultimo 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 → Te v : S i termini associati alle due sottodimostrazioni immediata-mente superiori all’ultimo passo di derivazione. Si fa corrispondere iltermine (u v) : T .

4.4.2 Il connettivo ∧

In fig. 5.7 sono riportate le regole per la congiunzione logica in deduzio-ne naturale. È possibile dimostrare la congiunzione di due formule A e Bdisponendo 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 diCurry-Howard) al connettivo ∧ in λ→ è il costruttore dei tipi coppia, dettoanche prodotto cartesiano, che indicheremo con×. A differenza che nel calco-lo non tipizzato, in λ→ non è possibile esprimere coppie di termini in modogenerale, pertanto introducendo nuovi costrutti sintattici per supportare lecoppie 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 ∧

Page 45: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

4.4. CORRISPONDENZA DI CURRY-HOWARD 45

Vogliamo quindi aumentare la sintassi del calcolo, aggiungendo allasintassi dei tipi il caso dei tipi coppia e alla sintassi dei termini il costruttocoppia 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 fig. 5.8 sono date le regole di tipizzazione per i tipi coppia. Si noti checonsidereremo redex anche l’applicazione delle proiezioni a un costruttocoppia, 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 sempliceesteso con coppie è espressa dalle seguenti regole che, aggiunte a quelleper il solo frammento implicativo, associano a dimostrazioni in deduzionenaturale termini del calcolo.

5. Data una dimostrazione che termina con (∧i), siano a : S e b : T itermini associati alle due sottodimostrazioni immediatamente supe-riori all’ultimo 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 facorrispondere 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 facorrispondere il termine (snd p) : T .

Page 46: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

46 CAPITOLO 4. IL λ-CALCOLO TIPIZZATO SEMPLICE

4.4.3 Il connettivo ∨

L’ultimo connettivo tipico della logica intuizionista che ci interessa è la di-sgiunzione. In fig. 5.9 sono riportate le regole della deduzione naturale re-lative ad essa. Si può ottenere una dimostrazione di A ∨B a partire da unadimostrazione di A, oppure a partire da una dimostrazione di B; la regoladi eliminazione è invece più complessa: combinando una dimostrazione diA∨B e due dimostrazioni di A ⇒ C e B ⇒ C, otteniamo una dimostrazio-ne di C (l’idea è che si può concludere C ragionando per casi: se è vero A,posso concludere C da A ⇒ C; se invece è vero B, posso concludere C daB ⇒ 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 comeunioni disgiunte o varianti). Oggigiorno i tipi somma sono in disuso, ma inpassato ebbero una certa diffusione grazie alla possibilità di memorizzaretipi di dati diversi nella stessa cella di memoria, minimizzando gli sprechi.

Come già avevamo fatto per le coppie, adattiamo il λ-calcolo tipizzatosemplice aggiungendo alla sintassi dei tipi il caso dei tipi somma e allasintassi dei termini le due iniezioni in1 e in2 (che incapsulano un’oggetto diqualunque tipo in un tipo somma) e il costrutto case (che ci consentirà diragionare sul tipo contenuto in una somma):

〈T〉 ::= ... | 〈T〉 + 〈T〉

〈term〉 ::= ... | (in1 〈term〉) | (in2 〈term〉) | (case 〈term〉 of (in1〈var〉) →〈term〉, (in2〈var〉) → 〈term〉)

Per non appesantire ulteriormente la notazione, abbiamo utilizzato unagrammatica imprecisa: da una parte le due iniezioni dovrebbero specificareil tipo somma destinazione (altrimenti il termine (in1 true) potrebbe averetipo Bool + X per ogni X , e viceversa il termine (in2 0) potrebbe avere tipoY +Nat per ogni Y ). Per motivi puramente tipografici assumeremo quindiche le iniezioni restituiscano sempre il tipo somma opportuno. In fig. 5.10mostriamo le regole di tipo per i tipi somma.

Considereremo un redex anche l’applicazione del costrutto case a un’i-

Page 47: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

4.4. CORRISPONDENZA DI CURRY-HOWARD 47

Γ ` M : S

Γ ` (in1 M) : S + T(T-INJ.1)

Γ ` N : T

Γ ` (in2 N) : S + T(T-INJ.2)

Γ ` M : S + TΓ, x : S ` P : U Γ, y : T ` Q : U

Γ ` (case M of (in1 x) → P, (in2 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 (in1 M) of (in1 x) → P, (in2 y) → Q) −→β P [M/x](case (in2 N) of (in1 x) → P, (in2 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 adimostrazioni in deduzione naturale termini del calcolo.

8. Data una dimostrazione che termina con (∨i.1), sia S∨T la conclusio-ne della dimostrazione e sia a : S il termine associato alla sottodimo-strazione immediatamente superiore all’ultimo passo di derivazione.Si fa corrispondere il termine (in1 a) : S + T .

9. Data una dimostrazione che termina con (∨i.2), sia S∨T la conclusio-ne della dimostrazione e sia b : T il termine associato alla sottodimo-strazione immediatamente superiore all’ultimo passo di derivazione.Si fa corrispondere il termine (in2 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 superioriall’ultimo passo di derivazione. Si fa corrispondere il termine

(case u of (∈1 x) → P, (∈2 y) → Q) : U

Page 48: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

48 CAPITOLO 4. IL λ-CALCOLO TIPIZZATO SEMPLICE

4.5 Teoremi di normalizzazione

Abbiamo già avuto modo di precisare come il λ-calcolo tipizzato semplicenon consenta di esprimere numerose funzioni ricorsive, rivelandosi quindiun calcolo non Turing-completo. Ha dunque senso chiedersi se il calcolotipizzato semplice è non terminante come quello non tipizzato. In effetti,come mostreremo in questa sezione, in λ→ è possibile esprimere solamentefunzioni totali; equivalentemente, ogni termine di λ→ possiede una formanormale. Il procedimento di riduzione a forma normale di un termine èdetto normalizzazione; con la normalizzazione sono connesse le seguenti dueproprietà.

Definizione 4.1 (normalizzazione debole). Un termine si dice debolmentenormalizzante se esiste una sequenza di riduzioni che lo trasforma in formanormale. Un calcolo gode della proprietà di normalizzazione debole se tutti itermini in esso sono debolmente normalizzanti.

Definizione 4.2 (normalizzazione forte). Un termine si dice fortemente nor-malizzante se ogni sequenza di riduzioni lo trasforma in forma normale. Uncalcolo gode della proprietà di normalizzazione forte se tutti i termini in essosono 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: ledimostreremo separatamente nei prossimi paragrafi.

4.5.1 Teorema di normalizzazione debole

Teorema 4.3 (normalizzazione debole). Per ogni termine del λ-calcolo tipizzatosemplice esiste una sequenza di riduzioni che lo trasforma in forma normale.

Dimostrazione. Nella dimostrazione di questo teorema useremo la seguentenozione di ordinamento ben fondato.

Definizione 4.4. Un ordinamento parziale stretto si dice ben fondato se nonammette catene discendenti infinite.

Si noti che, affinché un ordinamento sia ben fondato, non occorre chel’insieme dei minoranti di ogni termine sia finito. Un esempio è dato dal-l’ordinamento su N ∪ {>,⊥} definito come nella seguente figura:

Page 49: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

4.5. TEOREMI DI NORMALIZZAZIONE 49

>

wwoooooooooooooo

������

���

�� &&MMMMMMMMMMMMM

0

''OOOOOOOOOOOOOO 1

��???

????

2

��

········ n

xxqqqqqqqqqqqqq ···

Le frecce mettono in relazione > con ogni numero naturale, pertanto esi-stono infiniti minoranti di >; d’altra parte, le catene massimali (ossia tuttele catene che congiungono > con ⊥) hanno lunghezza 2.

Definire un ordinamento ben fondato sui termini ci consentirà di sce-gliere sempre un redex che faccia “decrescere” il termine fino a raggiungerela forma normale. L’ordinamento cui siamo interessati è quello lessicogra-fico tra coppie di naturali, definito come segue:

〈n, m〉l 〈n′,m′〉 sse n < n′ o n = n′ e m < m′

Proposizione 4.5. L’ordinamento lessicografico tra coppie di naturali è ben fon-dato.

Possiamo convincerci (informalmente) di questo fatto visualizzando lecoppie di naturali in una tabella con infinite righe e infinite colonne:

... · · · · · · 〈x, y〉

〈2, 0〉...

〈1, 0〉 〈1, 1〉...

〈0, 0〉 〈0, 1〉 〈0, 2〉 · · ·

Evidentemente l’insieme delle coppie minori di una coppia fissata è co-stituito dalle coppie alla sua sinistra e dalle coppie appartenenti alle ri-ghe sottostanti. Allora una qualsiasi catena avente origine in 〈x, y〉 è unasuccessione di coppie costituita da:

• l’elemento 〈x, y〉

• al più y coppie della forma 〈x, i〉 con i che varia tra y − 1 e 0

• al più k1 coppie della forma 〈x − 1, i〉 con i compreso tra k1 − 1 e 0(dove k1 è un numero finito)

• al più k2 coppie della forma 〈x − 2, i〉 con i compreso tra k1 − 1 e 0(dove k2 è un numero finito)

• ...

Page 50: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

50 CAPITOLO 4. IL λ-CALCOLO TIPIZZATO SEMPLICE

• al più kx coppie della forma 〈0, i〉 con i compreso tra kx − 1 e 0 (dovekx è un numero finito)

La lunghezza della catena sarà dunque al più∑x

i=1 ki + y + 1, che è unnumero finito. Pertanto l’ordinamento lessicografico è ben fondato.

Tornando alla dimostrazione della normalizzazione debole, essa deverisolvere due problemi: in primo luogo la riduzione di (λx : T.M N) puòduplicare i redex presenti nel parametro N ; in secondo luogo è possibileche vengano creati nuovi redex (o tra il termine ridotto M [N/x] e il suo con-testo, o all’interno del termine ridotto, in corrispondenza delle sostituzionidi N dentro M ). Chiaramente, non si può sperare che le riduzioni diminui-scano la taglia del termine iniziale (essa potrebbe anzi crescere, ad esempioin termini che calcolano esponenziali). Dobbiamo definire un altro tipo digrandezza.

Definizione 4.6 (tipo di un redex). Il tipo di un redex (λxT .M N) è il tipodella sua parte funzionale, ossia T → U , dove U è il tipo di M .

Definizione 4.7 (norma). La norma di un tipo T è la grandezza |T | definitainduttivamente 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.

Definizione 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 numerodi redex aventi norma massima.

Notiamo ora che in seguito a una riduzione, se il redex originale era(λxT .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 sottotipi2 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 dinumero e che la loro norma sia massima.

2In senso sintattico: nulla a che vedere con la nozione di sottotipo dei linguaggi orientatiagli oggetti

Page 51: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

4.5. TEOREMI DI NORMALIZZAZIONE 51

Tuttavia, è possibile ridurre sempre il redex più interno, tra quelli dinorma 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)lw(M).

Sia w(M) = 〈m,n〉. Poiché abbiamo scelto il redex più interno tra quellidi norma massima, i redex di norma massima diminuiscono di uno. Percome abbiamo definito 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 finito.

In entrambi i casi w(N) l w(M), pertanto le catene di riduzioni genera-no catene discendenti di pesi secondo l’ordinamento lessicografico, che es-sendo ben fondato ammette solo catene di lunghezza finita. Di conseguen-za anche le catene di riduzioni, secondo la predetta strategia, dovrannocondurre a forma normale con un numero finito 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 ladimostrazione diventa più complessa.

4.5.2 Teorema di normalizzazione forte

Teorema 4.9 (normalizzazione forte). Dato un termine del λ-calcolo tipizzatosemplice, 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 definizione della seguente pro-prietà.

Definizione 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 ∈ RedA)se e solo se è fortemente normalizzante;

• se T = U × V , t è riducibile di tipo U × V (t ∈ RedU×V ) se e solo se(fst t) ∈ RedU e (snd t) ∈ RedV ;

• se T = U → V , t è riducibile di tipo U → V (t ∈ RedU→V ) se e solose per ogni u ∈ RedU , (t u) ∈ RedV .

La riducibilità riassume tutte le proprietà necessarie affinché un termi-ne sia fortemente normalizzante. Il nostro obiettivo è dimostrare che ognitermine riducibile è fortemente normalizzante e in seguito che ogni termineè riducibile.

Page 52: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

52 CAPITOLO 4. IL λ-CALCOLO TIPIZZATO SEMPLICE

Condizioni di riducibilità

Per la dimostrazione, è necessario provare prima le seguenti Condizioni diriducibilità (CR).

Lemma 4.11 (Condizioni di riducibilità). Per i termini del λ-calcolo tipizzatosemplice, 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 λxT .M o 〈t1, t2〉) e t′ èriducibile di tipo T per ogni ridotto t′ di t, allora anche t è riducibile di tipoT .

CR4 Ogni termine neutro in forma normale è riducibile del tipo opportuno.

Dimostrazione. La dimostrazione delle quattro proprietà è per induzionestrutturale 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 definizione di riducibilità).

CR2 La proprietà ci chiede di dimostrare che se t è riducibile, ogni suoridotto lo è. Dalla definizione di riducibilità, segue che t è fortementenormalizzante, quindi ogni suo ridotto lo è. Ma allora, sempre per ladefinizione di riducibilità, i ridotti di t sono anch’essi 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 ∈ RedU×V . Dalla definizione di riducibilità, (fst t) ∈RedU . 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 ∈ RedU×V e t −→ t′. Dalla definizione di riducibilità,(fst t) ∈ RedU e (snd t) ∈ RedV . Per ipotesi induttiva, vale ancheche (fst t′) ∈ RedU e (snd t′) ∈ RedV . Allora dalla definizione diriducibilità segue che t′ ∈ RedU×V .

Page 53: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

4.5. TEOREMI DI NORMALIZZAZIONE 53

CR3 Per ipotesi, t è neutro e quindi non è della forma 〈u, v〉. Sempre peripotesi, t′1, . . . , t

′n ∈ RedU×V , 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 definizione di riducibilità, essi sono tutti riducibili del tipo op-portuno. Ma allora, per ipotesi induttiva, anche (fst t) ∈ RedU e(snd t) ∈ RedV . Dalla definizione di riducibilità, segue quindi cheanche t ∈ RedU×V .

Tipi freccia Dimostriamo che se le proprietà CR valgono per U e V , alloravalgono anche per U → V .

CR1 Per ipotesi, t ∈ RedU→V . Sia x : U una variabile: per ipotesi induttiva, non si poteva prende-re direttamente u ∈RedU come nel CR2?

dalla proprietà CR4 segue che x ∈ RedU . Allora, per definizione di ri-ducibilità, (t x) ∈ RedV 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 ∈ RedU→V e t −→ t′. Sia u ∈ RedU : allora, per definizio-ne di riducibilità, vale (t u) ∈ RedV . Dato che (t u) −→ (t′ u), per ipo-tesi induttiva (CR2) anche (t′ u) ∈ RedV . Pertanto, dalla definizionedi riducibilità, segue che anche t′ ∈ RedU→V .

CR3 Per ipotesi, sia t : U → V un termine neutro (in particolare, diversoda una λ-astrazione) tale che, per tutti i ridotti t′1, . . . , t

′n di t, vale

t′1, . . . , t′n ∈ RedU→V . Dalla definizione di riducibilità, segue che

(t′1 u), . . . , (t′n u) ∈ RedV

Vorremmo ora applicare l’ipotesi induttiva per derivare che anche(t u) ∈ RedV . Purtroppo però i termini di cui sopra non sono tutti iridotti di (t u): dovremmo infatti includere anche tutti i termini dellaforma (t u′) dove u′ è un ridotto di u. Su questi termini non sappiamonulla, perciò si rende necessaria la seguente sottoinduzione.

Sia ν(u) la funzione che restituisce la lunghezza massima delle catenedi riduzione aventi origine in u. Dimostriamo che qualunque sia ν(u),(t u) ∈ RedV . Per induzione su ν(u):

• Se ν(u) = 0, u è in forma normale, pertanto i ridotti di (t u) sonoi soli termini (t′1 u), . . . , (t′n u); quindi per ipotesi induttiva (CR3)anche (t u) ∈ RedV .

Page 54: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

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′) ∈ RedV . Pertanto, tutti i ridotti di (t u) so-no riducibili e quindi per ipotesi induttiva (CR3) anche (t u) ∈RedV

Concludiamo quindi che, essendo (t u) riducibile per qualunque u ∈RedU , anche t ∈ RedU→V .

Osservazione 5. La dimostrazione delle proprietà CR sfrutta il fatto che itermini di un tipo T composto di U e V possono essere sintatticamen-te più semplici di termini dei tipi U e V . L’induzione sul tipo consentequindi di dedurre proprietà forti per tipi semplici e termini complessi, edi 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 ∈ RedU e v ∈ RedV , allora anche 〈u, v〉 ∈ RedU×V .

Dimostrazione. La dimostrazione non è ovvia, come saremmo tentati di di-re, in quanto da un punto di vista sintattico (fst 〈u, v〉) 6≡ u. Dimostriamoquindi la tesi per induzione su ν(u) + ν(v):

• Se ν(u) + ν(v) = 0, allora l’unico ridotto di (fst 〈u, v〉) è u. Dato cheper ipotesi u ∈ RedU , per la CR3 anche (fst 〈u, v〉) ∈ RedU .

• 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)

D’altra parte u ∈ RedU 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〉) ∈ RedU

Dalla CR3 segue quindi che anche (fst 〈u, v〉) ∈ RedU .

In modo simile, si dimostra che (snd 〈u, v〉) ∈ RedV : il lemma seguequindi dalla definizione di reducibilità.

Lemma 4.13. Se per ogni u ∈ RedU vale t[u/x] ∈ RedV allora λxU .t ∈ RedU→V .

Page 55: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

4.5. TEOREMI DI NORMALIZZAZIONE 55

Dimostrazione. Notiamo che le ipotesi del lemma implicano che anche t ∈RedV (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 definito.

Sia u ∈ RedU . Per induzione su ν(t) + ν(u):

• Se ν(t) + ν(u) = 0, l’unico ridotto di (λxU .t u) è t[u/x], che è riducibileper ipotesi. Pertanto, dalla CR3 segue (λxU .t u) ∈ RedV .

• 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 (λxU .t u) sono della forma

t[u/x]oppure (λxU .t′i u) (per i = 1, . . . ,m)oppure (λxU .t u′j) (per i = j, . . . , n)

D’altra parte t[u/x] ∈ RedV per ipotesi, mentre per ipotesi induttiva(essendo ν(t′i) + ν(u) < ν(t) + ν(u) e ν(t) + ν(u′j) < ν(t) + ν(u)) vale

(λxU .t′i u), (λxU .t u′j) ∈ RedV

Dalla CR3 segue quindi che anche (λxU .t u) ∈ RedV .

Il lemma segue quindi dalla definizione di riducibilità.

Ora siamo in grado di dimostrare che ogni termine del λ-calcolo tipiz-zato semplice è riducibile - e come tale fortemente normalizzante. Per farlodimostreremo 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 compresein x1 : T1,...,xn : Tn. Allora per ogni scelta di u1 ∈ RedT1 , ..., un ∈ RedTn , valet[u1,...,un/x1,...,xn].

Dimostrazione. Per induzione strutturale sul termine t. Scriveremo t[u/x] inluogo di t[u1,...,un/x1,...,xn].

• Se t = xi, si ha xi[u/x] = ui ∈ RedT per ipotesi.

• Se t = (fst t′), per ipotesi induttiva si ha t′[u/x] ∈ RedT×U e quindi,per la definizione di riducibilità, anche (fst t′[u/x]) ∈ RedT . Ma dalladefinizione di sostituzione si ha (fst t′)[u/x] = (fst t′[u/x]), pertanto(fst t′)[u/x] = t[u/x] ∈ RedT .

• Se t = (snd t′), il caso è analogo al precedente.

Page 56: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

56 CAPITOLO 4. IL λ-CALCOLO TIPIZZATO SEMPLICE

• Se t = 〈t′, t′′〉, si applica quindi l’ipotesi induttiva in modo simile aicasi precedenti e si ricava 〈t′[u/x], t′′[u/x]〉 ∈ RedT ′×T ′′ dal lemma 4.12(dove T ′ e T ′′ sono i tipi di t′ e t′′). Ma dalla definizione di sostitu-zione si ha 〈t′, t′′〉[u/x] = 〈t′[u/x], t′′[u/x]〉, pertanto 〈t′, t′′〉[u/x] = t[u/x] ∈RedT ′×T ′′ .

• Se t = (t′ t′′), si applica quindi l’ipotesi induttiva in modo simile aicasi precedenti e si ricava (t′[u/x] t′′[u/x]) ∈ RedT dalla definizione diriducibilità. Ma dalla definizione di sostituzione si ha (t′ t′′)[u/x] =(t′[u/x] t′′[u/x]), pertanto (t′ t′′)[u/x] = t[u/x] ∈ RedT .

• Se t = λyU .t′ (e T = U → V ) per ipotesi induttiva t′[u/x] ∈ RedV ; sinoti che y o non compare in t′ oppure è compresa in x1, . . . , xn 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 lemma4.13 si ha λyU .(t′[u/x]) ∈ RedU→V . Ma dalla definizione di sostituzio-ne si ha (λyU .t′)[u/x] = λyU .(t′[u/x]), pertanto (λyU .t′)[u/x] = t[u/x] ∈RedU→V .

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 termineriducibile è fortemente normalizzante.

Page 57: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

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 ilimiti.

Il λ-calcolo tipizzato semplice si differenziava dal λ-calcolo puro perl’introduzione delle annotazioni di tipo nelle λ-astrazioni; il sistema di tipine limitava molto il potere espressivo, poiché la λ-astrazione permettevacome prima di astrarre termini in termini, ma contemporaneamente fissavail tipo del risultato.

Dopo la parentesi del Sistema T, che estendeva il calcolo tipizzato sem-plice con un insieme di tipi induttivi e ricorsori predefiniti, nel precedentecapitolo abbiamo presentato il Sistema F, che aumentava il potere espressi-vo dei calcoli precedenti introducendo un nuovo modello di astrazione, datipi 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 direttamentenel 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 delleList di lunghezza 4).

Il Calcolo delle Costruzioni nasce da questa intuizione, e quindi dallageneralizzazione dell’astrazione per consentire di esprimere:

• funzioni da termini in termini (come nel λ-calcolo tipizzato semplice)

• funzioni da tipi in termini (i termini polimorfi del Sistema F)

• funzioni da tipi in tipi (operatori di tipo)

• funzioni da termini in tipi (tipi dipendenti).

57

Page 58: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

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 è modificata soltanto nel caso dell’astrazione: èinfatti necessario specificare un tipo per ogni variabile legata. La gramma-tica è presentata in fig. 5.2.

〈term〉 ::= 〈var〉 | λ〈var〉:〈T〉.〈term〉 | (〈term〉 〈term〉)

〈var〉 ::= x | y | z | x1 | . . .

Figura 5.2: Termini del λ-calcolo tipizzato semplice

5.2 Sistemi di tipi

Dopo aver definito la sintassi del calcolo tipizzato, ci chiediamo come siapossibile assegnare un tipo ai termini del linguaggio. Allo stato attuale, in-fatti, i tipi sono soltanto un’aggiunta 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 rigetterebbesegnalando un errore di semantica statica).

Ci interessa tuttavia trovare un modo per definire 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 diraggiungere 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 verificabile: deve esistere un algoritmo ditype-checking che verifichi se un programma è ben tipato.

• deve essere trasparente: il programmatore deve essere in grado diprevedere se un programma è ben tipato o meno e perché.

Page 59: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

5.2. SISTEMI DI TIPI 59

• deve essere enforceable: le dichiarazioni di tipo dovrebbero essere ilpiù possibile verificate staticamente, altrimenti dinamicamente. Laconsistenza tra le dichiarazioni di tipo e il codice associato ad essedev’essere verificabile da un programma.

Introduciamo ora il formalismo dei sistemi di tipi.

5.2.1 Giudizi

L’entità atomica trattata dai sistemi di tipi è un particolare tipo di espres-sione formale denominato giudizio. Un giudizio ha la forma:

Γ ` I

che si legge “Γ verifica I”. I è un’asserzione; Γ è detto contesto e de-finisce i tipi delle variabili che compaiono libere in I, nella forma x1 :A1, . . . , xn : An (qui il simbolo ‘:’ rappresenta la relazione “appartiene altipo”). È necessario che tutte le variabili libere nell’asserzione siano dichia-rate in Γ. Per il calcolo tipizzato semplice, siamo interessati a una sola formadi 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 lecomponenti (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-finita sulla base di certe regole di inferenza che costituiscono il sistema ditipi formale.

Una regola (fig. 5.3) è composta da un certo numero di giudizi (premesse)posti sopra una linea orizzontale e da un unico giudizio (conclusione) postosotto la linea: se sono valide le premesse, è valida la conclusione.

Γ1 ` I1 . . .Γn ` In

Γ ` 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.

Page 60: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

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 diun’altra regola. Per verificare la validità di un giudizio occorre dare un al-bero di derivazione corretto, le cui foglie siano assiomi e la cui radice sia ilgiudizio da verificare.

Le regole di tipo (fig. 5.4) per il calcolo tipizzato semplice sono tre, unaper 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. Un’applicazioneha tipo T2 se la parte funzionale ha tipo T1 → T2 e l’argomento ha tipo T1.Un’astrazione λx : T1.M ha tipo T1 → T2 se, supponendo che x abbia tipoT1, M ha tipo T2.

Γ ` x : T se x : T ∈ Γ (T-AX)

Γ ` M : T1 → T2 Γ ` N : T1

Γ ` (M N) : T2(T-APP)

Γ, x : T1 ` M : T2

Γ ` λx : T1.M : T1 → T2(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 Γ seesiste un tipo A per cui il giudizio Γ ` M : A è valido. Il problema di con-trollare l’esistenza di un tipo ben formato per i termini di un programma èdetto typechecking. Il problema di identificare, 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, ovviamenteesiste anche l’algoritmo di typechecking, ma non è vero il contrario): per al-cuni sistemi, questi problemi sono indecidibili (non è possibile determinareper 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 iltypechecking, e all’occorrenza la type inference, devono essere decidibili.

Una proprietà importante che i sistemi di tipi devono rispettare è con-nessa alla semantica operazionale dei programmi tipizzati. Affinché il siste-ma di tipi sia corretto è necessario garantire che se Γ ` M : A è un giudiziovalido e il termine M riduce a un termine M ′, allora Γ ` M ′ : A. Questaproprietà è detta proprietà di “riduzione del soggetto”.

Page 61: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

5.3. PROGRAMMI IN λ→ 61

5.3 Programmi in λ→

Per mostrare il potere espressivo del λ-calcolo tipizzato semplice, definia-mo la codifica di Church per gli interi, in modo del tutto analogo al λ-calcolo puro. In primo luogo lo zero:

0 , λx : T1.λy : T2.y : T1 → T2 → T2

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 T1 e T2, perché idealmentevorremmo che lo zero fosse un valore polimorfo in cui T1 e T2 fossero istan-ziabili con qualunque tipo. Vediamo cosa accade cercando di tipizzare ladefinizione dell’1.

1 , λx : T1 → T2.λy : T1.(x y) : (T1 → T2) → T1 → T2

Per l’1 otteniamo un termine di tipo diverso. Anche in questo caso T1

e T2 stanno ad indicare due tipi qualunque. Vediamo infine il caso delnumero 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 tipoqualunque. Per i numeri interi maggiori di 2 si può invece verificare che iltipo risulta identico a quello del 2.

Questa situazione anomala si risolve verificando che è possibile specia-lizzare i tipi dei numeri 0 e 1, in modo che unifichino con il tipo di 2. In par-ticolare in 0 occorre sostituire T1 con T → T e T2 con T ; in 1 si sostituisconosia T1 sia T2 con T .

Per concludere, il tipo dei numeri interi è definito in modo parametricorispetto a un qualunque tipo T , come segue:

NatT , (T → T ) → T → T

e anche gli interi di Church e la funzione successore sono definiti in modoparametrico rispetto a T :

0T , λx : T → T.λy : T.y : NatT1T , λx : T → T.λy : T.(x y) : NatT2T , λx : T → T.λy : T.(x (x y)) : NatT...succT , λn : NatT .λx : T → T.λy : T.(x (n x y)) : NatT → NatT

Page 62: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

62 CAPITOLO 5. IL CALCOLO DELLE COSTRUZIONI

5.3.1 Potere espressivo

La possibilità di definire booleani e interi non è sufficiente a garantire un’e-levata espressività al nostro sistema di calcolo: sarebbe opportuno mostra-re almeno una codifica per le funzioni primitive ricorsive. Tuttavia, unatale codifica non esiste: per la precisione, il λ-calcolo tipizzato semplicenon consente di tipizzare nemmeno funzioni “semplici” come il predeces-sore. In sostanza, le uniche funzioni esprimibili sono somma, prodotto ecomposizioni di queste.

È possibile estendere il potere espressivo di questo calcolo introducen-do operatori ad hoc per la ricorsione, o equivalentemente un operatore pun-to fisso

FIXT : (T → T ) → T(FIXT M) −→β (M (FIXT M)) se M : T

Neanche in questo modo, tuttavia, il calcolo diventa Turing-completo.verificare...

5.4 Corrispondenza di Curry-Howard

In questa sezione presenteremo un’interessante analogia tra calcoli tipizzatie 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 delleregole (fig. 5.5) di introduzione dell’implicazione (⇒ i) e di eliminazionedell’implicazione (modus ponens o ⇒ e).

[A]...B

A ⇒ B(⇒ i)

A ⇒ B A

B(⇒ e)

Figura 5.5: Regole di inferenza per il connettivo ⇒

Page 63: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

5.4. CORRISPONDENZA DI CURRY-HOWARD 63

Secondo la regola di introduzione, possiamo derivare una dimostrazionedi A ⇒ B (A implica B) se abbiamo un procedimento costruttivo (un algo-ritmo) che trasforma dimostrazioni di A in dimostrazioni di B; la regola dieliminazione ci consente invece di comporre una dimostrazione di A ⇒ Bcon 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 fine di rendere la corrispondenza più eviden-te, supporremo che alle foglie scaricate di un albero di prova e alle regole diintroduzione dell’implicazione sia sempre associata un’etichetta (apparte-nente all’insieme {x, y, z, x1, . . .}) in modo da identificare la specifica regoladi introduzione in cui la foglia è scaricata1 (fig. 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 associanoa dimostrazioni termini di λ→:

1. Data una dimostrazione costituita dalla singola ipotesi A non scarica-ta, si fa corrispondere una variabile fresca x : A.

2. Data una dimostrazione costituita dalla singola ipotesi A, scaricata edetichettata 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 l’etichetta dell’ultimo 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 → Te v : S i termini associati alle due sottodimostrazioni immediata-mente superiori all’ultimo passo di derivazione. Si fa corrispondere iltermine (u v) : T .

5.4.2 Il connettivo ∧

In fig. 5.7 sono riportate le regole per la congiunzione logica in deduzio-ne naturale. È possibile dimostrare la congiunzione di due formule A e B

1Questo accorgimento rende la corrispondenza di Curry-Howard un vero e proprioisomorfismo.

Page 64: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

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 diCurry-Howard) al connettivo ∧ in λ→ è il costruttore dei tipi coppia, dettoanche prodotto cartesiano, che indicheremo con×. A differenza che nel calco-lo non tipizzato, in λ→ non è possibile esprimere coppie di termini in modogenerale, pertanto introducendo nuovi costrutti sintattici per supportare lecoppie aumenta il potere espressivo del calcolo.

Vogliamo quindi aumentare la sintassi del calcolo, aggiungendo allasintassi dei tipi il caso dei tipi coppia e alla sintassi dei termini il costruttocoppia 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 fig. 5.8 sono date le regole di tipizzazione per i tipi coppia. Si noti checonsidereremo redex anche l’applicazione delle proiezioni a un costruttocoppia, pertanto vanno aggiunte le seguenti nuove forme di β-riduzione:

(fst 〈M,N〉) −→β M

(snd 〈M,N〉) −→β N

Page 65: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

5.4. CORRISPONDENZA DI CURRY-HOWARD 65

La corrispondenza di Curry-Howard per il λ-calcolo tipizzato sempliceesteso con coppie è espressa dalle seguenti regole che, aggiunte a quelleper il solo frammento implicativo, associano a dimostrazioni in deduzionenaturale termini del calcolo.

5. Data una dimostrazione che termina con (∧i), siano a : S e b : T itermini associati alle due sottodimostrazioni immediatamente supe-riori all’ultimo 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 facorrispondere 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 facorrispondere il termine (snd p) : T .

5.4.3 Il connettivo ∨

L’ultimo connettivo tipico della logica intuizionista che ci interessa è la di-sgiunzione. In fig. 5.9 sono riportate le regole della deduzione naturale re-lative ad essa. Si può ottenere una dimostrazione di A ∨B a partire da unadimostrazione di A, oppure a partire da una dimostrazione di B; la regoladi eliminazione è invece più complessa: combinando una dimostrazione diA∨B e due dimostrazioni di A ⇒ C e B ⇒ C, otteniamo una dimostrazio-ne di C (l’idea è che si può concludere C ragionando per casi: se è vero A,posso concludere C da A ⇒ C; se invece è vero B, posso concludere C daB ⇒ 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 comeunioni disgiunte o varianti). Oggigiorno i tipi somma sono in disuso, ma inpassato ebbero una certa diffusione grazie alla possibilità di memorizzaretipi di dati diversi nella stessa cella di memoria, minimizzando gli sprechi.

Come già avevamo fatto per le coppie, adattiamo il λ-calcolo tipizzatosemplice aggiungendo alla sintassi dei tipi il caso dei tipi somma e allasintassi dei termini le due iniezioni in1 e in2 (che incapsulano un’oggetto

Page 66: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

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〉 ::= ... | (in1 〈term〉) | (in2 〈term〉) | (case 〈term〉 of in1(〈var〉) →〈term〉, in2(〈var〉) → 〈term〉)

Per non appesantire ulteriormente la notazione, abbiamo utilizzato unagrammatica imprecisa: da una parte le due iniezioni dovrebbero specificareil tipo somma destinazione (altrimenti il termine (in1 true) potrebbe averetipo Bool +X per ogni X , e viceversa il termine (in2 0) potrebbe avere tipoY +Nat per ogni Y ). Per motivi puramente tipografici assumeremo quindiche le iniezioni restituiscano sempre il tipo somma opportuno. In fig. 5.10mostriamo le regole di tipo per i tipi somma.

Γ ` M : S

Γ ` (in1 M) : S + T(T-INJ.1)

Γ ` N : T

Γ ` (in2 N) : S + T(T-INJ.2)

Γ ` M : S + TΓ, x : S ` P : U Γ, y : T ` Q : U

Γ ` (case M of (in1 x) → P, (in2 y) → Q) : U(T-CASE)

Figura 5.10: Regole di tipo per i tipi somma

Considereremo un redex anche l’applicazione del costrutto case a un’i-niezione, pertanto vanno aggiunte le seguenti nuove forme di β-riduzione:

(case (in1 M) of x : S → P, y : T → Q) −→β P [M/x](case (in2 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 adimostrazioni in deduzione naturale termini del calcolo.

8. Data una dimostrazione che termina con (∨i.1), sia S∨T la conclusio-ne della dimostrazione e sia a : S il termine associato alla sottodimo-strazione immediatamente superiore all’ultimo passo di derivazione.Si fa corrispondere il termine (in1 a) : S + T .

Page 67: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

5.5. TEOREMI DI NORMALIZZAZIONE 67

9. Data una dimostrazione che termina con (∨i.2), sia S∨T la conclusio-ne della dimostrazione e sia b : T il termine associato alla sottodimo-strazione immediatamente superiore all’ultimo passo di derivazione.Si fa corrispondere il termine (in2 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 superioriall’ultimo passo di derivazione. Si fa corrispondere il termine

(case u of (in1 x) → P, (in2 y) → Q) : U

5.5 Teoremi di normalizzazione

Abbiamo già avuto modo di precisare come il λ-calcolo tipizzato semplicenon consenta di esprimere numerose funzioni ricorsive, rivelandosi quindiun calcolo non Turing-completo. Ha dunque senso chiedersi se il calcolotipizzato semplice è non terminante come quello non tipizzato. In effetti,come mostreremo in questa sezione, in λ→ è possibile esprimere solamentefunzioni totali; equivalentemente, ogni termine di λ→ possiede una formanormale. Il procedimento di riduzione a forma normale di un termine èdetto normalizzazione; con la normalizzazione sono connesse le seguenti dueproprietà.

Definizione 5.1 (normalizzazione debole). Un termine si dice debolmentenormalizzante se esiste una sequenza di riduzioni che lo trasforma in formanormale. Un calcolo gode della proprietà di normalizzazione debole se tutti itermini in esso sono debolmente normalizzanti.

Definizione 5.2 (normalizzazione forte). Un termine si dice fortemente nor-malizzante se ogni sequenza di riduzioni lo trasforma in forma normale. Uncalcolo gode della proprietà di normalizzazione forte se tutti i termini in essosono 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: ledimostreremo separatamente nei prossimi paragrafi.

Page 68: Appunti di Lambda Calcolo dal corso di Fondamenti Logici …ricciott.web.cs.unibo.it/book.pdfAppunti di Lambda Calcolo dal corso di Fondamenti Logici dell’Informatica tenuto dal

68 CAPITOLO 5. IL CALCOLO DELLE COSTRUZIONI

5.5.1 Teorema di normalizzazione debole

Teorema 5.3 (normalizzazione debole). Per ogni termine del λ-calcolo tipizzatosemplice esiste una sequenza di riduzioni che lo trasforma in forma normale.

Nella dimostrazione di questo teorema useremo la seguente nozione diordinamento ben fondato.

Definizione 5.4. Un ordinamento parziale stretto si dice ben fondato se nonesistono catene discendenti infinite.

Definire un ordinamento ben fondato sui termini ci consentirà di sce-gliere sempre un redex che faccia “decrescere” il termine fino a raggiungerela forma normale.

L’ordinamento cui siamo interessati è quello lessicografico tra coppie dinaturali:

〈n, m〉l 〈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...