ConcepteFapte, reguli, baze de cunoștințe

Fapte, reguli, baze de cunoștințe

Cum scriem un program în Prolog: adevăruri (facts) + reguli de inferență.

10 exerciții folosesc acest concept aritmetica-si-egalitaterelatii-recursive

Sumar

Un program Prolog este o bază de cunoștințe formată din:

  • Fapte (facts) — adevăruri de bază în universul programului
  • Reguli (rules) — implicații care derivă noi adevăruri din cele existente

În general, o regulă are forma:

Head :- Body.

Citim "Head dacă Body" sau "dacă Body este adevărat, atunci Head". Implicația este de la dreapta (antecedent) la stânga (consecvent).

Un fapt este o regulă fără Body.

Exemplu de bază de cunoștințe

male(sam).
male(oliver).
male(ben).
female(elizabeth).
female(sandra).

parent_of(sandra, sam).
parent_of(sandra, elizabeth).
parent_of(ben, sam).
parent_of(ben, elizabeth).
parent_of(peter, sandra).

Reguli simple

father_of(X, Y) :-
    parent_of(X, Y),
    male(Y).

Citim: X este tatăl lui Y dacă X este părintele lui Y și Y este bărbat. (Atenție la convenția de citire — vezi Aritmetică și egalitate pentru distincția între = și ==.)

În Body, virgula , se interpretează drept conjuncție (ȘI). Pentru disjuncție (SAU) avem două variante:

happy(elizabeth) :- happy(sandra) ; happy(ben).

sau

happy(elizabeth) :- happy(sandra).
happy(elizabeth) :- happy(ben).

Univers închis

În Prolog toate demonstrațiile sunt făcute într-un univers închis. Dacă nu putem demonstra o proprietate P, înseamnă doar că nu am reușit să îi găsim demonstrația — nu că P este falsă.

Atenție la grupare

Din Lab 1:

Important! Predicatele scrise (atât adevărurile cât și regulile de inferență) trebuie să fie grupate după atomii din Head. În caz contrar, există riscul erorilor de parsare, iar răspunsul dat de Prolog poate fi greșit. Contează ordinea de scriere a clauzelor.

Interogări

O întrebare în Prolog este de forma:

?- p1(t1, ..., tn), ..., pn(t1', ..., tn').

Prolog returnează true sau false. Dacă întrebarea conține variabile, sunt căutate valori care fac toate predicatele să fie satisfăcute. Pentru următoarea soluție, apăsăm ;.

?- parent_of(ben, X).
X = sam ;
X = elizabeth.

Exerciții care folosesc acest concept