Dottorato in Informatica, Logica e Scienze Cognitive Linguaggi

annuncio pubblicitario
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.
Scarica