Salta al contenuto
Note per Studenti Esercizio - Conversione in CNF e risoluzione proposizionale (slide del corso)

Esercizio - Conversione in CNF e risoluzione proposizionale (slide del corso)

Testo (dalle slide "Logical agents" del corso di Intelligenza Artificiale, Ing. dell'Informazione UniPD, esempio del mondo del Wumpus; teoria in Agenti logici e logica proposizionale - inferenza e risoluzioneAgenti basati sulla conoscenza (KB, Tell e Ask), mondo del Wumpus come banco di prova, sintassi e semantica della logica proposizionale, conseguenza logica, equivalenze, inferenza per model checking (7 simboli, 128 modelli, 3 modelli della KB) e per risoluzione (CNF, regola di risoluzione, dimostrazione per assurdo). Limite: poca espressività, da cui la logica del primo ordine.Agenti logici e logica proposizionale - inferenza e risoluzione →).

  1. Convertire in CNF R3:B2,1⇔(P1,1∨P2,2∨P3,1)R_3: B_{2,1} \Leftrightarrow (P_{1,1} \lor P_{2,2} \lor P_{3,1}).
  2. L'agente è passato da [1,1][1,1] (nessun pozzo, R1:¬P1,1R_1: \neg P_{1,1}) a [2,1][2,1], dove sente brezza (R5:B2,1R_5: B_{2,1}), e poi in [1,2][1,2] dove non sente brezza (¬B1,2\neg B_{1,2}). La regola di [1,2][1,2] è R6:B1,2⇔(P1,1∨P2,2∨P1,3)R_6: B_{1,2} \Leftrightarrow (P_{1,1} \lor P_{2,2} \lor P_{1,3}). Dimostrare per risoluzione che c'è un pozzo in [3,1][3,1], cioè KB′⊨P3,1KB' \models P_{3,1}, con KB′=R1∧R3∧R5∧R6∧¬B1,2KB' = R_1 \land R_3 \land R_5 \land R_6 \land \neg B_{1,2}. Dimostrare anche che ¬P2,2\neg P_{2,2} segue.

Punto 1: CNF di R3R_3

Si applicano i passi della nota.

  1. Eliminare ⇔\Leftrightarrow: α⇔β\alpha \Leftrightarrow \beta diventa (α⇒β)∧(β⇒α)(\alpha \Rightarrow \beta) \land (\beta \Rightarrow \alpha) con α=B2,1\alpha = B_{2,1} e β=P1,1∨P2,2∨P3,1\beta = P_{1,1} \lor P_{2,2} \lor P_{3,1}: (B2,1⇒(P1,1∨P2,2∨P3,1))∧((P1,1∨P2,2∨P3,1)⇒B2,1).(B_{2,1} \Rightarrow (P_{1,1} \lor P_{2,2} \lor P_{3,1})) \land ((P_{1,1} \lor P_{2,2} \lor P_{3,1}) \Rightarrow B_{2,1}).
  2. Eliminare ⇒\Rightarrow (α⇒β≡¬α∨β\alpha \Rightarrow \beta \equiv \neg\alpha \lor \beta): (¬B2,1∨P1,1∨P2,2∨P3,1)∧(¬(P1,1∨P2,2∨P3,1)∨B2,1).(\neg B_{2,1} \lor P_{1,1} \lor P_{2,2} \lor P_{3,1}) \land (\neg(P_{1,1} \lor P_{2,2} \lor P_{3,1}) \lor B_{2,1}).
  3. De Morgan: ¬(P1,1∨P2,2∨P3,1)=¬P1,1∧¬P2,2∧¬P3,1\neg(P_{1,1} \lor P_{2,2} \lor P_{3,1}) = \neg P_{1,1} \land \neg P_{2,2} \land \neg P_{3,1}: (¬B2,1∨P1,1∨P2,2∨P3,1)∧((¬P1,1∧¬P2,2∧¬P3,1)∨B2,1).(\neg B_{2,1} \lor P_{1,1} \lor P_{2,2} \lor P_{3,1}) \land ((\neg P_{1,1} \land \neg P_{2,2} \land \neg P_{3,1}) \lor B_{2,1}).
  4. Distribuire ∨\lor su ∧\land: (a∧b∧c)∨d=(a∨d)∧(b∨d)∧(c∨d)(a \land b \land c) \lor d = (a \lor d) \land (b \lor d) \land (c \lor d) con d=B2,1d = B_{2,1}: (¬B2,1∨P1,1∨P2,2∨P3,1)∧(¬P1,1∨B2,1)∧(¬P2,2∨B2,1)∧(¬P3,1∨B2,1).(\neg B_{2,1} \lor P_{1,1} \lor P_{2,2} \lor P_{3,1}) \land (\neg P_{1,1} \lor B_{2,1}) \land (\neg P_{2,2} \lor B_{2,1}) \land (\neg P_{3,1} \lor B_{2,1}).

Risultato: quattro clausole (una lunga più una per ogni pozzo adiacente: "un pozzo adiacente implica brezza"). Il controllo con sympy (to_cnf) dà le stesse quattro clausole. Con la stessa tecnica R6R_6 dà (¬B1,2∨P1,1∨P2,2∨P1,3)∧(¬P1,1∨B1,2)∧(¬P2,2∨B1,2)∧(¬P1,3∨B1,2)(\neg B_{1,2} \lor P_{1,1} \lor P_{2,2} \lor P_{1,3}) \land (\neg P_{1,1} \lor B_{1,2}) \land (\neg P_{2,2} \lor B_{1,2}) \land (\neg P_{1,3} \lor B_{1,2}).

Punto 2: KB′⊨P3,1KB' \models P_{3,1}

Clausole.

clausola origine
c1c_1 ¬P1,1\neg P_{1,1} R1R_1
c2c_2 B2,1B_{2,1} R5R_5
c3c_3 ¬B2,1∨P1,1∨P2,2∨P3,1\neg B_{2,1} \lor P_{1,1} \lor P_{2,2} \lor P_{3,1} R3R_3 (clausola lunga)
c4c_4 ¬B1,2\neg B_{1,2} percezione
c5c_5 ¬P2,2∨B1,2\neg P_{2,2} \lor B_{1,2} R6R_6 (da P2,2⇒B1,2P_{2,2} \Rightarrow B_{1,2})
c6c_6 ¬P3,1\neg P_{3,1} negazione della tesi ¬α\neg\alpha

(Delle altre clausole di R3R_3 e R6R_6 non serve nessuna: nella risoluzione si usano solo quelle necessarie.)

Derivazione.

  1. c2c_2 e c3c_3 su B2,1B_{2,1}: s1=P1,1∨P2,2∨P3,1s_1 = P_{1,1} \lor P_{2,2} \lor P_{3,1}.
  2. s1s_1 e c1c_1 su P1,1P_{1,1}: s2=P2,2∨P3,1s_2 = P_{2,2} \lor P_{3,1} (almeno uno tra [2,2][2,2] e [3,1][3,1] ha il pozzo).
  3. s2s_2 e c6c_6 su P3,1P_{3,1}: s3=P2,2s_3 = P_{2,2}.
  4. s3s_3 e c5c_5 su P2,2P_{2,2}: s4=B1,2s_4 = B_{1,2}.
  5. s4s_4 e c4c_4 su B1,2B_{1,2}: □\square.

La clausola vuota mostra che KB′∧¬P3,1KB' \land \neg P_{3,1} è insoddisfacibile: KB′⊨P3,1KB' \models P_{3,1}, c'è un pozzo in [3,1][3,1].

¬P2,2\neg P_{2,2}. Si aggiunge la negazione, P2,2P_{2,2}. Con c5c_5 su P2,2P_{2,2}: B1,2B_{1,2}; con c4c_4 su B1,2B_{1,2}: □\square. Quindi KB′⊨¬P2,2KB' \models \neg P_{2,2}. Con ¬P2,2\neg P_{2,2} in mano, il passo 2 (s2=P2,2∨P3,1s_2 = P_{2,2} \lor P_{3,1}) dà direttamente P3,1P_{3,1}: è lo stesso ragionamento della slide "Exploring a wumpus world".

Controllo con Python. Un risolutore a saturazione sulle clausole conferma: KB′∧¬P3,1KB' \land \neg P_{3,1} è refutabile, KB′∧P3,1KB' \land P_{3,1} no; KB′∧P2,2KB' \land P_{2,2} e KB′∧P1,3KB' \land P_{1,3} sono refutabili. Per model checking sui 66 simboli B2,1,B1,2,P1,1,P2,2,P3,1,P1,3B_{2,1}, B_{1,2}, P_{1,1}, P_{2,2}, P_{3,1}, P_{1,3} (26=642^6 = 64 modelli) la KB ha un solo modello: P3,1P_{3,1} vero e tutti gli altri falsi tranne B2,1B_{2,1}. Rispetto ai 33 modelli della nota, il nuovo dato ¬B1,2\neg B_{1,2} ha eliminato P2,2P_{2,2} e quindi l'ambiguità.

Versione ripasso

  • CNF di R3R_3: B2,1⇔(P1,1∨P2,2∨P3,1)B_{2,1} \Leftrightarrow (P_{1,1} \lor P_{2,2} \lor P_{3,1}). Eliminare ⇔\Leftrightarrow e ⇒\Rightarrow, De Morgan sul ¬(… )\neg(\dots), distribuire. Risultato: (¬B2,1∨P1,1∨P2,2∨P3,1)∧(¬P1,1∨B2,1)∧(¬P2,2∨B2,1)∧(¬P3,1∨B2,1)(\neg B_{2,1} \lor P_{1,1} \lor P_{2,2} \lor P_{3,1}) \land (\neg P_{1,1} \lor B_{2,1}) \land (\neg P_{2,2} \lor B_{2,1}) \land (\neg P_{3,1} \lor B_{2,1}). R6R_6 analogo con B1,2B_{1,2}, P1,3P_{1,3}.
  • Dati: c1=¬P1,1c_1 = \neg P_{1,1}, c2=B2,1c_2 = B_{2,1}, c3c_3 = clausola lunga di R3R_3, c4=¬B1,2c_4 = \neg B_{1,2}, c5=¬P2,2∨B1,2c_5 = \neg P_{2,2} \lor B_{1,2}, c6=¬P3,1c_6 = \neg P_{3,1} (¬α\neg\alpha).
  • Prova di P3,1P_{3,1}: c2,c3→P1,1∨P2,2∨P3,1c_2, c_3 \to P_{1,1} \lor P_{2,2} \lor P_{3,1}; con c1→P2,2∨P3,1c_1 \to P_{2,2} \lor P_{3,1}; con c6→P2,2c_6 \to P_{2,2}; con c5→B1,2c_5 \to B_{1,2}; con c4→□c_4 \to \square. Prova di ¬P2,2\neg P_{2,2}: P2,2P_{2,2} con c5→B1,2c_5 \to B_{1,2}, con c4→□c_4 \to \square.
  • Verifica: model checking su 66 simboli, 6464 modelli: ne resta uno (P3,1P_{3,1} vero). Il dato ¬B1,2\neg B_{1,2} passa da 33 modelli a 11.
  • Errore tipico: dimenticare di aggiungere ¬α\neg\alpha, oppure risolvere su due letterali complementari insieme (si risolve su un letterale per volta).

Esercizi su questo argomento

Teoria collegata