Tải bản đầy đủ (.pdf) (69 trang)

Tìm hiểu ngôn ngữ lập trình swi prolog và xây dựng ứng dụng với các thư viện quản lý cơ sở dữ liệu, thư viện web

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (880.86 KB, 69 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƢỜNG ĐẠI HỌC VINH

NGUYỄN VĂN TỒN

TÌM HIỂU NGƠN NGỮ LẬP TRÌNH SWI-PROLOG VÀ XÂY DỰNG
ỨNG DỤNG VỚI CÁC THƢ VIỆN QUẢN LÝ CƠ SỞ DỮ LIỆU,
THƢ VIỆN WEB

LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN

Vĩnh Long, Năm 2018


BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƢỜNG ĐẠI HỌC VINH

NGUYỄN VĂN TỒN

TÌM HIỂU NGƠN NGỮ LẬP TRÌNH SWI-PROLOG VÀ XÂY DỰNG
ỨNG DỤNG VỚI CÁC THƢ VIỆN QUẢN LÝ CƠ SỞ DỮ LIỆU,
THƢ VIỆN WEB

Chuyên ngành: CÔNG NGHỆ THÔNG TIN
Mã số: 08.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

Vĩnh Long, Năm 2018




LỜI CAM ĐOAN
Tơ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 giảng viên 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.
Vĩnh Long, ngày tháng năm 2018
Tác giả luận văn

Nguyễn Văn Toàn


LỜI CẢM ƠN
Luận văn được hoàn thành dưới sự hướng dẫn của giảng viên TS.
Nguyễn Ngọc Hiếu, Giám đốc trung tâm đảm bảo chất lượng trường Đại học
Vinh. Tôi xin bày tỏ lòng biết ơn sâu sắc đến giảng viên về định hướng đề tài,
chấp thuận hướng dẫn khoa học, quan tâm, tận tình hướng dẫn cho tơi từ
những ý tưởng trong đề cương, phương pháp giải quyết vấn đề đến việc tạo
điều kiện tốt nhất để tôi thực hiện luận văn này.
Tôi cũng xin gửi lời cảm ơn đến quý thầy, cô là giảng viên của viện Kỹ
thuật và Công nghệ trường Đại học Vinh, giảng viên trực tiếp giảng dạy một
số bộ mơn trong q trình học đã truyền đạt kiến thức và cung cấp những
nguồn tư liệu q báu cho tơi trong suốt q trình học tập và nghiên cứu; q
thầy cơ giáo, cán bộ phịng đào tạo Sau Đại học, các đơn vị trực thuộc trường
Đại học Vinh đã tạo điều kiện cho tôi được học tập và hồn thành khóa học
của mình.
Nhân đây tơi cũng xin dành những tình cảm và lời cảm ơn chân thành
đến Ban giám hiệu trường Đại học Sư phạm Kỹ thuật Vĩnh Long đã tạo điều
kiện thuận lợi để chúng tôi học viên sau đại của trường Đại học Vinh khóa

K24 mở tại Vĩnh Long có cơ sở vật chất học tập và hồn thành tốt luận văn.
Tơi xin bày tỏ lịng biết ơn đến người thân trong gia đình, bạn bè và đồng
nghiệp đã luôn động viên, giúp đỡ và tạo điều kiện thuận lợi để tơi hồn thành
khóa học và luận văn này.
Vĩnh Long, ngày tháng năm 2018
Học viên

Nguyễn Văn Toàn


i

MỤC LỤC
Trang
TRANG 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 và nhiệm vụ nghiên cứu................................................................. 2
3. Đối tượng và phạm vi nghiên cứu................................................................. 3
4. Nội dung nghiên cứu ..................................................................................... 3
5. Kết cấu của luận văn ..................................................................................... 3
CHƢƠNG 1.......................................................................................................... 5
TỔNG QUAN VỀ LẬP TRÌNH LOGIC .......................................................... 5
1.1. Tổng quan................................................................................................... 5

1.2. Logic Mệnh đề ........................................................................................... 6
1.3. Logic Vị từ ............................................................................................... 11
1.4. Ngơn ngữ lập trình logic Prolog (SWI-Prolog) ....................................... 15
1.5. Cơ chế tìm câu trả lời của Prolog............................................................. 22
1.6. Kỹ thuật lập trình ngắc của Prolog .......................................................... 24
1.7. Lập trình đệ quy trên Prolog .................................................................... 26
1.8. Cấu trúc dữ liệu và danh sách trên Prolog ............................................... 26
CHƢƠNG 2........................................................................................................ 29
NGÔN NGỮ LẬP TRÌNH SWI - PROLOG VỚI CÁC THƢ VIỆN
QUẢN LÝ CSDL, LẬP TRÌNH WEB ............................................................ 29
2.1. SWI-Prolog ODBC Interface ................................................................... 30
2.2. SWI-Prolog HTTP ................................................................................... 34
CHƢƠNG 3........................................................................................................ 44
XÂY DỰNG ỨNG DỤNG “XÉT TẶNG HUY HIỆU ĐẢNG THƢỜNG
NIÊN CHO ĐẢNG VIÊN TỈNH VĨNH LONG” ........................................... 44
3.1. Kết nối với CSDL đảng viên có sẵn ........................................................ 45
3.2. Xây dựng chương trình ............................................................................ 47
3.3. Kết xuất dữ liệu ........................................................................................ 51
KẾT LUẬN ........................................................................................................ 56
TÀI LIỆU THAM KHẢO ................................................................................ 57
PHỤ LỤC ........................................................................................................... 58


i

DANH MỤC CÁC THUẬT NGỮ
Chương trình logic

Logic program


Lập trình logic

Logic programming

Mệnh đề

Clause

Nguyên tố

Atom

Quy tắc hay Luật

Rule

Sự kiện

Fact

Vị từ

Predicate


ii

DANH MỤC CÁC KÝ HIỆU



Và (phép hội logic)



Hoặc (phép tuyển logic)

¬

Phủ định



Kéo theo



Tương đương



Với mọi



Tồn tại


iii

CÁC CHỮ VIẾT TẮT


KB

Knowledge base

DSN

Data source name

ODBC

Open Database Connectivity

SQL

Structured Query Language

HTTP

HyperText Transfer Protocol

HTML

HyperText Markup Language

URL

Uniform Resource Locator

CSDL


Cơ sở dữ liệu


iv

DANH MỤC CÁC HÌNH VẼ
Số hiệu hình vẽ

Tên hình vẽ

Trang

H 1.1

Chương trình SWI-Prolog

15

H 1.2.

Cây biểu diễn đối tượng dữ liệu

19

H 1.3.

Cấu trúc kiểu ngày, tháng, năm (date)

21


H.2.1.

Mơ hình kết nối ODBC

29

H.2.2.

Mơ hình Web Server

30

H2.10.

Khởi động web server

35

H2.11.

Tắt web server

35

H.2.12.

Duyệt tài liệu HTML trên SWI-Prolog

38


H.2.13.

Duyệt tài liệu HTML trên trình duyệt web

38

H.2.14.

Form nhập liệu từ người dùng

41

H.2.15.

Người dùng nhập và hiển thị kết quả

41

H.3.1.

Giao diện phát thảo

43

H.3.2.

Kết nối DSN tên MSSQL_Prolog

44


H.3.3.

Giao diện chính của chương trình

50

H.3.4.

Thêm mới đảng viên

51

H.3.5.

Xét huy hiệu đảng

51


1

MỞ ĐẦU
1. Sự cần thiết của vấn đề nghiên cứu
Ngôn ngữ lập trình Prolog là một ngơn ngữ được sử dụng phổ biến nhất
trong dịng ngơn ngữ lập trình logic, được sử dụng trong lĩnh vực trí tuệ nhân
tạo. Nguyên lý lập trình logic dựa trên các mệnh đề Horn. Một trong những
cơng cụ để lập trình trên Prolog là phần mềm SWI-Prolog, ra đời từ năm 1987
nó được sử dụng để phát triển nhiều ứng dụng trong thực tế, nó cịn được sử
dụng rộng rãi cho việc nghiên cứu và giáo dục cũng như phát triển các ứng

dụng thương mại, có rất nhiều người đã cài đặt sử dụng. SWI-Prolog được
cung cấp một giao diện nền tảng là C nên cũng giúp cho nó giao tiếp với các
ngơn ngữ lập trình cấp cao khác một cách dễ dàng như C++, Java, C#,
Python,… SWI-Prolog còn được trang bị nhiều thư viện khác như Web
Server để trả về các yêu cầu thông qua các cấu trúc HTML, CSS, JavaScript
cho người dùng cuối. SWI-Prolog được sử dụng viết cho các ứng dụng thực tế
có sự thay đổi về trạng thái, các sự việc thay đổi, các trị chơi mạo hiểm, nó
khá mạnh mẽ trong việc tạo ra cơ sở tri thức và xử lý tri thức.
Trong những năm qua Đảng và Nhà nước đã ban hành nhiều Nghị
quyết, Thông tư, Hướng dẫn về ứng dụng công nghệ thông tin trong công tác
quản lý, điều hành bộ máy hoạt động các cơ quan Đảng, Nhà nước; phát triển
kinh tế văn hóa xã hội, giáo dục, quốc phòng và an ninh,… Thực hiện các chủ
trương trên Vĩnh Long cũng từng bước xây dựng và thực hiện các dự án đáp
ứng yêu cầu, đạt nhiều kết quả trong nhiều lĩnh vực như nông nghiệp, giáo
dục, y tế, giao thơng, thủ tục hành chính xử lý, tra cứu thông tin cho người
dân, doanh nghiệp đáp ứng kịp thời.
Tại đơn vị đã và đang ứng dụng công nghệ thông tin giúp cán bộ, công
chức đơn vị tham mưu cho lãnh đạo thực hiện lãnh đạo, điều hành tỉnh đạt kết
quả tốt; xây dựng các phần mềm, CSDL đảm bảo cho các hoạt động. Tuy


2

nhiên việc ứng dụng công nghệ thông tin bước đầu đáp ứng cơng việc xử lý
cơng tác hành chính cần phải có các phần mềm tự động tổng hợp thơng tin xử
lý số liệu, dự báo tình hình,... Một trong những ngơn ngữ lập trình logic có thể
đáp ứng được các u cầu nêu đây đó là ngơn ngữ lập trình Prolog.
Trong cơng tác xét tặng huy hiệu đảng cho đảng viên được các đơn vị
trực thuộc xét và gửi về tỉnh để phê duyệt trên cơ sở sử dụng phần mềm
“Quản lý CSDL đảng viên”. Thực tế chương trình đảm bảo, tuy nhiên để từng

đảng viên muốn xem mình có được xét tặng khơng, khi nào được xét và huy
hiệu bao nhiêu năm thì phần mềm chưa đáp ứng.
Từ nhu cầu thực tế, cần trang bị những kiến thức để quản lý các phần
mềm chuẩn bị xây dựng trong thời gian tới có áp dụng các phương pháp suy
luận, lập trình logic, tạo ra các cơ sở tri thức từ những dữ liệu có sẵn,... trong
đó có việc “xét tặng huy hiệu đảng cho đảng viên tại tỉnh”.
Nhằm đáp ứng các yêu cầu trên, em xin chọn đề tài: “Tìm hiểu ngơn
ngữ lập trình SWI-Prolog và xây dựng ứng dụng với các thƣ viện quản lý
cơ sở dữ liệu, thƣ viện web” đề tài được xây dựng giúp bộ phận chuyên môn
tham mưu cho lãnh đạo quyết định xây dựng các phần mềm có ích trong cơng
tác quản lý điều hành tại tỉnh, xét tặng huy hiệu đảng cho đảng viên trên cơ sở
tri thức đảng viên đạt hiệu quả trong thời gian tới.
2. Mục tiêu và nhiệm vụ nghiên cứu
2.1. Mục tiêu
Nghiên cứu các thành phần, nguyên tắc, cơ chế hoạt động của ngơn ngữ
lập trình SWI-Prolog; Nghiên cứu SWI-Prolog trong bài toán quản lý cơ sở tri
thức và xây dựng ứng dụng xét tặng huy hiệu đảng cho đảng viên tại tỉnh và
một số ứng dụng khác trong thời gian tới.
2.2. Mục tiêu cụ thể
- Lập trình logic bằng ngơn ngữ lập trình SWI-Prolog.


3

- Sử dụng được một số thư viện của SWI-Prolog.
- Vận dụng một số thư viện đã tìm hiểu áp dụng cho bài toán “xét tặng
huy hiệu đảng thường niên cho đảng viên tỉnh Vĩnh Long”.
3. Đối tƣợng và phạm vi nghiên cứu
3.1 Đối tượng nghiên cứu
3.1.1. Nghiên cứu lý thuyết

- Kỹ thuật lập trình logic với ngơn ngữ SWI-Prolog.
- Một số thư viện của SWI-Prolog.
3.1.2. Nghiên cứu thực nghiệm
- SWI-Prolog sẽ truy xuất dữ liệu có cấu trúc từ “CSDL đảng viên” có
trước thơng qua kết nối ODBC của Windows sử dụng “SWI-Prolog ODBC
Interface”.
- Sử dụng CSDL đảng viên có sẵn để tạo ra một chương trình về xét
tặng huy hiệu đảng, xử lý bài toán và đưa ra kết quả theo yêu cầu bằng giao
diện web.
3.2 Phạm vi nghiên cứu
- Đề tài chỉ nghiên cứu về kỹ thuật lập trình SWI-Prolog.
- Ứng dụng cho bài tốn “xét tặng huy hiệu đảng thường niên cho đảng
viên tỉnh Vĩnh Long” chỉ xét để trao huy hiệu đảng cho đảng viên từ 30 năm
tuổi đảng đến 70 tuổi đảng.
4. Nội dung nghiên cứu
- Trình bày kỹ thuật lập trình SWI-Prolog.
- Trình bày một số thư viện của SWI-Prolog.
- Lập trình và chạy thử nghiệm ứng dụng “xét tặng huy hiệu đảng
thường niên cho đảng viên tỉnh Vĩnh Long”.
5. Kết cấu của luận văn
- Chƣơng 1: Tổng quan về lập trình Logic


4

- Chƣơng 2: Ngơn ngữ lập trình SWI-Prolog với các thư viện quản lý
CSDL, lập trình web.
- Chƣơng 3: Xây dựng ứng dụng “Xét tặng huy hiệu đảng thường niên
cho đảng viên tỉnh Vĩnh Long”
- Kết luận.

- Tài liệu tham khảo.


5

CHƢƠNG 1
TỔNG QUAN VỀ LẬP TRÌNH LOGIC
Trong chương 1 ở đây sẽ trình bày những kiến thức cơ bản về lập trình
logic như tìm hiểu logic mệnh đề và logic vị từ. Đối với ngơn ngữ lập trình
logic sẽ tìm hiểu những kỹ thuật lập trình cơ bản của ngơn ngữ lập trình
Prolog (SWI-Prolog) thơng qua các ví dụ minh họa. Đây là những kiến thức
cơ bản để nghiên cứu các thư viện của ngơn ngữ lập trình Prolog trong những
phần nghiên cứu tiếp theo.
1.1. Tổng quan
1.1.1. Khái niệm Lập luận và Logic
Lập luận là dựa trên những lý lẽ tiền đề, sự kiện, chân lý được mọi
người thừa nhận có trước đó (các phát biểu đúng) để đưa ra một phát biểu
đúng mới. Nói cách khác một con người hay một hệ thống được gọi là biết lập
luận nếu chỉ ra được một phát biểu nào đó đúng khi cho trước một tập các
phát biểu đúng hay không đúng. Các phát biểu (câu) phải tuân theo một tập
các qui tắc nhất định (ngữ pháp) và giá trị của phát biểu là đúng (true) hoặc là
sai (false), một tập các qui tắc qui định như thế gọi là logic. Như vậy logic là
một ngơn ngữ mà mỗi câu trong đó có ngữ nghĩa (giá trị) là đúng hoặc sai, có
thể cho phép chúng ta lập luận một phát biểu mới có giá trị đúng hay sai khi
cho các phát biểu trước đó là đúng hay khơng đúng. Các phát biểu cho trước
được gọi là cơ sở tri thức (Knowledge base - KB), phát biểu cần chứng minh
là đúng khi biết KB đúng gọi là phát biểu truy vấn (query - q). Nếu q là đúng
khi KB là đúng thì ta nói rằng KB suy diễn ra q (ký hiệu là KB ╞ q).
1.1.2. Các ký hiệu trong Logic:
- Hằng logic: True, False.

- Các ký hiệu mệnh đề (biến mệnh đề): P, Q,…


6

- Các phép kết nối logic: ∧, ∨, ¬, ⇒, ⇔.
- Các dấu mở ngoặc “ (ˮ và đóng ngoặc “ )ˮ.
- Lượng từ : , .
Trong phần tiếp theo chúng ta sẽ xem xét 02 phép lập luận logic khác để
giúp máy tính có thể lập luận và đưa ra phát biểu mới từ các phát biểu cho
trước.
1.2. Logic Mệnh đề
Một mệnh đề p là một phát biểu, biểu thức (câu) chỉ có thể nhận giá trị
đúng (True, 1) hoặc sai (False, 0) tùy theo mệnh đề đó là đúng hay sai trong
thế giới thực.
Ví dụ:
- Phát biểu "1+1=2" là một mệnh đề có giá trị đúng.
- Phát biểu "Mặt trời ln mộc ở phía tây" là một mệnh đề có giá trị sai
Logic mệnh đề là loại logic đơn giản mà các phát biểu, câu trong logic
mệnh đề được xây dựng trên cơ sở các tên mệnh đề (thường ký hiệu bằng các
chữ cái la tinh như a, b, p, q, . . ., P, Q,…) và các phép toán logic theo những
quy tắc, cú pháp nhất định. Các phép tốn logic mệnh đề bao gồm:
• Hội:

(, and, và).

• Tuyển:

(, or, hoặc).


• Phủ định:

(, not, khơng).

• Kéo theo:

().

• Tương đương:

().

Giá trị của một biểu thức được tính dựa theo bảng chân trị như sau:
P

Q

P

PQ

PQ

PQ

PQ

False

False


True

False

False

True

True

False

True

True

False

True

True

False


7

True


False

False

False

True

False

False

True

True

False

True

True

True

True

Mọi biểu thức logic mệnh đề đều có thể đưa về dạng biểu thức tương
đương chỉ chứa các phép toán , , . Các phép tốn ,  có tính chất giao
hoán, kết hợp, phân phối và luỹ đẳng (các tính chất này đã được nhiều nhà
khoa học đã chứng minh, nghiên cứu này chỉ áp dụng không chứng minh).

Các phép biến đổi tương đương đã được chứng minh:
 P  Q  Q  P; P  Q  Q  P
 P  Q  Q  P
 P  P  P; P  P  P
 P  (Q  R)  (P  Q)  R; P  (Q  R)  (P  Q)  R
 P  Q  (P  Q); P  Q (P Q)
 P  Q  P  Q
 P  (Q  R)  (P  Q)  (P  R); P  (Q  R)  (P  Q)  (P 
R)
 P  (P  Q)  P; P  (P  Q)  P
 P  P
 (P  Q)  P  Q; (P  Q)  P  Q
 P  P  0
 P  0  0; P  1  1; P  0  P; P  1  P
 1  0; 0  1
1.2.1. Cú pháp của logic mệnh đề:
- Các ký hiệu:
 Hằng: True, False.
 Mỗi ký hiệu P, Q, … gọi là ký hiệu mệnh đề hoặc mệnh đề.
 Các kết nối logic: ¬, ∧, ∨.


8

 Các ký hiệu “(” và “)”.
- Qui tắc xây dựng biểu thức: Có hai loại biểu thức đó là biểu thức đơn
và biểu thức ghép hay mệnh đề kết hợp nhiều các mệnh đề đơn, True và False
là các mệnh đề (True là biểu thức đơn hằng đúng, False là biểu thức đơn hằng
sai). Mỗi ký hiệu mệnh đề là một biểu thức, ví dụ P, Q là các biểu thức (biểu
thức đơn).

Nếu P và Q là các biểu thức thì các cơng thức sau cũng là biểu thức (cỏc
biu thc ghộp):
ã ơP
ã (P Q)
ã (P Q)
ã (P ⇒ Q)
• (P ⇔ Q)
- Các khái niệm và qui ƣớc khác: để cho gọn, ta bỏ đi các dấu “(” và
“)” không cần thiết. Nếu biểu thức chỉ có một ký hiệu mệnh đề thì ta gọi biểu
thức đó là biểu thức đơn hoặc biểu thức phân tử. Các biểu thức khơng phải là
biểu thức đơn thì gọi là biểu thức ghép. Nếu P là ký hiệu mệnh đề thì P và ¬P
gọi là các literal, P là literal dương cịn ¬P là literal âm. Các biểu thức ghép
dạng A1 ∨ A2 ∨…∨ An, trong đó các Ai là các literal, được gọi là các biểu
thức tuyển (clause).
1.2.2. Ngữ nghĩa của logic mệnh đề:
Được qui định cách diễn dịch và cách xác định tính đúng hay sai cho các
biểu thức.
- True là biểu thức ln có giá trị đúng, False là biểu thức ln có giá trị
sai.
- Các biểu thức ghép được biểu diễn bằng một phủ định hay mối liên kết
giữa các mệnh đề/phát biểu/ biểu thức ghép trong thế giới thực. Ngữ nghĩa và


9

giá trị của các biểu thức ghép được xác định dựa trên các biểu thức con thành
phần của nó và có giá trị theo bảng chân trị như trên chẳng hạn như:
 Biểu diễn ¬A có nghĩa là phủ định mệnh đề A, mệnh đề A đang có giá
trị True nếu lấy phủ định của mệnh đề A thì mệnh đề A sẽ nhận giá trị là
False và ngược lại.

 Biểu diễn A ∧ B có nghĩa là mối liên kết “A và B”, biểu thức nhận giá
trị True khi cả A và B là True, và nhận giá trị False trong các trường hợp còn
lại.
 Biểu diễn A ∨ B biểu diễn mối liên kết “A hoặc B”, biểu thức nhận giá
trị True khi hoặc A hoặc B là True, và nhận giá trị False chỉ khi cả A và B là
False.
 Biểu diễn (A ⇒ B) biểu diễn mối quan hệ “A kéo theo B”, biểu thức
chỉ nhận giá trị False khi A là True và B là False; nhận giá trị True trong các
trường hợp khác
 Biểu diễn (A ⇔ B) biểu diễn mối quan hệ “A kéo theo B” và “B kéo
theo A”, biểu thức sẽ nhận giá trị True khi cả A, B là True hoặc False và nhận
gía trị False khi một trong hai A, B có giá trị khác nhau.
Để xác định tính đúng/sai của một ký hiệu mệnh đề (mệnh đề đơn) là
dựa trên tính đúng sai của sự kiện hoặc thơng tin mà nó ám chỉ, cịn việc xác
định tính đúng sai của mệnh đề ghép phải tuân theo các qui tắc trên.
1.2.3. Ví dụ:
- Gọi A là mệnh đề “Thạch chăm làm”;
- B là mệnh đề “Thạch giỏi áp dụng khoa học, kỹ thuật”;
- C là mệnh đề “Thạch thu hoạch sản lượng nơng sản cao nhất xã”;
=> Ta có thể biểu diễn các câu sau trong logic mệnh đề:
- “Nếu Thạch chăm làm thì Thạch thu hoạch sản lượng nông sản cao
nhất xã”: A ⇒ C.


10

- “Thạch chăm làm lại vừa giỏi áp dụng khoa học, kỹ thuật thì Thạch thu
hoạch sản lượng nơng sản cao nhất xã”: A ∧ B⇒ C.
Để biểu diễn một số vấn đề bằng phương pháp logic mệnh đề thường
cũng gặp phải một số trở ngại cơ bản là ta không thể can thiệp vào cấu trúc

của một mệnh đề. Hay nói một cách khác là mệnh đề đó khơng có cấu trúc.
Điều này làm hạn chế rất nhiều thao tác suy luận.
Ví dụ:
Ta có các phát biểu trong cơ sở tri thức tự nhiên như sau:
- “Thạch là một nông dân”;
- “Mọi nông dân đều sản xuất giỏi”.
Với cơ sở tri thức như vậy chúng ta có thể suy diễn rằng “Thạch sản xuất
giỏi” được không? do ở đây logic mệnh đề không quan tâm nội dung bên
trong các mệnh đề nên chỉ có thể biểu diễn bằng một ký hiệu mệnh đề và
được biểu diễn lại như sau:
- “Thạch là một nông dân” được biểu diễn là P1;
- “Mọi nông dân đều sản xuất giỏi” được biểu diễn là Q;
- Giả sử biểu thức cần truy vấn “Thạch sản xuất giỏi” biểu diễn là T1. Ở
đây chúng ta thấy không thể biểu diễn {P1 ∧ Q} ╞ T1 được do các biểu thức
là riêng lẽ khơng có mối liên hệ gì với nhau. Để có thể biểu diễn được chúng
ta cần phải biết được danh sách tất cả các nơng dân ví dụ như {Thạch,
Bình, …, Chi} mới có thể suy diễn được biểu thức “Mọi nơng dân đều sản
xuất giỏi” thành một biểu thức ghép khác như sau “[Thạch là một nơng dân
thì Thạch sản xuất giỏi] và [ Bình là một nơng dân thì Bình sản xuất giỏi]
và … và [ Chi là một nông dân thì Chi sản xuất giỏi]” và được biểu diễn lại
như sau:
(P1 ⇒ T1) ∧ (P2 ⇒ T2) ∧ … ∧ (Pn ⇒ Tn).


11

Với P1, T1 là ký hiệu mệnh đề nói trên; P2 là ký hiệu mệnh đề “Bình là
một nơng dân”, T2 là “Bình sản xuất giỏi”, …, Pn là “Chi là một nông dân”
và Tn là “Chi sản xuất giỏi”. Khi ta đã có mệnh đề P1 đúng thì ta có thể dùng
các luật, phương pháp để suy diễn ra được T1, tuy nhiên số lượng các mệnh

đề trong cơ sở tri thức sẽ rất lớn khi đó thuật tốn suy diễn được sử dụng kém
hiệu quả.
Từ những hạn chí đó người ta đã đưa vào khái niệm vị từ và lƣợng từ
(- với mọi,  - tồn tại) để tăng cường cấu trúc của một mệnh đề.
1.3. Logic Vị từ
Logic vị từ là một phát biểu chứa các biến x,...,y sao cho khi x,...,y nhận
các giá trị cụ thể thì nó nhận giá trị hoặc đúng hoặc sai.
Ví dụ: p(x, y, z) được phát biểu x.y = z là một vị từ 3 biến x, y, z trên tập
các số thực. Khi đó tính chất giao hốn của phép nhân được diễn tả như sau:
x, y p(x, y, z)  p(y, x, z)
1.3.1. Cú pháp của logic vị từ:
- Các ký hiệu: ngoài thừa hưởng các ký hiệu mà logic mệnh đề đã có
logic vị từ bổ sung thêm một số ký hiệu khác sau:
 Hằng do người sử dụng đặt cho tên đối tượng cụ thể: An,
Bình,...,
a,b,c, … (đối tượng là các chủ ngữ hoặc tân ngữ trong mệnh đề).
 Ký hiệu biến (thường là biến đối tượng, đại diện cho chủ ngữ
hoặc tân ngữ): x, y, z, t, u, …
 Ký hiệu vị từ: P, Q, … hoặc Congchuc, Yeu, father, …(VD:
P(x,y,z); Congchuc(x),…).
 Ký hiệu hàm: sin, cos, log, father, …


12

Chú ý: hàm trả về giá trị còn vị từ thì trả về True/False. Việc xác
định một cái tên là hàm hay vị từ tùy vào sự xuất hiện của nó
trong phát biêu, câu và các tham số của nó.
 Ký hiệu lượng tử: , .
 Ngoài các ký hiệu “(” và “)” cịn có ký hiệu dấu “,”.

- Qui tắc xây dựng biểu thức:
Tương tự logic mệnh đề, ở đây ta có vị từ là một biểu thức đơn được viết
theo quy tắc sau: tên vị từ (hạng_thức_1, hạng_thức_2, …, hạng_thức_k)
trong đó hạng_thức_i là biểu thức của các đối tượng, cú pháp của hạng thức
được xây dựng từ các ký hiệu hằng, biến và hàm như sau:
 Các ký hiệu hằng và các ký hiệu biến là một hạng thức.
 Nếu t1, t2, ..,tn là các hạng thức và f là một ký hiệu hàm gồm n
tham số thì f(t1, t2, ..,tn) cũng là một hạng thức.
Ví dụ một số biểu thức đơn:
 love(An, Binh)
 father(An, Nhan)
 congchuc(Hoa)
Đối với những vị từ là các biểu thức ghép, ngoài các quy tắc như logic
mệnh đề Nếu P và Q là các biểu thức và x là các biến thì các công thức sau
cũng là biểu thức (các biểu thức ghép):
 ∀x, P
 ∃x, P
 ∀x, Q
 ∃x, Q
- Các khái niệm và qui ƣớc khác:
• Nếu một hạng thức khơng chứa biến thì gọi là hạng thức nền.
• Một biểu thức đơn cũng có tên gọi là biểu thức phân tử hay công


13

thức phân tử.
• Một biểu thức đơn hoặc phủ định của một biểu thức đơn thì gọi là
literal.
• Trong cơng thức ký hiệu lượng tử (∀x, A hoặc ∃x, A) các biến x

trong A gọi là biến buộc (biến lượng tử), biến nào trong A không
phải là biến lượng tử thì gọi là biến tự do. Các biểu thức mà khơng
có biến tự do gọi là biểu thức đóng.
• Miền giá trị của một biến là tập hợp các giá trị/đối tượng mà biến
đó có thể nhận.
1.3.2. Ngữ nghĩa của logic vị từ:
Biểu thức đơn đóng (khơng chứa biến) là tương ứng với một mệnh đề
(phát biểu, sự kiện, thông tin) nào đó trong thế giới thực, biểu thức đơn có giá
trị chân lý True hay False tùy theo mệnh đề (phát biểu, sự kiện, thơng tin) mà
nó ám chỉ là đúng hay sai trong thực tế.
Biểu thức ghép là biểu thức biểu diễn (ánh xạ với) một phủ định, mối
quan hệ hoặc mối liên kết giữa các mệnh đề/phát biểu/câu con hoặc một sự
phổ biến hoặc đặc thù của mệnh đề/phát biểu trong thế giới thực. Ngoài
những ngữ nghĩa trong logic mệnh đề nó kế thừa, ngữ nghĩa và giá trị chân lý
của các biểu thức ghép còn được bổ sung mới như sau:
• Lượng từ : x p(x, y, z,. . .) có nghĩa là tồn tại một giá trị x 0 sao
cho p(x0, y, z,. . .) đúng với mọi y, z, . . .
• Lượng từ : x p(x, y, z,. . .) có nghĩa là với mọi giá trị của x p(x,
y, z,. . .) đúng với mọi y, z,. . .
1.3.3. Ví dụ:
Các phát biểu trong ngơn ngữ tự nhiên có thể biểu diễn trong logic vị từ:


“Thạch là nơng dân xã MT”
Được biểu diễn thành vị từ: nong_dan(Thạch)


14




“Khang là mẹ của Thi”
Được biểu diễn thành vị từ: me(Khang,Thi)



“Mọi nơng dân đều sản xuất giỏi”
Được biểu diễn thành vị từ: ∀x nong_dan(x) ⇒ san_xuat_gioi(x)

(lƣu ý ∀ thƣờng đi với ⇒. Khác với ∀x nong_dan(x) ∧ san_xuat_gioi(x))
• “Trong xã MT có nơng dân sản xuất giỏi”
Được biểu diễn thành vị từ: ∃x nong_dan(x) ∧ san_xuat_gioi (x)
(lƣu ý ∃ thƣờng đi với ∧. Khác với ∃x nong_dan (x) ⇒ san_xuat_gioi (x)
Từ những thơng tin kiến thức của logic hình thức trên đây để giúp máy
tính có thể lập luận, rút ra phát biểu mới từ các phát biểu cho trước ta cần phải
có một ngơn ngữ để lập trình cho máy hiểu và chạy được các chương trình
giao tiếp với người dùng đó là ngơn ngữ lập trình logic.
Lập trình logic là lập trình dạng khai báo, đặc tả các vấn đề các sự kiện,
tri thức đã biết và sử dụng máy tính có cài đặt thuật giải suy diễn để truy vấn
một sự kiện mới hoặc tri thức mới từ các sự kiện và tri thức đã cho. Lập trình
logic chủ yếu nhấn mạnh kết quả mong đợi hơn là cách thức nhận được kết
quả. Một chương trình logic biểu diễn một cơ sở tri thức (một tập các mệnh
đề logic) và truy vấn
(Lập trình logic = Khai báo Cơ sở tri thức + Truy vấn)
 Các mệnh đề logic phải ở dạng chuẩn Horn: p1 ∧ p2 ∧ … ∧ pn →
q1 ∨ q2 ∨ … ∨ qm
 Nếu n=0, m=1, thì q1 là một sự kiện (fact)
 Nếu n≥1, m =1, thì (p1 ∧ p2 ∧ … ∧ pn → q1) là một luật (rule)
 Nếu n≥1, m>1, thì tương đương với luật: (p1 ∧ p2 ∧ … ∧ pn ∧
¬q1 ∧ ¬q2 ∧ … ∧ ¬qm-1 → qm)

Một trong những ngơn ngữ lập trình logic được sử dụng rất phổ biến là
ngơn ngữ lập trình logic SWI-Prolog trên nền Prolong.


15

1.4. Ngơn ngữ lập trình logic Prolog (SWI-Prolog)
Ngơn ngữ lập trình Prolog (Prolog = Programming Logic).
Trong ngơn ngữ Prolog các luật (rules) và các sự kiện (facts) là các tiên
đề (axioms) và các câu hỏi (queries) được đưa ra bởi người dùng, là các định
lý cần chứng minh. Prolog áp dụng phương pháp suy diễn lùi (Backward
Chaining) để chứng minh và dựa trên các nguyên tắc đồng nhất và quay lui.
Tải và cài đặt ngơn ngữ lập trình SWI- Prolog tại địa chỉ
, có các phiên bản cho phép chạy trên các hệ điều
hành Windows, MacOS, và Linux, bản quyền sử dụng phần mềm SWI-Prolog
là miễn phí cho mục đích học tập và nghiên cứu. Các phiên bản được cập
nhật, bổ sung liên tục giúp cho công cụ này ngày được tốt hơn.
Giao diện của SWI-Prolog sau khi được cài đặt trên mơi trường
Windows

H 1.1 Chương trình SWI-Prolog
1.4.1. Cấu trúc chương trình Prolog
Trong một chương trình Prolog thường gồm 04 phần chính nhưng khơng
nhất thiết là phải có đầy đủ các phần và trong SWI- Prolog không cần khai
báo các kiểu dữ liệu, cấu trúc chương trình các từ khóa này trong chương
trình:


16


- Câu trúc chƣơng trình Prolog
 domains
...
 predicates
...
 clauses
...
 goal
...
domains: phần định nghĩa các kiểu dữ liệu
predicates: phần khai báo các quan hệ (vị từ)
clauses: phần thể hiện các biểu thức của vị từ chủ yếu là các khai báo của
sự kiện và luật.
goal: đích cần đạt được của chương trình.
goal được viết trong chương trình được gọi là internal goal.
goal thực hiện lúc thực thi được gọi là external goal.
Các ghi chú trong Prolog nằm trong cặp /* */ hoặc sau dấu
- Một số lỗi khi viết chƣơng trình
 Phân biệt giữa chữ hoa và chữ thường là rất quan trọng
 Khơng được có khoảng trắng (space characters) giữa tên và danh
sách tham số của một cấu trúc: love(an,nam) viết đúng, love˽
(an,nam) viết sai.
 Kết thúc của mỗi mệnh đề phải có dấu chấm (.)
- Các mệnh đề cơ sở trong Prolog
Cấu trúc (structure) gồm một tên (name) và khơng, một hoặc nhiều tham
số (arguments) nếu như khơng có tham số ta bỏ đi cặp dấu ngoặc ().


×