Laurea Magistrale in “Cinema e Media” Corso di “Rappresentazione e Algoritmi” 2014-15 Modulo I - 6 CFU mutuato da Laurea Magistrale in “Scienze del Corpo e della Mente” 6 CFU Laurea Magistrale in “Scienze della Mente” Corso di “Intelligenza artificiale” 2013-14 Modulo I - 4 CFU Vincenzo Lombardo Note per il corso Queste note per i corsi di “Rappresentazione e algoritmi” sono parte del programma d’esame 2014/15. L’idea di scrivere le note scaturisce dalla considerazione che, essendo frequentato il corso anche da studenti provenienti da altre sedi in Italia o all’estero, spesso la preparazione di base dell’informatica non è sufficiente per affrontare lo studio dei testi adottati (come da guida degli studi). Dopo una ricerca sul web di testi e dispense possibili, mi sono convinto che sono tutti pensati per scopi diversi da un corso nell’ambito dei media o della psicologia. Gli esempi riportati, la presentazione degli argomenti, l’obiettivo a cui è destinato lo studio non sono familiari agli studenti di “Cinema e media” e di “Scienze del Corpo e della Mente”. BOZZA: MODELLAZIONE FORMALE DI DATI, CONOSCENZA, PROCESSI Commenti benvenuti! Aggiornamento: 22 ottobre 2014 1 Capitolo 4 La logica dei predicati Come abbiamo visto nel capitolo precedente, la logica proposizionale non riesce a cogliere la struttura interna delle proposizioni, anche se queste presentano similarità molto forti. Ad esempio, non si riesce a generalizzare sulla rappresentazione che ci sia un pozzo in una cella qualsiasi. Le rappresentazioni in logica proposizionale di “C’è un pozzo in [1,2].” e “C’è un pozzo in [2,1].”, che noi abbiamo rappresentato con i simboli proposizionali P1,2 e P2,1 rispettivamente, non hanno alcuna relazione tra di loro. L’idea di associare un fatto simile, l’esistenza di un pozzo in una cella, a più istanze di cella, è una conoscenza di cui gli esseri umani dispongono e, dal punto di vista della rappresentazione, evita il proliferarsi di espressioni logiche. In poche parole, la logica proposizionale manca del potere espressivo sufficiente a rappresentare la conoscenza che è di interesse nella maggior parte dei domini delle attività umane. Tuttavia, la logica proposizionale ha contribuito a rendere esplicita la conoscenza impiegata (conoscenza dichiarativa) che negli algoritmi tradizionali è nascosta nel codice. Occorre avvicinarsi un po’ di più a come l’uomo rappresenta la conoscenza, rivolgendoci ad altri formalismi logici. Rammentiamo che non possiamo usare il linguaggio naturale (che rimane un nostro importante termine di paragone) perché siamo interessati a linguaggi formali non ambigui, su cui si possano innestare procedure di inferenza. Il candidato immediato è la logica dei predicati (o del prim’ordine), su cui si sono concentrati gli sforzi dei ricercatori in ambito filosofico, matematico e informatico per più di un secolo (se consideriamo la sua versione moderna). Dopo le premesse introduttive, affrontiamo lo studio del linguaggio della logica dei predicati e delle procedure di inferenza ad essa associate. Indice 1. 2. 3. 4. La questione dell’impegno ontologico Sintassi e semantica della logica dei predicati Inferenza con la logica dei predicati Esempio di rappresentazione della conoscenza e di inferenza con la logica dei predicati 2 1. La questione dell’impegno ontologico La logica proposizionale, nella rappresentazione della conoscenza, presenta molti vantaggi e qualche svantaggio. Innanzitutto è dichiarativa, cioè consente di separare la conoscenza, esprimendola in modo esplicito. Ricordiamo la differenza con gli algoritmi tradizionali incontrati nel Capitolo 1, che “occultano” nella logica della procedura la conoscenza implicata. Inoltre, la logica proposizionale, grazie soprattutto ai connettivi di negazione e di disgiunzione, permette la rappresentazione della conoscenza parziale (“Non so per colpa di quale pozzo ho una corrente d’aria in una cella, ma sarà uno di questi due o entrambi.”). Poi, la logica proposizionale ha la proprietà di essere composizionale, cioè il significato di proposizioni complesse si ricava dalle proposizioni semplici, associando un significato ai connettivi (formulato mediante le tabelle di verità). Ad esempio il significato di si ricava dai significati di B1,1 e di P1,2. Infine, in logica proposizionale, il significato è indipendente dal contesto (a differenza del linguaggio naturale, che è dipendente dal contesto linguistico - “Signori si nasce e io modestamente lo nacqui”, e extra-linguistico - “In questa classe ci sono alcuni studenti preparati.”). Questo è un vantaggio perché permette di superare i problemi dovuti all’ambiguità e la difficoltà di reperire i referenti coinvolti dalle espressioni pronominali o deittiche, rispettivamente. Contro tutti questi vantaggi, la logica proposizionale ha un potere espressivo limitato (il confronto si fa almeno con il linguaggio naturale, in cui è espressa la maggior parte della nostra conoscenza). Non si può dire, ad esempio, “I pozzi causano correnti d’aria nelle celle adiacenti.”, ma occorre scrivere un enunciato o proposizione per ogni cella. A questi aspetti di generalizzazione, risponde, con un po’ di sacrificio, la logica dei predicati (o del prim’ordine, presto si capirà perché), che si presenta con un maggiore impegno ontologico. L’ontologia, lo studio dell’esistente, determina le categorie fondamentali mediante le quali si interpreta il mondo. Laddove la logica proposizionale assume che il mondo si possa rappresentare come un insieme di fatti, atomici o composti con l’introduzione dei connettivi, la logica dei predicati (come fa del resto il linguaggio naturale) assume che il mondo sia fatto di • • • Oggetti o individui, che popolano il mondo: persone, palazzi, numeri, colori, partite di calcio, guerre, stanze, squadre di calcio, …; si tratta di oggetti concreti e astratti, detti anche entità, eventualmente con estensione spaziale e/o temporale (nel caso di oggetti concreti); Funzioni che individuano oggetti a partire da altri oggetti: “madre di”, “miglior amico di”, “la gamba sinistra di”, “il primogenito di”, …; si tratta di un modo indiretto di identificare oggetti del mondo (gli oggetti di partenza sono argomenti della funzione, l’oggetto che si intende identificare è il valore della funzione); Relazioni e proprietà, che valgono tra gli oggetti del mondo: la proprietà di un oggetto di essere “rosso”, “rotondo”, “primo”, …; le relazioni tra due o più oggetti, ad esempio, “madre di”, “parte di”, “ama”, “in mezzo a”…, “regala”, “…; le relazioni sono o proprietà, cioè attributi, qualcosa che si predica, di un singolo oggetto, o legami tra più oggetti del mondo; 3 Notiamo come “madre di” sia stato riportato sia tra le funzioni sia tra i predicati: come funzione, si intende l’oggetto “madre di x” che viene individuato a partire dall’oggetto “x”; come predicato, si intende la relazione tra due individui, “x” e “y”. Come significato, le funzioni sono individui, mentre le relazioni sono vere e o false (si veda dopo). 2. Sintassi e semantica della logica dei predicati Come nel calcolo proposizionale, anche la logica dei predicati è priva di assiomi, cioè non si esprimono contenuti veri e propri, ma si definiscono solo gli aspetti formali, con i quali viene codificata una KB. Inoltre, anche qui c’è bisogno di definire il sottoinsieme di tutte le stringhe, partendo dagli atomi. Si parla di enunciati o formule. Cominciamo dalla sintassi, esemplificando i concetti introdotti, ricorrendo di nuovo al mondo del Wumpus. Costanti: , , , ... Variabili: , , , , ... Funzioni: , , ... Predicati: , , Connettivi: , , , Uguaglianza: Quantificatori: , , , , , , , , ... , , Una costante è un singolo e noto oggetto del dominio; una variabile è un singolo e non noto oggetto del dominio; una funzione individua univocamente un oggetto del dominio tramite una relazione tra altri n oggetti del dominio (detti argomenti, che abbiamo indicato con dei segnaposto “_”); un predicato è una relazione tra n oggetti (argomenti) del dominio; i connettivi, gli stessi della logica proposizionale, permettono di costruire predicati complessi a partire da predicati semplici, in modo ricorsivo; l’uguaglianza tra oggetti è un tipo speciale di predicato con due argomenti, riportato con una notazione simmetrica per comodità, invece di parentesi di argomenti; infine, i quantificatori, come vedremo determinano il comportamento delle variabili. Sintassi della logica dei predicati Un enunciato (o formula o predicato) atomico è formato da un predicato (che ha una determinata arità) e da un numero di argomenti pari all’arità del predicato stesso: Predicato (Termine1, Termine2, ..., Terminen) oppure Termine1 = Termine2 dove Termine è una costante, una variabile o una funzione (simbolo funzionale e argomenti) applicata un certo numero di termini. Per cui il Termine ha una definizione ricorsiva. 4 Costante oppure Variabile oppure Simbolo di funzione (Termine1, Termine2, ..., Terminem) Vediamo alcuni esempi. Si noti che non tutti gli enunciati riportati come esempio sono veri (della semantica ci occupiamo tra un attimo). Gli enunciati composti sono formati da enunciati atomici mediante l’uso dei connettivi: • • • • • Se è un predicato o un uguaglianza, è un predicato (negazione); Se e sono predicati o uguaglianze, è un predicato (congiunzione); Se e sono predicati o uguaglianze, è un predicato (disgiunzione); Se e sono predicati o uguaglianze, è un predicato (implicazione); Se e sono predicati o uguaglianze, è un predicato (bicondizionale). Alcuni esempi: 5 Semantica della logica dei predicati Gli enunciati sono veri o falsi rispetto a un modello e a un’interpretazione. Nella figura sottostante abbiamo un modello in cui sono indicati gli oggetti e le relazioni; inoltre, è indicata un’interpretazione, che mette in relazione costanti, funzioni e predicati con gli elementi del modello. Le costanti sono posizionate vicino agli oggetti, le funzioni sono indicate con linee tratteggiate (dall’argomento alla funzione, dalla funzione al valore), i predicati sono indicati con linee solide verso gli argomenti. Quindi, il modello contiene oggetti (cioè elementi del dominio) e relazioni tra di essi; l’interpretazione specifica i referenti per • simboli di costante, che sono interpretati come oggetti; • simboli di funzione, che sono interpretati come relazioni funzionali, cioè relazioni che identificano un solo oggetto a partire da altri oggetti come argomenti; • simboli di predicato, che sono interpretati come relazioni tra un certo numero di oggetti. Un enunciato atomico Predicato (Termine1, ..., Terminen) oppure Termine1 = Termine2 è vero se e solo se gli oggetti a cui si riferiscono i termini Termine1, ..., Terminen sono tra di loro nella relazione a cui si riferisce Predicato. Gli enunciati composti sono valutati secondo le tabelle di verità dei singoli connettivi, che abbiamo studiato per la logica proposizionale. 6 Quantificatori I quantificatori sono utili per esprimere caratteristiche di interi insiemi di oggetti, senza dovere introdurre predicati che enumerano gli oggetti uno per uno. Ad esempio, i quantificatori possono esprimere una conoscenza del tipo “I pozzi causano correnti d’aria nelle celle adiacenti.”, riportato in precedenza. Esistono due quantificatori nella logica dei predicati, il quantificatore universale e il quantificatore esistenziale . Cominciamo dal primo. Le formule con la quantificazione universale delle variabili sono del tipo: L’esempio “Tutti gli studenti di Rappresentazione e Algoritmi sono intelligenti.” si può codificare nel modo seguente: La semantica delle formule quantificate universalmente è la seguente: La formula è vera in un modello m se e solo riferirsi a ogni possibile oggetto del mondo. è vera con x che può E’ come se l’espressione con il quantificatore universale fosse equivalente alla congiunzione delle istanziazioni di . Cioè, se nel nostro modello abbiamo oggetti (in questo esempio non ci sono funzioni, solo costanti), inserire il quantificatore universale davanti alla formula , è equivalente, dal punto di vista del significato, ad avere una KB fatta in questo modo: La variabile è stata sostituita con tutti i cosiddetti termini ground, cioè termini che non contengono variabili. 7 Si può osservare che: L’implicazione ( universale . è il principale connettivo in uso con il quantificatore Se consideriamo il significato della formula notiamo che essa è vera quando l’antecedente è falso (e ciò vale per tutte le costanti che non sono studenti) e quando sono veri sia l’antecedente che il conseguente (sono sia studenti sia intelligenti). Corrisponde alla seguente espressione in linguaggio naturale: “Per ogni individuo del modello, se è uno studente di ReA, allora è intelligente.”. Si noti anche che la formula è vera anche se non esiste nessuno studente al corso di ReA; nel momento in cui esista, deve essere anche intelligente. Vediamo cosa succede se usiamo gli altri connettivi nella formula. • o Corrisponde all’espressione “Tutti gli individui del modello sono studenti di ReA e sono intelligenti.”. o Si capisce che è un’interpretazione molto vincolante rispetto alla frase italiana di partenza “Tutti gli studenti di ReA sono intelligenti.” • o Corrisponde all’espressione “Tutti gli individui del modello o sono studenti di ReA o sono intelligenti o entrambe le cose.”. o Continua a essere molto vincolante perché richiede che tutti gli individui siano una delle due cose o entrambe. • o Corrisponde all’espressione “Tutti gli individui del modello sono studenti di ReA se e solo se sono intelligenti.”. o Vincola gli studenti di ReA a essere intelligenti (come succede per l’implicazione sopra), ma purtroppo vincola gli individui intelligenti a essere studenti di ReA (e questo non era nell’enunciato originale). Le formule con la quantificazione esistenziale delle variabili sono del tipo: L’esempio “Qualche studente di Rappresentazione e Algoritmi è preoccupato.” si può codificare nel modo seguente: La semantica delle formule quantificate esistenzialmente è la seguente: La formula è vera in un modello m se e solo se un qualche oggetto del modello (almeno uno). è vera con legato a E’ equivalente alla disgiunzione delle instanziazioni di . Cioè, con gli oggetti del modello sopra, si ha che l’espressione è equivalente alla KB seguente: 8 Si può osservare che: La congiunzione ( esistenziale . è il principale connettivo in uso con il quantificatore Per esempio, se consideriamo il significato inteso della formula notiamo che essa è vera solo quando entrambi i congiunti sono veri (un individuo esiste davvero che è sia studente di ReA sia intelligente). Corrisponde alla seguente espressione in linguaggio naturale: “Esiste almeno un individuo del modello, che è sia uno studente di ReA sia intelligente.”. Si noti che stavolta la formula è vera solo se esiste veramente almeno uno studente al corso di ReA che è anche intelligente. Vediamo cosa succede se usiamo gli altri connettivi nella formula. • o Corrisponde all’espressione “Esiste un individuo tale che se si tratta di uno studente di ReA allora è intelligente.”. o Si capisce che è un’interpretazione poco vincolante rispetto alla frase italiana di partenza “Qualche studente di ReA è intelligente.”, che richiede l’effettiva esistenza dell’individuo. • o Corrisponde all’espressione “Esiste un individuo tale che o è uno studente di ReA o è intelligente o entrambe le cose.”. o Continua a essere poco vincolante, perché va bene anche se lo studente non è intelligente o addirittura se esiste uno intelligente che non sia studente. • o Corrisponde all’espressione “Esiste un individuo tale che è uno studente di ReA se e solo se è intelligente.”. o E’ molto vicina alla congiunzione, ma è vera anche se l’individuo non è né studente di ReA né intelligente. Alcune proprietà comuni dei quantificatori sono le seguenti: 9 • • • Dire o è equivalente, dal punto di vista logico, a o , rispettivamente, dato il carattere indipendente dei due quantificatori; è invece diverso da , in quanto l’interpretazione dipende dall’ordine dei quantificatori. Si consideri ad esempio la frase “Tutti amano qualcuno.” o La formula interpreta la frase come se il qualcuno x dipenda dall’individuo y selezionato di volta in volta (“Ognuno ama qualcuno.”). o La formula interpreta la frase come se il qualcuno x esista indipendente dall’individuo y selezionato di volta in volta (“Qualcuno è amato da tutti.”). Dualità dei quantificatori: ogni quantificatore si può esprimere con l’altro quantificatore e la negazione (leggi di De Morgan per i quantificatori) o è come dire ; ad esempio , cioè “a tutti piace il gelato” è come dire che “non esiste qualcuno a cui non piaccia il gelato”; o è come dire ; ad esempio , cioè “a qualcuno piace il baccalà” è come dire che “non è vero che a nessuno piace il baccalà”; Concludiamo questa rassegna sulla rappresentazione della conoscenza con la logica del prim’ordine con l’uguaglianza, un predicato di arità due, che si può scrivere in modo simmetrico. Termine1 = Termine2 è vero sotto una data interpretazione se e solo se Termine1 e Termine2 si riferiscono allo stesso oggetto. Esempi di rappresentazione della conoscenza con la logica dei predicati 1) Esempio: variazione sull’arringa dell’avvocato Se il mio cliente è colpevole, allora il coltello era nel cassetto. Ma, o il coltello non era nel cassetto o chiunque lo avrebbe visto, il coltello. Tuttavia, se il coltello non era lì il 10 ottobre, allora non lo ha visto nessuno, il coltello. Inoltre, se il coltello fosse stato lì il 10 ottobre, allora non solo il coltello sarebbe stato nel cassetto ma anche il martello sarebbe stato nel ripostiglio. Ma tutti sappiamo che gli utensili non erano nel ripostiglio. Per cui, signore e signori della giuria, il mio cliente è innocente. adattato da [http://nicolas.thiery.name/macs358/Notes/1_FormalLogic/PropositionalLogic.pdf] Si possono identificare le seguenti proposizioni atomiche (scorporando i connettivi analizzati nel linguaggio naturale e riportando le espressioni a una forma neutra al presente). • • • P1: Il mio cliente è colpevole. P2: Il coltello è nel cassetto. P3: Chiunque vede il coltello. 10 • • • P4: Il coltello è lì il 10 ottobre. P5: Il martello è nel ripostiglio. P6: Gli utensili sono nel ripostiglio. Predicati: Colpevole(_), In(_,_), Vedere(_,_), Lì(_,_) Costanti: MioCliente, Coltello, Cassetto, Ripostiglio, Martello, 10oct Una possibile KB è la seguente (si ricordi che la KB dipende dal compito, che nel nostro caso è limitato a verificare α): • R1: • R2: o Se il mio cliente è colpevole, allora il coltello è nel cassetto. o o O il coltello non è nel cassetto o chiunque vede il coltello. o • R3: • R4: o Se il coltello non è lì il 10 ottobre, allora nessuno vede il coltello. o o Se il coltello è lì il 10 ottobre, allora il coltello è nel cassetto e il martello è nel ripostiglio. o • Con • R5: α: o Gli utensili non sono nel ripostiglio. o o Il mio cliente è innocente. o Si noti che sarà difficile fare qualche inferenza significativa se non si aggiungono alla base di conoscenza la formule che rappresenta il fatto che il martello sia un utensile, cioè: • R6 (conoscenza aggiuntiva) o Il martello è un utensile. o [Esercizio: Trasformare la costante Martello in un oggetto generico della categoria dei Martelli e usarlo negli altri enunciati della KB.] 2) Esempio: dominio della parentela 11 Si assumo come primitivi (non definiti) i predicati e • Definizione di Consanguineo, basandosi sul predicato Genitore: • • I fratelli sono consanguinei: La madre di qualcuno è il suo genitore femmina: • La consanguineità è una proprietà simmetrica: . 3. Inferenza con la logica dei predicati L’approccio seguito per le inferenze con la logica dei predicati è di rendere la KB in termini proposizionali e quindi agire come per la logica proposizionale vista in precedenza. La cosiddetta proposizionalizzazione prevede la sostituzione delle variabili in termini ground, cioè termini che non contengono variabili. Un predicato proposizionalizzato è come se fosse una proposizione vera e propria della logica proposizionale. Con l’ottica della proposizionalizzazione, introduciamo due regole di inferenza. Istanziazione universale (Universal instantiation – UI) Ogni istanziazione di un enunciato quantificato universalmente è conseguenza logica di esso: per ogni variabile e termine ground . Ad esempio, riconsiderando il caso dell’enunciato: con le costanti: si ha che i seguenti enunciati sono tutti conseguenze logiche: 12 Istanziazione esistenziale (Existential instantiation - EI) Dati l’enunciato α, la variabile v e il simbolo di costante k che non è presente nella KB, si ha che: dove k è un nuovo simbolo di costante, detta costante di Skolem. Ad esempio, riconsiderando il caso dell’enunciato: con l’insieme solito di costanti: per skolemizzare, occorre introdurre una nuova costante (C1) non presente in KB. Applicando le istanziazioni universale ed esistenziale, si riesce quindi a proposizionalizzare la KB. Notiamo infatti che un enunciato che contiene solo termini ground altri non è che una proposizione: solo gli umani assegnano a una stringa come un significato che dipende dalle sottostringhe e ; per la macchina, non vi è alcuna differenza con . Il significato di una stringa non dipende dalle componenti delle stringhe stesse, ma da come una stringa si relaziona con altre stringhe. Per fare delle inferenze con una KB che è stata proposizionalizzata, si possono applicare le tecniche utilizzate per la logica proposizionale. Supponiamo che la KB contenga solo le seguenti formule: Usando l’instanziazione universale con tutte le costanti della KB, la KB contiene le seguenti formule: 13 Questa nuova KB si dice proprio KB proposizionalizzata, come se contenesse i seguenti simboli “proposizionali” (diversi dai soliti P1, P2, …, solo perché possiedono una struttura di predicato, comprensibile dagli umani per i nomi scelti): Ogni KB in logica dei predicati può essere proposizionalizzata in modo da mantenere la nozione di conseguenza logica. In particolare si può dimostrare facilmente che: Un enunciato ground è conseguenza logica della KB proposizionalizzata se e solo se è conseguenza logica della KB originale. Quindi, l’idea è di proposizionalizzare la KB e applicare i metodi di inferenza della logica proposizionale. Esiste però un problema con i simboli di funzione, perché possono rendere la proposizionalizzazione un processo infinito (in particolare, si possono creare infiniti termini ground). Ad esempio, se ho la funzione e la costante , non so quando fermarmi nella generazione degli individui ottenuti applicando la funzione anche a tutti gli individui generati: Il problema è stato risolto (parzialmente) nel 1930 da Herbrand, che dimostrò il suo teorema: Se un enunciato α è conseguenza logica di una KB in logica dei predicati, allora esso è conseguenza logica di un sottoinsieme finite della KB proposizionalizzata. L’idea del teorema, come della dimostrazione, è simile all’idea che sta alla base dell’algoritmo di ricerca detto approfondimento iterativo: a ogni iterazione, si fissa un 14 livello di profondità n e si generano i termini ground applicando funzioni fino alla profondità di annidamento n. Ora, visto che α è conseguenza logica della KB originale per ipotesi di teorema, esiste necessariamente un tale n al cui livello la KB proposizionalizzata ha α come conseguenza logica. Il livello di profondità aumenta di 1 a ogni ciclo; o prima o poi raggiungeremo il livello giusto, quel livello tale che la KB proposizionalizzata di quel livello ha come sua conseguenza logica α. A questo punto, sembra tutto risolto, ma non è vero. Come si può notare, il problema esiste quando α non è conseguenza logica, perché in questo caso la ricerca del livello di profondità n proseguirà all’infinito. E, infatti, Turing e Church dimostrarono nel 1936 che per la logica dei predicati la nozione di conseguenza logica è semi-decidibile. Cioè in generale, se α è conseguenza logica di KB, allora esiste un algoritmo (nel caso di Herbrand, trovare una KB proposizionalizzata adatta) in grado di rispondere “Si. E’ conseguenza logica!”; se, invece, α non è conseguenza logica, non si riesce a trovare un algoritmo in grado di rispondere “No. Non è conseguenza logica!”. Anche nel caso positivo, comunque, esiste un problema di performance. Il processo di proposizionalizzazione genera comunque una marea di enunciati irrilevanti che non vengono presi in considerazione per dimostrare una certa conseguenza logica: infatti, così come avveniva per le “inutili” righe della tabella di verità che contenevano simboli proposizionali necessariamente falsi, istanziare il predicato su , , , … non è utile per la dimostrazione della conseguenza logica . Per questo motivo, si può proposizionalizzare in modo mirato. L’operazione opportuna si chiama unificazione. In questo caso, si può calcolare l’inferenza applicando una sostituzione θ che renda uguali due predicati. Ad esempio, se consideriamo i predicati e e applichiamo la sostituzione , otteniamo l’uguaglianza dei due predicati, in quanto diventano entrambi , in cui la variabile è stata sostituita dalla costante e la variabile è stata sostituita dalla costante . L’unificazione di due predicati è quindi una sostituzione delle variabili che renda i due predicati uguali. Cioè l’unificazione dei predicati α e β è una sostituzione θ che applicata a α e β, producendo αθ e βθ li rende uguali. Nella seguente tabella si hanno un po’ di casi possibili. 15 NON UNIFICA Come si vede, in presenza di variabile e costante, la variabile viene sostituita semplicemente dalla costante, anche nel caso di più sostituzioni o se la variabile è utilizzata all’interno di una funzione (vedi ); nel caso in cui si cerca di sostituire la stessa variabile con due valori diversi, l’unificazione fallisce. Osserviamo un paio di questioni operative. 1. Prima di procedere all’unificazione, conviene sempre rendere i nomi delle variabili unici in modo da non introdurre vincoli che non ci sono nella KB originale: ad esempio, se in un enunciato abbiamo il predicato e in un altro enunciato abbiamo il predicato , le variabili non sono vincolate a essere unificate con la stessa costante perché provengono da due enunciati diversi (si dice che lo “scope”, cioè l’ambito in cui vale la variabile, è limitato all’enunciato, e non va oltre l’enunciato); procedendo a una sostituzione di variabili prima di procedere all’unificazione – cioè, diventa , si evita il problema di imporre che sia necessario sostituirli con la stessa costante. 2. Si noti infine che nell’ultima riga della tabella, si ha un caso in cui una variabile è sostituita da un’altra variabile (y/z). Sarebbero possibili altre unificazioni, cioè sostituzioni che rendono uguali i due predicati ( e ): ad esempio la sostituzione è anche un’unificazione, ma sarebbe meno generale della prima, in quanto la prima non vincola a una costante specifica i valori di e , ma solo a essere uguali. Nell’unificazione, si prende sempre la sostituzione più generale (si chiama Most General Unifier, MGU). Se, grazie all’unificazione, riusciamo a rendere uguali due predicati, allora si può procedere a lavorare con le regole di inferenza. Come nel caso della logica proposizionale, noi possiamo utilizzare sia equivalenze logiche sia conseguenze logiche per inferire dalla KB la proposizione cercata. Per la logica dei predicati, ci concentriamo su una sola regola di inferenza, che si rivela molto utile nelle applicazioni comuni della logica nel Semantic Web. E’ una forma generalizzata del Modus Ponens. Nel Capitolo 3, abbiamo introdotto il Modus Ponens per la logica proposizionale: l’enunciato ) è valido. 16 Ora lo generalizziamo nel senso di applicarlo alla logica dei predicati, mediante il supporto dell’unificazione, per implementare l’uguaglianza tra due predicati. La regola del Modus Ponens Generalizzato (GMP) si può schematizzare nel seguente modo: dove , per tutte le i. Si intende che le sono uguali a meno della sostituzione , che viene applicata alla conclusione . Infatti, la conclusione vale solo per la con la sostituzione (cioè per ). Facciamo un esempio. Consideriamo le due proposizioni: “Tutti gli studenti di ReA che hanno consegnato gli esercizi possono sostenere l’orale. Giorgio Rossi è uno studente di ReA e ha consegnato gli esercizi.” La rappresentazione del Modus Ponens Generalizzato (GMP) in questo caso sarà: dove • • • , , . GMP è un metodo corretto e completo quando la KB consiste di clausole definite. Assumendo che tutte le variabili siano quantificate universalmente e la quantificazione esistenziale sia stata sostituita da una skolemizzazione, una clausola definita ha la forma di disgiunzione di proposizioni di cui una sola positiva: Se raccogliamo in parentesi (per l’associatività della disgiunzione) e applichiamo De Morgan (vedi Capitolo 3), otteniamo che corrisponde in forma di implicazione (vedi equivalenze nel Capitolo 3) a Una clausola definita senza proposizioni negate (ad esempio, ) è detta fatto. Quindi, se riusciamo a esprimere una KB in forma di clausole definite possiamo applicare la regola del Modus Ponens Generalizzato (GMP). Per dimostrare che l’enunciato è conseguenza logica di KB, si procede applicando la regola di inferenza GMP. Per rappresentare il processo di inferenza, si può usare un grafo and/or e il metodo di concatenazione all’indietro (Backward Chaining). 17 p1'θ!$! p2'θ!$! …! pn'θ!$! qθ!$! In questa parte del grafo AND/OR troviamo una rappresentazione dell’applicazione del Modus Ponens. In alto ci sono i predicati dell’antecedente, a cui è stata già applicata la sostituzione ; in basso, il conseguente (unico, nelle clausole definite) dell’implicazione, anch’esso con la sostituzione già applicata; l’arco disegnato tra le connessioni indica che tutte i predicati dell’antecedente sono in AND. Il grafo AND/OR di un’inferenza prevede più applicazioni del Modus Ponens, diventando di più livelli connessi tra loro. Più in basso vediamo un esempio. 4. Esempio di rappresentazione della conoscenza e di inferenza con la logica dei predicati Ora applichiamo tutto ciò che sappiamo sulla formalizzazione in logica dei predicati a un esempio di rappresentazione della conoscenza e di inferenza. La conduzione della soluzione completa dell’esempio ci consente di introdurre le pratiche dell’ingegneria della conoscenza, che traducono la conoscenza da un testo alla formalizzazione logica, e di eseguire dei test di inferenza con la regola del Modus Ponens Generalizzato in modo immediato. Saremo molto attenti a usare predicati che sono nella forma delle clausole definite e introdurremo delle linee guida che il lettore potrà usare in futuro nella costruzione eventuale di basi di conoscenza. Cominciamo dal testo, la nostra fonte di conoscenza espressa in linguaggio naturale, e dal problema da risolvere. Il crimine del Colonnello West [Russell, Norvig] La legge americana dice che è un crimine per un americano vendere armi a nazioni ostili. Il paese Nono, un nemico dell’America, possiede alcuni missili. Tutti i suoi missili gli sono stati venduti dal Colonnello West, che è americano. Dimostrare che il Colonnello West è un criminale. Nella pratica dell’ingegneria della conoscenza (knowledge engineering), occorre innanzitutto identificare il compito, l’obiettivo per cui si costruisce la base di conoscenza. E’ un passo fondamentale per un semplice motivo: ogni volta che si rappresenta della conoscenza, occorre porsi dei limiti sulla profondità dei nostri enunciati. Se, per esempio, devo parlare del calore e della temperatura, scenderò al livello di descrizione dell’agitazione termica delle molecole, se l’obiettivo è inferire la nozione del passaggio di stato di un materiale, ma mi limiterò a dire che sono in proporzione diretta se devo solo inferire che la temperatura di un corpo scende quando il corpo perde calore. Nel nostro esempio, l’obiettivo è già richiesto dall’esercizio, cioè dimostrare che il Colonnello West è un criminale. Una volta che l’obiettivo è individuato, occorre recuperare tutta la conoscenza possibile sull’argomento. Si possono studiare le enciclopedie e i manuali specialistici (scritti in linguaggio naturale e/o tecnico), consultare siti web specialistici, intervistare gli esperti 18 di dominio, per comprendere la relazione tra la conoscenza e l’obiettivo, astrarre gli aspetti importanti per il compito, evitare di essere troppo specifici, … nella codifica successiva della conoscenza. Nel nostro esempio (è un esercizio!), la conoscenza viene comunicata dal testo stesso (anche se occorrerà aggiungere delle informazioni) per riuscire a completare il compito. Tornando invece all’esempio citato in precedenza, occorre mettere insieme la conoscenza fisica intorno a calore e temperatura al livello richiesto dal compito. A questo punto, inizia la fase di codifica vera e propria. Consiste di tre sotto-fasi che operano in parallelo, influenzandosi l’una con l’altra, con andate e ritorni: • • • compilare un vocabolario di predicati, funzioni e costanti; codificare la conoscenza generale sul dominio; codificare la conoscenza specifica (cioè la descrizione) del problema. Si procede spezzando, come abbiamo già fatto nel caso dell’arringa dell’avvocato, in enunciati in linguaggio naturale. Si identificano gli oggetti del dominio, che diventeranno costanti, nel caso in cui siano identificabili direttamente, • • • • “la Repubblica Italiana” – “la guerra di Crimea” – “Claudia” – , … , , e funzioni, per gli oggetti identificati in relazione ad altri oggetti, • • • • “il presidente della Repubblica Italiana” – “il luogo della guerra di Crimea” – “la stanza di Claudia” – , … , , Si identificano quindi le relazioni tra gli oggetti, considerando la conoscenza generale, che coinvolge variabili e quantificatori (soprattutto universali) e scritte, nel nostro caso, in forma di clausole definite. Vediamo due esempi. • “Se uno fa una lesione al suo prossimo, si farà a lui come egli ha fatto all'altro” [legge del taglione, Codice di Hammurabi, Bibbia] Per ogni coppia di persone <x,y> e un’azione z compiuta da x su y che procura una lesione a y, esiste un qualcuno o qualcosa y’ che compirà l’azione simmetrica di z su x. Notare che AzioneSimmetrica è una funzione che data z, restituisce un’azione simmetrica ad essa. Non avessimo avuto il vincolo delle clausole definite, la versione più adeguata sarebbe stata: • “I cetacei sono animali acquatici dotati di respirazione polmonare.” [Aristotele] 19 interpretata come condizione necessaria, ma non sufficiente. Infine si codifica la descrizione specifica del problema, tipicamente con fatti, cioè clausole definite che sono formate solo dalla proposizione positiva. Di nuovo, vediamo due esempi. • “Pasquale ha ferito Ciro, rompendogli un dente.” • “Moby Dick è una balena.” Durante queste codifiche, si fa crescere un vocabolario, in modo da tenere conto delle costanti, funzioni e predicati che vengono introdotti dalle formule che descrivono la conoscenza generale e la situazione specifica. • Costanti: , , • • , , , , , …; Funzioni: Predicati: , , , , , , , ,… Costruendo il vocabolario, si nota che sarà distinto da e che è distinto da , per cui bisogna introdurre altri predicati per fare in modo che si possa realizzare una corrispondenza che il Modus Ponens possa sfruttare per realizzare le inferenze. In particolare, occorrono due formule simili del tipo: • “Le lesioni ai denti sono lesioni.” • “Le balene sono cetacei.” In alternativa, se il contesto dell’obiettivo si limita a un solo tipo di Cetaceo, si può rinunciare a rappresentare le Balene e introdurre direttamente il fatto: La codifica generale e specifica e il vocabolario vengono corretti e integrati opportunamente in modo mutuo, fino a che la base di conoscenza è completa e si può procedere alle inferenze. Codifichiamo ora la conoscenza del nostro esempio. E’ un crimine per un americano vendere armi a nazioni ostili. Nono è un nemico dell’America. 20 Nono possiede alcuni missili. Con la skolemizzazione (M1 costante di Skolem) diventa Ricordando che tutta la KB è una congiunzione di formule, si ha che l’ultima formula si può considerare come due congiunti della KB. Tutti i suoi missili gli sono stati venduti dal Colonnello West. West è americano. Dimostrare che il Colonnello West è un criminale. A questo punto si lavora per dimostrare che è conseguenza logica di KB. Si applica la regola di inferenza (nel nostro caso, GMP). Per rappresentare il processo di inferenza, usiamo il grafo and/or e il metodo di concatenazione all’indietro (Backward Chaining). Si parte da poco sopra , che viene posizionato in basso. A esso si connettono i predicati congiunti nell’antecedente del condizionale , a cui è stata applicata la sostituzione . L’arco disegnato tra le connessioni sta a indicare che tutte le condizioni sono in AND. Il predicato possibile connettere con dell’implicazione. Le variabili e del predicato alle costanti e , rispettivamente. i predicati rende dell’antecedente vengono legate 21 Per concludere la dimostrazione, occorre dimostrare i due fatti e , che però non sono presenti in KB. Tuttavia, questi due fatti si possono derivare da una KB estesa rispetto a quella attuale, in cui si aggiungono due nuovi enunciati. I missili sono armi. I nemici dell’America sono ostili. Grazie a questi due enunciati, di tipo generale, che codificano una conoscenza di tipo classe-sottoclasse (i missili sono un sottoinsieme di tutte le armi) e di tipo attributo (un nemico dell’America è un paese ostile, nella prospettiva Americo-centrica dell’esercizio – “La legge americana dice che …”). Le ultime fasi descritte corrispondono alla realizzazione di inferenze e all’eventuale (nel nostro esercizio, effettiva) correzione della KB, che può rivelarsi in più stadi di sviluppo errata, incompleta rispetto al compito, troppo ad hoc. Quindi, a ogni rilascio della KB, occorre far seguire una sessione di calcolo di inferenze e di eventuale debug/integrazione/correzione della KB. Conclusioni Questo esempio conclude questo capitolo sulla logica dei predicati. In particolare, abbiamo applicato, come regola di inferenza, il Modus Ponens Generalizzato, che è un 22 metodo corretto e completo per le clausole definite, una forma ristretta della logica dei predicati. Questa forma è di uso molto comune nella rappresentazione della conoscenza e ha avuto molte implementazioni efficienti. Sarà alla base delle logiche descrittive e delle ontologie computazionali, alla base del Semantic Web. [Esercizio: Ulisse e la maga Circe] Formalizzare in logica dei predicati (clausole definite) la seguente conoscenza: La leggenda dice che chi incontra Circe e beve la pozione magica viene trasformato in un maiale. Alcuni marinai di Ulisse incontrarono Circe e bevvero la pozione magica. Ulisse riuscì però a bere un antidoto, che gli era stato donato dal dio Ermes, e chi beve l’antidoto libera le vittime dell’incantesimo. Dimostrare, quindi, che i marinai furono liberati da Ulisse. Suggerimento: procedere come per l’esercizio svolto in precedenza (“colonnello West”); aggiungere eventualmente della conoscenza mancante (connessione tra la “coloro che sono trasformati in maiali” e “le vittime dell’incantesimo”). Bibliografia utile per questa sezione Stuart Russell, Peter Norvig, Intelligenza artificiale 3/Ed. - Vol. 1, Un approccio moderno, Pearson Education, 2010, pp. 704. Capitoli 8 e 9. http://www.logicinaction.org/ http://people.hofstra.edu/stefan_waner/realworld/logic/logicintro.html Voci utili di Wikipedia: Clausole di Horn e definite, Ontologia e voci correlate. 23
© Copyright 2024 Paperzz