verso una teoria strutturale della dimostrazione Simona Ronchi

Logica Lineare e Ludica
verso una teoria strutturale della dimostrazione
Simona Ronchi Della Rocca
Università di Torino
Dipartimento di Informatica
Riassunto Questo articolo presenta, con un approccio divulgativo, la Logica Lineare
e la Ludica, che sono certamente le maggiori novità sviluppate nell’area della Logica
negli ultimi 50 anni. Vengono in particolare messi in evidenza due aspetti estremamente
innovativi di tali logiche: l’interpretazione computazionale della dimostrazione, che ha
avuto interessanti ricadute nell’Informatica, e un diverso approccio alla semantica delle
dimostrazioni, che ha dato nuovo impulso alla “proof-theory”.
La Logica Lineare è stata proposta da Girard [5] nel 1987, e può essere considerata come la maggiore novità nel campo della logica degli ultimi 50 anni. La Logica Lineare
(LL) nasce da due esigenze fra loro apparentemente disgiunte: affinare lo sguardo sulla
Logica Classica, cambiando prospettiva semantica, e indagare sulle sue proprietà computazionali. La semantica usuale con cui si interpreta la Logica Classica è basata sulla
nozione di verità. La verità è statica e immutabile, e in conseguenza di ciò ogni frase
della logica ha uno e un solo valore di verità. Conseguenza naturale di questa visione
semantica è il principio del terzo escluso: se A rappresenta una qualsiasi proposizione
logica, e ∼ A denota la sua negazione, la proposizione A∨ ∼ A sempre vera. Infatti il
simbolo ∨ rappresenta la disgiunzione, e la frase A∨ ∼ A è vera se e solo se o è vera A o
è vera ∼ A, cioè sempre. Alla Logica Classica è associato un Sistema Formale, cioè un
insieme di regole, che permettono di costruire proposizioni vere a partire da proposizioni
vere. Più specificatamente, un sistema formale permette di dimostrare assunti del tipo:
P1 , ..., Pn ⊢ C1 , ..., Cm
(n, m ≥ 0)
il cui significato è: assumendo che siano vere le premesse P1 , ..., Pn , si può dimostrare
la verità di almeno una delle conclusioni C1 , ..., Cm . Nella Logica Classica l’accento,
come si è detto, viene posto sulla nozione di verità, quindi le regole del sistema formale
associato sono viste come meri strumenti per arrivare a conclusioni vere. Girard rovescia
questa visione, spostando l’accento dalla verità delle proposizioni al procedimento di
dimostrazione di questa verità. Per capire meglio questo spostamento, vediamo alcuni
esempi di regole della Logica Classica. Per questa presentazione molto informale, mi
restringerò a casi in cui le regole hanno un’unica conclusione. La regola più semplice è
l’assioma:
A⊢A
che dice semplicemente che, se assumiamo che A sia vera, possiamo dedurre la verità di
A. Vi sono poi regole che introducono ed eliminano i vari connettivi logici. Ad esempio
la regola di introduzione del connettivo ∧, che denota la congiunzione, è la seguente:
Γ ⊢ A Γ ⊢ B (∧I)
Γ⊢A∧B
che dice che, se da un dato insieme di premesse Γ abbiamo dedotto sia la verità di
A che quella di B , possiamo, dallo stesso insieme, dedurre la verità di A ∧ B . Una
classe speciale di regole è la classe delle regole strutturali, che non dimostrano la verità
di nuove proposizioni ma parlano della struttura della dimostrazione “di per sè”. Un
esempio è la regola dell’ indebolimento:
Γ ⊢ B (weak)
Γ, A ⊢ B
che ci dice che si può aggiungere una premessa preservando la verità della conclusione.
La Logica Lineare sostituisce alla nozione di verità la nozione di uso. Una premessa è
una risorsa che può essere usata. Allora l’asserzione:
P1 , ..., Pn ⊢ C1 , ..., Cm
(n, m ≥ 0)
si può interpretare come: usando le risorse P1 , ..., Pn si possono produrre gli oggetti
C1 , ..., Cm . Risorse e oggetti possono poi essere diversamente instanziati per adattarsi a
contesti diversi: cosı̀ le une possono essere viste come denaro, tempo, ingredienti mentre i secondi possono rappresentare rispettivamente merci, attività, ricette. Se si vuole, è
una visione capitalistica della Logica! Le risorse sono poi divise in due classi: le risorse
consumabili, che quindi possono essere usate una sola volta, e quelle sempre disponibili, e quindi di uso illimitato. Per dividere queste due classi si introduce una modalità
!, che premessa ad una proposizione A interpretata come risorsa, denota il fatto che tale risorsa è di uso illimitato. Questo semplice spostamento di visuale ha conseguenze
molto forti. Innanzitutto aumenta il numero dei connettivi della logica, e quindi la sua
espressività. Ad esempio la congiunzione classica ∧ si sdoppia nei due connettivi ⊗ e
&. A ⊗ B significa che le risorse A e B sono entrambi disponibili, e saranno usate tutte
e due insieme (es. col tempo e con la paglia maturano le nespole). A&B denota che le
risorse A e B sono entrambi disponibili, ma io ne potrò usare una sola, a mia scelta (es.
col menu a prezzo fisso posso avere frutta o dessert). Notiamo qui che la congiunzione
& corrsponde ad un o nel linguaggio quotidiano, ma questo è solo una spia del fatto che
non sempre le interpretazioni informali possono avere il rigore di quelle formali! Anche
la disgiunzione si sdoppia nei due connettivi ⊕ e ≀. E qui l’interpretazione distingue in
modo molto raffinato due possibili situazioni. La disgiunzione classica (A ∨ B è vera
se o è vera A o è vera B ) già contiene in sè l’idea di una possibile scelta tra le due proposizioni coinvolte, ma la Logica Lineare riesce a distinguere tra il caso in cui la scelta
è possibile, e quello in cui una scelta non è possibile. A ⊕ B indica che una sola delle
risorse A o B è disponibile, io non so quale, ma qualcuno sceglierà per me (es. il menu
prevede frutta di stagione: pere o arance). A ≀ B indica che una sola delle risorse A o B è
disponibile, e non si sa quale. (es. domani pioverà o non pioverà). E’ naturale chiedersi
se il principio del terzo escluso valga nella Logica Lineare, e in caso positivo se valga
per entrambe le disgiunzioni o no. La risposta è che vale per ≀ ma non per ⊕, cioè si può
dimostrare A ≀ A⊥ ma non si può dimostrare A ⊕ A⊥ (in LL A⊥ denota la negazione di
A). Notiamo che abbiamo parlato qui di dimostrabilità, non di verità, come nella Logica
Classica. Come esempio di uso della modalità, consideriamo l’asserzione della Logica
Classica: A ⊢ A ∧ A, che ci dice che, se A è vera, allora possiamo ribadire A due volte,
e ottenere ancora una proposizione vera. Se “oggi piove” è un’affermazione vera, anche “oggi piove e oggi piove” è vera (al limite può essere considerata ridondante!). Ma
adesso sostituiamo il classico ∧ con il connettivo ⊗: dalla semantica informale che ho
dato prima a questo connettivo, è chiaro che A ⊢ A ⊗ A non è dimostrabile, in quanto
per ottenere due copie dell’oggetto A abbiamo bisogno di due copie della risorsa A. Per
ottenere quindi la conseguenza A ⊗ A ho quindi bisogno adesso o di avere a disposizione
due copie di A, o A deve essere una risorsa sempre disponibile. Quindi posso dimostrare
sia A, A ⊢ A ⊗ A, sia !A ⊢ A ⊗ A.
Una regola strutturale particolare è la regola del taglio, che esiste sia nella Logica
Classica che nella Logica Lineare:
Γ ⊢ A, ∆ Γ, A ⊢ ∆
(cut)
Γ⊢∆
L’importanza della regola del taglio è di essere inutile: infatti sia nella Logica Classica che nella Logica Lineare vale la proprietà che si può decidere di non usarla, nel
senso che ogni dimostrazione che usa la regola del taglio può essere trasformata in una
dimostrazione che prova la stessa conclusione, senza però usare il taglio. L’interpretazione classica di tale proprietà può essere la seguente. Se per dimostrare ∆ mi serve una
AX
A⊥
•
AX
A
B
B⊥
⊗
A⊗B
≀
(A ⊗ B) ≀ B ⊥
•
Figura 1: La rete di prova corrispondente alla dimostrazione di A ⊢ (A ⊗ B) ≀ B ⊥ (o di (A ⊗ B) ≀ B ⊥ ⊢ A ). I
due nodi senza nome denotano uno la premessa e l’altro la conclusione della dimostrazione, che sono concetti qui
simmetrici e interscambiabili.
dimostrazione di A, magari per usarla più di una volta, posso dimostrare A con una dimostrazione a parte, e poi usarlo tutte le volte che mi serve, come un Lemma ausiliario,
e questa è una dimostrazione con il taglio. Ma posso anche non usare questo metodo, e
semplicemente ricopiare la dimostrazione di A dentro la dimostrazione di ∆, ogni volta
che è necessario: ottengo una dimostrazione certamente meno efficiente, ma ugualmente
corretta, e questa è una dimostrazione senza taglio. Ma nella Logica Lineare la proprietà
dell’eliminazione del taglio è più forte, e assume un preciso significato computazionale. Assumiamo di avere una dimostrazione che usa il taglio, e di voler eliminare tale
regola: esiste un modo effettivo di farlo. Però la dimostrazione può usare il taglio più di
una volta, e quindi ci si pone la scelta di quale regola eliminare per prima: nella Logica
Classica diverse scelte possono portare a ottenere dimostrazioni diverse, se pure con la
stessa conclusione. Invece una proprietà importante della Logica Lineare è che la dimostrazione ottenuta è unica, indipendentemente dalle scelte fatte. Questo permette di dare
una interpretazione computazionale alla Logica Lineare: una dimostrazione può essere
vista come un programma, la regola del taglio come la regola di calcolo, e la dimostrazione normalizzata (cioè senza taglio) come il risultato della computazione. Il fatto che
l’eliminazione del taglio sia una procedura deterministica corrisponde al ben noto principio che il risultato di una computazione non deve dipendere dall’ordine in cui vengono
effettuate le operazioni (pensiamo al calcolo delle espressioni aritmetiche!). L’analogia
dimostrazione = programma è ulteriormente sviluppato con l’introduzione delle reti di
prova [8]. Una rete di prova è una rappresentazione grafica di una dimostrazione della
Logica Lineare, con una struttura a grafo, cioè un insieme di punti (nodi ) su di un piano
che possono essere connessi da archi, cioè segmenti di retta. I punti rappresentano i connettivi, gli archi rappresentano le formule, e il modo in cui essi sono connessi riproduce
la struttura della dimostrazione (si veda un esempio di rete di prova nella Figura ) .
La rappresentazione delle dimostrazioni mediante le reti di prova non è solo un mero
esercizio di riscrittura, ma permette di eseguire in modo molto efficiente l’eliminazione
del taglio, e quindi il procedimento di calcolo, se usiamo il paradigma prima esposto che
associa la programmazione alla dimostrazione logica [9]. Infatti tale rappresentazione
ha permesso lo sviluppo di un interprete ottimale per un linguaggio paradigmatico, il
λ-calcolo [1], e ha inoltre suggerito la definizione di logiche particolari, derivate dalla
Logica Lineare, che hanno la proprietà che la procedura di eliminazione del taglio per
esse si può effettuare in un tempo che dipende in modo polinomiale dalla dimensione
della rete da normalizzare [6] [2], mentre nella la Logica Lineare, come nella Logica Classica, tale dipendenza è esponenziale. In questo modo queste logiche cosidette
leggere possono essere la base per linguaggi di programmazione in cui si possono scrivere solo programmi la cui esecuzione avviene in tempo accettabile. Per comprendere
l’importanza di questo risultato, pensiamo che una funzione che cresce in tempo esponenziale, come ad esempio 2n , assume rapidamente valori grandissimmi, al crescere del
parametro n: se per n = 3 vale 8, per n = 10 vale 1024 e per n = 100 il suo valore è un
numero addirittura maggiore del numero di microsecondi trascorsi dal big-bang! Quindi
un programma il cui tempo di esecuzione cresca in modo esponenziale in dipendenza dei dati in input può essere considerato come virtualmente non eseguibile, in quanto
la sua esecuzione può richiedere più tempo della vita del programmatore che l’ha scritto!
Ovviamente non tutti i grafi i cui nodi hanno nomi di connettivi e i cui archi hanno nomi
di formule della Logica Lineare rappresentano dimostrazioni in tale logica; anzi, se disegnamo a caso un grafo, e poi assegniamo a caso dei nomi ai suoi componenti, sarà ben
raro che questo denoti una dimostrazione. Ma esiste un risultato sorprendente: un grafo
di questo tipo rappresenta una dimostrazione se e solo se soddisfa ad una proprietà meramente geometrica, che è indipendente dai nomi delle formule che decorano i suoi archi.
Questo porta a pensare che l’essenza di una dimostrazione si basi sulla sua struttura,
piuttosto che sulle formule che vi compaiono. Come dire che, se ci si pone il problema
(un po’ peregrino, se vogliamo): sono nate prima le formule o le dimostrazioni?, forse
la risposta: le dimostrazioni è la più corretta!
Continuiamo a divertirci con domande fuori dall’ordinario. Un metodo di verifica delle dimostrazioni che può essere usato fruttuosamente è il metodo interattivo: si simula
una discussione tra S (sostenitore della correttezza della dimostrazione in questione) e
O (che mette in discussione tale correttezza). O pone domande ad S , che indagano sulla
struttura della dimostrazione da analizzare. Si assume che S dica sempre la verità, e se
S sa rispondere esaurientemente a tutte le domande di O , in modo da convincerlo, la
dimostrazione è corretta. Se la dimostrazione invece è scorretta, S sarà costretto a dichiarare qualcosa di contradditorio, e verrà quindi smascherato da O . Ovviamente S e O
sono entità immaginarie, che quindi non fanno parte della logica stessa. A questo punto
possiamo porci un problema, apparentemente un pò strano: si possono internalizzare
nella logica stessa S e O ? cioè una logica può dimostrare al suo interno la sua stessa
correttezza? S può essere la dimostrazione stessa, che si assume il compito di difendersi
dai dubbi di O , ma chi può impersonare O ? la correttezza formale ci porterebbe a dire
che anche O deve essere una dimostrazione, che dimostra la negazione di quanto dimostra S , ma questo non è possibile, perchè si possono dimostrare solo proposizioni vere,
e quindi se esiste una dimostrazione di A non può esistere una dimostrazione di A⊥ , e
viceversa.
La Ludica viene proposta da Girard [7] come una nuova logica, che vede al suo centro la
nozione di dimostrazione, e in cui i problemi apparentemente assurdi che ci siamo posti
trovano una loro soluzione, per quanto anti-intuitiva. Il sottotitolo dell’articolo in cui
Girard presenta la Ludica è indicativo: dalle regole della logica alla logica delle regole,
in quanto pone subito l’accento sul fatto che il centro dell’interesse della Ludica non
sono più le formule, ma le regole per manipolare le dimostrazioni. Infatti nella Ludica le
formule non ci sono più! Gli oggetti di base sono i “loci”, che rappresentano posti in cui
le formule potrebbero trovare posto: ma poichè le formule in questo contesto non sono
interessanti, i loci vengono lasciati vuoti, denotati semplicemente da numeri. La nascita
“tecnica” della Ludica si può ricondurre all’osservazione che i connettivi della Logica
Lineare si possono dividere in due classi. I negativi, o reversibili, sono quei connettivi
la cui regola di introduzione non aggiunge informazione rispetto all’informazione delle
premesse, ad esempio, il connettivo &:
Γ ⊢ A Γ ⊢ B (&I)
Γ ⊢ A&B
e quelli positivi o irreversibili, per cui succede il contrario, ad esempio ⊕:
Γ ⊢ A (⊕I )
d
Γ⊢A⊕B
Γ ⊢ B (⊕I )
s
Γ ⊢ A⊕B
.
Una regola della Ludica corrisponde a una sequenza di regole della Logica Lineare,
tutte introducenti connettivi della stessa classe. Quindi avremo una regola negativa,
un’istanza della quale è la seguente, che costruisce a partire dal loco 3 i due loci 33 e 37:
⊢ 33, 37
(−{3, 7})
3⊢
e una regola positiva, che scompone i loci 33 e 37 in sotto-loci:
332 ⊢
331, 337 ⊢ 37
(+{{2}{1, 7}})
⊢ 33, 37
.
Inoltre, vi è un solo assioma, chiamato “demone”, che permette di generare un qualunque
loco, ad esempio:
⊢ 3054
Ψ
.
Notate che le due regole sono etichettate da insiemi di numeri positivi, che possono essere virtualmente di cardinalità infinita, quindi possiamo scrivere istanze delle regole con
un numero infinito di loci, o addirittura con un numero infinito di premesse. Il demone
poi, ci permette di derivare qualunque cosa, e grazie a questo possiamo internalizzare
nella Ludica la verifica interattiva delle dimostrazioni, di cui abbiamo parlato in precedenza. Infatti due dimostrazioni della Ludica (ma qui le dimostrazioni si chiamano
disegni) possono interagire l’una con l’altra attraverso una procedura simile all’eliminazione del taglio. L’interazione può avere tre possibili risultati: o termina con la vittoria di
uno dei due disegni, quando l’altro si riduce a coincidere con una instanza dell’assioma,
o non termina mai, o si blocca senza arrivare ad un risultato preciso. Come succede con
un programma per il calcolatore, che non è detto termini con successo: quindi la Ludica spinge ulteriormente l’analogia della Logica con la computazione, arrivando anche
a modellare computazioni che sono normalmente considerate “scorrette” (come certamente quelle effettuate da un programma che non restituisce mai un risultato!).
Ma poichè la Ludica è stata introdotta a partire da problematiche nate all’interno della
Logica Lineare, è naturale chiedersi la relazione tra i due sistemi. Certamente i disegni
della Ludica possono essere interpretate come classi (anche infinite) di dimostrazioni
nella Logica Lineare. Ad esempio, il disegno:
332 ⊢
33, 337 ⊢ 37
(+{{2}{1, 7}})
⊢ 33, 37
(−{3, 7})
⊢3
rappresenta (tra le altre), le due dimostrazioni seguenti:
⊢P
⊢ Q, R
(⊗I)
⊢ P ⊗ Q, R
(≀I)
⊢ (P ⊗ Q) ≀ R
⊢ S ⊢ T (⊗I)
⊢ (S ⊗ T )
⊢ Q, R
(⊗I)
⊢ (S ⊗ T ) ⊗ Q, R
(&I)
⊢ ((S ⊗ T ) ⊗ Q)&R
Se consideriamo la Logica Lineare senza la modalità (MALL), la corrispondenza tra
Logica Lineare e Ludica può essere stabilita in modo preciso. Infatti i connettivi della Logica Lineare corrispondono a insiemi di disegni (con particolari caratteristiche),
e le formule a proprietà di disegni. Esplorando tali analogie, la Ludica diventa una
fondazione per la Logica Lineare, in quanto vale il seguente teorema:
Teorema 1 (correttezza) Per ogni dimostrazione in MALL della formula A, esiste un
disegno della Ludica che ha la proprietà A ed è vincente.
(completezza) Per ogni formula A, esiste un disegno della Ludica che gode della proprieta’ A e rappresenta una dimostrazione senza tagli di A in MALL.
Un disegno è vincente quando ogni sua interazione con un disegno complementare termina con la sua vittoria. Ricordando la nozione di interazione, il disegno complementare
quindi introduce la nozione di dimostrazione sbagliata di A⊥ .
Rimane ancora aperto il problema di estendere la Ludica in modo che il teorema di
correttezza e completezza valga per tutta LL (compresa quindi la mdalità). Per ora quindi
la Ludica ci offre una teoria strutturale delle dimostrazioni della Logica Lineare, ristretta
al caso in cui tutte le risorse sono consumabili.
Per un approccio introduttivo alla Logica Lineare e alla Ludica si vedano rispettivamente
[4] e [3].
Riferimenti bibliografici
[1] A.Asperti and S.Guerrini, 1998, The optimal Implementation of Functional
Programming Languages. Cambridge Tracts in Theoretical Computer Science,
Cambridge University Press.
[2] Asperti and L.Roversi, 2002, Intuitionistic light affine logic. ACM Transactions on
Computational Logic, 3(1), pp. 1 - 39.
[3] Curien P.-L., 2004, Introduction to Ludics. http://www.pps.jussieu.fr/ curien.
[4] Danos V., Di Cosmo R. , 2004,The Linear Logic Primer, course notes,
http://www.pps.jussieu.fr/ dicosmo/CourseNotes/LinLog/.
[5] Girard J.-Y., 1987, Linear Logic, Theoretical Computer Science, London
Mathematical 50:1, pp. 1-102.
[6] Girard, J.-Y., 1998, Light Linear Logic, Information and Computation 143.
[7] Girard J.-Y., 2001, Locus Solum: From the rules of logic to the logic of rules.
Mathematical Structures in Computer Science 11, pp. 301-506.
[8] Girard, J.-Y., 1996, Proof-nets : the parallel syntax for proof-theory, Logic and
Algebra, eds Ursini and Agliano, Marcel Dekker, New York.
[9] Y. Lafont, 1988, The linear abstract machine, Theoretical Computer Science 59,
North-Holland, pp. 157-180.
Torino, 19 febbraio 2004