DLV là một hệ thống lập trình logic dạng tuyển. Ngôn ngữ nền tảng của DLV là Datalog dạng tuyển. Hệ thống DLV được xây dựng bởi một nhóm nghiên cứu người Ý và Áo thuộc trường Đại học Calabria và trường Đại học Công nghệ Vienna.
Phiên bản đầu tiên của hệ thống ra đời vào năm 1997 sau nhiều năm nghiên cứu lý thuyết và đã được cải tiến đáng kể trong những năm vừa qua: tăng khả
năng ngôn ngữ, kết hợp các tính năng mới và các kỹ thuật tối ưu có liên quan vào tất cả các module của hệ thống. Hiện tại, DLV là một hệ thống biểu diễn tri thức và lập luận.
Hệ thống DLV có thể được cài đặt trên các hệ điều hành Unix/Linux hoặc Windows. Kiến trúc tổng quan của hệ thống DLV như hình vẽ sau:
Hình 3.1. Kiến trúc tổng quát của hệ thống DLV
Ngay khi khởi động, chương trình đầu vào được đặc tả bởi người dùng được phân tích cú pháp và biến đổi vào một cấu trúc dữ liệu nội tại của hệ thống. Chương trình đầu vào có thể viết dưới dạng tập tin văn bản, nhưng DLV còn cung cấp một giao diện đối với cơ sở dữ liệu quan hệ qua ODBC. Module IG (Intelligent Grounder) phát sinh một chương trình nền ground(P) có kích thước nhỏ hơn nhiều so với chương trình nền đầy đủ. Sau đó việc tính toán được thực hiện bởi các module MG (Model Generator) và MC (Model Checker).
Để khởi động hệ thống DLV, chạy hệ điều hành Windows, mở Command Prompt để thực hiện lời gọi hệ thống.
Trong hệ thống DLV, tập tin chương trình có phần mở rộng là .dl. Ban đầu, ta thực hiện viết một chương trình trong một tập tin văn bản theo cấu trúc ngôn
InputProgram Intelligent Grounder Model Generator Output Model Checker Relational Database Relational Database WCH
ngữ của hệ thống DLV. Sau đó thực hiện dòng lệnh chạy hệ thống DLV từ Command Prompt để biên dịch chương trình như sau:
{Đường dẫn chứa tập tin hệ thống dlv} {Các tùy chọn} {Đường dẫn chứa tập tin chương trình}.
Trong đó một số tùy chọn thường sử dụng là: –filter=<tên vị từ>[, tên vị từ,....] để chỉ xuất ra màn hình các thể hiện của các vị từ được đặc tả trong kết quả xuất ra, -silent nếu ta không muốn thấy dòng thông tin trạng thái của hệ thống.
Một số tùy chọn khi thực hiện chương trình trên hệ thống DLV: Khi thực hiện chương trình trên hệ thống DLV có cú pháp sau:
DLV [general options] [filename]...
Tùy chọn Mô tả
-filter = predicates Lọc các vị từ cần hiển thị ở danh sách kết quả -nofacts Các vị từ EDB sẽ không được đưa vào danh
sách kết quả
-n=n Tính toán tất cả các mô hình
-silent Nếu không muốn thấy dòng thông tin trạng thái của hệ thống
-N=n Các số nguyên nằm trong phạm vi [0, N].
3.6.2. Cài đặt và thực thi một số chương trình Datalog
Chương trình 1: Xét chương trình Datalog P1 gồm các quy tắc sau đây để mô tả các mối quan hệ “họ hàng” như sau:
sibling(X,Y) ← parent(X,Z) parent(Y,Z) XY
cousin(X,Y) ← parent(X,Xp) parent(Y,Yp) cousin(Xp,Yp)
related(X,Y) ← sibling(X,Y)
related(X,Y) ← related(X,Z) parent(Y,Z)
related(X,Y) ← related(Z,Y) parent(X,Z)
Giả sử quan hệ EDB của vị từ parent gồm các bộ được cho bởi tập sau: {(c,a), (d,a), (d,b), (e,b), (f,c), (g,c), (h,d), (i,d), (i,e), (f,e), (j,f), (j,h), (k,g), (k,i)}.
Mã hóa chương trình logic này bằng DLV:
sibling(X,Y) :- parent(X,Z), parent(Y,Z), X <> Y.
cousin(X,Y):-parent(X,Xp), parent(Y,Yp), sibling(Xp,Yp). cousin(X,Y) :- parent(X,Xp), parent(Y,Yp), cousin(Xp,Yp). related(X,Y) :- sibling(X,Y).
related(X,Y) :- related(X,Z), parent(Y,Z). related(X,Y) :- related(Z,Y), parent(X,Z).
parent(c,a).parent(d,a).parent(d,b).parent(e,b). parent(f,c).parent(g,c).parent(h,d).
parent(i,d).parent(i,e). parent(f,e).parent(j,f). parent(j,h). parent(k,g).parent(k,i).
Tiến hành thực thi chương trình này trong DLV ta nhận được mô hình nhỏ nhất của chương trình P1 được cho ở hình sau:
Chương trình 2: Xét chương trình Datalog P2 gồm các quy tắc sau đây:
path(X,Y) ← arc(X,Y)
path(X,Y) ← path(X,Z) path(Z,Y)
Giả sử quan hệ EDB của vị từ arc gồm các bộ được cho bởi tập sau:
I = {(1,2), (2,3), (3,4), (4,5), (2,8), (3,6), (4,7), (5,8)} Mã hóa chương trình logic này bằng DLV:
path(X,Y) :- arc(X,Y).
path(X,Y) :- path(X,Z), path(Z,Y).
arc(1,2). arc(2,3). arc(3,4). arc(4,5). arc(2,8). arc(3,6). arc(4,7). arc(5,8).
Tiến hành thực thi chương trình này trong DLV ta nhận được mô hình nhỏ nhất của chương trình P2 được cho ở hình sau:
Chương trình 3: Xét chương trình Datalog P3 gồm các quy tắc sau đây:
p1(X,Y) ← e1(X,Y)
p1(X,Y) ← e1(X,Z) p1(Z,Y) p2(X,Y) ← e2(X,Y)
p2(X,Y) ← e2(X,Z) p2(Z,Y) p(X,Y) ← p1(X,Z) p2(Z,Y)
Giả sử quan hệ EDB của vị từ e1 và e2 gồm các bộ được cho lần lượt bởi các tập sau:
{(a,b), (b,c), (c,d)}, {(d,f), (f,g), (g,h)}.
Mã hóa chương trình logic này bằng DLV:
p1(X,Y) :- e1(X,Y).
p1(X,Y) :- e1(X,Z), p1(Z,Y). p2(X,Y) :- e2(X,Y).
p2(X,Y) :- e2(X,Z), p2(Z,Y). p(X,Y) :- p1(X,Z), p2(Z,Y). e1(a,b). e1(b,c). e1(c,d). e2(d,f). e2(f,g). e2(g,h).
Tiến hành thực thi chương trình này trong DLV ta nhận được mô hình nhỏ nhất của chương trình P3 được cho ở hình sau:
Chương trình 4: Xét chương trình Datalog P4 gồm các quy tắc sau đây:
p(X,Y) ← a(X,Y)
p(X,Z) ← p(X,Y) p(Y,Z).
Giả sử quan hệ EDB của vị từ a gồm các bộ được cho lần lượt bởi các tập sau:
I = {a(1,3), a(2,4), a(3,5), a(4,6), a(5,7), a(6,8)} Mã hóa chương trình logic này bằng DLV:
p(X,Y) :- a(X,Y).
a(1,3). a(2,4). a(3,5). a(4,6). a(5,7). a(6,8).
Tiến hành thực thi chương trình này trong DLV ta nhận được mô hình nhỏ nhất của chương trình P4 được cho ở hình sau:
3.7. Tiểu kết chương 3
Chương 3 đã trình bày về mối liên hệ giữa chương trình Datalog và logic mô tả, trong đó tập trung vào chi tiết về cú pháp, ngữ nghĩa của logic mô tả DL- Lite. Mối liên hệ giữa logic mô tả DL-Lite và chương trình Datalog được thể hiện qua một phép chuyển đổi và được minh họa chi tiết qua nhiều ví dụ. Chương 3 cũng giới thiệu một hệ thống lập trình logic DLV, tiến hành cài đặt và thực thi một số chương trình Datalog bằng DLV.
KẾT LUẬN
Luận văn tập trung tìm hiểu về chương trình Datalog và mối quan hệ với logic mô tả DL-Lite. Các kết quả chính mà luận văn đạt được là:
-Tìm hiểu cú pháp của chương trình Datalog và các tiếp cận để xác định ngữ nghĩa chương trình Datalog.
-Tìm hiểu tổng quan về quan hệ giữa chương trình Datalog và logic mô tả; Cú pháp của chương trình Datalog; Ngữ nghĩa của chương trình Datalog theo các tiếp cận lý thuyết mô hình và lý thuyết điểm bất động.
-Tìm hiểu cú pháp và ngữ nghĩa của logic mô tả DL-Lite, phương pháp chuyển logic mô tả DL-Lite thành chương trình Datalog cùng với các ví dụ minh họa chi tiết.
- Tìm hiểu hệ thống lập trình logic DLV, tiến hành cài đặt và thực thi một số chương trình Datalog bằng DLV.
Hướng phát triển của đề tài là:
TÀI LIỆU THAM KHẢO
Tiếng Việt
1. Lê Mạnh Thạnh, Trương Công Tuấn (2011), Giáo trình Chương trình Datalog, NXB Đại học Huế.
Tiếng Anh:
2. Apt K. R. (1990), Logic Programming, Elsevier Science Publishers.
3. Baader, F., Calvanese, D., McGuinness, D., Nardi, D., Patel-Schneider, P.F. (eds). (2003). The Description Logic Handbook. Theory, Implementation and Applications. Cambridge University Press.
4. Calì, A., Gottlob, G., Thomas Lukasiewicz, (2008). “Tractable Query Answering over Ontologies with Datalog±”. Computing Laboratory and Oxford-Man Institute of Quantitative Finance, University of Oxford, UK, pp. 25-37.
5. Calì, A., Gottlob, G., Lukasiewicz, T., (2009). “A general Datalog-based framework for tractable query answering over ontologies”. In: Proc. of PODS, pp. 77–86. ACM Press.
6. Calì, A., Gottlob, G., Andreas Pieris. (2010). “Query answering under non- guarded rules in Datalog+/-“. In Proceedings of RR, pp. 175-190.
7. Calì, A., Gottlob, G., Lukasiewicz, T., Marnette, B., Pieris, A. (2010). “Datalog+/-: A family of logical knowledge representation and query languages for new applications”. In: Proc. of LICS, pp. 228–242.
8. Deutsch, A., Nash, A., Remmel, J.B. (2008). “The chase revisisted”. In: Proc. Of PODS, pp. 149-158.
9. Georg Gottlob, Giorgio Orsi, Andreas Pieris, Mantas Simkus, (2012). “Datalog and its Extensions for Semantic Web Datababes”. Reasoning Web Summer School, Vienna, Austria, pp. 15-39.