Salta al contenuto
Note per Studenti Esercizio - Query Prolog con lookfor e islocated (esempio d'esame 1)

Esercizio - Query Prolog con lookfor e islocated (esempio d'esame 1)

Teoria: Prolog - fatti, regole, ricorsione, liste e cutProlog come logica del primo ordine ristretta alle clausole di Horn: fatti, regole, query, motore di inferenza (backward chaining in profondità con backtracking, ordine delle clausole), termini, unificazione e occur check, aritmetica con is, ricorsione, liste e operatore barra, length e append, cut verde e rosso, cut e fail, negazione come fallimento.Prolog - fatti, regole, ricorsione, liste e cut → (anatomia di un programma, motore di inferenza, cut). Esercizio simile: Esercizio - Prolog - cut e negazione come fallimento (laboratorio 4). Domanda 5 del quiz da 9 CFU (Prolog non è nel programma da 6 CFU).

Testo. Dato il programma Prolog (figura):

prolog
lookfor(mary, book).
lookfor(john, keys).
lookfor(mary, eyeglasses).
lookfor(mary, lamp).
lookfor(john, lamp).
lookfor(john, cat).
islocated(book, shelf).
islocated(eyeglasses, table).
islocated(keys, keybox).
islocated(lamp, table).

Scegliere le alternative corrette.

  • Q1. In logica, cosa rappresenta lookfor(mary, book).? Menu: una query / un fatto / una regola.
  • Q2. Output di ?- lookfor(john, Object), islocated(Object, Place). Menu: (a) Object = keys, Place = keybox; Object = lamp, Place = table; (b) le stesse due soluzioni più Object = cat; (c) solo Object = keys, Place = keybox.
  • Q3. Output di ?- lookfor(mary, Object), !, islocated(Object, Place). Menu: (a) Object = eyeglasses, Place = table; (b) Object = book, Place = shelf; Object = eyeglasses, Place = table; Object = lamp, Place = table; (c) Object = book, Place = shelf.
  • Q4. Output di ?- lookfor(mary, keys). Menu: none / true / false.

Soluzione

Q1: un fatto. Una clausola senza corpo (testa.) è un fatto: afferma che lookfor(mary,book)lookfor(mary, book) è vero. Sarebbe una query solo se scritta all'interprete dopo il prompt ?-, e una regola solo se avesse un corpo (testa :- corpo.).

Q2: (a). Si risolvono i sottoobiettivi da sinistra a destra con backtracking. lookfor(john, Object) ha tre soluzioni in ordine:

  1. keys: islocated(keys, Place) dà Place = keybox. Prima soluzione.
  2. lamp: islocated(lamp, Place) dà Place = table. Seconda soluzione.
  3. cat: non esiste nessun fatto islocated(cat, _), quindi il sottoobiettivo fallisce e questa strada non produce niente.

Perché (b) è sbagliata: cat compare in lookfor ma non soddisfa la congiunzione, perché non ha una posizione. Perché (c) è sbagliata: dopo la prima soluzione, premendo ; il motore torna indietro e trova anche lamp.

Q3: (c). Il cut ! dopo lookfor(mary, Object) cancella i punti di scelta creati finora: dopo che Object è stato unificato con la prima soluzione, book (la prima clausola lookfor(mary, ...) in ordine), lookfor non può più essere ritentato con eyeglasses o lamp. Poi islocated(book, Place) dà Place = shelf, e non ci sono altre clausole islocated(book, _). L'unica risposta è Object = book, Place = shelf.

  • (b) è la risposta che si avrebbe senza cut: book/shelf, eyeglasses/table, lamp/table (i tre oggetti di Mary, tutti con una posizione).
  • (a) prenderebbe la seconda soluzione di lookfor, ma il cut impedisce di arrivarci: la prima è già stata fissata.

Q4: false. Nel programma non c'è lookfor(mary, keys) (l'unico keys è di John) e nessuna regola con testa lookfor: per l'ipotesi del mondo chiuso, ciò che non si può dimostrare è falso. L'interprete risponde false. (nelle versioni vecchie no). true sarebbe per un fatto presente; none non è un output di Prolog.

Verifica (simulazione in Python delle stesse liste): Q2 dà [(keys, keybox), (lamp, table)]; Q3 dà [(book, shelf)], mentre senza cut le soluzioni sono tre; ("mary","keys") non è tra i fatti.

Versione ripasso

Teoria: Prolog - fatti, regole, ricorsione, liste e cutProlog come logica del primo ordine ristretta alle clausole di Horn: fatti, regole, query, motore di inferenza (backward chaining in profondità con backtracking, ordine delle clausole), termini, unificazione e occur check, aritmetica con is, ricorsione, liste e operatore barra, length e append, cut verde e rosso, cut e fail, negazione come fallimento.Prolog - fatti, regole, ricorsione, liste e cut →.

  • Q1: lookfor(mary, book). nel programma è un fatto (niente corpo; non è una query né una regola).
  • Q2: sottoobiettivi da sinistra, backtracking. John cerca keys, lamp, cat; cat non ha islocated: soluzioni keys/keybox e lamp/table.
  • Q3: il cut fissa la prima soluzione di lookfor(mary, Object), book: risposta Object = book, Place = shelf (senza cut ce ne sarebbero tre).
  • Q4: lookfor(mary, keys) non è derivabile: false (mondo chiuso).

Errori tipici: includere cat; ignorare l'effetto del cut; rispondere none.

Teoria collegata