Cáchtiếp cận này dựa trên ý tưởng là chương trình logic được cung cấp các đặcthù logic của tri thức trong đó, do đó nó độc lập với bất kỳ cách thực hiệnriêng biệt nào, với ngữ cảnh tự do
Trang 1LÊ QUỐC BẢO TỊNH
TÌM HIỂU VIỆC BIỂU DIỄN TRI THỨC TRONG
A-PROLOG
LUẬN VĂN THẠC SĨ KHOA HỌC
CÔNG NGHỆ THÔNG TIN
Huế, 2016
Trang 2LÊ QUỐC BẢO TỊNH
TÌM HIỂU VIỆC BIỂU DIỄN TRI THỨC
TRONG A-PROLOG
CHUYÊN NGÀNH: KHOA HỌC MÁY TÍNH
MÃ SỐ: 60 48 01 01
LUẬN VĂN THẠC SĨ KHOA HỌC
CÔNG NGHỆ THÔNG TIN
NGƯỜI HƯỚNG DẪN KHOA HỌCPGS.TS TRƯƠNG CÔNG TUẤN
Huế, 2016
Trang 3Prolog” này là công trình nghiên cứu của bản thân tôi Các số liệu và kết quả
nghiên cứu trong luận văn này là trung thực và chưa từng được ai công bốtrong bất kỳ công trình nào khác
Người viết luận văn
Lê Quốc Bảo Tịnh
Trang 4hướng dẫn, định hướng và luôn động viên để tôi hoàn thành tốt luận văn này.
Xin cảm ơn Quý Thầy, Cô giáo Khoa Công nghệ thông tin Trường Đạihọc Khoa học – Đại học Huế đã truyền đạt nhiều kiến thức sâu sắc, quý báu
về các môn học trong quá trình giảng dạy và các nội dung hoàn thiện luậnvăn
Xin cảm ơn các bạn học viên lớp cao học Khoa học máy tính khóa2014–2016 và các đồng nghiệp đã luôn bên cạnh, động viên tôi trong suốtthời gian học tập và thực hiện luận văn
Cuối cùng, xin gửi đến gia đình đã hỗ trợ và tạo mọi điều kiện để tôiyên tâm học tập và thực hiện tốt luận văn tốt nghiệp
Xin chân thành cảm ơn tất cả!
Huế, tháng 04/2016Học viên Lê Quốc Bảo Tịnh
Trang 5LỜI CAM ĐOAN
LỜI CẢM ƠN
MỤC LỤC
DANH MỤC CÁC THUẬT NGỮ
CÁC CHỮ VIẾT TẮT
DANH MỤC CÁC HÌNH VẼ
MỞ ĐẦU 1
Chương 1TỔNG QUAN VỀ CHƯƠNG TRÌNH LOGIC 3
1.1 Một số khái niệm cơ sở 3
1.2 Chương trình logic 4
1.2.1 Chương trình logic xác định 4
1.2.2 Chương trình logic thông thường 9
1.2.3 Các tính chất ngữ nghĩa 11
1.3 Tiểu kết Chương 1 12
Chương 2NGÔN NGỮ A-PROLOG 13
2.1 Phủ định mặc định và phủ định mạnh 13
2.2 Cú pháp của A-Prolog 14
2.3 Ngữ nghĩa của chương trình A-Prolog 15
2.4 Các tính chất ngữ nghĩa 17
2.5 Ví dụ về biểu diễn tri thức bằng A-Prolog 17
2.6 Tiểu kết Chương 2 23
Chương 3MỞ RỘNG CỦA A-PROLOG 24
3.1 Cú pháp và ngữ nghĩa của DA-PROLOG 24
3.1.1 Cú pháp của DA-Prolog 24
Trang 63.3.1 Giới thiệu phần mềm SMODELS 28
3.3.2 Cài đặt và chạy ứng dụng 28
3.4 Tiểu kết Chương 3 34
KẾT LUẬN 35
TÀI LIỆU THAM KHẢO 36 PHỤ LỤC
DANH MỤC CÁC THUẬT NGỮ
Trang 7Stable modelMinimal modelLeast modelStable model semanticsAtom
Strong negationDefault negationRule
Ground instanceThe immediate consequence operatorPredicate
Herbrand universeClosed world assumption
CÁC CHỮ VIẾT TẮT
Trang 8DANH MỤC CÁC HÌNH VẼ
Trang 10MỞ ĐẦU
Logic tính toán được các nhà logic học đưa ra vào những năm 1950,dựa trên các kỹ thuật tự động hóa quá trình suy diễn và được phát triển thànhlập trình logic vào những năm 1970 Từ đó hình thành một khái niệm quantrọng là lập trình khai báo Về ý tưởng, các lập trình viên chỉ cần đưa rakhai báo của chương trình còn việc thực hiện cụ thể máy tính sẽ tiếnhành suy diễn tự động dựa vào những cơ chế suy diễn có sẵn (hợp nhất, quaylui và tìm kiếm theo chiều sâu,…) để tìm câu trả lời cho người dùng Ngônngữ Prolog là một công cụ thực hiện rõ ý tưởng này Nhờ khả năng khaibáo tự nhiên của lập trình logic, Prolog nhanh chóng trở nên thôngdụng cho việc biểu diễn tri thức Tính đầy đủ của nó trở nên rõ ràng hơnkhi mối liên hệ giữa các chương trình logic với cơ sở dữ liệu suy diễn đượcđưa ra vào giữa thập kỷ 80
Việc sử dụng lập trình logic và cơ sở dữ liệu suy diễn để biểu diễn trithức được gọi là “cách tiếp cận logic cho việc biểu diễn tri thức” Cáchtiếp cận này dựa trên ý tưởng là chương trình logic được cung cấp các đặcthù logic của tri thức trong đó, do đó nó độc lập với bất kỳ cách thực hiệnriêng biệt nào, với ngữ cảnh tự do, dễ dàng thao tác và suy diễn
Trong những năm gần đây đã có nhiều nghiên cứu mở rộng của lậptrình logic, một trong những mở rộng đó là A-Prolog A-Prolog là ngôn ngữ
có ngữ nghĩa dạng khai báo và dựa trên ngữ nghĩa mô hình bền vững củachương trình logic thông thường A-Prolog có thể được sử dụng để biểu diễncác kiểu tri thức khác nhau trong thế giới thực
Luận văn nghiên cứu về việc biểu diễn tri thức trong A-Prolog Nộidung của luận văn trình bày trong 3 chương Chương 1, trình bày tổng quan
về chương trình logic, trong đó tập trung vào cú pháp và ngữ nghĩa của
Trang 11chương trình logic Chương 2, trình bày cú pháp, ngữ nghĩa của chương trìnhA-Prolog và minh họa việc biểu diễn tri thức bằng A-Prolog Chương 3, trìnhbày một mở rộng của A-Prolog, gọi là DA-Prolog, trong đó phần đầu của cácmệnh đề trong chương trình A-Prolog có chứa phép tuyển logic Trongchương 3 tập trung vào cú pháp, ngữ nghĩa của DA-Prolog và minh họa việcbiểu diễn tri thức Phần mềm lập trình logic SMODELS được sử dụng để càiđặt và thực thi một số ví dụ minh họa trong luận văn
Phần kết luận nêu những kết quả đã đạt được và hướng phát triển của
đề tài
Do thời gian có hạn và bản thân chỉ mới bước đầu nghiên cứu về lĩnhvực này nên không thể tránh khỏi những thiếu sót, kính mong sự giúp đỡ vàgóp ý thêm của quý Thầy, Cô và các bạn
Trang 12Chương 1 TỔNG QUAN VỀ CHƯƠNG TRÌNH LOGIC
Chương 1 trình bày các khái niệm cơ sở của chương trình logic [2], lớpchương trình đơn giản nhất của chương trình logic được gọi là chương logicxác định được xem xét trước tiên cùng với ngữ nghĩa mô hình nhỏ nhất của
nó Tiếp theo chương 1 sẽ trình bày việc mở rộng các chương trình logic xác
định khi cho phép toán tử phủ định not xuất hiện trong thân các mệnh đề,
được gọi chương trình logic thông thường và tiếp cận mô hình bền vững củalớp chương trình này Đây là những kiến thức làm tiền đề cho các nghiên cứutiếp theo về ngôn ngữ A-Prolog
1.1 Một số khái niệm cơ sở
Định nghĩa 1.1 (Bộ ký tự) Bộ ký tự bao gồm các lớp ký hiệu sau:
1 Hằng, thường ký hiệu là các chữ cái thường a, b, c,…
2 Biến, thường ký hiệu bởi các chữ cái in hoa X, Y, Z,…
3 Các ký hiệu hàm, thường ký hiệu bởi f, g, h,…
4 Các ký hiệu vị từ, thường kí hiệu bởi p, q, r,…
5 Các hằng vị từ: true, false.
6 Các ký hiệu kết nối: (phủ định), (tuyển), (hội), (suy ra)
7 Các ký hiệu lượng từ: (với mọi), (tồn tại)
8 Dấu ngoặc đơn trái (, dấu ngoặc đơn phải ), dấu phẩy ,
Mỗi ký hiệu hàm, ký hiệu vị từ có kèm theo một số tự nhiên xác định
để chỉ số các đối số tham gia cùng với ký hiệu hàm hoặc ký hiệu vị từ đó, gọi
là ngôi của chúng
Trên cơ sở bộ ký tự đã cho, người ta đưa ra định nghĩa về hạng thức.Hạng thức là yếu tố quan trọng của công thức logic, được xây dưng từ cáchằng, biến, hàm và được định nghĩa hình thức như sau:
Định nghĩa 1.2 (Hạng thức) Gọi A là bộ ký tự Hạng thức được định nghĩa đệ
qui như sau:
Trang 13(i) Mỗi hằng trong A là một hạng thức.
(ii) Mỗi biến trong A là một hạng thức.
(iii) Nếu f là ký hiệu hàm n-ngôi trong A và t 1 ,…,t n là các hạng thức thì
f(t 1 ,…,t n) là một hạng thức
(iv) Hạng thức chỉ được sinh ra bởi các mệnh đề trên
Một hằng được xem là ký hiệu 0-ngôi Hằng và biến là các hạng thức
nguyên tố, hạng thức nền là hạng thức không chứa biến
Định nghĩa 1.3 (Nguyên tố) Một nguyên tố có dạng p(t 1 ,…,t n ) trong đó p là
ký hiệu vị từ n-ngôi và các đối t 1 ,…,t n là các hạng thức Nguyên tố nền là
nguyên tố không chứa biến
Ví dụ 1.1 Xét nguyên tố child_of(Dung, Binh) trong đó child_of là vị từ
2-ngôi để chỉ mối quan hệ “con của” Dung, Binh là các hằng và child_of(Dung, Binh) có ý nghĩa là Dung là con của Binh.
Định nghĩa 1.4 (Literal) Literal là một nguyên tố, gọi là literal dương và
literal âm là phủ định của nguyên tố, ký hiệu p, với p là một nguyên tố.
Ký hiệu phủ định còn được gọi là phủ định mạnh hoặc phủ định cổ
điển Các literal p và p được gọi là ngược nhau.
Trong phần tiếp theo sẽ xem xét lớp chương trình logic xác định vàchương trình logic thông thường
trong đó n0, A, Bi là các nguyên tố, A được gọi là đầu của mệnh đề và B 1,
…,B n được gọi là thân của mệnh đề, dấu phẩy ký hiệu thay cho phép hội ()
Trang 14Trong mệnh đề (1), nếu n 0 thì nó được gọi là mệnh đề đơn vị, nghĩa là mệnh đề có dạng A ←, đó là mệnh đề với thân rỗng, ký hiệu ← có thể bỏ qua.
Ví dụ 1.2 Xem chương trình logic xác định sau:
Trong chương trình này, cha(X,Y) để chỉ X là cha của Y, me(X,Y) để chỉ
X là mẹ của Y, chame(X,Y) để chỉ X là cha/mẹ của Y, totien(X,Y) để chỉ X là tổ tiên của Y.
Ý nghĩa của mệnh đề (1) và (2) là: X là chame của Y nếu X là cha hoặc
X mẹ của Y Mệnh đề (3) nói rằng X là totien của Y nếu X là chame của Y Mệnh đề (4) nói rằng X là tổ tiên của Z nếu X là tổ tiên của Y và Y là chame của Z.
(5) và (6) là các mệnh đề đơn vị, chính là dữ liệu vào
Ví dụ 1.3 Xem chương trình logic sau để định nghĩa số lẻ.
Trang 15Định nghĩa 1.6 (Vũ trụ/Cơ sở/Thể hiện Herbrand) Cho P là chương trình
logic xác định
Vũ trụ Herbrand của P, ký hiệu U p, là tập các hạng thức nền được xây
dựng từ các hằng và các ký hiệu hàm trong P.
Cơ sở Herbrand của P, ký hiệu là B p, là tập các nguyên tố nền được xây
dựng từ các vị từ trong P có đối là các hạng thức nền trong vũ trụ Herbrand U p
Một thể hiện Herbrand (hoặc đơn giản là thể hiện) của P là một tập con tùy ý của cơ sở Herbrand B p của P.
Một thể hiện Herbrand có thể được xem như là một tập các nguyên tốnền có giá trị đúng trong một ngữ cảnh đã cho Vũ trụ Herbrand của chương
trình logic xác định P luôn luôn là một tập vô hạn nếu trong P có ít nhất một
ký hiệu hàm có số đối số lớn hơn 0
Định nghĩa 1.7 (Hiện hành nền) Một hiện hành nền của mệnh đề C có dạng
(1) là một mệnh đề C’ nhận được từ C bằng cách thay thế các biến trong C bởicác hạng thức nền trong vũ trụ Herbrand Up Ký hiệu ground(C) là tập tất cảhiện hành nền của C, đặt ground(P) =
Trang 16Định nghĩa 1.8 (Mô hình) Cho P chương trình logic xác định và I là một thể
hiện của P Lúc đó I là mô hình của P nếu mọi mệnh đề của P là đúng trong I.
Ví dụ 1.5 Xét các thể hiện I 1 , I 2 , I 3 , I 4 của chương trình logic P trong ví dụ 1.3,
rõ ràng I 1 không phải là mô hình của P vì mặc dù I 1 là mô hình của mệnh đề
sole(s(0)) nhưng I 1 không là mô hình của mệnh đề r 2 vì tồn tại mệnh đề nền
sole(s(s(s(0)))) ← sole(s(0)) của r 2 mà I 1 không phải là mô hình của mệnh đề
nền này Cũng vậy, I 2 cũng không phải là mô hình của P vì mệnh đề tồn tại mệnh đề nền sole(s(s(s(s(0))))) ← sole(s(s(0))) của r 2 mà I 2 không phải là mô
hình của nó Tuy nhiên, I 3 là mô hình của P Ta có I 3 là mô hình của r 1 I 3 cũng
là mô hình của r 2 Thật vậy, xét mệnh đề:
sole(s(s(t))) ← sole(t)
là một hiện hành nền nào đó của mệnh đề r 2 , trong đó tU P Rõ ràng mệnh đề
sole(s(s(t))) ← sole(t) đúng vì sole(t) và sole(s(s(t))) đều thuộc I 3 Vậy I 3 là
mô hình của P Ta cũng có ngay I 4 là mô hình của P.
Định lý 1.1 [2] Mọi chương trình logic xác định đều có mô hình cực tiểu duy
nhất (được gọi là mô hình nhỏ nhất), ký hiệu M P
Định nghĩa 1.9 (Ngữ nghĩa chương trình logic xác định) Cho P là chương
trình logic xác định, ngữ nghĩa của P là mô hình nhỏ nhất của P, ký hiệu M p
Mô hình nhỏ nhất M P có thể tính được bằng cách sử dụng toán tử hệquả trực tiếp nhờ vào một quá trình lặp Ta có định nghĩa sau:
Định nghĩa 1.10 (Toán tử hệ quả trực tiếp) Cho P là chương trình logic xác
định, ký hiệu 2Bp là tập các tập con của cơ sở Herbrand B P Gọi T P là ánh xạ từ
2Bp vào 2Bp và được xác định như sau: Với mỗi I 2 Bp
T P (I) = {A B P | tồn tại A ← A 1 ,…,A n thuộc ground(P)
và {A ← A 1 ,…,A n }I}
T P được gọi là toán tử hệ quả trực tiếp trên 2Bp
Trang 17Định lý 1.2 [2] Cho P là chương trình logic xác định Lúc đó:
1 Toán tử TP đơn điệu tăng và có điểm bất động nhỏ nhất, ký hiệu
1.2.2 Chương trình logic thông thường
Định nghĩa 1.11 Chương trình logic thông thường là một tập hữu hạn khác
rỗng các mệnh đề có dạng:
A ← B 1 ,…,B m , not C 1 ,…, not C n
trong đó n,m 0, A và B i , C j là các nguyên tố
Chú ý trong thân mệnh đề chứa các literal phủ định not C 1 ,…, not C n
Giá trị chân lý của literal âm là ngược với giá trị chân lý của literal dương của
Trang 18nó Literal not A sẽ được xem là sai nếu giá trị chân lý của literal dương A
không được chứng minh một cách hữu hạn thông qua phép hợp giải SLD Vì
vậy phủ định not còn được gọi là phủ định do thất bại hoặc phủ định mặc
Định nghĩa 1.12 (Phép biến đổi Gelfond – Lifschitz) [7] Cho P là chương
trình logic Gọi ground(P) là hiện hành của P Đối với mọi thể hiện M của P,
ký hiệu P M là chương trình nhận được từ ground(P) bằng cách loại bỏ:
1 Các mệnh đề có literal phủ định not A trong thân của nó, với A M.
2 Tất cả literal not A trong thân của các mệnh đề còn lại.
Điều kiện 1 và 2 ở trên ấn định giá trị chân lý cho các literal âm Nếu A M thì thân mệnh đề có chứa literal not A không thể trở thành đúng.
Mặt khác, nếu A M thì not A có thể giả sử là đúng và được loại bỏ khỏi
Trang 19Và mô hình nhỏ nhất của chính là {a,c}.
Xét thể hiện M 1 = {a,c} và M 2 = {b} Thu gọn gồm 1 mệnh đề:
b ←
Và mô hình nhỏ nhất của chính là {b}.
Định nghĩa 1.13 (Mô hình bền vững) Thể hiện M của chương trình logic P
được gọi là mô hình bền vững của P nếu M là mô hình nhỏ nhất của P M
Ví dụ 1.9 Xét chương trình logic P gồm các mệnh đề sau:
Xét M 2 = {s} Khi đó, gồm các mệnh đề: s và f ← s Mô hình nhỏ nhất của là {s, f} M 2 Vậy M 2 không là mô hình bền vững của P.
1.2.3 Các tính chất ngữ nghĩa
Phần này trình bày một số tính chất quan trọng của các mô hình bềnvững Trước tiên ta sẽ xem xét mối quan hệ giữa mô hình bền vững và môhình cực tiểu của chương trình logic
Trang 20Định lý 1.3 [7] Cho P là chương trình logic Lúc đó:
1 Mọi mô hình bền vững của P đều là mô hình của P.
2 Mô hình bền vững của P là mô hình cực tiểu của P.
Hệ quả 1.2 [7] Các mô hình bền vững là không thể so sánh với nhau được,
nghĩa là nếu M 1 và M 2 là các mô hình bền vững của chương trình logic P thì
mặc định not)
Trang 21Chương 2 NGÔN NGỮ A-PROLOG
Chương 2 trình bày về ngôn ngữ A-Prolog [4] [5] A-Prolog là ngônngữ lập trình logic có dạng khai báo dựa trên ngữ nghĩa tập trả lời của chươngtrình logic A-Prolog có thể được biểu diễn các kiểu tri thức khác nhau trongthế giới thực Trong ngôn ngữ A-Prolog có sự xuất hiện của phép phủ địnhtrong các quy tắc Sau đây sẽ trình bày về phép phủ định trong A-Prolog
2.1 Phủ định mặc định và phủ định mạnh
Trang 22Các chương trình logic xác định biểu diễn cho tri thức dương và chophép mô hình hóa khá nhiều bài toán khác nhau, các mệnh đề trong chươngtrình mô tả các đối tượng xác định và mối quan hệ giữa chúng Các quan hệnày được thể hiện rõ trong mô hình nhỏ nhất – chứa các nguyên tố nền là hệquả logic của chương trình Tuy nhiên, có nhiều trường hợp đòi hỏi một cấutrúc để mô hình hóa khái niệm phủ định Phủ định là một khái niệm ngôn ngữ
tự nhiên và thường gặp trong nhiều tình huống thực tế
Ta đã định nghĩa các chương trình logic thông thường, nghĩa là các
chương trình logic cho phép phủ định mặc định (not) xuất hiện trong các thân quy tắc Ngữ nghĩa tự nhiên của not a là “nếu a không thể được chứng minh
là đúng bằng cách áp dụng các quy tắc thì mặc định not a được xem là đúng” Nhưng điều này là khác với “biết chắc rằng a sai” và được biểu diễn bởi a Ta
xem ví dụ sau để phân biệt phủ định mạnh và phủ định mặc định:
Ví dụ 2.1 Giả sử ta đã có quy định: “Ở tại vị trí đường sắt giao nhau, có thể đi
bộ băng qua đường sắt nếu không có chuyến tàu nào đến” và có đối tượng A đang đứng ở vị trí đường sắt giao nhau L nào đó, A muốn đi bộ băng qua
đường sắt Có thể mã hoá điều này bằng hai quy tắc sau:
dibo ← vitri(A,L), duongsat(L), not tauhoa(L) (1)
dibo ← vitri(A,L), duongsat(L), tauhoa(L) (2)
Nếu sử dụng quy tắc (1) thì A không nghĩ rằng tauhoa(L) là đúng, lúc
đó A sẽ quyết định đi bộ băng qua đường sắt mặc dù A không biết chắc là không có chuyến tàu nào đến Tri thức của A có thể cập nhật lại, nếu ta thêm vào sự kiện tauhoa(L) đúng thì A sẽ từ chối đi bộ qua đường sắt.
Còn nếu dùng quy tắc (2) thì A chỉ có thể đi bộ băng qua đường sắt nếu
A biết chắc chắn là không có chuyến tàu nào đến Rõ ràng việc quyết định của
A sẽ “an toàn” khi dùng quy tắc (2) Tuy nhiên quy tắc (1) lại phản ánh rõ
Trang 23ràng về tri thức của A là không thể biểu diễn trạng thái của thế giới một cách
đầy đủ
Có một cách để biểu diễn thông tin âm bằng cách dùng nguyên tố phủđịnh mạnh, trong đó chỉ rõ các sự kiện trong cơ sở tri thức, chẳng hạn, sự kiện
broken(battery) để chỉ battery là không bị hỏng Nếu tri thức này được dùng
để kết luận broken(battery) trong một quy tắc khác thì có thể dẫn đến sự
không nhất quán và dẫn đến việc loại bỏ tất cả các mô hình dựa trên cơ sở trithức đó
Một áp dụng có ích đối với phủ định mạnh là kết hợp với phủ định mặc
định để biểu diễn quy tắc mặc định, chẳng hạn ta có thể biểu diễn quy tắc mặc
định
flies(X) ← bird(X), not flies(X)
với ý nghĩa “theo mặc định, mọi con chim đều bay”
Trong chương 2 ta sẽ dùng một số ký hiệu sau đây:
l là ngược của literal
Tập {not l i ,…,not l i+k } được ký hiệu not {l i ,…,l i+k } Nếu r là quy tắc có
dạng (1), ta ký hiệu:
head(r) = {l 0},
pos(r) = {l 1 ,…l m},
neg(r) = {l m+1 ,…l n},
Trang 24body(r) = pos(r) not neg(r).
Định nghĩa 2.2 Chương trình Prolog là một tập hữu hạn các quy tắc
lit(P) là tập tất cả các literal nền được xây dựng từ các vị từ trong P.
2.3 Ngữ nghĩa của chương trình A-Prolog
Ngữ nghĩa tập trả lời của chương trình A-Prolog P là một tập các tập trả lời, đó là một tập nhất quán các literal nền của P Định nghĩa các tập trả lời sẽ được thực hiện trước hết đối với chương trình A-Prolog P không chứa phủ định mặc định not
Ta nói rằng một tập các literal nền X của P là đóng trong P nếu với mọi quy tắc head ← body của P thì head đúng trong X khi body đúng trong X.
Định nghĩa 2.3 [4] (Tập trả lời – phần 1) Cho P là chương trình A-Prolog,
không chứa ký hiệu phủ định not và X là một tập các literal nền của P X được gọi là tập trả lời của P nếu X là tập cực tiểu trong tập các tập đóng của P.
Rõ ràng mọi chương trình A-Prolog mà không chứa phủ định mặc định
sẽ có nhiều nhất một tập trả lời Các định nghĩa sau để mở rộng định nghĩatrên đối với chương trình A-Prolog tuỳ ý
Định nghĩa 2.4 Cho P là chương trình A-Prolog bất kỳ, X là tập các literal
nền của P Thu gọn của P theo X, ký hiệu P X là tập các quy tắc:
l 0 ← l 1 ,…l m
đối với mọi quy tắc có dạng (1) của P sao cho l m+1 ,…,l n X.
Trang 25Như vậy P X là chương trình không chứa phủ định mặc định.
Định nghĩa 2.5 [4] (Tập trả lời – phần 2) Cho P là chương trình A-Prolog và
X là một tập các literal nền của P X được gọi là tập trả lời của P nếu X là tập trả lời của chương trình thu gọn P X
Định nghĩa 2.6 Chương trình A-Prolog P suy dẫn literal nền l, ký hiệu Pl, nếu
l thuộc mọi tập hợp của P Câu trả lời của P đối với truy vấn l là Yes nếu Pl,
no nếu P ngoài ra là unknown.
Ví dụ 2.2 Xem chương trình A-Prolog P như sau:
p(a) ← not q(a)
p(b) ← not q(b)
q(a)
Dùng định nghĩa của tập trả lời, dễ thấy P chỉ có một tập trả lời là S = {q(a), p(b)} Như vậy đối với truy vấn q(a) thì câu trả lời là yes và truy vấn q(b) là unknown.
Nếu ta thêm vào chương trình P quy tắc sau:
Ví dụ 2.4 Xem chương trình A-Prolog sau:
p(a) ← not p(a)
p(a) ← not p(a)