Che cos’è l’isomorfismo di Curry-Howard
Abstract
La logica, o quantomeno la teoria della dimostrazione, è incentrata sulla
formulazione di sistemi formali di prove. La computer science, invece, è
focalizzata sulla comprensione della nozione di programma, la quale viene
indagata esplicitamente attraverso sistemi di tipi, ovvero sistemi di “etichette”
che permettono di isolare insiemi di programmi dotati di buone proprietà
computazionali. Queste due scienze si incontrarono per la prima volta quando
nel 1934 il logico e matematico americano Haskell Brooks Curry notò l’esistenza di una stretta corrispondenza tra il frammento implicativo della logica
intuizionistica (il cui unico connettivo è appunto l’implicazione) e la teoria dei
tipi semplici. Tuttavia, queste osservazioni vennero da lui stesso considerate
come non più di una mera curiosità. Chi portò avanti l’intuizione di Curry fu
un logico statunitense di nome Willam Alvin Howard, il quale nel 1969, in un
manoscritto circolato privatamente e pubblicato solo nel 1980, approfondı̀ le
corrispondenze tra i due sistemi .
Questi prime e informali ricerche dei due logici americani divennero ben
presto le pietre angolari del cosiddetto paradigma degli isomorfismi di CurryHoward, gettando cosı̀ le basi di una comprensione logica dei linguaggi di
programmazione tanto quanto di una fondazione computazionale dei sistemi
logici: in questo framework, le formule vengono viste come tipi, le prove come
programmi, e la normalizzazione delle prove come computazione.
A partire dagli anni settanta, il matematico canadese Joachim Lambek
mostrò che queste corrispondenze potevano essere ulteriormente estese fino ad
abbracciare particolari strutture studiate in teoria delle categorie: le categorie
cartesianamente chiuse. Il lavoro di Lambek delineò dunque un quadro ancora
più elaborato di quello tracciato da Curry e da Howard, oggi noto come
paradigma degli isomorfismi di Curry-Howard-Lambek, il quale costituı̀ il
background ideale per indagare il concetto di dimostrazione e di computazione
sotto un profilo puramente matematico.
In questa breve presentazione mostreremo le basi ormai consolidate di tali
paradigmi. Dopo aver fornito qualche nozione di base sulla logica intuizionistica, concentreremo la nostra attenzione sul lambda calcolo, un modello
di computazione alla base di ogni linguaggio di programmazione funzionale.
Mostreremo come l’enorme espressività del lambda calcolo comporti inevitabilmente l’esistenza di programmi la cui esecuzione non termina. Per questo
motivo, introdurremo la nozione di tipo, formulando il sistema di lambda
calcolo tipato semplice. E’ a questo punto che faremo entrare in gioco gli
1
isomorfismi di Curry-Howard tra sistemi tipati e sistemi logici, cercando di
esporre nel dettaglio le varie correlazioni.
Inoltre, dopo aver introdotto qualche nozione di teoria delle categorie
necessaria per poter definire la struttura delle categorie cartesianamente
chiuse, parleremo dell’isomorfismo di Curry-Howard-Lambek, il quale aprirà
la strada ad un’indagine semantica del concetto di programma.
Infine, forniremo una fugace panoramica sugli sviluppi e sulle applicazioni
degli isomorfismi di Curry-Howard-Lambek. In particolare, parleremo di
contenuto computazionale di un sistema logico, delle semantiche denotazionali
e delle recenti conquiste della logica lineare.
La presentazione può essere cosı̀ sintetizzata:
1. Partiremo da un breve cappello introduttivo di tipo storico-concettuale
sul paradigma;
2. Richiameremo alla memoria il frammento implicativo della logica intuizionistica, soffermandoci sulla proprietà di normalizzazione;
3. Definiremo la sintassi del lambda calcolo e la dinamica della beta
riduzione;
4. Adotteremo un sistema di tipi, il lambda calcolo tipato semplice, il
quale ci consentirà di isolare un insieme di programmi “sicuri”;
5. Enunceremo l’isomorfismo di Curry-Howard tra il sistema di tipi e il
sistema logico precedentemente formulato;
6. Passeremo a fornire i lineamenti della teoria delle categorie per definire
le categorie cartesianamente chiuse;
7. Enunceremo gli isomorfismi di Curry-Howard-Lambek, notando come
il nuovo isomorfismo definisca una relazione non più sintattica, ma
semantica;
8. Riformuleremo l’isomorfismo in termini di semantica categoriale per i
programmi;
9. Forniremo una panoramica sugli sviluppi e sulle applicazioni di quanto
abbiamo trattato.
2