24/05/2018, 16:03

Suy diễn trong logic vị từ và lập trình prolog

Các sự kiện(Fact) được mô tả bởi Vị từ(Predicate). Mỗi vị từ là một phát biểu, quan sát về đối tượng mà ta đang xét. F={p(t 1 ,t 2 ….t n )/p vị từ} p: Tên vị từ t­ i : hạng thức( term) có thể là ...

Các sự kiện(Fact) được mô tả bởi Vị từ(Predicate). Mỗi vị từ là một phát biểu, quan sát về đối tượng mà ta đang xét.

F={p(t1,t2….tn)/p vị từ}

p: Tên vị từ

i: hạng thức( term) có thể là một biến, một hằng, hoặc là một hàm(rất quan trọng)

Ai cũng có kẻ yêu người ghét.

…..

Luật( Rule)

Mọi tri thức chuyên môn đều được biểu diễn bằng mệnh đề.: Nếu…..thì….

p1(t1….tk)……..pn(u1…..un) suy ra q(v1….vm)

trong đó: pi, q: Tên vị từ

ti, u, v: các hạng thức

Câu(clause)

……là một câu và tương ứng với một luật có dạng như ở trên

Bài toán chở đồ vật qua sông

Có một con sói, một con dê và mọt chiếc bắp cải muốn qua sông. Nhưng chỉ só một bác lái đò. Làm thế nào dể bác lái đò có thể chở được các vật trên qua sông an toàn. Biết rằng Sói ăn thịt dê nếu chỉ có hai con một mình, dê ăn bắp cải nếu như không có sói ở đó.

Biểu diễn:

  • Vị trí :vt(LĐ,S,D,B)
  • An toàn: at(LĐ,S,D,B)
  • Vị trí xuất phát, đến : ql(Đ1, Đ2)

Ta có mô tả như sau:

  1. vt(b,b,b,b)
  2. dd(b,n)
  3. dd(n,b)
  4. vt(LD,S,D,B) dd at(LD,LD’) at(LD’,S,D,B) → vt(LD’,S,D,B)
  5. vt(X,X,D,B) dd(X,X’) at(X,X’,D,B) → vt(X’,X,D,B)
  6. vt(X,S,X,B) dd(X,X’) at(X,X’,B,S) → vt(X’,X’,B,S)
  7. vt(X,S,X,D) dd(X,X’) at(X,X’,D,S) → vt(X’,X’,D,S)
  8. at(X S X B)
  9. dd(X X’) → at(X X X’ X)

Tóm lại ta thấy đây chỉ là luật và sự kiện chứ không phải tri thức chuyên gia

  1. Membership( x1, [x1:-] )

  2. membership( x2, [-:y] ) :- membership (x2, y)

    Goal: membership(1, [ 1,2,3]): :- membership (1, [1,2,3])

    Trong Prolog áp dụng suy diễn lùi với: luật theo chỉ số min và sự kiện từ trái qua phải

    Từ giả thiết và áp dụng phương pháp suy diễn lùi ta có quá trình suy diễn như sau:

  3. :-mb(x, [1,2,3])
  4. :- {x/x1, 1/x1} (3,1) nên x=1
  5. :-mb(x,[2,3] {x/x2 ; 2,3/x1} (3,2)
  6. :- {x/x3; 2/x} (5,1)nên x=2
  7. :-mb(x,[3]) {x/x4; 3/x4} (5,2)
  8. :- {3/x} (7,1) nên x=3
  9. :--mb(x,[]) (7,2)
  10. fail (9,1)
  11. fail (9,2)
0