Thủ tục chứng minh phỏng đoán EK

Một phần của tài liệu Tìm hiểu về lập luận suy diễn trong lập trình logic phỏng đoán (Trang 40)

Ý tưởng của thủ tục EK là chuyển đổi chương trình logic thông thường P

thành chương trình logic phỏng đoán <P*, A*, IC*> và được định nghĩa như sau:

Định nghĩa 3.1 Cho P là chương trình logic. P được chuyển đổi thành một chương trình logic phỏng đoán <P*, A*, IC*> theo cách sau:

- Đối với mỗi vị từ p trong P, ta định nghĩa một vị từ mới p*, các vị từ mới này xem như là các vị từ phỏng đoán, ký hiệu A* là tập của tất cả các vị từ phỏng đoán .

- Gọi P* là chương trình logic nhận được từ P bằng cách thay thế tất cả sự xuất hiện của p trong P bởi p*.

- Gọi IC* là tập của tất cả các ràng buộc toàn vẹn, bao gồm: đối với mỗi vị từ p* trong A* có hai công thức đóng:

( ( )p X *( )p ) X X    (1) ( ( ) p p*( )) X t t   (2)

Công thức (1) chỉ ra rằng pp* không thể cùng xuất hiện trong thể hiện. Công thức (2) chỉ ra rằng, đối với mọi thể hiện I, p hoặc p* phải thuộc I.

Hoạt động của thủ tục EK: Thủ tục EK thực hiện theo hai pha tương tự như thủ tục chứng minh SLDNF để xây dựng câu trả lời phỏng đoán cho đích G:

 Khởi đầu từ tập giả thuyết phỏng đoán là tập rỗng. Pha đầu tiên gọi là

pha phỏng đoán, dựa trên thủ tục hợp giải SLD. Trong pha này, khi nguyên tố phỏng đoán p* không thuộc tập các giả thiết phỏng đoán thì nó được thêm vào , và

 Pha thứ hai, gọi là pha nhất quán được khởi động để kiểm tra ràng buộc toàn vẹn p, p* không bị vi phạm. Để làm điều này, thủ tục kiểm tra p

thất bại hữu hạn. Nếu trong suốt pha nhất quán, một nguyên tố phỏng đoán khác q* được tìm thấy không thuộc thì tiến hành pha phỏng đoán khác bắt đầu từ q* để kiểm tra ràng buộc toàn vẹn qq*.

Việc sử dụng các giả thuyết phỏng đoán làm cho thủ tục EK có thể tính được mô hình bền vững của chương trình logic thông thường, trong khi thủ tục SLDNF có thể lặp vô hạn.

Ví dụ 3.1 Xem xét chương trình logic thông thường sau:

P: p q q p

và đích G = {p}. Dẫn xuất SLDNF lặp vô hạn như sau:

p q p q

 * q   pq*qp*  * q   pq*

Áp dụng định nghĩa 3.1, ta chuyển chương trình logic P thành chương trình logic phỏng đoán <P*, A*, IC*>, trong đó:

P*: pq* IC*: p, p* ; pp* A* = { p*, q*}

qp* q, q* ; qq*

Áp dụng thủ tục EK, bắt đầu từ đích G =  p và tập giả thiết phỏng đoán 0 =

. Thủ tục EK thành công với câu trả lời = {q*}, được minh họa ở hình vẽ sau đây, trong đó giai đoạn phỏng đoán được biểu diễn với các hộp dòng đôi và giai đoạn nhất quán với các hộp dòng đơn: Trong thủ tục EK, sử dụng  trong suốt quá trình tính toán, ở hộp bên trong cùng, thủ tục thành công vì q* hiện tại đang thuộc  và không cần có sự kiểm tra nào nữa. Như vậy q thất bại hữu hạn và cuối cùng p ở hộp ngoài cùng thành công. Để ý rằng tập {p, q*}, tức là tập {p, not q} biểu diễn mô hình bền vững duy nhất của P chứa p.

  

Hình 3.1. Tính câu trả lời cho ví dụ 3.1

Thực hiện tương tự đối với đích G =  q, thủ tục EK cũng thành công và nhận được câu trả lời = {p*}, biểu diễn mô hình bền vững {q, not p} của P.

Chú ý: Đối với chương trình logic P ở ví dụ này, sử dụng phép biến đổi Gelfond – Lifschitz để chuyển P thành chương trình logic PM, với M là thể hiện của P, ta tìm được hai mô hình bền vững của P là {q, not p} và {p, not q}.

Ví dụ 3.2 Xem xét chương trình logic thông thường sau:

P: sp p q q r (adsbygoogle = window.adsbygoogle || []).push({});

và đích G = {s}.

Ta chuyển chương trình logic P thành chương trình logic phỏng đoán <P*, A*, IC*>, trong đó:

P*: sp* IC*: p, p* ; p p* A* = { p*, q*, s*, r*}

pq* q, q* ; q q* qr* r, r* ; r r*

s, s* ; ss*

Áp dụng thủ tục EK, bắt đầu từ đích G =  s và tập giả thiết phỏng đoán 0 =

. Thủ tục EK thành công với câu trả lời = {p*, r*}, được minh họa ở hình vẽ 3.2 dưới đây. Trong thủ tục EK, sử dụng  trong suốt quá trình tính toán, ở hộp bên trong cùng, thủ tục thất bại hữu hạn vì r* hiện tại đang thuộc  và không cần có sự kiểm tra nào nữa, như vậy r* thành công, q* thất bại hữu hạn và cuối cùng s ở hộp ngoài cùng thành công.

sp*  * p   pq*  * p   qr*  * * , p r   rsp*pq*  * p    * p   qr*r  * * , p r      

Hình 3.2. Tính câu trả lời cho ví dụ 3.2

Ví dụ 3.3 Xem xét chương trình logic thông thường sau:

P: sq sp p q q p

và đích G = {s}.

Ta chuyển chương trình logic P thành chương trình logic phỏng đoán <P*, A*, IC*>, trong đó:

P*: sq IC*: p, p* ; pp* A* = {p*, q*, s*}

sp q, q* ; qq* pq* s, s* ; ss* qp*

sqp*  * p   q*qp  * p   p*

Truy vấn  s không tìm được câu trả lời khi sử dụng hợp giải SLDNF vì nó sẽ đi vào một vòng lặp vô hạn. Áp dụng thủ tục EK, bắt đầu từ đích G = s và tập giả thiết phỏng đoán 0 = . Thủ tục EK thành công với hai câu trả lời, ∆ = {p*} và ∆ = {q*}, tương ứng với hai mô hình bền vững của chương trình. Các tính toán cho câu trả lời đầu tiên được trình bày trong hình 3.3.

Áp dụng thủ tục EK, bắt đầu từ đích G =  s và tập giả thiết phỏng đoán 0 =

. Thủ tục EK thành công với câu trả lời = {p*}, được minh họa ở hình vẽ 3.3 dưới đây. Trong thủ tục EK, sử dụng  trong suốt quá trình tính toán, ở hộp bên trong cùng, thủ tục thành công vì p* hiện tại đang thuộc  và không cần có sự kiểm tra nào nữa. Như vậy q thất bại hữu hạn và cuối cùng s ở hộp ngoài cùng thành công.

 

 

sa  a   a*pq*qb  a b,   b* 3.1.2. Thủ tục chứng minh phỏng đoán KM

Thủ tục chứng minh KM tổng quát hóa khuôn khổ phỏng đoán <P*, A*, IC*>

của thủ tục EK. Chương trình logic phỏng đoán mới đối với thủ tục KM là :

<P*, A* A , IC* IC >

trong đó AIC là những thành phần mới theo khuôn khổ đối với thủ tục EK và một ràng buộc trong IC phải có ít nhất một nguyên tố phỏng đoán trong phần thân của nó.

Ví dụ 3.4 Xem xét khuôn khổ phỏng đoán sau:

P*: sa IC: a, p IC*: p, p* ; pp* A = {a, b}

pq* a, qa, a* ; aa* A* = { p*, q*, a*, s*, b*}

qb b, b* ; bb* s, s* ; ss* q, q* ; qq* (adsbygoogle = window.adsbygoogle || []).push({});

Hình vẽ sau biểu diễn quá trình tính toán của thủ tục KM với đích G = {s}:   

Thủ tục KM sau khi phỏng đoán a, nó kiểm tra tất cả các ràng buộc có chứa a: đầu tiên nó kiểm tra sự thất bại hữu hạn của a* và sau đó nó tiếp tục kiểm tra p

mà lần lượt cần phỏng đoán b trong việc chứng minh thất bại hữu hạn.

Ví dụ 3.5 Xem xét khuôn khổ phỏng đoán sau: Chương trình logic P:

dùng_bữa (X) dưa_cà (X), cơm_gà (X)

cơm_gà (X) dưa_cà (X), phục_vụ (X)

phục_vụ (Thiên_Hương)

Vị từ phỏng đoán A: {dưa_cà, nhà_hàng_nhỏ} Ràng buộc IC: dưa_cà (X), nhà_hàng_nhỏ (X)

Ta chuyển chương trình logic P thành chương trình logic phỏng đoán <P*, A*  A , IC* IC > , trong đó:

P*: dùng_bữa (X) dưa_cà (X), cơm_gà (X)

cơm_gà (X) dưa_cà (X), phục_vụ (X)

phục_vụ (Thiên_Hương)

IC: dưa_cà (X), nhà_hàng_nhỏ (X)

IC*: dùng_bữa, dùng_bữa* ; dùng_bữa dùng_bữa* dưa_cà, dưa_cà*  ; dưa_cà dưa_cà*

cơm_gà, cơm_gà* ; cơm_gà cơm_gà* phục_vụ, phục_vụ* ; phục_vụ phục_vụ* nhà_hàng_nhỏ, nhà_hàng_nhỏ* ;

nhà_hàng_nhỏ nhà_hàng_nhỏ* A = {dưa_cà, nhà_hàng_nhỏ}

 dùng_bữa(Th) dưa_cà(Th), phục_vụ(Th) cơm_gà*(Th)  nhà_hàng_nhỏ*(Th) dưa_cà(Th), cơm_gà(Th) phục_vụ(Th)  nhà_hàng_nhỏ(Th)  { dưa_cà(Th), nhà_hàng_nhỏ(Th)}  {dưa_cà(Th)}  nhà_hàng_nhỏ*(Th)

Hình vẽ sau biểu diễn quá trình tính toán của thủ tục KM với đích G = {dùng_bữa(Thiên_Hương)}

  

Hình 3.5. Tính câu trả lời cho ví dụ 3.5

Thủ tục KM sau khi phỏng đoán dưa_cà(Th), nó kiểm tra tất cả các ràng buộc có chứa dưa_cà(Th): đầu tiên nó kiểm tra sự thất bại hữu hạn của dưa_cà*(Th) và sau đó nó tiếp tục kiểm tra nhà_hàng_nhỏ(Th) mà lần lượt cần phỏng đoán

nhà_hàng_nhỏ*(Th)trong việc chứng minh thất bại hữu hạn.

Thủ tục KM, cũng như thủ tục EK, có thể tính toán mô hình bền vững của một chương trình logic thông thường. Do khả năng biểu diễn phỏng đoán dùng định nghĩa và các ràng buộc toàn vẹn miền phụ thuộc vào khuôn khổ phỏng đoán,

ngữ nghĩa khai báo đề xuất cho các thủ tục KM trong là ngữ nghĩa mô hình bền vững tổng quát.

3.2. Cài đặt và thực thi một số chương trình logic phỏng đoán bằng

SMODELS

3.2.1 Giới thiệu hệ thống SMODELS

SMODELS là một hệ thống lập trình tính tập câu trả lời cài đặt dựa trên ngữ nghĩa mô hình bền vững của chương trình logic thông thường. Ý tưởng nền của ASP là mã hóa các ràng buộc của bài toán dưới dạng một chương trình logic và các tập trả lời (các mô hình bền vững) cho các chương trình này tương ứng với các kết quả của bài toán. Vì vậy, ta có thể giải quyết bài toán bằng cách cho một chương trình logic để tìm ra tập câu trả lời của chương trình. Hệ thống SMODELS cung cấp công cụ như vậy để tính tập câu trả lời. Nó mở rộng lớp của chương trình logic với bản số và trọng số với các hàm xây dựng trong.

Hệ thống SMODELS bao gồm hai thành phần riêng biệt là SMODELS và Lparse, cả hai đều được cài đặt trong C++. SMODELS dùng tìm mô hình bền vững cho chương trình logic. Lparse là một front-end có thể chuyển đổi chương trình người dùng sang hình thức mà SMODELS hiểu được. SMODELS được phát triển trong phòng thí nghiệm thuyết khoa học máy tính tại Đại học kỹ thuật Helsinki - Phần Lan bởi Patrik Simons và Lparse được viết bởi Tommi Syrjänen [9].

Phiên bản mới nhất của smodels, lparse và các tài liệu liên quan có thể tham khảo theo địa chỉ http://www.tcs.hut.fi/Software/smodels/. (adsbygoogle = window.adsbygoogle || []).push({});

Đây là phần mềm miễn phí, được cài đặt trên các hệ điều hành Unix/Linux hoặc Windows. Trong luận văn, hệ thống SMODELS được cài đặt trên hệ điều hành Windows.

Cú pháp để gọi SMODELS

với file là tập tin văn bản chứa chương trình logic. Ngoài ra ta có các tùy chọn cho lparse và smodels.

lparse -help và lparse | smodels –help

Hình 3.6. Kiến trúc hệ thống SMODELS

3.2.2 Cài đặt và thực thi

3.2.2.1 Cài đặt các ví dụ ở chương 1:

Mã hóa ví dụ 1.13 chương trình logic thông thường trong chương 1 bằng hệ thống SMODELS

p(X) :- r(X), not q(X). q(X) :- r(X), not p(X). r(1).

Hình 3.7 .Kết quả thực thi ví dụ 1.13 bằng hệ thống SMODELS

Mã hóa ví dụ 1.14 chương trình logic thông thường trong chương 1 bằng hệ thống SMODELS

lparse Biểu diễn smodels

logic

Mô hình bền vững Chương trình

a :- not b. b :- not a. c :- a , not b.

Hình 3.8. Kết quả thực thi ví dụ 1.14 bằng hệ thống SMODELS

Mã hóa ví dụ 1.15 chương trình logic thông thường trong chương 1 bằng hệ thống SMODELS

fly(X) :- bird(X) , not ab(X). bird(tweety).

Hình 3.9.Kết quả thực thi ví dụ 1.15 bằng hệ thống SMODELS

Mã hóa ví dụ 1.16 chương trình logic thông thường trong chương 1 bằng hệ thống SMODELS

p(a).

r(X) :- p(X), not q(X).

3.2.2.2 Cài đặt các ví dụ khác:

Mã hóa ví dụ 2.17 chương trình logic thông thường trong chương 2 bằng hệ thống SMODELS p :- r , b , not q. q :- a. r . Tập các vị từ phỏng đoán A = {a, b} Ràng buộc toàn vẹn IC: p Với ∆1 = {b}

Hình 3.11.Kết quả thực thi ∆1 = {b}bằng hệ thống SMODELS

Với ∆1 = {b} thì M() = {p, b, r} là mô hình bền vững của P. Do đó  = {b} là giải thích của quan sát Q = {p}.

Bài toán 3.1 Cài đặt bài toán ở ví dụ 2.13 về “sức khỏe” của con người.

Chương trình logic phỏng đoán <P, A, IC> mô tả bài toán như ví dụ 2.13. Chương trình được cài đặt trong hệ thống SMODELS (được lưu với tập tin có tên 2.13.txt) như sau:

Vào:

Chương trình logic phỏng đoán về sức khỏe (adsbygoogle = window.adsbygoogle || []).push({});

Các giả thuyết phỏng đoán ban đầu, ở đây là cơ_bắp(Sang) 

Tập ∆ là một tập con của tập các vị từ phỏng đoán A

Ra:

Câu trả lời cho quan sát X khỏe mạnh

Mã hóa ví dụ 2.13 chương trình logic phỏng đoán ở chương 2 bằng hệ thống SMODELS

khoe_manh(X) :- to_con(X), not yeu(X). yeu(X) :- nho_con(X), not khoe_manh (X) ,

not nho_con_bat_thuong(X). nho_con_bat_thuong (X) :- nho_con(X) , co_bap(X) ,

not yeu(X). khoe_manh(X) :- nho_con(X) , co_bap(X) , not yeu(X).

co_bap(sang).

Tập các vị từ phỏng đoán A:

{ to_con, nhỏ_con, cơ_bắp} Các ràng buộc toàn vẹn (IC):

Với ∆2 = {nhỏ_con(Sang)},

Hình 3.12. Kết quả thực thi ∆2 = {nhỏ_con(Sang)} bằng hệ thống SMODELS

Với ∆3 = {cơ_bắp(Sang)},

Ta có ∆2 = {nhỏ_con(Sang)} là giải thích phỏng đoán của quan sát QM(∆2) = {nhỏ_con(Sang), cơ_bắp(Sang), khỏe_mạnh(Sang),

nhỏ_con_bất_thường(Sang)} là mô hình bền vững tổng quát của <P, A, IC>.

Bài toán 3.2 Cài đặt bài toán về “khả năng bay” của các loài chim.

Xét chương trình logic phỏng đoán <P, A, IC>, trong đó P gồm các quy tắc:

có_thể_bay(X) chim(X), chim_bất_thường(X)

chim(X) đà_điểu(X)

chim_bất_thường(X) đà_điểu(X), đà_điểu_bất_thường(X)

chim(X) chim_cánh_cụt(X)

chim_bất_thường(X) chim_cánh_cụt(X),

chim_cánh_cụt_bất_thường(X)

đà_điểu(X) đà_điểu_lạ(X)

đà_điểu_bất_thường(X) đà_điểu_lạ(X),  đà_điểu_lạ_bất_thường(X)

chim_cánh_cụt(Kin) 

Tập các vị từ phỏng đoán A:

{chim_cánh_cụt, chim_cánh_cụt_bất_thường, đà_điểu_lạ,

đà_điểu_lạ_bất_thường} Các ràng buộc toàn vẹn (IC): (adsbygoogle = window.adsbygoogle || []).push({});

đà_điểu_lạ_bất_thường(Kin)

Chương trình được cài đặt trong hệ thống SMODELS (được lưu với tập tin có tên 2.15.txt) như sau:

Vào:

Chương trình logic phỏng đoán về khả năng bay của các loài chim Các giả thuyết phỏng đoán ban đầu, ở đây là chim_cánh_cụt(Kin) 

Ra:

Câu trả lời cho quan sát X có thể bay

Mã hóa chương trình logic phỏng đoán bằng hệ thống SMODELS

co_the_bay(X) :- chim(X), not chim_bat_thuong(X). chim(X) :- da_dieu(X). chim_bat_thuong(X) :- da_dieu(X), not da_dieu_bat_thuong(X). chim(X) :- chim_canh_cut(X). chim_bat_thuong(X) :- chim_canh_cut(X), not chim_canh_cut_bat_thuong(X). da_dieu(X) :- da_dieu_la(X). da_dieu_bat_thuong(X) :- da_dieu_la(X), not da_dieu_la_bat_thuong(X). chim_canh_cut(kin).

Với ∆1 = {chim_cánh_cụt(Kin)},

Hình 3.14. Kết quả thực thi ∆1 = {chim_cánh_cụt(Kin)} bằng hệ thống SMODELS

Tương tự, với ∆2 = {chim_cánh_cụt_bất_thường(Kin)}

Hình 3.15. Kết quả thực thi ∆2 = {chim_cánh_cụt_bất_thường(Kin)} bằng hệ thống SMODELS

Tương tự, với ∆3 = {đà_điểu_lạ(Kin)}

Hình 3.16. Kết quả thực thi ∆3= {đà_điểu_lạ(Kin)} bằng hệ thống SMODELS

Hình 3.17.Kết quả thực thi ∆8 = {chim_cánh_cụt_bất_thường(Kin), đà_điểu_lạ(Kin)} bằng hệ thống SMODELS

Ta có ∆2 = {chim_cánh_cụt_bất_thường(Kin)} và ∆3 = {đà_điểu_lạ(Kin)} và

∆8 = {chim_cánh_cụt_bất_thường(Kin), đà_điểu_lạ(Kin)} là các giải thích phỏng đoán của QM(∆2) = {chim_cánh_cụt_bất_thường(Kin),

chim_cánh_cụt(Kin), chim(Kin), có_thể_bay(Kin)} và M(∆3) = {đà_điểu_lạ(Kin), chim_cánh_cụt(Kin), đà_điểu_bất_thường(Kin),

đà_điểu(Kin), chim_bất_thường(Kin), chim(Kin)} và M(∆8) = {đà_điểu_lạ(Kin), chim_cánh_cụt_bất_thường(Kin), chim_cánh_cụt(Kin),

đà_điểu_bất_thường(Kin), chim(Kin), đà_điểu(Kin), có_thể_bay(Kin)} là các mô hình bền vững tổng quát của <P, A, IC>.

3.3. Tiểu kết chương 3

Chương 3 đã trình bày thủ tục để tính toán phỏng đoán đối với chương trình logic phỏng đoán cùng với các ví dụ minh họa chi tiết cho phương pháp này. Chương 3 cũng trình bày tổng quan về phần mềm lập trình logic SMODELS và cài đặt, thực thi một số chương trình logic phỏng đoán bằng SMODELS, từ đó để trả lời câu truy vấn đối với chương trình logic phỏng đoán.

PHẦN KẾT LUẬN

Luận văn đã tập trung tìm hiểu về lập luận suy diễn trong lập trình logic phỏng đoán. Các kết quả chính mà luận văn đạt được là:

 Tìm hiểu về cú pháp và ngữ nghĩa của chương trình logic xác định và chương

Một phần của tài liệu Tìm hiểu về lập luận suy diễn trong lập trình logic phỏng đoán (Trang 40)