MARCELLO F RIXIONE
DISPENSE DI
RAPPRESENTAZIONE DELLA CONOSCENZA
Gennaio 2001
1
Scopi e obiettivi
Lo scopo di questa dispensa† è introdurre il lettore all’area della rappresentazione della
conoscenza. Dopo lo studio della dispensa, il lettore dovrebbe aver appreso:
•
•
•
i principi generali e i problemi affrontati in rappresentazione della conoscenza;
le nozioni di base della logica proposizionale e il linguaggio della logica dei predicati;
le nozioni di base dei sistemi a rete semantica, a frame e a regole di produzione.
1 – Introduzione
Fino alla prima metà degli anni sessanta la ricerca in IA è stata dominata dallo sviluppo di
metodi generali per la risoluzione di problemi, metodi cioè che non dipendessero dagli specifici
domini per cui erano stati progettati. A partire dalla seconda metà degli anni sessanta iniziò a farsi
strada l’opinione che tale impostazione fosse limitata, e che non potesse portare a risultati
pienamente soddisfacenti. Si giunse infatti alla consapevolezza che, se si volevano abbandonare
domini estremamente astratti e semplificati (ad esempio, i giochi) per passare a problemi più vicini
a quelli del mondo reale, la simulazione del comportamento intelligente non potesse prescindere dal
disporre di un ampio bagaglio di conoscenze sul mondo in cui il sistema deve operare. I metodi per
la risoluzione di problemi avrebbero dovuto interagire ed essere integrati con articolate
rappresentazioni di tali conoscenze.
Nacque così il settore dell’IA noto come rappresentazione della conoscenza, che ha come scopo
sviluppare formalismi adatti a rappresentare nei programmi di IA le conoscenze necessarie. In
generale, per soddisfare questa esigenza, un sistema di rappresentazione della conoscenza deve
consistere di:
a) un linguaggio di rappresentazione, ossia di un insieme di strutture sintattiche (in accordo con
l’ipotesi del sistema di simboli fisico di Newell e Simon) adatte a codificare le informazioni che
si intendono rappresentare, e tali da poter essere implementate nella memoria di un calcolatore;
b) un insieme di regole, o di operazioni, che consentano di manipolare tali strutture sintattiche in
accordo con il significato che è loro assegnato. L’applicazione delle regole deve consentire di
ottenere le inferenze volute, e le regole devono poter essere formulate sotto forma di procedure
effettive.
I sistemi di rappresentazione della conoscenza che sono stati proposti in IA sono molteplici. In
questo capitolo ne presenteremo alcuni tra i più diffusi e rappresentativi. I due requisiti a) e b) sopra
enunciati sono soddisfatti dai sistemi formali che, indipendentemente dai problemi e dalle esigenze
dell’IA, sono stati sviluppati in logica matematica. Questo ha fatto sì che alcuni ricercatori di IA
abbiano reputato la logica uno strumento adeguato per affrontare il problema della rappresentazione
della conoscenza. Altri hanno ritenuto che la logica non fosse adatta allo scopo. Questa
contrapposizione ha dato luogo ad accesi dibattiti nel corso degli anni ’70 e ’80 (si veda ad esempio
il §3.2 di Frixione 1994). In questo capitolo, il paragrafo 2 tratta dell’uso della logica come
strumento di rappresentazione in IA; i paragrafi successivi sono dedicati a formalismi di
rappresentazione originariamente pensati come alternative alla logica: reti semantiche (§3), frame
(§4), sistemi a regole di produzione (§5).
†
Questa dispensa è una versione estesa del capitolo sulla rappresentazione della conoscenza di un Manuale di
intelligenza artificiale per le scienze umane, a cura di Ernesto Burattini e Roberto Cordeschi, che apparirà per i tipi
dell’editore Carocci.
2
2 – La logica
La logica è una disciplina ben più antica dell’IA, ed è nata con intenti del tutto indipendenti da
essa (sulla storia della logica si veda ad esempio Kneale e Kneale 1962). Tuttavia è stata ritenuta
adatta da molti a rappresentare le conoscenze nei programmi di IA. In questo capitolo esamineremo
sinteticamente alcuni aspetti della logica che sono rilevanti da questo punto di vista.
Oggetto di studio della logica sono i nessi inferenziali tra enunciati. Per enunciato, o
proposizione, si intende qualunque espressione linguistica che possa essere vera oppure falsa. Ad
esempio, sono proposizioni “Carlo ha il raffreddore”, “2+2 = 5” e “Se piove ti bagni”, ma non lo
sono “Carlo”, “2”, “+”, “se”. Un’inferenza è un processo che, a partire da alcuni enunciati assunti
come punto di partenza (le premesse dell’inferenza), porta ad asserire un altro enunciato (la
conclusione dell’inferenza). Nell'esempio E1 riportiamo alcune inferenze formulate nel linguaggio
ordinario.
Esempio E1 - Alcune inferenze
(1) Mario è architetto oppure è geometra.
Se Mario fosse architetto, allora Mario sarebbe laureato.
Mario non è laureato.
Quindi: Mario è geometra.
(premessa)
“
“
(conclusione)
(2) Giovanni Paolo II è siciliano.
Tutti i siciliani sono giardinieri.
Quindi: Giovanni Paolo II è giardiniere.
(3) Tutti i cigni osservati sino ad ora in Europa sono bianchi.
Tutti i cigni osservati sino ad ora in Nord America sono bianchi.
Tutti i cigni osservati sino ad ora in Sud America sono bianchi. […]
Non sono stati mai osservati cigni che non fossero bianchi.
Quindi: Tutti i cigni sono bianchi.
(4) L’assassino ha sporcato di fango il tappeto.
Chiunque fosse entrato dal giardino avrebbe sporcato di fango il tappeto.
Quindi: L’assassino è entrato dal giardino.
(5) Gli uccelli, salvo eccezioni, sono in grado di volare.
Titti è un uccello.
Quindi: Titti è in grado di volare.
La logica tradizionalmente si occupa soltanto di inferenze deduttivamente valide. Si consideri
una generica inferenza con premesse P1 … Pn e con conclusione C. Si dice che essa è
deduttivamente valida (o anche soltanto valida) se e soltanto se, ogni qual volta sono vere P1 … Pn ,
allora è vera anche C (ossia, se non può succedere che allo stesso tempo P1 … Pn siano vere e C sia
falsa). Si dice anche che un’inferenza con queste caratteristiche costituisce un ragionamento
deduttivo, e la conclusione C viene detta conseguenza logica delle premesse P1 … Pn .
In altri termini, le inferenze valide conservano la verità delle premesse. Questo non vuol dire
che, affinché un’inferenza sia valida, debba avere premesse e conclusione vere. Ad esempio,
l’inferenza (2) è valida, ma le sue premesse e la conclusione sono false. Quello che è importante è
che se le premesse sono vere, allora deve esserlo anche la conclusione.
Non tutte le inferenze “sensate” sono ragionamenti deduttivi. Tra le inferenze dell’esempio E1,
(1) e (2) sono deduttivamente valide, mentre (3), (4) e (5) non lo sono. Infatti in esse la conclusione
3
potrebbe risultare falsa pur essendo vere tutte le premesse. Ad esempio, potrebbe esserci da qualche
parte un cigno nero che nessuno ha mai osservato, oppure l’assassino potrebbe aver sporcato il
tappeto deliberatamente per sviare le indagini, oppure Titti potrebbe essere un pinguino. In (3) la
conclusione è una generalizzazione delle informazioni contenute nelle premesse. Questo tipo di
ragionamento va sotto il nome di ragionamento induttivo. In (4) nella conclusione si cerca di
formulare un’ipotesi che spieghi i fatti delle premesse. Questo tipo di ragionamento va sotto il nome
di ragionamento abduttivo. Infine, (5) è un esempio di ragionamento per default, un tipo di
ragionamento su cui torneremo più nei dettagli nel §4. Inferenze come queste, sebbene legittime e
utili sotto molti punti di vista, non sono oggetto di studio della logica nella sua forma tradizionale.
Esercizio: quali delle seguenti espressioni sono proposizioni?
a) La capitale d’Italia;
b) Roma è la capitale d’Italia;
c) La capitale d’Italia è Kabul;
d) Caspita!;
e) 2+3 = 6;
f) 2+3;
g) 5;
h) 2+3=5;
i) Chi tocca i fili muore;
l) O Mario è andato al cinema, oppure è andato a teatro;
m) o rosso, o blu.
[Risp.: sono proposizioni b), c), e), h), i), l)]
Esercizio: quali delle seguenti inferenze sono valide ?
a) O piove o nevica. Non piove. Quindi: nevica.
b) Le lampadine bruciate non si accendono. Questa lampadina non si accende.
Quindi: Questa lampadina è bruciata.
c) Le lampadine nuove si accendono. Questa lampadina non si accende.
Quindi: Questa lampadina non è nuova.
d) I cani sono mammiferi. Nessun mammifero vola. Quindi: nessun cane vola.
e) Qualche inglese è laureato. Qualche laureato è colto. Quindi: qualche inglese è colto.
f) I cani grandi sono affettuosi. Fido è un cane. Quindi: Se Fido è grande, allora è affettuoso
g) Qualche italiano è poeta. Qualche poeta è cinese. Quindi: qualche italiano è cinese.
[Risp.: sono valide le inferenze a), c), d), f)]
Esercizio: ci possono essere inferenze valide con premesse false e conclusioni vere? Se sì, fare un
esempio.
[Risp.: ecco due esempi di inferenze valide con entrambe le premesse false e la conclusione
vera: Tutte le città dell’Argentina sono città di mare; Genova è una città dell’Argentina ; quindi:
Genova è una città di mare. I cinesi sono europei; Ciampi non è europeo; quindi: Ciampi non è
cinese.]
2.1 La formalizzazione della logica proposizionale
In logica, lo studio delle inferenze valide si basa su di un processo di formalizzazione: viene
elaborato un linguaggio formale in cui esprimere come formule le premesse e le conclusioni, e delle
regole di inferenza che operano sulle formule; tali regole consentono di derivare conclusioni dalle
premesse.
La logica proposizionale cattura le forme più semplici di inferenza logica, ossia quelle della cui
validità si può rendere conto senza prendere in considerazione la struttura interna delle proposizioni
4
atomiche. In logica si dicono atomiche quelle proposizioni che non possono essere ulteriormente
scomposte in altre proposizioni. Esempi di proposizioni atomiche del linguaggio ordinario sono
“Giorgio corre”, “Roma è la capitale d’Italia”, “Piove”. Per rendere conto della validità delle
inferenze proposizionali non occorre scomporre le proposizioni atomiche in componenti più
elementari.
Nel linguaggio formale della logica proposizionale rappresentiamo le proposizioni atomiche
mediante lettere proposizionali: a, b, c, d, … Nell’inferenza (1) dell’esempio E1 si possono
individuare tre proposizioni atomiche distinte, che rappresenteremo con le lettere proposizionali a, g
e l:
a = “Mario è architetto”
g = “Mario è geometra”
l = “Mario è laureato”
Le proposizioni atomiche possono essere combinate tra loro per formare proposizioni composte.
Esempi di proposizioni composte del linguaggio ordinario sono “Se la temperatura sale, il ghiaccio
si scioglie”, “Giorgio corre e Marco cammina”, “Piove oppure fa freddo”. Nel linguaggio
formalizzato della logica proposizionale le proposizioni composte si rappresentano combinando tra
loro le lettere proposizionali mediante opportuni connettivi proposizionali. Chiameremo formule
proposizionali sia le singole lettere proposizionali, sia le espressioni complesse ottenute
combinando le lettere proposizionali per mezzo dei connettivi. D’ora in avanti utilizzeremo le
lettere maiuscole A, B, C, …, P1, P2, P3, … per indicare formule proposizionali generiche.
Introduciamo quattro connettivi proposizionali: negazione, congiunzione, disgiunzione e
condizionale materiale. La negazione si indica con il simbolo ¬. Data una formula A, la sua
negazione si rappresenta con la formula ¬A. Intuitivamente, il significato della negazione è
riconducibile a quello della parola “non” del linguaggio ordinario. Se A è vera, allora ¬A è falsa; se
A è falsa, allora ¬A è vera. Poiché la negazione si applica a una sola formula alla volta, si dice che
è un connettivo a un argomento.
La congiunzione si indica con il simbolo ∧. Si tratta di un connettivo a due argomenti, che serve
cioè a collegare tra loro due formule: date le formule A e B, la loro congiunzione si rappresenta con
la formula A ∧ B. Il significato della congiunzione ricorda quello della “e” del linguaggio ordinario:
A ∧ B è vera se sia A che B sono vere, ed è falsa in tutti gli altri casi.
La disgiunzione si indica con il simbolo ∨. Anche la disgiunzione è un connettivo a due
argomenti. Il significato della disgiunzione è simile a quello della parola “oppure” del linguaggio
ordinario intesa in senso inclusivo. Vale a dire, una formula A ∨ B è vera se e soltanto se è vera
almeno una delle due formule A e B, è quindi falsa nel caso che A e B siano entrambe false.
Il condizionale materiale è un connettivo a due argomenti che si indica con il simbolo →. Il
significato di una formula A → B è “Non si dà il caso che sia vera A e falsa B”. Cioè, A → B è
falsa se A è vera e B è falsa, ed è vera in tutti gli altri casi. Il connettivo → approssima il significato
dell’espressione “se … allora …” del linguaggio ordinario, per quanto è possibile fare tenendo
conto esclusivamente dei valori di verità degli enunciati (e non, ad esempio, delle connessioni
casuali tra di essi). Pertanto, A → B si legge “se A allora B”.
In sintesi, il significato dei quattro connettivi che abbiamo introdotto può essere schematizzato
mediante le seguenti tavole di verità, dove A e B sono formule, mentre V e F rappresentano
rispettivamente i valori di verità vero e falso. Le tavole specificano come, al variare del valore di
verità di A e di B (o, nel caso della negazione, soltanto di A), varia il valore di verità delle formule
ottenute per mezzo dei diversi connettivi:
A
V
F
¬A
F
V
A
V
V
B
V
F
A∧ B
V
F
5
A∨ B
V
V
A→B
V
F
F
F
V
F
F
F
V
F
V
V
Finestra F0 – La tavola di verità del condizionale materiale
Dato un connettivo proposizionale qualunque (indichiamolo, ad esempio, con ⊗), esso si dice
verofunzionale se e solo se il valore di verità di un enunciato composto A ⊗ B dipende
esclusivamente dal valore di verità di A e di B (in altri termini: dati i valori di verità di A e di B,
deve potersi determinare in modo univoco il valore di verità di A ⊗ B). I connettivi ∧, ∨ e ¬ sono
verofunzionali.
Nel linguaggio ordinario le espressioni del tipo se … allora …. di solito non sono puramente
verofunzionali: il valore di verità di un enunciato del tipo se A allora B non dipende esclusivamente
dai valori di verità degli enunciati A e B. Spesso ad esempio se… allora … ha sfumature di tipo
causale. Un tipico esempio di enunciati del tipo se … allora … che non sono verofunzionali sono i
cosiddetti condizionali controfattuali, ossia quegli enunciati che asseriscono cosa sarebbe successo
se si fosse verificato un evento che nella realtà non si è verificato (ad esempio: se i dinosauri non si
fossero estinti, allora l'uomo non si sarebbe mai evoluto, oppure se la sveglia avesse suonato,
allora non avrei perso il treno).
Per rendersi conto che il se ... allora ... controfattuale non è verofunzionale si considerino i due
enunciati controfattuali seguenti:
(a) Se Dante fosse morto a cinque anni, allora non avrebbe scritto la Divina Commedia.
(b) Se Dante fosse morto a cinque anni, allora la Luna sarebbe fatta di formaggio.
In entrambi i casi l'antecedente (ossia, l'enunciato che segue il se) è falso, perché Dante non è
morto a cinque anni. Analogamente, in entrambi è falso il conseguente (ossia, l'enunciato che segue
l'allora): non è vero che Dante non ha scritto la Divina Commedia, così come non è vero che la
Luna è di formaggio. Tuttavia, tutti diremmo che (a) è vero mentre (b) è falso. Quindi, abbiamo due
enunciati (a) e (b) del tipo se A allora B, in entrambi i quali sia A che B sono falsi. Ma (a) è vero e
(b) è falso. Di conseguenza, questo uso del se ... allora ... non è verofunzionale: non basta sapere il
valore di verità di A e di B per sapere il valore di verità di se A allora B.
I connettivi che si studiano nella logica proposizionale classica (come congiunzione,
disgiunzione inclusiva, negazione) sono tutti verofunzionali. Con i connettivi della logica
proposizionale non è quindi possibile catturare il significato di espressioni del tipo se … allora …
nella loro interezza. La tavola di verità del condizionale materiale rappresenta, per così dire, una
approssimazione del significato di se … allora … che si può ottenere con strumenti verofunzionali.
In particolare, il condizionale materiale è il tipo di condizionale che normalmente viene
impiegato nel ragionamento matematico. Su di esso si basa la possibilità delle dimostrazioni per
assurdo. Per dimostrare per assurdo un enunciato del tipo se A allora B si procede nel modo
seguente. Si assume che A sia vera e che al contempo B sia falsa (ipotesi d'assurdo). Poi, a partire
da queste due assunzioni, si deriva una contraddizione. In questo modo si fa vedere che non è
possibile che A sia vera e che contemporaneamente B sia falsa. Da ciò si inferisce la verità di se A
allora B. La correttezza di questo tipo di ragionamento è garantita solo se si presuppone che
l'enunciato se A allora B sia falso esclusivamente nel caso in cui A è vera e B è falsa, che è appunto
quanto avviene nel caso del condizionale materiale. Quindi, se si accettano le dimostrazioni per
assurdo di enunciati del tipo se A allora B, si assume implicitamente che il se ... allora ...
dell'enunciato da dimostrare sia un condizionale materiale.
In ogni caso, il ruolo del condizionale materiale non è limitato alla formalizzazione delle
inferenze matematiche; esso ha molteplici impieghi anche nell’analisi del ragionamento ordinario
(vedremo alcuni semplici esempi nel seguito). Esso inoltre serve come base per definire
6
logicamente forme di condizionale non verofunzionali, più adeguate a catturare varie forme di
ragionamento ordinario.
A questo punto, possiamo tornare all’inferenza (1) dell’esempio E1, traducendone le premesse 13) e la conclusione 4) nel linguaggio della logica proposizionale:
1) a ∨ g
2) a → l
3) ¬l
4) g
(“Mario è architetto oppure è geometra”)
(“Se Mario fosse architetto, allora Mario sarebbe laureato”)
(“Mario non è laureato”)
(“Mario è geometra”)
Nelle formule in cui compaiano più connettivi, vengono impiegate parentesi per stabilire
l’ordine con cui i connettivi devono essere applicati. Per evitare parentesi inutili, si stabilisce che il
simbolo di negazione ¬ abbia priorità maggiore dei simboli di congiunzione ∧ e disgiunzione ∨, i
quali a loro volta hanno priorità maggiore del condizionale →. Così, ad esempio, la formula ¬a ∧ b
si legge (¬a) ∧ b e non ¬(a ∧ b), e le formule a → b ∧ c e a ∨ b → c si leggono rispettivamente a
→ (b ∧ c) e (a ∨ b) → c e non (a → b) ∧ c e a ∨ (b → c).
Finestra F1 - Alcune leggi logiche
Due formule del tipo ¬(A ∧ B) e ¬A ∨ ¬B sono tra loro logicamente equivalenti, nel senso che
assumono gli stessi valori di verità al variare dei valori di verità di A e di B. Questo si può
verificare utilizzando le definizioni dei connettivi sopra riportate per costruire le seguente tavola di
verità:
A B ¬ ( A ∧ B) ¬ A ∨ ¬ B
V V F V V V F V F F V
V F V V F F F V V V F
F V V F F V V F V F V
F F V F F F V F V V F
In questa tavola viene calcolato il valore di verità delle due formule per ciascuna combinazione
dei valori di A e di B. L’equivalenza delle due formule si può constatare confrontando i valori delle
colonne evidenziate in grassetto. Analogamente, è possibile verificare che ¬(A ∨ B) equivale a ¬A
∧ ¬B. Queste due equivalenze vanno sotto il nome di leggi di De Morgan.
Riportiamo alcune altre leggi logiche che possono essere verificate in maniera analoga:
¬¬A
A∧ B
A∨ B
(A ∧ B) ∧ C
(A ∨ B) ∨ C
A ∧ (B ∨ C)
A ∨ (B ∧ C)
equivale a
equivale a
equivale a
equivale a
equivale a
equivale a
equivale a
A
B∧ A
B∨ A
A ∧ (B ∧ C)
A ∨ (B ∨ C)
(A ∧ B) ∨ (A ∧ C)
(A ∨ B) ∧ (A ∨ C)
(idempotenza)
(commutatività di ∧)
(commutatività di ∨)
(associatività di ∧)
(associatività di ∨)
(leggi distributive)
Si noti che, se una formula A equivale a una formula A', allora, ogni qual volta compaia A, le si
può sostituire A', e viceversa.
7
Si noti inoltre che, per l'associatività di ∧, non c'è differenza tra (A ∧ B) ∧ C e A ∧ (B ∧ C), per
cui, per semplicità, si può scrivere A ∧ B ∧ C. Analogamente, si può scrivere A ∨ B ∨ C.
Esercizio: verificare le equivalenze della finestra F1 per mezzo delle tavole di verità.
Veniamo ora alle regole di inferenza che consentono di manipolare le formule della logica
proposizionale. Poiché la logica si occupa di inferenze deduttive, le regole impiegate in logica
devono consentire di ottenere inferenze deduttivamente corrette. In generale, una regola di inferenza
ha la forma:
P1 K Pn
C
dove P1 … Pn sono le premesse della regola, e C è la conclusione. Una regola di inferenza si dice
valida se conserva la verità delle premesse, ossia se, ogni qual volta P1 … Pn sono vere, allora è
vera anche C. L’ordine delle premesse è inessenziale.
In logica sono state studiate molteplici regole di inferenza. Qui di seguito prenderemo in
considerazione una regola particolare, detta regola di risoluzione, che è alla base di un metodo di
inferenza adatto dal punto di vista computazionale, e largamente impiegato nei sistemi di
intelligenza artificiale.
Le formule che svolgono il ruolo di premesse e di conclusioni della regola di risoluzione devono
avere una particolare forma sintattica, detta forma a clausole. Una clausola è una disgiunzione L1 ∨
L2 ∨ … ∨ Ln , dove ciascuna Li può essere una lettera proposizionale, oppure una lettera
proposizionale negata (le Li vengono dette letterali). Il fatto che la regola di risoluzione si applichi
solo a clausole non è una grave limitazione, in quanto qualunque formula proposizionale può essere
tradotta in clausole. In primo luogo, è facile mostrare che, date due formule A e B qualsiasi,
A → B è equivalente a ¬A ∨ B
(*)
come risulta dalla seguente tavola di verità:
A B A → B ¬ A ∨ B
V V V V V F V V V
V F V F F F V F F
F V F V V V F V V
F F F V F V F V F
Quindi, ogni qual volta si abbia una formula del tipo A → B, essa può essere sostituita da una
formula del tipo ¬A ∨ B. Utilizzando l’equivalenza (*) e le leggi logiche enunciate nella finestra
F1, si può trasformare qualsiasi insieme di formule proposizionali in un insieme di clausole.
Esempio E2: Trasformazione di formule proposizionali in forma a clausole
Riportiamo alcuni esempi della trasformazione di formule proposizionali in insiemi di clausole:
(a ∧ b) → c
¬ (a ∧ b) ∨ c
¬a ∨ ¬b∨ c
formula di partenza
in virtù dell’equivalenza (*)
in virtù di una delle leggi di De Morgan
8
a → ¬(b ∧ c)
¬ a ∨ ¬ (b ∧ c)
¬ a ∨ (¬b ∨ ¬ c)
¬a ∨ ¬b∨ ¬c
formula di partenza
in virtù dell’equivalenza (*)
in virtù di una delle leggi di De Morgan
in virtù dell’associatività di ∨
(a ∨ b) → c
formula di partenza
¬ (a ∨ b) ∨ c
in virtù dell’equivalenza (*)
(¬a ∧ ¬ b) ∨ c
in virtù di una delle leggi di De Morgan
(¬a ∨ c) ∧ (¬b ∨ c)
in virtù delle leggi distributive e della commutatività di ∨.
L’ultima formula equivale all’insieme formato dalle due clausole: ¬ a ∨ c, ¬ b ∨ c (in generale,
la congiunzione A ∧ B di due formule equivale all’insieme composto dalle due formule A e B, e
viceversa).
(a → b) → c
formula di partenza
¬ (¬a ∨ b) ∨ c
in virtù dell’equivalenza (*) (applicata due volte)
¬¬ (a ∧ ¬ b) ∨ c
in virtù di una delle leggi di De Morgan e dell'idempotenza
(a ∧ ¬ b) ∨ c
in virtù dell'idempotenza
(a ∨ c) ∧ (¬b ∨ c)
in virtù delle leggi distributive e della commutatività di ∨..
L’ultima formula equivale all’insieme formato dalle due clausole: a ∨ c, ¬ b ∨ c
Enunciamo ora la regola di risoluzione. Siano A1∨ ... ∨ An∨ B e ¬B ∨ C1∨ ... ∨ Cm due
clausole (dove Ai e Cj sono lettere proposizionali o lettere proposizionali negate, e B è una lettera
proposizionale). La regola di risoluzione, nella sua formulazione generale, si può formulare:
A1 ∨ K ∨ A n ∨ B
¬B ∨ C1 ∨ K ∨ Cm
A 1 ∨ K ∨ A n ∨ C1 ∨ K ∨ C m
Finestra F2 - La validità della regola di risoluzione
Consideriamo la seguente formulazione della regola di risoluzione:
A∨ B
¬B ∨ C
A∨ C
dove A e C sono clausole, e B è una lettera proposizionale.
Si può verificare che la regola dà luogo a ragionamenti validi facendo la tavola di verità delle
due premesse e della conclusione (poiché le formule sono tre, A, B e C, la tavola ha otto righe):
A
V
V
V
V
F
F
F
F
B
V
V
F
F
V
V
F
F
C A
V V
F V
V V
F V
V F
F F
V F
F F
∨
V
V
V
V
V
V
F
F
B
V
V
F
F
V
V
F
F
¬
F
F
V
V
F
F
V
V
9
B
V
V
F
F
V
V
F
F
∨
V
F
V
V
V
F
V
V
C
V
F
V
F
V
F
V
F
A
V
V
V
V
F
F
F
F
∨
V
V
V
V
V
F
V
F
C
V
F
V
F
V
F
V
F
E’ facile constatare che in tutti i casi in cui sono vere entrambe le premesse, è vera anche la
conclusione. La regola formalizza quindi un’inferenza logicamente valida.
Vediamo alcune forme particolari che la regola di risoluzione può assumere. A sinistra è
riportata la forma che la regola assume se nella prima premessa non sono presenti A1 ... An ; a destra
è riportata la forma che la regola assume se non sono presenti C1 ... Cm nella seconda premessa.
B
¬ B ∨ C1 ∨ K ∨ Cm
C1 ∨ K ∨ C m
A1 ∨ K ∨ A n ∨ B
A1 ∨ K ∨ A n
¬B
Infine, se non sono presenti né A1 ... An né C1 ... Cm la regola assume la forma seguente, dove
con ⊥ indichiamo la clausola vuota, che equivale a una contraddizione:
B
¬B
⊥
Esempio E3: Casi particolari della regola di risoluzione
I seguenti sono due casi particolari della regola di risoluzione, che seguono dalla sua
formulazione generale:
¬A ∨ B
A
¬A ∨ B
¬B
B
¬A
Essi, in virtù dell’equivalenza (*), possono essere riformulati come segue:
A→ B
A
A→ B
¬B
B
¬A
Si tratta delle regole di inferenza che in logica sono note rispettivamente come Modus ponens e
Modus tollens. Un altro caso particolare della regola di risoluzione è il seguente:
¬A ∨ B
¬B ∨ C
A →B
B→C
ossia, in virtù di (*) :
¬A ∨ C
A→C
che esprime una sorta di “transitività” dell’implicazione materiale →. Un ulteriore caso è il
seguente:
¬A1 ∨ ¬ A 2 ∨ K ∨ ¬A n ∨ B
A1
A1 ∧ A 2 ∧ K ∧ A n → B
A1
ossia, in virtù di (*) :
¬A 2 ∨ K ∨ ¬A n ∨ B
A 2 ∧ K ∧ An → B
Utilizzando la regola di risoluzione si può definire un metodo generale di inferenza basato sulla
refutazione. La refutazione è un procedimento per assurdo. Per dimostrare per refutazione che la
conclusione C segue logicamente dalle premesse P1 … Pn si aggiunge alle premesse la negazione di
C. Se da P1 … Pn e da ¬C segue una contraddizione, allora non può essere che P1 … Pn siano vere e
che al tempo stesso C sia falsa, per cui se ne può concludere che C segue logicamente da P1 … Pn .
Come esempio, sviluppiamo l'inferenza (1) dell’esempio E1. Neghiamo la conclusione, e
trasformiamo in clausole le premesse e la negazione della conclusione:
1) a ∨ g
2) ¬ a ∨ l
3) ¬ l
4) ¬ g
Ora possiamo utilizzare la regola di risoluzione per mostrare mediante refutazione che l'inferenza
è corretta:
10
¬a∨l
¬a
¬l
a∨ g
¬g
g
⊥
Applicando la risoluzione alle premesse 2) e 3) si ottiene la clausola ¬ a; applicando la
risoluzione a ¬ a e alla premessa 1) si ottiene g; applicando infine la risoluzione a g e alla
negazione della conclusione 4) si ottiene la clausole vuota ⊥. Quindi, l'inferenza (1) dell’esempio
E1 è un’inferenza valida.
E’ possibile dimostrare che il metodo per refutazione basato sulla regola di risoluzione è corretto
e completo per la logica proposizionale. Ossia, intuitivamente, una formula A segue logicamente da
un insieme di formule Γ della logica proposizionale se e solo se dalla traduzione in clausole di Γ e
di ¬A si può derivare la clausola vuota per mezzo della regola di risoluzione. Il metodo per
refutazione basato sulla risoluzione risulta particolarmente adatto ad essere implementato mediante
programmi per calcolatore. Se si dispone di una certa base di conoscenza BC espressa nel
linguaggio della logica, e si vuol sapere se un certo fatto F segue logicamente da BC o meno, allora
si aggiunge a BC la negazione di F, e si verifica se si può derivare o meno la clausola vuota.
Esempio E3a: Un ulteriore esempio di inferenza in logica proposizionale
Si consideri la seguente inferenza:
1) Se piove mi bagno.
2) Se nevica ho freddo.
Quindi:
3) se piove oppure nevica mi bagno oppure ho freddo.
Le premesse e la conclusione possono essere formalizzate nel linguaggio della logica
proposizionale come segue (dove p = “Piove”, b = “Mi bagno”, n = “Nevica”, f = “Ho freddo”):
1) p → b
2) n → f
3) p ∨ n → b ∨ f
Aggiungendo alle due premesse la negazione della conclusione si ottiene il seguente insieme di
formule:
p→b
n→f
¬ (p ∨ n → b ∨ f)
Trasformando in clausole p → b si ottiene ¬ p ∨ b; trasformando in clausole n → f si ottiene ¬ n
∨ f;
La trasformazione in clausole di ¬ (p ∨ n → b ∨ f ) è più complessa, e comporta i passaggi
seguenti:
¬ ( ¬ (p ∨ n) ∨ (b ∨ f ))
¬ ¬ (p ∨ n) ∧ ¬ (b ∨ f )
(per (*))
(per De Morgan)
11
(p ∨
(p ∨
n) ∧ ¬ (b ∨ f )
n) ∧ ¬ b ∧ ¬ f
(per l’idempotenza di ¬)
(per De Morgan)
Quindi, la formula ¬ (p ∨ n → b ∨ f ) equivale all’insieme di clausole {p ∨ n, ¬ b, ¬ f }.
Si deve ora mostrare con la regola di risoluzione che dall’insieme di clausole riportato qui di
seguito segue una contraddizione:
¬p∨ b
¬n∨ f
p∨ n
¬b
¬f
Ciò si ottiene nel modo seguente:
¬p ∨ b
¬p
¬b
p∨n
¬n ∨ f
n
¬f
f
⊥
Esercizio: date le seguenti inferenze, si formalizzino premesse e conclusioni con il linguaggio della
logica proposizionale, le si trasformi nella forma a clausole, e si verifichi se le inferenze sono
corrette o meno con il metodo di refutazione basato sulla risoluzione.
a) Se ha nevicato vado a sciare; se vado a sciare sono contento; non sono contento; quindi non ha
nevicato.
b) Se piove non esco; se esco vedo gente; non vedo gente; quindi piove.
c) O piove o nevica; se non fa freddo non nevica; non piove; quindi fa freddo.
[risp.: a) e c) sono corrette, b) è scorretta]
2.2 Il linguaggio della logica dei predicati
Non tutte le inferenze valide possono essere formalizzate con gli strumenti della logica
proposizionale. Si consideri l'inferenza (2) dell'esempio E1. Un'analisi a livello di logica
proposizionale non consente di rendere conto della sua validità. A tal fine è necessario "smontare"
le proposizioni atomiche e tenere conto della loro struttura interna. Ciò è possibile passando a una
logica più espressiva, la logica dei predicati del primo ordine. La logica dei predicati è
un'estensione della logica proposizionale: tutto quanto è stato detto nel paragrafo precedente
continua a valere a livello predicativo. La differenza consiste nel fatto che il linguaggio consente di
rappresentare la struttura interna delle proposizioni atomiche, e che le regole di inferenza tengono
conto di tale struttura.
Nel linguaggio della logica dei predicati la struttura interna delle proposizioni atomiche viene
analizzata nei termini di costanti individuali e simboli predicativi. Le costanti individuali sono
simboli che rappresentano singoli oggetti del dominio. Come costanti individuali utilizzeremo le
prime lettere dell’alfabeto minuscole (eventualmente con pedici), o successioni di lettere minuscole,
come ad esempio: a, b, c, d, …, mario, giovanni_paolo_II, roma, … I simboli predicativi
rappresentano predicati che si applicano agli oggetti del dominio. Si possono avere predicati a un
12
argomento, ossia proprietà che si applicano a singoli oggetti, come ad esempio “… è rosso”, “… è
geometra”, “… è siciliano”, “… è la capitale d’Italia”, “… è più alto di Giorgio”, e predicati a più
argomenti, ossia relazioni che sussistono tra più oggetti, come ad esempio “… è la capitale di …”,
“… è più alto di …”, “… è compreso tra … e …”. Vi possono essere relazioni con due, tre, o con
un numero n qualsiasi di argomenti. Come simboli predicativi utilizzeremo lettere maiuscole
corsive o successioni di lettere corsive che cominciano con una lettera maiuscola, come ad esempio:
P, Q, R, S, …, Rosso, Geometra, Capitale_d’Italia, Capitale_di, …
Se P è una lettera predicativa a n argomenti, e c1, …, cn sono costanti individuali, allora P(c1, …,
cn ) è una formula predicativa atomica (che, intuitivamente, significa che gli oggetti c1, …, cn sono
nella relazione P). Esempi di formule atomiche sono P(a), Q(b), Geometra(mario),
Capitale_d’Italia(roma), Capitale_d’Italia(napoli), R(a, c), Capitale_di(italia, roma), S(c, d, f).
Le formule atomiche della logica dei predicati possono essere combinate tra loro mediante i
connettivi proposizionali visti nel paragrafo precedente, usando le stesse regole per l’uso delle
parentesi.
Esempio E4: Il linguaggio della logica dei predicati
Traduciamo nel linguaggio della logica dei predicati le premesse 1-3) e la conclusione 4)
dell’inferenza (1) dell’esempio E1:
1) Architetto(mario) ∨ Geometra(mario)
2) Architetto(mario) → Laureato(mario)
3) ¬ Laureato(mario)
4) Geometra(mario)
Con questi strumenti linguistici non è ancora possibile rappresentare tutti gli enunciati che ci
interessano. Si consideri la seconda premessa dell’inferenza (2) dell’esempio E1, ossia “Tutti i
siciliani sono giardinieri”. Con gli strumenti che abbiamo visto non è possibile rappresentare questo
enunciato per la ragione che in esso non si parla di alcun individuo specifico. Piuttosto, si esprime
una generalizzazione che tratta di individui qualsiasi. Essa può essere parafrasata come: “Dato un
qualsiasi individuo, se esso è un siciliano, allora esso è un giardiniere”. Per trattare questi casi si
introducono nel linguaggio della logica dei predicati altri due ingredienti. In primo luogo le
variabili individuali, che consentono di rappresentare individui generici del dominio. Indichiamo le
variabili con le ultime lettere dell’alfabeto minuscole: x, y, z, … Le variabili possono occupare il
posto di argomenti dei simboli predicativi. Se P è un simbolo predicativo a due argomenti, si può
scrivere ad esempio P(a, x), oppure P(z, b), oppure P(y, x).
Il secondo elemento nuovo che introduciamo nel linguaggio sono i quantificatori. Il
quantificatore universale "per ogni" si esprime col simbolo ∀. Un'espressione del tipo "∀x ..." si
legge "per ogni x ....". Così, ad esempio, la formula ∀x (Cane(x) → Mammifero(x)) si legge "Per
ogni generico individuo x, se x è un cane, allora x è un mammifero" (ossia, in altri termini, "Tutti i
cani sono mammiferi"). Costanti individuali e variabili quantificate possono essere usate
contemporaneamente nella stessa formula. Ad esempio, l'enunciato "Se Paolo è buono, allora tutti
lo amano" si può esprimere con la formula Buono(paolo) → ∀x Ama(x, paolo) (dove con il simbolo
predicativo Ama(x, y) indichiamo che x ama y).
Il quantificatore esistenziale si esprime col simbolo ∃. Un'espressione del tipo "∃x ..." si legge
"esiste almeno un x tale che ....". Così, ad esempio, la formula ∃x(Cane(x) ∧ Nero(x)) si legge
"Esiste almeno un individuo x, tale che x è un cane e x è nero" (ossia, in altri termini, "Ci sono dei
cani neri", oppure "Qualche cane è nero").
13
Esempio E5: Formalizzazione di enunciati quantificati universalmente ed esistenzialmente.
Si noti che un enunciato come:
a) “Tutti gli A sono B”
si rappresenta mediante la formula ∀x (A(x) → B(x)) (usando quindi l’implicazione materiale),
mentre un enunciato come:
b) “Qualche A è B”
si rappresenta con la formula ∃x (A(x) ∧ B(x)), (usando quindi la congiunzione). Riflettiamo sulla
ragione di questa asimmetria.
Che a) non si possa formalizzare usando la congiunzione è evidente: ∀x (A(x) ∧ B(x)) non
significherebbe che tutti gli oggetti che sono degli A sono anche dei B, ma che tutti gli oggetti sono
contemporaneamente sia degli A che dei B.
Che b) non si possa formalizzare usando l’implicazione materiale (scrivendo cioè ∃x(A(x) →
B(x))) diventa chiaro se si riflette sul significato di → quale risulta dalla sua tavola di verità. ∃x(A(x)
→ B(x)) significa che esiste almeno un individuo x che rende vera A(x) → B(x). Ma, per la tavola di
verità di →, perché sia vera A(x) → B(x) basta che sia falsa A(x). Di conseguenza, basta che esista
un individuo per cui non è vero A(x) per rendere vera ∃x(A(x) → B(x)). Ad esempio, nel mondo
reale ∃x(Cane(x) → Azzurro(x)) è vera perché c’è almeno un individuo che non è un cane. Mentre
non è vero che qualche cane è azzurro (ossia, che ∃x (Cane(x) ∧ Azzurro(x))).
Si noti anche che un enunciato come b) è “simmetrico”, nel senso che, ad esempio, dire che
qualche italiano è giardiniere equivale a dire che qualche giardiniere è italiano. Viceversa, a) non lo
è: dire che tutti gli italiani sono europei non è la stessa cosa che dire che tutti gli europei sono
italiani. Questa differenza è rispecchiata dal fatto che A(x) ∧ B(x) equivale a B(x) ∧ A(x), mentre
A(x) → B(x) non equivale a B(x) → A(x).
In una stessa formula si possono usare più quantificatori. Ad esempio, l'enunciato "Se qualcuno è
buono, allora tutti lo amano" si può rappresentare con la formula ∀x (Buono(x) → ∀y Ama(y, x)).
Oppure, l'enunciato "Se qualcuno è buono, allora c'è qualcuno che lo ama" si può rappresentare con
∀x (Buono(x) → ∃y Ama(y, x)). Ovviamente, quando in una formula ci sono più variabili
quantificate bisogna fare attenzione che non si creino confusioni con i nomi delle variabili.
Il quantificatore universale e il quantificatore esistenziale sono interdefinibili: il quantificatore
universale si può definire per mezzo del quantificatore esistenziale e della negazione, e il
quantificatore esistenziale si può definire per mezzo del quantificatore universale e della negazione.
Si ha infatti che un’espressione del tipo “∀x …” equivale a “¬ ∃x ¬ …”, e che un’espressione del
tipo “∃x …” equivale a “¬ ∀x ¬ …”.
Esempio E6: interdefinibilità dei quantificatori
In virtù dell’interdefinibilità dei quantificatori, la formula:
∀x (Uomo(x) → Mortale(x))
(ossia: “Tutti gli uomini sono mortali”) può essere riscritta come :
¬ ∃x ¬(Uomo(x) → Mortale(x))
14
che, in virtù dell’equivalenza (*), può a sua volta essere riscritta come:
∃x ¬(¬Uomo(x) ∨ Mortale(x))
da cui, per De Morgan, si ottiene:
¬ ∃x (¬¬Uomo(x) ∧ ¬Mortale(x))
e, mediante l’idempotenza della negazione:
¬ ∃x (Uomo(x) ∧ ¬Mortale(x))
che può essere letta come: “Non esiste alcun individuo x che sia un uomo e allo stesso tempo non
sia mortale”.
Analogamente, la formula:
∃x (Cane(x) ∧ ¬Nero(x))
(C’è qualche cane che non è nero”) può essere riscritta come:
¬ ∀x ¬(Cane(x) ∧ ¬Nero(x))
da cui, per De Morgan:
¬ ∀x (¬Cane(x) ∨ ¬¬Nero(x))
e, applicando l’idempotenza della negazione:
¬ ∀x (¬Cane(x) ∨ Nero(x))
e, in virtù di (*):
¬ ∀x (Cane(x) → Nero(x))
che può essere letta come: “Non tutti i cani sono neri”.
Esercizio: rappresentare nel linguaggio della logica dei predicati le premesse 1-2) e la conclusione
3) dell’inferenza (2) dell’esempio E1.
[Risp.: 1) Siciliano(giovanni_paolo_II); 2) ∀x(Siciliano(x) → Giardiniere(x));
3) Giardiniere (giovanni_paolo_II)]
Esercizio:formalizzare i seguenti enunciati:
1) Gli amici di Carlo sono simpatici;
2) Carlo ha qualche amico simpatico;
3) Nessun dolce fatto da Maria è cattivo;
4) Gli unici dolci buoni sono i cannoli.
[Risp: 1) ∀x(Amico_di(carlo, x) → Simpatico(x)); 2) ∃x(Amico_di(carlo, x) ∧ Simpatico(x));
3) ¬∃x(Dolce(x) ∧ Ha_fatto(maria, x) ∧ Cattivo(x)); 4) ∀x(Dolce(x) ∧ Buono(x) → Cannolo(x)).
Esercizio: formalizzare l’enunciato "Tutte le ragazze amano un ragazzo".
[Risp.: l'enunciato è ambiguo, ammette cioè due letture: 1) "Ogni ragazza ama il rispettivo
ragazzo"; 2) "Esiste un unico ragazzo che tutte le ragazze amano". Queste due letture possono
15
essere formalizzate come segue: 1) ∀x (Ragazza(x) → ∃y (Ragazzo(y) ∧ Ama(x, y))); 2) ∃y
(Ragazzo(y) ∧ ∀x (Ragazza(x) → Ama(x, y)))]
Finestra F3 - Basi di dati e basi di conoscenza
Nella letteratura informatica capita spesso di incontrare la distinzione tra basi di dati (data base)
e basi di conoscenza (knowledge base). Una base di dati è un archivio di informazioni conservato su
supporto informatico, strutturato in maniera da essere consultabile in modo veloce, sicuro e
flessibile. La tecnologia delle basi di dati è estremamente importante dal punto di vista applicativo.
Basti pensare ai data base che contengono i dati dei clienti di una banca, o le informazioni relative
alla gestione di un’azienda. Le basi di conoscenza possono essere viste come basi di dati più
“intelligenti”. La distinzione è una questione di grado. Le basi di dati sono meno espressive, ma
molto efficienti dal punto di vista computazionale, e possono gestire masse enormi di dati. Le basi
di conoscenza consentono di rappresentare informazioni più ricche e complesse, ma
computazionalmente sono meno efficienti.
Dal punto di vista logico, una base di dati può essere vista come un grande insieme di formule
atomiche della logica dei predicati, del tipo R(c1, ..., cn ). Viceversa, in una base di conoscenza
possono essere rappresentate informazioni espresse in un formato più ricco, utilizzando ad esempio
la negazione, la disgiunzione, il condizionale o i quantificatori. Dal punto di vista inferenziale, i
sistemi per la gestione delle basi di dati permettono solo inferenze semplici ma molto veloci ed
efficienti (essenzialmente, consentono di reperire le informazioni che sono già rappresentate
esplicitamente nel data base). Le basi di conoscenza consentono invece di effettuare inferenze più
complesse ma più onerose dal punto di vista computazionale. Questo riflette un aspetto generale
della rappresentazione della conoscenza: quanto più un formalismo è ricco dal punto di vista
espressivo, tanto peggiori sono le sue proprietà computazionali. Di conseguenza, è sempre
necessario cercare dei buoni compromessi tra espressività e trattabilità computazionale.
Come nel caso proposizionale, tutte le formule della logica dei predicati possano essere
trasformate in insiemi di clausole, e ad esse può essere applicata la regola di risoluzione. Il metodo
per refutazione basato sulla regola di risoluzione risulta corretto e completo anche per la logica dei
predicati. Tuttavia la traduzione in forma a clausole delle formule della logica predicativa comporta
alcuni aspetti tecnici che renderebbero la trattazione troppo lunga e complessa in questa sede.
Tralasceremo pertanto la trattazione generale degli aspetti inferenziali della logica dei predicati, e ci
limiteremo a prendere in considerazione alcuni esempi specifici, che ci consentiranno di effettuare
alcune considerazioni di ordine generale.
Consideriamo il seguente sillogismo:
Tutti gli uomini sono mortali. Socrate è un uomo. Quindi: Socrate è mortale.
Traduciamo premesse e conclusione nel linguaggio della logica dei predicati:
∀x(Uomo(x) → Mortale(x))
Uomo(socrate)
Quindi:
Mortale(socrate)
Aggiungendo alle premesse la negazione della conclusione si ottiene il seguente insieme di
formule:
1) ∀x(Uomo(x) → Mortale(x))
2) Uomo(socrate)
16
3) ¬ Mortale(socrate)
Dobbiamo ora riscrivere queste formule nella forma a clausole. La 2) e la 3) sono già clausole, e
non devono quindi essere modificate. Per quanto riguarda la 1), applichiamo in primo luogo
l’equivalenza (*) del §2.1, e otteniamo: ∀x(¬Uomo(x) ∨ Mortale(x)). Una delle regole per la
trasformazione in clausole delle formule predicative consente di eliminare tutti i quantificatori
universali posti all’inizio di una formula. Applicando questa regola possiamo riscrivere la 3) nella
forma seguente: ¬Uomo(x) ∨ Mortale(x), che è una clausola. Otteniamo quindi il seguente insieme
di clausole:
1) ¬Uomo(x) ∨ Mortale(x)
2) Uomo(socrate)
3) ¬ Mortale(socrate)
A questo punto si dovrebbe applicare la regola di risoluzione alle clausole 1-3), facendo in modo
da derivare la clausola vuota. Tuttavia, con gli strumenti visti sino ad ora, questo non è possibile. Si
considerino le clausole 1) e 2). ¬Uomo(x) non è la negazione di Uomo(socrate), perché nel primo
caso compare la variabile x, nel secondo la costante individuale socrate. La stessa cosa accade con
le clausole 1) e 3). Per poter applicare la risoluzione bisogna assegnare alla variabile x il valore
socrate. Questo può avvenire attraverso il procedimento detto unificazione: vengono “unificati” i
valori di x e di socrate. Quando, in una derivazione, applichiamo un’unificazione, riportiamo i due
termini unificati uguagliati tra parentesi quadre accanto alla linea che rappresenta l’applicazione
della regola di inferenza, come nella derivazione seguente. In questo modo diventa possibile
derivare la clausola vuota.
¬ Uomo ( x) ∨ Mortale ( x ) Uomo( socrate)
[x = socrate]
¬ Mortale( socrate)
Mortale ( socrate)
⊥
Si tenga presente che, in generale, si possono unificare una variabile con una costante
individuale, oppure due variabili, mentre, ovviamente, non si possono unificare tra loro due costanti
individuali.
Consideriamo ora una variante dell’esempio precedente:
Tutti gli uomini sono mortali. Socrate è un uomo. Quindi: qualche uomo è mortale.
Traducendo premesse e conclusione nel linguaggio della logica dei predicati, e aggiungendo alle
premesse la negazione della conclusione si ottiene il seguente insieme di formule:
1) ∀x(Uomo(x) → Mortale(x))
2) Uomo(socrate)
3) ¬∃y (Mortale(y))
In virtù dell’interdefinibilità dei quantificatori, la 3) si può riscrivere come ∀x ¬Mortale(x), che,
trasformata in clausole, diventa ¬Mortale(y). L’insieme di clausole che si ottiene è quindi il
seguente:
1) ¬Uomo(x) ∨ Mortale(x)
2) Uomo(socrate)
3) ¬ Mortale(y)
17
A questo punto si può usare la regola di risoluzione per derivare la clausola vuota, impiegando
l’unificazione come nell’esempio precedente:
¬ Uomo ( x) ∨ Mortale ( x )
Uomo( socrate)
[x = socrate]
¬ Mortale( y )
Mortale ( socrate)
[x = y = socrate]
⊥
In questo caso, è interessante notare che il processo di derivazione, oltre a produrre
l’informazione richiesta (che cioè ∃x (Mortale(x)) è effettivamente conseguenza logica di 1-2))
consente di ottenere anche un’informazione aggiuntiva: se si esaminano le unificazioni effettuate
per derivare la clausola vuota, se ne ricava l’informazione che è l’individuo socrate che ci ha
consentito di stabilire che esiste almeno un individuo che soddisfa la proprietà di essere mortale.
Vediamo ora un ulteriore esempio. Dato il seguente insieme di premesse:
1) ∀x(Cane(x) ∧ Basso(x) → Bassotto(x))
2) Cane(fido)
3) Cane(pluto)
4) Basso(pluto)
Si vuole stabilire se da 1-4) segue le conclusione che ∃y (Bassotto(y)). Aggiungendo a 1-4) la
negazione di ∃y (Bassotto(y)) e traducendo in clausole l’insieme di formule che ne risulta, si ottiene
l’insieme di clausole seguenti:
1) ¬Cane(x) ∨ ¬Basso(x) ∨ Bassotto(x))
2) Cane(fido)
3) Cane(pluto)
4) Basso(pluto)
5) ¬Bassotto(y)
Se ora procediamo ad applicare la regola di risoluzione partendo dall’alto verso il basso,
otteniamo questa derivazione:
¬ Cane( x) ∨ ¬ Basso ( x) ∨ Bassotto( x ) Cane( fido)
[ x = fido]
¬Bassotto( y )
¬ Basso ( fido ) ∨ Bassotto( fido)
[ x = y = fido ]
¬ Basso ( fido)
Giunti a questo punto, non c’è modo di applicare la risoluzione a partire dalla premessa
¬Basso(fido). Si è giunti quindi a un punto morto. Ma questo non vuol dire che non si possa
derivare la clausola vuota a partire da 1-5). Bisogna “disfare” l’unificazione x = fido, e provare
un’altra strada. E’ possibile tentare l’unificazione x = pluto, e in questo modo si avrà successo nel
derivare ⊥:
¬ Cane( x) ∨ ¬ Basso( x) ∨ Bassotto( x) Cane( pluto)
[x = pluto]
Basso ( pluto )
¬ Basso( pluto) ∨ Bassotto( pluto )
Bassotto( pluto )
⊥
18
¬Bassotto ( y )
[x = y = pluto]
Questo procedimento è una forma di backtracking. In questo modo si ottiene che, date le
premesse, effettivamente esiste almeno un bassotto, e che Pluto è tale.
Il backtracking si può anche causare “artificialmente” una volta che si sia già ottenuta una
risposta positiva, allo scopo di ottenere ulteriori risposte. Si consideri il seguente insieme di
formule:
1) ∀x(Cane(x) ∧ Basso(x) → Bassotto(x))
2) Cane(fido)
3) Cane(pluto)
4) Cane(cerbero)
5) Basso(pluto)
6) Basso(cerbero)
Si vuole stabilire se da 1-5) segue le conclusione che ∃y (Bassotto(y)). Questo esempio è identico
al precedente, salvo che ci sono due formule in più nelle premesse: Cane(cerbero) e
Basso(cerbero). Quindi ora, in base alle premesse, anche Cerbero è un bassotto. L’insieme di
clausole che si ottiene in questo caso è:
1) ¬Cane(x) ∨ ¬Basso(x) ∨ Bassotto(x))
2) Cane(fido)
3) Cane(pluto)
4) Cane(cerbero)
5) Basso(pluto)
6) Basso(cerbero)
7) ¬Bassotto(y)
Come nell’esempio precedente, si può derivare la clausola vuota effettuando l’unificazione x = y
= pluto. A questo punto però si può “forzare” il sistema a cercare un altro modo per derivare la
contraddizione (cioè, a fare altro backtracking). In questo modo si fa sì che il sistema produca
un’altra risposta, ottenendo:
¬ Cane ( x ) ∨ ¬ Basso (x ) ∨ Bassotto ( x ) Cane (cerbero )
[x = cerbero]
¬ Basso (cerbero ) ∨ Bassotto (cerbero )
Basso (cerbero )
Bassotto (cerbero )
⊥
¬Bassotto ( y )
[x = y = cerbero]
Così, si stabilisce che, oltre a pluto, anche cerbero rappresenta un individuo che, sulla base delle
premesse, può essere usato per derivare che esiste almeno un bassotto. In generale, causando
ripetutamente il backtracking si possono ottenere da un insieme di premesse tutti gli individui che
soddisfano una certa richiesta. Su questo meccanismo si fonda il funzionamento del PROLOG, un
linguaggio di programmazione basato sulla logica dei predicati, molto usato in IA.
Finestra F4 - La semantica modellistica
La semantica modellistica è un trattamento formale del significato dei linguaggi logici basato su
strumenti della teoria degli insiemi. Essa nasce con le ricerche sulla semantica del calcolo dei
predicati del primo ordine sviluppate da Alfred Tarski. In base alla semantica tarskiana, una
interpretazione I per una teoria del primo ordine è una coppia ordinata I = (D, ϕ). D è il dominio
dell'interpretazione, vale a dire, un insieme di oggetti sul quale sono interpretati i costrutti del
linguaggio. ϕ è una funzione interpretazione, che associa un riferimento in D ai vari costrutti del
linguaggio. Ad ogni costante individuale viene assegnato come riferimento un elemento di D, a ogni
19
simbolo predicativo P ad un argomento viene associato un sottoinsieme di D (intuitivamente,
l'insieme degli individui che sono dei P), e così via. Vi sono poi regole che permettono di stabilire il
riferimento di espressioni sintatticamente complesse a partire dal riferimento dei loro componenti.
In particolare, il valore di verità delle formule chiuse può essere determinato a partire dal
riferimento dei simboli atomici che vi compaiono.
Ad esempio, nel caso di una formula atomica come Cane(fido), essa è vera in un'interpretazione
I se e soltanto se ϕ(fido) ∈ ϕ (Cane), cioè, se l'oggetto del dominio D associato da ϕ alla costante
individuale fido appartiene al sottoinsieme di D associato da ϕ al simbolo predicativo ad un
argomento Cane.
Altre regole consentono di stabilire il valore di formule complesse a partire dal valore delle
formule che le compongono, come ad esempio Cane(fido) ∨ Gatto(pluto): questa formula è vera in
una interpretazione I se e soltanto se almeno una delle due formule Cane(fido) e Gatto(pluto) è vera
in I. Più complesso è il caso delle formule quantificate, come ad esempio ∀x (Cane(x) → Nero(x)).
Intuitivamente, una formula come questa è vera in I se ϕ(Cane) ⊆ ϕ(Nero) (cioè, se nel dominio D
l'insieme dei cani è un sottoinsieme degli oggetti neri).
Un'interpretazione I che rende vera una certa formula A è detta un modello di A. Analogamente,
un modello di un insieme di formule Γ è un'interpretazione che rende vere tutte le formule di Γ. Una
formula A è conseguenza logica di un insieme di formule Γ se tutti i modelli di Γ sono anche
modelli di A (cioè, se A è vera ogni qual volta è vero Γ). Una formula è valida se è vera in tutte le
interpretazioni (la nozione di formula valida corrisponde alla nozione di formula logicamente vera).
3 – Rappresentazioni strutturate: le reti semantiche
La logica come strumento per la rappresentazione della conoscenza in IA è stata criticata da
diversi punti di vista. Per un verso, le rappresentazioni logiche sono poco strutturate. La conoscenza
è rappresentata sotto forma di molti enunciati tra loro indipendenti. Di conseguenza, le informazioni
che vertono su un dato oggetto, o concetto, o evento, possono essere sparpagliate in molteplici
formule diverse della base di conoscenza. Di qui l’esigenza di organizzare le rappresentazioni in un
formato più consono agli scopi computazionali dell’IA. Per un altro verso, esistono tipi di inferenza
che, come abbiamo visto nel §2, non sono riconducibili a inferenze deduttivamente valide.
Le reti semantiche sono tra i formalismi per la rappresentazione della conoscenza che sono stati
sviluppati come alternative alla logica. In generale, una rete semantica è un grafo, di solito un grafo
diretto, in cui i nodi rappresentano concetti, e gli archi rappresentano relazioni tra i concetti. L'idea
di fondo è che tutte le informazioni relative a un dato concetto siano collegate al nodo che lo
rappresenta nella base di conoscenza, e siano accessibili a partire da esso, in modo da agevolare le
operazioni di reperimento delle informazioni e le inferenze. Esistono molteplici formalismi a rete
semantica, spesso anche molto diversi tra loro. Qui di seguito riportiamo alcuni esempi sviluppati
mediante un formalismo le cui caratteristiche sono comuni alla maggior parte dei sistemi esistenti.
Esso può essere considerato una versione semplificata del sistema KL-ONE (Brachman e Schmolze
1985).
20
animale
polmone
sostegno
del corpo
organo
respiratorio
scheletro
interno
mammifero
latte
alimento
dei cuccioli
animale
domestico
umano
padrone
cane
cane
domestico
spaniel
elsa
bassotto
fido
padrone
Figura 1
Nella fig. 1 presentiamo un esempio di rete semantica. In questa rete vengono impiegati due
diversi tipi di nodi:
•
nodi che corrispondono a concetti generici, e che rappresentano classi di individui (come ad
esempio animale, mammifero, bassotto, polmone, eccetera), raffigurati graficamente mediante
ellissi bianche;
•
nodi che corrispondono a concetti individuali, e che rappresentano individui specifici (in questo
esempio fido e elsa), raffigurati graficamente mediante ellissi grigie.
•
•
•
•
I nodi della rete nella figura 1 sono collegati da vari tipi di archi:
archi di sussunzione (detti anche archi isa, dall’inglese “is a”, ossia “è un”), rappresentati
graficamente mediante frecce nere spesse; gli archi di sussunzione collegano tra loro concetti
generici; un arco di sussunzione da un concetto A a un concetto B indica che A è un tipo
particolare, o una sottoclasse di B (ad esempio, cane è un tipo particolare di mammifero,
animale domestico è un tipo particolare di animale). In questo caso, si dice che A è
sottoconcetto di , o è sussunto da B, e che B è superconcetto di A.
Archi che rappresentano gli attributi di un concetto generico, rappresentati graficamente
mediante frecce nere sottili. Gli archi sono etichettati con il nome dell’attributo. Un attributo di
un concetto generico è caratterizzato per mezzo di un altro concetto. Ad esempio, nel caso di
animale domestico, l’attributo padrone è caratterizzato per mezzo del concetto essere umano (il
padrone di un animale domestico è un essere umano).
Archi di istanziazione, rappresentati mediante frecce grigie spesse. Collegano un concetto
individuale a un concetto generico. Un arco di individuazione da un concetto individuale A a un
concetto generico B indica che A è un’istanza di B (fido è un’istanza di cane domestico, elsa è
un’istanza di umano).
Archi che rappresentano gli attributi di un concetto individuale, rappresentati graficamente
mediante frecce grigie sottili. Sono il corrispettivo a livello di concetti individuali degli archi
che rappresentano gli attributi dei concetto generico. Ad esempio, nel caso dell’individuo fido
l’attributo padrone è soddisfatto dall’individuo elsa.
Così, la rete di fig. 1 descrive, tra le altre cose, i mammiferi come un tipo particolare di animali
che hanno come sostegno del corpo uno scheletro interno, come organo respiratorio dei polmoni e i
21
cui cuccioli si alimentano di latte, i cani come un tipo particolare di mammiferi, Fido come un
particolare cane domestico che ha come padrone Elsa, e così via.
Uno dei meccanismi di inferenza tipici delle reti semantiche consiste nell’ereditarietà. L’idea di
fondo è che le proprietà espresse per un concetto della rete vengano ereditate da tutti i suoi
sottoconcetti. Ad esempio, nella rete della figura il concetto cane, in quanto sottoconcetto di
mammifero, eredita tutti gli attributi che sono stati specificati per mammifero. E’ ammessa l’eredità
multipla, ossia è ammesso che un concetto erediti da più superconcetti diversi. Così, nella figura,
cane domestico eredita sia gli attributi di cane, sia quelli di animale domestico. In generale, per ogni
concetto, agli attributi ereditati dai superconcetti se ne possono aggiungere di nuovi. Inoltre, gli
attributi ereditati possono essere ulteriormente specificati localmente. Ad esempio la rete di fig. 2
afferma che il manto di un cavallo generico è di un colore non meglio specificato. Per cavallo baio
si specifica che il colore del manto deve essere bruno rossiccio (che, come indica l’arco isa, è un
tipo particolare di colore).
cavallo
cavallo
baio
colore
manto
colore
colore
manto
bruno
rossiccio
Figura 2
Esercizio: Rendere esplicite tutte le proprietà ereditate dal concetto cane domestico nella rete della
fig. 1
Un’ulteriore informazione che può essere associata agli attributi di un concetto consiste nelle
restrizioni di numero. Per ciascun attributo, è possibile specificare il numero minimo e il numero
massimo di oggetti che possono soddisfare quell’attributo. Graficamente, ciò si indica associando
all’arco che rappresenta l’attributo un’etichetta del tipo min/max (dove min è il limite minimo e max
è il limite massimo). Ad esempio, nel caso di organo respiratorio, si può rappresentare (fig. 3) il
fatto che ogni mammifero ha come organi respiratori almeno 2 e al massimo 2 polmoni (cioè, ne ha
esattamente due).
mammifero
organo
respiratorio
polmone
2/2
Figura 3
Il tipo di reti semantiche che abbiamo descritto sino a qui possono essere agevolmente tradotte
nel linguaggio della logica dei predicati, seguendo i criteri elencati qui di seguito.
•
•
•
I nodi che corrispondono a concetti generici vengono tradotti mediante simboli predicativi a un
argomento. Ad esempio i concetti mammifero, cane, umano della rete di fig. 1 vengono tradotti
mediante i simboli predicativi Mammifero(x), Cane(x), Umano(x).
I nodi che rappresentano specifici individui vengono tradotti mediante costanti individuali (ad
esempio elsa, fido).
Gli attributi dei concetti generici vengono ricondotti a simboli predicativi a due argomenti (ad
esempio Organo_respiratorio(x, y), Padrone(x, y)). L’attributo padrone che collega animale
domestico e umano viene tradotto con la formula: ∀x(Animale_domestico(x) → ∃y Padrone(x,
y) ∧ ∀z(Padrone(x, z) → Umano(z)) (ossia, per ogni x, se x è un animale domestico, allora esiste
un y tale che y è il padrone di x, e inoltre, per ogni z, se z è padrone di x, allora z è umano).
22
•
•
•
Gli archi di sussunzione vengono tradotti mediante implicazioni quantificate universalmente; ad
esempio l’arco isa tra cane e mammifero viene tradotto dalla formula: ∀x(Cane(x) →
Mammifero(x)) (ossia, per ogni x, se x è un cane, allora x è un mammifero).
Gli archi di istanziazione vengono tradotti mediante formule atomiche che impiegano i predicati
a un posto corrispondenti ai concetti generici, come ad esempio Cane_domestico(fido) e
Umano(elsa).
Gli attributi dei concetti individuali vengono tradotti mediante formule atomiche che impiegano
i predicati a due posti che corrispondono agli attributi dei concetti generici. Un esempio è
Padrone(fido, elsa).
In questa traduzione non abbiamo considerato le restrizioni di numero, il cui trattamento logico è
possibile, ma è più complicato, e richiede l’impiego del predicato di identità. In virtù della
traduzione descritta, i meccanismi di inferenza come l’ereditarietà possono essere ricondotti a usuali
inferenze logiche.
Esercizio: tradurre nel formalismo della logica dei predicati l’intera rete della figura 1.
Sebbene questo tipo di reti semantiche sia traducibile in logica dei predicati, ciò non comporta
che in generale logica dei predicati e reti semantiche siano tra loro equivalenti. Vi sono innanzi tutto
cose che si possono esprimere in logica, ma che non si possono esprimere con questo tipo di reti.
Una differenza evidente consiste nel fatto che le reti semantiche non consentono di rappresentare
direttamente relazioni a più di due argomenti. Si consideri ad esempio la relazione “offrire”. Essa
coinvolge tre individui: colui che offre, l’oggetto che viene offerto, e colui che riceve l’offerta. Ad
esempio, Mario offre un caffè a Giorgio. La soluzione più immediata per rappresentare la relazione
“offrire” in logica è quella di usare un simbolo predicativo a tre argomenti, ad esempio
Offrire(x,y,z), dove, poniamo, x è colui che offre, y è l’oggetto che viene offerto, e z è colui che
riceve l’offerta. Questa opzione non è praticabile nelle reti semantiche che abbiamo descritto. E’
possibile tuttavia utilizzare una strategia alternativa. Essa consiste nel rappresentare offrire come un
concetto generico, che sia sottoconcetto, ad esempio, del concetto azione (offrire è un tipo
particolare di azione). A questo punto, gli oggetti coinvolti nella relazione vengono rappresentati
come attributi del concetto offrire, come in fig. 4.
azione
persona
oggetto
soggetto
cosa
offrire
destinatario
soggetto
offrire#923
mario
giorgio
oggetto
caffè#452
destinatario
Figura 4
Per rappresentare il fatto che Mario offre un caffè a Giorgio si procede nel modo indicato nella
parte bassa di fig. 4. Si introduce un concetto individuale che rappresenta una particolare istanza di
offrire (che, in questo caso, abbiamo chiamato offrire#923). Come soggetto di offrire#923 si pone il
concetto individuale mario, come destinatario il concetto individuale giorgio (che sono entrambi
23
istanze di persona), e come oggetto un concetto individuale istanza di cosa, che abbiamo chiamato
caffè#452 (e che rappresenta quello specifico caffè che Mario ha offerto a Giorgio).
Vi sono altri aspetti della logica che non possono essere rappresentati in queste reti semantiche,
come la negazione o la disgiunzione, la quantificazione nella sua generalità. Tuttavia, è possibile
estendere il potere espressivo delle reti semantiche in modo da ottenere la stessa espressività della
logica dei predicati (Hendrix 1979; Shapiro 1979; cfr. anche Fum 1994 cap. 5, §2.2).
Esercizio: tradurre nel formalismo della logica dei predicati la rete della figura 4.
[Risp.: Si noti che si deve usare la stessa tecnica vista in precedenza. Quindi, ad esempio, al
concetto generico offrire farà corrispondere un predicato a un argomento Offrire(x), al concetto
individuale offrire#923 una costante individuale con lo stesso nome, il legame di individuazione tra
offrire#923 e offrire sarà rappresentato dalla formula atomica Offrire(offrire#923), e così via.]
Esercizio: un vantaggio della soluzione utilizzata per rappresentare Offrire in una rete semantica è
che si possono facilmente aggiungere nuovi attributi che caratterizzano il concetto. Modificare la
rete della figura 4 in modo da rappresentare come attributi anche il tempo e il luogo di un’azione, e
rappresentare il fatto che Mario ha offerto un caffè a Giorgio il 28 ottobre 1976 a Ravenna. Come si
sarebbero potute rappresentare le stesse informazioni in logica usando un predicato a più argomenti
del tipo di Offrire(x, y, z)?
[Risp.: Alla rete della fig. 4 si potrebbero aggiungere dei costrutti come questi:
luogo
tempo_di
luogo_di
tempo
offrire
luogo_di
ravenna
offrire#923
tempo_di
28 ottobre 1976
In logica, sfruttando la possibilità di usare simboli predicativi con un numero qualsiasi di
argomenti, si potrebbe introdurre un predicato a cinque posti Offrire(x, y, z, t, s), dove l’argomento
indicato dalla variabile t rappresenta il tempo, e l’argomento indicato dalla variabile s rappresenta il
luogo. Si noti però che, dal punto di vista del calcolo logico, Offrire(x, y, z) e Offrire(x, y, z, t, s)
sono due simboli predicativi distinti: il primo ha tre argomenti, mentre il secondo ne ha cinque. Di
per sé, non esiste alcuna relazione tra essi. Di conseguenza, se si vogliono usare entrambi
contemporaneamente, bisogna stabilire esplicitamente che relazioni li collegano. Ciò si ottiene
aggiungendo alla base di conoscenza delle formule opportune (dette postulati di significato). Ad
esempio, si può porre che:
∀x, y, z, t, s (Offrire(x, y, z, t, s) → Offrire(x, y, z))
(ossia, per ogni x, y, z, t e s, se x offre y a z al tempo t e nel luogo s, allora x offre y a z), e che:
∀x, y, z (Offrire(x, y, z) → ∃ t, s Offrire(x, y, z, t, s))
(ossia, per ogni x, y e z, se x offre y a z, allora esistono un t e un s tali che x offre y a z al tempo t e
nel luogo s)]
Per contro, le reti semantiche vengono spesso usate per rappresentare informazioni ed effettuare
inferenze che tradizionalmente non si possono esprimere in logica. Un esempio è la
rappresentazione di eccezioni all'ereditarietà. Spesso nelle reti semantiche gli attributi di un
concetto vengono usati per rappresentare caratteristiche che non valgono per tutte le sue istanze, ma
solo le sue istanze tipiche. Si consideri la fig. 5.
24
organo
respiratorio
alimento
dei cuccioli
arto
zampa
sostegno
del corpo
pelliccia
mammifero
protezione
del corpo
4/4
Figura 5
Rispetto a fig. 1, al concetto mammifero sono stati aggiunti i due attributi arto e protezione
del corpo. Il primo afferma che i mammiferi hanno esattamente quattro arti che sono delle zampe; il
secondo afferma che i mammiferi hanno il corpo protetto da pelliccia. Queste caratteristiche sono
certamente vere per la maggior parte dei mammiferi, e valgono per mammiferi “tipici” quali orsi,
gatti e cavalli. Esistono tuttavia numerose eccezioni: nei cetacei gli arti sono trasformati in pinne,
nei pipistrelli gli arti anteriori sono diventati ali, mammiferi invalidi possono avere un numero di
arti minore di quattro, esemplari mostruosi possono averne un numero maggiore, vi sono
mammiferi glabri o quasi come, di nuovo, i cetacei, o come gli esemplari di Homo sapiens. Gli
attributi arto e protezione del corpo così definiti non valgono per tutti i sottoconcetti di mammifero.
In casi del genere il meccanismo dell’eredità deve ammettere delle eccezioni.
La struttura a grafo delle reti semantiche consente di gestire in modo agevole vari tipi di
eredità con eccezioni. In genere, un concetto eredita gli attributi dei concetti che lo sussumono, a
meno che non vi siano conflitti con informazioni più specifiche. In tal caso l’eredità viene bloccata.
Si veda l’esempio di fig. 6.
colore
elefante
grigio
colore
elefante
reale
bianco
Figura 6
Nei casi tipici, il colore degli elefanti è il grigio. Tuttavia, supponiamo che gli elefanti reali siano
elefanti atipici, di colore bianco. Il fatto che il valore dell’attributo colore per elefante reale sia in
conflitto con il valore ereditato (una cosa non può essere contemporaneamente bianca e grigia)
comporta che per questo concetto il valore ereditato venga bloccato, e valga il valore definito
localmente. (Si noti che questo caso è diverso da quello della fig. 2. In quel caso non c’è conflitto,
perché bruno rossiccio è un tipo particolare di colore). In generale, si assume che in caso di
conflitto tra gli attributi ereditati valgano gli attributi dei concetti che stanno più in basso nella
gerarchia dei sottoconcetti. Questa strategia può creare dei problemi nei casi di eredità multipla,
quando gli stessi attributi possono essere ereditati con caratteristiche diverse da superconcetti
differenti.
In ogni caso, le eccezioni sfuggono a un trattamento con gli strumenti tradizionali della logica.
Per una rete come quella di fig. 6 una traduzione in logica dei predicati come quella definita sopra
genererebbe conclusioni errate e contraddittorie.
4 – Ragionamento per default, prototipi, frame
25
Il meccanismo dell’eredità con eccezioni descritto alla fine del paragrafo precedente è un
esempio particolare di un tipo di ragionamento che va sotto il nome di ragionamento per default
(default reasoning). Le inferenze per default sono estremamente diffuse nel cosiddetto
ragionamento di senso comune, ossia nei tipi di ragionamento che si effettuano abitualmente nella
vita quotidiana. Ciò dipende dal fatto che di solito gli agenti cognitivi non hanno accesso a tutte le
informazioni che potrebbero essere rilevanti in una data circostanza, e quindi devono saltare alle
conclusioni sulla base di informazioni incomplete. Una caratteristica importante del ragionamento
per default è che si tratta di una forma di ragionamento rivedibile: sulla base delle informazioni
disponibili vengono tratte certe conclusioni; se poi si acquisiscono nuove informazioni che sono in
conflitto con le conclusioni precedenti, allora tali conclusioni vengono ritirate. Ad esempio,
supponiamo di sapere che Dumbo è un elefante, e di non avere nessuna altra informazione
aggiuntiva. In tal caso, avremmo buone ragioni per ritenere che Dumbo sia un elefante tipico, e
quindi inferire che, in quanto al colore, Dumbo sia grigio. Qualora però si venisse a sapere che
Dumbo è un elefante reale, allora, sulla base di questa informazione aggiuntiva, si dovrebbe
rivedere la conclusione tratta in precedenza, per concludere che Dumbo non è grigio, bensì bianco.
Come abbiamo visto nel paragrafo 2, in relazione all’inferenza (5) dell’esempio E1, i
ragionamenti per default non sono inferenze logicamente valide. I ragionamenti per default
costituiscono un esempio di ragionamento non monotòno. Le inferenze deduttivamente valide
tradizionalmente studiate dai logici vengono dette monotòne, in quanto l’insieme delle conclusioni
cresce monotonicamente al crescere dell’insieme delle premesse. Se cioè si aggiungono nuove
premesse, l’insieme delle conclusioni che se ne possono trarre può crescere ma non diminuire. Non
può cioè succedere che quella che era una conclusione di un ragionamento cessi di essere tale
perché si prendono in considerazione nuove premesse in aggiunta alle precedenti. Invece il
ragionamento per default è non monotòno perché può accadere che, aggiungendo una nuova
premessa (ad esempio, Dumbo è un elefante reale) quella che prima era una conclusione accettabile
(Dumbo è grigio) cessi di essere tale.
La non monotonicità è una delle caratteristiche più diffuse del ragionamento quotidiano. Come
abbiamo detto, la logica tradizionale è monotòna. Tuttavia, nell’ambito dell’IA, sono stati proposti
vari sistemi di logica non monotòna allo scopo di formalizzare questi aspetti del ragionamento di
senso comune (cfr. ad es. Brewka 1991 e Frixione 1994, cap. 6).
Il ragionamento per default si ricollega al tema della caratterizzazione dei concetti del senso
comune. Secondo l’impostazione tradizionale, ciò che caratterizza un concetto è una sorta di
stipulazione di tipo definitorio, che identifica le caratteristiche comuni a tutti e soli gli oggetti che
ricadono sotto a quel concetto. Il problema è che, per i concetti del senso comune, condizioni di
questo tipo sono l’eccezione piuttosto che la regola. Di solito vengono utilizzati piuttosto insiemi di
tratti che caratterizzano un concetto nei casi tipici, ma che tuttavia ammettono numerose eccezioni.
Tratti di questo tipo sono quelli riportati nella rete di fig. 5, ma è banale trovare numerosissimi altri
esempi. Per esempio, chiunque conosca il concetto limone deve certamente sapere che i limoni di
solito sono gialli. Ma questa non è una caratteristica necessaria: esistono limoni che non sono gialli
perché, ad esempio, sono acerbi, o perché sono andati a male. Quindi, il fatto che i limoni siano
gialli costituisce un’informazione di default. Analogamente, chiunque conosca il concetto uccello
deve sapere che gli uccelli tipici volano. Ma esistono innumerevoli esempi di uccelli che non sono
in grado di volare (struzzi, pinguini, pulcini, uccelli malati, uccelli morti, eccetera). Problemi
analoghi si pongono con i concetti relativi ad azioni. Ad esempio, chi sa cosa vuol dire correre sa
che di solito correre implica spostarsi. Ma ci possono essere casi in cui questo non accade (si pensi
a qualcuno che corre su di un tapis roulant).
L’inadeguatezza del punto di vista tradizionale sulla concettualizzazione è stata confermata dalle
ricerche degli psicologi cognitivi. Eleanor Rosch (1975) ha messo in luce sperimentalmente come i
concetti del senso comune esibiscano una ricca strutturazione interna. Ad esempio, non tutte le
istanze di un concetto vengono percepite come ugualmente significative: esistono esemplari più
tipici di un concetto, ed altri che normalmente vengono giudicati “anomali” (un passero è un
26
rappresentante “migliore” della classe degli uccelli di quanto non lo sia uno struzzo o un pinguino).
Così, secondo la Rosch, a certi concetti è associato un prototipo, che costituisce una sorta di
rappresentante tipico della classe.
I frame sono stati proposti negli anni ’70 da Marvin Minsky, uno dei padri fondatori dell’IA
(Minsky 1975). Essi costituiscono un formalismo strutturato per la rappresentazione della
conoscenza che è strettamente imparentato con le reti semantiche, e che è centrato sulla
rappresentazione di prototipi. L’idea di fondo è che la memoria umana sia strutturata in un insieme
di schemi, di rappresentazioni prototipiche di oggetti e situazioni. Posti di fronte a situazioni nuove,
gli esseri umani identificano lo schema che meglio si applica ai dati disponibili, e agiscono sulla
base delle informazioni che tale schema mette a disposizione e delle aspettative che esso comporta.
I frame sono strutture dati complesse, che dovrebbero modellare questo genere di schemi. Un frame
è costituito da diversi campi (slot), ognuno dei quali rappresenta una delle caratteristiche o degli
attributi del prototipo rappresentato. Riportiamo qui parte di un possibile frame che rappresenta il
concetto essere umano. Sulla sinistra sono riportati i nomi degli slot; sulla destra i valori che
fungono da riempitori degli slot, ed eventuali altre informazioni aggiuntive (tipicamente, restrizioni
sui tipi di valori che uno slot può assumere). In generale, gli slot denominati è un indicano che un
certo frame rappresenta un caso particolare di concetti rappresentati da altri frame. Nel nostro
esempio, un essere umano è un tipo particolare di primate. Gli slot successivi rappresentano altri
attributi del concetto. Ad esempio, lo slot arto superiore ha come riempitore braccio, ad indicare
che un essere umano ha degli arti superiori che sono braccia. L’espressione (card.: 2) esprime una
restrizione di cardinalità sugli slot arto superiore e arto inferiore: un essere umano ha esattamente
due arti inferiori e due arti superiori. L’espressione (giorno/mese/anno) nello slot data di nascita
indica quale deve essere il formato dei riempitori dello slot (in questo caso una data), e
l’espressione (compresa tra 0 e 100) nello slot età indica l’intervallo dei valori che possono essere
assunti da età.
nome del frame:
è un:
…
arto superiore:
arto inferiore:
…
data di nascita:
età (in anni):
…
genitore:
antenato:
…
essere umano
primate
…
braccio (card.: 2)
gamba (card.: 2)
…
(giorno/mese/anno)
(compresa tra 0 e 100)
…
essere umano (card.: 2)
essere umano
…
Un frame eredita gli slot con i relativi attributi dai frame più generali che sono riempitori degli
slot è un. Ad esempio, presumibilmente essere umano eredita tutta una serie di informazioni
(inerenti, poniamo, la biologia) dal frame primate. Analogamente, il frame Davide Limentani
rappresenta una specifica istanza di essere umano. In quanto tale, esso eredita gli slot di essere
umano con le informazioni ad essi collegate. In taluni casi, queste informazioni vengono
ulteriormente specificate (come nel caso della data di nascita, o del nome dei genitori).
nome del frame:
è un:
…
data di nascita:
età (in anni):
Davide Limentani
essere umano
…
4/ottobre/1956
44
27
…
genitore:
antenato:
…
…
Isacco Limentani
Sara Piperno
Daniele Limentani
Lia Sonnino
Davide Piperno
…
Le informazioni associate agli slot possono essere intese come informazioni di default, che
valgono nei casi tipici, e vengono cancellate in presenza di informazioni più specifiche. Ad
esempio, la restrizione associata allo slot età ci dice che tipicamente gli esseri umani hanno un’età
compresa tra 0 e 100 anni, ma ciò non esclude che possano esserci istanze eccezionali di essere
umano con un valore di età superiore a 100.
Negli esempi sopra riportati le scritte in grassetto corrispondono a nomi di altri frame. Così, ad
esempio, si suppone che esista un frame che descrive il concetto braccio e un altro che descrive
l’individuo Sara Piperno. In questo modo ciascun frame in una base di conoscenza rimanda ad un
certo numero di altri frame, dando luogo ad una rete associativa molto simile a una rete semantica.
(Rispetto al formalismo del paragrafo precedente, gli slot di tipo è un sono l’analogo degli archi di
sussunzione e di individuazione, mentre gli altri slot corrispondono ad attributi). Una rete di questo
tipo prende il nome di frame system.
Un aspetto che caratterizza i frame è costituito dalla possibilità di introdurre delle forme di
collegamento procedurale (procedural attachment), di collegare cioè delle procedure ad alcuni slot
di un frame. Vediamo un semplice esempio. Nel frame essere umano sopra riportato sono presenti
gli slot data di nascita ed età. Ma, per ogni istanza di essere umano, una volta dato il riempitore di
data di nascita, il valore di età può essere facilmente calcolato a partire dal valore della data
corrente. Si può allora collegare allo slot età una procedura che esegua questo semplice calcolo.
Analogamente, dati i riempitori dello slot genitori, si possono ricavare gli antenati di un’istanza di
essere umano andando a cercare nella base di conoscenza i genitori dei suoi genitori, e così via
ricorsivamente. Così, anche i riempitori dello slot antenato possono essere calcolati per mezzo di un
semplice collegamento procedurale. I frame sono un formalismo di rappresentazione di tipo
principalmente dichiarativo; tuttavia la tecnica del procedural attachment consente di integrare in
essi elementi di rappresentazione procedurale della conoscenza.
Finetra F5 – Dai frame alla programmazione orientata agli oggetti
In un programma per calcolatore di tipo tradizionale i dati e le istruzioni che li elaborano sono
nettamente separati: le istruzioni specificano quali operazioni devono essere eseguite sui dati, i quali
di per sé sono sostanzialmente passivi. Viceversa, nella programmazione orientata agli oggetti
(object oriented programming) un tipo di dati (che viene chiamato appunto un oggetto) comprende
anche la specifica delle operazioni e delle procedure previste per la sua manipolazione. Tali
operazioni sono dette metodi. Quindi nella programmazione a oggetti la definizione dei dati e la
progettazione delle procedure sono inestricabilmente collegate. Consideriamo ad esempio la
progettazione di un’interfaccia grafica a finestre. Si può definire un oggetto finestra con le sue
caratteristiche generali e i metodi per manipolarla (spostarla, chiuderla, modificarne le dimensioni,
etc.). Nella programmazione object oriented è centrale il concetto di ereditarietà. Gli oggetti
vengono progettati in maniera gerarchica: dato un oggetto più generale, se ne possono specificare
dei sottotipi particolari, che ne ereditano le proprietà e i metodi, e che possono essere ulteriormente
modificati. Nell'esempio precedente, tipi particolari di finestra possono essere definiti come
sottocasi dell'oggetto finestra.
Esiste un'analogia tra oggetti e frame, e tra i metodi e collegamento procedurale. Infatti i sistemi
a frame sono stati tra gli ispiratori dei principi della programmazione orientata agli oggetti. Il primo
28
linguaggio ad oggetti è stato, negli anni sessanta, lo Smalltalk. Tra i linguaggi ad oggetti più diffusi
oggi ricordiamo il C++ e, nel settore della programmazione per l'IA, il CLOS (Common Lisp Object
System), un'estensione orientata agli oggetti del linguaggio LISP.
5 – Regole di produzione
Le regole di produzione (production rules) sono un formalismo per la rappresentazione della
conoscenza che è stato utilizzato sia in ambito cognitivo, come modello delle prestazioni
inferenziali degli esseri umani (Newell e Simon 1972; Newell 1973), sia in ambito applicativo,
soprattutto nello sviluppo dei sistemi esperti. In generale, una regola di produzione ha la forma
seguente:
se condizione allora effetto
Essa va interpretata come segue: se è verificata la condizione allora viene attuato l’effetto. La
condizione di una regola può consistere di un singolo fatto, oppure della congiunzione di più fatti
diversi. L’effetto può consistere nel derivare un nuovo fatto (in questo caso la regola esegue
un’inferenza in senso proprio), oppure nell'eseguire un’azione di qualche tipo. Un sistema a regole
di produzione ha la struttura mostrata in fig. 7.
Base di
Conoscenza
REGOLE
Motore
Inferenziale
FATTI
risultati
Figura 7
Vi è una base di conoscenza formata da un insieme di regole di produzione e da un insieme di
fatti. All'inizio del calcolo il motore inferenziale individua l'insieme delle regole la cui condizione è
soddisfatta dati i fatti presenti nella base di conoscenza. Dopo di che, il motore sceglie, sulla base di
opportuni criteri, quale di tali regole eseguire. In generale, ciò comporta la derivazione di qualche
fatto nuovo. A questo punto il processo ricomincia: viene individuato un nuovo insieme di regole
che potrebbero essere eseguite, ne viene scelta una, e così via. Alcuni dei fatti così generati
costituiscono il risultato del calcolo.
Consideriamo il seguente insieme di semplici regole:
i)
ii)
iii)
iv)
v)
se mammifero e unghie_retrattili allora felino
se felino e domestico allora gatto
se vive_in_allevamento allora domestico
se vive_in_appartamento allora domestico
se coperto_di_pelo allora mammifero
Supponiamo di avere nella base di conoscenza i tre fatti seguenti: coperto_di_pelo,
unghie_retrattili, vive_in_appartamento. All'inizio sono soddisfatte le condizioni delle regole iv) e
v). Una volta individuate tali regole, il motore inferenziale potrebbe impiegare diverse strategie per
risolvere il conflitto, per scegliere cioè quale di esse deve essere eseguita. Per semplicità, in questo
esempio supporremo che il sistema scelga semplicemente la prima regola eseguibile che incontra
esaminando la base di conoscenza dall’alto verso il basso. In questo caso si tratta della regola iv).
Essa porta a derivare il nuovo fatto domestico. Ora l’unica regola possibile (eccetto la iv, che è già
29
stata eseguita) è la v). Essa consente di derivare il fatto mammifero. Ora può essere eseguita la
regola i), che porta all’asserzione di felino. Questo fa sì che si possa eseguire la regola ii), che porta
all’asserzione di gatto. A questo punto non può più essere derivato alcun fatto nuovo, e il processo
termina.
Nelle regole i-v) l'effetto consiste nel derivare come conclusione un nuovo fatto. In questi casi,
una regola se A1 e … e An allora B è analoga a una formula della logica del tipo A1 ∧ … ∧ An →
B. Non si tratta di un’analogia completa, perché tali regole dal punto di vista inferenziale non
coincidono esattamente con condizionali di tipo logico. Con una regola di produzione l’unico tipo
di inferenza consentita è derivare B date le condizioni A1 … An . Un condizionale logico consente
altri tipi di inferenze. Ad esempio, data ¬B si può derivare ¬(A1 ∧ … ∧ An ) (modus tollens).
Oppure, data A1, si può derivare A2 ∧ … ∧ An → B (si veda l’esempio E3 nel §2.1). Le regole di
produzione sono quindi meno potenti e flessibili delle corrispondenti formule logiche. Ma ciò viene
compensato dalla loro maggiore efficienza in termini computazionali. Le principali differenze tra
logica e regole di produzione emergono però quando si prendono in considerazione regole che non
eseguono inferenze in senso stretto, ma che hanno come effetto qualche tipo di azione. Tali regole
non corrispondono a formule logiche. I seguenti sono esempi di questo tipo.
se Informazione_richiesta(x) e Riservata(x) e utente_non_autorizzato
allora Stampa(“L’informazione richiesta non può essere visualizzata”)
se emergenza_grave e incaricato_assente allora Esegui(spegni_impianto)
se Asserito(Celebrato_matrimonio_tra(x, y)) allora Cancella(Celibe(x))
La prima regola va letta come segue: “Se viene richiesta una certa informazione x che risulta
essere un’informazione riservata, e l’utente non è un utente autorizzato, allora visualizza il
messaggio ‘L’informazione richiesta …’”. La seconda regola va letta come segue: “Se si verifica
un’emergenza grave e l’incaricato è assente, allora spegni l’impianto”. La terza regola va letta come
segue: “Se è stato asserito nella base di conoscenza che è stato celebrato il matrimonio tra x e y,
allora cancella dalla base di conoscenza l’asserzione Celibe(x)”. In ciascuno dei tre casi l’effetto
della regola non è quello di trarre un’inferenza in senso proprio. Nel primo caso la regola causa la
visualizzazione di un messaggio destinato all’utente. Nel secondo causa l’esecuzione di un’azione
che ha un effetto sul mondo esterno. Nel terzo caso infine determina una manipolazione della base
di conoscenza (nella fattispecie, la cancellazione di un fatto). Quest’ultima possibilità è molto
potente ma pericolosa se usata in maniera indiscriminata. Infatti in basi di conoscenza complesse
diventa difficile stabilire se gli effetti che si ottengono in questo modo sono corretti rispetto a ciò
che si intende rappresentare. In casi come questi i sistemi a regole consentono una commistione di
aspetti dichiarativi e procedurali, analogamente a quanto avviene nei sistemi a frame.
Le inferenze che abbiamo preso in considerazione sino ad ora in questo paragrafo sono di tipo
deduttivo. Le regole di produzione si possono impiegare anche per effettuare altri tipi di inferenze.
Ad esempio, si possono effettuare inferenze abduttive (§2) usando le regole “all’indietro”, in modo
da inferire una spiegazione o la possibile causa di un fatto. Si consideri la regola seguente.
se manca_corrente allora lampadina_spenta
Supponiamo di disporre del fatto lampadina_spenta. La regola può essere usata per abdurre che
manca_corrente è una possibile causa di lampadina_spenta. Ovviamente inferenze di questo tipo
devono essere impiegate con cautela in quanto non sono deduttivamente corrette. Può infatti
accadere che da premesse vere si inferiscano conclusioni false. Ad esempio, può accadere che la
30
ragione per cui una lampadina è spenta non sia la mancanza di corrente ma il fatto, poniamo, che la
lampadina è bruciata.
Il numero di passi necessari per trarre una certa inferenza in un sistema a regole di produzione
può dipendere in maniera cruciale dall’ordine con cui vengono applicate le regole. Poiché la base di
conoscenza di un sistema a regole può essere molto grande, diventa importante per l’efficienza
globale del sistema scegliere in maniera oculata ad ogni passo del processo inferenziale quale regola
eseguire tra quelle la cui condizione è soddisfatta. Di qui l'importanza delle strategie impiegate dal
motore inferenziale per selezionare le regole da applicare, strategie che spesso hanno una natura di
tipo euristico. Una risposta interessante a questo tipo di problema viene oggi fornita da sistemi che
invece di adoperare interpreti sequenziali, interpreti cioè che applicano in sequenza le regole
secondo predeterminate strategie, propongono l’applicazione delle regole in parallelo, attraverso
un’architettura computazionale di tipo neurale (Aiello et al. 1998). Processori di questo tipo sono
stati progettati e realizzati per risolvere problemi reali quali quelli del controllo semaforico del
traffico in incroci particolarmente complessi.
Riferimenti
Aldo Aiello, Ernesto Burattini, Guglielmo Tamburrini, “Neural networks and rule-based systems”,
in C.T. Leondes (a cura di), Fuzzy Logic and Expert Systems Applications, Academic Press,
1998.
Ronald Brachman e James G. Schmolze, “An overview of the KL-ONE knowledge representation
system”, Cognitive Science, 9, 1985, 171-216.
Marcello Frixione, Logica, significato e intelligernza artificiale, Milano, Franco Angeli, 1994.
G.G. Hendrix, "Encoding knowledge in partitioned networks", in N.W. Findler (a cura di),
Associative Networks, New York, Academic Press, 1979.
William C. Kneale e Martha Kneale, The Development of Logic, Oxford, Clarendon Press, 1962; tr.
it. Storia della logica, Torino, Einaudi, 1972.
Marvin Minsky, “A framework for representing knowledge”, in Patrick Winston (a cura di), The
Psychology of Computer Vision, New York, McGraw-Hill, 1975.
Allen Newell, “Production systems: Models of control structures”, in W.G. Chase (a cura di),
Visual Information Processing, New York, Academic Press, 1973.
Allen Newell e Herbert A. Simon, Human Problem Solving, Englewood Cliffs, NJ, Prentice-Hall,
1972.
Eleanor Rosch, “Cognitive representation of semantic categories”, Journal of Experimental
Psychology: General, 104, 1975, 192-223.
S. Shapiro, "The SnePS semantic network processing system", in N.W. Findler (a cura di),
Associative Networks, New York, Academic Press, 1979.
Ulteriori letture
Ronald Brachman e Hector Levesque (a cura di), Readings in Knowledge Representation, Los
Altos, CA, Morgan Kaufmann, 1985.
[E’ una raccolta di articoli classici sulla rappresentazione della conoscenza]
G. Brewka, Nonmonotonic Reasoning, Cambridge, UK, Cambridge University Press, 1991.
[Si tratta di un’introduzione ai sistemi di logica non monotòna]
G. Fischer Servi, Quando l’eccezione è la regola, Milano McGraw-Hill, 2001.
[L’unico volume in italiano interamente dedicato alle logiche non monotòne]
Luigia Carlucci Aiello, Marta Cialdea Mayer, Invito all'intelligenza artificiale, Milano, Franco
Angeli,1995.
31
[Si tratta di un’agile introduzione all’IA, in cui i capp. III (Rappresentazione della
conoscenza) e IV (ragionamento automatico) trattano i temi del presente capitolo]
Danilo Fum, Intelligenza artificiale, Bologna, il Mulino, 1994.
[E’ un manuale di IA in cui i temi di rappresentazione della conoscenza sono
affrontati nei capp. III (logica), V (rappresentazioni strutturate) e VI (regole di
produzione)]
M.R. Genesereth e N.J. Nilsson, Logical Foundations of Artificial Intelligence, Los Altos, CA,
Morgan Kaufmann, 1987.
[E’ una trattazione manualistica dell'IA basata sulla logica, che dà ampio spazio ai
temi di rappresentazione della conoscenza]
Stuart J. Russell, Peter Norvig, Artificial Intelligence. A Modern Approach, Englewood Cliffs, NJ,
Simon & Schuster, 1994; tr. it. Intelligenza artificiale. Un approccio moderno, Torino,
UTET, 1998.
[Uno dei manuali più completi e aggiornati di IA, in cui i temi di rappresentazione
della conoscenza sono trattati nei capitoli dal 6 al 10]
Alcune risorse Internet
http://www-formal.stanford.edu/
La home page del Formal Reasoning Group della Stanford University, uno dei centri maggiori della
ricerca sulla rappresentazione della conoscenza di impostazione logica. Da qui si può accedere alla
home page di John McCarthy, uno dei padri fondatori dell'IA.
http://www.ai.mit.edu/people/minsky/minsky.html
La home page di Marvin Minsky, colui che propose i sistemi a frame, e che è tra i padri fondatori
dell'IA.
http://heinz1.library.cmu.edu/Newell/
Archivio degli scritti di Allen Newell presso la biblioteca della Carnagie Mellon University di
Pittsburgh. L'opera di Allen Newell e di Herbert Simon sulla rappresentazione della conoscenza e
sul ragionamento è una delle pietre miliari che hanno segnato la nascita dell'IA.
http://www.aaai.org/Pathfinder/html/repr.html
Una pagina ricchissima di informazioni sulla rappresentazione della conoscenza nel sito della
AAAI, l'Associazione Americana per l'Intelligenza Artificiale.
http://www.cs.berkeley.edu/%7Erussell/ai.html#logic
Una pagina di link su logica e rappresentazione della conoscenza curata da Stuart Russell, coautore di uno dei principali manuali di IA.
http://www.cs.man.ac.uk/~franconi/kr.html
Una ricca pagina di link sulla rappresentazione della conoscenza (comprendente un elenco
aggiornato dei convegni sull'argomento) curata da Enrico Franconi, ricercatore italiano di IA che
insegna presso l'Università di Manchester.
http://www.dis.uniroma1.it/~ai/
32
La pagina del gruppo di ricerca sull'IA del Dipartimento di Informatica e Sistemistica
dell'Università di Roma "La Sapienza", uno dei maggiori centri di ricerca italiani sulla
rappresentazione della conoscenza di impostazione logica.
33