Dottorato in Informatica, Logica e Scienze Cognitive Linguaggi formali Franco Montagna Dipartimento di Scienze Matematiche e Informatiche R. Magari Pian dei Mantellini 44, 53100 Siena La logica è la scienza del ragionamento corretto. I sistemi formali hanno lo scopo di formalizzare tali ragionamenti, rendendoli meccanici. Una motivazione per lo studio dei sistemi formali è la seguente: l’attitudine degli uomini di scienza è quella di ottenere, se possibile, delle certezze, e per stabilire con certezza la correttezza o meno di un ragionamento, il metodo più sicuro è quello di stabilire dei criteri formali che siano possibilemnte controllabili da una macchina. Data la natura polivalente delle interpretazioni nel linguaggio naturale, risulta praticamente impossibile codificare tutti i ragionamenti corretti all’interno di un unico linguaggio formale, per cui la scelta è stata quella di trattare di volta in volta porzioni molto circoscritte del ragionamento, e di trovare per ciascuna di queste un sistema formale ad hoc. Ad esempio, ci sono sistemi adatti a trattare il ragionamento matematico, altri che sono adatti a trattare l’evoluzione temporale degli eventi, altri che sono adatti al trattamento delle risorse, etc. Per formulare un sistema formale adeguato, non basta scegliere il linguaggio opportuno, ma occorre anche chiarire il significato dei simboli logici adottati. Consideriamo ad esempio l’implicazione: in matematica classica, asserire A → B equivale ad asserire che o A è falsa o B è vera. Questo stride fortemente con l’interpretazione nel linguaggio naturale: ad esempio, le frasi Se non avessero pugnalato Cesare, io sarei più ricco di Bill Gates e Se non avessero pugnalato Cesare, due più due è uguale a quattro sono considerate, nel linguaggio naturale, la prima falsa e la seconda priva di senso, ma essendo l’antecedente falso, sono entrambe vere nell’interpretazione classica. Nella matematica classica valgono tre regole (dette regole strutturali), che invece non valgono nell’interpretazione usuale del linguaggio naturale. La prima, detta regola di indebolimento afferma che aggiungendo nuove ipotesi le conclusioni ottenute in precedenza rimangono valide. Controesempio nel linguaggio naturale: la frase Se prendo il treno delle 8 per Napoli, arrivo a Napoli in giornata sembra intuitivamente vera; se però prendo il treno per Napoli e c’è sciopero dei treni, la conclusione arrivo a Napoli in giornata non è più garantita. La seconda regola, detta contrazione, afferma che A e A equivale ad A. In matematica, una volta che ho dimostrato un teorema A lo posso usare tutte le volte che voglio. La regola non vale nel linguaggio naturale: inserire una moneta da 50 centesimi nella macchina del caffè (A) non è la stessa cosa che inserire una moneta da 50 centesimi due volte (A e A): la prima operazione dà diritto ad un caffè, la seconda a due caffè. La terza regola, detta di scambio, afferma che scambiando l’ordine delle ipotesi le conclusioni non cambiano. Controesempio: nei paesini di provincia, negli anni 50, vi era una enorme differenza fra le frasi: mi sono sposato e mia moglie è rimasta incinta e mia moglie è rimasta incinta e mi sono sposato. Nel seguito, ci concentreremo principalmente sulla formalizzazione del ragionamento matematico, per il quale bastano pochi simboli: variabili individuali, che denotano individui generici e imprecisati dell’universo del discorso, le costanti, che invece denotano individui specifici, i simboli di funzioni, che denotano funzioni sull’universo del discorso, e i simboli di predicato, che denotano proprietà e relazioni sugli individui. Componendo simboli di funzioni con costanti e variabili, si ottengono i termini, che ancora denotano individui. Dato un simbolo di predicato n-ario P e n termini, t1, ..., tn, si ottiene una formula P (t1, ..., tn), da interpretarsi come: gli individui denotati da t1, ..., tn stanno fra loro nella relazione P . Formule di questo tipo sono dette atomiche, in quanto, non contenendo connettivi, non sono ulteriormente scomponibili. Ad esempio, (x + y)2 + 3z è un termine, x + y ≤ z è una formula atomica nel predicato binario ≤. Nel linguaggio naturale, Silvio Berlusconi è un simbolo di costante, la madre di è un simbolo di funzione, la madre di Berlusconi è un termine, e la madre di Berlusconi è anzianaè una formula. Vi sono poi nel linguaggio dei connettivi, operatori che consentono di combinare le formule fra loro. Essi sono: ∨ (o, non esclusivo), & (e), → (se ..., allora), ¬ (non). Date due formule A e B, possiamo da esse costruire formule più complesse, cioè A ∨ B , A&B, A → B, ¬A. Vi sono infine i quantificatori ∃ (esiste almeno un) e ∀ (per ogni). Per fare un esempio, se U denota il predicato essere un uomo e M denota il predicato essere mortale, allora la frase ogni uomo è mortale si formalizza con ∀x(U (x) → M (x)). Anche se ci limitiamo allo studio del ragionamento matematico, il che circoscrive molto sia il linguaggio che l’interpretazione delle costanti logiche, la scelta del sistema formale da adottare non è univoca. Vi sono infatti almeno due atteggiamenti contrastanti nell’impostazione generale della matematica, quello classico, basato sul concetto di verità, e quello intuizionista, basato sulle costruzioni mentali del soggetto pensante. Mentre per un logico classico l’esistenza di un oggetto può essere dimostrata anche in modo indiretto, ossia per assurdo, gli intuizionisti accettano solo quegli oggetti che possono essere costruiti esplicitamente. Per fare un esempio, se un logico classico trova una persona morta e può escludere sia che il decesso sia avvenuto per cause naturali, o per incidente o per suicidio, egli si sente di affermare che esiste un assassino. Un logico intuizionista farebbe una simile affermazione solo dopo aver scoperto il colpevole. Questo dissidio fra il punto di vista classico e quello intuizionista diviene evidente se si analizzano le rispettive interpretazioni dei connettivi logici. L’interpretazione classica è semplice: A&B è vera se A è vera e B è vera, A ∨ B è vera se o A è vera, o B è vera (o entrambe sono vere); A → B è vera se o A è falsa o B è vera; ∀xA(x) è vera se per ogno individuo x dell’universo del discorso, A(x) è vera, etc... Interpretazione intuizionista. L’interpretazione dei connettivi e dei quantificatori nella logica intuizionista si basa su due principi: (a) per un intuizionista, verificare una formula significa dimostrarla; (b) spiegare il significato di una formula A significa precisare cosa si intende per dimostrazione di A. Questo concetto è definito come segue: • Una dimostrazione di A&B è costituita da una dimostrazione di A e di una dimostrazione di B. • Una dimostrazione di A ∨ B è costituita da una dimostrazione di A o da una dimostrazione di B. (Quindi per dimostrare A ∨ ¬A nella logica intuizionista occorre dimostrare A oppure dimostrare ¬A, e il principio del terzo escluso A ∨ ¬A non è accettato dalla logica intuizionista). • Una dimostrazione di A → B è costituita da un metodo per ottenere una prova di B partendo da un’ipotetica prova di A. • La negazione è definita tramite l’implicazione e il simbolo ⊥ di falso: ¬A è una abbreviazionne per A → ⊥. Per gli intuizionisti, ⊥ è una formula che non ha dimostrazioni. • Una dimostrazione di ∃xA(x) consiste nel mostrare un individuo a ed una dimostrazione di A(a). Quindi per dimostrare l’esistenza di un individuo che soddisfa la proprietà A, occorre trovare tale individuo. • Una dimostrazione di ∀xA(x) consiste in un metodo che dato un qualunque individuo a fornisce una dimostrazione di A(a). Deduzione naturale Scopo della deduzione naturale non è quello di fornire un metodo efficiente di ricerca di dimostrazioni, ma piuttosto quello di esplicitare in modo formale gli schemi principali di ragionamento matematico. Una caratteristica di tale sistema deduttivo è che ogni connettivo o quantificatore ha una (o talvolta due) regola di introduzione (che spiega cosa serve per dimostrare una formula che abbia tale connettivo o quantificatore come simbolo principale) e una regola di eliminazione (che spiega cosa si può ottenere da una formula avente tale simbolo come simbolo pricipale). Con la deduzione naturale di regola si deduce qualcosa da qualcos’altro. Tuttavia vi sono regole che scaricano delle ipotesi (ossia, alcune formule che fungevano da ipotesi prima dell’applicazione della regola non sono più tali dopo l’applicazione della regola stessa). Osserviamo poi che le ipotesi formano un insieme, e quindi non importa l’ordine delle stesse e non importa se un’ipotesi viene usata una volta sola o più volte. Iniziamo da due principi di base, che non introducono alcun connettivo o quantificatore. Essi sono: Regola di identità. A è una deduzione di A da A. Regola di indebolimento. Ogni deduzione di una formula A da un insieme Γ di premesse è anche una deduzione di A da un qualunque soprainsieme di Γ, vale a dire, aggiungendo ipotesi, le conclusioni precedentemente ottenute restano valide. Affrontiamo ora le regole sui connettivi. Quello più semplice da trattare è &. Infatti, dimostrare A&B equivale a dimostrare sia A che B. Le regole sono allora: & introduzione A A&B B & eliminazione A&B A A&B B Più complicata è la regola della introduzione della implicazione, in quanto essa prevede lo ’scaricamento’ di un’ipotesi: → introduzione A(1) ... . B A → B (1) In altri termini: da una deduzione di B da A, ottengo una deduzione di A → B in cui A non funge più da assunzione. La regola viene di solito applicata al contrario: per dimostrare che A → B, basta dedurre B da A. [Interpretazione intuizionista: Una deduzione di B da A consente di ottenere una prova di B da una prova di A, e quindi è una prova di A → B]. Più semplice (e più comune) è la regola di eliminazione dell’implicazione (il classico Modus Ponens): → eliminazione: A B A→B . [Interpretazione intuizionista: se ho una prova di A e un metodo per produrre una prova di B a partire da una prova di A, allora posso ricavare una prova di B]. Le regole di introduzione della disgiunzione non sono problematiche: A ∨ introduzione: A∨B B . A∨B [Interpretazione intuizionista: da una prova di A ottengo una prova di A ∨ B e da una prova di B ottengo una prova di A ∨ B. Infatti dimostrare A ∨ B equivale a dimostrare o A o a dimostrare B.]. Più complessa (in quanto, come la regola di introduzione dell’implicazione, prevede lo scaricamento di assunzioni), è la regola di eliminazione di ∨. ∨ eliminazione: A(1) ... C B (2) ... C C A∨B (1),(2) La regola va letta come segue: supponiamo di aver dedotto C sia da A (più eventualmente altre assunzioni Γ1) che da B (più eventualmente altre assunzioni Γ2). Allora possiamo dedurre C da A ∨ B (più eventualmente Γ1 e Γ2). Si noti che le assunzioni A e B non sono più tali dopo l’applicazione della regola (esse vengono scaricate). La regola di eliminazione di ∨, letta a rovescio, diventa un procedimento per casi. Supponiamo infatti di dover dimostrare C e di avere appena dimostrato A∨B. Allora possiamo procedere per casi: primo caso: vale A; secondo caso: vale B. Se in entrambi i casi possiamo dedurre C abbiamo raggiunto il nostro scopo. [Interpretazione intuizionista: supponiamo di poter ottenere una prova π1 di C da una prova di A e una prova π2 di C da una prova di B. Se abbiamo una prova π3 di A ∨ B (che come sappiamo consiste o di una prova di A o di una prova di B), allora possiamo ricavarne una prova di C utilizzando π3 seguita da π1 se π3 è una prova di A, o da π2 se π3 è una prova di B]. Ricordiamo che ¬A = A → ⊥. Abbiamo già visto le regole dell’implicazione, e resta da vedere la regola del falso. Ed è proprio qui che le due logiche, quella classica e quella intuizionista, divergono. Per la logica classica, la regola del falso è la reductio ad absurdum: ⊥ classico: ¬A(1) ... ⊥ A . (1) Tale regola va letta come segue: se da ¬A (più altre eventuali formule Γ) deduco un assurdo, allora posso concludere A da Γ (senza bisogno dell’ipotesi ¬A). L’interpretazione (solo classica) è la seguente: se dalla verità di ¬A deriva un assurdo, allora A deve essere vera. La regola intuizionista del falso è invece denominata ex falso quodlibet. ⊥ intuizionista: ⊥ A dove A è una formula qualunque. Si noti che ⊥ intuizionista è derivabile da ⊥ classico. Posso infatti considerare una dimostrazione di ⊥ come una derivazione di ⊥ da ¬A (per la regola di indebolimento) e quindi dedurre A con ⊥ classico. Il viceversa non vale. Due tipici esempi di formule valide classicamente ma non intuizionisticamente (e che quindi richiedono la reductio ad absurdium) sono ¬¬A → A e A ∨ ¬A. Ricerca di prove Uno dei problemi più importanti relativo ai sistemi formali è il seguente: data una formula, si vuole cercare una sua (eventuale) dimostrazione. Si tratta allora di costruire l’albero di dimostrazione dal basso all’alto. La deduzione naturale non è però molto adatta allo scopo. Supponiamo infatti di dover ricostruire la dimostrazione di una formula A = B ∨ C. Quale sarà l’ultima regola utilizzata? Si potrebbe pensare che l’ultima regola usata sia una introduzione di ∨ , ma non è detto che sia cosı̀. Ad esempio A potrebbe essere stata ottenuta da D a da D → A con una eliminazione dell’implicazione, oppure potrebbe essere stata ottenuta con la regola del falso classico. In ogni caso, non riusciamo ad indovinare l’ultima regola usata. Ci chiediamo allora: esiste un sistema formale capace di dedurre tutte e sole le formule valide e tale da consentire una ricerca automatica delle dimostrazioni? La risposta è affermativa almeno per il frammento senza quantificatori (logica proposizionale), sia della logica classica che di quella intuizionista. Per le logiche con quantificatori, non è possibile di solito decidere se una formula sia dimostrabile o no, per cui è possibile che la ricerca di una prova prosegua all’infinito senza arrivare n ad una prova n ad una dichiarazione di fallimento. Tuttavia vi sono algoritmi di ricerca mirata che hanno successo in molti casi rilevanti. Vedremo ora un sistema formale per la logica classica, particolarmente adatto a questo scopo. Calcoli a tableau per la logica classica. L’idea è molto semplice: volendo dimostrare una formula, si suppone che essa sia falsa e si cerca di arrivare ad un assurdo. La formula iniziale viene via via scomposta in formule più semplici e attraverso questo procedimento, vengono formate varie tabelle, costituite da formule che devono risultare vere e da formule che devono risultare false. Una tabella dà origine ad una o più tabelle contenenti formule più semplici. La formula risulta dimostrata quando risulta impossibile falsificarla, ossia poichè tutte le tabelle terminali (che non sono ulteriormente semplificabili) o contengono una stessa formula sia fra le formule vere sia fra quelle false, oppure la formula ⊥ compare fra quelle vere. Analizziamo prima le riduzioni sui connettivi. • A&B vera si riduce a A vera, B vera (nella stessa tabella). • A&B falsa si riduce a due tabelle, una con A falsa e l’altra con B falsa. • A ∨ B vera si riduce a due tabelle una con A vera e l’altra con B vera. • A ∨ B falsa si riduce a A falsa, B falsa (nella stessa tabella). • A → B vera si riduce a due tabelle, una con A falsa e l’altra con B vera. • A → B falsa si riduce a A vera, B falsa (nella stessa tabella). • ¬A vera si riduce a A falsa. • ¬A falsa si riduce a A vera. Vediamo un esempio, ossia (A → (B ∨ C)) → ((A → B) ∨ (A → C)). La formula è una implicazione, che risulta falsa se la premessa è vera e la conclusione falsa. Otteniamo quindi la tabella T : A → (B ∨ C) vera, (A → B) ∨ (A → C) falsa. Affinchè (A → B) ∨ (A → C) sia falsa, occorre che siano falsi sia A → B che A → C. Otteniamo quindi: A → (B ∨ C) vera, A → B, A → C false. Ora A → B è falsa se A è vera e B è falsa, e A → C è falsa se A è vera e C è falsa. Otteniamo quindi una nuova tabella: A → (B ∨ C), A vere, B, C false Affinchè A → (B ∨ C) sia vera, occorre che o A sia falsa o B ∨ C sia vera. La tabella precedente si divide allora in due tabelle: T1 : A vera, B, C, A false T2 : B ∨ C, A vere, B, C false La tabella T1 non può essere soddisfatta, poichè A dovrebbe essere simultaneamente vera e falsa. Analizziamo la tabella T2. B ∨ C è vera se B è vera o C è vera. Distinguendo i due casi, otteniamo le tabelle: T3 : B, A vere, B, C false T4 : C, A vere, B, C false Entrambe le tabelle non possono essere soddisfatte: in T3 la formula B dovrebbe essere sia vera che falsa e in T4 la formula C dovrebbe essere sia vera che falsa. Quindi la formula di partenza non può essere falsificata, e quindi è dimostrabile. Vediamo un altro esempio, ossia A → A&B, con A e B formule atomiche (cioè prive di connettivi e di quantificatori). Ripetendo il procedimento precedente, cercando cioè di falsificare la formula, otteniamo: A vera, A&B falsa che si scinde nei due casi: T1 : A vera, A falsa T2 : A vera, B falsa Mentre T1 non può essere soddisfatta, T2 risulta soddisfatta da una interpretazione che rende vera A e falsa B (essendo A e B atomiche, una tale interpretazione esiste). Quindi la formula non è dimostrabile. Se però vi sono dei quantificatori, può succedere che vi siano infinite possibilità di ridurre una tabella. Supponiamo ad esempio che in una tabella vi sia la formula ∃xA(x) fra le formule false. Allora, per ogni termine t, la formula A(t) dovrà risultare falsa, e quindi dovremmo introdurre fra le formule false tutte le infinite formule del tipo A(t). Lo stesso problema si verifica quando vi è una formula del tipo ∀xA(x) fra le formule vere. Poichè le dimostrazioni sono oggetti finiti, si utilizza l’artificio di introdurre una formula alla volta. In questo modo, però, in molti casi la riduzione non ha termine. In effetti, come abbiamo detto, Church e Turing dimostrarono che non esiste un algoritmo per decidere se una formula del primo ordine è valida o no. Pertanto non può esistere un algoritmo di ricerca della prova che sia: (a) corretto, cioè che dimostri solo formule valide; (b) completo, cioè, che dimostri tutte le formule valide; (c) terminante, vale a dire, partendo da una formula arbitraria, si arresti dopo un numero finito di computazioni o con una prova o con una dichiarazione di fallimento. Il metodo di risoluzione. Anche il metodo di risoluzione è basato sull’idea di dimostrare formule per assurdo. Esso funziona bene anche nel trattamento dei quantificatori, in quanto prevede una fase preliminare in cui gli stessi vengono prima ridotti e poi eliminati. Il prezzo che si paga è quello di considerare un numero potenzialmente infinito di sostituzioni. In molti casi esiste però un metodo mirato di ricerca delle sostituzioni più convenienti. Anzichè trattare il caso generale, vediamo un esempio. Vogliamo verificare la dimostrabilità o meno della formula A = ∃x∀yP (x, y) → ∀y∃xP (x, y). Si ha che A è valida se la sua negazione è insoddisfacibile. Tale negazione, ¬(∃x∀yP (x, y) → ∀y∃xP (x, y)), si riduce successivamente a ∃x∀yP (x, y)&¬∀y∃xP (x, y), ∃x∀yP (x, y)&∃y∀x¬P (x, y). Dobbiamo dunque verificare se ∃x∀yP (x, y)&∃y∀x¬P (x, y) è soddisfacibile o no. Possiamo scindere la formula in ∃x∀yP (x, y) e ∃y∀x¬P (x, y), e dobbiamo verificare se esso possono essere soddisfatte contemporaneamente. Assumendo che lo siano, esistono due costanti c, d tali che ∀yP (c, y) e ∀x¬P (x, d). Prendendo y = d e x = c, ottengo una contraddizione. In generale, si procede prima ad eliminare gli esistenziali, e poi si vede se sostituendo opportunamente le variabili quantificate universalmente con opportuni termini, si arriva ad una contraddizione a livello proposizionale. Essendo la logica proposizionale decidibile, potrebbe sembrare che questo algoritmo decida anche la logica dei predicati, ma non è cosı̀, perchè vi sono potenzialmente infinite sostituzioni da controllare per le variabili quantificate universalmente. Sistemi formali per teorie assiomatiche. Quando si fa matematica, non ci si interessa solo delle formule logicamente valide, ma anche delle formule ’valide’ in un certo ambito matematico, ad esempio, nell’analisi reale, o nella geometria euclidea. Il sogno di Hilbert, uno dei più grandi matematici di tutti i tempi era quello di risolvere in modo definitivo il problema dei fondamenti della matematica attraverso i sistemi formali. Il suo piano di battaglia era articolato in vari punti: • Per ogni teoria matematica, introdurre un linguaggio formale adatto a parlarne, e introdurre poi degli appositi assiomi, che al tempo stesso fungessero da definizioni degli oggetti della teoria e da basi per le dimostrazioni nell’ambito della teoria. • Secondo Hilbert, gli assiomi devono avere la seguenti caratteristiche: (a) deve esserci un algoritmo per decidere se una formula è un assioma o no (e più in generale se una certa espressione simbolica è una dimostrazione dagli assiomi o no); (b) gli assiomi, unitamente alle regole di inferenza, non devono dar luogo a contraddizioni; (c) gli assiomi devono essere indipendenti, cioè nessuno di essi deve essere conseguenza logica degli altri; (d) (importantissimo!) ogni enunciato della teoria deve essere o dimostrabile o confutabile a partire dagli assiomi. In altre parole, se il programma di Hilbert avesse avuto successo, sarebbe stato possibile costruire una macchina (che simula il sistema formale) in grado di stabilire, data una qualsiasi congettura matematica, se essa sia vera o falsa. Quindi, se il Programma di Hilbert avesse avuto successo, i sistemi formali, e quindi le macchine, avrebbero sostituito, almeno in linea teorica, l’attività dei matematici. Il Programma di Hilbert comprendeva poi un altro punto fondamentale, ossia la giustificazione della matematica dell’infinito con metodi finitistici. In altre parole, Hilbert sperava di giustificare con i metodi della matematica del finito, la teoria degli insiemi di Cantor (rimase famosa la sua frase: Aus dem Paradies, dass Cantor uns geshaffen, soll uns niemand vertreiben Kőnnen). Nel 1931, Il logico Kurt Gödel dimostrò l’irrealizzabilità del programma di Hilbert: • Dato un qualsiasi programma (sistema formale) corretto (che non dimostri contraddizioni), esiste una proposizione dell’aritmetica che il programma non sa decidere se sia vera o falsa. Come conseguenza, non è possibile risolvere tutti i problemi matematici facendo riferimento ai sistemi formali. • La non contradditorietà della teoria degli insiemi, requisito essenziale per l’accettabilità della teoria, non solo non può essere dimostrata finitisticamente, ma neppure con i metodi transfiniti della teoria stessa. Conclusioni. I teoremi di incompletezza di Gödel hanno indubbiamente ridimensionato l’impatto dei sistemi formali sui fondamenti della matematica e della scienza in generale. In effetti, la pretesa che i sistemi formali sostituissero l’attività di ricerca dei matematici, o più in generale degli scienziati, era eccessiva. Tuttavia, non bisogna cadere nell’eccesso opposto, che consiste nel considerare i sistemi formali del tutto inutili. Ecco una serie di motivi che ne giustificano l’importanza: • I sistemi formali permettono di controllare la correttezza di un ragionamento, una volta chiariti quali schemi di ragionamento debbano essere accettati. In altri termini, i sistemi formali consentono di spostare la discussione dalla correttezza di un ragionamento alla correttezza dei principi generali su cui l’argomentazione si fonda. • I sistemi formali hanno contribuito ad un approfondimento della natura del ragionamento logico. • Il fatto di poter simulare i sistemi formali attraverso programmi ha consentito di introdurre nuovi linguaggi di programmazione basati su paradigmi logici.