Lập trình logic đã chứng tỏ thế mạnh về khả năng biểu diễn tri thức và được ứng dụng chủ yếu trong lĩnh vực trí tuệ nhân tạo như công nghệ xử lý tri thức, máy học, hệ chuyên gia, xử lý n
Trang 1TRƯỜNG ĐẠI HỌC VINH
NGUYỄN ANH TUẤN
NGHIÊN CỨU LẬP TRÌNH TẬP TRẢ LỜI ASP
VÀ ỨNG DỤNG TRONG XẾP THỜI KHÓA BIỂU
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
ĐỒNG THÁP, 3/2017
Trang 2BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC VINH
NGUYỄN ANH TUẤN
NGHIÊN CỨU LẬP TRÌNH TẬP TRẢ LỜI ASP
VÀ ỨNG DỤNG TRONG XẾP THỜI KHÓA BIỂU
Chuyên ngành: CÔNG NGHỆ THÔNG TIN
Mã số: 60.48.02.01
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
Người hướng dẫn khoa học: TS.Nguyễn Ngọc Hiếu
ĐỒNG THÁP, 3/2017
Trang 3Người hướng dẫn khoa học: TS Nguyễn Ngọc Hiếu
Phản biện 1:
Phản biện 2:
Luận văn sẽ được bảo vệ tại Hội đồng chấm luận văn thạc sĩ họp tại Trường Đại học Vinh vào hồi giờ ngày tháng năm 20
Trang 4Tôi cam đoan đây là công trình nghiên cứu của riêng tôi dưới sự hướng dẫn khoa học của thầy TS Nguyễn Ngọc Hiếu.
Các kết quả nêu trong luận văn là trung thực, có nguồn gốc rõ ràng, được trích dẫn đầy đủ và chưa từng công bố trong bất kỳ công trình khoa học nào
Tác giả luận văn
Nguyễn Anh Tuấn
Trang 5Luận văn được hoàn thành dưới sự hướng dẫn khoa học của thầy giáo TS Nguyễn Ngọc Hiếu, trường Đại học Vinh Tôi xin bày tỏ lòng biết ơn sâu sắc nhất đến thầy về sự hướng dẫn khoa học, tận tình, chi tiết và tạo mọi điều kiện tốt nhất để tôi có thể hoàn thành luận văn này
Tôi xin gửi lời cảm ơn đến quý thầy cô giáo trong Khoa Công nghệ thông tin trường Đại học Vinh, quý thầy cô giáo ở các đơn vị trực thuộc, các cán bộ phòng Sau Đại học cùng những thầy cô thỉnh giảng đã trực tiếp giảng dạy, truyền đạt kiến thức và cung cấp những nguồn tư liệu quý báu cho tôi trong suốt quá trình học tập và nghiên cứu
Nhân đây tôi xin dành những tình cảm tốt đẹp và lời cảm ơn đến trường Đại học Đồng Tháp đã tạo mọi điều kiện thuận lợi để tôi có điều kiện cơ sở vật chất học tập và hoàn thành tốt luận văn
Tôi xin bày tỏ lòng biết ơn đến những người thân trong gia đình và bạn bè, đồng nghiệp đã luôn động viên, giúp đỡ, tạo điều kiện để cho tôi hoàn thành luận văn này
Đồng Tháp, tháng 3 năm 2017
Học viên Nguyễn Anh Tuấn
Trang 6TRANG PHỤ BÌA
LỜI CAM ĐOAN
LỜI CẢM ƠN
DANH MỤC CÁC THUẬT NGỮ i
DANH MỤC CÁC KÝ HIỆU ii
CÁC CHỮ VIẾT TẮT iii
DANH MỤC CÁC HÌNH VẼ iv
MỞ ĐẦU 1
1 Sự cần thiết của vấn đề nghiên cứu 1
2 Mục tiêu nghiên cứu 2
3 Đối tượng và phạm vi nghiên cứu 2
4 Nội dung nghiên cứu 2
5 Kết cấu của luận văn 3
CHƯƠNG 1 4
CHƯƠNG TRÌNH LOGIC TỔNG QUÁT 4
1.1 Một số định nghĩa 4
1.2 Các định nghĩa chương trình logic xác định 6
1.3 Phủ định trong chương trình logic 12
1.4 Các tính chất của mô hình bền vững 17
CHƯƠNG 2 19
LẬP TRÌNH TẬP TRẢ LỜI ASP 19
2.1 Ràng buộc 20
2.2 Phủ định mặc định và phủ định mạnh 20
2.3 Cú pháp và ngữ nghĩa tập trả lời của chương trình logic mở rộng 21
2.4 Các tính chất của tập trả lời 26
2.5 Biểu diễn tri thức bằng chương trình logic mở rộng ASP 27
CHƯƠNG 3 35
BÀI TOÁN XẾP THỜI KHÓA BIỂU 35
3.1 Định nghĩa bài toán 35
3.2 Các ràng buộc 37
3.3 Tiếp cận bài toán 39
3.4 Cài đặt bài toán xếp thời khóa biểu với hệ thống Clingo, Gringo 43
CHƯƠNG 4 45
CÀI ĐẶT MÔ PHỎNG CÁC BÀI TOÁN MINH HỌA 45
VÀ BÀI TOÁN XẾP THỜI KHÓA BIỂU 45
4.1 Cài đặt và chạy demo ứng dụng 45
4.2 Bài toán thời khóa biểu 46
4.2.1 Các tập luật trong tệp xử lý và xếp thời khóa biểu 46
4.2.2 Các tập luật vi phạm ràng buộc 47
Trang 74.4 Xếp thời khóa biểu theo yêu cầu khác nhau của 2 giáo viên 53
KẾT LUẬN 54
TÀI LIỆU THAM KHẢO 55
Tài liệu tiếng việt 55
Tài liệu tiếng anh 55
PHỤ LỤC 56
Chương 4 cài đặt mô phỏng các bài toán minh họa và bài toán xếp thời khóa biểu 56
Bài toán 4.1.1 56
Trang 8Chương trình logic Logic program
Chương trình logic ràng buộc bản số Cardinality Constraint Program
Trang 10CCP Chương trình logic ràng buộc bản số
Trang 11DANH MỤC CÁC HÌNH VẼ
3.3.2 Giải thuật toán tìm kiếm lặp lại về phía trước 41
4.1.2 Kết quả thực thi bài toán 4.2 bằng hệ thống
4.3 Kết quả xếp thời khóa biểu theo yêu cầu 1 giáo
Trang 12MỞ ĐẦU
1 Sự cần thiết của vấn đề nghiên cứu
Lập trình logic là một trong những phương pháp biểu diễn tri thức cung cấp khả năng để khai báo tri thức và các vấn đề trong ngữ cảnh Một chương trình logic thường được thể hiện bằng công thức "Algorithm = Logic + Control"
Lĩnh vực nghiên cứu về lập trình logic đã phát triển mạnh mẽ trong những thập niên vừa qua Lập trình logic đã chứng tỏ thế mạnh về khả năng biểu diễn tri thức và được ứng dụng chủ yếu trong lĩnh vực trí tuệ nhân tạo như công nghệ xử lý tri thức, máy học, hệ chuyên gia, xử lý ngôn ngữ tự nhiên,… Hiện nay, một hướng mở rộng của lập trình logic được gọi là lập trình tập trả lời (ASP) đã và đang được nhiều nhà khoa học quan tâm ASP có thể dùng để biểu diễn các dạng tri thức khác nhau của thế giới thực ASP được xem như một ngôn ngữ có ngữ nghĩa dạng khai báo và cũng 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, đã được chứng minh là rất phù hợp cho nhiều lĩnh vực ứng dụng Lập trình tập trả lời (ASP) là một cách tiếp cận của lập trình khai báo ASP đã được áp dụng trong một số lĩnh vực quan trọng, chẳng hạn như việc chẩn đoán và lập kế hoạch cho tàu không gian con thoi, đa tác nhân lý luận, ngôn ngữ tự nhiên, …
Nhiều công trình nghiên cứu có giá trị về lập trình tập trả lời đã được công bố Hệ thống CLINGO, GRINGO thường được sử dụng cho việc cài đặt
và thực thi đối với lớp chương trình logic với ngữ nghĩa tập trả lời
Với mục đích ứng dụng công nghệ thông tin trong việc dạy và học trong trường phổ thông, đồng thời hỗ trợ nhà trường rút ngắn thời gian trong việc sắp xếp thời khóa biểu, vì thế em áp dụng lập trình logic và hướng mở rộng
của lập trình logic là lập trình tập trả lời ASP (Answer Set Program) ASP có
Trang 13thể dùng để biểu diễn các dạng tri thức khác nhau của thế giới thực, nó được xem như một 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ủa chương trình logic thông thường.
Luận văn nghiên cứu về lập trình tập trả lời ASP và ứng dụng để xếp thời khóa biểu, tiến hành cài đặt một số chương trình minh họa bằng phần mềm Clingo, Gringo Những nội dung nghiên cứu của luận văn này là có ý nghĩa về mặt lý thuyết cũng như ứng dụng trong thực tiễn
Cấu trúc nội dung luận văn gồm phần mở đầu, ba chương nội dung, mô
tả cài đặt, chạy chương trình, phần kết luận, hướng phát triển của đề tài và phần phần phụ lục, tài liệu tham khảo
2 Mục tiêu nghiên cứu
Nghiên cứu về lập trình logic tập trả lời ASP (Answer Set Program) chạy trên phần mềm Clingo, Gringo và ứng dụng trong xếp thời khóa biểu
3 Đối tƣợng và phạm vi nghiên cứu
3.1 Đối tượng nghiên cứu
- Nghiên cứu lập trình logic;
- Nghiên cứu lập trình ASP;
4 Nội dung nghiên cứu
- Các khái niệm trong lập trình logic;
- Lập trình tập trả lời: các khái niệm và ngữ nghĩa;
Trang 14- Ứng dụng lập trình tập trả lời cho bài toán sắp xếp thời khóa biểu.
5 Kết cấu của luận văn
Chương 1 Chương trình logic tổng quát
Chương 2 Lập trình tập trả lời ASP
Chương 3 Bài toán xếp thời khóa biểu
Chương 4 Cài đặt mô phỏng các bài toán minh họa và bài toán xếp thời khóa biểu
Kết luận
Tài liệu tham khảo
Trang 15CHƯƠNG 1 CHƯƠNG TRÌNH LOGIC TỔNG QUÁT
Chương 1 trình bày những khái niệm cơ bản của logic bậc nhất, chương trình logic xác định và chương trình logic thông thường Đối với chương trình logic xác định, ngữ nghĩa của nó là mô hình Herbrand nhỏ nhất, trong khi ngữ nghĩa mô hình bền vững được thiết lập cho chương trình logic thông thường
Cả hai dạng ngữ nghĩa này đều có những hạn chế nhất định Các tính chất ngữ nghĩa từ các mô hình bền vững được trình bày chi tiết cùng với các ví dụ minh họa Đây là những kiến thức làm tiền đề cho các nghiên cứu về ngữ nghĩa của chương trình logic với tập trả lời trong các chương tiếp theo
1.1 Một số định nghĩa
Đị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
Đị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 16(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à t1, ,t n là các hạng thức
thì f(t1, ,tn) là một hạng thức,
(i) Hạng thức chỉ được sinh ra bởi các quy tắc trên
Một hằng được xem là ký hiệu hàm 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(t1,…,tn), trong đó p là
ký hiệu vị từ n-ngôi và các đối t1, ,tn là các hạng thức Nguyên tố nền là nguyên tố không chứa biến
Ta sẽ dùng A để ký hiệu một nguyên tố tùy ý khi ta không quan tâm đến
các đối của nó Ta cũng định nghĩa một nguyên tố đặc biệt, ký hiệu với ý nghĩa luôn luôn có giá trị đúng, và để ký hiệu nguyên tố luôn luôn có giá trị sai
Ví dụ 1.1 Xét nguyên tố me(Lan,Hue), trong đó vị từ me có 2 ngôi chỉ mối
quan hệ mẹ con, hạng thức Lan, Hue là các hằng Nguyên tố có ý nghĩa là
Lan là mẹ của Hue.
Định nghĩa 1.4 (Literal) Literal là một nguyên tố (gọi là literal dương) hoặc
phủ định của nguyên tố (literal âm) Với p là một nguyên tố, literal âm của p được ký hiệu p .
Định nghĩa 1.5 (Công thức) Công thức được định nghĩa đệ qui như sau:
(i) Mỗi nguyên tố là một công thức,
(ii) Các hằng vị từ true và false là các công thức,
(iii) Nếu E và F là các công thức thì:
(iv) Nếu E là công thức và X là một biến thì X E( ), X E( )là các công thức,
Trang 17(iv) Công thức chỉ được sinh ra bởi một số hữu hạn các quy tắc trên.
Định nghĩa 1.6 (Ngôn ngữ bậc nhất) Một ngôn ngữ bậc nhất bao gồm một bộ
ký tự và những công thức được xây dựng trên bộ ký tự đó
1.2 Các định nghĩa chương trình logic xác định
Trong mệnh đề (1.1), nếu n = 0 thì nó được gọi là mệnh đề đơn vị, nghĩa
là mệnh đề có dạng: h , đó là mệnh đề với thân rỗng Ngữ nghĩa của mệnh
đề đơn vị là với mọi phép thay thế các biến của h bởi các hằng thì h luôn luôn
đúng
Ví dụ 1.2 Trong mệnh đề này:
anhchiemruot(X, Y) chame(Z, X), chame(Z, Y), X Y
Nguyên tố chame(X, Y) có nghĩa là X là cha/mẹ của Y Nguyên tố
anhchiemruot(X, Y) có nghĩa là X là anh/chị/em ruột của Y Mệnh đề này nói
rằng nếu X và Y có cùng cha/mẹ là Z và X, Y khác nhau, khi đó X và Y là
Trang 18Trong chương trình này thì s là một hàm 1-ngôi, được xác định bởi
s(X) = X +1 với X , nguyên tố sochan(X) để chỉ X là một số chẵn Mệnh đề
đơn vị r1 có ý nghĩa là 0 một số chẵn và r2 là mệnh đề với ý nghĩa là nếu X là
số chẵn thì s(s(X)) cũng là số chẵn.
Ví dụ 1.4 Xét chương trình logic xác định P mô tả mối quan hệ “gia đình”:
r 1 : nguoi(X) nam(X)
r 2 : nguoi(X) nu(X)
r 3 : contrai(X, Y) chame(Y, X), nam(X)
r 4 : congai(X, Y) chame(Y, X), nu(X)
r 5 : me(X, Y) chame(X, Y), nu(X)
r 6 : cha(X, Y) chame(X, Y), nam(X)
r 7 : anhchiemruot(X, Y) chame(Z, X), chame(Z, Y), X Y
r 8 : bac(X, Y) chame(Z, Y), anhchiemruot(Z, X), nam(X)
r 9 : totien(X, Y) chame(X,Y)
r 10 : totien (X, Y) totien(X, Z), chame(Z, Y), nguoi(X)
nam(nhan) , nam(le) , nam(nghia) , nam(tinh) , nu(an) ,
nu(nhien) , nu(lanh) , chame(tinh, nhan) , chame(lanh,
nhan),
chame(tinh, nghia) , chame(lanh, nghia), chame(nhan, nhien)
, chame(an, nhien) , chame(an, le)
trong ví dụ này thì nguoi(X) có nghĩa là X là một người, nam(X) có nghĩa X có giới tính nam, nu(X) có nghĩa X có giới tính nữ chame(Y, X) có nghĩa là Y là cha/mẹ của X, contrai(X, Y) có nghĩa là X là con trai của Y, congai(X, Y) có nghĩa là X là con gái của Y, anhchiemruot(X, Y) có nghĩa là X là anh/chị/em ruột của Y, bac(X, Y) có nghĩa là X là chú/bác/cậu của Y, totien (X, Y) có nghĩa
Trang 19là X là tổ tiên của Y.
Mệnh đề r1, r2 nói rằng nếu X có giới tính là nam/nữ thì X là người Mệnh đề r3, r4 nói rằng nếu Y là cha/mẹ của X và X có giới tính nam thì X là con trai của Y và nếu X có giới tính nữ thì X là con gái của Y Mệnh đề r5, r6nói rằng nếu X là cha/mẹ của Y và X có giới tính nam thì X là cha của Y và nếu
X có giới tính nữ thì X là mẹ của Y Mệnh đề r7 nói rằng nếu Z là cha/mẹ của
X và Z là cha/mẹ của Y , X và Y khác nhau thì X và Y là hai anh/chị/em ruột
của nhau Mệnh đề r8 nói rằng nếu Z là cha/mẹ của Y, X và Z là hai anh/chị/em ruột của nhau, X có giới tính là nam thì X sẽ là bác/cậu/chú của Y Mệnh đề r9 nói rằng, X là tổ tiên của Y nếu X là cha/mẹ của Y Mệnh đề r10 nói
rằng, X là tổ tiên của Y nếu X là người mà X là tổ tiên của Z và Z là cha/mẹ của Y Và các mệnh đề đơn vị nói rằng Nhan, Le, Nghia, Tinh có giới tính
nam và An, Nhien, Lanh có giới tính nữ, Tinh, Lanh là cha/mẹ của Nhan, Nghia và Nhan, An là cha/mẹ của Nhien
Định nghĩa 1.9 (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 UP, 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 B P, là tập các nguyên tố nền được xây
dựng từ các ký hiệu vị từ trong P có đối là các hạng thức nền lấy từ vũ trụ Herbrand U P
Một thể hiện Herbrand của P là một tập con tùy ý của cơ sở Herbrand
Trang 20Cơ sở Herbrand của P là:
B P = {sochan(0), sochan(s(0)), sochan(s(s(0))), }
Một số thể hiện Herbrand của P là:
I1 = {sochan(0)}
I2 = {sochan(0), sochan(s(0))}
I3 = {sochan(s n (0)) | n {0, 2, 4,…}}
I4 = B P
Định nghĩa 1.10 (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ởi các hạng thức nền trong vũ trụ Herbrand U P Ký hiệu ground(C) là tập tất
cả hiện hành nền của C và đặt ground(P) =∪ CP ground(C)
Định nghĩa 1.11 (Mô hình) Cho I là một thể hiện Herbrand của chương trình
logic xác định P Lúc đó I là mô hình của
- mệnh đề nền (không chứa biến) C = a b1,…,bm ký hiệu I C nếu {b1,…,bm} I hoặc a I;
- mệnh đề C, ký hiệu I C nếu I C’ với mọi C’ ground(C);
- chương trình P, ký hiệu I P nếu I C với mọi mệnh đề C của P.
Ví dụ 1.6 Xét các thể hiện I1,I2, I3, I4 của chương trình logic P trong ví dụ 1.4, rõ ràng I1 không phải là mô hình của P vì mặc dầu I1 là mô hình của mệnh
đề sochan(0) nhưng I1 không phải là mô hình của mệnh đề r2 vì tồn tại mệnh
đề nền sochan(s(s(0))) sochan(0) của r2 mà I1 không phải là mô hình của
mệnh đề nền này Cũng vậy, I2 cũng không phải là mô hình của P vì mệnh đề
tồn tại mệnh đề nền:
sochan(s(s(s(0)))) sochan(s(0)) của r2 mà I2 không phải là mô hình của nó.Tuy nhiên, I3 là mô hình của
P Ta có I3 là mô hình của r1 I3 cũng là mô hình của r2 Thật vậy, xét mệnh đề:
Trang 21sochan(s(s(t)))) sochan(t)
là một hiện hành nền nào đó của mệnh đề r2, trong đó t U P Rõ ràng
mệnh đề sochan(s(s(t))) sochan(t) đúng vì sochan(t) và sochan(s(s(t)))) đều thuộc I3 Vậy I3 là mô hình của P Ta cũng có ngay I4 là mô hình của P
Định nghĩa 1.12 (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 chương trình logic xác định P là mô hình Herbrand nhỏ nhất M P của P.
Mô hình Herbrand nhỏ nhất M P có thể xây dựng bằng cách dùng khái
niệm toán tử hệ quả trực tiếp Ta có định nghĩa sau:
Định nghĩa 1.13 (Toán tử hệ quả trực tiếp) Cho P là chương trình logic xác
2 là tập các tập con của cơ sở Herbrand B P T P được gọi là toán tử
hệ quả trực tiếp trên B P
2
Định lý 1.1 Cho P là chương trình logic xác định Mô hình nhỏ nhất của P là
giới hạn của dãy T P n, n , trong đó:
Trang 22duongdi(X, Z) canh(X, Y) duongdi(Y, Z)
trong đó nguyên tố canh(X,Y) để chỉ có một cạnh từ X đến Y và duongdi(X, Y)
là nguyên tố để chỉ có một đường đi từ X đến Y Mệnh đề thứ nhất nói rằng nếu có một cạnh từ X đến Y thì có một đường đường đi từ X đến Y Ý nghĩa mệnh đề thứ hai, nếu có một cạnh từ X đến Y và một đường đi từ Y đến Z thì
có một đường đi từ X đến Z.
Giả sử thể hiện Herbrand I của chương trình được cho bởi
I = {canh(1, 2), canh(2, 3), canh(3, 4), canh(4, 5)}
Các bước lặp để tính mô hình nhỏ nhất của P:
Trang 231.3 Phủ định trong chương trình logic
1.3.1 Chương trình logic thông thường
Định nghĩa 1.14 (Chương trình logic thông thường) 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 b1,…,b m , not c1,…,not cntrong đó n, m 0, a và bi, cj là các nguyên tố
Chú ý rằng thân quy tắc chứa các lietral phủ định not c1,…,not cn Giá trị chân lý của literal phủ định là ngược với giá trị chân lý của litaral dương của
nó 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 (negation as fairlure) hoặc phủ định mặc định (default negation) Để ý rằng phép phủ định trong
logic cổ điển, còn gọi là phủ định mạnh (strong negation), ký hiệu , là khác
với phép phủ định not trong lập trình logic
Ví dụ 1.9 Xem chương trình logic thông thường sau đây:
man(Dung) single(X) man(X), not husband(X)
husband(X) fail Câu truy vấn ?- single(X)
Ta nhận được câu trả lời là X = Dung
Về mặt trực giác, câu trả lời X = Dung là nhận được vì sự kiện
husband(Dung) không thể chứng minh từ P Để chứng minh single(Dung) ta
có thể sử dụng quy tắc đầu tiên của chương trình, bởi vì man(Dung) là đúng
và không có cách nào chứng minh sự kiện husband(Dung) là đúng trong P
Tuy nhiên với chương trình logic trong ví dụ sau:
man(dung) single(X) man(X), not husband(X)
Trang 24husband(X) man(X), not single(X) thì ta sẽ gặp thất bại khi tìm câu trả lời cho truy vấn ?single(X) bởi vì
single(Dung) và husband(Dung) là phụ thuộc lẫn nhau qua phép phủ định
Phép hợp giải SLD sẽ lặp vô hạn khi trả lời câu truy vấn này
Đối với chương trình logic thông thường, khi các mệnh đề có chứa phủ định ở thân thì ngữ nghĩa của nó trở nên phức tạp hơn nhiều Lúc này chương trình có thể có nhiều mô hình cực tiểu và không có mô hình nhỏ nhất Chẳng hạn, chương trình logic trên có hai mô hình cực tiểu:
Định nghĩa 1.15 (Phép biến đổi Gelfond - Lifschitz) 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 quy tắc 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 quy tắc còn lại.
Điều kiện 1 và 2 ở trên ấn định giá trị chân lý cho các literal phủ định
Nếu A M thì thân quy tắc 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
thân quy tắc chứa nó
Trang 25Rõ ràng P M là chương trình không có phủ định, nó là chương trình logic
Định nghĩa 1.16 (Mô hình bền vững) Tập M các nguyên tố được gọi là mô
hình bền vững của chương trình logic P nếu M là mô hình nhỏ nhất của P M
Định lý 1.2 Cho P là chương trình logic Mọi mô hình bền vững của P đều là
mô hình cực tiểu của P.
Định nghĩa 1.17 (Ngữ nghĩa mô hình bền vững) Nếu chương trình logic P có
chính xác một mô hình bền vững thì mô hình này được xem là ngữ nghĩa mô
hình bền vững của chương trình logic P
p(1, 2)
q(X) p(X, Y) q(Y)
Chương trình ground(P) thu được từ P sau khi thay thế tất cả các đối của
các vị từ bởi các hằng 1 và 2 là:
Trang 26không phải là mô hình bền vững.
Bây giờ, nếu ta đặt M2 = {p(1, 2), q(1)} Lúc đó M2
P là:
p(1, 2)
q(1) p(1, 2)
q(2) p(2, 2)
Mô hình cực tiểu của chương trình này là {p(1, 2), q(1)}, chính là M 2
Vậy {p(1, 2), q(1)} là mô hình bền vững của P Có thể kiểm tra rằng mô hình bền vững này là duy nhất và nó chính là ngữ nghĩa mô hình bền vững của P.
Trang 27Chương trình P này có hai mô hình bền vững:
Mô hình nhỏ nhất của nó là {a} = M1 Vì vậy M1 là mô hình bền vững
của P Tương tự, {b} cũng là mô hình bền vững của P.
Mặt khác, nếu chúng ta đặt M2 = {a, b}, khi đó mô hình nhỏ nhất là tập rỗng
vì thế M2 không bền vững
tập các cạnh Xét bài toán tô màu cho các đỉnh của một đồ thị vô hướng sao cho hai đỉnh liền kề không được tô cùng một màu
Giả sử có ba màu cần tô là đỏ, xanh và vàng và đồ thị có 4 đỉnh là a, b, c,
d Nguyên tố mausac(X) có nghĩa là có màu X, nguyên tố dinh(X) có nghĩa là
đồ thị có đỉnh X, nguyên tố canh(X, Y) có nghĩa là có 1 cạnh từ X đến Y, nguyên tố tomau(X, Y) có nghĩa là đỉnh X được tô màu Y Chương trình logic
mô tả bài toán này như sau:
r1: tomau(X, do) dinh(X), tomau(X, xanh), tomau(X, vang)
r2: tomau(X, xanh) dinh(X), tomau(X, do),tomau(X, vang)
r3: tomau(X, vang) dinh(X), tomau(X, do),tomau(X, xanh)
r4: canh(X, Y), mausac(C), tomau(X, C), tomau(Y, C)
canh(a, b) , canh(b, c) , canh(c, d) , canh(d, a)
mausac(do) , mausac(xanh) , mausac(vang)
dinh(a) , dinh(b) , dinh(c) , dinh(d)
Trang 28Quy tắc r1 nói rằng nếu ta có đỉnh X mà đỉnh X không tô màu xanh và cũng không được tô màu vàng thì đỉnh X sẽ được tô màu đỏ Quy tắc r2 nói
rằng nếu ta có đỉnh X mà đỉnh X không tô màu đỏ và cũng không được tô màu vàng thì đỉnh X sẽ được tô màu xanh Quy tắc r3 nói rằng nếu ta có đỉnh X mà đỉnh X không tô màu xanh và cũng không được tô màu đỏ thì đỉnh X sẽ được
tô màu vàng Quy tắc r4 nói rằng không có cạnh từ X đến Y mà đỉnh X được tô màu C và đỉnh Y cũng được tô màu C.
- mệnh đề nền (không chứa biến) C = a b1,…,bm,not c1,…,not cn, ký
hiệu I ⊨ C nếu {b1,…,bm} ⊈ I hoặc {a, c1,…,cn} I ;
- mệnh đề C, ký hiệu I ⊨ C nếu I ⊨ C’ với mọi C’ ground(C);
- chương trình P, ký hiệu I ⊨ P nếu I ⊨ C với mọi mệnh đề C của P.
Định lý 1.3 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.1 Các mô hình bền vững là không thể so sánh nhau được, nghĩa là
nếu M1 và M2 là các mô hình bền vững của chương trình logic P thì M1 ⊈ M2
Trang 29p(a)
r(X) p(X), not q(X)
lúc đó P có 2 mô hình cực tiểu là M1 = {p(a), r(a)} và M2 = {p(a), q(a)} Ta
có M1 là mô hình bền vững của P còn M2 thì không phải
Để ý điều làm cho M2 khác với M1 là ở chỗ không có quy tắc cũng như
sự kiện nào trong P đảm bảo sự xuất hiện của q(a) trong mô hình.
Định lý 1.5 Cho P là chương trình logic và I là một thể hiện của P Đặt
T P (I) = { a | tồn tại a b1,…, b n , not c1, ,not cn thuộc ground(P)
Sao cho{b1,…, bn} I, {c1, ,cn} I = }
Nếu I là mô hình của P thì TP(I) = I.
Tồn tại mô hình là điểm bất động cực tiểu của toán tử TP nhưng không phải là mô hình bền vững Ta xem ví dụ sau:
Trang 30CHƯƠNG 2 LẬP TRÌNH TẬP TRẢ LỜI ASP
Chương 2 trình bày cú pháp và ngữ nghĩa của lớp chương trình logic
mở rộng (ASP) Ngữ nghĩa của lớp chương trình này được thực hiện theo tiếp cận của lý thuyết mô hình và được xác định bởi các tập trả lời của nó Các ví
dụ được minh họa và biểu diễn tri thức bằng chương trình logic mở rộng Những ví dụ này được giải thích chi tiết nhằm thể hiện bước đầu về tính ứng dụng của lớp chương trình này Trong chương 3 sẽ tập trung tìm hiểu về ứng dụng của lớp chương trình logic mở rộng trong việc biểu diễn tri thức bài toán xếp thời khóa biểu ở trường phổ thông, đồng thời minh họa việc cài đặt và thực thi một số bài toán bằng chương trình logic mở rộng bằng hệ thống lập trình logic Clingo, Gringo.Trình bày về cú pháp và ngữ nghĩa của các chương trình logic thông thường và định nghĩa ngữ nghĩa tập trả lời (answer set semantics) của lớp chương trình logic mở rộng này Ngữ nghĩa đối với lớp chương trình này được thực hiện theo kiểu tiếp cận của lý thuyết mô hình và
là sự mở rộng của ngữ nghĩa mô hình bền vững đã đề cập trong chương 1 Có
ba mở rộng của các chương trình logic thông thường để dẫn đến khái niệm
lập trình tập trả lời:
(i) Ràng buộc, là các quy tắc có phần đầu rỗng, chẳng hạn:
canh(X,Y), vang(X), vang(Y)
để buộc các nút liền kề trong một đồ thị không được phép có màu vàng;(ii) Phủ định mạnh (hoặc phủ định cổ điển) ở các nguyên tố, chẳng hạn docthan(Mai) với ý nghĩa là Mai được biết chắc chắn là độc thân;
(iii) Các quy tắc tuyển, nghĩa là cho phép tuyển () được xuất hiện trong đầu quy tắc, chẳng hạn:
nam(X) nu(X) nguoi(X)
Trang 31với ý nghĩa người chỉ có thể là nam hoặc nữ.
Các chương trình cho phép chứa cả phủ định mạnh và phủ định mặc định được gọi là chương trình logic mở rộng (ELP – Extended Logic Program) và nếu các ELP cho phép có các quy tắc tuyển
trong đó Bi là các literal, hằng vị từ false có thể bỏ qua.
thể là nam (male) hoặc nữ (female).
2.2 Phủ định mặc định và phủ định mạnh
Trong chương 1 đã đị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 (được dẫn xuất) bằng cách 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 giữa phủ định
mạnh và phủ định mặc định:
Ví dụ 2.2 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ã hóa đ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)
Trang 32Nế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õ
rà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
2.3.1.1 Literal điều kiện
Một literal điều kiện có dạng:
trong đó L là literal, gọi là literal chính và A là nguyên tố, gọi là điều kiện.
Ý nghĩa của literal điều kiện là nếu A đúng thì L nhận được và nếu ngược lại thì L được bỏ qua Một literal điều kiện nền về cơ bản tương đương với một hội L∧ A.
Đối với literal điều kiện = L : A, ta ký hiệu lit() = L, cond() = A lần
lượt để chỉ literal và điều kiện tương ứng
Ví dụ 2.3 Literal điều kiện chutrinhHamilton(X,Y) : canh(X,Y) biểu diễn tập
các nguyên tố {chutrinhHamilton(a,b) | canh(a,b) là đúng}.
Trang 332.3.1.2 Nguyên tố bản số và Literal bản số
Một nguyên tố bản số C có dạng:
trong đó b là hạng thức và S là tập literal điều kiện.
Ý nghĩa của nguyên tố bản số C trong (2.2) là nguyên tố bản số C đúng nếu
có ít nhất b literal điều kiện trong S là đúng
Ví dụ 2.4 Nguyên tố bản số Card(1, dinhcomau(X, C): mausac(C)) đúng nếu
có đúng 1 đỉnh X được tô màu C.
Một nguyên tố bản số C cũng có thể có dạng:
trong đó S1, , S n là các tập literal điều kiện, L và U lần lượt là các chặn dưới
và chặn trên L, U có thể không viết, trong trường hợp này giá trị 0 thay cho L
và thay cho U.
Tương tự, ý nghĩa của (2.2’) là nguyên tố bản số C đúng nếu S1, ., S n
đúng trong khoảng [L; U].
Tập literal điều kiện dương trong S được ký hiệu là pos(C) và tập literal điều kiện âm trong S ký hiệu là neg(C)
Ví dụ 2.5 Nguyên tố bản số 1{Màn hình15”, Màn hình17”, Màn hình19”}1 chỉ rằng có chính xác một màn hình thuộc một trong ba kiểu 15”, 17”, 19”
Một literal bản số hoặc là một nguyên tố bản số C hoặc phủ định của
nó, ký hiệu not(C).
Một nguyên tố bản số được gọi là nguyên tố bản số đơn giản nếu b là
một số nguyên Lưu ý có thể viết b S thay cho Card (b, S).
Ví dụ 2.6 Nguyên tố bản số 1{chon(X) : dinh(X)}1 là đúng khi có chính xác
một nguyên tố chon(v) là đúng nếu dinh(v) đúng.
Card(2, {a(X) : d(X)}) hay 2{a(X) : d(X)}2 là nguyên tố bản số đơn giản nhưng Card(t + 1, {a(X) : d(X)}) thì không phải.
Trang 34Định nghĩa 2.2 (Biểu thức) Một biểu thức là một công thức hoặc một hạng
thức
Ký hiệu Var(E) để chỉ tập hợp các biến xuất hiện trong một biểu thức E Một biểu thức E là nền nếu và chỉ nếu Var (E) =
Ví dụ 2.7 Cho nguyên tố A=a(X, Y, X+Z), ta có Var(A)={X, Y}.
2.3.2 Ngữ nghĩa tập trả lời ASP
Định nghĩa 2.3 Một chương trình logic mở rộng (ELP) là một tập hữu hạn
các quy tắc có dạng:
l0 l1, ,l m , not l m+1 , ,not l n (2.3)
trong đó n 1, l0 là literal hoặc false và tất cả các li là các literal, not là ký
hiệu của phủ định mặc định Literal mở rộng là một biểu diễn có dạng l hoặc not l Trong quy tắc (2.3) nếu l0 là false thì nó được gọi là một ràng buộc và
false có thể bỏ qua.
Trừ khi có quy định khác, ta giả sử các literal trong quy tắc (2.3) đều là literal nền
Trong chương 2 sử dụng một số ký hiệu sau đây:
là ngược của literal l.
Tập{not li, ,not li+k} được ký hiệu not {li, ,li+k} Nếu r là quy tắc có
dạng (2.3) thì:
head(r) = {l0},
pos(r) = {l1, ,lm},
neg(r) = {lm+1, ,ln},
body(r) = pos(r), not neg(r)
Với P là chương trình logic mở rộng thì:
head(P) =∪ rP head(r),
Trang 35pos(P) =∪ rP pos(r),
neg(P) =∪ rP neg(r).
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
Định nghĩa 2.4 Cho P là chương trình logic mở rộng, X là một tập các litral
nền Lúc đó l lit(P) là đúng trong X nếu l X; l là sai trong X nếu ;
ngược lại l là chưa biết False là sai trong X
Ngữ nghĩa tập trả lời của chương trình logic mở rộng 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 chính xác
các tập trả lời sẽ được thực hiện trước hết đối với chương trình logic mở rộng
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.5 (Tập trả lời – phần 1) Cho P là chương trình logic mở rộng,
không chứa ký hiệu phủ định not và X là một tập các litral 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 logic mở rộng 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ĩa trên đối với chương trình logic tùy ý
Định nghĩa 2.6 Cho P là chương trình logic mở rộng 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:
đối với mọi quy tắc có dạng (1) của P sao cho lm+1, ,ln X
Như vậy P X là chương trình không chứa phủ định mặc định
Định nghĩa 2.7 (Tập trả lời – phần 2) Cho P là chương trình logic mở rộng
và X là một tập các litral 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
Trang 36Định nghĩa 2.8 Chương trình logic P suy dẫn literal nền l, ký hiệu P ⊨ l, nếu
l thuộc mọi tập trả lời của P Câu trả lời của P đối với truy vấn l là Yes nếu P
⊨ l , no nếu P , ngoài ra là unknown.
Định nghĩa này còn được xem là giả thiết thế giới đóng (CWA) đối với chương trình logic mở rộng
Ví dụ 2.8 Xem chương trình logic P như sau:
p(a) not q(a)
Ví dụ 2.10 Xem chương trình sau:
p(a) not p(a)
Chương trình này có hai tập trả lời là {p(a)} và {p(a)} Như vậy P
không thể suy dẫn literal p(a).
Trong phần tiếp theo trình bày một số tính chất của tập trả lời
Trang 372.4 Các tính chất của tập trả lời
Mệnh đề 2.1 Với mọi tập trả lời S của chương trình logic P:
(i) Với mọi hiện hành nền của quy tắc có dạng (1) của P, nếu
Mệnh đề tiếp theo cho ta cách thức để thu hẹp một chương trình logic
mở rộng về chương trình logic thông thường, nghĩa là chương trình không chứa phủ định Ta cần đến ký hiệu sau đây:
Đối với vị từ p xuất hiện trong P, gọi p’ là vị từ mới cùng ngôi với p Nguyên tố p’( ) được gọi là dạng dương của literal âm p( ) Như vậy mọi
literal dương là dạng dương của chính nó Dạng dương của literal l được ký hiệu là l+, ký hiệu P+ là chương trình logic nhận được từ P bằng cách thay thế mỗi quy tắc có dạng: l0 l1, ,lm, not l m+1 , ,not ln
Và thêm quy tắc: p( ), p’( )
Đối với mọi nguyên tố p( ) của P Đối với mọi tập S các literal, ký hiệu
S+ là tập các dạng dương của các phần tử của S
Mệnh đề 2.3 Một tập nhất quán S các literal nền của chương trình logic mở
rộng P là tập trả lời của P nếu và chỉ nếu S+ là tập trả lời của P+
Trang 38Mệnh đề 2.2 đưa ra cách thức đơn giản để định giá các câu truy vấn đối
với chương trình logic mở rộng Để nhận được câu trả lời đối với truy vấn p,
ta sẽ thực hiện truy vấn p và p’ trên chương trình P+ Nếu câu trả lời của
P+đối với p là yes thì câu trả lời của P đối với p là yes Nếu câu trả lời của
P+đối với p’ là yes thì câu đối với p là no Ngoài ra, câu trả lời đối với p là
unknown.
2.5 Biểu diễn tri thức bằng chương trình logic mở rộng ASP
2.5.1 Cơ sở dữ liệu suy diễn dạng tuyển tổng quát
Định nghĩa 2.9 Một chương trình logic dạng tuyển mở rộng (ký hiệu EDLP)
là một tập hữu hạn các quy tắc có dạng:
l0 … lk ← lk+1,…,lm, not lm+1,…,not ln (k 0, n m 0) (2.4)
trong đó mỗi li là các literal Ký hiệu H(r) là tập các nguyên tố trong phần đầu của quy tắc r trên, nghĩa là H(r) là {l0…lk} và B(r) là tập { lk+1,…,lm, not
lm+1,…,not ln} các literal trong thân của quy tắc Tập các literal dương, âm xuất
hiện trong B(r) tương ứng được ký hiệu là B+(r) và B-(r)
Quy tắc (2.4) được gọi là quy tắc dạng tuyển nếu phần đầu của (2.4) chứa nhiều hơn một nguyên tố
Chương trình logic dạng tuyển mở rộng không chứa ký hiệu phủ định
được gọi là chương trình logic dạng tuyển dương.
Một quy tắc tuyển H(r) = l0 … lk là đúng khi ít nhất một trong các
phần tử l0 … lk là đúng; sai khi tất cả những phần tử này là sai và không xác định khi ít nhất một trong những phần tử này là không xác định và những
thành phần còn lại hoặc là không xác định hoặc là sai Ngữ nghĩa của EDLP được cho bởi ngữ nghĩa tập các tập trả lời
Định nghĩa 2.10 Gọi LP là tập các literal nền của EDLP và LP Lúc đó:
(i) Tập các literal nền S được gọi là thỏa mãn quy tắc nền có dạng (3.1)
Trang 39L P , trong đó L P là tập tất cả các literal nền của P Lúc đó S là một tập trả lời
của P nếu S là một tập cực tiểu thỏa mãn hai điều kiện sau:
(i) S thỏa mãn với mọi quy tắc trong P, nghĩa là đối với mỗi quy tắc nền:
l0 …lk ← lk+1,…,lm (k ≥ 0) nhận được từ P, {lk+1,…,lm} S kéo theo li S với i nào đó (0 ≤ i ≤ k) Đặc biệt đối với mỗi ràng buộc toàn vẹn nền ←l0…l m từ P, {l0…l m} S là thỏa
mãn;
(ii) Nếu S chứa một cặp literal l và ¬ l thì S = L P
Định nghĩa 2.12 Cho P là một EDLP, S là một tập các literal và S L P (L P là
tập các literal nền của P) Lúc đó ký hiệu PS là chương trình logic dạng tuyển
không chứa phủ định nhận được từ P bởi S như sau:
l0 …lk ← lk+1,…,lm
thuộc PS nếu và chỉ nếu tồn tại mệnh đề nền từ P:
l0 …lk ← lk+1,…,lm, not lm+1,…,not ln
sao cho: {l0 …lk} S và {lm+1,…,ln} S =
L P , S là tập trả lời của P nếu và chỉ nếu S là tập trả lời của PS
Ví dụ 2.11 Xét chương trình logic dạng tuyển mở rộng P gồm các quy tắc: