TÀI LIỆU THAM KHẢO
9. Chuẩn hoá tên biến toàn cục: thay đổi tên biến sao cho các biến trên
5.3.4. Thuật toán hợp nhất
Trong logic mệnh đẻ, dễ dàng xác
logic vị từ quá trình “ương hợp (matching) này phức tạp hon
các đi i
và phát hiện có hay không một đãy các phép thay thể làm cho chúng đồng nhất. Thuật đoán hợp nhất (unification algorithm) dưới đây thực hiện công việc đó.
Ý tưởng cơ sở của thuật toán hợp nhất là đầu tiên kiểm tra tên của hai vị
từ. Nếu chúng không đồng nhất, chúng không thê hợp nhất. Nếu tên vị từ đồng nhất, kiểm tra đôi một các đối số của hai vị từ. Nếu cặp đối số đầu tiên không, thể tương hợp, hai vị từ không thể tương hợp. Nếu cặp đối số đầu tiên có thê tương hợp, xét cặp thứ hai và cứ như vậy. Nếu số đối số của hai vị từ bằng
nhau và tất cả các cặp đối số tương ứng đều có thể tương hợp, hai vị từ là có
thể tương hợp.
Nếu hai đối số tương ứng của hai vị từ là các hằng, chúng tương hợp
khi và chỉ khi chúng đồng nhất.
... Nếu một trong hai đối số tương ứng là biến, đối số tương ứng kia là một hằng, một biển khác hoặc một biều thức vị từ không chứa biễn đó, chúng có thể tương hợp, sự tương hợp nhận được qua phép thay thế biến bởi đối số tương ứng.
Ta sẽ ký hiệu sự thay thế biến X bởi A là A/X, đọc là thay thế X bởi A,
X được thay thế bởi A hoặc thay thế A cho X. Chú ý rằng, nếu một cặp đối số
tương hợp thông qua phép thay thé biến, phép thay thế này phải tác động lên
mọi thể hiện của biến trong vị từ.
Ví dụ, ta muốn hợp nhất hai vị từ P(X, X) và P(Y, Z). Hai vị từ trùng tên. Xét cặp đối số đầu tiên, chúng là các biễn X và Y, chúng có thé tương hợp thông qua phép thay thế X/Y hoặc Y/X. Giả sử phép thay thế Y/X được sử dụng, khi từ thứ nh: phép thay thế này là P(Y, Y). Khi xét tương.
hợp cặp đồ số thứ hai, các đối số này sẽ là Y và Z tương ứng. chúng tương hợp thông qua phép thay thế Y/Z hoặc Z/Y. Như vậy hai vị từ tương hợp qua hợp thành của hai phép thay thế (Y/Z)(Y/X) hoặc (Z/Y)(Y/X).
mix) |x)
P(X,X) —> PLY, „#1 É} pợ, Y)
PY, 2 py, a3 É) sợ, Y)
giá trị thay thế, các giá trị thay thể có thẻ là một hằng, một biến khác hoặc là một biểu thức vị từ. Ký hiệu (a/Xi, ax/X2, ..., ax/Xt) durge hiéu là phép thay thể thực hiện thay thé biến Xị bởi ai, X; bởi Xu bởi ak, cde tên biến không xuất hiện trong liệt kê giữ nguyên không thay đổi.
Trong ví dụ trên
(Y/):(X,Y,Z)—{X.Y,Z}
XPY YRY zI>Z
Do vậy, ta ký hiệu hợp thành của các phép thay thế như ký hiệu hợp thành của các ánh xạ: phép thay thế thực hiện trước được viết bên phải các thay thé được thực hiện sau. Mục tiêu của thủ tục hợp nhất là phát hiện phép
thay thé lam cho hai literal tương hợp.
Thủ tục hợp nhất unify(LI, L2) (xem hình 5:3) trả lại một danh sách biểu diễn hợp thành của các phép thay thế đã đượo thực hiện trong quá trình tương hợp. Danh sách rỗng. NIL, chỉ ra rằng (ương hợp không cằn phép thay thế. Danh sách chứa giá trị FAIL chi ra thủ tục hợp nhất thất bại.
“Thuật toán: unif(L¡„ L2)
4£ (1 và L2 cả hai là các biển hoặc hằng) 4f(L1 và 12 đồng nhất)rebuzn NIL,
elseif(L1 là biên)
4F (L1 xuất hiện trong L2) return {FAIL}
elseretuzn (12/11) elseif (12 1a bién)
if (L2 xuất hiện trong L1)return (FATL]
elsereturn (11/12) elsereturn (FATL)
4# (ký hiệu vị tùtrong L1 và L2 không đồng nhất)
return (FAIL]
Af (L1 và L2 có số các đổi số khác nhau)
return (FAIL)
Khởi động SUBT là NILL
for (4 =1, 4 <= số đôi số của L1) S$ € unify(arg(i, L1), arg(i, 12)) 4£ (S chúa FAIL) return (FAIL)
if ($ <> NILL)
Ấp dụng S lên phân còn lại của L1 và L2 SUBT = APPEND(S, SUBT)
return (SUB?)
Trong đó arg(i, L) tra lai đối số thứ ¡ của vị từ L
APPEND(1istl, list2): trà lại danh sách nổi hai danh sách listl va list2
Hình 5.3 Giải thuật hợp nhất
5.3.5 Hợp giải trong logic vị từ
Hai literal được gọi là bù nhau nếu một trong chúng hợp nhất với phủ
định của literal kia thông qua một phép thay thé.
Bài toán:
minh P ho một tập các phát biểu tiền để F, một phát biểu phải chứng.
“Tìm một chứng mỉnh cho P với các giả thiết F'
“Thuật toán hợp giải:
1.. Chuyển đổi tắt cả các phát biểu của F sang dạng clause
2. Lấy phủ định của P và chuyên nó sang dạng clause, thêm nó vào tập các
clause nhận được từ 1, nhận được tập các clause được gọi là tập các
clause của thủ tục.
3. Lap lại đến tận khi phát hiện mâu thuẫn hoặc không tiến triển được nữa
hoặc số bước lặp vượt quá một ngưỡng định sẵn
a. Chọn hai elause C¡ và C›, sao cho C¡ chứa một literal Li: C) = Liv Rị, C2 chứa literal L2 : C2 = Lov Ro, L¡ và La là các literal bù nhau.
thụng qua phộp thay thế ứ
b. Hợp giải : xây dung clause phan giai o(Riv R2), bằng cách áp dụng
phộp thay thể ứ lờn tuyến của Rị và R;
c. Nếu clause phân giải là clause rỗng, phát hiện mâu thuẫn, nếu không.
thêm nó vào tập các clause của thủ tục.
Nếu chọn các clause để hợp giải được tiến hành một cách có hệ thống,
thủ tục hợp giải sẽ tìm thấy mâu thuẫn, nều nó. ¡. Tuy nhiên, thời gian đề.
tìm thấy mâu thuẫn có thê rất dài. Tên tại một vài chiến lược chọn lựa làm
tăng tốc độ đáng kể quá trình hợp giải:
ô_ Chỉ hợp giải cỏc clause cú chứa cỏc literal bit
ô_ Loai bỗ một số clause ngay khi nú được sinh fa. Hai loại clause bị loại bỏ là clause hằng đúng (ví đự PCX) Ÿ—P(X)) và clause hé quả của các clause khát (ví đụ đã có clause P(X) cdc clause dạng P(X) v.... có thể
loại bỏ).
ô_ Mỗi khi cú thể, hợp a
clause phủ định của clause phải chứng minh hoặc với clause sinh ra bởi hợp giải với các clause như thế, Chiên lược này được gọi là chiến lược tập hỗ trg (set-of-support strategy).
ô_ Mỗi khi cú thể, hợp giải với clause chỉ cú một literal. Cỏc hợp giải như vậy sẽ sinh ra các clause phân giải có ít literal hơn cha của chúng và
như thể tiến sát hơn đến clause rồng. Chiến lược này được gọi là chiến
lược ưu tiên 6 don (wnit-preference strategy)
. Ta minh họa thủ tục hợp giải qua ví dụ “thông tin về Marcus” cia
phần trước
Các tiền đề
man(marcus)
pompeian(mareus)
VX : pompeian(X) => roman(X)
ruler(ceasar)
VX : roman(X) —> loyalto(X, ceasar) v hate(X, ceasar)
VX, Y : loyalto(X, Y)
WX, VY : person(X) ^ ruler(Y) a try_¢ wssinate(X, Y) > loyalto(X, Y)
try_assassinate(marcus, ceasar)
VX : man(X) > person(X)
1
Điều phải chúng minh là “Marcus căm ghét Ceasar”
Chuyển các phát biểu tiền đề sang dang clause, ta được:
Các tiền đề ở dạng clause
1) | man(mareus)
2) | pompeian(marcus)
3) | = pompeian(X1) v roman(X1) 4) | ruler(ceasar)
5) | = roman(X2) v loyalto(X2, ceasar) v hate(X2, ceasar) 6) | loyalto(Xs, f(s)
7) | = person(X4) vs ruler(Y) vtry_assassinate(Xs, Y) v—ơ loyaHo(Xs, Y) 8) | try_assassinate(marcus, ceasar)
9) | ơ man(X3) v person(Xs)
2) Điều phải chứng minh là hate(Mareus, Ceasar). Lấy phủ định của nó, ta
được —hate(Marcus, Ceasar), thêm nó vào tập cae clause tiền đề để nhận được tập ban dau cc clause của thủ tục.
'Tập các clause phải chứng tỏ có mâu thuẫn.
1) | man(marcus)
2) | pompeian(marcus)
3) | ơ pompeian(XI) v roman(X1)
4) | ruler(ceasar)
3) | —ơ roman(X2) v loyalto(X2, ceasar) v hate(X2, ceasar)
6) | loyalto(X3, f1(X3))
7) | — person(X4) vơ ruler(Y) v= try_assassinate(X4, Y) vơ loyalto(X4, Y)
8) | try_assassinate(marcus, ceasar)
9) | ơ man(X5) v person(X5)
10) | — hate(marcus, ccasar)
3.. Quá trình hợp giải
8) V loyalto(Marcus,'Ceasar); kết quả hợp giải của
larcuS/X;
11) ơroman(M:
10 & 5 với phép thay tl
12) spompeian(Marcus) v loyalto(Marcus, Ceasar): két quả hợp giải cua 11 & 3 với phép thay thế Marcus/Xị