2. La logica delle proposizioni: semantica

Transcript

2. La logica delle proposizioni: semantica
2. La logica delle proposizioni: semantica
Di cosa tratta la logica? Da quello che abbiamo già detto, appare chiaro che le radici della argomentazione
logica sono già nel linguaggio naturale, nella stessa struttura del discorso e delle frasi che lo compongono.
Occorre però in logica fare un cambiamento nel modo in cui le consideriamo. Gli oggetti fondamentali sono
le proposizioni, nelle quali riconosciamo le frasi del linguaggio naturale, considerate però
indipendentemente dal linguaggio in cui le esprimiamo e dal contesto del loro enunciato. Le proposizioni
sono in fondo quelle che nel linguaggio naturale appaiono come asserzioni, frasi cioè che possono essere
vere o false in sé e a prescindere dal contesto: <2 è un numero pari>, <la luna è fatta di formaggio
svizzero>, <Nicola è il padre di Michele>, etc. Non sono proposizioni le domande (<che ore sono?>) o gli
ordini (<apri la finestra!>) o le interiezioni (<ahia!>) o le frasi in un certo contesto (<qui e ora piove>: il
dove e il quando possono solo essere ricavati dal contesto).
La definizione classica di ‘proposizione’ richiede che essa debba essere o vera o falsa. Fondamentale è
quindi il concetto di verità, il quale è chiaramente un concetto ‘semantico’, in quanto una frase è vera se la
sua interpretazione coincide con lo stato delle cose. Quindi <la neve è bianca> è vero se la neve è bianca, è
falso nel caso contrario, in generale ‘p’ è vera se e solo se p.
Già Aristotele aveva fissato la sua attenzione sulle proposizioni e aveva iniziato a distinguerne i diversi tipi.
Oggi possiamo distinguere tra proposizioni individuali: <Michele è alto>, che in genere corrispondono ad
osservazioni empiriche; particolari: <qualche studente arriva da Barletta> cioè <c’è almeno uno studente
che arriva da Barletta>; universali : <tutti i multipli di 4 sono pari>, e queste possono essere matematiche o
anche empiriche, vere se sempre verificate (<ogni giorno sorge il sole>). Possiamo poi distinguere
proposizioni positive (quelle precedenti) o negative (ottenute aggiungendo la negazione): <Antonio non è
alto>, <qualche docente non ama le domande>, <nessun centravanti è basso> (attento: è diversa da <non
tutti i centravanti sono bassi> o <alcuni centravanti non sono bassi>, ma coincide con <tutti i centravanti
non sono bassi>). E aveva scoperto che talora da due premesse si può trarre una conclusione, ad esempio
da <tutti gli ateniesi sono greci> e da <tutti i greci sono mortali> si può dedurre che <tutti gli ateniesi sono
mortali>, oppure da <qualche ateniese è ricco> e <tutti i ricchi sono potenti> si può dedurre che <qualche
ateniese è potente>: erano questi ‘sillogismi’ validi. Ma da <qualche ateniese è alto> e <qualche ateniese è
biondo> non si può dedurre nulla intorno alla relazione tra alti e biondi. Ma la cosa più importante era che
la deduzione non dipendeva dal significato delle premesse ma solo dalla forma del sillogismo e dal loro
essere vere. Se le premesse erano vere e il sillogismo corretto era vera anche la conclusione, altrimenti non
si poteva avere alcuna certezza. La deduzione era quindi un fatto puramente formale, sintattico.
E lo stesso Aristotele aveva fissato i ‘principi formali’ che regolavano l’uso del concetto di ‘verità’: in primo
luogo il principio di non contraddizione: “non è possibile che un proposizione sia nel contempo vera e
falsa”, e poi il principio del terzo escluso: “una qualsiasi proposizione o è vera o è falsa”. E delinea anche la
caratterizzazione della verità per corrispondenza: “è vero dire che è ciò che è o che non è ciò che non è, è
falso dire che è ciò che non è o che non è ciò che è”: a parte lo scioglilingua si fissa qui il carattere
semantico del concetto di verità, cioè il suo connettere la realtà e il linguaggio. Sono principi che ancor oggi
governano la logica.
Nella logica delle proposizioni non analizziamo la struttura delle proposizioni, consideriamole unità
elementari da indicare in genere con una lettera: P, Q, etc. Possiamo invece pensare di costruire
proposizioni ‘complesse’ formate da proposizioni elementari unite da connettivi. Ad esempio {2 è un
numero pari e 3 è un numero primo} è una proposizione, quella che si dice in genere una ‘congiunzione’. E’
vera? Istintivamente ci viene da rispondere si. Perché? Perché il nostro uso linguistico ritiene vera una
congiunzione se entrambe le proposizioni congiunte sono vere, cosa che in questo caso accade. Se almeno
una delle due fosse falsa riterremmo la proposizione falsa. La logica delle proposizioni assume così il
carattere di un linguaggio formale, del quale possiamo costruire l’ ‘alfabeto’ e la ‘grammatica’. Oltre le
lettere per le proposizioni elementari introduciamo un segno per la congiunzione:  (talora lo leggerò ‘and’
per distinguerlo dall’uso della congiunzione ‘e’ nel linguaggio naturale). Allora se indichiamo
{2 è un numero pari} con P
{3 è un numero primo} con Q
Possiamo scrivere {2 è un numero pari e 3 è un numero primo} come P  Q.
Abbiamo detto che le proposizioni sono caratterizzate dall’essere vere o false, e quindi quello che dicevamo
sul nostro uso linguistico riguardo la congiunzione possiamo tradurlo in una tavola di verità che ci fornisce
il valore di verità di P  Q a partire da quello di P e di Q. Introduciamo a tal fine i segni 1 (per ‘vero’) e 0 (per
‘falso’). Le tavole ci danno i valori di verità delle diverse possibili interpretazioni delle lettere
proposizionali. Cioè la lettera P la posso interpretare come una proposizione vera (ad esempio {2 è un
numero pari}) o come una proposizione falsa (ad esempio {2 è un numero dispari}). Le interpretazioni di P
per cui P è vera (o soddisfatta) si diranno in seguito i modelli di P.
Il senso che noi diamo alla congiunzione ci porta allora a scrivere la seguente tavola di verità per la .
P
Q
PQ
0
0
0
0
1
0
1
0
0
1
1
1
Un altro tipo di proposizione composta si ottiene negando una proposizione P col segno  (che leggerò
‘not’). Se P ad esempio è {2 è un numero pari},  P è la proposizione {2 non è un numero pari}. Il valore di
verità è ovviamente dato dalla tabella
P
P
0
1
1
0
D’ora in poi useremo le lettere maiuscole P, Q, A, B, … per indicare tanto proposizioni elementari, quanto
proposizioni composte formate con connettivi.
Analogamente si possono costruire le tavole di verità della disgiunzione inclusiva  (che leggerò ‘or’), il “se
e solo se” , ed il “se…allora” , detta anche ‘implicazione’.
P
Q
P Q
P  Q P Q
0
0
0
1
1
0
1
1
0
1
1
0
1
0
0
1
1
1
1
1
Sono abbastanza ovvie, tranne la penultima, che afferma che una implicazione è vera sempre tranne
quando è vera l’antecedente e falso il conseguente, e quindi risultano vere proposizioni del tipo {se 2 è un
numero dispari allora la luna è un satellite della terra}, oppure {se 2 è un numero dispari allora la luna è di
formaggio}! Decisamente poco convincente, in quanto il nostro uso comune della implicazione non
considera solo i valori di verità di antecedente e conseguente ma anche l’esistenza di una argomentazione
che li leghi, ma vedremo più in là le ragioni della nostra tavola. In verità potremmo fare a meno del
connettivo  e semplificheremmo la teoria, ma poiché è molto usato lo conserveremo.
Il connettivo  ha un solo argomento e quindi lo diremo ‘unario’, gli altri hanno due argomenti e allora li
diremo ‘binari’. Comunque useremo i connettivi sia come segni del nostro linguaggio proposizionale sia
come operazioni sui valori di verità.
Possiamo allora costruirci il linguaggio della logica delle proposizioni . L’alfabeto è dato da {,, , ,
,P,Q,R,….} , supponendo di poter introdurre quante si vogliano lettere proposizionali.
Abbiamo visto che i linguaggi formali possono essere definiti tramite le regole che generano i loro elementi.
Nel nostro linguaggio proposizionale le regole sono queste, e le espressioni così generate si dicono ‘formule
ben formate’(fbf):
i)
ii)
iii)
iv)
Abbiamo un gruppo di lettere proposizionali che sono ‘proposizioni’: P, Q, R, etc.
Se ho una proposizione Prop, allora posso generare la proposizione  Prop
Se ho due proposizioni Prop1 e Prop2, posso generare le proposizioni Prop1  Prop2, Prop1 
Prop2, Prop1  Prop2, Prop1  Prop2
Nient’altro è una proposizione.
Le formule ben formate su questo alfabeto (le ‘proposizioni’) sono quindi tutte le lettere proposizionali, e le
espressioni che si possono costruire reiterando le regole precedenti. Così ad esempio PQ  non è una
proposizione in quanto non è una formula ben formata. In particolare si ricordi che la giustapposizione di
due proposizioni, PQ, non è una proposizione. Il fatto che queste siano tutte e sole le proposizioni implica
che tutte e sole queste assumono valori di verità tramite le tavole.
Si aggiungono anche talora le parentesi per indicare l’ordine con cui eseguire le operazioni espresse dai
connettivi, ma potremmo farne a meno ottenendo una presentazione più chiara, scrivendo l’espressione
come un albero (analogo all’albero genealogico di una famiglia) con alla base le lettere proposizionali ed in
mezzo i connettivi dall’alto in basso nell’ordine di applicazione.
I concetti di albero e grafo sono molto utili nella matematica discreta, e soprattutto nelle sue applicazioni
alla computer science. Ma non li definiremo ora una volta per tutte, ma li preciseremo durante il corso,
seguendone le applicazioni. Diamo ora le prime definizioni.
ALBERI E GRAFI
Il concetto di ‘albero’ è un caso particolare del concetto di grafo, una struttura costituita da due insiemi:
un insieme di vertici e un insieme di archi, ove un arco connette una coppia di vertici. Se la coppia ha una
direzione (è una ‘coppia ordinata’) l’arco viene rappresentato da una freccia e il grafo si dice ‘diretto’,
altrimenti (è una ‘coppia non ordinata’) viene rappresentato da una semplice linea e il grafo si dice
‘indiretto’. Potremmo anche considerare tutti i grafi come diretti, e considerare una coppia non ordinata
come una coppia di frecce nelle due direzioni opposte. Talora la freccia (coppia ordinata) non viene indicata
con un ordine esplicito, che è sottointeso (ad esempio la direzione dall’alto in basso). Un cammino è poi
una sequenza di archi in cui il vertice terminale di un arco coincide col vertice iniziale dell’arco successivo.
Se il cammino termina col vertice iniziale, esso si dice un ciclo.
Un albero è un grafo senza cicli. Un caso particolare che ora useremo è l’albero diretto in cui la direzione
delle frecce è data supponendo per convenzione che gli archi siano diretti dall’alto in basso. Useremo un
tale albero per descrivere le fbf senza usare parentesi.
Nella scrittura della espressione come albero, usiamo la convenzione che ogni arco sia diretto ‘dall’alto
verso il basso’, dal connettivo ai suoi argomenti, cioè ‘top down’, e la regola di computazione sia ‘bottom
up’ cioè ‘dal basso verso l’alto’.
Ad esempio la formula P  (Q   P) si può scrivere (in rosso il connettivo da eseguire):
P  (Q   P)

QP
P
P
Q

P
P
Q

P
L’albero a destra esplicita solo il connettivo da eseguire e le proposizioni elementari. Così possiamo ad
esempio calcolare il valore di verità della proposizione composta per P vero e Q falso:
1
1
1
0
0
1
Il calcolo del valore di verità della formula, dati i valori di verità di P e Q, si ottiene sostituendo questi ultimi
alle lettere proposizionali e calcolando iterativamente il valore di verità dei nodi intermedi applicando la
tavola di verità del connettivo in rosso.
Si possono costruire proposizioni complesse iterando l’uso dei connettivi: prendiamo ad esempio la
proposizione P  (Q   P). Ne possiamo costruire la tavola di verità iterando le tavole dei connettivi. Altro
esempio P  ( P  Q).
P
Q  P
P  (Q   P)
P
P
Q
P  Q
P ( P  Q).
P
Q
0
0
1
1
1
0
0
1
0
0
0
1
1
1
1
0
1
1
1
0
1
0
0
1
1
1
0
0
1
1
1
1
0
0
1
1
1
0
1
1
Tipi speciali di formule sono
i)
le cosiddette tautologie, formule sempre vere, come ad esempio A  A (principio del
terzo escluso). Si vede subito che essa è vera qualunque sia il valore di verità di A.
ii)
Altrettanto importanti le contraddizioni, formule sempre false, come ad esempio A  A
(principio di non contraddizione).
Abbiamo infatti che <n è un numero intero pari> può essere sia vera che falsa (dipende da n), ma <n è un
numero intero pari oppure n non è un numero intero pari> è sempre vera, e <n è un numero intero pari e n
non è un numero intero pari> è sempre falsa (qualunque sia n).
La prima formula nell’esempio di cui sopra ha la stessa tavola della tautologia, la seconda ha la stessa tavola
della formula P. Cioè esistono formule con la stessa tavola, che diremo equivalenti. E’ facile verificare che
anche [(P  ( P  Q)]  P è una tautologia. In generale:
se A è equivalente a B, allora A  B è una tautologia, e viceversa.
Ed è anche ovvio che, date due formule equivalenti, esse si possono sostituire a vicenda in ogni espressione
logica senza mutarne i valori di verità.
Molte equivalenze sono banali (come ad esempio tra  P e P), ma tutte si possono verificare tramite le
tavole di verità.
LINGUAGGIO OGGETTO E METALINGUAGGIO
Abbiamo detto in precedenza che se A è equivalente a B, allora A  B è una tautologia. In questa frase
appaiono due tipi di linguaggio: il linguaggio del calcolo delle proposizioni (A, B, A  B) e il linguaggio
italiano con cui enuncio una proposizione che ‘parla’ di proposizioni (‘è equivalente’, ‘è una tautologia’). E’
importante distinguere questi due linguaggi: il primo lo diremo linguaggio oggetto, il secondo
metalinguaggio, poiché è un linguaggio che non parla di un mondo di oggetti, ma di un altro linguaggio.
E’ qualcosa che esiste anche nel linguaggio naturale, laddove si usano le virgolette per denotare un oggetto
del linguaggio oggetto trattato nel metalinguaggio, ad esempio <’topo’ è bisillabo> oppure <’la neve è
bianca’ è vera se e solo se la neve è bianca>. Il linguaggio naturale talora però ‘amalgama’ i due linguaggi in
un unico linguaggio, come in <in questa frase niente verbi>, <questa frase è interrogativa>, e creando anche
paradossi come il celebre paradosso del mentitore: <questa frase è falsa>, la quale se è vera è falsa, se è
falsa è vera, in quanto è una frase del metalinguaggio relativa a se stessa come oggetto della frase. La frase
è paradossale ma non è una proposizione, non potendo essere né vera né falsa, pur avendone l’aspetto.
Ma i paradossi nel linguaggio naturale sono molto frequenti, dovuti al fatto che il linguaggio ha scopi più
pragmatici che puramente dichiarativi. Ad esempio il ‘paradosso’ famoso del Comma22 : <chi è pazzo può
chiedere di essere esentato dalle missioni di volo, ma chi chiede di essere esentato dalle missioni di volo
non è pazzo>, più o meno schematizzabile come (AB) (BA), con A=<essere pazzo>, B=<chiedere di
essere esentato dalle missioni di volo>: la tavola di verità mostra che non è una contraddizione, ma è un
esempio di consequentia mirabilis (sulla quale torneremo in seguito): basta usare le tavole di verità per
scoprire che è soddisfatta se il richiedente non è pazzo.
Per distinguere i diversi livelli d’uso delle parole nel linguaggio i logici medievali crearono la teoria delle
suppositiones, che tra l’altro distingueva ad esempio l’uso della parola ‘topo’ in frasi come {topo è
bisillabo}, {il topo sta mangiando il formaggio}, {il topo è un mammifero}.
OPERATORI LOGICI E CIRCUITI
I nostri  e  sono connettivi tra proposizioni e operazioni su i valori di verità delle proposizioni, che
possiamo confrontare con le operazioni aritmetiche. Ad esempio essi godono della proprietà commutativa:
P  Q è equivalente a Q  P, P  Q è equivalente a Q  P (basta verificare la simmetria tra P e Q nelle loro
tavole di verità). Godono anche della proprietà associativa: (P  Q)  R è equivalente a P  (Q  R), (P  Q)
 R è equivalente a P  (Q  R) (verifica!). Questo vuol dire che possiamo scrivere P  Q  R e P  Q  R,
senza parentesi. Cioè  e  possono essere considerate operazioni non necessariamente binarie, ma su un
numero qualsiasi di argomenti, come la somma e il prodotto. Un riflesso di questo fatto formale è anche un
fatto tecnologico: alle origini della computer science i circuiti logici potevano essere costruiti tramite circuiti
elettrici, in cui le lettere proposizionali esprimevano lo stato dei relais (un relais è un interruttore
controllato da un magnete attivato da un circuito, che lo chiude o apre a seconda che nel circuito passi
corrente o no) . L’  era caratterizzato da un circuito in serie, e l’  da un circuito in parallelo:
P
P
Q
R
P
P
Q
R
Si verifica facilmente anche che valgono le proprietà distributive dell’  rispetto all’  e dell’  rispetto all’
, mentre in aritmetica vale solo la proprietà distributiva del prodotto rispetto alla somma.
ALTRE PRPPRIETA’
Si possono ovviamente costruire formule con un numero qualsiasi di lettere proposizionali: ad esempio
(P  R)  (Q   P)  (S   R). (per costruirne la tavola di verità devi però considerare 16 interpretazioni
distinte)
Altre equivalenze importanti sono le leggi di de Morgan:
e:
 (P  Q)
 (P  Q)
equivale a  P  Q
equivale a  P  Q
che possiamo facilmente verificare con le tavole di verità.
Indichiamo con 1 una generica tautologia e con 0 un generica contraddizione, ovviamente, qualunque sia P
1P equivale a P, 0P equivale a 0, 1P equivale a 1, 0P equivale a P.
Esercizi.
1. Puoi costruire il circuito elettrico con relais che realizza il ?
Nella fase pionieristica del computer le funzioni di 0 e 1 si costruivano con circuiti elettrici (corrente
che passa o non passa), tramite and-gates e or-gates (circuito in serie o in parallelo) e interruttori
controllati da relais per la negazione, usando quindi solo tre connettivi. Puoi costruire il circuito
elettrico che realizza la proposizione logica P  (Q  P)?
2. Se ho due lettere proposizionali , quante diverse tavole di verità posso costruire? Sei in grado per
ognuna di esse di scrivere una formula che abbia tale tavola di verità?
3. Verifica che sono tautologie le proposizioni:
a) (P  P)  Q
b) (P  P)  P
c) (P  Q)  ( Q  P)
Mentre non è una tautologia (P  Q)  ( Q  P)
SCELTA DEI CONNETTIVI
Ogni tavola di verità potrebbe definire un connettivo: quelli che abbiamo introdotto sono quelli
comunemente usati perché corrispondenti a costrutti linguistici comuni. Possiamo però ricordarne un altro,
il connettivo or esclusivo PQ (vero se e solo se i valori di verità di P e Q sono diversi), la cui tavola di
verità è
P
Q
PQ
0
0
0
0
1
1
1
0
1
1
1
0
Nel linguaggio si usa per alternative secche del tipo {un numero intero è pari o dispari}, ma è poco usato in
logica, ed usato però in algebra come operazione negli ‘anelli di Boole’.
Ovviamente si possono creare connettivi unendo altri connettivi ad esempio il connettivo NAND (P,Q) è
definito come (P  Q ), e il connettivo NOR (P,Q) è definito come (P  Q ).
E’ utile notare come connettivi, operazioni, funzioni binarie possano avere due tipi diversi di notazione,
infissa (il segno è posto in mezzo agli argomenti) o prefissa (il segno è posto prima degli argomenti tra
parentesi), così che potrei scrivere la somma 3+4 nella forma prefissa +(3,4) o la unione P  Q nella
notazione prefissa  (P, Q), e il NAND (A,B) nella notazione infissa A NAND B: la scelta è solo per
convenzione ed ha ragioni storiche. Per completezza ricordiamo che esiste anche la notazione postfissa.
Esercizi.
1. Costruisci le tavole di verità dei connettivi NAND e NOR. Puoi mostrare come scrivere tutte le
tavole di verità usando solo due connettivi? O magari uno solo?
2. Verifica con le tavole che
P  Q è equivalente a  P  Q
P  Q è equivalente a (P  Q)  (Q  P)
P  Q è equivalente a  (P  Q) (dalle leggi di de Morgan).
3. Le proprietà associativa e commutativa valgono anche per ,  e ?
4. Considera un catena di disgiunzioni in cui compaiano P e P, del tipo A  B … P … P ….
Q, che cosa puoi dire della sua tavola di verità? E che succede se hai un’analoga catena di
congiunzioni, del tipo A  B … P … P ….Q ?
FORME NORMALI
Con l’algoritmo per costruire le tavole di verità sappiamo costruire i valori di verità di qualsiasi
proposizione. Possiamo porci il problema inverso: dalla tavola di verità costruire una proposizione che
abbia quella tavola di verità. Era questo un problema importante quando i circuiti logici erano costruiti con i
relais.
Ad esempio, data la tavola di verità X, possiamo trovare una proposizione che abbia tale tavola di verità?:
•
P Q R
X
?
??
•
0 0 0
0
0
0
•
0 0 1
1
0
1
•
0 1 0
0
0
0
•
0 1 1
1
0
0
•
1 0 0
1
0
0
•
1 0 1
1
0
0
•
1 1 0
0
0
0
•
1 1 1
1
1
0
Prendiamo una delle interpretazioni che ha valore di verità 1, ad esempio quella relativa alla
interpretazione 1 1 1, e consideriamo la tavola di verità che ha 1 solo in tale interpretazione (è
quella contrassegnata da ?). Quale proposizione ha tale tavola di verità? Ovviamente P  Q R.
•
Consideriamo un’altra tavola di verità analoga, che abbia cioè valore 1 solo per una interpretazione,
ad esempio la tavola contrassegnata da ??, che ha valore 1 solo per la interpretazione 0 0 1. Per
analogia la proposizione con una tale tavola sarà PQ R.
•
Consideriamo ora tutte le interpretazioni che hanno valore 1: 001, 011, 100, 101, 111. Tavole di
verità che hanno il valore 1 solo in una di queste saranno: (PQ R),(PQ R),(PQ R),
(PQ R),(PQ R). Se ora faccio la loro disgiunzione avrò una proposizione con la tavola di verità
X: (PQ R)(PQ R)(PQ R)(PQ R)(PQ R) , una disgiunzione di
congiunzioni, nota come forma normale disgiuntiva.
Se ora applico la proprietà distributiva dell’ rispetto all’, e uso le proprietà dei connettivi per
semplificarla, la trasformo in una congiunzione di disgiunzioni, detta forma normale congiuntiva, o
anche forma di clausola, che sarà molto importante nella programmazione logica che vedremo più
in là. Nel nostro esempio la forma di normale congiuntiva è (P  R  Q)  (P  R  Q)  (P  R 
Q), o in forma più semplice (P  R)  (R  Q) (P  R)  (R  Q) (Verifica!)
PROBLEMI
1. Date le due proposizioni : A(BC)
e (AB)C,
a) Verifica con le tavole di verità se sono equivalenti
a)
A B C
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
(BC) A(BC) (AB) (AB)C
1
1
0
1
1
1
0
1
1
1
1
1
1
1
0
1
0
0
0
0
0
0
1
1
1
1
1
1
1
1
0
1
Dimostra che sono equivalenti con le regole di trasformazione tra formule equivalenti (de
Morgan, etc.)
A(BC)
 A (BC)
( A B) C
 (A B)C
(AB)C