STEFANO FERILLI Monografia su LOGICA MATEMATICA E CONCETTUALIZZAZIONE Università degli Studi di Bari Facoltà di Scienze Matematiche, Fisiche e Naturali Corso di Laurea in Informatica Corso di Ingegneria della Conoscenza e Sistemi Esperti LOGICA PROPOSIZIONALE Lo scopo della logica, risalente ad Aristotele, è quello di descrivere il ragionamento. La logica matematica ha introdotto metodi formali per descrivere la conoscenza e per ragionare rigorosamente con essa. La logica proposizionale è un modello matematico che ci consente di ragionare sulla verità e sulla falsità di espressioni logiche. Definizione. Una proposizione (o enunciato) è un'affermazione di cui si possa dire, oggettivamente e con certezza, che è vera o falsa. Esempio. Sono proposizioni: - Roma è la capitale d'Italia. - Bari è una città dell'Inghilterra. Non sono proposizioni: - I dipinti di Picasso sono belli. - Forse oggi verrò a trovarti. 2 Sono ammessi, dunque, due soli valori di verità: Vero (V) e Falso (F). Tesi di Frege. Gli enunciati sono nomi. e sono nomi di due entità, il Vero ed il Falso. CONNETTIVI LOGICI Le proposizioni possono essere composte fra di loro tramite connettivi logici in modo da formare delle espressioni complesse, il cui valore di verità può essere univocamente determinato a partire da quelli delle proposizioni componenti. Ogni connettivo logico è, quindi, una funzione che, ad ogni configurazione di valori di verità delle proposizioni cui è applicata, associa un determinato valore di verità. Tale funzione può essere schematizzata tramite una tabella di verità, che riporta nelle prime colonne i valori di verità degli argomenti, e nell'ultima i valori assunti dalla funzione in corrispondenza degli argomenti sulla stessa riga. 3 Per ragionare in generale, possiamo usare, invece che proposizioni ben determinate, delle variabili proposizionali, che corrispondono a qualunque proposizione (o espressione ammessa) che abbia un valore di verità. Esse acquistano, di volta in volta, il valore di verità dell'oggetto al quale sono associate. Si è soliti associare al Vero il valore numerico 1, e al Falso 0. Esempio. Supponiamo di avere la variabile proposizionale P: se poniamo P = "Roma è la capitale d'Italia." essa assumerà il valore di verità Vero; se invece poniamo P = "Bari è una città dell'Inghilterra." essa assumerà il valore di verità Falso. Inoltre, è anche possibile associare a P espressioni composte come: P = "Roma è la capitale d'Italia e Bari è una città dell'Inghilterra." che, ovviamente, è falsa. I connettivi logici più usati, con le relative tabelle di verità, sono i seguenti: - negazione (NOT, ¬): la negazione di una proposizione è vera se la proposizione è falsa, e viceversa. - congiunzione (AND, ∧): la congiunzione di due proposizioni è vera se e soltanto se entrambe sono vere. 4 - disgiunzione (OR, ∨) la disgiunzione di due proposizioni è vera se e soltanto se almeno una di esse è vera. - implicazione (IF ... THEN..., ⇒): è vero che una proposizione ne implica un'altra se (e soltanto se), ogniqualvolta è vera la prima, lo è anche l'altra. - equivalenza (... IF AND ONLY IF ..., ⇔): l'equivalenza di due proposizioni è vera se e soltanto se hanno lo stesso valore di verità. A B ¬A A∧B A∨B A⇒B A⇔B 0 0 1 0 0 1 1 0 1 1 0 1 1 0 1 0 0 0 1 0 0 1 1 0 1 1 1 1 N.B.: - La disgiunzione corrisponde al vel latino, e dunque è verificata anche se entrambe le proposizioni sono vere; all'aut latino corrisponde un altro connettivo, XOR (eXclusive OR). - L'implicazione è leggermente diversa dal significato intuitivo e comune del termine, ma è stata definita così perché, fra le funzioni disponibili, era la più simile al concetto rappresentato. Per comprenderla, bisogna pensare che non corrisponde ad un legame di causalità fra la premessa e la conseguenza, che possono anche essere scorrelate. 5 In teoria, possiamo avere 4 operatori monadici e 16 operatori diadici. Alcuni di essi sono banali (quelli sempre veri o sempre falsi, o che lasciano inalterato il valore della proposizione cui sono applicati); fra i restanti, i più comunemente usati sono quelli visti in precedenza, in quanto più intuitivi. Interessanti, comunque, sono anche i seguenti operatori diadici: - NAND (Not AND), che assume valori opposti a quelli della congiunzione, applicata alle stesse proposizioni; - NOR (Not OR), che assume valori opposti a quelli della disgiunzione, applicata alle stesse proposizioni; - XOR (eXclusive OR), che è vero se e soltanto se una sola delle due proposizioni cui è applicato è vera. A B A NAND B A NOR B A XOR B 0 0 1 1 0 0 1 1 0 1 1 0 1 0 1 1 1 0 0 0 Definizione. Un insieme di connettivi è detto completo se tutti gli altri connettivi sono esprimibili tramite una combinazione di questi. 6 E' possibile dimostrare che negazione e disgiunzione costituiscono un insieme completo. In particolare: A∧B = ¬ (¬ A ∨ ¬ B) A⇒B = ¬A∨B A⇔B = (A ⇒ B) ∧ (B ⇒ A) In realtà sia il solo NOR che il solo NAND sono completi. ESPRESSIONI LOGICHE Le espressioni ammesse dal linguaggio logico si dicono formule ben formate (fbf), e sono così definite ricorsivamente: - Una proposizione P è una fbf; - Se P e Q sono fbf, allora anche (¬ P), (P ∧ Q), (P ∨ Q), (P ⇒ Q) e (P ⇔ Q) sono fbf. Il valore di un'espressione composta si ottiene, dato un assegnamento di verità che associa un valore di verità ad ogni variabile che compare in essa, valutando parzialmente i singoli connettivi logici, a partire da quelli nelle parentesi più interne e proseguendo, man mano che i loro valori divengono noti, verso quelle più esterne. 7 Per alleggerire la notazione si introduce un ordine di priorità sui connettivi logici, e precisamente (dalla più alta verso la più bassa): ¬ ∧ ∨ ⇒ ⇔ Esempio. L'espressione logica (((¬ A)∧ C) ⇔ (D ∨ (B ⇒ C))) può essere scritta più semplicemente, senza alterarne il significato, come ¬ A∧ C ⇔ D ∨ (B ⇒ C) Analogamente, si interpreta come ¬A∧C∨B∧C (((¬ A)∧ C) ∨ (B ∧ C)) Qualora si voglia intendere l'espressione in maniera differente da questa, le parentesi sono necessarie per preservarne il significato. Esempio. Abbiamo detto in precedenza che è possibile esprimere qualunque connettivo logico in termini di NOT e OR. In particolare, abbiamo visto in che modo ciò sia possibile per i connettivi più comuni (congiunzione, implicazione ed equivalenza). Ma asserire quelle uguaglianze significa affermare che le seguenti equivalenze valgono per qualunque valore assunto da A e B: (A ∧ B) ⇔ ¬ (¬ A ∨ ¬ B) (A ⇒ B) ⇔ ¬A∨B (A ⇔ B) ⇔ (A ⇒ B) ∧ (B ⇒ A) 8 Vogliamo ora dimostrarlo tramite la tecnica della valutazione parziale, costruendo via via le relative tabelle di verità. (A ∧ B) ⇔ ¬ (¬ A ∨ ¬ B) A B ¬ B ¬ A ∨ ¬ B ¬ (¬ A ∨ ¬ B) A ∧ B (A ∧ B) ⇔ ¬ (¬ A ∨ ¬ B) ¬A 0 0 1 1 1 0 0 1 0 1 1 0 1 0 0 1 1 0 0 1 1 0 0 1 1 1 0 0 0 1 1 1 (A ⇒ B) ⇔ ¬ A ∨ B A⇒B (A ⇒ B) ⇔ ¬ (¬ A ∨ ¬ B) A B ¬A ¬A∨B 0 0 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 1 1 1 0 1 1 1 (A ⇔ B) ⇔ (A ⇒ B) ∧ (B ⇒ A) (A⇒B)∧(B⇒A) A⇔B (A⇔B) ⇔ (A⇒B)∧(B⇒A) A B A⇒B B⇒A 0 0 1 1 1 1 1 0 1 1 0 0 0 1 1 0 0 1 0 0 1 1 1 1 1 1 1 1 9 TAUTOLOGIE Definizione. Una tautologia è un'espressione logica sempre vera, indipendentemente dai valori di verità assunti dalle proposizioni componenti. Una contraddizione è un'espressione logica sempre falsa, indipendentemente dai valori di verità assunti dalle proposizioni componenti. Esempi. Abbiamo già visto che le equivalenze (A ∧ B) ⇔ ¬ (¬ A ∨ ¬ B) (A ⇒ B) ⇔ ¬A∨B (A ⇔ B) ⇔ (A ⇒ B) ∧ (B ⇒ A) sono sempre verificate per qualunque valore delle proposizioni componenti, e pertanto sono delle tautologie. Altre tautologie sono: A∨¬A A⇔A Viceversa, sono contraddizioni: A∧¬A A⇔¬A Infatti: A ¬A A∨¬A A⇔A A∧¬A 0 1 1 1 0 0 1 0 1 1 0 0 10 A⇔¬A Le tautologie, specialmente quelle riguardanti equivalenze, sono importanti in quanto, essendo sicuri che le due espressioni a destra e a sinistra dell'equivalenza assumono gli stessi valori a parità dei valori delle proposizioni componenti, potremo sempre sostituire l'una con l'altra in qualunque espressione. Tale possibilità è nota col nome di sostituzione di uguali per uguali. Principio di sostituzione. Una tautologia resta tale, qualunque sia la sostituzione che applichiamo alle sue variabili. In altre parole, una legge contenente variabili proposizionali resta valida anche dopo aver sostituito un'espressione ad ogni variabile, qualunque sia l'espressione. Naturalmente, a tutte le occorrenze di una stessa variabile dovremo sostituire la stessa espressione. LEGGI ALGEBRICHE Esistono alcune tautologie esprimenti proprietà che risultano molto utili nella manipolazione di espressioni logiche. 11 Confronto con l'aritmetica. E' possibile stabilire un parallelo fra gli operatori logici ∨, ∧, ¬ e gli operatori aritmetici +, ×, – (segno) rispettivamente, in base alle seguenti proprietà: 1. (P ∧ Q) ⇔ (Q ∧ P) Commutatività di ∧ 2. P ∧ (Q ∧ R) ⇔ (P ∧ Q) ∧ R Associatività di ∧ 3. (P ∨ Q) ⇔ (Q ∨ P) Commutatività di ∨ 4. P ∨ (Q ∨ R) ⇔ (P ∨ Q) ∨ R Associatività di ∨ 5. P ∧ (Q ∨ R) ⇔ (P ∧ Q) ∨ (P ∧ R) Distributività di ∧ su ∨ 6. P ∧ Vero ⇔ P Elemento neutro di ∧ 7. P ∨ Falso ⇔ P Elemento neutro di ∨ 8. P ∧ Falso ⇔ Falso Elemento nullo di ∧ 9. ¬¬P⇔P Eliminazione delle doppie negazioni Viceversa, ci sono proprietà che differenziano gli operatori logici ∨, ∧ dagli operatori aritmetici +, × rispettivamente: 10. P ∨ (Q ∧ R) ⇔ (P ∨ Q) ∧ (P ∨ R) Distributività di ∨ su ∧ 11. P ∨ Vero ⇔ Vero Elemento nullo di ∨ 12. P∧P⇔P Idempotenza di ∧ 13. P∨P⇔P Idempotenza di ∨ 14. P ∨ (P ∧ Q) ⇔ P P ∧ (P ∨ Q) ⇔ P Sussunzione 12 15. P ∧ (¬ P ∨ Q) ⇔ P ∧ Q P ∨ (¬ P ∧ Q) ⇔ P ∨ Q Eliminazione di alcune negazioni Leggi di DeMorgan. 1. ¬ (P ∧ Q) ⇔ ¬ P ∨ ¬ Q 2. ¬ (P ∨ Q) ⇔ ¬ P ∧ ¬ Q 3. ¬ (P1 ∧ P2 ∧ ... ∧ Pk) ⇔ ¬ P1 ∨ ¬ P2 ∨ ... ∨ ¬ Pk 4. ¬ (P1 ∨ P2 ∨ ... ∨ Pk) ⇔ ¬ P1 ∧ ¬ P2 ∧ ... ∧ ¬ Pk Principio di dualità. Una tautologia in cui compaiano solo i connettivi di congiunzione e disgiunzione resta tale scambiando fra loro tali connettivi. Leggi dell'equivalenza. 1. P⇔P Riflessività 2. (P ⇔ Q) ⇔ (Q ⇔ P) Commutatività 3. ((P ⇔ Q) ∧ (Q ⇔ R)) ⇒ (P ⇔ R) Transitività 4. (P ⇔ Q) ⇔ (¬ P ⇔ ¬ Q) Equivalenza dei negati Leggi dell'implicazione. 1. ((P ⇒ Q) ∧ (Q ⇒ P)) ⇔ (P ⇔ Q) 2. (P ⇔ Q) ⇒ (P ⇒ Q) 3. ((P ⇒ Q) ∧ (Q ⇒ R)) ⇒ (P ⇒ R) 4. (P ⇒ Q) ⇔ (¬ P ∨ Q) Transitività (P1 ∧ P2 ∧ ... ∧ Pn ⇒ Q) ⇔ (¬ P1 ∨ ¬ P2 ∨ ... ∨ ¬ Pn ∨ Q) 13 Osservazioni. - Le proprietà associativa e commutativa di ∧ e ∨ ci consentono di esprimere qualunque gruppo di congiunzioni (rispettivamente, di disgiunzioni), comunque nidificate, come semplice sequenza di congiunzioni (rispettivamente, di disgiunzioni) priva di parentesi intermedie e valutabile in un ordine qualsiasi. - Il parallelo con l'aritmetica fa sì che la congiunzione venga anche detta prodotto logico, e la disgiunzione somma logica. - Le proprietà che, nel parallelo, differivano da quelle dell'aritmetica sono, in pratica, quelle mancanti all'operatore ∨ rispetto a ∧, per cui sono necessarie alla validità del principio di dualità. - Nella sussunzione, sostituendo le variabili enunciative della prima proprietà con dei prodotti di letterali, se ne deduce che in una somma di prodotti possiamo eliminare ogni prodotto i cui letterali includono quelli di un altro prodotto. Simmetricamente, sostituendo le variabili della seconda proprietà con delle somme di letterali, si conclude che in un prodotto di somme è possibile eliminare una somma che include i letterali di un'altra. Questo perché i letterali superflui non potrebbero comunque variare il valore di verità assunto dall'espressione. 14 METODI DI DIMOSTRAZIONE La logica degli enunciati consente di verificare formalmente e rigorosamente che i metodi di dimostrazione (usati, ad esempio, in matematica) siano corretti, per cui applicando quei determinati meccanismi di ragionamento alle ipotesi date siamo sicuri di trarre delle conclusioni vere. Il meccanismo che consente di "ragionare" con formule logiche è detto calcolo. Definizione. Siano dati un insieme di espressioni vere, dette ipotesi, ed un insieme di tautologie basate sull'implicazione (o sull'equivalenza), dette regole di inferenza. Una dimostrazione è una sequenza di formule, ognuno dei cui elementi è una tautologia, un'ipotesi o una formula derivata da due elementi precedenti della sequenza tramite una delle regole di inferenza. Una formula è dimostrata a partire da un insieme di ipotesi (tramite le regole di inferenza a disposizione) se è possibile costruire, a partire da esse, una dimostrazione che contiene quella formula. Tale procedimento si rende necessario a causa dell'impossibilità, anche per formule contenenti poche proposizioni, di costruire la relativa tavola di 15 verità, a causa dell'alto numero di combinazioni di valori da tenere presente. Alcuni importanti metodi di dimostrazione, con le relative tautologie su cui si basano, sono i seguenti. Analisi per casi. Se è possibile dedurre una conclusione tanto da una proposizione quanto dalla sua negazione, allora la conclusione è sempre vera: (P ⇒ Q) ∧ (¬ P ⇒ Q) ⇔ Q E' una generalizzazione della Legge del terzo escluso: P ∨ ¬ P ⇔ Vero (per cui una proposizione è vera o falsa, senza altra possibilità), tenendo presente che non possono essere vere contemporaneamente una proposizione ed il suo contrario: P ∧ ¬ P ⇔ Falso Dimostrazione della contrapposizione. Sapendo che una proposizione è vera solo se è vera un'altra, deduciamo che se non è vera non lo è neppure l'altra. Viene espressa formalmente dalla seguente tautologia: (P ⇒ Q) ⇔ (¬ Q ⇒ ¬ P) 16 Dimostrazione per assurdo. E' basata sulla seguente tautologia: (¬ P ⇒ Falso) ⇔ P per cui, se da una proposizione possiamo dedurre il falso (cioè una contraddizione), deve necessariamente essere vero il suo contrario. Riduzione a Vero. Si fonda sul fatto che un'espressione è una tautologia, che dunque si può trasformare in Vero tramite sostituzione di uguali per uguali. Formalmente: (P ⇔ Vero) ⇔ P LIMITI DELLA LOGICA PROPOSIZIONALE Nonostante il Calcolo delle Proposizioni sia un utile strumento per ragionare sulla verità o falsità di affermazioni e deduzioni, il suo limite risiede nel fatto che considera monoliticamente ogni enunciato in base al suo valore di verità. In altre parole, non potendo guardare "dentro" alle proposizioni, non è in grado di cogliere relazioni fra enunciati diversi, che potrebbero aiutare nel ragionamento su di essi. 17 Esempio. Date le proposizioni: Roma è in Italia Milano è in Italia Torino è in Italia Napoli è in Italia sappiamo che sono tutte vere, ma non siamo in grado di cogliere il nesso che lega le quattro città, ossia il fatto di trovarsi nella stessa nazione, l'Italia. Questo limite della logica proposizionale viene superato dalla Logica dei Predicati, una sua estensione così detta per il fatto che "predica", ossia dice qualcosa di uno o più oggetti. Nell'esempio precedente, possiamo isolare gli oggetti di cui si parla, ed ottenere così le frasi generali: ... è in Italia. oppure: Roma è in .... o anche: ... è in .... da cui, sostituendo gli spazi rimasti vuoti con degli oggetti, otterremo di volta in volta vari enunciati il cui valore di verità dipende dalla sostituzione eseguita. 18 LOGICA DEI PREDICATI Definizione. Un predicato è una proposizione dalla quale siano stati eliminati uno o più oggetti. Ciascuno di essi verrà sostituito da una variabile, alla quale potrà essere, di volta in volta, assegnato un valore fra quelli di un insieme ad essa associato, detto il suo dominio. Simmetricamente, associare specifici oggetti a tutte le variabili che compaiono in un predicato lo trasformano in una proposizione. Invece che assegnare direttamente ad una variabile un valore del suo dominio, è possibile farlo dipendere da quello di altri oggetti, anche appartenenti a domini differenti, tramite l'uso di funzioni, che a partire da un certo insieme di valori appartenenti a determinati domini individuano univocamente un certo valore di un dominio prefissato. Il numero di variabili che compaiono in un predicato o in una funzione si dice la sua arietà. Un predicato (o funzione) di arietà n si dice n-ario. Un termine è una variabile, una costante o una funzione con i suoi argomenti (che, a loro volta, sono anch’essi dei termini). 19 Esempio. ... è in ... = x è in y è un predicato binario (le cui variabili hanno per domini, rispettivamente, l'insieme delle città e quello delle nazioni), che possiamo rappresentare come P(x,y). Esso, ad esempio, sarà vero per x = Roma, y = Italia: Roma è in Italia e falso per x = Bari, y = Inghilterra: Bari è in Inghilterra. Sarebbe stato possibile usare una funzione unaria del tipo: Il capoluogo di ... = Il capoluogo di z = f(z) che, a partire da un oggetto appartenente all'insieme delle regioni in cui le varie nazioni sono suddivise, restituisce il nome del suo capoluogo. In tal caso, il predicato sarebbe stato: La capitale di z è in y = P(f(z), y). ESPRESSIONI Una proposizione può, dunque, essere vista come un predicato con zero argomenti. Definizione. Un atomo è un predicato con zero o più argomenti. 20 Nella logica dei predicati, questo concetto corrisponde a quello che era la "variabile proposizionale" nella logica degli enunciati. A partire dai predicati, è possibile costruire espressioni complesse tramite le stesse procedure e gli stessi connettivi logici usati nella logica proposizionale. Un letterale è un atomo o la sua negazione. Un atomo, un letterale o, in generale, un'espressione si dice di base (o ground)se è priva di variabili (ossia tutti i suoi argomenti sono costanti). Esempio. padre_di(X, Stefano) è un atomo (e quindi anche un letterale ed un'espressione). ¬ nero(Y) è un letterale (e quindi anche un'espressione). bianco(X) ∨ colorato(X) è un'espressione. padre_di(Carlo, Stefano) è un atomo ground. ¬ nero(neve) è un letterale ground. bianco(vestito) ∨ colorato(vestito) è un'espressione ground. 21 QUANTIFICATORI Dato un predicato, per potergli associare un valore di verità, dobbiamo trasformarlo in una proposizione, assegnando ad ognuna delle variabili che in esso compaiono un valore appartenente al relativo dominio. Spesso, nei ragionamenti reali, non si parla di uno specifico oggetto, ma si fanno affermazioni generali contenenti le locuzioni "Per ogni oggetto ..." e "Esiste un oggetto ...". Per comodità sono stati introdotti due simboli corrispondenti a tali locuzioni, detti quantificatori: • il quantificatore esistenziale (∃), equivalente a "Esiste un", ed • il quantificatore universale (∀), equivalente a "Per ogni". Una variabile quantificata si dice vincolata, ed è come se le fosse stato assegnato uno specifico valore (in caso contrario è detta libera). Allora, per poter assegnare un valore di verità ad un predicato bisogna che a ciascuna delle sue variabili sia assegnato un valore ben preciso del relativo dominio oppure che le sia associato un quantificatore. Un'espressione priva di variabili libere è detta chiusa. Esempio. Supponiamo di voler asserire che il cubo di qualunque numero positivo è positivo. Definiamo la funzione cubo(x), che ad ogni numero reale associa il suo cubo, 22 ed il predicato P(y,z) = Se y è maggiore di zero, allora anche z è maggiore di zero. dove y e z hanno per dominio i numeri reali. Allora l'affermazione iniziale può essere scritta come ∀x P(x,cubo(x)). che è sicuramente vera. Si pensi alla necessità, qualora non esistessero i quantificatori, di ripetere questa stessa affermazione per ciascun numero reale. Tecnicamente, il quantificatore universale corrisponde alla congiunzione di tutti i predicati ottenibili sostituendo alla variabile quantificata ogni possibile valore del suo dominio; il quantificatore esistenziale corrisponde alla disgiunzione di tutti i predicati ottenibili sostituendo alla variabile quantificata ogni possibile valore del suo dominio. Esempio. Consideriamo il predicato P(x), dove il dominio di x è {a1, ..., an}. Allora: (∀x) P(x) ⇔ P(a1) ∧ ... ∧ P(an) (∃x) P(x) ⇔ P(a1) ∨ ... ∨ P(an) Ciò significa, in pratica, che anch'essi sono degli operatori, per cui se E è un'espressione valida della logica dei predicati, anche (∀x) E e (∃x) E lo sono. 23 Si assume che la loro precedenza sia massima fra tutti gli altri. Ciascuno dei due quantificatori è esprimibile tramite l'altro. E' infatti facile verificare, anche intuitivamente, che (∀x) P(x) ⇔ ¬ (∃x) (¬ P(x)) ossia se una proprietà è verificata da qualunque valore del dominio ciò significa che non esiste un valore del dominio che non la verifica, e che (∃x) (P(x)) ⇔ ¬ (∀x) (¬ P(x)) ossia se esiste un valore del dominio che verifica una proprietà ciò significa che non tutti i valori del dominio non la verificano. La dimostrazione rigorosa si ottiene sfruttando le leggi di DeMorgan, e tenendo presente che esse valgono anche per congiunzioni o disgiunzioni infinite. La vista di un quantificatore, ossia la porzione di espressione sulle cui variabili esso agisce, è quella che lo segue immediatamente. Esempio. Nell'espressione ∀x (P(x) ∧ Q(a) ∨ (∃y (P(y) ∧ R(x)))) la vista di "∀" è (P(x) ∧ Q(a) ∨ (∃y (P(y) ∧ R(x)))), quella di "∃" è (P(y) ∧ R(x)). 24 Se in tale sottoespressione è presente un altro quantificatore applicato alla stessa variabile, esso ha precedenza su quello esterno. In altre parole, una variabile che sia nella vista di più quantificatori si intende legata a quello più interno. Esempio. Nell'espressione ∀x (P(x) ∧ Q(a) ∨ (∃x (P(b) ∧ R(x)))) la variabile in R(x) si intende associata ad "∃", ed è diversa da quella in P(x), che invece è quantificata dal "∀". Tale situazione può essere evitata assegnando a ciascun quantificatore una variabile diversa da tutte le altre, operazione che va sotto il nome di rettifica. Esempio. L'espressione dell'esempio precedente, rettificata, diventa ∀x (P(x) ∧ Q(a) ∨ (∃z (P(b) ∧ R(z)))). Consideriamo la seguente fbf: ∀y [∃x P(x,y)] “Per ogni y esiste un x, possibilmente dipendente da y, tale che P(x,y)”. Il fatto che la variabile x possa dipendere da y può essere espresso 25 esplicitamente da una funzione che pone in corrispondenza la seconda con la prima, il che consente di eliminare il quantificatore esistenziale. In altre parole, tale funzione, detta di Skolem, resitituisce, data una y, quella x (che, pur non essendo nota, il quantificatore esistenziale ci assicura esistere per ogni y) per cui valeva la formula data. Nel caso proposto, se chiamiamo g() la funzione di Skolem, si ottiene: ∀y P(g(y),y) In generale, per eliminare un quantificatore esistenziale da una fbf si rimpiazza ogni occorrenza della sua variabile quantificata con una funzione di Skolem i cui argomenti sono tutte le variabili vincolate da quantificatori universali i cui raggi d’azione includono il raggio d’azione del quantificatore esistenziale che si vuole eliminare. I simboli di funzione usati per le funzioni di Skolem devono ovviamente essere nuovi, ossia non già presenti nella fbf. Esempio. [∀w Q(w)] ⇒ ∀x {∀y {∃z [P(x,y,z) ⇒ ∀u R(x,y,u,z)]}} diventa, introducendo la funzione di Skolem g() per z, [∀w Q(w)] ⇒ ∀x ∀y [P(x,y,g(x,y)) ⇒ ∀u R(x,y,u,g(x,y))] 26 Se il quantificatore esistenziale che si desidera eliminare non cade all’interno del raggio d’azione di nessun quantificatore universale, si deve usare una funzione di Skolem senza argomenti, ovvero una costante. Esempio. ∃x P(x) diventa P(a) dove a è un nuovo simbolo di costante. LOGICA IN FORMA DI CLAUSOLE Definizione. Una clausola è una disgiunzione di letterali, le cui variabili si suppongono quantificate universalmente. Essa si può rappresentare come espressione logica: A1 ∨ A2 ∨ ... ∨ An ∨ ¬ B1 ∨ ¬ B2 ∨ ... ∨ ¬ Bm oppure come insieme di letterali (sottintendendo che sono posti in disgiunzione fra loro): {A1, A2, ..., An, ¬ B1, ¬ B2, ..., ¬ Bm} oppure sotto forma di regola di inferenza: A1, A2, ..., An :- B1, B2, ..., Bm che si interpreta "Se sono verificati tutti i Bj, allora è verificato almeno uno degli Ai": B1 ∧ B2 ∧ ... ∧ Bm ⇒ A1 ∨ A2 ∨ ... ∨ An 27 I Bj si dicono corpo (o premesse) e gli Ai testa (o conseguenze). Una clausola si dice di Horn se ha un solo letterale nella testa. Esiste un procedimento tramite il quale qualunque fbf della logica dei predicati può essere trasformata in un insieme di clausole considerate in congiunzione fra loro (abbiamo infatti visto che i due operatori NOT e OR, che sono gli unici ad apparire nelle clausole, sono completi), per cui i due linguaggi sono totalmente equivalenti. Esempio. ∀x {P(x) ⇒ {∀y [P(y) ⇒ P(f(x,y))] ∧ ¬∀y [Q(x,y) ⇒ P(y)]}} 1. Eliminare il simbolo di implicazione, sostituendo p⇒ ⇒q con ¬p∨ ∨q in tutte le occorrenze di ⇒ all’interno della fbf (assumendo che eventuali equivalenze siano già state trasformate in doppie implicazioni): ∀x {¬P(x) ∨ {∀y [¬P(y) ∨ P(f(x,y))] ∧ ¬∀y [¬Q(x,y) ∨ P(y)]}} 2. Ridurre il raggio di azione del ¬, in modo tale che il simbolo di negazione si applichi al più ad una formula atomica, facendo uso delle leggi di eliminazione delle doppie negazioni, di DeMorgan e di trasformazione dei quantificatori: ∀x {¬P(x) ∨ {∀y [¬P(y) ∨ P(f(x,y))] ∧ ∃y [Q(x,y) ∧ ¬P(y)]}} 28 3. Rettificare le variabili, rimpiazzando uniformemente ciascuna variabile quantificata con un’altra nuova (che non occorra nell’espressione) lungo tutto il raggio d’azione del quantificatore, il che non modifica il valore di verità dell’espressione stessa, in modo tale che ogni quantificatore abbia la propria variabile fittizia: ∀x {¬P(x) ∨ {∀y [¬P(y) ∨ P(f(x,y))] ∧ ∃w [Q(x,w) ∧ ¬P(w)]}} 4. Eliminare i quantificatori esistenziali, creando per ciascuno un’apposita funzione di Skolem e sostituendo tutte le occorrenze di variabili quantificate esistenzialmente con la relativa funzione: ∀x {¬P(x) ∨ {∀y [¬P(y) ∨ P(f(x,y))] ∧ [Q(x,g(x)) ∧ ¬P(g(x))]}} dove g(x) è una funzione di Skolem 5. Convertire la formula in forma prenessa, spostando tutti i quantificatori in testa alla formula, mantenendo il loro ordine relativo. Ciò è possibile perché, avendo rettificato le variabili, non vi è conflitto fra i loro nomi. La fbf risultante si dice in forma prenessa, e consiste di una serie di quantificatori, detta prefisso, seguita da una formula priva di quantificatori, detta matrice. ∀x ∀y {¬P(x) ∨ {[¬P(y) ∨ P(f(x,y))] ∧ [Q(x,g(x)) ∧ ¬P(g(x))]}} 6. Mettere la matrice in forma normale congiuntiva, ossia riscriverla come congiunzione di un insieme finito di disgiunzioni di letterali. Ciò è sempre possibile, facendo uso della proprietà distributiva: ∀x ∀y {[¬P(x) ∨ ¬P(y) ∨ P(f(x,y))] ∧ [¬P(x) ∨ Q(x,g(x))] ∧ [¬P(x) ∨ ¬P(g(x))]} 29 7. Eliminare i quantificatori universali. Ciò è possibile in quanto tutte le variabili argomentali che usiamo nelle fbf devono essere vincolate, ed i quantificatori esistenziali sono stati eliminati, per cui tutte le variabili rimanenti a questo punto sono quantificate universalmente; inoltre, l’ordine delle quantificazioni non è importante (per la proprietà commutativa) e la formula è rettificata. [¬P(x) ∨ ¬P(y) ∨ P(f(x,y))] ∧ [¬P(x) ∨ Q(x,g(x))] ∧ [¬P(x) ∨ ¬P(g(x))] 8. Eliminare i simboli ∧ espliciti, rimpiazzando le espressioni della forma p∧q con l’insieme di clausole {p,q}. {[¬P(x) ∨ ¬P(y) ∨ P(f(x,y))], [¬P(x) ∨ Q(x,g(x))], [¬P(x) ∨ ¬P(g(x))]} 9. Ridenominare le variabili in modo tale che nessun simbolo di variabile appaia in più di una clausola. Ciò è possibile dal momento che ∀x [P(x) ∧ Q(x)] è equivalente a ∀x P(x) ∧ ∀y Q(y). {[¬P(x1) ∨ ¬P(y) ∨ P(f(x1,y))], [¬P(x2) ∨ Q(x2,g(x2))], [¬P(x3) ∨ ¬P(g(x3))]} INTERPRETAZIONI Si è detto che per poter associare ad un predicato un valore di verità bisogna aver prima vincolato tutte le sue variabili (tramite quantificatori o costanti del relativo dominio), in quanto a seconda di tali assegnamenti essi possono essere veri o falsi (in pratica, bisogna sapere di chi si sta parlando). 30 Definizione. Una interpretazione di un predicato P con n argomenti è una funzione che per ogni possibile combinazione di valori assunta dagli argomenti (ciascuno nel proprio dominio) assegna al predicato il valore Vero oppure Falso. Essa è l'equivalente dell'assegnazione di verità nel calcolo degli enunciati, solo che qui, come detto, dipende dagli oggetti cui l'affermazione si riferisce. Esempio. Consideriamo il generico predicato P(x,y), dove i domini di x ed y sono, rispettivamente, {0, 1, 2} e {a, b}. Allora una possibile interpretazione sarebbe: x y P(x,y) 0 a Vero 0 b Vero 1 a Vero 1 b Falso 2 a Vero 2 b Falso In realtà, per definire un'interpretazione basta elencare le combinazioni di valori per cui il predicato è vero, sottintendendo automaticamente che tutte le altre combinazioni lo rendono falso. Nell'esempio precedente, avremmo: 31 {(0,a), (0,b), (1,a), (2,a)}. Le espressioni si interpretano con una valutazione identica a quella della logica proposizionale, una volta che siano definite le interpretazioni dei singoli predicati che in esse compaiono (e dunque i valori di verità che essi assumono). Tramite le interpretazioni possiamo ragionare anche sulla coerenza di intere teorie (ossia insiemi di espressioni). Un insieme di espressioni si dice soddisfacibile se esiste almeno un'interpretazione che le rende tutte vere contemporaneamente, altrimenti si dice insoddisfacibile. Un'interpretazione che rende vero un insieme di formule si dice modello per quell'insieme. Un insieme di formule è valido se qualunque interpretazione è un modello per essa, ossia rende vere tutte le espressioni in essa presenti. 32 TAUTOLOGIE Definizione. Un'espressione della logica dei predicati è una tautologia se risulta vera per ogni sua possibile interpretazione. per cui è una definizione totalmente simmetrica a quella della logica proposizionale. A tal fine, le eventuali variabili libere vanno interpretate come se fossero quantificate universalmente. Tutte le tautologie della logica proposizionale rimangono valide anche sui predicati, proprio perché, una volta interpretati, anch'essi diventano proposizioni. Infatti, il Principio di sostituzione resta valido in quanto, per ogni interpretazione, il predicato assume un valore di verità indipendente dalla posizione in cui esso si trova all'interno dell'espressione, che pertanto resterà uguale in tutte le sue occorrenze. In particolare, è ancora possibile usare il Principio di sostituzione di uguali per uguali, sostituendo a qualunque sottoespressione un'espressione che sappiamo, tramite una tautologia, essere ad essa equivalente. 33 Poiché i quantificatori sono, in pratica, nuovi operatori introdotti nella logica dei predicati rispetto a quella proposizionale, esistono delle tautologie che li riguardano non riscontrabili in quest'ultima. Siano E ed F due espressioni: 1. (∀x) E ⇔ (∀y) E' (∃x) E ⇔ (∃y) E' dove E' è ottenuta da E sostituendo y a tutte le occorrenze di x legate dal quantificatore rappresentato. 2. ¬ ((∀x) E) ⇔ (∃x) (¬ E) ¬ ((∃x) E) ⇔ (∀x) (¬ E) 3. (E ∧ (∀x) F) ⇔ (∀x) (E ∧ F) (E ∧ (∃x) F) ⇔ (∃x) (E ∧ F) 4. (E ∨ (∀x) F) ⇔ (∀x) (E ∨ F) (E ∨ (∃x) F) ⇔ (∃x) (E ∨ F) 5. (∀x) (∀y) E ⇔ (∀y) (∀x) E (∃x) (∃y) E ⇔ (∃y) (∃x) F Questo insieme di proprietà consente di esprimere qualunque formula in modo tale che tutti i quantificatori si trovino all'inizio, e che il loro effetto sia indipendente dall'ordine in cui appaiono. Ciò è fondamentale per poter trasformare le espressioni in forma di clausole. Dalla 2, in particolare, negando ambo i membri dell'equivalenza si ottengono le formule viste in precedenza, che consentivano di esprimere ogni quantificatore tramite l'altro. 34 Tutte queste tautologie si dimostrano con le leggi di DeMorgan. DIMOSTRAZIONI Come nella logica proposizionale, dato un insieme di espressioni supposte vere (dette assiomi) e un insieme di regole di inferenza, una dimostrazione è una sequenza di espressioni ognuna delle quali sia un assioma, una tautologia o sia derivabile dalle espressioni che la precedono nella sequenza tramite una regola di inferenza. In più, nella logica dei predicati esiste la Legge di sostituzione di variabile. Si può inserire nella sequenza di dimostrazione un'espressione ottenuta sostituendo in un'espressione precedente della sequenza tutte le occorrenze di una variabile libera con un'altra variabile o una costante. Più formalmente, data una funzione sost che associa ad ogni variabile libera di un'espressione E una costante del suo dominio oppure una variabile (che può anche essere la variabile stessa), vale la seguente regola di inferenza: E ⇒ sost(E). 35 Esempio. Se l'espressione P(x,y) ∨ (∃z) Q(x,z) appartiene alla sequenza di dimostrazione, allora anche l'espressione P(a,b) ∨ (∃z) Q(a,z) può essere inserita nella sequenza. Ricordiamo che, supponendo di trattare espressioni chiuse, la formula iniziale si intende preceduta dai quantificatori (∀x) (∀y). Un particolare tipo di dimostrazione è quello le cui ipotesi sono di una delle seguenti due forme: • fatti, cioè atomi ground; • regole, cioè espressioni di tipo implicazione (Se ... allora ...). In sostanza, i fatti rappresentano delle affermazioni riguardanti gli oggetti del mondo, che sappiamo essere vere; le regole rappresentano principi generali che possono essere applicati ai fatti noti per dedurne altri fatti veri. Se tutte le premesse di una regola sono vere (per ipotesi o per essere state a loro volta dimostrate) è possibile dedurre la sua conseguenza, e aggiungere quel fatto alla sequenza di dimostrazione. 36 RISOLUZIONE Una regola di inferenza molto nota è la risoluzione, che opera solo su formule in forma di clausole e la cui forma generale è la seguente: (P1∨P2∨...∨Pn) ∧ (¬ P1∨Q2∨...∨Qm) ⇒ (P2∨...∨Pn∨Q2∨...∨Qm) dove i Pi e Qj sono tutti letterali distinti e le clausole sono supposte ground. Le premesse sono dette genitori, la conseguenza risolvente, P1 e ¬ P1 letterali risolti. Quando si usa la risoluzione, l’insieme di fbf dalle quali si vuole provare una data fbf deve essere convertito in clausole. Si può dimostrare che se una fbf segue logicamente da un insieme di fbf, allora essa segue logicamente anche dall’insieme di clausole ottenute convertendo le fbf dell’insieme in forma di clausole. La risoluzione racchiude in sé diverse altre regole di inferenza, come ad esempio il modus ponens. Esempio. Supponiamo di avere le ipotesi {P, ¬ P ∨ Q, ¬ Q ∨ R}. 37 Da esse si può dimostrare R: 1. P perché è un'ipotesi 2. ¬P∨Q perché è un'ipotesi 3. ¬Q∨R perché è un'ipotesi 4. Q per risoluzione di 1 e 2 5. ¬P∨R per risoluzione di 2 e 3 6. R per risoluzione di 1 e 5 o di 3 e 4 Definizione. Una clausola senza né testa né corpo si dice clausola vuota, si indica con e rappresenta una contraddizione (in quanto, non contenendo alcun letterale, non può essere mai verificata). Si può dimostrare che se da un insieme di ipotesi è possibile ottenere la clausola vuota tramite risoluzione, allora tale insieme di ipotesi è incoerente. Questo è utile quando conosciamo già in anticipo l'affermazione che vogliamo dimostrare, per cui, invece che partire dalle ipotesi e andare avanti a tentativi nella speranza di dimostrarla, possiamo procedere in maniera più mirata, sfruttando il seguente procedimento. 38 Dimostrazione per refutazione. • Si assume che la negazione della tesi è vera; • Si mostra che tale negazione, insieme alle ipotesi, porta ad affermare come vera qualcosa che non può esserlo (dimostrando la clausola vuota, che indica una contraddizione); • Si conclude che il teorema è vero. La risoluzione, agendo solo su clausole ground, è stata in sostanza definita per il calcolo degli enunciati. Nel calcolo dei predicati la presenza di variabili non ci consente di capire immediatamente se due atomi sono complementari, per cui bisogna estendere la nozione fin qui appresa a trattare anche questo caso. Per estendere il principio di risoluzione alla logica dei predicati possiamo sfruttare la Legge di sostituzione di variabile: supponendo che le due formule cui applicare la risoluzione siano rettificate (non abbiano, cioè, variabili in comune), si cerca una sostituzione che renda complementari un letterale della prima espressione con uno della seconda (che prende il nome di unificatore dei due letterali), la si applica ad entrambe le espressioni e si risolvono in maniera analoga alla precedente le due formule così ottenute. Le sostituzioni possono essere composte, ossia applicate in sequenza ad un'espressione. 39 Un unificatore si dirà più generale di un altro se il risultato dell'applicazione di quest'ultimo si può ottenere dall'applicazione del primo seguita dall'applicazione di un'altra sostituzione. Allora, per i nostri scopi siamo interessati, fra tutti i possibili unificatori, solo a quello più generale. Esempio. Supponiamo che le ipotesi a disposizione siano costituite dalle seguenti regole: 1. computer(x) :- parte(x,y), tastiera(y), parte(x,z), stampante(z). 2. stampante(w) :- ha_testina(w). e dai seguenti fatti: 3. parte(a,b). 4. parte(a,c). 5. ha_testina(c). 6. tastiera(b). Vogliamo dimostrare che l'oggetto a in questione è un computer. Tramite il meccanismo di dimostrazione per refutazione, aggiungiamo alle ipotesi la negazione della tesi: 8. ¬ computer(a). o, in forma di clausola, :- computer(a). e cerchiamo di dimostrare l'inconsistenza, ossia la clausola vuota: 9. :- parte(a,y), tastiera(y), parte(a,z), stampante(z). ottenuta sostituendo nell'ipotesi 1 x con a e risolvendo con l'ipotesi 8; 10. :- tastiera(b), parte(a,z), stampante(z). ottenuta sostituendo nella formula 9 y con b e risolvendo con l'ipotesi 3; 11. :- parte(a,z), stampante(z). 40 ottenuta risolvendo la formula 10 con l'ipotesi 6; 12. :- stampante(c). ottenuta sostituendo z con c nella formula 11 e risolvendo con l'ipotesi 4; 13. :- ha_testina(c). ottenuta sostituendo w con c nell'ipotesi 2 e risolvendo con la formula 12; 14. ottenuta risolvendo la formula 13 con l'ipotesi 5. 41 CONCETTUALIZZAZIONE Definizione. Il processo che porta ad esprimere la conoscenza tramite la logica è chiamato concettualizzazione. Esistono tre tipi di concetti che possono essere espressi: • oggetti, ossia qualunque cosa di cui si voglia parlare; • funzioni, che consentono di associare oggetti ad oggetti; • relazioni, che collegano oggetti fra loro. Essi possono essere sia reali che astratti (o addirittura immaginari). Generalmente non si descrive tutto il mondo, ma ci si limita a quell'insieme necessario e sufficiente agli scopi che ci si prefiggono. Dagli scopi dipende anche il livello di dettaglio a cui portare la descrizione, che se è troppo specifico può rendere macchinoso il ragionamento, se è troppo generale può renderlo addirittura impossibile. Si deduce che non esiste un'unica concettualizzazione di una stessa cosa, e che a seconda di quella scelta possono variare sia la trattabilità che la chiarezza del ragionamento. 42 Esempio. Si consideri come oggetto da formalizzare la seguente configurazione di blocchi: a b d c e Concettualizzandola, otteniamo un insieme di oggetti, corrispondenti ai blocchi: {a, b, c, d, e} e possiamo definirvi la funzione posato_su, che associa ad ogni blocco quello posato su di esso (se esiste): posato_su = {(b,a), (c,b), (e,d)} e le relazioni sopra (che indica tutti gli oggetti che sono al di sopra di altri) e libero (che indica gli oggetti che non ne hanno altri al di sopra): 43 sopra = {(a,b), (a,c), (b,c), (d,e)} libero = {a, d} Va notato che si sarebbero potute definire molte altre funzioni e/o relazioni sui blocchi, e che avremmo potuto considerare fra gli oggetti anche la base su cui i blocchi sono posati, ma sono state tralasciate in quanto ininfluenti ai nostri scopi. Analogamente, si sarebbero potuti descrivere gli stessi oggetti in termini di gruppi di blocchi o di molecole che li compongono, ma si è ritenuto che questo livello di dettaglio sia il più adatto. Alcune concettualizzazioni non consentono di ragionare riguardo alle proprietà delle proprietà. La soluzione risiede nella reificazione, ossia nel considerare le proprietà come oggetti, in modo da poter definire su di essi funzioni e relazioni. Esempio. Sia data la concettualizzazione costituita da un insieme di blocchi {a, b, c, d, e}, priva di funzioni e comprendente le relazioni {rosso, bianco, blu} che legano ogni blocco al relativo colore. Essa ci consente di considerare i colori dei vari blocchi, ma non le eventuali proprietà di tali colori. 44 La soluzione consiste nel reificare i colori, trasformandoli in oggetti, associandoli ai relativi blocchi tramite una funzione colore e definendo su di essi le relazioni volute, come ad esempio caldo. Esempio. Consideriamo alcune figure date ai bambini come esempi per insegnargli i concetti di fisica, e le relative descrizioni logiche in base al linguaggio definito (intuitivo). Forza interna: Il primo concetto che si vuole descrivere è la forza interna, intesa dai bambini come la capacità di opporre resistenza. Ha forza interna un uomo molto grande e pesante (u1) che viene u1 spinto da un uomo grande e pesante u2 (u2) che resta fermo. ha_forza _interna(u1) :- uomo(u1), molto_grande(u1), molto_pesante(u1), uomo(u2), grande(u2), pesante(u2), spinge(u2, u1), fermo(u2). Non ha forza interna un uomo piccolo e leggero (u3) che viene spinto da un u1 uomo molto grande e pesante (u1) e u3 si muove. 45 ¬ ha_forza _interna(u3) :- uomo(u3), piccolo(u3), leggero(u3), uomo(u1), molto_grande(u1), molto_pesante(u1), spinge(u1, u3), in_movimento(u3). Ha forza interna una pietra molto grande e pesante (p1) che non si muove u2 se viene spinta da un uomo grande e p1 pesante (u2). ha_forza _interna(p1) :- pietra(p1), molto_grande(p1), molto_pesante(p1), uomo(u2), grande(u2), pesante(u2), spinge(u2, p1), fermo(p1). Forza acquisita: Il primo significato che i bambini associano a tale concetto è quello di capacità di causare danno. Ha forza acquisita un uomo pesante e molto grande (u6) che urta un u6 v1 vetro (v1) che si rompe. ha_forza _acquisita(u6) :- uomo(u6), molto_grande(u6), pesante(u6), vetro(v1), urta(u6, v1), si_rompe(v1). 46 Ha forza acquisita un uomo pesante e molto grande (u6) che urta una u6 s1 scatola (s1) che si rompe. ha_forza _acquisita(u6) :- uomo(u6), pesante(u3), molto_grande(u6), scatola(s1), urta(u6, s1), si_rompe(s1). Ha forza acquisita una pietra pesante e molto grande (p2) che si muove e p2 o1 colpisce un altro oggetto (o1) che si rompe. ha_forza _acquisita(p2) :- pietra(p2), pesante(p2), molto_grande(p2), in_movimento(p2), oggetto(o1), urta(p2, o1), si_rompe(o1). Forza acquisita: Un'altra interpretazione del concetto di forza acquisita riguarda la causa del moto degli oggetti. Ha forza acquisita una pietra u8 p3 (p3)che si muove spinta con forza da un uomo (u8). ha_forza _acquisita(p3) :- pietra(p3), uomo(u8), spinge(u8, p3), esercita_forza(u8, p3), in_movimento(p3). 47 Non ha forza acquisita una pietra (p4) che non si muove, non essendoci p4 nessuna forza a spingerla. ¬ ha_forza _acquisita(p4) :- pietra(p4), ferma(p4), ¬ esercita_forza(x, p4). Ha forza acquisita una pietra (p5) che si muove nell'aria u9 p5 lanciata da un uomo (u9). ha_forza_acquisita(p5) :- pietra(p5), in_movimento(p5), in_aria(p5), uomo(u9), lanciato_da(p5, u9). Concludiamo con due esempi che riguardano entrambi i concetti. p6 u10 48 p7 La pietra p6 è pesante e molto grande, e non si muove. Essa ha forza interna, ma non acquisita. ha_forza_interna(p6) :- pietra(p6), pesante(p6), molto_grande(p6), ferma(p6). ¬ ha_forza_acquisita(p6) :- pietra(p6), pesante(p6), molto_grande(p6), ferma(p6). La pietra p7 è simile alla pietra p6, ma ha sia forza interna che acquisita. ha_forza_interna(p7) :- pietra(p7), pesante(p7), molto_grande(p7), in_movimento(p7), in_aria(p7), lanciata_da(p7, u10). ha_forza_acquisita(p7) :- pietra(p7), pesante(p7), molto_grande(p7), in_movimento(p7), in_aria(p7), lanciata_da(p7, u10). 49