1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu một số khía cạnh lý thuyết của lập trình logic và lập trình logic modal

75 27 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 75
Dung lượng 27,71 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Như vậy, suy luận logic là phương pháp nhận thức đã được biết đến từ rất sớm thời Aristotle thế kỷ thứ 4 trước Công Nguyên và cho đến những năm 70 của thế kỷ 20 lập trình logic logic pro

Trang 1

T f " '

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Đ Ỗ T H A N H TH Ủ Y

NGHIÊN CỨU MỘT SỐ KHÍA CẠNH

LÝ THUYẾT CỦA LẬP TRÌNH LỎGIC

r V - l o ) h >

Hà Nội - 2 0 0 5

Trang 2

M ụ c lục■ ■

Lời cảm ơn 1

Mục lục 2

Mở đầu 4

Chương 1 Tổng quan về lập trình logic 6

1.1 Giới thiệu về lập trình logic 6

1.2 Lập trình logic - các nội dung đang được nghiên cứu 7

1.3 Lập trình logic trone tương la i 10

Chương 2 Các nguyên lý cơ s ờ 11

2 1 C h ư ơ n g t r i n h l o g i c 11

2.1.1 Câu logic 11

2.1.2 Câu chương trình 12

2.1.3 Chương trình logic 13

2.2 Hệ quá logic và các mô hình 13

2 2 1 H ệ q u ả l o g i c 15

2.2.2 Mô hình Herbranđ nhỏ nhất 16

2.2.3 Xây dựng mô hình Herbrand nhò nhất 19

2.3 Điểm bất động 20

2.4 Thuật giải SL D 23

2.4.1 Nội dung thuật giải 23

2.4.2 Tính dúng đắn của thuật giải 27

2.4.3 Tính đầy đủ cùa thuật giải 27

2.4.4 Cây SLD (SLD-tree) 28

2.5 Lập trình logic và các lĩnh vực liên quan 30

2.5.1 Hệ chuyên gia (Expert System - ES) 30

2.5.2 Cơ sờ dừ liệu (CSDL) suy diễn (deductive database) 33

Chương 3 Ngôn ngừ Prolog 36

Trang 3

3.1 Các khái niệm cơ bàn 36

3.1.1 Hạng thức (Term) 36

3.1.2 Câu Hom 38

3.1.3 Phép toán 39

3.1.4 Danh sách 40

3.1.5 Đệ quy 42

3.1.6 Chưtmg trình Prolog 42

3.2 Chứng minh cùa Prolog 44

3.2.1 Phép hợp nhất 45

3.2.2 Cây tìm kiếm 45

Chương 4 Lập trinh logic modal (Modal logic programming) 49

4.1 Tổng quan về lập trình logic modal 49

4.2 Khung làm việc của lập trình logic modal 50

4.2.1 Logic modal cấp một 50

4.2.2 Ngôn ngừ MProlog 51

4.2.3 Mô hình và khung làm việc (Model & frame) 53

4.2.4 Điểm bất động 59

4.2.5 Thuật giải SL D 60

4.3 Ví dụ áp dụng 61

4.4 Kết luận về lập trình logic modal 64

Kết luận 65

Phụ lục 66

Tài liệu tham khảo 75

Trang 4

M ở đầu

Lịch sử ỉập trình logic được bắt đầu từ logic ký hiệu (symbolic logic) Sau

đó, logic vị từ cấp một ra dời trên cơ sờ loeic ký hiệu và là một nhánh nghiên cứu của logic ký hiệu Logic vị từ cấp một đã trở thành nền tảng của lập trình logic và

có những bước phát triển mạnh trong thế kỷ 20

Theo Salah al-Fadhli [13] cỏ thể chia lịch sử cùa lập trình logic thành ba giai đoạn: Giai đoạn thứ nhất là việc tìm ra ngôn ngừ ký hiệu cùa logic Người có ảnh hưởng lớn nhất trong giai đoạn này là Aristotle, ông là người đầu tiên đưa ra phương pháp suy diễn thành công “tam đoạn luận”. Sau này, các học trò của Aristotle đã phát triển phương pháp suy diễn này thành các luật suy diễn Giai đoạn thứ hai là giai đoạn phát triển thực sự của logic ký hiệu và giai đoạn thứ ba là giai đoạn đưa logic ký hiệu vào lập trình logic

Điểm bắt đầu cùa lập trình logic là thuật giải tuyến tính của Robinson (trong những năm 1960) và các nghiên cứu cùa các tác già Kowalski, Colmerauer (trong những năm 1970) [3) Thuật giải cùa Robinson dùng để suy diễn trong chứng minh định lý tự động Trong khi đó, Kowalski đã công thức hóa các thể hiện dạng thủ tục (câu lệnh chương trinh) của câu logic Hom và cho rằng câu “A nếu B ị và B2 và Bn” có thể đọc là: '‘để thực thi A, cản thực thi B ị và thực thi B2 và thực thỉ Bn”

Colmerauer đặc tả bộ chứng minh định lý tự động sử dụng các câu chương trình Đó chính là cơ sờ đầu tiên cho khẳng định logic có thể được sử dụng như một ngôn ngữ lập trình

Logic cung cấp một ngữ nghĩa hình thức đơn giản và ngôn ngữ giải quyết vấn đề đa năng cho các lĩnh vực thuộc ngành khoa học máy tính đồng thời nó cũng

là cơ sở cho các hệ cơ sở dừ liệu suy diễn, hệ chuvên gia [3]

Như vậy, suy luận logic là phương pháp nhận thức đã được biết đến từ rất sớm (thời Aristotle thế kỷ thứ 4 trước Công Nguyên) và cho đến những năm 70 của thế kỷ 20 lập trình logic (logic programming) mới được hình thành trên cơ sở của các thuật giải áp dụng trong chứng minh định lý tự động

Ban đầu, lập trình logic được xem như một bộ phận trong nghiên cứu về trí tuệ nhân tạo Và sau này với nhiều nồ lực của các nehiên cứu (trên cả lý thuyết và thực hành), phạm vi ứng dụng cùa lập trình loaic đã rộng lớn, hiệu quả hơn Lập trình logic đã được tách ra nghiên cứu độc lập trong ngành khoa học máy tính

Trang 5

Lập trình logic ngày nay đã được ứns dụng trong nhiêu lĩnh vực của ngành khoa học máy tính như: trí tuệ nhân tạo xử lý ngôn ngữ tự nhiên, hệ thong đa tác tử (multiagent), hệ thống tác tử thông minh, hệ chuyên gia, máy học, hệ hỗ trợ quyết định,

Với khả năng và phạm vi ứng dụng trong hầu hết các lĩnh vực thuộc nghành khoa học máy tính, lập trình logic đã và sẽ có nhữne bước phát triển vững chắc Bởi vậy, nahiên cứu về lập trình logic và một số hướng phát triển của nó là điều mà người viết rất quan tâm Nội dung trình bày của luận vãn bao gồm: tổng quan về lập trình logic; hệ thống các nguyên lý cơ sờ, quan trọng nhất trong lập trình logic; giới thiệu về Prolog - ngôn ngừ dùng trong lập trình logic thông qua các chương trình Prolog minh họa Phần cuối của tài liệu trình bày về một hướng tiếp cận hiện đại cùa lập trình logic đó là lập trình logic modal

Chi tiết nội dung trình bày như sau:

Chương 1 : Giới thiệu về lập trình logic, khái quát về hướng nghiên cứu này

ở trong và ngoài nước, các hướng mở rộng của lập trình logic

Chưong 2: Hệ thống các nguyên iý cơ sở trong lập trinh logic Đó ỉà lý thuyết các mô hình; lý thuyết điểm bất động; thuật giải SLD (Linear resolution with Selection function for Definite clause)

Chương 3: Trình bày về ngôn ngữ Prolog trong mối quan hệ với lập trinhlogic

Chương 4: Giới thiệu về lập trinh logic modal (dạng thức) (modal logic programming) - một mở rộng của lập trình logic cổ điển với việc thêm vào các toán

tử modal (modal operator)

Phần kết luận trình bày các nội dung mà đề tài đã làm được và đưa ra hướng phát triển trong tương lai của đề tài

Phần phụ lục trình bày các toán tử và một số chương trinh Prolog minh họa

đà được kiểm thừ

Trang 6

C hư ơng 1 Tổng quan về lập trình logic

1.1 Giới thiệu về lập trình logic

Lập trình logic đã được nghiên cứu từ những năm đầu cùa thập kỷ 70 thế kỷ

20 và được xem như có nguồn gốc tự nhiên từ việc nghiên cứu chứng minh định lý

tự động và trí tuệ nhân tạo [3] Năm 1972, Kowalski và Colmerauer đã đưa ra ý tường nền tảng cho rằng logic có thể được sử dụng như một ngôn ngữ lập trình

Theo Kowalski thuật toán của lập trình gồm hai phần riêng biệt: phần logic

phần điều khiển. Phần logic là câu lệnh (phát biểu) chi ra vấn đề cần giải quyết; phần điều khiển là câu lệnh chi ra phải giải quvết vấn đề như thế nào

Trong lập trình truyền thống, người lập trình phải định nghĩa các thao tác cần thực hiện để giải bài toán Nghĩa ỉà, phải chi ra cho máy tính biết cách thức giải quyết vấn đề như thế nào đó là cách tiếp cận thủ tục (procedural) Các giả thiết thường là ẩn (không được viết trong chương trình)

Đối với lập trình logic, người la xây dựng chương trình bàng cách mô tả lĩnh vực ứng dụng của nó Nghĩa là đưa ra những khẳng định đúng, đó là cách tiếp cận khai bảo (declarative) Các già thiết là hiện còn việc chọn lựa thao tác là ẩn Nếu theo quan điểm của Kowalski thì người lập trình cần phải khai báo phần logic của chương trình còn phần điều khiển hệ thống sẽ tự cung cấp - đó chính là thủ tục suy diễn độc lập với ứng dụng

Bằng cách tiếp cận khai báo, lập trình logic đă giải quyết tổt nhiều vấn đề có bản chất suy luận logic như hệ chuyên gia, hệ thống suy luận dựa trên mẫu đã có, hệ

hỗ trợ quyết định, trí tuệ nhân tạo và hỗ trợ hiệu quà dưới dạng module cho các bài toán khác

Trong lập trình logic, các vấn đề được đặt ra là: biểu diễn tri thức (bằng logic, khung tri thức - frame, mạng ngữ nghĩa - semantic network); xây dựng cơ sở tri thức:; xây dựng thủ tục suy diễn (thủ tục suy diễn phải độc lập với cơ sở tri thức)

Một hệ lập trình logic về cơ bản gồm các thành phần:

+ Bộ phận giao tiếp với ngirời dùng: thu nhận câu hòi của người dùng và chuyển câu hỏi này cho thù tục suy diễn

+ Thủ tục suy diễn: suy diễn ra các kết luận cho câu hòi dựa trên các sự kiện

và luật đã được định nghĩa trong cơ sở tri thức

Trang 7

+ Cơ sở tri thức: bao gồm các sự kiện và các luật mô tả micn ứng dụng.Trune tâm của một hệ lập trình logic là thù tục suy diễn độc lập ứng dụng

Nó phải được định nghĩa và cài đặt dùng chuna cho mọi chương trình logic Trong các hệ lập trình logic hiện nav, thủ tục suy diễn chủ yếu dựa trên thuật giải SLD

Thủ tục suy diễn được dùng bởi một chươne trình logic là độc lập ứng dụng

Do đó, việc triển khai một chương trinh chính là việc biểu diễn tri thức và triển khai nột cơ sở tri thức thích hợp với miền ứng dụng Cách biểu diễn tri thức thông thường nhất là sử dụng các câu Horn Việc mô tà lĩnh vực ứng dụng là mô tả các đối tượng và mối quan hệ giữa chúng được giả định tồn tại trong miền bài toán

Bài toán quan trọne, nhất của ỉập trình logic là: cho một chương trình logic p, một câu G vấn đề đặt ra là xét xem G có suy diễn được từ p hay không?

Để giải bài toán đó, về lý thuyết có hai cách tiếp cận là mô hình Herbrand nhò nhất và điêm bất động nhò nhất của ánh xạ T từ tập các thể hiện Herbrand vào tập các thể hiện Herbrand Cà hai cách trên đều có chung một mục đích là tìm ra mô hình Herbrand nhỏ nhất của p và nếu G có thể được suy diễn từ p thì G phải thuộc

mô hình Herbrand nhỏ nhất của p

Tuy nhiên, các phương pháp để đạt được mục đích chung đó là khác nhau Với cách tiếp cận xây dựng mô hình Herbrand nhò nhất vấn đề tập trung là các sự kiện nền, các luật trong p và các phép thế biến Trong khi đó cách tiếp cận điểm bất động lại tập trung vào các mô hình và điểm bất động nhỏ nhất cùa ánh xạ T chính là

mô hình Herbrend nhò nhất của p

Trong thực hành suy diễn để tìm lời giải cho bài toán trên, một thủ tục suy diễn lùi đã được xây dựng trên cơ sở của thuật giải SLD Thuật giải SLD tìm ra các câu trả lời đúng cho bài toán dựa trên các câu đích và các biến Các câu trả lời đúng

ở đây cũng phải thuộc mô hình Herbrand nhỏ nhất của p

1.2 Lập trình logic - c á c nội dung đang đ ư ợc nghiên cứu

Trên thế giới, lập trình logic đã và đang thu hút nhiều nghiên cứu của các nhà khoa học bởi tính hiệu quả và phạm vi áp dụng rộng lớn của nó

Lập trình logic cổ điển (classical logic programming) đã mang lại nhiều thành tựu quan trọng và khảng định vị trí độc lập cùa lập trình logic trong ngành khoa học máy tính

Trang 8

Trong lập trình logic cổ điển, một chươns trình logic được định nghĩa là tập hữu hạn các câu Horn (câu có dạng: A<- Bị, Bn; n > 0 Trong đó, A, Bj, j = 1, 2,

n là các công thức nguyên tố A có thể ià rỗng) Dể chứng minh một câu G có được suy diễn từ chương trình p hay không về lý thuyết cần phải chứng minh G có

là hệ quả logic của p hay không, và trone thực hành điều đó được thực hiện bằng phép hợp nhất và phép thế Đó là những nguyên tấc cơ bản của lập trình logic cổ điển Dựa trên nguyên tắc này, việc xây dựng mô tơ suy diễn đã bớt phức tạp và hiệu quả hơn (thuật giải SLD là đúng đắn và đầy đù) Bời lẽ, nếu câu chương trình

có phần đầu không chứa đúng một nguyên tố như câu Hom thì vấn đề sẽ trờ nên phức tạp

Lập trình logic cổ điển đã có những bước phát triển và khả năng ứng dụng đáng kể, tuy nhiên, còn chưa hoàn thiện: các phương pháp suy diễn chưa thích đáng, chưa rút ra được kết luận từ dừ liệu không đầy đủ Chính những thành công

và giới hạn của lập trình logic cổ điển đã thúc đẩy việc phát triển các hướng mở rộng nhàm gia tăng khả năng và phạm vi ứng dụng cùa lập trình logic

Logic vị từ nguyên thủy không đủ khả năng để biểu diễn các khái niệm thờigian, khả năng (độ tin cậy, tri thúc, .)• Do đó, lập trình logic modal (modal logic programming) là một mở rộng cùa lập trình logic cổ điển với việc thêm vào các phép toán modal (modal operator) đề biểu diễn các tri thức phụ thuộc thời gian, không gian, một cách tổng quát là phụ thuộc ngữ cảnh Lập trình logic temporal dựa trên yếu tổ thời gian, có thể xem là trường hợp riêng cùa lập trình logic modal Lập trình logic modal đã được sử dụng hiệu quả trong việc biểu diễn tri thức, suy diễn, lập kế hoạch theo thời gian, mô phỏng, xác nhận dựa trên thời gian và quan trọnghơn cả ỉà mô tả các hệ thống tác tử (agent)

Lập trình logic dạng tuyến (Disjunctive Logic Programming - DLP) là một

mở rộng cùa lập trình logic cổ điển với các yếu tố bất định ở phần đầu (head) của câu chương trình Câu chương trình DLP có dạng: H| V H2 V Hm <- B| A B2

Bn được gọi là lệnh tuyển (disjunctive rule) Với DLP, nhiều vấn đề thực tế đã được biểu diễn tốt hơn dưới dạng câu không phải câu Horn (non - Hom clause)

Lập trình logic ràng buộc (Constraint Logic Programming - CLP) là sự kết hợp tự nhiên giữa lập trình ỉogic và ràng buộc trên ý tưởng nền tảng chung là tiếp cận khai báo Câu chương trình CLP là câu có dạng Ao <- Cị, c m, Bi, Bn (n,

m > 0; C|, c m là các ràng buộc) Các ràng buộc được thêm vào phần thân (body) của câu chương trình Lập trình logic ràng buộc tạo ra môi trường khai báo thuận lợi

Trang 9

trone việc giải quyết vấn đề bằng các p h ư ơ n g tiện cùa ràng buộc và tỏ ra thích hợp với các ứng dụng lập kế hoạch, thời khóa biểu (vấn đề khó của lập lịch đã được giải quyết bằng cách sử dụng CLP trong nhĩme, miền hữu hạn), thiết kế hệ chuyên gia,

xử lý ngôn ngữ tự nhiên Tuy nhiên, hầu hết các bài toán trong lĩnh vực này là thuộc lớp NP - khó, nên hiệu quả của các chương trinh ràng buộc chưa thể dự đoán được mà dựa trên trực giác là một yếu tố quan trọng trong việc quyết định khi nào

và cách thức sử dụng ràng buộc

Với một chương trình logic, khi tỉm lời giải cho câu hòi, hệ thống áp dụng chiến lược quay lui trên cây SLD để đảm bảo vét cạn tất cả các nhánh có thể Việc duyệt cây có thể được thi hành song song (thường được gọi là OR-parallelism) và mọi cố gắng duvệt cây tìm lời giải cho một đích con phải dừng lại ngay khi nó hợp nhất được với đầu cùa một câu bất kỳ Đó là ý tưởng của toán tử ủy thác (commit operator) Phép toán này chia thân câu chương trình thành hai phần: phần có gác

(guarded part) và phần thân (bodv part) Có thể xem toán tử ủy thác như một nhát cắt Khi một đích con đã có lời giải (ờ một nhánh nào đó của cây), nhát cẳt sẽ cắt bỏ (không tiếp tục duyệt) tất cả các nhánh khác của cây có gốc là đích con đó Đó là những ý tưởng cơ bàn cho một lóp ngôn ngữ lập trình dựa trên lập trình logic và được gọi là ngôn ngữ lập trình logic tương tranh (concurrent logic programming language) Một câu chương trình ở đây là một câu có gác (guarded clause) Câu chương trình có dạng H <- G|, Gm I B], Bn Trong đó, n , m >0; G|, Gm là các gác; I là ký hiệu phân tách phần gác và phần thân câu và được gọi là toán tử ủy thác (commit operator) Chương trình là một tập hữu hạn các câu có gác Mỗi câu chương trình phải chứa chính xác một toán tử ủy thác Toán tử này chia vế phải của câu chương trình thành hai phần, được giải quyết theo một trật tự nhất định Phần gác được thi hành trước, sau đó là phần thân Do đó, các literal trong các phần này

có thể được thi hành một cách song song Vậy nên, một đích không thể có nhiều hơn một lời giải và đó cũng là nhược điểm chính của lớp ngôn ngữ lập trình này Lập trình logic tương tranh thích hợp với các hệ thống song song và phân tán

Như vậy, có thể thấy các hướng mở rộng dù theo cách tiếp cận nào cũng đều tập trung vào việc mở rộng phần tử cơ bản xây dựng chương trình logic đó là câu Hom Mồi cách mở rộng đều có cơ sở, phạm vi áp dụng và khiếm khuyết riêng nhưng tất cả đã góp phần quan trọng vào việc đưa lập trình logic đến gần với các úma dụng thực tể hơn

Trang 10

Hiện tại, trên thế giới các nghiên cứu tập trung nhiều vào lập trình logic ràng buộc; lập trình tập lời giải (answer set programming) và các kiểu khác (alternative paradigms).

1.3 Lập trình logic trong tương lai

Vấn đề đặt ra trong tương lai của lập trình logic là xây dựng các trình biên dịch, thông dịch suy diễn hiệu quả hơn với sự hỗ trợ tiến bộ của nền tảng phần cứng Trình dịch trong quá trình họp nhất có thể lựa chọn các luật một cách thông minh dựa trên chiến lược heuristic hay điều khiển của người dùng Các trình dịch hiện nay chi chù yếu dựa trên thuật giải SLD tìm kiếm theo chiều sâu và cách lựa chọn luật là theo thứ tự khai báo nên trong một số trường hợp bài toán thực tế là có lời eiải nhưng chương trình lại không tìm được vi sa vào nhánh vô hạn đầu tiên trên cây tim kiếm (trong khi đó lời giải ờ nhánh khác của cây)

Từ những nội dung đang được quan tâm nehiên cứu và phạm vi ứng dụng của ỉập trình logic, chúng tôi nhận thấy trong tương lai:

+ Lập trình logic cổ điển giữ vai trò trung tâm cho các nghiên cứu mở rộng.+ Các hướng mở rộng tiếp tục được nghiên cứu hoàn thiện và ứng dụng, đặc biệt là lập trình logic ràng buộc cho lập lịch công nghiệp và lập trình logic modal trong việc xây dựng hệ thống đa tác tử và hệ thống các tác từ thông minh

Lập trình logic sẽ không thay thế hoàn toàn các phương pháp lập trình truyền thổng Tuy nhiên, lập trình logic sẽ trở thành phương pháp lập trình cùa thế kỷ 21 bởi tính ưu việt và phạm vi ứng dụng của nó

10

Trang 11

Trong đó: Moi Lj là một literal và X|, x s là cá c biến xuất hiện irong L|

V V L m Literal đã được định nghĩa trong [3].

Tuy nhiên, bien z có một xuất hiện tự do trong (p(X, v) V -q (x ) V r(z).

Do các câu rất phổ biển trong lập trình logic nên để thuận tiện chúng ta ký hiệu câu sau đây:

VX| V x s (A| V V Ak V -iB| V V - i B n)

T rone đó: A ị, A k, B|, B n là các nguyên tổ và X(, x s là các biến xuất

hiện trong các nguyên tổ đó

bằng:

A|, Ak <— B], BnNhư vậy, trong ký hiệu câu, mọi biến đều được già định là có lượng từ phổ dụng, các dấu phẩy ở vế phải ký hiệu phép hội, các dấu phẩy ờ vế trái ký hiệu phép tuyển

Trang 12

Một câu chương trình là một câu có dạng:

A<—Bi, Bn (n > 0)

Trong câu chương trình chỉ có đúng một nguyên tố (là A) A được gọi là đầu

(head) và B j, B n được gọi ià thân {body) của câu chương trình

Ví dụ: câu parent (X, Y, Z) <— father (X, Z), mother (Y, Z).

(với X, Y, z là các biến) là một câu chương trình

Ý nghĩa của câu này là “nếu X là cha của z và Y là mẹ của z thì X và Y là cha mẹ của Z”

Dạng công thức logic cùa công thức trên được biểu diễn như sau:

vx, VY, vz ( parent(X, Y, Z) v-father(X, Z) v^mother(Y, Z))

Ví dụ: câu parent (X, Y, Z), wife (Y, X) <—father (X, Z), mother (Y, Z).

(với X, Y, z là các biến) không phải là một câu chương trình vì phần đầu có hai nguyên tố parent(X, Y, Z)wife(Y, X)

Nếu n = 0 câu chương trinh trở thành A<- và được gọi là câu đơn vị (unit clause).

Ví dụ: câu male(ann)<r-. (ann là một hằng) là câu đơn vị

Ý nghĩa của câu này là “ann là người có giới tính nam”

Nếu A là rỗng, n > 0 câu chương trình trở thành: <— Bị, Bn và được gọi

là câu đích (goal clause).

Mồi Bj (i = 1, .n) được gọi là một đích con của câu đích Nếu y], yrlàcác biến của câu đích <- B 1s Bnthì ký hiệu dạng câu đó là dạng ngắn gọn của:

V y i, V y r (- B ï V V -nBn)

Ví dụ: câu < -parent(mai, long, Ai), (mai, long là hàng, Ai là biến)

là một câu đích

Ỷ nghĩa của công thức này là “mai và long là cha mẹ của Ai ?”

2.1.2 Câu chương trinh

Đ ị n h n g h ĩa : ( C â u c h ư ơ n g t r ìn h ( p r o g r a m c la u s e ) h a y c â u H o m [ 3 ])

Trang 13

Biểu diễn câu đích này dưới dạng công thức logic ta có: -73Ai parentịmai, long, Ai) hay VAi-iparent(mai, long, Ai).

Ví dụ: câu <—parent(mai, long, lan), (các tham số đều là hằng)

là một câu đích với V nghĩa là ”eó phải mai và long là cha mẹ của lan không?”

2.1.3 Chương trình logic

Định nghĩa: (Chương trình logic (logic program) [3])

Một chương trình logic là một tập hữu hạn các câu chương trình.

Ví dụ: Chương trình gồm các câu sau:

<- min(10Q, 200, C). Kết quả ta sẽ nhận được c ~ 100 là số nhỏ nhất trong hai sốđó

2.2 Hệ quả logic và c á c mô hỉnh

Để xét tính đúng, sai của một công thức, đầu tiên ta cần phải gán ý nghĩa cho mỗi ký hiệu trong công thức đó Các phép liên kết logic và các lượng từ đều có ý nghĩa cố định, nhưng các hằng, ký hiệu hàm, ký hiệu vị từ thì có ý nghĩa thay đổi với từng miền thể hiện của chúng

Một thể hiện đơn giản bao gồm một miền nào đó, mà trên miền này:

+ Xác định phạm vi của các biến,

+ Phép gán mỗi hằng là một phần tử của miền,

+ Phép gán mỗi ký hiệu hàm là một ánh xạ trên miền

+ Và phép gán mỗi ký hiệu vị từ là một quan hệ trên miền

Trang 14

Do vậy, một thể hiện chi rõ ý nehĩa cho mồi kv hiệu trong công thức Chúng

ta đặc biệt quan tâm đến các thể hiện mà ờ đó cône thức nhận giá trị logic “true”

Thể hiện như vậy được gọi ỉà mô hình của công thức

Định nghĩa: (Thể hiện (interpretation) [3])

M ột th ể h iện ỉ (in terpretation) cù a m ột ngôn ngữ c ấ p m ột L h a o g ồm :

+ Một tập khác rỗng D, gọi là miền thế hiện.

+ Với mỗi hằng trong L, gán một phần tử trong D.

+ Với mối hàm n - ngôi trong L, gán một ánh xạ từ ữ' vào D.

+ Với mỗi vị từ n - ngôi trong L, gán một ánh xạ từ ữ' vào tập (true, false} (hay tương đương một quan hệ trên ơ').

Ví du:«

ABcCho cấu trúc sẳp xếp như sau:

Xét thể hiện I với các phép gán như sau:

+ Miền D íà tập các hộp A, B c trong thế giới thực: D = {A, B, C}

+ Các hằng a, b, c gán tương ứng cho các hộp A, B, c

dưới .” tương ứng với các vị từ: on_top/ỉ, above/2, below/2.

Và các tân từ thuộc thể hiện I là: on_top(a), above(a, b), above(b, c), above(c), below(c, b), below(b, a)

Ý nghĩa không hình thức là “Với mọi cái hộp, luôn tồn tại một cải hộp khác

để nó ở bên trên cái hộp khác đó

Công thức trên là false (sai) trong thể hiện l (vì c không ờ trẽn bất kỳ hộp

nào)

14

Trang 15

Ý nghĩa không hình thức của là: “Với mọi cái hộp, không phải lúc nào cũng tồn tại một cái hộp khác ở bên trên nó”

Hay “Không phải với mọi cái hộp, luôn tồn tại một cái hộp khác để nỏ ở bên trên cái hộp khác đó

Công thức trên là true (đúng) trong thế hiện ỉ (vì a không có cái hộp nào ở trên nó).

Dựa trên định nghĩa côns thức và công thức đóng trong [3], chúng ta có:Định nghĩa: (Mô hình của một công thức (model for fomulas) [3])

Gọi Ị là một thể hiện của một ngôn ngữ cấp một L, giả sử F ỉà một công thức đóng của / Khi đó, ỉ là mô hình cho F nếu giá trị chân lý của F đối với ỉ là đúng.

Với tập các công thức đóng s, Ị ỉà mô hình cho s nếu nó ỉà mô hình cho mọi công thức trong s.

Ví dụ: Xét công thức Vx3yp(x,y) và thể hiện I như sau:

+ Miền D là miền các số nguyên chẵn, không âm x,y G D

+ p là quan hệ “chia hết cho”

Như vậy, I là mô hình cho p vì Vx3yp(x,y) luôn đúng đối với I Phát biểu

của công thức p trong I là: “với mọi số nguyên X e D, luôn tồn tại một số nguyên y

e D để X chia hết cho y”

Sau đây là định nghĩa về tính thôa được và tính xác đáng của công thức dựa trên các mô hình

Định nghĩa: (Tính thỏa được, xác đáng, không thỏa được của công thức [3])

Gọi s là tập các công thức đóng của ngôn ngữ cắp một L Ta nói

+ s ì à thỏa được (satisfaction) nếu L có một thể hiện là mô hình cho s.

+ s là xác đáng (validity) nếu mọi thể hiện của L đều là mô hình cho s.

+ s là không thỏa được nếu nó không có mô hình.

2.2.1 Hệ quả logic

Định nghĩa: (Hệ quà logic (logical consequence) [3])

Trang 16

G là sir S là một tập các công thức đóng của một ngón ngừ cấp một L Ta nói,

F là hệ quà logic của s nếu với mọi thể hiện Ị cùa L, 1 là mô hình của s kéo theo I là

mô hình cùa F.

Ví dụ: Cho s = {p(a), Vxp(x) -» q(x)} F = q(a)

Gọi 1 ỉà một mô hình bất kỳ của S; a là một hằng thuộc miền thể hiện của I Khi đó, ta có p(a) đúng với I và Vxp(x) -» q(x) đúng với I => q(a) đúng => I cũng là

mô hình của F Như vậy, F là hệ quà logic của s

Như vậv, với một chương trình p và một câu đích G = <- B|, Bn(n >0),

ta cần chứng minh P u {G} là không thỏa được Điều đỏ tương đương với việc

chứna minh 3yJ 3 y m (B| A B n) (với y 1, y m là cá c biến xuất hiện trong B ),

, Bn) là hệ quả logic của p

Như vậy, bài toán quan trọng là xác định tính không thỏa được (hay thỏa được) của p u {G} Theo định nghĩa, ta phải chi ra mọi thế hiện của p u {G} khôngphài là mô hình. Đó là một điều dường như không thể! Tuy nhiên, cỏ một lớp các thể hiện nhỏ hơn, thuận lợi hơn, đáp ứng đủ yêu cầu để khảo sát và chtmg minh tỉnh không thỏa được của p u {G} Đó là các thê hiện Herbrand mà chúng ta

sẽ khảo sát sau đây

Cơ sở Herbrand Bp của một chương trình hữu hạn p là mô hình Herbrand M của chương trình đó Và mô hình Herbrand M của một chương trình hữu hạn p ỉà tập con của cơ sở Herbrand B[ của chương trình đó Nghĩa là M c Bp

Vì mọi chương trình hừu hạn p đều có cơ sở Herbrand Bp cũng là một mô hình Herbrand (một chương trình có thể có nhiều mô hình Herbrand) nên tập tất cả các mô hình Herbrand cùa p là khác rỗng Do vậy, giao cùa tất các mô hình Herbrand của p là một mô hình Herbrand [3] và được gọi là mô hình Herbrand nhỏ nhất của p, ký hiệu là Mp

Trang 17

Các thể hiện Herbrand và mô hình Herbrand có hai thuộc tính quan trọng.

Thứ nhất là tính thực tế, đó là đề xác định xem thể hiện Herbrand I có là mô

hình Herbrand của công thức VxF hav không ta chỉ cần kiểm tra xem tất cả các kết

thế nền của F có đúng trong I hay không Ví dụ, để kiểm tra luật A <- A|, An có

đúng trong I hay không, ta chỉ cần chi ra nếu (A <— A|, An)0 là kết thế nền của

A <- A|, An và A[9, A29, An9 e ỉ thì A9 e I

Thứ hai là mặt lý thuyết, đối với một chương trình hữu hạn p, để xác định

một công thức nguyên tổ A có là hệ quả logic cùa p hay không, ta chi cần kiểm tra

xem mọi mô hình Herbrand của p có là mô hình của A hay không Neu đúng thì A

là hệ quả logic của p

Ví dụ: Cho một chương trình p gồm các cône thức sau:

odd(s(0)).

odd(s(s(X))) <- odd(X).

Vũ trụ Herbrand của p bao gồm hằng 0 và hàm s U|> = {0, s(0), s(s(0)),

Cơ sờ Herband của p chứa vị từ odd của các hạng thức nền trong Up

Bp = {odd(0), odd(s(0)), odd(s(s(0))), }

Các thể hiện Herbrand của p là:

Các thể hiện Herbrand Ịà các tập con của cơ sở Herbrand

Il không phải là một mô hình của p vì nó không là mô hình Herbrand của odd(s(0)) Còn I2,13, Ỉ4, Is là các mô hình của odd(s(0)) vì ođd(s(0)) e Ij (i = 2, 3, 4,

5)

Tuy nhiên, I2 không phải là mô hình của p vì trong kết thế nền

odd(s(s(s(0)))) <- odd(s(0)), phần giả thiết odđ(s(0)) e I2 nhưng kết luận

odd(s(s(s(0)))) Ể I2 (phần kết luận sai trong I2) Tương tự, I3 cũng không là mô hình

! 0 '' I M o c Q L ! Ỏ c GIA - :

I iRvJỉv>-> ÍA M T H O N G i!í'] ’ >•>■ £

Trang 18

I4 là mô hình của p vì odd(s(0)) e I4 và ta xét luật odd(s(s(t))) <- odd(t) là

một kết thế nền bất kỳ cùa luật o d d (s(s(X ))) < - od d (X ) với t G Up Rõ ràng

ođd(s(s(t))) <- odd(t) đúng nếu odd(t) £ I4 Hơn thế nữa, nếu odd(t) e I4 thì

ođd{s(s(t))) € I4 và do đó, odd(s(s(t))) <- odd(t) đúnẹ trong I4 Tương tự I5 cũng là

mô hình cùa p

Như vậy, các thể hiện Herbrand I4,15 đồng thời là mô hỉnh Herbrand của p

Định lý: [10] Mô hình Herbrand nhỏ nhất (The least Herbrand model)

Gọi p là một chương trình hữu hạn Khi đó Mp = {A € Bp I A là hệ quả logic

của P} ở đây, Bp là cơ sở Herbrand của p

Chứng minh:

Trước hết, cần chứng minh: Mp ID {A e Bp I p Ị= A}

Dễ thấy mọi nguyên tố nền A là hệ quà logic của p đều thuộc Mp Thực vậy,

theo định nghĩa hệ quả logic A phải đúng trong Mp Mặt khác, theo định nghĩa về

thể hiện Herbrand phát biểu rằng A đúng trong M|> khi và chi khi A € M[>

Tiếp theo, cần chứng minh Mp Ç {A € Bp Ị p 1= A}

Giả sử A e M|> Do đó, A đúng trong mọi mô hình Herbrand của p Giả sử

31’ là mô hình (không phải mô hình Herbrand) của p sao cho A sai trong r Ta đã

biết tập I gồm tất cà các công thức nguyên tố (các công thức này đúng trong I) là

một mô hình Herbrand cùa p Do đỏ, A không thể thuộc I Điều này mâu thuẫn với

aiả định rằne tồn tại một mô hình cùa p mà trong đó A sai Do vậy, A đúng trong p,

nghĩa là p 1= A

Như vậy, với một chương trình p, cơ sờ Herbrand của p là một mô hình

Herbrand cùa p Hơn nữa, luôn có một mô hình Herbranđ nhỏ nhất của p, đó là tập

tất cả các nguyên tố nền là hệ quả logic của p

Ví dụ: Với chương trình p của ví dụ trên, mô hình Herbrand nhỏ nhất của p

là I 4 vi 1 4 0 1 5 = I4.

Để chứng minh một câu A là một hệ quả logic của P ( P u {-<A} không thỏa

được) ta cần chi ra p u { —.A} không có mô hình Herbrand hoặc chứng minh A e

Mp (nghĩa là A là một phần tử thuộc mô hình Herbrand nhỏ nhất) thay vì chứng

minh mọi thể hiện của (P u {-lA} không phải ỉà một mô hình theo lý thuyết về mô

hình đã đề cập

Trang 19

Áp dụng mô hình Herbrand nhỏ nhất để tìm lời giải cho bài toán “xác định tính không thỏa được cùa p KJ {G} (P là một chương trình logic và G là một đích)”, chúng ta có một cách tiếp cận cho lời giải Đó ỉà tìm ra mô hình Herbrand nhỏ nhất

Mp cùa p và xét xem G có thuộc Mp hay không. Nếu G Ể Mp thì p u {G} không thỏa được và do đó -iG là hệ quả logic cùa p Nếu G e M|>thì p u {G} thỏa được

và do đó G là hệ quả logic của p

2.2.3 Xây dựng mô hình Herbrand nhỏ nhát

Có thể xem một chương trình hữu hạn là tập các sự kiện (fact) và các luật (rule) Tiếp cận theo điểm bất động nhò nhất ta có thể xây dựng mô hình Herbrand nhỏ nhất (một cách trực giác) như sau:

+ Tất cả các kết thế nền (ground instance) của các sự kiện phải thuộc mô hình Herbrand Vì nếu một thể hiện Herbranđ 1 không chứa kết thế nền của một sự kiện A thì A không đúng trong I và như vậy ĩ không là một mô hình

+ Xét luật A0<r- Ai, An (n > 0) lấy bất kỳ kết thể nền nào (A0<- Aj, An)9 cùa luật Nếu I chứa A|0, .A n0 thì nó phải chứa Ao0 để I là còn một mô hình

+ Xét luật: p(f(x)) <- q(x, g(x))

-Dùng phép thế biến: 0 = {x/a}, ía cỏ: q(a, g(a)) Ể Mp nên p(f(a)) Ể Mp -Dùng phép thế biến: 9 = {x/b}, ta có: q(b, g(b)) e Mị» nên p(f(b)) e Mp.Như vậy, mô hình Herbrand nhỏ nhất cho chương trình trên là: Mp = {q(a, g(b)), q(b,(g(b)), p(f(b))} Ở đây, nếu ta bò đi bất kỳ phần tử nào trong Mpthì nó không còn là mô hình cho chương trình p nữa

Trang 20

Như đã đề cập, bài toán quan trọne nhất tron a lập trình logic là xác định tính không thỏa được cùa p u {G} (P là một chươne trinh logic và G là một đích) Với

mô hình Herbrand nhỏ nhất, chúng ta đã có một cách tiếp cận cho lời giải bài toán

Đó là cách tiếp cận chù yếu dựa trên các sự kiện nền, các luật trong p và các phép thế biến

Điểm bất động là một cách tiếp cận khác để tìm lời giải cho bài toán trên, mục tiêu vẫn là tìm ra mô hình Herbrand nhỏ nhất nhưng cách tiếp cận này lại tập trung vào các mô hình và điểm bất động nhò nhất của ánh xạ liên kết với chương trình p

Trong phần này, chúng ta sẽ đề cập chủ yếu đến điểm bất động nhỏ nhất bởi

có thể tìm ra lời giải cho bài toán “xác định tính không thỏa được của p u {G }” (G

là một đích) thông qua điểm bất động nhò nhất

Trước hếl ta hãy xem xét các định nghĩa liên quan đến điểm bất động (íìxpoint)

Định nghĩa: (Cận trên và cận dưới của tập hợp [l])

Cho S là một tập với thứ tự bộ phận < Khi đó, a e s là một cận trên của tập con X ç s nếu X < a với Vx e X Tương tự b e s là một cận dưới của X nếu b <x với Vx € X.

+ a là cận trên của X và

+ V cận trên a’ e X, ta luôn có a < a’

b là cận dưới lớn nhất của X nếu:

Trang 21

Sau đây là định nghĩa điểm bất động

Định nghĩa: (Điếm bất độne [1])

Cho L là một dàn đầy đủ và một ánh xạ: 77 L —> L Ta nói a € L là một điêm bât động của T nếu T(a) = a

Đối với điểm bất động, ta đặc biệt quan tâm đến điểm bất động nhỏ nhất và điểm bất động lớn nhất

Định nghĩa: (Điểm bất động nhỏ nhất, điểm bất động lớn nhất [1])

Cho L lò một dàn đầy đủ và ảnh xạ T: L —> L Khi đó a e L được gọi là điếm bất động nhỏ nhắt cùa T nếu với mọi điếm bất động b của T, a < b Ký hiệu điểm bất động nhỏ nhất cùa T là lfp(T).

Tương tự, a e L được gọi là điếm bắt động lớn nhất cùa T nếu với mọi điểm bắt động b của T, a >b.

Định nghĩa: (Ánh xạ đơn điệu [1])

Cho L là một dàn đầv đủ và T: L —> L là một ảnh xạ T là ánh xạ đơn điệu nếu:

với Vx, y € L, nếu X < V thì T(x) < T(y)

T(lub(X)) = lub(T(X)) với v x ç L và Xcó hướng.

Với một dàn đầy đủ L và một ánh xạ đơn điệu T: L -> L Khi đó, T luôn có điểm bất động nhỏ nhất và điểm bất động lớn nhất [1]

Lý thuyết về điểm bất động cùa một ánh xạ trong mổi liên hệ với chương trình logic p có ý nghĩa quan trọng Đó là đoi với một chicơng trình logic p tập tất

cả các thể hiện Herbrand của p làm thành một dàn đầy đủ và tồn tại một ánh xạ liên tục liên kết với p xác định trên dàn đầy đù đó Ị1 ]

Trang 22

Cho p là một chương trình Khi đó, 2Bp là tập tất cả các thể hiện Herbrand

của p là một dàn đầy đù với thứ tự bộ phận Ç cùa tập hợp (và phần tử ngọn T = Bp,

Ánh xạ Tp cho liên kết giữa ngữ nghĩa khai báo và ngữ nghĩa thù tục của p

Tp là liên tụcđơn điệu. Do đó, luôn tồn tại điểm bất động nhỏ nhất của

Tp.

Định lý: Đặc trưng điểm bất động của mô hình Her brand nhỏ nhất [ 1 ]

Cho p là một chương trình Khi đỏ: Mì> = ỉfp(Tp)

Nghĩa là, mô hỉnh Herbrand nhỏ nhất của một chương trình p là một điểm bất động cùa ánh xạ Tp trên tập các thể hiện Herbrand của nó

Việc chứng minh định lý được trình bày trong ([1] - trang 35)

Ý nghĩa của điểm bất động là cho một chương trình p, người ta áp dụng các câu trong p vào ánh xạ Tị» để sinh ra các mô hình Herbrand mới Quá trình này được lặp lại cho đến khi đạt đến điểm bất động (nghĩa là tại điểm mà ánh xạ Tp cũng không biến đổi được nó nữa) thì dừng và mô hình đạt được tại điểm bất động đó là

mô hình Herbrand nhò nhất

Như vậy, với một chương trình logic p và một câu A Bài toán đặt ra vẫn là xác định xem A có là hệ quả logic của p hay không? Nểu dùng mô hình Herbrand

nhỏ nhất, ta cần chứng minh A G Mp hay p u { —lA} không có mô hình Herbrand.

Nếu sử dụng ngữ nghĩa điểm bất động để tìm lời giải cho bài toán trên ta có thể áp dụng các câu trong p vào ánh xạ Tp để tìm ra tập các điểm bất động nhỏ nhất

Trang 23

cùa ánh xạ Tp (đó là tập các sự kiện được suy diễn từ P) Lời giải của bài toán sẽ thuộc tập các điểm bất động đó Và đâv là cách tiếp cận bottom - up.

2.4 Thuật giải SLD

Như đã biết, bài toán quan trọng trone lập trinh logic là cho một chương trình logic p, một đích G, vấn đề đặt ra là xác định tính không thỏa được của p u {G } Mô hình Herbrand nhỏ nhẩt và điểm bất động nhỏ nhất là cách tiếp cận lời giải cho bài toán (về mặt xây dựng lý thuyết) theo hướng bottom - up, chủ yếu dựa trên các mô hình

Trong thực hành xây dựng thù tục suy diễn tìm lời giải cho bài toán trên, người ta sử dụng một cách tiếp cận khác đó là sử dụng thuật giải SLD Thuật giải SLD là giải pháp đế tìm ra câu trả lời đúng đắn cho P u {G} Đây là cách tiếp cận theo hướng top - down, chù yếu dựa trên các câu đích và các biến

2.4.1 Nội dung thuật giải

Thuật giải SLD được Kowalski tinh chế từ luật suy diễn trong chứng minh định lý tự động của Robinson SLD là viết tắt của Linear resolution with Selection function for Definite clause (thuật giải tuyến tính với hàm chọn cho các câu hữu hạn)

Phát biểu của thuật giăi như sau:

V ~ ( A | A A Aj.| A A i A Aj+1 A A A m) V(Bo < - B| A A B n)

V ~ ( A | A A Aj_| A B] A A B n A Aị+I A A Am)0Hoặc (dùng ký hiệu cùa lập trình logic):

< - ( A ] A A A j.| A B i A A B n A A j+ I A A A j e

Bo ■<— B| A A B n (n > 0) là một câu chương trình trong chương trình

Trang 24

Input: <- Al, Am (m > 0) chưcmg trình logic p

Output: <- A|, Am là hệ quà loeic của p hay không?

+ Bước 1: Đặt Go là câu đích dạng: <- A|, Am (m > 0)

+ Bước 2: Ta xây dựng đích mới Gị từ Go như sau:

- Từ Go, một đích con được chọn là Ai,

- Xét các câu chương trình có phần đầu hợp nhất được với Aj giả sử là

Bo <r- B|, Bn (n > 0) với mgu(Aị, B0) = 0|

- G| có dạng: <r- (Ab Aj_l, B ị , Bn, Ai+| , A m)0,

(Các biển của G| sẽ được đổi tên sao cho khác với chúng trong G0.)

+ Bước 3: Thuật toán lặp lại bước 2 xây dựng Gị+I từ Gị

+ Bước 4: Thuật toán dừng khi xảy ra 1 trong 2 trường hợp sau: (khi xây dựng Gj+| từ Gi)

- Đích con Aj không hợp nhất được với bất kỳ đầu của một câu chương trình nào Đây là trường hợp không kết thúc

- Khi Gj = □ (câu rỗng) Go ỉà hệ quà logic cùa p

Trong quá trình suy diễn, tại mỗi bước, có thể có một số đích con hợp nhất được với đầu cùa một càu chương trình nào đó Việc chọn lựa đích con nào xem như có hàm chọn hướng dẫn (selection function) và được gọi là hàm chọn (computation rule) hay luật tính toán

Để ghi lại quá trình suy diễn tại mỗi bước, ta dùng các cặp (Gị, C j) i > 0 Ở đây, Gi, Cj tương ứng là đích và câu chương trình tại bước suy diễn i + 1 Như vậy, hàm chọn R cùng với Gj, Cj xác định mgu ký hiệu là Gj+I tại bước suy điễn i + 1 Gi+I được gọi là suy diền từ Gi và Ci với hàm chọn R

Ví dụ: Chương trình p như sau:

student(X) study_at(X, Y), university(Y).

student(X) <- study_at(X, Y), institute(Y).

student(X) <- study_at(X, Y), college(Y).

study_at{nam, dh_y_khoa).

university(dh_y khoa).

Ta đưa vào một câu đích G = <- student(Z) Áp dụng thuật giải SLD ta có:

Go : <- student(Z)

Trang 25

Hợp nhất student(Z) với student(Xo) mau 0| = {X0 / Z} Giả sử hàm chọn ởđây là luôn chọn đích con bên trái nhất.

G i : <- study_at(Z, Y 0), university(Yo).

c 2 : study_at(nam, dh_y khoa).

Hợp nhất study_at(Z, Y0) với study_at(nam dh y khoa) mgu 02 = ịZ / nam,

Như vậy phép thế của quá trình suy diễn là:

0|0203= {Xo/ Z } { Z / nam, Yo/ dh_y_khoa} = {Xo/ nam, Yo/ dh_y_khoa} Minh họa bằne sơ đồ như sau:

Định nghĩa: (Dần xuất SLD (SLD-derivation) [3])

Gọi p là một chương trình, Go là một đích Mộí dan xuất SLD (SLD- derivation) của p u ịG} bao gồm một dãy (hữu hạn hoặc vô hạn) G = Go, G Ị,

Gn, các đích, mội dãv C/, C 2 , c„, .các câu chương trình (đã thay đoi biến trong đó) trong p và một dây 01, 02, 9„, các mgu sao cho Gị+I được suy dẫn từ

Gi dùng dị, /

Mồi Cj được thay thế các biến sao cho khác các biến đã có trong Cị Điều này được thức hiện bằng cách đánh chỉ sổ dưới cho các biến bẩt từ 0 trong G0 Quá trình đổi tên biến được gọi là quá trình chuẩn hóa từng bộ phận biển Và đây được xem là một quá trình cần thiết bời chúng ta sẽ không thể hợp nhất p(x) với p(f(x))

Trang 26

trong <— p(x) và p(f(x))<- nếu khôn» đồi tên biến Mỗi câu chương trình đã đổi biến

Một dẫn xuất SLD có thể kết thúc hoặc không kết thúc Trường hợp kết thúc

có thể thành công hoặc thất bại Một dẫn xuất SLD là thành công nếu nó được kết thúc bởi một câu rồng Một dẫn xuất SLD là thất bại nếu nó được kết thúc bởi một câu không rỗng (nguyên tố được chọn trong một đích không hợp nhất được với đầu của một câu bất kỳ nào trong chương trình)

Ví dụ: Trong ví dụ trên, cỏ ba dẫn xuất của P u Ị G Ị

Dần xuất thứ nhất gồm các dãy sau:

Go, G,, G2, G3 = <-student(Z), <-study_at(Z, Y0), university(Yo),

<-university(dh_y_khoa), □.

Ci, c 2, c 3 = student(Xo) <- study_at(X0, Y0), university(Yo), study at(nam, dh_y_khoa), universitỹ(dh_y_khoa).

01, &2, tì3 = x 0 / z, z / nam, Y0 / dh_y_khoa.

Dần xuất SLD cùa P u {G} với các dãy được liệt kê írên là kết thúc thànhcông

Dần xuất thứ hai gồm các dãy sau:

Go, G), G2 = * - student(Z), <- study_at(Z, Y0), institute(Yo), institute (dh_y_khoa).

Ci, c 2 = student(Xo) <- study_at(X0, Yo), institute (Y0), study_at(nam, dh_y_khoa).

Gi, 02 = x 0 / z, z / nam, Y0 / dh_y_khoa.

Dần xuất thứ hai kết thúc không thất bại

Dần xuất thứ ba gồm các dãy sau:

Go, Gi, G2 = <- student(Z), <- study_at(Z, Y0), institute(Yo), <- college(dh_y_khoa).

C i, c 2 = student(Xo) * - study_at(Xo, Y 0), college(Yo) study_at(nam , dh_y_khoa).

Trang 27

Gọi p là một chuơnẹ trình hừu hạn Một tập thành công của p là tập tất cả

A e Bp sao cho p u { <-A} có một SLD-refutation.

Tập thành công là một bản sao thù tục cùa mô hình Herbrand nhỏ nhất Thực

tế tập thành công tương đương với mô hình Herbrand nhò nhất, điều này đã được chứng minh trong [3]

Định nghĩa: (Câu trả lời được tính toán (computed answer) [3])

Gọi p là một chương trình hữu hạn, G là một đích hữu hạn Một câu trả lời được tính toán 0 của p u ịG} là một phép thể đối với các biến của G lấy từ dãy

0, d2 0n Ở đây, 6/, ỠỊ, 9n là dãy các mgu trong SLD-refutation của p u ịG }.

Như vậy, 0 = 9|02 0 n nếu n > 0; 0 = £ (rồng) nếu n = 0

Ví dụ: Trong ví dụ trên thì câu trả lời được tính toán ỉà {X0 / nam, Y0 / dh_jy_khoa}

2.4.2 Tính đúng đắn của thuật giải

Định lý: (Tính đúng đắn của thuật giải SLD (soundness of SLD-resolution)[3])

Gọi p là một chương trình hữu hạn, G là một đích hữu hạn Mọi câu trả lời được tính toán của p u {G} đều là câu trà lời đủng (correct answer) của p u {G}.

Hệ quả: Gọi p là một chương trình hunt hạn, G là một đích hữu hạn Neu tồn tại SLD-refutation cho p u ỊG} thì p u {G} là không thỏa được.

Chứng minh định lý và hệ quả trong [3]

2.4.3 Tính đầy đủ của thuật giải

Định lý: (Tính đầy đủ cùa thuật giải SLD [3])

Gọi p là một chương trình hữu hạn, G là một đích hữu hạn Đối với mọi câu trả lời đúng đan ỡ, luôn (ồn tại một câu trả lời được tính toán ỏ và phép thế Y sao cho 6 = ổỵ.

Chứng minh định lý trong [3]

Định lý trên chi ra rằne: dù tất cả các câu trà lời đúng không được tìm ra bằng thuật giải SLD, thì mồi câu trả lời đúng là một thể hiện của một câu trả lời được tính toán nào đó Điều này trên thực tế nghĩa là các hợp nhất tử tổng quát nhất

- (không phải bất kỳ hợp nhất từ nào) được tính toán trong dẫn xuất Tuy nhiên, câu

Trang 28

trả lời đúng cụ thể là một thể hiện đặc biệt của một câu trả lời được tính toán nào đó

vì luc3n có thể đạt được tất cả các hợp nhất tử bàng cách cụ thể hóa họp nhất tử tổng quát nhất

Tính chất đầy đủ cùa thuật giải xác nhận sự tồn tại của thủ tục phàn bác - đó

là thủ tục sản sinh ra câu trả lời tổna quát hơn bất kỳ câu trà lời đúng đắn nào Tuy nhiên, làm thế nào để tìm ra thù tục phàn bác đó vần là một bài toán mở

+ Moi nút cùa cây lờ một đích hữu hạn (có thê là rong)

+ Gọi <- A/ An„ Ak (k > 0) ỉà một nút trong cây và giả sử Am là một nguyên tố được chọn, thì với mỗi câu vào A <— B ị Bq sao cho Am và A hợp nhất được với mgu 9, ta có một nút con của <- A I, A/n, À/i là 4—A ị , Am.f, B ị ,

Bq, Am+I, Aị.

+ Các nút cỏ đích ron% không có con.

Mồi nhánh của cây là một dẫn xuất của P u {G} Các nhánh ứng với dẫn xuất thành công gọi là nhánh thành công, các nhánh ứng với dẫn xuất vô hạn gọi là nhảnh vô hạn, nhánh ứng với dẫn xuất thất bại gọi là nhánh thất bại

Định lý: Gọi p là một chương trình hữu hạn, G là một đích hữu hạn và R là một hàm chọn Giả sử p u {G} không thỏa mãn, khi đó cây SLD của p u ỊG} với hàm chọn R có ít nhất một nhánh thành công.

Nếu P u {G} không thỏa mãn, dù áp dụng hàm chọn nào, cây SLD tương ứng luôn luôn chửa một nhánh thành cône Tuy nhiên, vấn đề đặt ra là: một hệ lập trình logic với chiến lược tìm kiếm trước tiên theo chiều sâu (depth - first - search) đùng một trật tự nhất định các câu và hàm chọn bất kỳ, có đàm bảo luôn tìm ra nhánh thành công không? Và câu trá lời không may là không Bởi iẽ, với tìm kiếm trước tiên theo chiều sâu, khi nhánh bên trái nhất của cây SLD là vô hạn thì chiến lược tìm kiếm này sẽ sa vào nhánh vô hạn đó mà không thoát ra được

Trang 29

Như vậy, thứ tự các câu trong chương trinh là rất quan trọng Chúng ta mong

muốn thiết lập một trật tự bình đảng giữa các câu sao cho mồi nhánh thành công cùa

cây SLD dù thế nào cũng được tim ra Có thể sừ dụng tìm kiếm rộng đầu tiên để

phần nào đảm bảo thứ tự bình đẳng giữa các câu Tuy nhiên, hiệu quà cài đặt chiến

lược này là thấp Hiện nay, các hệ lập trình logic Prolog chuẩn luôn dùng tìm kiếm

trước tiên theo chiều sâu và các câu viết trước luôn được thử trước

p(Xi Yi) q(Yi Zi) p(Yo íữì q (Y ,.x ,) p(Yo £ o ) P (D ^ 0 ) Ọ{Q i^ ì Falun

q(X2 Y ’ 1 n íY 7 A n<Y, 7A n(Y0 , z3)

V ỗ hạn

Ta xây dựng cây SLD cho P u Ị G } như sau:

Với cây SLD vừa nhận được, ta thấy:

+ Nhánh bên trái nhất là nhánh vô hạn,

+ Nhánh thành công là: p(a, c) -» q(a? Yộ), p(Y0, c) -> p(b, c) -» □

Trang 30

Hay diễn aiải theo SLD - refutation là: p(a c) -> q(X0, Yo), p(Y0? Zo) -> p(b, Zo) —> □ với các luật tương ứng được áp dụne là ( 1 ), (6), (5) và các phép thể biến lẩn lượt là: 01 = {Xo / a, z 0/ c}, 02 = {Xo / a Y0/ b}, 03 = {Zo/ c} Cuối cùng phép thế là 0 = 0102Ỡ3 - {Xo / a, Vo / b, Z(|/ c}.

Như vậy, nếu áp dùng chiến lược tìm kiếm trước tiên theo chiều sâu, ta không thể tìm được nhánh thành công Bởi lẽ, xuất phát từ câu đích p(a, c) theo trật

tự các luật trong chương trình, chiến lược này sẽ thừ luật (1) được câu đích mới(nếu các luật bình đảng về trật tự thì có thể áp dụng được các luật (1), (3), (5)).Trong câu đích mới nhận được, nguyên tố q(U V) đứng bên trái nhất, do vậy, bước thử tiếp theo là áp dụng luật (2) được câu đích mới (nếu các luật bình đẳng có thề áp dụng được các luật (2), (4), (6), (7)) Trong câu đích vừa nhận được, nguyên tố p(U, V) đứng bên trái nhất, do vậy, bước thừ tiếp theo là luật (1) cứ như vậy, các luật (1) và (2) luân phiên được thừ còn các luật khác không bao giờ được áp dụng Và thuật toán sa vào nhánh vô hạn

Nếu trật tự các câu trong p được sắp xếp khác trật tự trên (Có thể sắp xếp các câu theo trật tự: (1) (6) (5) (2) (3) (4) (7)) thì tìm kiếm trước tiên theo chiều sâu

sẽ tìm ra nhánh thành công (câu trả lời)

2.5 Lập trình logic và các lĩnh vực liên quan

Liên quan đến lập trình logic có rất nhiều lĩnh vực thuộc ngành khoa học máy tính như trí tuệ nhân tạo hệ chứng minh định iý tự động, hệ chuyên gia hệ hồ trợ quyết định, hệ cơ sở dữ liệu suy diễn, xử ỉv ngôn ngừ tự nhiên, Phần này sẽ trình bày hai lĩnh vực có quan hệ gần gũi nhất với lập trinh logic đó là hệ chuyên gia và hệ cơ sở dữ liệu suy diễn

2.5.1 Hệ chuyên gia (Expert System - ES)

Hệ chuyên gia ra đời trên ý tường của các nhà khoa học muốn xây dựng một

hệ thống giải quyết vấn đề dựa vào tri thức (knowledge - based system) Tri thức ở đây là tri thức của các chuyên gia, đó là tri thức chuyên môn và kinh nghiệm thực hành về một lĩnh vực nào đó (trong hệ chuyên gia được gọi là miền tri thức - knowledge domain) Một chuyên gia sỗ lưu trữ tri thức chuyên gia trong bộ nhớ dài hạn (Long Term Memory - LTM)

Cách thức giải quyết vấn đề của hệ chuyên gia được mô hình hóa từ cách thức giải quyết vấn đề của chuyên gia con người Đẻ đưa ra một lời khuyên về một

Trang 31

trừ chúng trong bộ nhớ ngắn hạn (Short Term Memorv - STM) của anh ta Sau đó, anh ta suy diễn để tìm ra kết luận bàng cách kết hợp các sự kiện trong STM và tri thức trong LTM của mình Thực hiện quá trình trên, chuyên gia tìm ra kểt luận cho vấn đề cần giải quyết

Hệ chuyên gia là mộ! chương trình máy tính được thiết kế để mô hình hỏa khù năng giải quyết vẩn đề của một chuyên gia con người.

Hệ chuyên gia sồm các đặc tính sau đây:

+ Bao gồm hai phần: mô tơ suy diễn và cơ sở tri thức Cơ sở tri thức chứa các luật (sự kiện, luật, khái niệm, mối quan hệ) mô tà tổng quát về các tri thức thuộc miền bài toán Mô tơ suy diễn dùng để suy diễn tri thức mới từ cơ sở tri thức Mô tơ suy diễn là độc lập ứng dụng với cơ sở tri thức theo nghĩa nó có thể dễ dàng thích nghi với một cơ sở tri thức mới mà không cần phải thay đổi nhiều

+ Chấp nhận những yếu tố chưa xác định, xác suất, mâu thuần (có thể chứa nhừng luật không chắc chắn)

+ Hệ thống thường chạy trên các trạm làm việc hiện đại, cỏ giao diện tương tác và hội thoại với người dùng

+ Hệ thống không chi có khả năng suy diễn tri thức mới mà còn có thể giải thích (bằng cách nào / tại sao) về các kết luận suy diễn được

+ Có thể có chức năng học Khi suy diễn được tri thức mới, ES có thể cập nhật, lưu chúng vào cơ sở tri thức

Tiếp cận theo quan điểm cùa Kowalski cho ràng “thuật (oán - logic + điểu khiến{Algorithm - Logic + Control) chúng ta có:

ES = cơ sở tri thức (knowledge - base) + điều khiển (control) +

giao diện người dùng (user interface)

Cơ sở tri thức của ES là tập hữu hạn các luật tồng quát (các câu tổng quát)

Mô tơ suy diễn gồm: chiến lược suy diễn (suy diễn tiến , suy diễn lùi hay kết hợp cả hai), bộ phận điều khiển (giải quyết xung đột, điểm dừng, .), chiến lược tìm kiếm (sâu hay rộng)

Suy diễn tiến (forward chaining) là bắt đầu từ những cái đã biết và suy diễn

ra tri thức mới bằng cách sử dụng các luật mà phần giả thiết của nó phù hợp với các

sự kiện đã biết Quá trình tiếp tục cho đến khi đạt được đích cần suy diễn hoặc

Trang 32

không còn luật nào mà già thiết cùa nó phù hợp với các sự kiện đã biết hoặc sự kiện

đà suy diễn được trước đó

Suv diễn lùi (backward chaining) là bắt đầu từ kết luận (đích) cần chứng

minh, và suy diễn tiếp cho đến khi đạt được kết luận mới phụ thuộc vào những cái

đã biết

Có thể thấv trong lập trình logic, thuật eiải SLD là một thủ tục chứng minh

áp dụng chiến lược suv diễn lùi Hầu hết các hệ lập trình logic hiện nay là các hệ

chứng minh định lý theo thuật giải Tuy nhiên, một hệ lập trình logic không nhất

thiết phải dựa trên các thuật giải, nó có thể là mộl hệ không có mệnh đề (câu)

ES và hệ lập trình logic có các điểm tương đồng sau đây:

+ Kiến trúc tổng thể cùa một hệ lập trình logic và ES là tương đương nhau

đều bao gồm các thành phần: cơ sở tri thức + thù tục suy diễn độc lập ứng dụng +

bộ phận giao diện với người dùng

+ Sự tách biệt phần logic (what) và phần điều khiển (how) trong thuật toán

Đó là các cơ sở tri thức và thủ tục suy diễn độc lập ứng dụng

+ Cơ sở tri thức của ES cũng là tập hữu hạn các luật

+ Mô tơ suy diễn trong ES sử dụng chiến lược suy diễn lùi và thuật giải SLD

tronu lập trình logic cũng áp dụng chiến lược suy diễn này trong thủ tục chứng minh

của mình.

Các điểm tương đồng trên đây thể hiện mối quan hệ mật thiết giữa ES và hệ

lập trình logic Tuy nhiên, giữa chúng cũng có những khác biệt cơ bản Đó là:

+ Các luật trong cơ sở tri thức của ES thường là tri thức chuyên gia trên một

miền lĩnh vực áp dụng hẹp

+ Cơ sở tri thức của ES thường là không đầy đù Nghĩa là nó chỉ chứa các

luật "tổng quát” liên quan tới các lồi và các triệu chứng mà không chứa các thông

tin về một triệu chứng đặc biệt của bất kỳ trường hợp riêng nào Các thông tin riêng

sỗ được thêm vào khi hội thoại với người dùng để hoàn thiện cơ sờ tri thức và suy

diễn Các sự kiện trong ES có thể nhận một hoặc nhiều giá trị với mức độ tin cậy

CF (certainty factor)1, có thể có các sự kiện mờ (fuzzy factor)

1 C F thường íà một số trong phạm vi [-1, 1] với C F = -1 thé hiện sự kiện là chẳc chắn sai, C F = I thề hiện sự kiện là chác chắn đúng C F = giá trị giữa -I và 1 thế hiện mức độ tin cậy cũa sự kiện.

Trang 33

+ ES có khả năng giải thích các kết luận mình đưa ra, trong lập trình logic kỹ thuật này thông thường không được trang bị.

Lập trinh logic và ES đều có nguồn sốc từ các nghiên cứu thuộc lĩnh vực trí tuệ nhân tạo, và ngày nay đã khẳns định được vị trí độc lập của mình Cả hai đã được ứng dụng rộng rãi trong nhiều lĩnh vực của đời sống và khoa học Tuy nhiên, không phải mọi bài toán có khả năng tin học hóa đều có thể giải quyết được trong lập trình logic và ES

ES đã được ứng dụng rộng trong các lĩnh vực: thương mại, sản xuất, y học, quốc phòng, kỹ nghệ, máy tính, vũ trụ, giao thông, nông nghiệp, giáo dục, môi trường, điện tử1, .Có nhiều bài toán mà ES có thể áp dụng tốt như các bài toán về: chẩn đoán, thiết kế, mô phỏng, chi dẫn, điều khiển, dự báo, lựa chọn, ra quyết định Hàng năm, trên thế giới số lượne các ES không ngừng gia tăng2 Tuy nhiên,

ES sẽ không thích hợp với những bài toán mới lạ chưa được giải quyết bằng tri thức chuyên gia con người

2.5.2 Cơ sở dữ liệu (CSDL) suy diễn (deductive database)

Song song vớỉ sự phát triển của các hệ quản trị CSDL là sự phát triển của các

ES để hỗ trợ cho quá trình ra quyết định trong phạm vi (bài toán) hẹp và ngữ cảnh xác định Tính năng chính cùa ES là khả năng suy diễn hỗ trợ quá trình ra quyết định nhưng ES thường là không quản lý được một khối lượng dữ liệu lớn CSDL suy diễn ra đời là một cố gắng để vượt qua aiới hạn của các CSDL truyền thống nhờ các tính năng khác biệt có nguồn gốc từ ES CSDL suy diễn có thế được xem là sự tích hợp cùa dữ liệu (trong hệ quàn trị CSDL truyền thonẹ) & tri thức (trong ES).

Một câu CSDL là một công thức cấp một có dạng:

A 4— L ị a L, a Ln (n Ĩĩ 0)

Trong đó A là một nguyên tố; Lj là các literal Mọi biến trong A và trong L|

A L2 a Lnđều được giả định là có lượng từ phổ dụng A được gọi là phần đầu (head); w là phần thân (body)

1 Các khảo sát năm 1986 cho thấy số lượng các ES áp dụng trong thương mại là hơn 300, sản xuất

ià 350, y học !à 300, kỹ nghệ là 150, giao thông là 110, [2]

2 Năm 1985 số lượng các ES là 50; năm 1988 số lượng các ES là 2.200; năm 1992 số lượng các ES

là 12.500 [2]

Trang 34

Cơ sở dữ liệu (CSDL) suy diễn là tập hữu hạn các câu CSDL Một truy vấn (query) là m ột công thức cấp mội có dạng: <— w.

Tập các câu cùa CSDL suy diễn gồm 3 phần đó là: tập các sự kiện (facts), tập các ỉuật suy diễn (deductive rules), tập các ràng buộc toàn vẹn (integrity constraints) Sự kiện là thông tin đúng trone CSDL; luật cho phép suy diễn các sự kiện mới từ các sự kiện lưu trone CSDL; ràng buộc toàn vẹn là các điều kiện mà CSDL phải thỏa mãn

Sự kiện được biểu diễn bằng một câu với phần thân là rỗng CSDL suy diễn chi chứa các sự kiện nền (ground facts)

Ràng buộc toàn vẹn được biểu diễn bởi câu với phần đầu là rồng Vì các câu trong CSDL không thể khuyết thiếu phần đầu nên các câu ràng buộc toàn vẹn có phần đầu là vị từ ICn, vị từ ICn chỉ là tên của ràng buộc, (ví dụ: ICi(x) <— father(x,

x ) - ngữ nghĩa ràng buộc: với mọi X, X khône thể là cha cùa chính mình).

Trong CSDL suy diễn, có 2 cách tiếp cận đề tìm ra các câu trả lời cho một truy vấn Q: suy diễn tiến (forward chaining) và suy diễn lùi (backward chaining)

Suy diễn tiến là từ tập các câu của CSDL đã cho, suy diễn được bắt đầu với các sự kiện nền, áp dụng các luật để sinh ra các sự kiện cho đến khi không thể sinh

ra được sự kiện nào nữa thì dừng Và nếu cỏ các câu trả lời cho truy vấn thì đó là các sự kiện nền trong tập các câu hoặc là các sự kiện dược suy diễn ra

Suy diễn lùi là suy diễn bất đầu từ truy vấn Q, áp dụng các luật để sinh ra các câu mới Quá trình suv diễn dừng khi câu sinh ra là các sự kiện nền hoặc ià không còn luật để áp dụng Trường hợp dừng thứ nhất, Q có câu trả lời; ở trường hợp thứ hai, Ọ không có câu trả iời

Lập trình logic và CSDL suy diễn có quan hệ gần gũi thông qua ES, giữa chúng có các điểm giống nhau cơ bản sau:

+ Chươna trình logic và CSDL suy diễn đều là tập hữu hạn các luật (các câu) Câu chương trình và câu CSDL có dạng giống nhau

+ Một câu đích G cần được chứng minh trong một chương trình logic p tương đương với một truy vấn Q đối với một CSDL suy diễn

+ Thuật giải SLD trong lập trình logic tương đương với chiến lược suy diễn lùi trona CSDL suy diễn

Trang 35

Tuy vậy, lập trình loeic và CSDL suy diễn cũng có nhừng đặc điểm khác biệt Với một CSDL mục đích chính là cuna cấp các mô hình để lưu trừ và xử lý đữ liệu hiệu quả với khối lượng dừ liệu đủ lớn CSDL suy diễn trước hết là một CSDL nên không có mục đích ngoài phạm vi đó còn một chương trình logic là để giải quyết bài toán đặt ra.

Trang 36

Chương 3 Ngôn ngữ Prolog

Prolog là viết tất cùa PROgramming in LOGic Đây ià một ngôn ngừ bậc cao, ra đời từ các nghiên cứu về chứng minh định lý tự động và hệ chuyên gia trong những năm 60 - 70 của thế kỷ 20

Prolog ra đời đầu tiên nhằm phục vụ cho việc xử lý ngôn ngữ tự nhiên Đen nay, Prolog đã được phát triển và ứng dụng trona các lĩnh vực khác như trí tuệ nhân tạo, hệ chuyên gia, lập trình logic

Prolog là ngôn nsữ hỗ trợ tốt cho lập trinh loaic và lập trình khai báo Một chương trình Prolog chính là một chương trình logic được biểu diễn bởi tập íừ vựng của Prolog Các câu trả lời Prolog đưa ra cho một câu hòi không chỉ đơn thuần ở dạng “yes/no" mà có thể có các câu trả lời tính toán

Thủ tục suy diễn cài đặt trong Prolog chính là thuật giải SLD Đẻ tìm câu trả lời cho câu hỏi dựa trên các luật và sự kiện trong chương trình p, Prolog thực hiện xây dựng cây tìm kiểm và duyệt cây đó theo chiều sâu Các yếu tố cùa lời giải được Prolog đưa ra bàng cách lần ngược trong cây tim kiếm từ lá về gốc Prolog sẽ tìm kiếm tất cả các lời giải có thể của câu hỏi

Thứ tự của các câu trong chương trình p rất quan trọng, nó quyết định cấu trúc của cây tìm kiếm và do đó quyết định hiệu năng và tính dừng cùa việc tìm tiếm lời giải Có những trường hợp mà về mặt lý thuyết là có lời giải cho câu hỏi nhưng chương Irỉnh Prolog không Ihể tìm được (theo nghĩa lặp vô hạn) bởi thứ tự các câu trong chương trình đẫn đến cây tìm kiểm có nhánh vô hạn ở vị trí bên trái nhất

Phần này sẽ trình bày cơ bàn về ngôn ngữ Prolog trong mối quan hệ với lập trình logic Một số toán tử và chương trình Prolog minh họa được trình bày trong phần phụ lục

3.1 Các khái niệm c ơ bản

3.1.1 Hạng thứ c (Term)

Trang 37

Prolog nhận biết loại của hạng thức thône qua cú pháp (đã được quy ước) của nó Sơ đồ sau đây SC minh họa các loại hạna thức và mối quan hệ giữa chúng:

• Hăng nguyên to (atom)

Hằng nguyên tố là một xâu ký tự thỏa mãn các quy ước:

+ Bao gồm các ký tự số, chữ cái, ký tự gạch nổi dưới (_) và được bắt đầu bởi một ký tự viết thường

+ Một hằng nguyên tố được bao hàm trong cặp dấu nháy đơn (*’) hoặc nháykép (“’■) Khi được bao hàm trong các cặp đấu trên hàng nguyên tố có thể bắt đầumột ký tự viết hoa, có thể chứa các khoảng trắng (space) Khi thông dịch, Prolog đối xử với cặp dấu nháy đơn cũng như cặp dấu nháy kép Tuy nhiên, vẫn có sự khác biệt giữa chúng, các dấu nháy đơn được loại bò khỏi nguyên tổ, còn các đấu nháy kép thì không

+ Có thể chứa các ký hiệu đặc biệt: # $ % & * + - / : < = > @ \ A' ~

Ví dụ:

+ a, b, c là các hằng ký tự

+ “A ỉ 23 ”, 'Ha noi là các hằng xâu kv tự

Trong trình dịch Prolog, bạn viết: ?’a ’ - a. thì bạn sẽ nhận được câu trả lời

uyes”; còn nếu viết ? "a " - a. thì bạn sẽ nhận được câu trả lời là ‘W \

Prolog hỗ trợ hai loại hàng số là số nguyên và số thực dấu phẩy động

Ví dụ: 100 là hằng số có giá trị 100

Ngày đăng: 16/03/2021, 11:27

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm