270 likes | 738 Views
Lập trình logic và ràng buộc ( Logic Programming and Constraint). Ts. Lê Mạnh Hải Khoa CNTT, ĐH Kỹ thuật Công nghệ TP HCM. Mở đầu. I Mục đích môn học : Giới thiệu một công cụ hỗ trợ nghiên cứu trí tuệ nhân tạo : ngôn ngữ lập trình SWI-Prolog.
E N D
Lập trình logic và ràng buộc(Logic Programming and Constraint) Ts. Lê Mạnh Hải Khoa CNTT, ĐH Kỹ thuật Công nghệ TP HCM
Mở đầu I Mụcđíchmônhọc: • Giớithiệumộtcôngcụhỗtrợnghiêncứutrítuệnhântạo: ngônngữlậptrình SWI-Prolog. • Mộtsốứngdụngtrongxửlýngônngữtựnhiên. II. Thờigianvànội dung: 30 tiếtlýthuyết + 15 tiếtbàitập • Tổngquanvề Prolog(3 tiết) • Kỹthuậtlậptrình Prolog(9 tiết) • Logic và CSDL(3 tiết) • Logic vàHệchuyêngia(3 tiết) • Logic vàngữpháp (6 tiết) • Logic vàlậptrìnhràngbuộc (6 tiết) • Bàitậpvàkiểmtragiữakỳ (15 tiết)
III Giáotrìnhvàtàiliệuthamkhảo • BàigiảngcủaLêMạnhHải (Lưuhànhnộibộ) • James Lu, Jerud J. Mead. Prolog A Tutorial Introduction. Computer Science Department BucknellUniversity • Ulf Nilsson and Jan Maluszynsky. LOGIC, PROGRAMMING AND PROLOG (2ED). John Wiley & Sons Ltd. 2000. • Phan Huy Khánh. Lậptrình logic trong Prolog. Nhàxuấtbản ĐH QG Hànội. 2004
IV. Đánhgiá: • Điểmgiữakỳ (30%): Bàikiểmtra 60 phúttrên PC • Thikếtthúcmôn (70%): Bàikiểmtra 90 phút V. Giáoviên: • Ts. LêMạnhHải. Khoa CNTT HUTECH. • email: lm.hai@hutech.edu.vn • Website: giangvien.hutech.edu.vn
Bài 1: Giới thiệu về ngôn ngữ Prolog • Mục tiêu: • Lược sử Prolog và các dòng sản phẩm • Cài đặt SWI-Prolog và SWI-Prolog editor • Các khái niệm cơ bản và ví dụ
Lược sử Prolog và các dòng Theo Wikipedia.org • “Prolog là một ngôn ngữ lập trình. "lập trình theo lô gích". Xuất hiện từ năm 1972 , mục tiêu của Prolog là giúp người dùng mô tả lại bài toán trên ngôn ngữ của logic, dựa trên đó, máy tính sẽ tiến hành suy diễn tự động dựa vào những cơ chế suy diễn có sẵn (hợp nhất, quay lui và tìm kiếm theo chiều sâu) để tìm câu trả lời cho người dùng. • Cú pháp và ngữ nghĩa của Prolog đơn giản và sáng sủa, nó được người Nhật coi là một trong những nền tảng để xây dựng máy tính thế hệ thứ năm mà ở đó, thay vì phải mô tả cách giải quyết một bài toán trên máy tính, con người chỉ cần mô tả bài toán và máy tính sẽ hỗ trợ họ nốt phần còn lại.
Ý tưởng mới trong các ứng dụng cũ • Prolog được sử dụng nhiều trong các ứng dụng của trí tuệ nhân tạo (AI) và ngôn ngữ học trong khoa học máy tính (đặc biệt là trong ngành xử lý ngôn ngữ tự nhiên NLP vì đây là mục tiêu thiết kế ban đầu của nó).” • Các lĩnh vực khác: theorem proving,[8] expert systems,[9] games, automated answering systems, ontologies and sophisticated control systems. • Cơ sở của Prolog là hàm mệnh đề (propositional Function) và vị từ logic (logic predicate) . Xem thêm Toán rời rạc.
Cơ sở lý thuyết của AI • AI Phát triển các chương trình có khả năng suy luận, dựa trên lý thuyết toán học mệnh đề • Suy luận giúp chương trình AI biết được tính đúng/sai của một vấn đề nào đó. • Không quan trọng vấn đề đó được thực hiện như thế nào. • Phép toán vị từ được hiện thực bằng ngôn ngữ lập trình trên máy tính PROLOG
Suy luận logic • Giáo sư môn logic học nhận ra mình bị mất kính. Ông bèn ngồi suy luận để xem đối tượng nào đã lấy kính của mình."Ai lấy cắp? Đương nhiên là kẻ cắp rồi. Và tên này có thể bị cận thị, có thể không. Có thể hắn đã có kính, có thể chưa có.Nhưng nếu chưa có làm sao hắn có thể trông thấy kính của mình? Điều này chứng tỏ hắn không bị cận thị. Mà không bị cận thị thì đâu cần tới kính.Từ những giả thuyết trên, có thể kết luận là không ai lấy kính của mình cả. Chắc chắn nó nằm ở đâu đây thôi.Nhưng mình đã nhìn khắp rồi, không thấy gì cả. Mà mình nhìn được như vậy có nghĩa là mình đang đeo kính. Ôi may quá!!!".
Một anh chàng lập trình viên cùng người yêu đi du lịch nước ngoài. Trong đoàn còn có một cặp người Anh và một cặp người Mỹ nên họ nói với nhau bằng tiếng Anh. Một hôm cả đoàn ngồi ăn bữa sáng. Anh chồng người Anh nói với vợ: "Can you pass the honey, Honey?" (Đưa anh ít mật, em yêu) Anh chồng người Mỹ nói với vợ: "Do you mind passing the sugar, Sugar?" (Chuyển cho anh chút đường, em yêu) Chàng lập trình viên tỏ ra không thua kém: "Pass me the bacon, Pig!". (Lấy cho anh thịt lợn muối, Lợn!)
Mệnh đề • Bầutrờixanh • Loan thích Long • TâmyêuTâm (!???) • Mệnhđềkhôngbiểudiễnđượcbiểuthức X=Y+3 vì X và Y chưacógiátrị, nênkhôngthểkếtluậnđúngsai. • Những sự tương đương sau không biểu diễn được bằnglogic mệnh đề "Không phải tất cả bánh đều ăn được" và"Chỉ một số bánh ănđược“ Ứngdụngphép tam đoạnluận: A v B, !A => B Cótôivớianhmàtôimấtđồnghồ, màtôithìkhônglấycủatôirồi!
Logic vị từ (Predicate) • Predicate là vị từ mô tả tính chất của những đốitượng, hoặc quan hệ giữa chúng Phátbiểu x > 3 có2 phần: • Biến x • Tính chất của biến x (> 3), được gọi làvị từ (predicate) • Kýhiệuphátbiểu P(x) • ⇒ P(2), P(4) là mệnhđề. Mệnhđềđầusai.
Tổng quát • các chương trình Prolog đều yêu cầu vị từ logic ở phần đầu của một mệnh đề Horn là một vị từ dương
Các dòng Prolog • SWI – Prolog: Free but strong! • ISO Prolog, • Edinburgh Prolog • Quintus • SICStus • GNU Prolog • Ciao prolog • …
SWI-Prolog • Tất cả free trên http://www.swi-prolog.org/ • Hãy cài lên máy tính của bạn để thực hành
Ví dụ đầu tiên 1 ?- atom(foot). true. 2 ?- atom(3). false. 3 ?- atom('foot'). true. 4 ?- atom("foot"). false. 5 ?- blue(sky). ERROR: toplevel: Undefined procedure: blue/1 (DWIM could not correct goal)
Các vị từ có sẵn • atom • member and so on… 6 ?- member(3,[1,2,3]). true. 7 ?- member(X,[1,2,3]). X = 1 ; X = 2 ; X = 3. • Làmsaotìmcáchàm build-in ? • Help - Manual
Các quy ước • Hằng số: 3.2 • Hằng chuỗi: an, binh, ‘An’, ‘Binh’ • Hằng logic: true, false. • Biến: bắt đầu bằng chữ hoa hoặc ‘_’. Biến nặc danh _ được dùng khi không cần truy cập
Các mệnh đề của người sử dụng: chương trình prolog. 8 ?- edit(file(vd)). Chép đoạn mã sau vào file vd likes(mary,food). likes(mary,wine). likes(john,wine). likes(john,mary). Đóng file để lưu. Load file và query 14 ?- [vd]. % vd compiled 0.00 sec, 1 clauses true. 15 ?- likes(mary,food). true . 16 ?- likes(mary,john). false.
Ví dụ 2 luong(an,300). luong(binh,400). luong(hai,500). luong(tuan,400). luong(long,450). luongcaohon(X,Y):-luong(X,Z),luong(Y,T),Z>T. luongbang(X,Y):- luong(X,Z),luong(Y,T),Z=T. 25 ?- luongcaohon(X,tuan). X = hai ; X = long.
Ví dụ 3: tính giai thừa factorial(0,1). factorial(N,F) :- N>0, N1 is N-1, factorial(N1,F1), F is N * F1. 31 ?- factorial(5,W). W = 120 .
Bài tập • viếtchươngtrìnhtínhsốfibonacci • Tìmhiểuvịtừsetof Ý nghĩa? Vídụ?
Bài kế tiếp Kỹ thuật lập trình Prolog • Đệ quy: tháp Hà nội • Xử lý danh sách . Quicksort, Mergesort • Bó mệnh đề. • Ngữ nghĩa và thứ tự • Xử lý file.