BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI LUẬN VĂN THẠC SĨ KHOA HỌC NGHIÊN CỨU CÁC PHƯƠNG PHÁP BIỂU DIỄN TRI THỨC TRONG LẬP TRÌNH LOGIC CHUN NGÀNH: CƠNG NGHỆ THƠNG TIN NGUYỄN THANH TÚ Người hướng dẫn khoa học: PGS.TS Nguyễn Than Thủy Hà Nội, 2006 TÓM TẮT LUẬN VĂN Luận văn thực nghiên cứu phương pháp biểu diễn tri thức lập trình logic, cụ thể biểu diễn tri thức chương trình logic tổng quát, chương trình logic mở rộng chương trình logic phân biệt Bản luận văn nghiên cứu mơi trường lập trình logic hiệu quả, DLV (datalog với phép hoặc) hệ thống sở liệu tường thuật mạnh gói DLV mã nguồn hướng đối tượng Java, cho phép kết nối mã nguồn Java với chương trình logic phân biệt Bản luận văn đưa hai toán minh họa: toán N quân hậu toán Cây khung nhỏ Các toán cài đặt mơi trường lập trình logic DLV chương trình mơ tả tốn Cây khung nhỏ nhúng vào mã nguồn Java chạy dạng chương trình hướng đối tượng Java Hướng phát triển luận văn mở rộng nghiên cứu thêm độ phức tạp tính tốn chương trình, cải thiện tốc độ tính tốn phát triển phương pháp biểu diễn tri thức khác tốn NP khó Từ khóa: lập trình logic, DLV, khung nhỏ nhất, biểu diễn tri thức, N quân hậu ABSTRACT The thesis researched about knowledge representation in logic programming, general logic programs, extended logic programs and disjunctive logic programs The thesis discussed about a disjuctive logic programming system, called DLV and focused on the DLV Wrapper, a library, actually implemented in Java, that “wraps” the DLV system inside an external application, allowing to embed disjunctive logic programs inside Object-Oriented source code The thesis solved the N queens problem and Minimum spanning tree problem in DLV and Java The trend of this thesis is researching about the complexity of the logic program, improving the speed of the logic program and researching more algorithms to represent knowledge of the hard NP problem Keywords: logic programming, knowledge representation, DLV, DLV Wrapper, Minimum spanning tree problem BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI LUẬN VĂN THẠC SỸ KHOA HỌC NGHIÊN CỨU CÁC PHƯƠNG PHÁP BIỂU DIỄN TRI THỨC TRONG LẬP TRÌNH LOGIC NGÀNH: CƠNG NGHỆ THƠNG TIN NGUYỄN THANH TÚ Người hướng dẫn khoa học: PGS.TS.NGUYỄN THANH THY H NI 2006 lời cảm ơn Trớc tiên xin gửi lời cảm ơn đặc biệt tới PGS.TS Nguyễn Thanh Thủy, ngời đà định hớng đề tài tận tình hớng dẫn bảo suốt trình thực luận văn thạc sỹ khoa học, từ ý tởng đề cơng nghiên cứu, phơng pháp giải vấn đề, đến điều kiện lý tởng để thực hành luận văn Tôi xin chân thành bày tỏ lòng biết ơn tới tất giáo s, đặc biệt GS José Júlio Alferes, trung tâm Logic tính toán, Universidade Nova de Líboa, Bồ Đào Nha đà cho nhiều kiến thức quý báu vấn đề đại ngành logic tính toán, trí tuệ nhân tạo, công nghệ thông tin, đà cho môi trờng tập thể, khoảng thời gian khó quên đà động viên, giúp đỡ khích lệ thời gian thực luận văn Bản luận văn đợc hoàn thành với động viên giúp đỡ bạn bè lớp cao học Công nghệ thông tin 2004 - 2006 Tôi xin bày tỏ lòng cám ơn chân tình tới tất bạn, bạn đà dành nhiều thời gian quý báu để trao đổi, giúp đỡ gặp vớng mắc suốt thời gian thực luận văn Nguyễn Thanh Tú Công nghệ th«ng tin 2004 - 2006 MỤC LỤC MỞ ĐẦU Chương CHƯƠNG TRÌNH LOGIC TỔNG QUÁT 1.1 Mở đầu 1.2 Biểu diễn tri thức chương trình logic tổng quát 12 1.3 Câu trả lời cho truy vấn 17 1.4 Một số ngữ nghĩa khác chương trình logic tổng quát 19 Chương LẬP TRÌNH LOGIC MỞ RỘNG 22 2.1 Biểu diễn tri thức sử dụng chương trình logic mở rộng 26 2.2 Ngữ nghĩa khác chương trình logic mở rộng 37 2.3 Các chương trình logic phân biệt (Disjunctive Logic Programs) 38 2.3.1 Giới thiệu 38 2.3.2 Biểu diễn tri thức sử dụng chương trình logic phân biệt 42 2.3.3 Tìm câu trả lời cho truy vấn 46 Chương MƠI TRƯỜNG LẬP TRÌNH LOGIC 50 3.1 Giới thiệu 50 3.2 Hệ thống DLV 53 3.2.1 Ngôn ngữ môi trường DLV 54 3.2.2 Cấu trúc chương trình 57 a Cơ sở liệu mở rộng – EDB 57 b Cơ sở liệu – IDB 58 (i) Luật 58 (i.1) Luật ngầm định 59 (i.2) Luật phân biệt 61 (i.3) Luật phủ định 62 (ii) Ràng buộc 65 Chi Ha(ii.1) Ràng buộc toàn vẹn 65 (ii.2) Ràng buộc yếu 67 3.3 Gói DLV Java 70 3.3.1 Biểu diễn liệu: lớp Predicate, Literal, Model Program 70 3.3.2 Kiến trúc gói DLV: lớp DlvHandler 72 Chương CÁC BÀI TỐN MINH HỌA 77 4.1 Bài tốn N qn hậu 78 4.1.1 Phân tích toán 78 4.1.2 Cài đặt 82 4.2 Bài toán Cây khung nhỏ 84 4.2.1 Mơ tả tốn 84 4.2.2 Phân tích cài đặt 85 a Chương trình logic DLV 85 b Cài đặt Java 87 KẾT LUẬN 93 TÀI LIỆU THAM KHẢO 95 PHỤ LỤC 97 MỞ ĐẦU Logic tính tốn nhà logic học đưa vào năm 1950, dựa kỹ thuật tự động hóa q trình suy diễn logic Logic tính tốn phát triển thành lập trình logic vào năm 1970 Từ hình thành khái niệm quan trọng lập trình khai báo (declarative programming) đối lập với lập trình cấu trúc (procedural programming) Về ý tưởng, lập trình viên cần đưa khai báo chương trình cịn việc thực cụ thể máy tính tự xác lập, việc thực chương trình hướng thủ tục lại xác lập cụ thể lập trình viên Ngơn ngữ Prolog công cụ thực rõ ý tưởng Chương trình dịch Prolog đời chứng tỏ ngơn ngữ thực hành phổ biến toàn giới Sự phát triển lập trình logic thức bắt đầu vào cuối năm 1970 Những phát triển xa đạt vào đầu thập kỷ 80, bắt đầu với xuất sách nói sở lập trình logic Việc lựa chọn lập trình logic làm mơ hình sở cho dự án Các hệ thống máy tính đời thứ Nhật (Japanese Fifth Generation Computer Systems Project) mở đầu cho phát triển ngơn ngữ lập trình logic khác Nhờ khả khai báo tự nhiên lập trình logic, Prolog nhanh chóng trở thành ứng cử viên cho việc biểu diễn tri thức Tính đầy đủ trở nên rõ ràng mối liên hệ chương trình logic với sở liệu suy diễn đưa vào thập kỷ 80 Việc sử dụng lập trình logic sở liệu suy diễn để biểu diễn tri thức gọi “cách tiếp cận logic cho việc biểu diễn tri thức” Cách tiếp cận dựa ý tưởng chương trình máy tính cung cấp đặc thù logic tri thức đó, độc lập với cách thực riêng biệt nào, với ngữ cảnh tự do, dễ dàng thao tác suy diễn Chính vậy, cú pháp ngơn ngữ lập trình phải kết hợp chương trình với đặc thù khai báo Khi đó, việc thực phương pháp tính tốn thơng qua so sánh thuộc tính cụ thể với cú pháp khai báo Việc đưa cú pháp thích hợp cho chương trình logic coi lĩnh vực nghiên cứu quan trọng khó lập trình logic Luận văn trình bày kết nghiên cứu cú pháp ngữ nghĩa chương trình logic, bao gồm lập trình logic thơng thường lập trình logic mở rộng, tiếp đề cập mơi trường lập trình logic DLV (Datalog with Vel) cách thức kết hợp môi trường logic mã nguồn hướng đối tượng Java, cuối trình bày hai tốn minh họa (bài tốn N quân hậu toán Cây khung nhỏ nhất) cài đặt DLV chạy mã nguồn hướng đối tượng Java 5 Chương CHƯƠNG TRÌNH LOGIC TỔNG QUÁT 1.1 Mở đầu Ngôn ngữ Λ chương trình logic tổng quát Π xây dựng bảng chữ Α định nghĩa sau: Định nghĩa 1.1 Bảng chữ Α bao gồm loại ký hiệu sau: - Các biến - Các số đối tượng (có thể gọi số) - Các ký hiệu hàm (function symbol) - Các ký hiệu vị từ (predicate symbol) - Các liên kết logic: “not”, “ ← ” “,” - Các ký hiệu phân cách “(“ “)” □ Trong đó, not liên kết logic gọi phủ định ngầm (negation as failure); biến xâu bao gồm ký tự bảng chữ chữ số, bắt đầu chữ viết hoa; số, ký hiệu hàm ký hiệu vị từ xâu bắt đầu chữ viết thường Thông thường, sử dụng chữ p, q, cho ký hiệu vị từ, X, Y, Z, cho biến, f, g, h, cho ký hiệu hàm a, b, c, cho số Định nghĩa 1.2 Một toán hạng định nghĩa sau: ... thực nghiên cứu phương pháp biểu diễn tri thức lập trình logic, cụ thể biểu diễn tri thức chương trình logic tổng quát, chương trình logic mở rộng chương trình logic phân biệt Bản luận văn nghiên. .. liệu suy diễn đưa vào thập kỷ 80 Việc sử dụng lập trình logic sở liệu suy diễn để biểu diễn tri thức gọi “cách tiếp cận logic cho việc biểu diễn tri thức? ?? Cách tiếp cận dựa ý tưởng chương trình. .. cứu thêm độ phức tạp tính tốn chương trình, cải thiện tốc độ tính tốn phát tri? ??n phương pháp biểu diễn tri thức khác toán NP khó Từ khóa: lập trình logic, DLV, khung nhỏ nhất, biểu diễn tri thức,