La logica del primo ordine (FOL) e i suoi metodi d’inferenza

La logia proposizionale spesso non ci permette di esprimere in maniera semplice e concisa dei concetti piuttosto complicati sui quali ci interessa ottenere informazioni. Ci serve dunque un tipo di logica che si avvicini maggiormente al linguaggio naturale.

Introduciamo quindi la logica del primo ordine. A differenza della logica proposizionale, la conoscenza non ha più soltanto due stati—vero o falso—ma si distinguono nel mondo diversi oggetti che sono tra loro in relazione, anche se non tutte le relazioni portano effettivamente a della conoscenza valida.

Questo nuovo tipo di logica può contenere diversi tipi di informazioni, tra cui:

  • Costanti: nomi, numeri, città, oggetti, ecc.
  • Predicati: per esempio \texttt{Brother}, \texttt{Mother}, \texttt{>}, ecc. che esprimono delle relazioni. Le utilizziamo in maniera simile alle funzioni. Ad esempio indicando
    \texttt{Brother}(x, \, y)
    stiamo indicando che x è fratello di y.
  • Funzioni: per esempio \texttt{sqrt}, \texttt{LeftLegOf}, ecc. utilizzate per indicare concetti più complicati a cui non vogliamo associare un predicato. Tramite una funzione possiamo indicare dunque le gambe sinistre di tutte le persone come
    \texttt{LeftLegOf}(x)
    evitando di dover memorizzare un nome specifico per ogni istanza d’interesse.
  • Variabili: per esempio x, y, ecc. possono essere anche delle costanti o dei predicati. Ci servono per indicare i dati del problema che stiamo trattando
  • Connettivi: \wedge,\,\vee,\,\neg,\,\Rightarrow,\,\iff
  • Uguaglianza: =
  • Quantificatori: \forall,\,\exist (sono la cosa più importante introdotta dalla FOL)

Nota bene: i due operatori \forall e \exist possono essere convertiti l’uno nell’altro tramite, per esempio

\text{There is no one who doesn't like icecream}\\
\Downarrow\\
\forall\,\,x\,\,\texttt{Likes($x$, iceCream)}\,\,\equiv\,\,\textcolor{00ffa1}{\neg}\exists\,\,x\,\,\textcolor{00ffa1}{\neg}\texttt{Likes($x$, iceCream)}\\[30pt]

\text{Not everybody dislikes broccoli}\\
\Downarrow\\
\exists\,\,x\,\,\texttt{Likes($x$, broccoli)}\,\,\equiv\,\,\textcolor{00ffa1}{\neg}\forall\,\,x\,\,\textcolor{00ffa1}{\neg}\texttt{Likes($x$, broccoli)}

Nota bene: solitamente, utilizzando \forall serve utilizzare anche \Rightarrow, per esempio

\text{Everyone at Oxford is smart}\\
\Downarrow\\
\forall\,\,x\,\,\texttt{At($x$, Oxford)}\Rightarrow \texttt{Smart($x$)}

Nota bene: solitamente, utilizzando \exist serve utilizzare anche \wedge, per esempio

\text{Someone who is not at Oxford is smart}\\
\Downarrow\\
\exists\,\,x\,\,\neg\texttt{At($x$, Oxford)}\,\,\wedge\,\,\texttt{Smart($x$)}

Possiamo anche definite delle relazioni in funzione di altre, per esempio, possiamo definite la quantità \texttt{Sibling}(x,\,y) come

\forall\,\,x,\,y\,\,\texttt{Sibling}(x,\,y)\iff\neg(x=y)\wedge\exists \,\,m,\,f\,\,\neg(m=f)\wedge\texttt{Parent($m$, $x$)}\wedge\texttt{Parent($f$, $x$)}\wedge\texttt{Parent($m$, $y$)}\wedge\texttt{Parent($f$, $y$)}

A parole: per essere fratelli (siblings), x e y devono innanzitutto essere persone diverse. Devono inoltre esistere anche altre due persone diverse m ed f tali che m ed f siano entrambi genitori sia di x che di y.

Oppure esprimere delle quantità tramite l’utilizzo di altre. Per esempio:

  • \forall\,\,x,\,y\,\,\texttt{Mother}(x,\,y)\iff\texttt{Parent}(x,\,y)\wedge\texttt{Female}(x)
    A parole: se x è madre di y, allora x è genitore di y ed è donna.
  • \forall\,\,x,\,y\,\,\texttt{FirstCousin}(x,\,y)\iff\exist\,\,p,\,s\,\,\texttt{Parent}(p,\,x)\wedge\texttt{parent}(s,\,y)\wedge\texttt{Sibling}(s,\,p)
    A parole: perché x e y siano cugini di primo grado devono esistere due persone p ed s tali per cui p sia il genitore di x e s sia il genitore di y. Poiché x e y devono essere dei cugini di primo grado serve inoltre che p ed s siano fratelli (siblings) tra loro.

Sostituzioni in FOL

Per utilizzare la notazione introdotta per i predicati e le funzioni per indicare delle proprietà specifiche utilizziamo la tecnica di sostituzione.

Data una frase S e una sostituzione \sigma, la notazione S_{\sigma} denota il risultato della sostituzione \sigma in S. Per esempio

\begin{aligned}
&S=\texttt{Smarter($x$, $y$)}\rightarrow\text{frase originale}\\[10pt]

&\sigma=\{x/\texttt{Hilary},\,y/\texttt{Bill}\}\rightarrow\text{sostituzione}\\[10pt]

&S_{\sigma}=\texttt{Smarter(Hilary, Bill)}
\end{aligned}

Tecniche d’inferenza in FOL

Per effettuare inferenza nella logica del primo ordine possiamo adottare due diverse strategia: istanziazione universale (UI: universal instantiation) e istanziazione esistenziale (EI: existential instantiation).

  • Universal instantiation: esprimiamo una frase universale inserendo all’interno dell’espressione un qualunque valore. Indichiamo tale valore qualsiasi con una variabile. Per esempio, nell’espressione
    \forall\,\,x\,\,\texttt{King}(x)\wedge\texttt{Greedy}(x)\Rightarrow\texttt{Evil}(x)
    possiamo sostituire al posto di x un qualunque valore per esprimere ciò che vogliamo. Inoltre, ponendo ad esempio x=\texttt{Father}(\texttt{John}) siamo anche in grado di comporre delle espressioni ben più complesse del tipo
    \dfrac{\forall\,\,x\,\,\boldsymbol{\alpha}}{\texttt{Substitute}(\{x/g\},\,\boldsymbol{\alpha})}
    A parole: per ogni possibile valore di x, data una frase \boldsymbol{\alpha}, possiamo sostituire g ad x per ottenere una frase \boldsymbol{\alpha} valida a sua volta. Il valore g viene chiamato ground-truth.
  • Existential instantiation: per una frase \alpha nella variabile x possiamo sostituire il valore della variabile con una costante k (costante di Skolem), che non appare in altri luoghi della knowledge base. Tramite tale costante possiamo poi rappresentare ciò che vogliamo. Per esempio, partendo dall’espressione
    \exist\,\,x\,\,\texttt{Crown}(x)\wedge\texttt{OnHead}(x,\,\texttt{John})
    può essere ottenuta la frase
    \texttt{Crown}(c_1)\wedge\texttt{OnHead}(c_1,\,\texttt{John})
    dove abbiamo fissato un valore per x.
    Usando l’existential instantiation avremo delle espressioni del tipo
    \dfrac{\exist\,\,x\,\,\boldsymbol{\alpha}}{\texttt{Substitute}(\{x/k\},\,\boldsymbol{\alpha})}
    A parole: esiste almeno un valore di x per il quale, data una frase \boldsymbol{\alpha}, possiamo sostituire la costante k ad x per ottenere una frase \boldsymbol{\alpha} valida a sua volta.

Nota bene: l’istanziazione universale può essere utilizzata più volte per aggiungere nuove frasi alla knowledge base (infatti non stiamo modificando la conoscenza in essa contenuta ma stiamo utilizzando ciò che è già presente per generare nuove informazioni), mentre l’istanziazione esistenziale può essere utilizzata una sola volta per sostituire una frase all’interno della knowledge base, la quale conterrà ora delle informazioni diverse rispetto a quelle di partenza, ma nondimeno vere se le informazioni contenute all’interno della knowledge base di partenza erano a loro volta vere.

Proposizionalizzazione e unificazione

Per passare da delle proposizioni in logica del primo orine a delle proposizioni equivalenti in logica proposizionale si può applicare un processo di proposizionalizzazione che riesca a tradurre le frasi preservandone sia l’entailment che i risultati ottenuti. In generale, questo processo non è però efficiente in quanto genera una grande quantità di proposizioni che non sono di alcuna utilità, prodotte a causa della necessità della logica proposizionale di specificare scrupolosamente ogni singolo valore utilizzato nella logica del primo ordine.

Un’altra tecnica che può essere utilizzata è la cosiddetta unificazione, che è un metodo tramite cui siamo in grado di fare inferenza in maniera immediata controllando semplicemente se, date due o più frasi in logica del primo ordine, siamo in grado di trovare una sostituzione che le soddisfi entrambe, per esempio, considerando le frasi

\texttt{Knows}(\texttt{John},\,x)\qquad\texttt{Knows}(y,\,\texttt{Mary})

A parole: John conosce tutti, Mary conosce tutti.

Chiaramente John e Mary si conoscono, e per ottenere tale informazione dalla knowledge base è sufficiente effettuare la sostituzione

\{x/\texttt{Mary},\,y/\texttt{John}\}

per ottenere il risultato desiderato.

Generalized Modus Ponens (GMP)

Come per la logica proposizionale, anche per la logica del primo ordine possono essere utilizzate le tecniche del generalized Modus ponens, espresso in questo caso in una forma equivalente alla logica proposizionale, dove però si usa la funzione \text{Subst}(\theta,\,q) per indicare la sostituzione \theta nella frase q.

\dfrac{p_1',\,p_2',\,\dots,\,p_n',\quad (p_i\wedge p_2\wedge\dots\wedge p_n\Rightarrow q)}{\text{Subst($\theta,\,q$)}}

Esempio: Nel caso in cui avessimo le seguenti frasi

\begin{matrix}
p_1'=\texttt{King}(\texttt{John}) & p_1=\texttt{King}(x)\\

p_2'=\texttt{Greedy}(y) & p_2=\texttt{Greedy}(x)
\end{matrix}

Dove dobbiamo trovare una sostituzione valida per

q=\texttt{Evil}(x)
Soluzione

Utilizzando

\theta=\{x/\texttt{John},\,y/\texttt{John}\}

Possiamo ottenere

\text{Subst}(\theta,\,q)=\texttt{Evil}(\texttt{John})

Foreward/backward chaining in FOL

Il foreward chaining è lo stesso della logica proposizionale, con l’eccezione che, seppur siamo in FOL, soltanto gli identificatori \forall sono ammessi, mentre non può essere usato \exist.

Per il backward chaining si utilizzano le sostituzioni per unificare le diverse frasi, propagando le conseguenze di tali sostituzioni. (Usato in prolog)

Esempio: the law says that it is a crime for an American to sell weapons to hostile nations. The country Nono, an enemy of America, has some missiles, and all of its missiles were sold to it by Colonel West, who is American. Prove that Col. West is a criminal.

Soluzione

Resolution in FOL

Dopo aver convertito le frasi in CNF, come per la logia proposizionale, data una frase \alpha si cerca di dimostrare

\text{KB}\wedge\neg\alpha

Se troviamo come soluzione \emptyset, allora significa che \text{KB}\models\alpha.

Esercizio: esprimere in CNF la seguente espressione in logica del primo ordine.

[inserire formula]

Soluzione

Esercizio: applicare la resolution al problema di West.

Soluzione

Se hai trovato errori o informazioni mancanti scrivi a:
giacomo.dandria@esercizistem.com

Se hai trovato errori o informazioni mancanti scrivi a:
giacomo.dandria@esercizistem.com

Questa pagina è stata utile?
No
Torna in alto