gt datalog 2

of 241 /241
-1-

Upload: lan-nguyen

Post on 11-Aug-2015

116 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Gt Datalog 2

-1-

Page 2: Gt Datalog 2

CHƯƠNG 1

CÁC KHÁI NIỆM CƠ SỞ

1.1 Ngôn ngữ cấp một

Một ngôn ngữ cấp một được xây dựng trên một bộ ký tự và những công

thức xây dựng trên bộ ký tự đó.

Định nghĩa 1.1 Bộ ký tự bao gồm lớp các ký hiệu:

Hằng:

Biến:

Các ký hiệu hàm:

Các ký hiệu vị từ:

Các hằng vị từ: true, false

Các ký hiệu kết nối: ( phủ định), ( tuyển), ( hội), (kéo theo), (tương đương).

Các ký hiệu lượng tử: (với mọi), (tồn tại)

Cặp dấu ngoặc đơn ( ), dấu phẩy (,)

Định nghĩa 1.2 Hạng thức được định nghĩa đệ qui như sau:

(i) Mỗi hằng là một hạng thức.

(ii) Mỗi biến là một hạng thức.

(iii) Nếu f là ký hiệu hàm có n-ngôi và t1,... tn là các hạng thức thì f(t1,...,tn) là

một hạng thức.

(iv) Hạng thức chỉ được sinh ra bởi các quy tắc trên.

Định nghĩa 1.3

Nếu t1,...,tn là các hạng thức, p là ký hiệu vị từ n-ngôi thì p(t1,...,tn) được gọi

là một nguyên tố.

Nguyên tố nền là nguyên tố không chứa biến.

-2-

Page 3: Gt Datalog 2

literal là một nguyên tố hoặc phủ định một nguyên tố.

Một nguyên tố là literal dương và phủ định của nguyên tố là literal âm.

Với p là một nguyên tố, literal âm được ký hiệu p.

Định nghĩa 1.4 Công thức được định nghĩa đệ qui như sau:

(i) Nguyên tố là một công thức.

(ii) true và false là các công thức.

(iii) Nếu E và F là các công thức thì: (E F), E, (E F), (E F), (E F)

là các công thức.

(iv) Nếu E là công thức, X là biến thì (X) E, (X) E là các công thức.

(v) Công thức chỉ được sinh ra bởi một số hữu hạn các quy tắc trên.

Định nghĩa 1.5

Công thức không chứa biến được gọi là công thức nền (ground formula).

Nếu trong các công thức (X) E hoặc (X) E chứa các biến X và có thể

thêm một số biến khác không trong phạm vi của ký hiệu lượng tử , thì

biến X gọi là biến ràng buộc, các biến khác gọi là biến tự do.

Công thức đóng là công thức không chứa biến tự do.

Ví dụ 1.1 YX (p(X,Y)q(X)) là công thức đóng. Tuy nhiên X

(p(X,Y)q(X)) không phải là công thức đóng, vì Y là biến tự do.

1.2. Chương trình logic

1.2.1 Một số định nghĩa

Định nghĩa 1.6 Mệnh đề là một công thức có dạng :

X1... Xs (L1...Ln) (1)

trong đó L1,...,Ln là các litereal, X1,...,Xs là các biến xuất hiện trong L1...Ln

-3-

Page 4: Gt Datalog 2

Nếu A1,...,Ak là tất cả các literal dương trong L1,...,Ln và B1,..., Bm là các

literal âm trong L1,...,Ln thì thay cho việc viết L1...Ln ta có thể viết :

A1...Ak B1...Bm

B1...Bm được gọi là tiền đề

A1...Ak được gọi là hệ quả

Ta xét các trường hợp sau đây :

Nếu k=1 thì mệnh đề (1) được gọi là mệnh đề chương trình và có thể viết:

A B1...Bm (2)

* Nếu m=0 thì (2) trở thành: A

và được gọi là mệnh đề đơn vị hoặc unit. Ngữ nghĩa của unit: đối với

các biến xuất hiện trong mệnh đề luôn luôn làm cho A có giá trị đúng.

* Nếu m0 thì mệnh đề (2) được gọi là một quy tắc. Literal A được gọi

là đầu quy tắc (head), B1...Bm là thân quy tắc, các Bi gọi là các đích con.

Ngữ nghĩa của quy tắc: Đối với các biến xuất hiện trong quy tắc làm cho tất

cả Bi (i=1,...,m) có giá trị true thì A có giá trị true.

Nếu k=0 thì mệnh đề (1) có dạng :

B1...Bm (2)

Mệnh đề này được gọi là đích.Nếu Y1,...,Yr là các biến xuất hiện trong đích

ở trên thì mệnh đề (2) có thể viết:

Y1... Yr (B1... Bm )

Hoặc tương đương : Y1... Yr(B1...Bm)

Ví dụ 1.2 Cho a,b là các hằng

X,Y là các biến

f,g là các hàm

p,q là các vị từ

Cho các mệnh đề :

r1: p(f(X,g(x,a)),b) q(x,g(f(a,y),g(x,b)))p(f(x,g(y,a)),b)

-4-

Page 5: Gt Datalog 2

r2: q(x,g(f(a,y),g(x,b)))

r3: p(f(x,g(y,a)),) q(x,g(f(a,y),g(x,b)))

Ta có r1 là một quy tắc, r2 là một unit, r3 là một đích

Định nghĩa 1.7 Chương trình logic là một tập hợp hữu hạn khác rỗng các

mệnh đề chương trình, tức là chỉ chứa hai loại mệnh đề :

A

A B1...Bm

Ví dụ 1.3 Cho chương trình logic P gồm các quy tắc :

r1 : p(a)

r2 : p(s(X)) p(X)

r3 : q(X,a,X) p(X)

r4 : q(X,s(Y),s(Z)) q(X,Y,Z)

trong đó p,q là các vị từ, s là ký hiệu hàm, a là ký hiệu hằng, X,Y,Z là các

biến.

Định nghĩa 1.8 Phép thay thế là một ánh xạ từ tập hợp các biến vào tập

hợp các hạng thức sao cho tập hợp {X/(X) X} là hữu hạn, ký hiệu:

= { X1/t1,...,Xn/tn}

trong đó: Xi là các biến, ti là các hạng thức, Xi ti

và (Xi) = ti ,(X) = X, X {X1,...,Xn}.

Nếu tất cả các ti là hằng thì được gọi là phép thế nền. Nếu là song ánh thì được gọi là phép đổi tên.

Định nghĩa 1.9 Một biểu thức là một hạng thức, một literal hoặc hội các -5-

Page 6: Gt Datalog 2

literal hoặc tuyển các literal.

Định nghĩa 1.10 Giả sử E là một biểu thức và phép thế = {X1/t1,..., Xn/tn}.

Lúc đó E, gọi là hiện hành của E bởi , là biểu thức nhận được từ E bằng

cách thay thế đồng thời các biến Xi xuất hiện trong E bởi các ti (i = 1,.., n).

Nếu E không chứa biến thì E được gọi là một hiện hành nền của E. Nếu là song ánh thì E được gọi là variant của E.

Định nghĩa 1.11 Giả sử ta có hai phép thế:

= {X1/t1, X2/t2..., Xn/tn}

= {Y1/s1, Y2/s2,..., Ym/sm}

Hợp của và , là phép thế nhận được bằng cách xóa khỏi tập hợp:

{X1/t1,...,Xn/tn, Y1/s1,..., Ym/sm }

mọi phần tử Xi/ti mà Xi = ti và Yi/si mà Yi {X1, X2..., Xn}. Ký hiệu =.

Ví dụ 1.4 Cho hai phép thế ={y/f(x), z/a} và = {x/a}. Hợp của và là

phép thế = {y/ f(a), x/a, z/a}.

Định nghĩa 1.12 Cho E và F là hai nguyên tố. Lúc đó:

1. E và F gọi là có thể hợp nhất nếu tồn tại phép thế sao cho E = F,

lúc đó được gọi là hợp nhất tử (unifier) của E và F.

2. Phép thế gọi là tổng quát hơn phép thế nếu tồn tại một phép thế sao cho =.

3. Hợp nhất tử của E và F được gọi là hợp nhất tử tổng quát nhất (most

general unifier) của E và F nếu tổng quát hơn mọi hợp nhất tử khác

của E và F, ký hiệu mgu(E, F).

Chú ý: Rõ ràng E và F có thể hợp nhất được chỉ khi chúng có cùng ký hiệu

mệnh đề: E = p(....) và F = p(...)

Nếu E= p(t1,t2,...,tn) và F = p(s1,s2,...,sn), ta có: E và F có thể hợp nhất được

-6-

Page 7: Gt Datalog 2

khi và chỉ khi tồn tại phép thay thế sao cho ti = si với mọi i=1,...,n. Tập

hợp các phương trình ký hiệu được gọi là hệ phương trình ký hiệu. Hai hệ

phương trình ký hiệu được gọi là tương đương nếu chúng có chung phép hợp

nhất tổng quát nhất.

Ví dụ 1.5 Cho hai nguyên tố: E = p(f(x),z) và F = p(y,a)

Ta có E và F có thể hợp nhất và = {y/ f(a), x/a, z/a} là một hợp nhất tử

của E và F.

Định lý 1.1 Giả sử E và F là hai nguyên tố. Lúc đó tồn tại thuật toán tìm

mgu(E,F) nếu E và F có thể hợp nhất được, ngược lại thông báo không tồn

tại hợp nhất tử.

Thuật toán 1.1 (Thuật toán hợp nhất)

Vào: Hai nguyên tố A và B

Ra: Cho mgu(A,B) nếu tồn tại,

Trả lời false nếu không tồn tại mgu(A,B)

Phương pháp: Bắt đầu từ hệ phương trình A = B lặp lại các bước sau cho

đến khi hoặc là không thể tiếp tục hoặc có thông báo false.

1. Thuật toán dừng và thông báo false nếu một trong các trường hợp sau

xãy ra :

a. Có phương trình dạng f(t1,t2,...,tk) = g(s1,s2,...,sm) ở đây f và g là các ký

hiệu hàm hoặc ký hiệu vị từ và f g.

b. Có phương trình dạng X = f(t1,t2,...,tn) trong đó X là biến xuất hiện một

trong các hạng thức t1,t2,...,tn.

2. Thực hiện các phép biến đổi tương đương sau :

a. Đối với mỗi phương trình có dạng f = X, với X là biến thì thay bằng X

= f

b. Đối với mỗi phương trình có dạng f(t1,t2,...,tn) = g(s1,s2,...,sn) thì thay

-7-

Page 8: Gt Datalog 2

bằng tập các phương trình ti = si , i = 1,...,n.

c. Đối với mỗi phương trình có dạng X = t trong đó X là biến và t không

chứa X thì X được thay bởi t ở mọi phương trình khác.

3. Chuyển ra khỏi hệ các phương trình có dạng X = X :

X1 = t1, X2 = t2 ,..., Xn = tn

ở đây Xi là biến, ti là hạng thức không chứa Xi .

Hợp nhất tử tổng quát nhất của A và B là = {X1/t1,X2/t2,...,Xn/tn}

Ví dụ 1.6 Cho A = q(U,s(V),s(W))

B = q(X,X,s(X))

Phương trình xuất phát : q(U,s(V),s(W)) = q(X,X,s(X))

U = X

s(V) = X

s(W) = s(X)

U = X

X = s(V)

W = X

U = s(V)

X = s(V)

W= s(V)

Vậy = { U/s(V), X/s(V), W/s(V) }

Ta có A = B = q(s(V),s(V),s(s(V))

1.2.2 Phép thể hiện của chương trình logic

Định nghĩa 1.13 Một phép thể hiện I của ngôn ngữ bậc nhất L bao gồm một

miền D khác rỗng và một số phép gán sau đây :

Mỗi hằng C trong L được gán bởi một phần tử CI của D

Mỗi một ký hiệu hàm f n biến trong L được gán bởi một ánh xạ fI từ Dn vào

D.

-8-

Page 9: Gt Datalog 2

Mỗi ký hiệu vị từ p n biến trong L được gán bởi ánh xạ pI từ Dn vào tập

{true, false}.

Ví dụ 1.7 Xét chương trình logic P gồm các quy tắc :

r1 : p(a)

r2 : p(s(X)) p(X)

r3 : q(X,a,X) p(X)

r4 : q(X,s(Y),s(Z)) q(X,Y,Z)

Xét phép thể hiện I như sau :

- Miền D là tập N{0}

- Hằng a được gán bởi số 0 của D

- Ký hiệu hàm s được gán bởi hàm :

sI : D D

nD : sI(n) = succ(n)

- Vị từ p được gán bởi hàm :

pI : D {true,false}

nD : pI(n) = true

- Vị từ q được gán bởi hàm :

qI : D3{true,false}

x,y,z D : qI(x,y,z) =

Cho I là phép thể hiện của ngôn ngữ bậc nhất, lúc đó mọi nguyên tố nền

trong L được gán bởi một trong hai giá trị là true và false.

Nếu E và F là các mệnh đề đã được gán giá trị thì EF, EF, E, (X)E,

(X)E cũng sẽ được gán các giá trị theo nghĩa của các phép kết nối , ,

và các phép lượng hóa , .

Ta có định nghĩa sau đây :

Định nghĩa 1.14 Giả sử L là ngôn ngữ bậc nhất, I là phép thể hiện của L, S là

tập các mệnh đề hoặc các công thức.

-9-

Page 10: Gt Datalog 2

(i) I được gọi là mô hình của S nếu mọi hiện hành cơ sở của các công thức

trong S đều có giá trị true đối với phép thể hiện I, ký hiệu : I S.

Ngược lại ta bảo I không phải là mô hình của S hay I không làm thỏa mãn

S, ký hiệu I S.

(ii) Nếu tồn tại một mô hình I của S thì ta bảo S là phi mâu thuẩn hoặc S có

thể thỏa mãn được.

Ngược lại ta bảo S là mâu thuẩn hay không thể thỏa mãn.

Ví dụ 1.8 Xét ngôn ngữ bậc nhất :

- Hằng a

- Biến X

- Các vị từ p,q,r

Chương trình logic P :

r(a) .

p(X) r(X)

q(X) p(X)

Phép thể hiện I :

- D= {a}

- Hằng a được gán với aD

- p(a) = true, r(a) = true, q(a) = true

Vậy ta có I P

Xét phép thể hiện J :

- D= {a}

- Hằng a được gán với aD

- p(a) = false, r(a) = true, q(a) = true

Ta có J P

-10-

Page 11: Gt Datalog 2

1.2.3 Phép thể hiện Herbrand

Cho ngôn ngữ bậc nhất L, giả sử tập các hằng trong L là khác rỗng. Đặt U

là tập các hạng thức nền của L. HB là tập các nguyên tố nền trong L.

U gọi là tập phổ dụng Herbrand (Herbrand Universe)

HB gọi là cơ sở Herbrand (Herbrand Base)

Ví dụ 1.9 Cho ngôn ngữ L

- có a, b là các hằng

- f, g là các ký hiệu hàm một biến

- p là ký hiệu vị từ một biến

U = {a,b,f(a),f(b),f(f(a)),...}

HB = { p(a), p(b), p(f(a)),...}

Định nghĩa 1.15 Một phép thể hiện Herbrand I của ngôn ngữ bậc nhất L bao

gồm:

(i) Một miền D là tập phổ dụng U

(ii) Mỗi hằng được gán bởi chính nó

(iii) Mỗi một ký hiệu hàm f n biến được gán bởi một ánh xạ fI :Un U như sau:

t1,...,tn U, fI(t1,...,tn) f(t1,...,tn)

(iv) Mỗi ký hiệu vị từ p n biến được gán bởi ánh xạ pI từ Un {true, false}

Ví dụ 1.10 Cho ngôn ngữ bậc nhất L bao gồm :

- Hằng a

- Ký hiệu hàm s

- Vị từ p, q

- Chương trình logic P :

r1 : p(a)

r2 : p(s(X)) p(X)

r3 : q(X,a,X) p(X)

r4 : q(X,s(Y),s(Z)) q(X,Y,Z)

-11-

Page 12: Gt Datalog 2

U= {a,s(a),s(s(a)),...}

HB={p(a),p(s(a)),...,q(a,a,a),q(a,a,s(a)),q(a,a,s(s(a)),...,q(a,s(a),a),q((a,s(s(a)),a

),...}

Ta định nghĩa một phép thể hiện Hebrand của ngôn ngữ L nhaư sau :

Hằng a được gán bởi chính nó.

Ký hiệu hàm s được gán bởi ánh xạ : sI : X s(X), XU

Ký hiệu vị từ p được gán bởi ánh xạ : pI : x true xU

Ký hiệu vị từ q được gán bởi ánh xạ : qI : (x,y,z) true nếu :

n(x) + n(y) = n(z)

trong đó n(t) là số ký hiệu s có mặt trong hạng thức t.

Nhận xét: Đối với mọi phép thể hiện Herbrand thì phép gán các hằng, các ký

hiệu hàm là không thay đổi, chỉ khác là phép gán các ký hiệu vị từ. Như vậy

các phép thể hiện Herbrand chỉ khác nhau bởi giá trị chân lý của các nguyên

tố nền.

Gọi I là tập tất cả các nguyên tố nền có giá trị chân lý là true trong cơ sở

Herbrand. Tập hợp I được gọi là phép thể hiện Herbrand.

Ví dụ 1.11 Cho ngôn ngữ bậc nhất L bao gồm :

- Hằng a,b,c

- Ký hiệu vị từ p,q,r

- Vị từ p, q

- Chương trình logic P:

r(a,b)

r(b,c) p(X,Y) r(X,Y)

q(X,Y) r(X,Z)p(Z,Y)

-12-

Page 13: Gt Datalog 2

U={a,b,c}

HB={r(a,b),r(b,c),r(a,c),r(b,a),r(c,b),r(c,a),r(a,a),r(b,b),r(c,c),

p(a,b),p(b,c),p(a,c),p(b,a),p(c,b),p(c,a),p(a,a),p(b,b),p(c,c),

q(a,b),q(b,c),q(a,c),q(b,a),q(c,b),q(c,a),q(a,a),q(b,b),q(c,c)}

Tập I = {r(a,b),p(a,b),q(b,c) } là phép thể hiện Herbrand:

rI : (a,b) true

(x,y) false (x,y) (a,b)

pI : (a,b) true

(x,y) false (x,y) (a,b)

qI : (a,b) true

(x,y) false (x,y) (b,c)

Định nghĩa 1.16

(i) Phép thể hiện Herbrand là một mô hình của tập các câu S được gọi là

mô hình Herbrand của S.

(ii) Mô hình Herbrand của S được gọi là mô hình nhỏ nhất (least model)

nếu nó được chứa trong mọi mô hình Herbrand khác của S và được gọi là mô

hình cực tiểu (minimal model) nếu nó không chứa mô hình Herbrand nào

khác của S.

Ví dụ 1.12 Cho chương trình logic P :

r(a) p(X) q(X)

q(X) p(X)

Cơ sở HB = { r(a), p(a), q(a)}

I1 = { r(a), p(a) } và I2 = { r(a), q(a) } là các mô hình cực tiểu.

P không có mô hình nhỏ nhất.

1.2.4 Điểm bất động của chương trình logic

-13-

Page 14: Gt Datalog 2

Cho dàn L = (V, ) , trong đó V là một tập hợp và là một quan hệ thứ tự.

Định nghĩa 1.17

1. Một ánh xạ T:VV được gọi là một toán tử hệ quả trực tiếp trên L.

2. Nếu T là một toán tử hệ quả trực tiếp trên L và aV sao cho T(a) = a thì

a được gọi là một điểm bất động.

3. Điểm bất động a được gọi là nhỏ nhất nếu mọi điểm bất động b a thì a

b. Ký hiệu a = LFP(T).

4. Điểm bất động a của T được gọi là cực tiểu nếu không tồn tại điểm bất

động khác b của T sao cho b a.

Định nghĩa 1.18 Toán tử hệ quả trực tiếp T trên dàn L = ( V, ) được gọi là

đơn điệu nếu: a,b V, a b T(a) T(b)

Định lý 1.1 Nếu T là toán tử hệ quả trực tiếp đơn điệu trên dàn L = (V, )

đầy đủ thì tồn tại một tập khác rỗng các điểm bất động của T và hơn nữa T có

điểm bất động nhỏ nhất LFP(T):

LFP(T) = inf{ xV/ T(x) x }

Chứng minh : Đặt xo = LFP(T) = inf{ xV / T(x) x }

Suy ra : xo x x { xV / T(x) x }

T(xo) T(x) x xV

T(xo) = inf{ xV/ T(x) x }= xo

Vậy xo là điểm bất động tập các điểm bất động là khác rỗng.

Gọi x1 là điểm bất động và x1xo.

Ta có x1 = T(x1) x1 { xV / T(x) x } xo x1

1.2.5 Toán tử hệ quả trực tiếp của chương trình logic

Cho P là chương trình logic, I là phép thể hiện Hebrand của P. Ta có L =

(P(B), ) là một dàn đầy đủ. Xây dựng toán tử hệ quả trực tiếp Tp trên L như

sau: Với mỗi I P(B) và là một phép thay thế, ta đặt :

Tp(I) = {AHB / mệnh đề p q1q2...qn của P : A=p, I (q1q2...qn) }

-14-

Page 15: Gt Datalog 2

Định lý 1.2 Cho chương trình logic P và I là phép thể hiện Herbrand. I là mô

hình của P khi và chỉ khi Tp(I) I.

Chứng minh : I là mô hình của P mệnh đề p q1q2...qn của P: A=p,

I (q1q2...qn) I A A I Tp(I) I

Hệ quả 1.1 Nếu Tp là đơn điệu thì điểm bất động nhỏ nhất của Tp là mô hình

nhỏ nhất của P.

Định nghĩa 1.19

(i) Một quy tắc được gọi là dương nếu nó không chứa literal âm ở vế phải.

(ii) Chương trình logic được gọi là dương nếu mọi quy tắc của nó là dương

Định lý 1.3 Nếu chương trình logic Tp dương thì Tp đơn điệu.

Chứng minh : Lấy I, J P(B) và giả sử I J , ta chứng minh Tp(I) Tp(J)

Lấy A Tp(I), theo định nghĩa của Tp(I) thì tồn tại một hiện hành cơ sở của

một

quy tắc trong P sao cho A B1B2...Bn và I B1B2...Bn , suy ra:

Bi I i=1,...,n. Từ đó Bi J, i=1,...,n .

Do đó: Tồn tại một hiện hành cơ sở của một quy tắc trong P sao cho

A B1B2...Bn và I  B1B2...Bn. Vậy A Tp(J).

Hệ quả 1.2 Mọi chương trình logic dương có mô hình nhỏ nhất.

1.3 Cơ sở dữ liệu suy diễn và chương trình Datalog

1.3.1 Cơ sở dữ liệu suy diễn

Định nghĩa 1.17 Một CSDL suy diễn là một tập hữu hạn các mệnh đề có

dạng: p1 ... pm q1 ... qn (m 0, n 0) (1)

trong đó pi (i = 0,..., m) là các nguyên tố và qj (j = 0,..., n) là các literal. Tất cả

các pi và qj đều không chứa các ký hiệu hàm.

Một số trường hợp đặc biệt của (1) :

Trường hợp m = 1, n 1. (1) có dạng: p    q1 ... qn và được gọi là một

quy tắc.

-15-

Page 16: Gt Datalog 2

Trường hợp m > 1, n = 0. (1) có dạng: p1 ... pm Nếu tất cả các đối trong mọi vị từ pi là hằng thì nó được gọi là sự kiện tuyển.

Trường hợp m > 1, n 1. (1) có dạng: p1 ... pm q1 ... qn

được gọi là quy tắc Datalog dạng tuyển.

Một CSDL suy diễn xác định chỉ bao gồm các quy tắc xác định, nghĩa là các

quy tắc có dạng: p q1 ... qn (n 0)

Một CSDL suy diễn không xác định cho phép chứa các quy tắc có dạng:

p1 ... pm q1 ... qn (m > 1, n 0)

Nếu thân của mọi quy tắc trong CSDL suy diễn không xác định P không

chứa phủ định thì P được gọi là chương trình Datalog dạng tuyển. Ngược lại,

P được gọi là chương trình Datalog dạng tuyển mở rộng.

1.3.2 Cú pháp của chương trình Datalog

Định nghĩa 1.18 Một chương trình Datalog là một CSDL suy diễn xác định

bao gồm tập hữu hạn các mệnh đề Horn:

p q1 ... qn (n 0)

Trong đó các vị từ p, qi là các nguyên tố.

Như vậy chương trình Datalog là chương trình logic dương không chứa

ký hiệu hàm.

Định nghĩa 1.19 Giả sử P là chương trình Datalog.

1 Vị từ nội hàm hoặc vị từ IDB (Intensional Database predicate) là vị từ được

định nghĩa bởi các quy tắc trong P. Vị từ ngoại diên hoặc vị từ EDB là vị từ

không được định nghĩa qua các quy tắc, nó chỉ xuất hiện trong thân quy

tắc.

2 CSDL ngoại diên hoặc CSDL EDB của chương trình Datalog là tập các sự

kiện nền đối với các vị từ EDB. CSDL nội hàm hoặc CSDL IDB là tập các

sự kiện nền được tính đối với các vị từ IDB bằng cách áp dụng việc suy

diễn trên các quy tắc của P với CSDL ban đầu EDB.

-16-

Page 17: Gt Datalog 2

3 Vị từ được cài sẵn là một vị từ so sánh số học =, , . , >, <. Nếu là

vị từ được cài sẵn thì ta viết XY thay cho cách viết (X,Y).

Chú ý: Các vị từ EDB chỉ xuất hiện trong thân của quy tắc còn các vị từ IDB

có thể xuất hiện ở cả thân và đầu của quy tắc. Vị từ được cài sẵn chỉ được

xuất hiện trong thân quy tắc.

Định nghĩa 1.20 Với mỗi vị từ k-ngôi q được đặt tương ứng một quan hệ Q

có k thuộc tính. Giá trị của quan hệ Q là một tập các bộ, một bộ của quan hệ

Q có k thuộc tính được biểu thị bởi bộ (a1,...,ak), trong đó các ai là hằng,

q(a1,...,ak) là đúng nếu (a1,...,ak) thuộc Q. Quan hệ đối với vị từ EDB (t.ư.

IDB) gọi là quan hệ EDB (t.ư. IDB).

Với mỗi chương trình Datalog P, ta liên kết với ngôn ngữ cấp một L(P)

bao gồm các vị từ, các hằng, các công thức trong P. Ta có định nghĩa sau:

Định nghĩa 1.21 Giả sử P là chương trình Datalog. Lúc đó:

Vũ trụ Herbrand của P, ký hiệu UP, là tập tất cả các hạng thức nền của P.

Cơ sở Herbrand của P, ký hiệu BP, là tập tất cả các nguyên tố nền của P.

Thể hiện Herbrand hoặc đơn giản ta chỉ gọi là thể hiện, là một tập con I bất

kỳ của cơ sở Herbrand BP của P.

- Nếu A I, ta nói rằng sự kiện A đúng trong I và viết I A.

- Nếu A BP nhưng A I, ta nói rằng A sai trong I và viết I A.

Ví dụ 1.13 Xét chương trình Datalog P gồm các quy tắc như sau:

q(a,b) q(b,c) p(X,Y) q(X,Y)

p(X,Y) p(X,Z) p(Z,Y)

Vũ trụ Herbrand của P là UP = { a, b, c } và cơ sở Herbrand của P là:

BP = { p(a,a), p(a,b), p(a,c), p(b,a), p(b,b), p(b,c), p(c,a), p(c,b), p(c,c),

q(a,a), q(a,b), q(a,c), q(b,a), q(b,b), q(b,c), q(c,a), q(c,b), q(c,c) }

Định nghĩa 1.22 Giả sử P là chương trình Datalog. Lúc đó:

-17-

Page 18: Gt Datalog 2

(i) Một thể hiện Herbrand I được gọi là mô hình Herbrand (hoặc đơn giản là

mô hình) của P, ký hiệu I P, nếu với mọi quy tắc p q1 ... qn trong P và

mọi phép thế nền đối với quy tắc này, điều kiện sau đây là thỏa: Nếu qi I với mọi i = 1,..., n thì p I

(ii) Mô hình I của P được gọi là mô hình cực tiểu nếu không tồn tại mô hình J

nào khác của P sao cho J I.

(iii) Mô hình I của P được gọi là mô hình nhỏ nhất nếu với mọi mô hình J

của P ta luôn có I J.

Định nghĩa 1.23 Giả sử P là chương trình Datalog.

(i) Đồ thị phụ thuộc của P là một đồ thị có hướng DG(P) = <V, E>, trong đó

V là tập đỉnh gồm các vị từ IDB và EDB của P, E là tập cạnh, một cạnh từ

đỉnh q đến đỉnh p nếu P có chứa quy tắc với p là đầu và q ở trong thân.

(ii) Chương trình P được gọi là đệ qui nếu đồ thị phụ thuộc DG(P) có ít nhất

một chu trình, ngược lại P được gọi là không đệ qui. Vị từ nằm trong một chu

trình nào đó của đồ thị DG(P) gọi là vị từ đệ qui, ngược lại gọi là vị từ không

đệ qui.

Ví dụ 1.14 Xét chương trình Datalog sau đây:

q(X,Y) p(Z,X) p(Z,Y)

q(X,Y) r(Z,X) r(Z,Y)

p(X,Y) r(Z, Y) s(X, Z)

r(X,Y) p(Z,Y) s(Z,X)

Đồ thị phụ thuộc của chương trình trên có dạng như hình vẽ:

-18-

p r

q

s

Page 19: Gt Datalog 2

Hình 1.1: Đồ thị phụ thuộc của chương trình trong ví dụ 1.14

1.3.3 Giả thiết thế giới đóng và các tiếp cận để xác định ngữ nghĩa chương trình Datalog

1.3.3.1 Giả thiết thế giới đóng

Trong CSDL suy diễn, giả thiết thế giới đóng (CWA) của Reiter đóng vai

trò hết sức quan trọng. CWA đã được sử dụng như một quy tắc ngầm định để

đưa ra kết luận đối với các sự kiện phủ định. Dưới CWA, nếu một nguyên tố

nền p thuộc cơ sở Herbrand BP của chương trình Datalog P không thể suy ra

được từ những quan hệ EDB và các quy tắc trong P thì p sẽ được xem là

đúng.

Ký hiệu CWA(P) là tập được xác định bởi:

CWA(P) = {p/ p BP và P p }

Với giả thiết thế giới đóng, có ba tiếp cận khác nhau thường được sử

dụng trong việc xác định ngữ nghĩa của chương trình Datalog: tiếp cận theo

quan điểm lý thuyết mô hình, tiếp cận theo quan điểm lý thuyết chứng minh

và tiếp cận theo quan điểm lý thuyết điểm bất động.

1.3.3.2 Các tiếp cận để xác định ngữ nghĩa chương trình Datalog

1. Tiếp cận theo quan điểm lý thuyết mô hình:Theo quan điểm lý thuyết

mô hình, các quy tắc trong chương trình được xem là công cụ để xác định mô

hình. Một thể hiện của một tập các vị từ sẽ gán giá trị chân lý cho mỗi tình

huống có thể có của các vị từ. Để là mô hình của một tập các quy tắc, một thể

hiện phải làm cho các quy tắc đúng với mọi phép gán trị cho các biến trong

mỗi quy tắc được lấy từ miền giá trị đã cho. Theo quan điểm này, ngữ nghĩa

của chương trình Datalog P là mô hình nhỏ nhất của PEDB.

Ví dụ 1.15 Xét chương trình Datalog sau đây:

r1: p(X) q(X,Y)

-19-

Page 20: Gt Datalog 2

r2: q(X,Y) r(X) s(X,Y)

trong đó p, q là các vị từ IDB, r và s là các vị từ EDB. Giả sử CSDL EDB là

{r(1), s(1,2)}.

Xét thể hiện M1 = {r(1), s(1,2), q(1,2), p(1)}. Khi thay X = 1, Y = 2 vào

quy tắc r1 và r2 đều làm cho r1 và r2 đều đúng nên M1 là một mô hình.

Cũng vậy, với thể hiện M2 = {r(1), s(1,2), q(1,2), p(1), p(2)} thì M2 cũng

là mô hình. Tuy nhiên, với thể hiện M3 = {r(1), s(1,2), q(1,2)} thì M3 không

phải là một mô hình. Lý do là khi thay X = 1, Y = 2 vào r1 ta được một giả

thiết đúng và một kết luận sai.

Trong ví dụ này, có thể thấy rằng có một số lượng vô hạn các mô hình

phù hợp với CSDL {r(1), s(1,2)}. Thể hiện M1 là một mô hình đặc biệt, bởi

vì nó là mô hình cực tiểu, theo nghĩa là chúng ta không thể làm cho một sự

kiện đúng trong mô hình trở thành thành sai mà vẫn nhận được mô hình. Để

ý rằng mô hình M2 không có đặc tính này, chẳng hạn có thể loại bỏ sự kiện

p(2), nghĩa là xem p(2) là sai, kết quả nhận được cũng là một mô hình. Hơn

nữa, mô hình cực tiểu M1 là duy nhất phù hợp với CSDL {r(1), s(1,2)}.

2. Tiếp cận theo quan điểm lý thuyết chứng minh:Theo quan điểm lý

thuyết chứng minh, các công thức của chương trình được xem là các tiên đề

được sử dụng trong chứng minh. Ngữ nghĩa của chương trình Datalog P

được định nghĩa là tập tất cả các sự kiện có thể được dẫn xuất được từ P bằng

cách áp dụng các quy tắc trong P và những sự kiện đã biết trong CSDL. Quá

trình có thể được thực hiện bắt đầu từ các sự kiện EDB đã cho và tiến hành

lặp trên các quy tắc trong chương trình từ vế phải sang vế trái, tức là từ thân

đến đầu, chẳng hạn ta xét ví dụ sau:

Ví dụ 1.16 Xem chương trình gồm các quy tắc sau:

r1: p(X,Y) q(X,Y)

r2: p(X,Y) p(X,Z) p(Z,Y)

trong đó q vị từ EDB , giả sử q(a,e) và q(e,d) là các sự kiện EDB. Từ quy tắc

-20-

Page 21: Gt Datalog 2

r1 ta suy ra p(a,e) và p(e,d) đúng và từ quy tắc r2 ta nhận được p(a,d) đúng.

Quá trình suy dẫn để chứng minh p(a,d) có thể mô tả như hình vẽ sau:

p(a,d)

p(a,e) p(e,d)

q(a,e) q(e,d)

Hình 1.1 Cây chứng minh của sự kiện p(a,d)

3. Tiếp cận theo quan điểm lý thuyết điểm bất động: Với các kết quả

nghiên cứu của Van Emden và Kowalski, Apt và Van Emden về lý thuyết

điểm bất động trong chương trình logic, ngữ nghĩa của chương trình Datalog

P cũng có thể được xác định là điểm bất động nhỏ nhất của toán tử hệ quả

trực tiếp TP. Đối với một thể hiện Herbrand I cho trước của chương trình

Datalog P, toán tử Tp xây dựng nên một thể hiện Herbrand của P là Tp(I) -

chứa các sự kiện được dẫn xuất bởi các quy tắc trong P từ những sự kiện

trong I.

Định nghĩa 1.24 Giả sử P là chương trình Datalog, BP là cơ sở Herbrand của

P. Ký hiệu là tập các tập con của BP. Toán tử hệ quả trực tiếp đối với

chương trình Datalog P là một ánh xạ Tp: được định nghĩa như sau:

Với mỗi I ,

Tp(I) = { A BP / quy tắc p q1 q2 ... qn của P và phép thế nền đối với

quy tắc này sao cho p = A và I (q1 q2 ... qn) }

Ví dụ 1.17 Xét quy tắc p(a,X) q(X,Y) r(Y,a) của chương trình Datalog P.

Giả sử q(b,c), r(c,a) thể hiện Herbrand I và phép thế nền = {X/b, Y/c}.

-21-

Page 22: Gt Datalog 2

Lúc đó ta có (q(X,Y) r(Y,a)) = q(b,c) r(c,a) I và p(a,X) = p(a,b) nên

suy ra p(a,b) Tp(I).

Định lý sau đây cho ta một tính chất quan trọng của toán tử Tp:

Định lý 1.4 Giả sử P là chương trình Datalog. Lúc đó:

(i) Toán tử TP là đơn điệu tăng và có điểm bất động nhỏ nhất.

(ii) Điểm bất động nhỏ nhất của toán tử TP chính là mô hình nhỏ nhất của P.

Mệnh đề sau đây được suy ra trực tiếp từ định lý trên:

Mệnh đề 1.1 Cho P là chương trình Datalog. Mô hình nhỏ nhất của P là giới

hạn của dãy TPn, n N, trong đó TP0 = , TP(i+1) = TP(TPi).Từ mệnh đề này ta có thuật toán:

Thuật toán 1.1

Vào: Chương trình Datalog P và DB là CSDL EDB đã cho.

Ra: Mô hình nhỏ nhất của P.

Phương pháp: Thuật toán được viết theo ngôn ngữ tựa Pascal như sau:

I := ;

J :=Tp(DB);

while J < > I do

begin

I := J;

J := Tp(DB I);

end;

output I;

Ví dụ 1.18 Xét chương trình Datalog P gồm các quy tắc:

r1 : path(X,Y) arc(X,Y)

r2 : path(X,Z) arc(X,Y) path(Y,Z)

Giả sử thể hiện Herbrand I của chương trình được cho bởi:

I = {arc(1,2), arc(2,3), arc(3,4), arc(4,5)}

Các bước lặp để tính mô hình nhỏ nhất của P:

-22-

Page 23: Gt Datalog 2

I0 = TP0 = I1 = TP1 = TP(I0) = {arc(1,2), arc(2,3), arc(3,4), arc(4,5)}

I2 = TP2 = TP(I1) = I1{path(1,2), path(2,3), path(3,4), path(4,5)}

I3 = TP3 = TP(I2) = I2{path(1,3), path(2,4), path(3,5)}

I4 = TP4 = TP(I3) = I3{path(1,4), path(2,5)}

I5 = TP5 = TP(I4) = I4{path(1,5)}

I6 = TP6 = TP(I5) = I5

Như vậy điểm bất động nhỏ nhất của TP chính là TP(I5), đó cũng chính là

mô hình nhỏ nhất của P.

Chú ý: Trong thuật toán 1.1, câu lệnh J := Tp(DB I) có thể thực hiện bằng

cách sử dụng các phép toán trong đại số quan hệ. Ullman đã đưa ra thuật toán

chuyển đổi các quy tắc của chương trình Datalog P thành các phương trình

đại số quan hệ và từ các phương trình đại số quan hệ này sẽ xác định được

mô hình nhỏ nhất của P. Phần tiếp theo sẽ trình bày chi tiết về vấn đề này.

Nhận xét: Trong cả ba cách tiếp cận trên, đối với trường hợp đơn giản là

chương trình Datalog, nghĩa là các quy tắc không chứa phủ định thì tất cả các

phương pháp đều cho ra cùng một kết quả. Trong trường hợp tổng quát, khi

cho phép sử dụng nhiều loại quy tắc phức tạp hơn thì ta có nhiều cách tiếp

cận khác nhau, dẫn đến nhiều câu trả lời khác nhau. Trong nhiều trường hợp,

không có gì đảm bảo chỉ có một câu trả lời duy nhất được tạo ra. Chẳng hạn,

xem chương trình chỉ gồm một quy tắc sau:

Trogiang(X) Giaovien(X), Giangvien(X)

Ta giả sử Anh là giáo viên, nghĩa là sự kiện giaovien(Anh) là đúng, ta

có hai mô hình cực tiểu, cả hai đều bao gồm sự kiện giaovien(Anh). Một mô

hình chứa sự kiện trogiang(A) và một mô hình chứa sự kiện giangvien(A):

{giaovien(Anh), trogiang(Anh)}

{giaovien(Anh), giangvien(Anh)}

Khi có nhiều mô hình cực tiểu thì mô hình nào được chọn ? Trong ví dụ

-23-

Page 24: Gt Datalog 2

này cả hai sự kiện giangvien(Anh) và trogiang(Anh) có thể suy ra bởi giả

thiết CWA.

Có một phương pháp cho phép ta chọn một mô hình cực tiểu "tốt nhất"

bằng phép xấp xỉ CWA, tuy nhiên phương pháp này không áp dụng được cho

tất cả chương trình Datalog mà chỉ một lớp con đặc biệt là chương trình

Datalog phủ định phân tầng. Ý tưởng cơ bản là : Khi tính quan hệ cho một

quy tắc có literal phủ định trong thân, trước hết tính quan hệ cho các vị từ có

dấu phủ định. Lúc đó CWA được áp dụng địa phương đối với các vị từ này.

Trong ví dụ trên, trước hết tính quan hệ cho vị từ giangvien. Trong chương

trình này không có các quy tắc và các sự kiện mà cho phép ta suy ra các sự

kiện có dạng giangvien(...), vì vậy tập các sự kiện dương đối với vị từ này là

rỗng. Điều này có nghĩa giangvien(Anh) không thể nhận được, bằng cách áp

dụng giả thiết CWA đối với vị từ này ta nhận được sự kiện âm

giangvien(Anh), vậy một mô hình của chương trình này là {giaovien(Anh),

trogiang(Anh)}.

Vấn đề này sẽ được xem xét chi tiết trong chương 3.

-24-

Page 25: Gt Datalog 2

CHƯƠNG 2

NGỮ NGHĨA CHƯƠNG TRÌNH DATALOG

Chương 2 sẽ trình bày ngữ nghĩa chương trình Datalog theo cách tiếp

cận của lý thuyết mô hình.

2.1 Một số định nghĩa

2.1.1 Các quy tắc an toàn

Để tìm mô hình nhỏ nhất của chương trình Datalog P ta chỉ cần tính

LFP(TP). Tuy nhiên trong thân quy tắc của P có thể có các vị từ xây dựng

trong và các biến có thể lấy giá trị trên một tập vô hạn, điều này dẫn đến các

quy tắc của P có thể dẫn tới các quan hệ vô hạn, chẳng hạn xét ví dụ sau :

Ví dụ 2.2 Quy tắc biggerThan(X,Y) X>Y với các biến X,Y lấy giá trị trên

tập số nguyên.

Rõ ràng quy tắc này sẽ xác định một quan hệ vô hạn.

Để tránh các quy tắc tạo ra các quan hệ vô hạn ta cần "giới hạn" các biến

xuất hiện trong quy tắc. Ý tưởng trực quan là : ta giả sử tất cả các vị từ

(không phải là xây dựng trong) trong thân quy tắc tương ứng với các quan hệ

hữu hạn, sau đó ta đảm bảo rằng với mỗi biến X có một tập hữu hạn các giá

tri VX sao cho với mọi phép gán giá trị trong VX cho các biến sẽ làm cho thân

quy tắc là true. Ta có định nghĩa sau đây về biến bị chặn :

Định nghĩa 2.1

(i) Mọi biến xuất hiện như là đối số trong một đích con của thân quy tắc là

bị chặn.

(ii) Biến X xuất hiện trong các vị từ xây dựng trong X = a hay X = Y

(trong đó a là hằng, Y là biến bị chặn) là bị chặn.

-25-

Page 26: Gt Datalog 2

Định nghĩa 2.2

(i) Một quy tắc là an toàn nếu tất cả các biến của nó là bị chặn.

(ii) Chương trình Datalog là an toàn nếu mọi quy tắc của nó là an toàn

Ví dụ 2.3 Xét quy tắc sau đây :

p(X,Y) q(X,Z) W = a Y = W

Biến X,Z,W,Y là bị chặn, do đó quy tắc này an toàn.

Ví dụ 2.4 Xét chương trình Datalog P được cho bởi các quy tắc sau đây :

p(X,Y) r(X,Y) X=a

p(X,Y) s(X,Z) r(Z,Y)

q(X,Y) p(X,b) X=Y

q(X,Y) p(X,Z) s(Z,Y)

Ta có P là chương trình Datalog an toàn

2.1.2 Các quy tắc chính tắc

Định nghĩa 2.3 Một quy tắc an toàn được gọi là chính tắc nếu đầu của quy

tắc có dạng p(X1,...,Xk) trong đó X1,...,Xk là các biến từng đôi một phân biệt

nhau.

Chú ý: Cho quy tắc r : p(Y1,...,Yk) s1s2...sn với Yi là các biến hoặc hằng,

si là các đích con. Nếu đầu quy tắc r có các biến hoặc hằng lặp lại thì ta ta

thực hiện phép biến đổi quy tắc r thành quy tắc r' như sau: Thay thế đầu của

quy tắc r bởi p(X1,...,Xk) trong đó Xi là các biến mới phân biệt nhau và thêm

vào thân quy tắc đích con Xi=Yi với mọi i. Nếu Yi là biến thì ta loại bỏ tất cả

đích con Xi=Yi và thay Yi bởi Xi tại tất cả vị trí tìm thấy trong quy tắc.

Ví dụ 2.5 Cho quy tắc :

r : p(U,U,a) q(U,V) q(V,W)

trong đó U là biến, a là hằng.

Biến đổi r bằng cách đưa vào các biến mới X,Y,Z ta được quy tắc :

-26-

Page 27: Gt Datalog 2

r' : p(X,Y,Z) q(U,V) q(V,W) X=U Y=U Z=a

Thay biến U bởi X trong các đích con q(U,V) , X=U, Y=U ta được quy tắc :

r'' : p(X,Y,Z) q(X,V) q(V,W) Y=X Z=a

Ví dụ 2.6 Cho các quy tắc :

r1: p(a,X,Y) r(X,Y)

r2 : p(X,Y,X) r(X,Y)

Áp dụng phép biến đổi ta được các quy tắc mới :

r'1 : p(U,V,W) r(X,Y) U=a V=X W=Y

r'2 : p(U,V,W) r(Y,X) U=X V=Y W=X

Biến đổi tiếp ta được các quy tắc sau :

r''1 : p(U,V,W) r(V,W) U=a

r''2 : p(U,V,W) r(V,U) W=U

Từ đây về sau ta giả sử các quy tắc là chính tắc.

2.2 Định giá chương trình Datalog không đệ quy

Trong phần này ta sẽ nghiên cứu chương trình Datalog không đệ quy.

Để ý rằng, nếu các quy tắc là không đệ quy thì ta có thể sắp thứ tự các nút

của đồ thị phụ thuộc sao cho nếu có một cung từ pi đến pj thì i<j. Lúc đó ta

có thể tính quan hệ đối với các vị từ p1 ,..., pn theo thứ tự này. Việc tính toán

của quan hệ đối với pi được chia thành hai bước :

Bước 1 : Đối với mỗi quy tắc r với pi là đầu quy tắc, tính quan hệ tương

ứng với thân quy tắc r. Quan hệ này có một thành phần đối với mỗi biến của

r. Để tính quan hệ đối với thân quy tắc r, ta dùng phép kết nối tự nhiên của

các quan hệ tương ứng với các đích con khác nhau của r và các biến xuất hiện

trong các vị trí tương ứng của các đích con được xem như các thuộc tính của

các quan hệ này. Do các quy tắc là không đệ quy, ta có thể giả thiết là các

quan hệ đối với mọi đích con là được tính toán rồi.

Bước 2 : Tính quan hệ đối với chính pi bằng cách thực hiện phép chiếu lên

-27-

Page 28: Gt Datalog 2

các thuộc tính của các quan hệ trong mỗi quy tắc có đầu là pi lên trên các

thành phần tương ứng đối với các biến của đầu quy tắc, sau đó lấy hợp trên

tất cả các quy tắc có pi là đầu.

Thuật toán 2.1 (Thuật toán tính quan hệ cho thân quy tắc)

Vào: Cho quy tắc Datalog r và giả sử thân của quy tắc r gồm các đích con

S1,...,Sn chứa các biến X1,...,Xm và

Giả sử đối với mỗi đích con Si = có một quan hệ Ri đã được tính,

với là các đối số, hoặc là biến hoặc là hằng.

Ra: Một biểu thức đại số quan hệ được ký hiệu :

EVAL-RULE(r,R1,...,Rn)

được tính từ các quan hệ R1,...,Rn sẽ tạo ra một quan hệ R(X1,...,Xm) của thân

quy tắc và chỉ chứa tất cả các bộ (a1,...,am) sao cho khi thay aj cho Xj (1 j

m) thì tất cả các đích con S1,...,Sn đều là true.

Phương pháp : Một biểu thức đại số quan hệ được xây dựng theo các bước

sau đây :

Bước 1. Đối với mỗi Si đặt Qi = .

Trong đó Vi là tập các thành phần mà mỗi biến xuất hiện trong các đối số của

Si (chính xác là thành phần mà tại đó biến X xuất hiện), Fi là hội của các điều

kiện sau đây :

a) Nếu tại vị trí thứ k của Si có một hằng ai thì Fi có dạng : $k = a

b) Nếu tại vị trí thứ k và h của Si đều chứa cùng một biến thì Fi có dạng :

$k = $h

Bước 2. Đối với mỗi biến X không tìm thấy trong các đích con thông

thường, X là biến), ta tính một biểu thức DX tạo ra quan hệ một ngôi chứa tất

cả giá trị mà X có thể có và làm cho các đích con là true. Vì quy tắc là an

toàn nên có một vài biến Y mà X=Y, với Y là biến bị chặn.

a) Nếu Y = a (hằng) thì DX = {a}

b) Nếu Y là biến xuất hiện như đối số thứ j của đích con thông thường Si

-28-

Page 29: Gt Datalog 2

thì DX =

Bước 3. Đặt E là nối tự nhiên của tất cả Qi được xác định ở bước 1 và DX

được xác định ở bước 2. Trong phép nối này ta xem Qi như là một quan hệ

mà các thuộc tính là các biến xuất hiện trong S i và xem DX là quan hệ chứa

thuộc tính X.

Bước 4. Đặt EVAL-RULE(r, R1,...,Rn) = trong đó F là hội của XY

đối với mỗi đích con xây dựng trong XY xuất hiện trong p1,...,pn và E là

biểu thức được xác định trong bước 3. Nếu không có đích con xây dựng

trong thì biểu thức đòi hỏi chính là E.

Ví dụ 2.7 Cho quy tắc r :

p(X,Y) q(a,X) r(X,Z,X) s(Y,Z)

Giả sử Q,R và S là các quan hệ tương ứng với các đích con q, r, s. Bởi vì đích

con đầu tiên đòi hỏi các bộ của Q có thành phần đầu tiên là a nên ta cần xây

dựng một quan hệ với thuộc tính là X và chỉ chứa các thành phần thứ hai của

những bộ này, như vậy ta định nghĩa quan hệ :

T(X) =

T(X) = được xây dựng từ bước 1 của thuật toán từ đích con đầu

tiên q(a,X) của quy tắc đã cho, T(X) chính là Q1 trong thuật toán.

Quan hệ R có thành phần thứ nhất và thành phần thứ ba là các biến giống

nhau nên ta định nghĩa quan hệ đối với đích con này :

U(X,Z) =

U(X,Z) = là Q2 được xây dựng từ đích con thứ hai r(X,Z,X).

Q3 được xây dựng từ đích con thứ ba S(Y,Z) chính là S(Y,Z).

Do quy tắc này không có các đích con xây dựng trong nên bước 2 và bước

4 được bỏ qua. Vậy :

EVAL-RULE(r,Q,R,S) = T(X) U(X,Z) S(Y,Z) là biểu thức cuối cùng

của thân quy tắc này.

Quan hệ này bao gồm các bộ (x,y,z) thỏa mãn :

-29-

Page 30: Gt Datalog 2

1. (a,x) thuộc Q

2. (x,z,y) thuộc R và y=x

3. (y,z) thuộc S

Ví dụ 2.8 Xét quy tắc:

cousin(X,Y) parent(X,Xp) parent(Y,Yp) sibling(Xp,Yp)

Giả sử quan hệ P,S được tính đối với các vị từ parent và sibling tương ứng.

Quan hệ đối với thân quy tắc này là:

R(X,Xp,Y,Yp) = P(X,Xp) P(Y,Yp) S(Xp,Xp) (1)

Quan hệ R(X,Xp,Y,Yp) bao gồm các bộ (a,b,c,d) thỏa mãn :

1. (a,b) thuộc P

2. (c,d) thuộc P và

3. (b,d) thuộc S.

Ví dụ 2.9 Xét quy tắc:

sibling(X,Y) parent(X,Z) parent(Y,Z) XY

Quan hệ đối với thân quy tắc này là :

Q(X,Y,Z) = (2)

Quan hệ Q(X,Y,Z) bao gồm các bộ (x,y,z) thỏa mãn :

1. (x,z) thuộc P

2. (y,z) thuộc P và

3. xy

Định lý 2.1 Thuật toán 1 là đúng theo nghĩa quan hệ R chứa và chỉ chứa các

bộ (a1,...,am) sao cho khi ta thay aj cho Xj thì mọi đích con Si là true.

Thuật toán 2.2 (Tính quan hệ đối với vị từ không đệ quy)

Vào: Một chương trình Datalog không đệ quy và ứng với mỗi vị từ EDB có

một quan hệ EDB tương ứng cho trước.

Ra: Đối với mỗi vị từ IDB pi ta nhận được một biểu thức đại số quan hệ Pi

tương ứng dựa trên các quan hệ EDB cho trước.

Phương pháp : Trước hết ta biến đổi các quy tắc sao cho đầu của nó không

-30-

Page 31: Gt Datalog 2

có hằng hay biến lặp lại. Tiếp theo ta xây dựng đồ thị phụ thuộc đối với

chương trình Datalog và sắp thứ tự các vị từ p1,...,pn sao cho nếu trong đồ thị

phụ thuộc có một cung đi từ pi đến pj thì i<j Chúng ta có thể làm như vậy vì

chương trình Datalog là không đệ quy và do đó đồ thị phụ thuộc không có

chu trình. Lúc đó với i=1,...,n dạng của biểu thức đối với quan hệ Pi (của pi)

như sau :

Nếu pi là vị từ EDB, đặt Pi là quan hệ cho trước đối với pi , ngược lại nếu pi

là vị từ IDB thì thực hiện theo các bước sau :

Bước 1. Đối với mỗi quy tắc r có pi là đầu quy tắc, dùng thuật toán 2.1 để tìm

một biểu thức Er mà tạo ra quan hệ Rr đối với thân của quy tắc r.

Bước 2. Vì chương trình là không đệ quy nên tất cả các vị từ xuất hiện trong

thân của quy tắc r đã có các biểu thức đối với các quan hệ của chúng trong

các quan hệ EDB. Thay thế biểu thức thích hợp đối với mỗi hiện hành của

một quan hệ IDB trong biểu thức Er để được một biểu thức mới Fr.

Bước 3. Đặt tên lại các biến nếu cần thiết, chúng ta sẽ giả sử rằng đầu của

mỗi quy tắc đối với pi là pi(X1,...,Xk) .Lúc đó biểu thức đối với Pi là hợp của

tất cả đối với mọi quy tắc r có pi là đầu.

Nói cách khác, giả sử Hi là tập các quy tắc có đầu là pi, giả thiết đầu của

các pi có dạng pi(X1,...,Xk) trong đó Xi Xj với mọi i j, Q1,...,Qm là các vị

từ EDB, P1,...,Pn là các vị từ IDB, lúc đó biểu thức đối với Pi sẽ là :

EVAL(pi, Q1,...,Qm, P1,...,Pn) =

trong đó Fr = EVAL-RULE(r, Q1,...,Qm, P1,...,Pn)

Ví dụ 2.10 Cho chương trình Datalog như sau :

(1) p(a,Y) r(X,Y)

(2) p(X,Y) s(X,Z) r(Z,Y)

(3) q(X,X) p(X,b)

(4) q(X,Y) p(X,Z) s(Z,Y)

Trong đó r, s là các vị từ EDB có các quan hệ cho trước R, S

-31-

Page 32: Gt Datalog 2

Vị từ p, q là các vị từ IDB, đối với mỗi vị từ này ta cần tính các quan hệ P và

Q.

Trước hết ta biến đổi các quy tắc này (chỉ cần sửa đổi quy tắc (1) và (3)), ta

được các quy tắc mới như sau :

(1) p(X,Y) r(Z,Y) X=a

(2) p(X,Y) s(X,Z) r(Z,Y)

(3) q(X,Y) p(X,b) X=Y

(4) q(X,Y) p(X,Z) s(Z,Y)

Thứ tự thích hợp để làm việc là p trước rồi đến q vì q phụ thuộc vào p

nhưng không đão lại. Theo thuật toán 2.1 thì quan hệ đối với thân quy tắc (1)

là : R(Z,Y) DX(X) trong đó DX(X) = {a}, quan hệ đối với thân quy tắc (2)

là : S(X,Z) R(Z,Y). Cả hai biểu thức này phải chiếu lên danh sách các

thuộc tính X,Y trước khi lấy phép hợp. Như vậy biểu thức đối với P là :

P(X,Y) =

Quan hệ đối với quy tắc 3 được tính như sau : Dùng thuật toán 2.1, biểu thức

đối với đích con p(X,b) là :

Ở đây Z là biến được chọn tùy ý không xuất hiện trong phép chiếu

Biểu thức này sinh ra một quan hệ trên thuộc tính X và ta cần một biểu thức

mà có thể tạo ra tất cả các giá trị có thể có của Y. Do Y=X nên các giá trị

của X có thể là giá trị của Y, vì vậy ta có thể lấy một đối số ở đó X xuất hiện,

chính là đối số đầu tiên của P, làm thành một miền của Y. Như vậy miền này

có thể có thể biểu thị bởi , w là biến tùy ý. Sau đó ta lấy tích của

các biểu thức đối với p(X,b) với miền của Y, ta chọn X=Y do đích con X=Y

trong quy tắc (3). Vậy biểu thức của thân quy tắc (3) là :

Cuối cùng, biểu thức đối với thân quy tắc (4) là : p(X,Z) S(Z,Y)

vậy biểu thức đối với quan hệ Q là :

-32-

Page 33: Gt Datalog 2

Q(X,Y)=

Định lý 2.2 Thuật toán 2.2 tính đúng quan hệ đối với mỗi vị từ theo nghĩa

biểu thức xây dựng đối với mỗi vị từ IDB sẽ sinh hai điều sau đây :

1. Tập các sự kiện đối với các vị từ đó có thể chứng minh từ các sự kiện

EDB và các quy tắc của chương trình Datalog.

2. Mô hình cực tiểu duy nhất của chương trình Datalog.

2.3 Định giá chương trình Datalog đệ quy

2.3.1 Hệ phương trình đại số quan hệ ứng với chương trình DatalogTrong trường hợp tổng quát, Thuật toán 2.2 không thể áp dụng cho các

chương trình Datalog đệ quy, bởi vì không thể sắp thứ tự cho các vị từ để

thuật toán có thể áp dụng. Điều đó có nghĩa bất cứ khi nào có một chu trình

trong đồ thị phụ thuộc thì vị từ đầu tiên trong chu trình đó mà chúng ta thử

định giá sẽ có một quy tắc chứa một đích con mà biểu thức quan hệ của nó là

chưa thể tìm được.

Tuy nhiên sự tiếp cận của lý thuyết chứng minh vẫn còn có nghĩa nếu từ

một quy tắc ta nhận được một vài sự kiện và sau đó dùng các sự kiện mới này

trong thân quy tắc để nhận được các sự kiện khác. Nếu chúng ta bắt đầu với

một cơ sở dữ liệu hữu hạn và ta chỉ dùng các quy tắc Datalog thì chỉ có một

số hữu hạn các sự kiện khác nhau là có thể nhận được, chúng phải có dạng

p(a1,..,ak) trong đó p là một vị từ IDB đã cho trong các quy tắc và a1,..,ak là

các hằng xuất hiện trong cơ sở dữ liệu.

Xét chương trình Datalog với các quan hệ EDB R1,...,Rk đã cho và các

quan hệ IDB P1,...,Pm cần tính. Với mỗi i (1 i m) ta có thể biểu diễn các

sự kiện có thể chứng tỏ đối với vị từ pi (tương ứng với quan hệ IDB Pi) bằng

cách gán :

Pi :=

trong đó EVAL là hợp của EVAL-RULE đối với mỗi quy tắc của pi sau khi

đã được chiếu lên trên các biến của đầu quy tắc. Nếu ta bắt đầu với tất cả Pi là -33-

Page 34: Gt Datalog 2

rỗng và thực hiện một phép gán như thế đối với mỗi i, lặp lại nhiều lần như

vậy thì đến một lúc nào đó sẽ không thể có các sự kiện nào là được thêm vào

trong các quan hệ của Pi. Như vậy, phép gán trở thành phép bằng và tập các

sự kiện có thể chứng minh thỏa mãn các phương trình :

Pi = = Ei(P1,...,Pm)

 

Hệ phương trình này được gọi là hệ phương trình đại số quan hệ tương ứng

với chương trình Datalog P.

Chú ý :

Trong trường hợp đơn giản, nếu P là một chương trình Datalog không đệ

quy thì ta có thể biến đổi hệ phương trình trên như sau :

Ta có thể đánh số lại các vị từ pi sao cho nếu i<j thì không tồn tại quy tắc

với đầu là pi và thân chứa pj , khi đó trong Ei không chứa các Pj với j i. Hệ

phương trình quan hệ ở trên trở thành :

P1 = E1(,...,)

P2 = E2(P1,,...,)

P3 = E3(P1,P2,,...,)

...

Pn = En(P1,P2,...,Pn-1,)

Ví dụ 2.11 Xét chương trình Datalog:

(1) sibling(X,Y) parent(X,Z) parent(Y,Z) XY

(2) cousin(X,Y) parent(X,Xp) parent(Y,Yp) sibling(Xp,Yp)

(3) cousin(X,Y) parent(X,Xp) parent(Y,Yp) cousin(Xp,Yp)

(4) related(X,Y) sibling(X,Y)

(5) related(X,Y) related(X,Z) parent(Y,Z)

(6) related(X,Y) related(Z,Y) parent(X,Z)

Gọi S ,C và R lần lượt là quan hệ tương ứng với các vị từ IDB sibling,

cousin, ralated, P là quan hệ tương ứng với các vị từ EDB parent.

-34-

Page 35: Gt Datalog 2

Từ chương trình Datalog trên ta có hệ phương trình đại số quan hệ sau đây:

2.3.2 Các điểm bất động của hệ phương trình DatalogĐịnh nghĩa 2.4 Giả sử R1,...,Rk là các quan hệ EDB tương ứng với các vị từ

EDB r1,...,rk. Gọi P1,...,Pm là các quan hệ tương ứng với các vị từ IDB p1,...,pm.

Một điểm bất động của hệ phương trình Datalog là một lời giải hệ phương

trình Datalog.

Định nghĩa 2.5 Một điểm bất động P1,...,Pm của hệ phương trình Datalog

(ứng với các quan hệ EDB R1,...,Rk ) cùng với các quan hệ này tạo ra một mô

hình của các quy tắc đã sinh ra các phương trình.

Nếu S1= và S2= là hai nghiệm của tập các phương trình

đã cho, ta bảo S1S2 nếu quan hệ là một tập con của quan hệ

. Lúc đó So được gọi là điểm bất động nhỏ nhất (least fixed point)

của tập các phương trình đối với các quan hệ EDB R1,...,Rk nếu mọi nghiệm

Si ta đều có SoSi và tổng quát hơn, So là điểm bất động cực tiểu (minimal

fixed point) nếu không có điểm bất động S nào khác mà SSo.

Chú ý: Nếu có điểm bất động nhỏ nhất thì đó là điểm bất động cực tiểu duy

nhất, tuy nhiên có một vài điểm bất động cực tiểu mà không thể so sánh bởi

quan hệ và trong trường hợp đó không có điểm bất động nhỏ nhất.

Tuy nhiên, không phải mọi mô hình của tập các quy tắc Datalog đều là

điểm bất động đối với hệ phương trình Datalog của nó bởi vì mô hình có thể

có "quá nhiều" sự kiện và một vài sự kiện xuất hiện ở vế trái nhưng không

xuất hiện ở vế phải của các phương trình. Ta sẽ thấy điều này qua ví dụ sau

đây :

Ví dụ 2.12 Cho chương trình Datalog sau đây :

(1) path(X,Y) arc(X,Y)-35-

Page 36: Gt Datalog 2

(2) path(X,Y) path(X,Z) path(Z,Y)

trong đó arc là vị từ EDB và arc(X,Y) là true nếu có một cung từ nút X đến

nút Y, path là vị từ IDB.

Quy tắc (1) nói rằng một đường đi có thể là một cung đơn và quy tắc (2)

nói rằng việc kết nối đường đi từ X tới Z và một đường đi từ Z tới Y sẽ cho ta

một đường đi từ X tới Y.

Gọi A là quan hệ EDB tương ứng với vị từ arc, P là quan hệ tương ứng với

vị từ IDB path, ta có quan hệ đối với vị từ path như sau :

(3)

Giả sử tập các nút là {1,2,3} và A={(1,2),(2,3)}

Quy tắc (1) cho ta (1,2) và (2,3) ở trong P và từ quy tắc (2) suy ra (1,3) ở

trong P. Tuy nhiên ta không đòi hỏi suy diễn thêm sự tồn tại các đường đi

khác, bởi vì tập {(1,2),(2,3),(1,3)} là một nghiệm của phương trình đại số

quan hệ (3) bởi vì đẳng thức sau là đúng :

{(1,2),(2,3),(1,3)} = {(1,2),(2,3)}

Nghiệm này là được chứng minh theo ngữ nghĩa của lý thuyết chứng minh

bởi vì ta nhận được nó từ quan hệ EDB A một cách chính xác những gì mà

quy tắc mang lại.

Dễ thấy rằng đó là mô hình cực tiểu của các quy tắc hoặc là điểm bất động

của phương trình (3).

Tuy nhiên có các lời giải khác đối với phương trình (3). Để ý rằng (1,1) là

ở trong P (trong quy tắc (2) lấy X=Y=Z=1). Các quy tắc đã cho không đưa ra

được các đường đi nàokhác nữa, với A={(1,2),(2,3)}, ta có P= {(1,1),(1,2),

(2,3),(1,3)} Như vậy một nghiệm khác của phương trình (3) là : {(1,1),(1,2),

(2,3),(1,3)} bởi vì đẳng thức sau là đúng :

{(1,1),(1,2),(2,3),(1,3)}= {(1,2),(2,3)}

Mặc khác nếu vẫn cho A={(1,2),(2,3)}, ta không thể đặt P={(1,1),(1,2),(2,3),

-36-

Page 37: Gt Datalog 2

(1,3),(3,1)}

bởi vì :

Ta có (3,2) là một bộ không xuất hiện ở vế trái là tập {(1,1),(1,2),(2,3),(1,3),

(3,1)}.

Cuối cùng ta sẽ xét một mô hình mà không có điểm bất động.

Đặt A = và P={(1,2)}

Trong quy tắc (1) không có cách thực hiện đối với thân quy tắc arc(X,Y)

trở thành true vì A = . Cũng vậy thân của quy tắc (2) cũng không thể true.

Vậy các quy tắc (1) và (2) luôn luôn là true. Do đó {(1,2) }là một mô hình

của các quy tắc đã cho. Tuy nhiên phương trình (3) không thể là true vì vế

trái là{(1,2)} nhưng vế phải là . Từ đó P={(1,2)} không phải là điểm bất

động của phương trình đại số quan hệ (3).

2.3.3 Giải hệ phương trình Datalog đệ quy bằng thuật toán sơ đẳng

Ta có thể giải hệ phương trình đại số quan hệ bằng cách giả sử ban đầu các

Pi là rỗng và các quan hệ EDB Ri cho trước. Lúc đó áp dụng EVAL đối với

các giá trị hiện tại của các quan hệ IDB và các giá trị của các quan hệ EDB

để có các giá trị mới đối với các quan hệ IDB. Quá trình này cứ lặp lại cho

đến khi không thể thay đổi các quan hệ Pi nữa.

Thuật toán 2.3 (Thuật toán sơ đẳng) :

Vào: Một chương trình Datalog với các vị từ EDB r1,...,rk tương ứng với các

quan hệ EDB R1,....,Rk cho trước và các vị từ IDB p1,...,pm.

Ra: Hệ phương trình Datalog của chương trình Datalog có nghiệm là điểm

bất động nhỏ nhất.

Phương pháp : Trước hết từ các quy tắc của chương trình Datalog ta xây

dựng được hệ phương trình đại số quan hệ. Hệ phương trình này có các biến

P1,...,Pm tương ứng với các vị từ IDB p1,...,pm, và phương trình đối với Pi là :

Pi = EVAL(pi, R1,...,Rk, P1,...,Pm)

-37-

Page 38: Gt Datalog 2

Lúc đó ở bước khởi đầu ta cho các Pi là rỗng và áp dụng lặp lại nhiều lần

EVAL để thu được các giá trị mới của Pi. Khi không thể thêm được các bộ

nào nữa đối với mọi quan hệ IDB, ta thu được điểm bất động nhỏ nhất.

Chi tiết thuật toán được diễn tả theo ngôn ngữ "tựa" Pascal như sau :

for i :=1 to m do

Pi = ;

repeat

for i :=1 to m do

Qi :=Pi; /*lưu giá trị cũ của Pi */

for i :=1 to m do

Pi := EVAL(pi, R1,...,Rk, Q1,...,Qm)

until Pi = Qi i=1,...,m;

output Pi , i=1,...,m

Định lý 2.3 Thuật toán 2.3 sẽ tạo ra điểm bất động nhỏ nhất của hệ phương

trình Datalog được tạo ra từ các quy tắc của chương trình Datalog.

Chứng minh : Để ý rằng các bộ được đặt trong Pi bao gồm các ký hiệu hoặc

thuộc các quan hệ EDB hoặc thuộc trong chính các quy tắc.

Trước tiên ta chứng minh bằng quy nạp theo các bước lặp : Đối với mỗi i,

thì giá trị của Pi được tạo ra ở bước j là một tập các bộ bao gồm các bộ được

tạo ra được tạo ra ở bước trước đối với quan hệ đó.

Thật vậy, trước bước lặp 1 thì các Pi = vậy yêu cầu trên đúng.

Để quy nạp, chú ý rằng phép toán EVAL là đơn điệu. Ở bước j>1 các đối

số Ri của EVAL trong thuật toán là không thay đổi và Qi là những giá trị của

Pi được tạo ra ở bước j-1. Trong việc so sánh, các đối số của EVAL ở bước j-

1 là giống với các Ri và các giá trị của các Pi được tạo ra ở bướ j-2 (nếu j=2

thì tất cả các Pi là rỗng). Bằng giả thiết quy nạp, các giá trị của P i được sinh

ra ở bước j-1 là bao hàm các giá trị tương ứng ở bước j-2. Do tính đơn điệu

của EVAL nên giá trị của mỗi Pi được sinh ra ở bước j là một tập bao hàm

-38-

Page 39: Gt Datalog 2

các giá trị của Pi ở bước j-1.

Vậy mỗi Pi tạo ra một dãy các giá trị Vi1,Vi2,... và là dãy tăng :

Vi1 Vi2 ... Vik ...

Mặc khác để ý rằng đối với một tập các quy tắc đã cho thì có một giới hạn

trên đối với bậc của các vị từ, giả sử là a. Cũng vậy đối với bảng các quan hệ

đã cho của các vị từ EDB có một số hữu hạn các ký hiệu xuất hiện trong cơ

sở dữ liệu và các quy tắc, giả sử là b. Lúc đó có nhiều nhất ba bộ khác nhau

có thể xuất hiện trong mọi quan hệ. Như vậy không thể có trường hợp Pi gia

tăng số các bộ của nó vượt quá ba bộ trong các bước lặp. Vì có m vị từ IDB

nên không thể có nhiều hơn mba bước lặp mà Pi có thêm các bộ mới. Vậy sau

không quá mba bước lặp thuật toán sẽ dừng.

Bây giờ ta chứng minh khi thuật toán dừng thì nó tạo ra điểm bất động nhỏ

nhất. Trước hết dễ dàng quy nạp trên số bước lặp rằng nếu một bộ được

đưa vào Pi thì ở trong Pi trong mọi lời giải của các phương trình bởi vì

phương trình đối với Pi chính xác là phép gán đối với Pi :

Pi := EVAL(pi, R1,...,Rk, Q1,...,Qm)

Nếu mọi bộ trong mọi quan hệ ở vế phải đã được chứng minh là có trong

mọi lời giải thì bất kỳ bộ nào xuất hiện trong vế trái cũng thuộc P i trong mọi

lời giải.

Như vậy nếu So là danh sách các quan hệ được sinh ra theo thuật toán thì So

thì So  S với mọi lời giải S. Để ý rằng theo thuật toán đưa ra thì So chính là

nghiệm của hệ. Tóm lại khi thuật toán dừng thì nó tạo ra điểm bất động nhỏ

nhất.

Ví dụ 2.13 Xét chương trình Datalog P ở ví dụ 2.11 Giả sử đã biết các quan

hệ EDB của P như sau :

P={ca,da,db,eb,fc,gc,hd,id,ie,fe,jf,jh,kg,ki}

Áp dụng thuật toán sơ đẳng để tìm mô hình nhỏ nhất cho chương trình

Datalog ở trên, sau 7 bước lặp thuật toán sẽ dừng, kết quả như sau:

-39-

Page 40: Gt Datalog 2

Bước S C R

1 cd de fg hi if

2 cd de fg hi if fh fi gh gi hi ii jk cd de fg hi if

3 cd de fg hi if fh fi gh gi hi ii jk

jj kk

cd de fg hi if ch

ci di df fk hk ij

gd he ie jg

4 cd de fg hi if fh fi gh gi hi ii jk

jj kk

cd de fg hi if ch

ci di df fk hk ij

gd he ie jg je ke

cj ck dk dj gh gi

hf ii jk

5 cd de fg hi if fh fi gh gi hi ii jk

jj kk

cd de fg hi if ch

ci di df fk hk ij

gd he ie jg je ke

cj ck dk dj gh gi

hf ii jk hj ik jf

kg

6 cd de fg hi if fh fi gh gi hi ii jk

jj kk

cd de fg hi if ch

ci di df fk hk ij

gd he ie jg je ke

cj ck dk dj gh gi

hf ii jk hj ik jf

kg jj kk

7 cd de fg hi if fh fi gh gi hi ii jk

jj kk

cd de fg hi if ch

ci di df fk hk ij

gd he ie jg je ke

-40-

Page 41: Gt Datalog 2

cj ck dk dj gh gi

hf ii jk hj ik jf

kg jj kk

2.3.4 Giải hệ phương trình Datalog đệ quy bằng thuật toán bán sơ đẳng

Vấn đề mà ta quan tâm là khi tính các giá trị mới của P i, các bộ mới nào

được thêm vào đối với các vị từ IDB ở bước trước.

Điều quan trọng là khi thực hiện thủ tục EVAL, đối với mỗi bộ được

sinh ra ta có thể xác định một quy tắc cụ thể cho pi mà từ quy tắc đó bộ được tạo ra. Hơn nữa đối với mỗi đích con của quy tắc đó ta có thể xác định

một bộ của quan hệ đối với đích con đó được dùng để tạo ra bộ .

Phương pháp xây dựng thuật toán bán sơ đẳng như sau :

Theo phương pháp của thuật toán sơ đẳng, khi tính Pi ở bước k+1 ta cần

phải tính lại Pi ở bước k, điều này gây ra việc lãng phí thời gian và bộ nhớ.

Thuật toán bán sơ đẳng sau đây khắc phục được nhược điểm đó, để tính

ở bước k+1 ta chỉ cần tính các bộ mới được sinh ra :

Xét quy tắc r với các đích con thông thường S1,...,Sn (trong danh sách này

các đích con không phải là vị từ xây dựng trong). Đặt R1,...,Rn là các quan hệ

hiện tại tương ứng với các đích con S1,...,Sn và R1,..., Rn là danh sách các

quan hệ gia tăng tương ứng (Ri là tập hợp các bộ thêm vào của Ri ở vòng

lặp gần nhất của thuật toán sơ đẳng). Nhắc lại EVAL-RULE(r,T1,...,Tn) là

biểu thức đại số quan hệ được dùng ở thuật toán 2.1 để tính quan hệ đối với

thân của quy tắc r, khi đó thuật toán dùng quan hệ Ti như là quan hệ đối với

đích con Si (Ti là Ri trong thuật toán 2.1). Lúc đó quan hệ gia tăng đối với

quy tắc r là hợp của n quan hệ :

EVAL-RULE(r,R1,...,Ri-1, Ri,Ri+1..., Rn) với mọi i=1,...,n

Như vậy, trong mỗi biểu thức ở trên thì chính xác có một quan hệ gia tăng

được thay thế đối với toàn bộ quan hệ .

-41-

Page 42: Gt Datalog 2

Ta định nghĩa :

EVAL-RULE-INCR(r,R1,...,Rn,R1,...,Rn) =

Ta giả sử đối với các vị từ EDB r1,...,rk được cho tương ứng bởi các quan

hệ EDB R1,...,Rk. Đối với mỗi vị từ IDB p1,...,pm được cho tương ứng với các

quan hệ IDB P1,...,Pm và các quan hệ gia tăng tương ứng P1,...,Pm. Gọi p là

vị từ IDB, định nghĩa :

EVAL-INCR(p,R1,...,Rk,P1,...,Pm,P1,...,Pm) là hợp của các EVAL-RULE-

INCR sinh ra đối với mỗi quy tắc chứa p. Trong EVAL-RULE-INCR các

quan hệ gia tăng đối với vị từ EDB là rỗng, vì vậy các hạng thức đối với các

đích con này là các vị từ EDB không xuất hiện trong phép hợp đối với

EVAL-RULE-INCR.

Ví dụ 2.14 Xét lại ví dụ 2.11 Gọi P,S,C,R là các quan hệ tương ứng với các

vị từ parent, sibling, cousin, related và S, C, R là các quan hệ gia tăng

tuơng ứng đối với các vị từ IDB này. Bởi vì sibling được định nghĩa chỉ trong

các hạng thức của quan hệ EDB parent nên ta có :

EVAL-INCR(sibling,P) = Vị từ cousin được định nghĩa bởi quy tắc (2) và (3) và những quy tắc này

có duy nhất một vị từ IDB : sibling trong quy tắc (2) và cousin trong quy tắc

(3). Như vậy đối với mỗi quy tắc này thì EVAL-RULE-INCR có duy nhất

một hạng thức và công thức đối với vị từ cousin là hợp của các hạng thức ở

mỗi quy tắc (2) và (3) :

EVAL-INCR(cousin,P,S,C,S,C)=

Sau cùng công thức ước lượng gia tăng đối với related được tính tương tự

như sau :

EVAL-INCR(related,P,R,S,R,S)=

S(X,Y)

-42-

Page 43: Gt Datalog 2

Thuật toán 2.4 (Thuật toán bán sơ đẳng )

Vào: Một tập hợp các quy tắc Datalog chính tắc với các vị từ EDB r1,...,rk

tương ứng với các quan hệ EDB R1,....,Rk cho trước và các vị từ IDB p1,...,pm

tương ứng với các quan hệ IDB cần tính P1,...,Pm.

Ra: Điểm bất động nhỏ nhất của hệ phương trình đại số quan hệ nhận được

từ các quy tắc này.

Phương pháp : Ta dùng EVAL một lần để tính các quan hệ khởi đầu và rồi

dùng EVAL-INCR lặp đi lặp lại trên các quan hệ IDB gia tăng. Trong chi tiết

thuật toán sau, đối với mỗi vị từ IDB pi có một quan hệ Pi tương ứng mà giữ

tất cả các bộ và có một quan hệ gia tăng Pi chỉ giữ những bộ được thêm

vào ở bước trước.

Chi tiết thuật toán được diễn tả theo ngôn ngữ "tựa" Pascal như sau :

for i :=1 to m do

begin

Pi= EVAL(pi, R1,...,Rk, ,...,);

Pi = Pi;

end;

repeat

for i :=1 to m do

Qi := Pi; /*lưu giá trị cũ của Pi */

for i :=1 to m do

begin

Pi := EVAL-INCR(pi,R1,...,Rk,P1,...,Pm, Q1,..., Qm);

Pi := Pi-Pi /*Loại bỏ những bộ "mới" thực ra đã xuất

hiện trước đó */

end;

for i :=1 to m do

Pi := PiPi;

-43-

Page 44: Gt Datalog 2

until Pi := i=1,...,m;

output Pi , i=1,...,m

Định lý 2.4 Thuật toán 2.4 tính đúng điểm bất động nhỏ nhất của chương

trình Datalog đã cho và dừng.

Chứng minh : Ta sẽ chỉ ra rằng thuật toán 2.3 và 2.4 cho ra cùng một tập các

bộ đối với mỗi quan hệ IDB ở mỗi bước lặp. Do thuật toán 2.3 tìm được điểm

bất động nhỏ nhất như vậy thuật toán 2.3 cũng tìm được điểm bất động nhỏ

nhất. Giả thiết quy nạp hiện tại rằng một bộ được thêm ở một vài quan hệ

IDB P trong bước j của thuật toán 2.3 mà không được đặt vào quan hệ đó ở

các bước trước sẽ được đặt vào trong cả hai P và P ở bước lặp j của thuật

toán 2.4. Rõ ràng ở bước 1 điều này là đúng bởi vì cùng một EVAL được

dùng trong cả hai thuật toán.

Để quy nạp, chú ý rằng ở bước i nếu một bộ được thêm vào đối với một

vài quan hệ IDB P và bộ chưa có trong quan hệ P ở các bước trước thì phải

có một vài quy tắc r chứa vị từ p (vị từ tương ứng với quan hệ P) và các bộ

trong các quan hệ đối với tất cả đích con của r sao cho :

(i) Những bộ này sinh ra (ii) Có ít nhất một bộ được thêm vào quan hệ T của nó ở bước lặp i-1

Bằng giả thiết quy nạp với j = i-1 và theo nhận xét (ii) ở trên thì ở trong

T khi ta bắt đầu bước lặp i của thuật toán 2.4. Do đó EVAL-INCR dùng T

(nói đúng hơn là các Qi với Qi := T) sẽ sinh ra bộ bởi vì nó dùng toàn

bộ các quan hệ đối với các đích con ngoại trừ một quan hệ mà tạo ra và sẽ

được tạo ra bởi T.

Ví dụ 2.15 Xét chương trình Datalog P được cho trong ví dụ 2.11

Ở bước lặp đầu tiên, chỉ có quan hệ S đối với sibling là có chứa một số bộ,

bởi vì chỉ có vị từ đó có một quy tắc mà không chứa vị từ IDB trong thân.

Như vậy ở vòng lặp thứ hai S và S cả hai đều là quan hệ đầy đủ đối với

sibling trong khi các quan hệ IDB khác và các quan hệ gia tăng đều là

-44-

Page 45: Gt Datalog 2

rỗng.Trong bước 2, tức là trong lần lặp đầu tiên của repeat thì S = và ta

tính được :

C=C=

R=R=S

Ở bước 3 vì S là rỗng, các quy tắc (2) và (4) không sinh thêm các bộ mới

nhưng vì C và R có một vài bộ, như vậy ta tính các C và R tiếp theo

công thức :

C=

R=

Các giá trị C và R lại được đưa vào C và R Lặp lại các bước khác theo

cùng phương pháp như vậy.

Thuật toán kết thúc sau 6 bước lặp, kết quả như sau :

Bước S C R S C R

1 fh fi gh

gi hi ii jk

cd de fg

hi if

cd de fg hi

if

fh fi gh gi

hi ii jk

cd de

fg hi if

2 jj kk ch ci di

df fk hk

ij gd he

ie jg

cd de fg hi

if

fh fi gh gi

hi ii jk jj

kk

cd de

fg hi if

ch ci

di df

fk hk

ij gd

he ie

jg

3 je ke cj

ck dk dj

gh gi hf

ii jk

cd de fg hi

if

fh fi gh gi

hi ii jk jj

kk

cd de

fg hi if

ch ci

di df

-45-

Page 46: Gt Datalog 2

fk hk

ij gd

he ie

jg je

ke cj

ck dk

dj gh

gi hf ii

jk

4 hj ik jf

kg

cd de fg hi

if

fh fi gh gi

hi ii jk jj

kk

cd de

fg hi if

ch ci

di df

fk hk

ij gd

he ie

jg je

ke cj

ck dk

dj gh

gi hf ii

jk hj ik

jf kg

5 jj kk cd de fg hi

if

fh fi gh gi

hi ii jk jj

kk

cd de

fg hi if

ch ci

di df

fk hk

-46-

Page 47: Gt Datalog 2

ij gd

he ie

jg je

ke cj

ck dk

dj gh

gi hf ii

jk hj ik

jf kg jj

kk

6 cd de fg hi

if

fh fi gh gi

hi ii jk jj

kk

cd de

fg hi if

ch ci

di df

fk hk

ij gd

he ie

jg je

ke cj

ck dk

dj gh

gi hf ii

jk hj ik

jf kg jj

kk

2.4 Định giá chương trình Datalog theo các thành phần liên thông mạnh

Các thuật toán sơ đẳng hoặc bán sơ đẳng thường được sử dụng để xác định

-47-

Page 48: Gt Datalog 2

mô hình nhỏ nhất của chương trình Datalog theo các bước lặp. Quá trình lặp

sẽ kết thúc khi không còn sự kiện mới nào được phát sinh. Việc tính toán

theo cách này có nhược điểm là phải xem xét đến tất cả các quy tắc trong

chương trình ở mỗi bước lặp. Chúng ta có thể cải tiến bằng cách phân rã quá

trình tính toán thành một dãy các tính toán nhỏ hơn, trong đó việc tính toán

được thực hiện theo từng mức của chương trình. Ta có một số định nghĩa sau:

Định nghĩa 2.6 Giả sử P là chương trình Datalog. Thành phần liên thông

mạnh (SCC - Strongly Connected Component) của đồ thị phụ thuộc DG(P) =

(V,E) là tập lớn nhất C V sao cho với mỗi cặp đỉnh u, v C có một đường

đi từ u tới v và ngược lại. Có hai kiểu SCC:

- SCC tầm thường là SCC mà tập các cạnh của nó là rỗng. SCC tầm thường

chỉ có một nút. Các SCC tầm thường tương ứng với các vị từ không đệ qui

trong chương trình.

- SCC không tầm thường là SCC mà tập các cạnh của nó khác rỗng.

Định nghĩa 2.7 Đồ thị phụ thuộc thu gọn của chương trình Datalog P là một

đồ thị có hướng G' = (V', E'), trong đó tập đỉnh V' chính là tập các thành phần

liên thông mạnh {S1,S2,..., Sk} của G. Tập cạnh E' = {(Si, Sj) / i j và p Si, q Sj : (p,q) E}.

Rõ ràng đồ thị phụ thuộc thu gọn G' là một đồ thị có hướng phi chu trình. Ta

có tính chất sau:

Mệnh đề 2.1 Tồn tại một thứ tự tuyến tính trên đồ thị phụ thuộc thu gọn G',

nghĩa là một sự chỉ định thứ tự các đỉnh của G' sao cho nếu có một cạnh từ

đỉnh i đến đỉnh j của G' thì i < j.

Định nghĩa 2.8 (Đánh số hiệu của mức cho các đỉnh của đồ thị phụ thuộc thu

gọn) Mỗi đỉnh của đồ thị phụ thuộc thu gọn G' = (V', E') được gán một số

hiệu của mức, các vị từ EDB thuộc mức 0, một đỉnh Si được gọi là có mức

thấp hơn đỉnh Sj nếu có một đường đi từ Si đến Sj trong G', các vị từ trong

cùng một đỉnh được gán bởi số hiệu mức của đỉnh đó.

-48-

Page 49: Gt Datalog 2

Ví dụ 2.16 Xem chương trình Datalog P (để đơn giản ta bỏ qua các đối) gồm

các quy tắc:

P = { q r; q s; r u s; u r t }Lúc đó ta có đồ thị phụ thuộc thu gọn của P như hình vẽ sau:

-49-

Page 50: Gt Datalog 2

q

r, u

s t

Hình 3.4 Đồ thị phụ thuộc thu gọn của chương trình trong ví dụ 2.16

Đồ thị phụ thuộc thu gọn G' gồm các đỉnh S1 = {s}, S2 = {t}, S3 = {r, u}, S4 =

{q}, ta có S1, S2, S3, S4 là một thứ tự tuyến tính của G' và S1, S2 thuộc mức 0,

S3 thuộc mức 1, S4 thuộc mức 2.

Thuật toán 2.5

Vào: Chương trình Datalog P, DB là CSDL EDB đã cho.

Ra: Mô hình nhỏ nhất của P

Phương pháp: Thực hiện theo các bước sau:

1. Xây dựng các thành phần liên thông mạnh của chương trình Datalog P và

sắp xếp chúng theo một thứ tự tuyến tính.

2. Gọi S1,..., Sk là các đỉnh của đồ thị phụ thuộc thu gọn của P, thực hiện việc

đánh số hiệu mức cho các đỉnh Si, i = 1,..., k.

3. Gọi Pi là tập các quy tắc trong P định nghĩa các vị từ thuộc mức i. Quá

trình tính toán được thực hiện theo mỗi mức. Dữ liệu vào của mỗi mức là lời

giải của chương trình ở mức trước đó. Gọi là lời giải việc định giá

chương trình Pi theo thuật toán bán sơ đẳng với CSDL EDB là DB đã cho.

Bước 3 được viết theo ngôn ngữ tựa Pascal như sau:

I := ;

for i := 1 to h do /* h là số mức của chương trình */

I := ;

output I;

-50-

Page 51: Gt Datalog 2

Định lý 2.5 Thuật toán 2.5 là đúng đắn và có độ phức tạp tính toán với thời

gian đa thức.

Chứng minh:

Tính đúng đắn: Do S1,..., Sk là các đỉnh của đồ thị phụ thuộc thu gọn và đã

được sắp xếp theo các mức nên vị từ trong các chương trình P j với j < i có thể

xem là các vị từ EDB cho chương trình P i. Mặt khác, các quy tắc có đầu

thuộc Pi thì không chứa các vị từ thuộc Pi+1, từ đó có thể tính các quan hệ

tương ứng với các vị từ của Pi. Như vậy việc xác định mô hình nhỏ nhất của

P có thể tiến hành theo từng Pi, dữ liệu vào của mỗi Pi là lời giải của mức

trước đó. Tính hội tụ của thuật toán được suy từ tính hội tụ của thuật toán bán

sơ đẳng được áp dụng cho từng mức. Vì vậy kết thúc thuật toán ta nhận được

mô hình nhỏ nhất của P.

Độ phức tạp: Bởi vì thuật toán xây dựng các thành phần liên thông mạnh của

đồ thị phụ thuộc DG(P) là tuyến tính theo kích thước của đồ thị và thuật toán

bán sơ đẳng được thực hiện với thời gian đa thức nên độ phức tạp của thuật

toán ở trên cũng được thực hiện với thời gian đa thức theo kích thước của

chương trình.

Chú ý: Việc phân nhỏ tính toán theo các mức có những thuận lợi sau đây:

- Có ít quy tắc được tính toán ở mỗi bước lặp.

- Không phải tất cả các nguyên tố trong thân quy tắc đều phải tính trên mỗi

bước lặp.

- Các chương trình Datalog con trong mỗi mức có thể có những tính chất

đặc biệt nào đó, chẳng hạn chương trình tuyến tính. Trong trường hợp đó việc

định giá chương trình sẽ đơn giản hơn nhiều.

Ví dụ 2.17 Xét chương trình Datalog sau đây:

p1(X,Y) e1(X,Y)

p1(X,Y) e1(X,Z) p1(Z,Y)

p2(X,Y) e2(X,Y)

-51-

Page 52: Gt Datalog 2

p2(X,Y) e2(X,Z) p2(Z,Y)

p(X,Y) p1(X,Z) p2(Z,Y)

trong đó e1, e2 là các vị từ EDB, p1, p2, p là các vị từ IDB, X, Y, Z là các biến.

Gọi P1, P2, P là các quan hệ IDB tương ứng với các vị từ IDB p1, p2, p và Q1,

Q2 là các quan hệ EDB tương ứng với các vị từ EDB e1, e2. Giả sử các quan

hệ Q1, Q2 được cho bởi:

Q1 = {(a,b), (b,c), (c,d)}

Q2 = {(d,f), (f,g), (g,h)}

Đồ thị phụ thuộc DG(P) như hình vẽ sau đây:

p

p1 p2

e1 e2

Hình 3.5 Đồ thị phụ thuộc của chương trình trong ví dụ 2.17

Đồ thị phụ thuộc thu gọn G' gồm các đỉnh S1 = {e1}, S2 = {e2}, S3 = {p1},

S4 = {p2}, S5 = {p} ta có S1, S2, S3, S4, S5 là một thứ tự tuyến tính của G' và

S1, S2 thuộc mức 0, S3, S4 thuộc mức 1, S5 thuộc mức 2.

Chương trình con P(1) : Gồm các quy tắc sau :

p1(X,Y) e1(X,Y)

p1(X,Y) e1(X,Z) p1(Z,Y)

p2(X,Y) e2(X,Y)

p2(X,Y) e2(X,Z) p2(Z,Y)

Sử dụng thuật toán bán sơ đẳng, ta nhận được quan hệ đối với vị từ p1 là:

P1 = {(a,b), (b,c), (c,d), (a,c), (b,d), (a,d)}

và quan hệ đối với vị từ p2 là:

P2 = {(d,f), (f,g), (g,h), (d,g), (f,h), (d,h)}

Chương trình con P(2) chỉ gồm một quy tắc:

-52-

Page 53: Gt Datalog 2

p(X,Y) p1(X,Z) p2(Z,Y)

Với các quan hệ đối với các vị từ p1 và p2 đã tính ở mức 1, ta tính được quan

hệ đối với vị từ p là P = {(a,h), (a,g), (a,f), (b,h), (b,g), (b,f), (c,h), (c,g),

(c,f)}.

2.5. Định giá chương trình Datalog trong các trường hợp đặc biệtTrong trường hợp tổng quát hệ phương trình đại số quan hệ được suy ra từ

chương trình Datalog có thể giải bằng phương pháp sơ đẳng hoặc bán sơ

đẳng, tuy nhiên sau khi phân mức thì các chương trình con P' có thể có các

tính chất đặc biệt như tuyến tính hoặc các quy tắc là tuyến tính đối với các vị

từ nào đó...

2.5.1 Trường hợp 1: Nếu mọi quy tắc trong P' là tuyến tính đối với mọi vị từ

pi ở vế phải.

Ta giả sử rằng đầu của mỗi quy tắc đối với pi là pi(X1,...,Xk), Hi là tập các

quy tắc có đầu là pi, giả thiết đầu của các pi có dạng p(X1,...,Xk) trong đó Xi Xj với mọi i j.

Lúc đó EVAL-INCR(pi,P1,...,Pn,P1,...,Pn) là hợp của các EVAL-RULE-

INCR sinh ra đối với mỗi quy tắc chứa pi, mặc khác vì mọi quy tắc trong P'

là tuyến tính đối với mọi vị từ pi ở vế phải nên ta có :

EVAL-INCR(pi,P1,...,Pn,P1,...,Pn)

=

=

=

=

Phép lặp của thuật toán bán sơ đẳng trở thành :

= (i=1,...,n)

(k=0,1,2,...)

trong đó :

-53-

Page 54: Gt Datalog 2

= -

2.5.2 Trường hợp 2: Nếu P' là tuyến tính, lúc đó :

Do mọi quy tắc của P' đều tuyến tính nên ta có :

EVAL-RULE-INCR(r,P1,...,Pn,P1,...,Pn) =

=

Suy ra : EVAL-INCR(pi,P1,...,Pn,P1,...,Pn)

=

=

Do đó phép lặp của thuật toán bán sơ đẳng trở thành :

= (i=1,...,n)

(k=0,1,2,...)

trong đó :

= -

2.5.3 Trường hợp 3 : Nếu trong chương trình P' vế phải của một quy tắc chỉ

chứa một vị từ IDB duy nhất là đầu của quy tắc thì phép lặp bán sơ đẳng đơn

giản là :

= (i=1,...,n)

(k=0,1,2,...)

trong đó :

= -

-54-

Page 55: Gt Datalog 2

BÀI TẬP

1. Chính tắc hóa các quy tắc sau:

p(X,Y,Z) q(X,X,Y,V) q(Z,V,Y,a)

q(X,Y,Z,W) p(X,Y,Y) p(Y,Z,W)

q(X,Y,Z,W) r(X,Y,Z,W,X)

trong đó r là vị từ EDB và a là hằng.

2. Cho chương trình Datalog:

p(X,Y) q(X,Y)

p(X,Y) p(X,A) p(A,B) p(B,Y)

trong đó q là vị từ EDB.

a) Giả sử q biểu diễn một cung trong đồ thị. Cho biết ý nghĩa của vị từ p?

b) Trình bày kết quả định giá chương trình trên theo các bước lặp bằng thuật

toán sơ đẳng và bán sơ đẳng.

3. Xem các vị từ trong một hệ thống thông tin về sách:

author(A,B) A là tác giả của cuốn sách B.

copyright(B,Y) Y là năm bản quyền của cuốn sách B.

cost(B,C) C là giá của cuốn sách B.

publisher(P,B) P là nhà xuất bản của cuốn sách B

bookstore(S,L)L là địa điểm của nhà sách S.

sells(S,B) cuốn sách B được bán bởi nhà sách S.

phone(L,T) T là số điện thoại của địa điểm L.

Giả sử có 5 quy tắc sau:

published(P,B,A,Y) publisher(P,B) author(A,B) copyright(B,Y)

bookInfo(B,A,Y,C) author(A,B) copyright(B,Y) cost(B,C)

storeInfo(S,L,T) bookstore(S,L) phone(L,T)

stocks(S,B,C) sells(S,B) cost(B,C)

BordersInfo(L,T,B) bookstore("Borders",L) phone(L,T) sells("Borders",B)

-55-

Page 56: Gt Datalog 2

Trả lời các truy vấn sau:

a) Giá của cuốn sách "Hamlet" ở nhà sách Borders?

b) Nhà sách nào bán các cuốn sách được viết bởi tác giả Edgar Allan

Poe?

c. Cho biết các nhà xuất bản các cuốn sách được bán bởi nhà sách Barnes

và Noble?

4. Xem quy tắc sau:

p(X) :- q(X,Y) q(Y,X) r(Y).

Giả sử quan hệ Q đối với q chứa các bộ: {(1,2), (2,1), (3,3), (1,3), (3,2)} và

quan hệ R đối với r chứa các bộ:{(1), (3), (4)}. Cho biết các bộ của quan hệ P

đối với p? Đối với mỗi bộ của P, hãy đưa một phép thay thế tương ứng.

5. Cho chương trình Datalog:

p(X) r(X,Y) s(Y,X).

p(X) q(Y,X).

q(X,Y) p(X) s(Y,X).

Giả sử quan hệ EDB R đối với r chứa các bộ:{ab,ac,bc,ad,dd} và quan hệ

EDB S đối với s chứa các bộ {ba,ac,cb,dd}.

a) Trình bày kết quả định giá chương trình trên theo các bước lặp bằng thuật

toán sơ đẳng và bán sơ đẳng.

b) Xem các quy tắc sau:

chain(X,Y) eats(X,Y).

chain(X,Y) chain(X,Z) chain(Z,Y).

Chứng minh rằng đối với bất kỳ vị từ EDB eats (có thể có quan hệ vô hạn),

chương trình luôn luôn có mô hình cực tiểu sao cho chain(X,Y) là đúng nếu

và chỉ nếu có dãy Z1,...Zn, trong đó Z1=X, Zn=Y, and eats(Zi,Zi+1) với mọi i.

c) Hãy cho một ví dụ về một chương trình Datalog, trong đó có quan hệ

EDB vô hạn và các quy tắc định nghĩa vị từ IDB nào đó mà thuật toán bán sơ

đẳng không hội tụ. Mô hình cực tiểu của nó là gì?

-56-

Page 57: Gt Datalog 2

6. Giả sử ta có các quan hệ EDB:

supports(Fan,Team)

wears(Team,Color)

likes(Fan,Color)

Quan hệ thứ nhất chỉ ra các đội bóng mà cổ động viên ủng hộ, quan hệ thứ

hai cho biết các màu mà đội bóng mặc, và quan hệ thứ ba chỉ ra màu mà các

cổ động viên thích. Hãy định nghĩa các vị từ sau đây bằng cách dùng các quy

tắc Datalog an toàn, không chứa phủ định:

a. happy(F) là đúng nếu cổ động viên F ủng hộ ít nhất một đội mặc màu mà

F thích.

b. shouldSupport(F,T) là đúng nếu cổ động viên F thích tất cả các màu mà

đội T mặc.

c. veryHappy(F) là đúng nếu mọi đội mà cổ động viên F ủng hộ mặc ít nhất

một màu mà F thích.

d. grumpy(F) là đúng nếu cổ động viên F không ủng hộ đội mặc màu mà F

thích

-57-

Page 58: Gt Datalog 2

CHƯƠNG 3

MỘT SỐ TIẾP CẬN NGỮ NGHĨA CỦA CHƯƠNG TRÌNH DATALOG CÓ CHỨA PHỦ ĐỊNH

Trường hợp chương trình Datalog không chứa phủ định có ngữ nghĩa tự

nhiên duy nhất là mô hình nhỏ nhất của các qui tắc. Khi chương trình có chứa

phủ định ở một vài qui tắc thì ngữ nghĩa của nó trở nên phức tạp hơn nhiều.

Lúc này chương trình có thể có hơn một mô hình cực tiểu nhưng lại không có

mô hình nhỏ nhất. Chẳng hạn, xét chương trình như sau:

p(X) r(X), q(X) (1)

q(X) r(X), p(X) (2)

Ta gọi P, Q và R lần lượt là quan hệ cho những vị từ p, q và vị từ r. Giả sử

R có một bộ dữ liệu là {1}. Gọi S1 là một thể hiện trong đó P= và Q={1},

S2 là thể hiện trong đó P={1} và Q=. Chương trình này chỉ có S1 và S2 là

những mô hình cực tiểu và chúng không thể so sánh với nhau được. Vì vậy

chương trình này không có mô hình nhỏ nhất.

Phương pháp trực giác để ước lượng các qui tắc có chứa các đích con phủ

định là lấy phần bù của những quan hệ cho đích con phủ định. Tuy nhiên, khi

thực hiện phép lấy phần bù thì có thể dẫn đến những quan hệ vô hạn nên ta

không thể thực hiện các phép chiếu, phép kết nối để có thể đưa các qui tắc về

thành các biểu thức đại số quan hệ. Hơn nữa trong các phép toán đại số quan

hệ thì chỉ thực hiện phép lấy hiệu chứ không sử dụng phép lấy phần bù.

Chương ba sẽ trình bày các tiếp cận ngữ nghĩa đối với chương trình

Datalog có chứa phủ định, bao gồm ngữ nghĩa mô hình hoàn hảo đối với lớp

chương trình Datalog phủ định phân tầng, phân tầng địa phương, ngữ nghĩa

mô hình hoàn hảo yếu đối với lớp chương trình Datalog phủ định phân tầng

yếu và ngữ nghĩa mô hình bền vững. Các tiếp cận ngữ nghĩa này đều dựa

trên logic 2 trị, trong đó các sự kiện chỉ nhận một trong hai giá trị đúng hoặc

sai.

-58-

Page 59: Gt Datalog 2

Trước khi thảo luận chi tiết các vấn đề trên, chúng ta cần đến một số khái

niệm cơ sở của chương trình Datalog và các tiếp cận ngữ nghĩa đối với

chương trình Datalog.

3.1 Chương trình Datalog phủ định phân tầng

Định nghĩa 3.1 Chương trình Datalog có chứa phủ định (Datalog) P là

chương trình gồm tập các qui tắc có dạng:

p q1 q2 … qm r1 r2 … rn (với m, n 0) trong đó p, qi,

rj (i = 1, 2, …, m và j = 1, 2, …, n) là các nguyên tố có các đối chỉ có thể là

biến hoặc hằng.

Qui tắc này được gọi là an toàn nếu qui tắc p q1 q2 … qm là an toàn và

mọi biến xuất hiện trong các đích con âm cũng xuất hiện trong đích con

dương. Ta giả sử mọi qui tắc của chương trình Datalog đều an toàn.

Định nghĩa 3.2 Đồ thị phân tầng của một chương trình Datalog P, ký hiệu

SG(P), là một đồ thị có hướng được xây dựng như sau:

- Ứng với mỗi vị từ p trong chương trình P, có một đỉnh được gán nhãn

là p.

- Có một cạnh có hướng từ đỉnh p đến đỉnh q nếu có qui tắc với p là vị

từ đầu và q là đích con không phủ định. Lúc đó ta bảo cạnh p q là cạnh

dương.

- Có một cạnh có hướng từ đỉnh p đến đỉnh q được gán nhãn "_" nếu có

qui tắc với p là vị từ đầu và q là đích con phủ định. Lúc đó ta bảo cạnh p q

là cạnh âm và vị từ p là phụ thuộc âm vào vị từ q.

Định nghĩa 3.3 Một chương trình Datalog P gọi là đệ quy nếu đồ thị phân

tầng của nó có chu trình, ngược lại P được gọi là không đệ quy. Vị từ nằm

trong chu trình được gọi là vị từ đệ quy, ngược lại gọi là vị từ không đệ quy.

Định nghĩa 3.4 Chương trình Datalog được gọi là chương trình phân tầng

nếu đồ thị SG(P) của nó không có chu trình chứa một hay nhiều cạnh âm, tức

là không có đích con phủ định đệ quy.

-59-

Page 60: Gt Datalog 2

Định nghĩa 3.5 Tầng của vị từ p là số lớn nhất của các cạnh âm trên một

đường đi của SG(P) bắt đầu từ vị từ p.

Từ định nghĩa này ta nhận thấy:

- Nếu vị từ p phụ thuộc âm vào vị từ q thì tầng của p lớn hơn tầng của q.

- Nếu SG(P) không có chu trình chứa cạnh âm (tức không có phủ định đệ

quy) thì tất cả các tầng là hữu hạn (hoặc nếu chương trình P phân tầng thì tất

cả các tầng là hữu hạn).

Thuật toán phân tầng:

Vào: Một tập các qui tắc Datalog, có thể có các đích con phủ định.

Ra: Cho biết chương trình Datalog là có phân tầng hay không, nếu có thì

đưa ra thuật toán phân tầng.

Phương pháp: Khởi đầu mọi vị từ của chương trình được gán là tầng 1.

Bước lặp : Nếu một qui tắc có đầu là vị từ p và có đích con phủ định với vị từ

q, đặt i, j là các tầng tương ứng của p và q, nếu i j thì gán lại tầng của p là

j+1. Hơn nữa, nếu đầu qui tắc là p và có đích con không phủ định với vị từ q

thuộc tầng j và i < j thì gán lại p thuộc tầng j. Nếu đến một lúc nào đó mà

không tầng nào bị thay đổi nữa thì chương trình Datalog là có sự phân tầng

và thuật toán tạo ra các tầng của các vị từ trong chương trình. Còn nếu ta đi

đến tình huống một vị từ nào đó được gán tầng lớn hơn tổng số vị từ thì

chương trình Datalog là không có sự phân tầng.

Chi tiết thuật toán viết theo ngôn ngữ "tựa" Pascal như sau :

For mỗi vị từ p do

tầng[p]=1;

Repeat

for mỗi qui tắc r có đầu là p do

begin

for mỗi đích con phủ định của r với vị từ q do

tầng[p]:=max{tầng[p],tầng[q]+1};

-60-

Page 61: Gt Datalog 2

for mỗi đích con không phủ định của r với vị từ q do

tầng[p]:=max{tầng[p],tầng[q]};

end;

Until không có sự thay đổi đối với các tầng hay tầng của vị từ nào đó

vượt quá số vị từ.

Output Trả lời "yes" (chương trình Datalog là phân tầng) nếu không có

sự thay đổi đối với các tầng và "no" (không có xếp tầng) nếu tầng của vị từ

nào đó vượt quá số vị từ.

Ví dụ 3.1 Xét chương trình P:

p(X) q(X), p(X)

Đồ thị SG(P) của P như sau:

q - p

Tầng của p là ¥. Chương trình này không phân tầng vì đồ thị này có chu

trình chứa cạnh âm.

Ví dụ 3.2 Cho chương trình P:

r1: p(X) r(X), q(X)

r2: q(X) r(X), p(X)

Đồ thị SG(P) của chương trình này như sau:

r

-

p q

-

Đồ thị này có chu trình chứa cạnh âm, vì vậy chương trình P này không

phân tầng.

Ví dụ 3.3 Xét chương trình P được xác định bởi các qui tắc:

r1: p(X,Y) e(X,Y)

r2: p(X,Y) p(X,Z), p(Z,Y)

-61-

Page 62: Gt Datalog 2

r3: q(X,Y) t(X,Y), p(X,Y)

Đồ thị SG(P) của chương trình P như sau:

q

-

t p

e

Chương trình này là phân tầng. Vị từ q thuộc tầng 2, các vị từ p, t, e thuộc

tầng 1. Mặc dầu vị từ q phụ thuộc âm vào vị từ p nhưng vị từ p không phụ

thuộc vào vị từ q. Như vậy ta có thể tìm ra quan hệ đối với vị từ p bằng cách

chỉ dùng các qui tắc r1 và r2, dùng qui tắc r3 để tìm ra quan hệ cho vị từ q. Quá

trình này, với các quan hệ đã cho đối với các vị từ EDB r và e, sẽ sinh ra mô

hình của chương trình. Kết quả của việc tính toán các vị từ theo cách này

thường được gọi là mô hình hoàn hảo.

Thuật toán tìm mô hình hoàn hảo của chương trình Datalog phủ định

phân tầng:

Ý tưởng: Với chương trình Datalog là phân tầng và an toàn thì ta có thể ước

lượng các vị từ IDB theo thứ tự các tầng của chúng, bắt đầu từ tầng thấp nhất.

Ta sắp xếp các tầng theo thứ tự bắt đầu từ tầng thấp nhất. Giả sử p là vị từ có

tầng i, nếu qui tắc có p là đầu và q là đích con có tầng nhỏ hơn i thì ta có thể

nhận được quan hệ của q, bởi vì quan hệ này hoặc là quan hệ EDB hoặc được

tính ở các tầng trước đó. Nếu không có đích con có tầng lớn hơn i và nếu q là

đích con phủ định thì tầng của q là nhỏ hơn i. Quá trình này sẽ sinh ra một

trong số điểm bất động cực tiểu của các qui tắc và nó được gọi là mô hình

hoàn hảo. Hơn nữa, việc tính các vị từ IDB theo thứ tự của chúng, sự xuất

hiện ở các tầng luôn luôn tự nhiên và cho ta điểm bất động được gọi là mô

hình hoàn hảo. Đây được xem là ngữ nghĩa của chương trình Datalog phân

tầng an toàn. Ngược lại, chương trình không phân tầng có thể để lại cho -62-

Page 63: Gt Datalog 2

chúng ta không một điểm bất động nào "đúng" cả, mặc dầu có nhiều sự lựa

chọn từ chúng.

Nếu qui tắc r chứa đích con phủ định q(X1,...,Xn) có n đối. Gọi Q là quan

hệ đã tính đối với q (hoặc đã cho nếu q là vị từ EDB). Quan hệ đối với

q(X1,...,Xn) là :

DOM x DOM x ...x DOM - Q

n lần

Trong đó DOM là tập hợp tất cả hằng xuất hiện trong các quan hệ EDB và

trong các qui tắc của chương trình.

Vào: Một chương trình Datalog phân tầng an toàn P, các quan hệ đối với

các vị từ EDB của chương trình.

Ra: Mô hình hoàn hảo của P.

Phương pháp:

1. Tính DOM của P bằng cách chiếu tất cả quan hệ EDB lên các thành phần

của chúng và sau đó lấy hợp của các phép chiếu này và tập các hằng xuất

hiện trong các qui tắc nếu có.

2. Áp dụng thuật toán xếp tầng để đánh số tầng cho tất cả các vị từ trong P,

giả sử Pi là chương trình con của P ứng với tầng thứ i (i =1,...,k).

3. Với mỗi tầng i (i=1,...,k) thực hiện các bước sau:

i. Tính các quan hệ cho các vị từ có dấu phủ định ở các tầng j (j < i)

ii. Xem các quan hệ của các vị từ ở tầng thấp hơn là các vị từ EDB, tính

điểm bất động nhỏ nhất của Pi (có thể dùng các thuật toán sơ đẳng hay bán sơ

đẳng).

Ví dụ 3.4 Xét chương trình Datalog P có xếp tầng, gồm các qui tắc sau:

r1: a(X) r(X)

r2: a(X) a(X)

r3: b(X) s(X), a(X)

Đồ thị SG(P) như sau:

-63-

Page 64: Gt Datalog 2

b

_

s r a

Ta có a, r, s thuộc tầng 1 và b thuộc tầng 2. Gọi R, S là các quan hệ EDB

tương ứng với các vị từ EDB r, s. Gọi A, B là các quan hệ IDB tương ứng với

vị từ IDB a, b. Giả sử R = {1}, S = {1,2}. Do các qui tắc không chứa đối là

hằng nên ta có:

DOM = =

Ở tầng 1, ta có ngay quan hệ của A chính bằng R, sang tầng 2 ta có quan hệ

đối với a(X) là : = DOM - A = RS - A.

Vì A = R nên = {2}

Từ đó ta có :

= {1,2} - {1}

= {2}

Ta có mô hình hoàn hảo của chương trình này là : A ={1} và B ={2}

Ví dụ 3.5 Xét chương trình Datalog P sau đây:

r1: p(X,Y) s(X,Y), t(X)

r2: q(X,Y) s(X,Y), p(Y,X)

r3: r(X,Y) q(X,Y) , t(Y)

Giả sử quan hệ đối với vị từ EDB s gồm các bộ (1,2), (2,3) và quan hệ đối

với vị từ EDB t chỉ gồm một hằng là 2.

Chương trình này là phân tầng và ta có s, t thuộc tầng 1; p thuộc tầng 2; q, r

thuộc tầng 3. Mô hình hoàn hảo của P là: {p(1,2), q(1,2), q(2,3), r(2,3)}.

3.2 Chương trình Datalog phân tầng địa phương

Các chương trình phân tầng có thể mở rộng thành các chương trình phân

tầng địa phương theo một cơ sở EDB đã cho, trong trường hợp này các vị từ

-64-

Page 65: Gt Datalog 2

có đối là hằng có thể phụ thuộc âm vào chính nó với điều kiện, khi các qui

tắc của chương trình Datalog được thể hiện với các đối là hằng thì không có

chu trình xảy ra. Một chương trình có thể phân tầng địa phương đối với một

cơ sở EDB nhưng không phân tầng địa phương đối với một cơ sở EDB khác.

Định nghĩa 3.6 Một qui tắc thể hiện là qui tắc nhận được bằng cách thay thế

tất cả các đối bởi các hằng chấp nhận được, nhưng loại bỏ các qui tắc thể

hiện làm cho đích con EDB là sai.

Định nghĩa 3.7 Chương trình Datalog P là phân tầng địa phương nếu đồ thị

SG(P) của các qui tắc thể hiện của P không có chu trình âm.

Định nghĩa 3.8 Với cơ sở EDB cho trước, một chương trình Datalog phân

tầng địa phương có chính xác một mô hình hoàn hảo và nó được xem là ngữ

nghĩa của chương trình.

Việc xác định mô hình hoàn hảo được thực hiện giống như trường hợp

của chương trình Datalog phân tầng.

Ví dụ 3.6 Xét chương trình chỉ gồm một qui tắc:

s(X) t(X,Y), s(Y)

Rõ ràng vị từ s phụ thuộc âm vào chính nó, vì vậy chương trình này không

được phân tầng. Giả sử quan hệ EDB của vị từ t gồm các bộ (1,2), (2,3),

(1,3). Ta có ba qui tắc thể hiện của chương trình này như sau:

r1: s(1) t(1,2), s(2)

r2: s(1) t(1,3), s(3)

r3: s(2) t(2,3), s(3)

Đồ thị SG(P) như hình vẽ:

s(3) - s(2) - s(1)

-

Chương trình này phân tầng địa phương và s(3) thuộc tầng 1; s(2) thuộc

tầng 2 và s(1) thuộc tầng 3. Ta có:

Tầng 1: s(3) là sai.

-65-

Page 66: Gt Datalog 2

Tầng 2: Từ qui tắc r3 suy ra s(2) đúng.

Tầng 3: Từ qui tắc r2 suy ra s(1) đúng.

Vậy mô hình hoàn hảo của chương trình này là {s(1), s(2)}

Ta có các mệnh đề sau đây thể hiện mối quan hệ giữa chương trình

Datalog phân tầng và phân tầng địa phương:

Mệnh đề 3.1 Mọi chương trình Datalog phân tầng thì đều là phân tầng địa

phương và trong trường hợp chương trình Datalog phân tầng địa phương

cũng phân tầng thì mô hình hoàn hảo của chương trình Datalog phân tầng

địa phương đồng nhất với mô hình hoàn hảo của chương trình Datalog phân

tầng.

Chứng minh: Giả sử chương trình P là chương trình Datalog phân tầng. Khi

đó P không có đích con phủ định đệ quy, suy ra chương trình thể hiện của P

cũng không có đích con phủ định đệ quy. Vì vậy P phân tầng địa phương.

Mệnh đề 3.2 Mô hình hoàn hảo của chương trình Datalog phân tầng (địa

phương) cũng là mô hình cực tiểu và trong trường hợp chương trình Datalog

không chứa phủ định trong thân các qui tắc thì mô hình hoàn hảo đồng nhất

với mô hình nhỏ nhất.

Chứng minh: Với cơ sở EDB cho trước, một chương trình Datalog phân

tầng địa phương có chính xác một mô hình hoàn hảo và nó được xem là ngữ

nghĩa của chương trình, do đó mô hình hoàn hảo cũng chính là mô hình cực

tiểu. Trong trường hợp chương trình Datalog không chứa phủ định trong thân

các qui tắc thì chúng có ngữ nghĩa tự nhiên duy nhất là mô hình nhỏ nhất của

các qui tắc và mô hình hoàn hảo đồng nhất với mô hình nhỏ nhất.

3.3 Chương trình Datalog phân tầng yếu

Lớp các chương trình Datalog với ngữ nghĩa mô hình hoàn hảo có nhiều

tính chất đáng mong đợi, tuy nhiên chúng bị giới hạn bởi sự phân tầng hay

phân tầng địa phương. Để ý rằng có những chương trình Datalog mà chúng

không có mô hình hoàn hảo.

-66-

Page 67: Gt Datalog 2

Ví dụ 3.7 Xem chương trình Datalog P được cho bởi:

p(1,2) q(X) p(X,Y) q(Y)

Khi thay các đối của các vị từ p và q bởi các hằng 1,2, ta nhận được chương

trình P như sau:

p(1,2) (1)

q(1) p(1,2) q(2) (2)

q(1) p(1,1) q(1) (3)

q(2) p(2,2) q(2) (4)

q(2) p(2,1) q(1) (5)

Chương trình này không phân tầng địa phương. Hơn nữa, dễ thấy rằng P

không có mô hình hoàn hảo. Chương trình P dường như tương đương về ngữ

nghĩa đối với chương trình phân tầng địa phương P* chỉ bao gồm các quy tắc

(1) và (2). Các quy tắc (3), (4), (5) có vẻ hoàn toàn không liên quan, bởi vì

p(1,1), p(2,1), p(2,2) có thể giả thiết là sai trong P. Đồng thời chúng là những

quy tắc đã phá vỡ tính phân tầng địa phương của P và gây ra việc không tồn

tại mô hình hoàn hảo.

H. Przymushinska và T. C. Przymusinski ([ ]) đã đưa ra một mở rộng tự

nhiên của lớp chương trình logic phân tầng địa phương thành một lớp rộng

hơn gọi là lớp chương trình logic phân tầng yếu và ngữ nghĩa của nó gọi là

mô hình hoàn hảo yếu. Trong phần này chúng tôi giới hạn trên lớp chương

trình Datalog phân tầng yếu, mọi chương trình Datalog phân tầng yếu có

duy nhất một mô hình hoàn hảo yếu và nếu một chương trình Datalog có cả

mô hình hoàn hảo và mô hình hoàn hảo yếu thì chúng phải đồng nhất. Vì vậy

ngữ nghĩa mô hình hoàn hảo yếu là tương thích hoàn toàn với ngữ nghĩa mô

hình hoàn hảo.

Ý tưởng chính đằng sau các khái niệm này là loại bỏ các quan hệ không

liên quan trong đồ thị đồ thị phụ thuộc DG(P) của chương trình Datalog và

-67-

Page 68: Gt Datalog 2

thay thế các thành phần của đồ thị DG(P) cho các đỉnh của nó. Để xác định

ngữ nghĩa của chương trình Datalog phân tầng yếu ta phân tích chương trình

thành các tầng và ngữ nghĩa của chúng dựa vào sự tiếp cận mô hình nhỏ nhất.

Tuy nhiên sự phân tích thành các tầng được thực hiện động hơn là tĩnh.

Trong trường hợp chương trình chỉ gồm một tầng thì ngữ nghĩa mô hình hoàn

hảo yếu là đơn giản tương đương với ngữ nghĩa mô hình nhỏ nhất. Kết quả ta

nhận được một lớp rộng hơn các chương trình mà ngữ nghĩa của chúng có

cùng các nét đặc trưng tự nhiên như ngữ nghĩa mô hình hoàn hảo. Đặc biệt,

các mô hình hoàn hảo yếu là các mô hình cực tiểu.

Ta giả sử các quy tắc của chương trình Datalog là những quy tắc được thể

hiện với các đối là hằng trong chương trình.

Định nghĩa 3.9 Đồ thị phụ thuộc của chương trình Datalog P, ký hiệu

DG(P), được xác định như sau:

- Các đỉnh của DG(P) của chương trình P là tất cả các nguyên tố nền xuất

hiện trong P.

- Các cạnh của DG(P) được xác định như sau: Đối với mỗi quy tắc

p q1 q2 ... qn r1 r2 ... rm

trong P và với mọi i n, có một cạnh dương có hướng từ qi đến p trong

DG(P) và với mọi j m có một cạnh âm có hướng từ rj đến p trong DG(P).

Đồ thị phụ thuộc DG(P) của chương trình trong ví dụ 3.7 như hình vẽ:

q(2)

_

_

q(1)

-68-

Page 69: Gt Datalog 2

p(1,1) p(1,2) p(2,1) p(2,2)

Định nghĩa 3.10 Trên tập đỉnh của DG(P), ta xác định các quan hệ phụ thuộc

< và như sau:

(i) p q nếu và chỉ nếu có một đường đi có hướng từ p đến q

(ii) p < q nếu và chỉ nếu có một đường đi có hướng từ p đến q có đi qua các

cạnh âm.

Định nghĩa 3.11 Quan hệ ~ giữa các nguyên tố nền của P được xác định như

sau: p ~ q (p = q) (p < q q < p)

Dễ thấy ~ là quan hệ tương đương. Theo định nghĩa này thì hai nguyên tố

nền p và q là tương đương nếu chúng có quan hệ đệ quy phủ định lẫn nhau,

tức là có sự đệ quy đối với đích con phủ định. Đệ quy phủ định lẫn nhau là

nguyên nhân chính gây ra nhiều khó khăn trong việc xác định một mô hình

thích hợp của chương trình logic.

Định nghĩa 3.12 Ta gọi các lớp tương đương của quan hệ tương đương ~ là

các thành phần của đồ thị phụ thuộc DG(P). Một thành phần là tầm thường

nếu nó chứa một phần tử đơn p sao cho p < p.

Định nghĩa 3.13 Gọi C1 và C2 là hai thành phần của đồ thị phụ thuộc DG(P).

Ta định nghĩa quan hệ như sau:

C1 C2 (C1 C2) (A1 C1 A2 C2 : A1 < A2)

Thành phần C1 gọi là thành phần cực tiểu nếu không có thành phần C2 mà C2

C1.

Rõ ràng quan hệ là quan hệ thứ tự bộ phận, tức là nó có tính phản đối xứng

và bắc cầu.

Mệnh đề 3.3 Cho chương trình Datalog P, những điều sau đây là tương

đương:

(i) P là phân tầng địa phương

(ii) Quan hệ phụ thuộc < có tính chất : Không chứa dãy vô hạn A0 > A1 > A2

> ...

-69-

Page 70: Gt Datalog 2

(iii) Mọi thành phần của DG(P) là tầm thường

Quan hệ có một tính chất đơn giản nhưng quan trọng: đối với các thành

phần phân biệt C, C', trong đó có ít nhất một thành phần không tầm thường

thì hoặc chúng độc lập lẫn nhau theo nghĩa không có A C và B C' và A

B hay B A hoặc C C' hoặc C' C (nhưng không thể cả hai do là thứ

tự bộ phận).

Mệnh đề 3.4 Giả sử C và C' là hai thành phần phân biệt và có ít nhất một

thành phần không tầm thường, giả sử A C và B C' và A B. Lúc đó C

C'.

Mệnh đề này suy ra rằng nếu C và C' là hai thành phần không tầm thường

và chúng không có quan hệ C C' hoặc C' C thì các mô hình của P hạn chế

đối với các thành phần này là độc lập hoàn toàn với nhau, bởi vì chúng bao

gồm các vị từ không bị liên hệ bởi quan hệ phụ thuộc.

Định nghĩa 3.14

(i) Tầng đáy S(P) của P là hợp tất cả các thành phần cực tiểu của DG(P), tức

là: S(P) = {C: C là thành phần cực tiểu của DG(P)}

(ii) Lớp đáy L(P) của P là chương trình con của P, được xác định bởi tập hợp:

L(P) = Tập các quy tắc của P mà đầu quy tắc thuộc vào S(P).

(iii) Mô hình Herbrand của chương trình con L(P) được đồng nhất với tập

con có dấu của tầng đáy S(P).

Ví dụ 3.8 Xem chương trình P trong ví dụ 3.7. Ta có các quan hệ phụ thuộc

sau: q(1) < q(2), q(2) < q(1)

q(1) p(1,2), q(1) p(1,1), q(2) p(2,2), q(2) p(2,1)

Chương trình P có 5 thành phần:

C1= {q(1), q(2)}, C2 = {p(1,2)}, C3 = {p(1,1)}, C4 = {p(2,2)}, và C5 =

{p(2,1)}

Rõ ràng Ck C1 với k=2,...,5. Vì vậy, tầng đáy S(P) của P sẽ là:

S(P) = {p(1,2), p(1,1), p(2,2), p(2,1)}

-70-

Page 71: Gt Datalog 2

và lớp đáy L(P) của P là hợp tất cả các quy tắc có đầu thuộc S(P) là :

L(P) = {p(1,2)}

Để ý rằng lớp đáy L(P) của chương trình P ở trên có mô hình Herbrand nhỏ

nhất:

M = {p(1,2), p(1,1), p(2,2), p(2,1)}

Nếu lớp đáy L(P) của P có mô hình nhỏ nhất M thì ta có thể dùng nó để

loại bỏ khỏi P tất cả các các trực kiện "không thích đáng" và các quy tắc. Một

cách tổng quát hơn, ta đưa ra một phép toán biến đổi chương trình P đã cho

theo thể hiện M của nó.

Định nghĩa 3.15 Cho P là một chương trình Datalog và M là một thể hiện

của P. Với A là một nguyên tố trong cơ sở Herbrand HP, ta bảo M /=A nếu A

là thuộc vào M và M /= A nếu A thuộc vào M. Một phép biến đổi đối

với chương trình P theo thể hiện M bao gồm ba bước:

Bước 1: Loại bỏ khỏi P tất cả quy tắc chứa L mà M /= L hoặc đầu của nó

thuộc M, nói cách khác, loại bỏ khỏi quy tắc đúng trong M.

Bước 2: Loại bỏ L ra khỏi tất cả các quy tắc còn lại mà thỏa mãn M /= L.

Bước 3: Cuối cùng, chúng ta cũng loại bỏ khỏi chương trình kết quả tất cả

những quy tắc không đơn vị mà đầu của nó xuất hiện như các quy tắc đơn vị

trong chương trình.

Kết quả ta nhận được một chương trình mới, ký hiệu

Các chương trình được thu hẹp như vậy không chứa mọi nguyên tố (dương

hay âm) xuất hiện trong M. Trong ví dụ 3.7 chương trình thu hẹp P' =P/M chỉ

chứa một quy tắc: q(1) q(2)

Để ý rằng ở chương trình này, chúng ta đã loại bỏ các quy tắc không thích

đáng (3), (4), (5) trong P.

Ý tưởng của mô hình hoàn hảo yếu là như sau: Với mọi chương trình P, ta

đặt P=P0, M0= . Gọi P1 = , tìm mô hình nhỏ nhất M1 của lớp đáy L(P1)

-71-

Page 72: Gt Datalog 2

của P1 và thu hẹp P modulo M0 M1, nhận được một chương trình mới P2=

Tìm lớp đáy M(P2) và mô hình nhỏ nhất M2 của nó và đặt P3 =

Tiếp tục quá trình như vậy cho đến khi:

Hoặc chương trình thứ k Pk là rỗng, lúc đó MP =M0 M1 M2 ... Mk-1

là mô hình hoàn hảo yếu của P, hoặc nếu không:

Quá trình tiếp tục cho đến khi hoặc S(Pk) là rỗng hoặc L(Pk) không có mô

hình nhỏ nhất, trong trường hợp đó MP = M0 M1 M2 ... Mk-1 là mô

hình hoàn hảo yếu bộ phận của P.

Ta có định nghĩa về mô hình hoàn hảo yếu MP của chương trình Datalog

P.

Định nghĩa 3.16 Giả sử P là một chương trình Datalog và đặt P= P0 , M0 =

. Giả sử > 0 là một chỉ số đếm được sao cho P và thể hiện bộ phận M đã

được xác định rồi với mọi < . Đặt:

P = , S= S(P), L= L(P).

Nếu chương trình P là rỗng thì quá trình xây dựng là dừng và MP = N là

mô hình hoàn hảo yếu của P.

Ngược lại, nếu tầng đáy S= S(P) của P là rỗng hoặc nếu mô hình nhỏ

nhất của lớp đáy L= L(P) của P không tồn tại thì quá trình cũng dừng và

MP = N là mô hình hoàn hảo yếu bộ phận của P.

Ngược lại, thể hiện bộ phận M được xác định như là mô hình nhỏ nhất của

lớp đáy L= L(P) của P và quá trình xây dựng tiếp tục.

Trong hai trường hợp đầu tiên thì được gọi là độ sâu của P và được ký hiệu

là (P). Với 0 < < (P) thì tập S được gọi là tầng thứ của P và chương

trình L được gọi là lớp thứ của P.

Trong quá trình xây dựng tầng S , một vài nguyên tố nền có thể bị loại bỏ

bởi phép thu hẹp và không rơi vào một tầng nào cả. Các nguyên tố như vậy

sẽ được thêm vào một tầng tùy ý, ví dụ tầng đầu tiên và được giả thiết là sai -72-

Page 73: Gt Datalog 2

trong MP.

Quá trình xây dựng luôn luôn dừng sau một số hữu hạn bước và vì vậy mô

hình hoàn hảo yếu (bộ phận) MP của chương trình P luôn luôn xác định và

duy nhất. Một trường hợp đặc biệt quan trọng của định nghĩa ở trên xãy ra

khi tất cả các tầng S chỉ chứa các thành phần tầm thường hoặc tương đương

- khi tất cả lớp chương trình L là các chương trình Datalog.

Định nghĩa 3.17 Một chương trình Datalog P được gọi là phân tầng yếu nếu

nó có mô hình hoàn hảo yếu và nếu tất cả các tầng S của nó chỉ chứa các

thành phần tầm thường hoặc - một cách tương đương - khi tất cả lớp L của

nó là các chương trình Datalog. Trong trường hợp này, ta gọi tập các tầng {S

: 0 < < (P) } của chương trình là một phép phân tầng yếu của P.

Để ý rằng vì mọi chương trình Datalog là có mô hình nhỏ nhất, một

chương trình P là phân tầng yếu nếu và chỉ nếu bất cứ khi nào P không rỗng

thì S = S(P) cũng không rỗng và chỉ chứa các thành phần tầm thường.

Ví dụ 3.9 Xét chương trình P trong ví dụ 3.7. Ta nhận được:

P1 = P, S1 = S(P) = {p(1,2), p(1,1), p(2,2), p(2,1)}, L1 = L(P) =

{p(1,2)},

Vì vậy: M1 = {p(1,2), p(1,1), p(2,2), p(2,1)}

Do đó: P2 = = {q(1) q(2)}, S2 = S(P2) = {q(2)} là hợp các thành phần

cực tiểu của P2 và L2 = L(P2) = là tập các quy tắc thuộc P2 mà đầu thuộc

vào S2. Vì vậy M2 = {q(2)}. Ta có:

P3 = = {q(1)}, S3 = {q(1)}, L3 = P3 và M3 = S3 = {q(1)}

Bởi vì P4 = = nên quá trình xây dựng kết thúc, P là chương

trình phân tầng yếu, {S1, S2, S3} là phép phân tầng yếu của P và

MP = M1M2M3 = {p(1,2), q(1), p(1,1), p(2,2), p(2,1), q(2)}

là mô hình hoàn hảo yếu duy nhất của P.

-73-

Page 74: Gt Datalog 2

Ta sửa đổi ví dụ trên để minh họa khái niệm mô hình hoàn hảo yếu bộ

phận.

Ví dụ 3.10 Xem chương trình ở ví dụ 3.7 với sự bổ sung sự kiện nguyên tố

p(2,1). Đối với chương trình P mới này ta có:

P1 = P, S1 = S(P) = {p(1,2), p(1,1), p(2,2), p(2,1)},

L1 = L(P) = {p(1,2) , p(1,2)},

Vì vậy: M1 = {p(1,2), p(2,1), p(2,2), p(1,1)}

Do đó: P2 = = {q(1) q(2), q(2) q(1)}, S2 = {q(1), q(2)}, L2 = P2.

Vì L2 không có mô hình nhỏ nhất, việc xây dựng dừng ở đây và ta nhận

được mô hình hoàn hảo yếu bộ phận :

MP = {p(1,2), p(2,1), p(2,2), p(1,1)}

Lớp các chương trình thừa nhận mô hình hoàn hảo yếu là rộng hơn lớp

chương trình phân tầng yếu.

Ví dụ 3.11 Cho chương trình P bao gồm các quy tắc:

p q

q p

Lúc đó P có một thành phần đơn và do đó mô hình hoàn hảo yếu của nó là

mô hình nhỏ nhất của P, chính là tập MP = {p, q} (xem hệ quả ). Rõ ràng P

không phân tầng yếu.

Các tính chất của mô hình hoàn hảo yếu

Lớp các chương trình phân tầng yếu mở rộng lớp các chương trình phân tầng

địa phương. Ta có định lý sau:

Định lý 3.1 Mọi chương trình phân tầng địa phương là phân tầng yếu.

Chứng minh: Trước hết, để ý rằng nếu P là phân tầng địa phương thì chương

trình thu hẹp P' = P/M cũng vậy, đối với mọi thể hiện bộ phận M. Vì vậy, với

mọi thì chương trình P cũng phân tầng địa phương. Theo nhận xét ở trên,

điều này đủ để S = S(P) là khác rỗng và chỉ chứa các thành phần tầm

thường mỗi khi P không rỗng. Theo mệnh đề 3.3, tất cả thành phần của P là -74-

Page 75: Gt Datalog 2

tầm thường. Vì vậy S = S(P) chỉ chứa các thành phần tầm thường và không

rỗng, miễn là P không rỗng. Định lý 3.2 Mọi mô hình hoàn hảo yếu là mô hình cực tiểu.

Chứng minh: Giả sử M là mô hình hoàn hảo yếu và không phải là mô hình

cực tiểu. Như vậy tồn tại mô hình N nhỏ hơn của chương trình P. Đặt (P) là chỉ số nhỏ nhất sao cho M/S N/S, trong đó M/S là ký hiệu của mô

hình M thu hẹp trên tập con S của cơ sở Herbrand HP của P. Theo định nghĩa

thì M/S là mô hình nhỏ nhất của L. Bởi vì M/S= N/S với mọi , dễ

thấy rằng N/S cũng phải là mô hình của L và nó hoàn toàn nhỏ hơn M/S.

Điều này là vô lý. Như sẽ chỉ ra trong định lý sau đây, đối với chương trình P có mô hình

hoàn hảo, tình trạng rỗng của tầng đáy của chương trình con P' không rỗng

của nó có thể là nguyên nhân duy nhất của sự không tồn tại mô hình hoàn

hảo yếu của P.

Định lý 3.3 Giả sử chương trình Datalog P có mô hình hoàn hảo. Nếu tất cả

chương trình con khác rỗng P được xây dựng trong định nghĩa có tầng đáy

S = S(P) khác rỗng thì P cũng có mô hình hoàn hảo yếu và hai mô hình này

là đồng nhất.

Đặc biệt, nếu chương trình được thể hiện P là hữu hạn thì việc tồn tại mô

hình hoàn hảo của nó bảo đảm sự tồn tại mô hình hoàn hảo yếu.

Hệ quả 3.1 Nếu chương trình Datalog P có mô hình hoàn hảo thì P có mô

hình hoàn hảo yếu và hai mô hình này là đồng nhất.

Chứng minh: Giả sử chương trình Datalog P có mô hình hoàn hảo. Thể hiện

của chương trình Datalog P luôn luôn hữu hạn, vì vậy tập các thành phần

của DG(P) là hữu hạn, do đó tất cả các tầng đáy S, với < (P) là khác

rỗng. Định lý cũng suy ra rằng ngữ nghĩa mô hình hoàn hảo yếu là tương thích

hoàn toàn với ngữ nghĩa mô hình hoàn hảo.

-75-

Page 76: Gt Datalog 2

Dễ dàng thấy rằng ngữ nghĩa mô hình hoàn hảo yếu dựa trên nguyên lý của

ngữ nghĩa mô hình nhỏ nhất (2 giá trị). Đặc biệt, đối với các chương trình có

một tầng đơn thì ngữ nghĩa mô hình hoàn hảo yếu đồng nhất với ngữ nghĩa

mô hình nhỏ nhất.

Hệ quả 3.2 Nếu chương trình Datalog P chứa một tầng đơn thì đối với mô

hình M của P :

M là hoàn hảo yếu M là hoàn hảo M là mô hình nhỏ nhất của P.

Chứng minh: Giả sử P chứa một tầng đơn. Theo định nghĩa, M là mô hình

hoàn hảo yếu của P nếu và chỉ nếu M là mô hình nhỏ nhất của P. Hơn nữa, rõ

ràng từ định nghĩa của mô hình hoàn hảo, mô hình nhỏ nhất của mọi chương

trình Datalog đều là mô hình hoàn hảo. Vì vậy, điều này đủ để chứng tỏ rằng

nếu M là mô hình hoàn hảo của P thì nó là mô hình nhỏ nhất của P. 3.4 Ngữ nghĩa mô hình bền vững hai giá trị.

Phần này giới thiệu một mở rộng khác của ngữ nghĩa mô hình hoàn hảo

được gọi là ngữ nghĩa mô hình bền vững, nó được đề xuất bởi Gelfond và

Lifschitz. Ngữ nghĩa mô hình bền vững được xét trong phần này dựa trên

logic hai giá trị, tức là mọi nguyên tố nền chỉ nhận một trong hai giá trị là

đúng hoặc sai, ngữ nghĩa này có thể áp dụng cho một số chương trình không

phân tầng.

Chúng ta xét chương trình Datalog P với các quy tắc thể hiện bởi tập các

hằng đã cho của P. Như vậy, tất cả nguyên tố trong P đều là nguyên tố nền

và tập các quy tắc tạo ra là hữu hạn. Đối với mọi tập M các nguyên tố của P,

đặt PM là chương trình nhận được từ P bằng cách loại bỏ:

(i) Các quy tắc có trực kiện âm B trong thân của nó với B M, và

(ii) Tất cả trực kiện âm trong các thân của các quy tắc còn lại.

Rõ ràng PM là chương trình không có phủ định, nó là chương trình Datalog,

vì vậy PM có mô hình nhỏ nhất. Ta có định nghĩa:

Định nghĩa 3.18 Nếu mô hình cực tiểu của PM đồng nhất với M thì ta bảo M

-76-

Page 77: Gt Datalog 2

là tập bền vững của P.

Định lý 3.4 Mọi tập bền vững của P là mô hình cực tiểu của P.

Chứng minh: Gọi M là tập bền vững của P. Trước hết ta chứng minh M là

một mô hình của P. Gọi r là một quy tắc của P. Nếu thân quy tắc r chứa một

trực kiện âm B với B M thì r đúng trong M. Còn nếu B M, ta xem quy

tắc r' nhận được từ r bằng cách xóa đi các trực kiện âm khỏi thân của nó. Vì r'

là một trong những quy tắc của PM và M là mô hình cực tiểu của PM nên rõ

ràng r' là đúng trong M. Mặc khác, r duy dẫn logic từ r', vậy r đúng trong M.

Tiếp theo, ta chứng minh M là mô hình cực tiểu. Giả sử M1 là tập con của

M và M1 là mô hình của P. Ta sẽ chứng tỏ rằng M1 cũng là mô hình của PM.

Xem quy tắc bất kỳ r' của PM, r' nhận được từ quy tắc r nào đó của P bằng

cách loại bỏ khỏi thân quy tắc các trực kiện âm B với B M. Do r đúng

trong M1 (vì M1 là mô hình của P) và mọi trực kiện âm B trong thân của r là

đúng trong M1 (vì B M và M1 M) và r' có thể nhận được từ r nhờ vào các

trực kiện này. Từ đó r' là đúng trong M1. Như vậy M1 là mô hình của PM và vì

M là mô hình cực tiểu của PM nên M1 = M. Định nghĩa 3.19 Các tập bền vững của chương trình Datalog P được gọi là

các mô hình bền vững của P. Nếu P có chính xác một mô hình bền vững thì

mô hình này được xem là ngữ nghĩa của chương trình P.

Ví dụ 3.12 Xem chương trình Datalog P sau đây:

p(1,2) q(x) p(x,y) q(y)

Chương trình P là không phân tầng, vì vậy ngữ nghĩa mô hình hoàn hảo

không thể áp dụng được. Ta thử tìm ngữ nghĩa mô hình bền vững của P.

Chương trình P thu được sau khi thay thế tất cả các đối của các vị từ bởi

các hằng 1, 2 là:

p(1,2) q(1) p(1,2) q(2)

-77-

Page 78: Gt Datalog 2

Đặt M = {q(2)}. Lúc đó PM là:

p(1,2) Mô hình cực tiểu của mô hình này là {p(1,2)}, nó khác với M. Vì vậy M

không phải là mô hình bền vững.

Bây giờ, nếu ta đặt M = {p(1,2), q(1)}. Lúc đó PM là:

p(1,2) q(1) p(1,2)

Mô hình cực tiểu của chương trình này là {p(1,2), q(1)}chính là M. Vậy

{p(1,2), q(1)} là mô hình bền vững. Có thể kiểm tra rằng mô hình bền vững

này là duy nhất và nó chính là ngữ nghĩa mô hình bền vững của P.

Mệnh đề 3.5 Đối với mỗi quy tắc của chương trình Datalog chỉ chứa duy

nhất một đích con dương thì là mô hình bền vững duy nhất của P.

Chứng minh: Với mọi tập M các nguyên tố nền của P thì thân của mọi quy

tắc trong PM là khác rỗng, vì vậy mô hình cực tiểu của PM là .

Ví dụ 3.13 Xét chương trình P sau:

p q r

q r p

r p q

Mô hình cực tiểu duy nhất của P là và nó cũng chính là mô hình bền vững.

Để ý rằng có hai loại chương trình mà ngữ nghĩa mô hình bền vững không

thể áp dụng được: các chương trình không có mô hình bền vững và các

chương trình có nhiều mô hình bền vững. Chẳng hạn các chương trình cho

trong những ví dụ sau không có ngữ nghĩa mô hình bền vững:

Ví dụ 3.14 Xét chương trình chỉ gồm một quy tắc:

p p

Ví dụ 3.15 Xét chương trình gồm hai quy tắc:

p q

q p

-78-

Page 79: Gt Datalog 2

Chương trình này có hai mô hình bền vững là {p} và {q}.

Ví dụ 3.16 Xem chương trình

p(1,2) p(2,1) q(x) p(x,y) q(y)

Chương trình này có hai mô hình bền vững: {p(1,2),p(2,1),q(1)} và

{p(1,2),p(2,1),q(2)}

Mối liên hệ với các tiếp cận ngữ nghĩa khác.

Định lý 3.5 Nếu P là chương trình phân tầng hoặc phân tầng địa phương thì

nó có mô hình bền vững duy nhất và mô hình này đồng nhất với mô hình

hoàn hảo của P.

Ví dụ 3.17 Xét chương trình:

p(X) q(X,Y) p(Y)

Giả sử quan hệ EDB của vị từ q gồm các bộ (1,2), (2,3), (1,3). Ta có ba quy

tắc thể hiện của chương trình này như sau:

r1: p(1) q(1,2) p(1)

r2: p(1) q(1,3) p(2)

r3: p(2) q(2,3) p(3)

Chương trình này có mô hình hoàn hảo là {p(1), p(2)}, nó cũng chính là mô

hình bền vững duy nhất.

Chú ý: Có các chương trình có ngữ nghĩa mô hình bền vững nhưng chương

trình không có mô hình hoàn hảo, chẳng hạn xét ví dụ sau:

Ví dụ 3.18 Xét chương trình:

p q

q p

p p

Chương trình này có mô hình bền vững duy nhất là {p} nhưng không có mô

hình hoàn hảo.

-79-

Page 80: Gt Datalog 2

Chú ý: Có hai loại chương trình mà ngữ nghĩa mô hình bền vững không thể

áp dụng được: các chương trình không có mô hình bền vững và các chương

trình có nhiều mô hình bền vững. Chẳng hạn các chương trình cho trong

những ví dụ sau không có ngữ nghĩa mô hình bền vững:

Ví dụ 1.19 Xét chương trình:

p q

q p

Chương trình này có hai mô hình bền vững là {p} và {q}.

Ví dụ 1.20 Xét chương trình:

p p

Chương trình này không có mô hình bền vững, bởi vì ta luôn có P{Ø} = {p} và

P{p} = Ø.

Mệnh đề 3.6 Đối với các chương trình Datalog P không chứa phủ định thì

mô hình nhỏ nhất chính là mô hình bền vững duy nhất.

Chứng minh: Biến đổi chương trình P bằng cách thay tất cả đối trong các vị

từ của các quy tắc bởi các hằng trong P. Gọi M là tập tùy ý các nguyên tố nền

của P. Vì P không có các quy tắc chứa đích con phủ định nên PM chính xác là

P. Vậy mô hình cực tiểu của PM chính là mô hình nhỏ nhất của P. Nếu ta xuất

phát từ mô hình nhỏ nhất này thì suy ra nó là mô hình bền vững của P. Nếu ta

xuất phát từ tập M khác với mô hình nhỏ nhất thì PM cũng có mô hình nhỏ

nhất này, do đó nó không là mô hình bền vững.

Mệnh đề 3.7 Nếu mỗi qui tắc của chương trình Datalog P chỉ có duy nhất

một đích con dương thì mô hình bền vững duy nhất là Ø.

Chứng minh: Với moi tập các nguyên tố nền I của P thì thân của mọi qui tắc

trong PI là khác Ø, vì vậy mô hình cực tiểu của PI là Ø và đây cũng là mô

hình bền vững duy nhất.

Ví dụ 1.21 Xét chương trình P gồm các qui tắc:

-80-

Page 81: Gt Datalog 2

p q r

q r p

r p q

Mô hình cực tiểu duy nhất của P là Ø và nó cũng chính là mô hình bền

vững duy nhất.

BÀI TẬP

1. Xét chương trình Datalog P như sau :p(X) r(X) p(X) p(X) q(X) s(X) p(X)

Chương trình này có phân tầng không?

2. Chương trình Datalog P sau đây có phân tầng hay không?r1 : p1(X) q1(X) q2(X)r2 : p2(X) q2(X) p2(X)r3 : p3(X) q1(X) p2(X)

1. Xem chương trình sau:

p0(X) q(X)

p1(X) q(X) p0(X)

p2(X) q(X) p1(X)

p3(X) q(X) p2(X)

p4(X) q(X) p3(X)

p5(X) q(X) p4(X)

p6(X) q(X) p5(X)

p7(X) q(X) p6(X)

p8(X) q(X) p7(X)

p9(X) q(X) NOT p8(X)

trong đó q là vị từ EDB có quan hệ chứa một hằng a.

a) Chương trình này có bao nhiêu mô hình cực tiểu.

b) Trong số các mô hình cực tiểu này, mô hình nào là mô hình hoàn hảo?

2. Cho chương trình sau:

-81-

Page 82: Gt Datalog 2

p(x) r(x) s(x)

r(x) p(x) t(x)

Giả sử cơ sở dữ liệu EDB = { s(1), t(1), s(2) }

Áp dụng phép biến đổi GL đối với các mô hình sau, cho biết mô hình nào là

bền vững:

a) M = EDB + {p(1), p(2)}

b) M = EDB + {p(1), r(1)}

3. Cho chương trình sau:

p r

p t

q t

r s

s q

t p

u v

Áp dụng phép biến đổi GL đối với các mô hình sau, cho biết mô hình nào là

bền vững:

a) M = {q, t, u, v}

b) M = {p, r, s}

4. Một tiếp cận khác về ngữ nghĩa của chương trình Datalog có chứa phủ

định là ngữ nghĩa lạm phát. Ở đây, chúng ta bắt từ tập sự kiện IDB là rỗng và

áp dụng các quy tắc chỉ một lần để suy ra các sự kiện IDB mới. Một khi đã

tìm được các sự kiện IDB thì chúng không bao giờ trở thành sai. Một cách

hình thức, ngữ nghĩa lạm phát được xác định bởi:

a. Bắt đầu bằng các vị tự IDB là rỗng.

b. Áp dụng chỉ một lần cho các quy tắc của chương trình bằng cách sử

dụng các sự kiện EDB và những sự kiện IDB đã nhận được từ vòng lặp

trước.

-82-

Page 83: Gt Datalog 2

c. Nếu ít nhất một sự kiện mới được suy ra thì:

i. Thêm tất cả sự kiện mới vào tập các sự kiện IDB đã có.

ii. Quay lại bước b.

Ví dụ: Xem chương trình logic vị từ sau:

p q

q r

s p

Bước 0: Không có vị từ p, q, r, and s là đúng.

Bước 1: Quy tắc 2 và 3 cho ta suy ra q và s đúng. Vậy mô hình lạm phát lúc

này là {q,s}.

Bước 2: Lúc này do q đúng nên quy tắc 1 cho ta p đúng, vậy lúc này mô hình

lạm phát sẽ là {p,q,s}.

Bước 3: Không còn sự kiện nào được suy ra. Vậy mô hình lạm phát là

{p,q,s}.

Cho chương trình:

greenPath(X,Y) green(X,Y)

greenPath(X,Z) greenPath(X,Z) greenPath(Z,Y)

monopoly(X,Y) red(X,Y) greenPath(X,Y)

Giả sử cơ sở dữ liệu EDB = {red(1,2), red(2,3), green(1,2)}. Tìm ngữ nghĩa

lạm phát của chương trình này?

4. Cho chương trình:

win(X) move(X,Y) win(Y)

a) Giả sử cơ sở dữ liệu EDB = {move(1,2), move(2,3), move(3,4),

move(3,1)}. Chương trình này có phân tầng địa phương hay không? Tìm mô

hình hoàn hảo (nếu có) của chương trình này.

b) Giả sử cơ sở dữ liệu EDB = {move(1,2), move(2,3), move(3,4), move(3,1),

move(4,5)}. Chương trình này có phân tầng địa phương hay không? Tìm mô

hình hoàn hảo (nếu có) của chương trình này.

-83-

Page 84: Gt Datalog 2

5. Cho chương trình:

p(X,Y) q(X,Y) r(X).

r(X) s(X,Y) t(Y).

r(X) s(X,Y) r(Y).

a) Xác định tầng của mỗi vị từ? Chương trình này phân tầng hay không?

b) Giả sử quan hệ EDB đối với các vị từ s, t, và q lần lượt là S = {ab,bc,ca},

T = {a,b,c}, và Q = {ab,bc,cd,de}. Tìm mô hình hoàn hảo của chương trình

này.

c) Tìm mô hình cực tiểu khác của chương trình này với CSDL EDB ở câu b).

6. Cho chương trình:

minpath2(X,Y) arc(X,Z) arc(Z,Y) arc(X,Y)

minpath3(X,Y) arc(X,Z) arc(Z,W) arc(W,Y) arc(X,Y) minpath2(X,Y)

a) Xác định tầng của mỗi vị từ? Chương trình này phân tầng hay không?

b) Giả sử cơ sở dữ liệu EDB = { arc(1; 2), arc(2; 3), and arc(3; 4) }. Tìm mô

hình hoàn hảo.

c) Tìm mô hình cực tiểu khác của chương trình này với CSDL EDB ở câu

7. Cho chương trình:

p(X) a(X,Y) q(Y)

q(X) a(X,Y) p(Y)

Giả sử cơ sở dữ liệu EDB = { a(1; 2), a(2; 3), a(3; 1) }.

a) Hãy viết các quy tắc thể hiện của chương trình này.

b) Vẽ đồ thị phụ thuộc của chương trình nhận được ở câu a). Chương trình

này có phân tầng địa phương hay không?

c) Hãy cho một ví dụ để chương trình đã cho phân tầng địa phương.

-84-

Page 85: Gt Datalog 2

-85-

Page 86: Gt Datalog 2

CHƯƠNG 4

NGỮ NGHĨA CHƯƠNG TRÌNH DATALOG

CÓ CHỨA PHỦ ĐỊNH DỰA TRÊN LOGIC 3-TRỊ

Đối với các chương trình Datalog, mô hình Herbrand nhỏ nhất đã mang

lại một ngữ nghĩa thích đáng của chương trình. Khi chương trình có chứa một

vài quy tắc không ở dạng Horn, mô hình Herbrand nhỏ nhất không tồn tại

trong trường hợp tổng quát và một số mô hình được đề xuất là ngữ nghĩa. Hai

dạng ngữ nghĩa đã xét đến trong chương 3 là ngữ nghĩa mô hình hoàn hảo và

ngữ nghĩa mô hình bền vững cũng chỉ có thể áp dụng cho một số lớp hạn chế

các chương trình. Hiện nay, để mở rộng các dạng ngữ nghĩa này, logic 3-trị

(đúng, sai và không xác định) có thể được sử dụng để biểu diễn các mô hình.

Các mô hình dựa trên logỉc-trị để biểu diễn tri thức xuất phát từ sự kiện tri

thức của chúng ta về thế giới là hầu như luôn luôn chưa đầy đủ, hãy xem

chương trình sau:

p(X) q(X,Y) p(Y)

Giả sử quan hệ EDB của vị từ q gồm các bộ (a,b), (b,a), (b,c), (c,d). Rõ

ràng p(d) sai, vì vậy p(c) là đúng. Mặt khác ta không có đủ thông tin để xác

định giá trị chân lý của các sự kiện p(a) và p(b).

Chương 3 trình bày về ngữ nghĩa của chương trình Datalog có chứa phủ

định trên cơ sở logic 3-trị. Ngữ nghĩa này được xác định dựa trên cách tiếp

cận điểm bất động và là sự mở rộng của ngữ nghĩa mô hình bền vững trên cơ

sở logic 2-trị.

4.1 Một số khái niệm và kết quả liên quan

Giả sử P là chương trình Datalog, nghĩa là P bao gồm các quy tắc có

dạng:

p q1 q2 ... qm h1 h2 ... hn

trong đó các p, qi, hj là những nguyên tố có đối là hằng hoặc biến.

-86-

Page 87: Gt Datalog 2

Định nghĩa 4.1 Một thể hiện 3-trị I của P là một cặp <TI, FI>, trong đó TI và

FI là hai tập con rời nhau của cơ sở Herbrand BP của P. Các nguyên tố nền

thuộc tập TI (t.ư thuộc tập FI) gọi là đúng (t.ư sai) trong I và giá trị chân lý

của các nguyên tố nền còn lại trong UI = BP - (TI FI) được xem là không

xác định. Ký hiệu giá trị đúng là 1, sai là 0 và không xác định là .

Như vậy, một thể hiện 3-trị là một thể hiện 2-trị nếu và chỉ nếu BP =

TI  FI, hoặc tương đương UI = . Định nghĩa 4.1 có thể phát biểu tương

đương:

Định nghĩa 4.2 Thể hiện 3-trị I = <TI, FI> của chương trình Datalog P được

biểu diễn tương đương như một ánh xạ I: BP {0, ,1}, từ cơ sở Herbrand BP

của P vào tập 3 giá trị = {0, ,1}, được xác định bởi:

p BP, I(p)

=

0 nếu p FI

nếu p UI

1 nếu p TI

Dùng giá trị chân lý của nguyên tố nền, ta có thể mở rộng giá trị chân lý

đối với tập các công thức đóng như sau:

Định nghĩa 4.3 Giả sử I là một thể hiện 3-trị, C là tập các công thức đóng

của ngôn ngữ cấp một. Mở rộng của I là ánh xạ Î: C {0, ,1} được định

nghĩa đệ qui như sau:

Nếu p là một nguyên tố nền thì Î(p) = I(p).

Nếu S là công thức thì Î(S) = 1-Î(S)

Nếu S và V là các công thức thì:

Î(SV) = min{Î(S), Î(V)}

Î(SV) = max{Î(S), Î(V)}

Î(VS)

1 nếu Î(V)

Î(S)

-87-

Page 88: Gt Datalog 2

= 0 nếu ngược lại

Định nghĩa 4.4 Giả sử P là chương trình Datalog. Ký hiệu ground(P) là

chương trình nhận được từ P bằng cách thay thế tất cả các biến trong các quy

tắc bởi các hằng trong P, nghĩa là:

ground(P) = {(p q1 q2 ... qn) / (p q1 q2 ... qn) P, là phép thế cơ

sở đối với quy tắc này và (X) dom(P), biến X trong p q1q2 ...qn }

Định nghĩa 4.5 Một thể hiện 3-trị M là một mô hình 3-trị của chương trình

Datalog P nếu mọi quy tắc của P đúng trong M, tức là với mọi quy tắc: p q1 ... qm của ground(P) thì Î(p) Î(q1 ... qm).

Như vậy, M là mô hình của P nếu và chỉ nếu giá trị chân lý của đầu của

mọi quy tắc lớn hơn hoặc bằng giá trị chân lý của thân quy tắc.

Ta có điều hiển nhiên sau:

Mệnh đề 4.1 Một thể hiện 3-trị M là mô hình 3-trị của chương trình Datalog

P nếu và chỉ nếu M là mô hình 3-trị của ground(P).

Mệnh đề này cho phép ta từ đây có thể đồng nhất chương trình P với

ground(P). Trên các thể hiện 3-trị, ta có thể định nghĩa các quan hệ sau:

Định nghĩa 4.6 Giả sử I = <TI, FI> và J = <TJ, FJ> là hai thể hiện 3-trị tùy ý

của chương trình Datalog P. Ta định nghĩa các quan hệ:

I J nếu và chỉ nếu TI TJ và FI FJ.

I J nếu TI TJ và FI FJ.

Định nghĩa 4.7 Giả sử P là chương trình Datalog và I là tập các thể hiện 3-

trị của P. Lúc đó:

Một thể hiện 3-trị I I được gọi là cực tiểu (t.ư. -cực tiểu) trong I nếu

không có thể hiện 3-trị J I sao cho J I (t.ư. J I) và J I.

Một thể hiện 3-trị I của P được gọi là nhỏ nhất (t.ư. -nhỏ nhất) trong I nếu

I J (t.ư. I J) với mọi thể hiện 3-trị J I.

Mô hình 3-trị M của P được gọi là mô hình 3-trị cực tiểu (t.ư. nhỏ nhất)

nếu M là cực tiểu (t.ư. nhỏ nhất ) trong các mô hình 3-trị của P.

-88-

Page 89: Gt Datalog 2

Mô hình 3-trị M của P được gọi là mô hình 3-trị -cực tiểu (t.ư. -nhỏ nhất)

nếu M là -cực tiểu (t.ư. -nhỏ nhất) trong các mô hình 3-trị của P.

Chú ý: Thể hiện 3-trị nhỏ nhất của P là <, BP> và thể hiện 3-trị -nhỏ nhất

của P là <, >.

Định nghĩa 4.8 Cho P là chương trình Datalog và I = <TI, FI> là một thể

hiện 3-trị của P. Gọi PI là chương trình nhận được từ P bằng cách thay tất cả

literal âm p trong thân các quy tắc của P bởi I(p), nghĩa là:

I(p) =

1 nếu p FI

0 nếu p TI

nếu p UI

Như vậy, trong phần thân các quy tắc của PI sẽ không còn tồn tại các

literal âm và thay vào đó là các ký hiệu giá trị chân lý 0, và 1. Lúc đó PI

được gọi là chương trình Datalog mở rộng 3 giá trị.

Mọi chương trình Datalog mở rộng 3-trị PI có duy nhất một mô hình 3-

trị cực tiểu [ ]. Ký hiệu P(I) là mô hình 3-trị cực tiểu của PI.

Định nghĩa 4.9 Một thể hiện 3-trị I của chương trình Datalog được gọi là mô

hình bền vững 3-trị của P nếu và chỉ nếu I là mô hình 3-trị cực tiểu của

chương trình PI, nghĩa là P(I) = I.

Mệnh đề 4.2 Mô hình bền vững 3-trị của chương trình Datalog P là mô hình

cực tiểu của P.

Chứng minh: Đặt I = P(I) là mô hình bền vững 3-trị của P. Giả sử r là quy

tắc tùy ý của P: p p1 p2 ... pm q1 q2 ... qn

Gọi r' là quy tắc tương ứng của r trong PI, r' nhận được bằng cách thay

tất cả các literal âm qi bởi I(qi), rõ ràng r' đúng trong I. Điều này suy ra r

cũng đúng trong I, như vậy I là mô hình của P.

Ta chứng minh tiếp I là mô hình cực tiểu của P. Gọi J là mô hình của P -89-

Page 90: Gt Datalog 2

mà J I. Gọi r là quy tắc tùy ý của P, r' và r'' là các quy tắc tương ứng với r

nhận được trong chương trình PI và chương trình PJ. Vì J là mô hình của P

nên J thỏa quy tắc r''. Mặc khác vì J I và literal qi âm nên J cũng thỏa r'.

Vậy J cũng là mô hình của PI. Lúc đó vì I là mô hình cực tiểu của PI nên điều

này suy ra I = J. Chú ý: Nếu mô hình bền vững 3-trị là mô hình 2-trị thì nó chính là mô hình

bền vững được định nghĩa bởi Gelfond-Lifchitz trong [ ].

Định nghĩa sau là sự mở rộng của toán tử hệ quả trực tiếp TP trên chương

trình Datalog mở rộng 3-trị:

Định nghĩa 4.10 Giả sử P là chương trình Datalog mở rộng 3-trị, I là một thể

hiện 3-trị của P. Toán tử P : x x được xác định bởi: I   x ,

P(I) = <TI, FI>, trong đó:

TI = {p / (p p1 ... pn) P, Î(pi) = 1,i = 1,..., n}

FI = {p / (p p1 ... pn) P, Î(p1 ... pn) = 0}

Nghĩa là: với mọi p I, ta có:

P(I)(p)

=

1 nếu có quy tắc p p1 ... pn trong P sao

cho

Î(pi) = 1, i = 1,..., n

0 nếu với mọi quy tắc p p1 ... pn trong

P,

Î(p1 ... pn) = 0

trong các trường hợp khác

Định lý 4.1 Cho P là chương trình Datalog mở rộng 3-trị. Lúc đó:

(i) P là đơn điệu tăng theo quan hệ và có điểm bất động nhỏ nhất.

(ii) Điểm bất động nhỏ nhất của P là mô hình 3-trị cực tiểu duy nhất của P.

Hệ quả 2.1 Mô hình 3-trị cực tiểu của chương trình Datalog mở rộng 3-trị P

là cận trên nhỏ nhất của dãy Pn, n  N, trong đó P0 = <, BP> và

P(i+1) = P(P(i)).-90-

Page 91: Gt Datalog 2

Chứng minh: Do cơ sở Herbrand BP là hữu hạn, P đơn điệu tăng theo ,

nên điểm bất động nhỏ nhất của P chính là cận trên nhỏ nhất của dãy Pn,

n  N, trong đó P0 = <, BP> và P(i+1) = P(P(i)). Từ hệ quả này ta có thuật toán:

Thuật toán 4.1 (Tìm mô hình 3-trị cực tiểu)

Vào: Chương trình Datalog mở rộng 3-trị P.

Ra: Mô hình 3-trị cực tiểu của P.

Phương pháp: Thuật toán được viết theo ngôn ngữ tựa Pascal:

I := <, BP>;

repeat

J := I;

I := P(J);

until J = I;

output I là mô hình 3-trị cực tiểu của P.

Ví dụ 4.1 Cho chương trình P:

P = {p r, q r p, s t, t q s, u t p s }

và I = <{p, q}, {r}> là một thể hiện 3-trị. Khi đó:

PI = {p 1, q 1 p, s , t q , u p s}

P(I) được tính theo các bước lặp sau:

I0 = 0 = <,{p, q, r, s, t, u}>; I1 = 1 = (I0) = <{p},{q, r, t, u}>;

I2 = 2 = (I1) = <{p, q},{r, t}>; I3 = 3 = (I2) = <{p, q},{r}>;

I4 = 4 = (I3) = <{p, q}, {r}>.

Vậy mô hình 3-trị cực tiểu của chương trình PI là P(I) = <{p, q},{r}>,

chính là I nên I là mô hình bền vững 3-trị của P.

Chú ý: Trong trường hợp tổng quát, P có thể có nhiều hơn một mô hình bền

vững 3-trị. Chẳng hạn, trong ví dụ trên P có I = <{p, q}, {r}> là mô hình bền

vững 3-trị, ta xét tiếp thể hiện J = <{p, q, t}, {r, s, u}> của P.

Ta có = { p 1, q 1 p, s 0, t q 1, u 0 p s }

-91-

Page 92: Gt Datalog 2

Các bước lặp để tính P(I1) là:

0 = <, {p, q, r, s, t, u}>; 1 = (I0) = <{p},{q, r, s, t , u}>;

2 = (I1) = <{p, q}, {r, s, t, u}>;

3 = (I2) = <{p, q, t},{r, s, u}>; 4 = 3.

Vậy P(J) = J, do đó J cũng là mô hình bền vững 3-trị của P.

Định lý 4.2 Thuật toán 4.1 tìm mô hình 3-trị cực tiểu của chương trình

Datalog mở rộng 3-trị được thực hiện với thời gian đa thức.

Chứng minh: Khẳng định của định lý được suy từ kết quả: thuật toán xác

định mô hình nhỏ nhất của chương trình Datalog được thực hiện với thời gian

đa thức.

4.2 Ngữ nghĩa của chương trình Datalog P

Trong [ ] đã chứng minh rằng mọi chương trình Datalog P có duy nhất

mô hình bền vững 3-trị -nhỏ nhất MP. Như vậy MP là mô hình nhỏ nhất

trong tất cả các mô hình bền vững theo nghĩa MP chứa một số lượng nhỏ nhất

các sự kiện đúng hoặc sai, do đó MP chứa nhiều nhất các sự kiện không xác

định.

Định nghĩa 4.11 Ngữ nghĩa của chương trình Datalog P là mô hình bền

vững 3-trị -nhỏ nhất của P, ký hiệu MP.

Định nghĩa 4.12 Trên tập các thể hiện 3-trị x , ta định nghĩa toán tử P :

x x được xác định bởi: I x , P(I) là mô hình nhỏ nhất

của chương trình Datalog mở rộng 3-trị PI, nghĩa là P(I) = P(I).

4.2.1 Thuật toán tính mô hình bền vững 3-trị -nhỏ nhất dựa vào quan

hệ Bổ đề 4.1 Toán tử P phản đơn điệu theo quan hệ , nghĩa là nếu I và J là

các thể hiện 3-trị của P và I J thì P(J) P(I).

Chứng minh: Giả sử I và J là hai thể hiện 3-trị của P và I J. Ta chứng

minh P(J) P(I). Ta có, với mọi q BP thì I(q) J(q) nên I(q) J(q).

Gọi r là quy tắc tùy ý: p s1 ... sm q1 ... qn trong P và quy tắc

-92-

Page 93: Gt Datalog 2

p s1 ... sm ... (t.ư. p s1 ... sm ... ) với , {0, ,1}

là quy tắc tương ứng với r trong PI (tương ứng PJ). Khi đó, ta có: , k =

1,.., n. Suy ra với I0 = J0 = <, BP>, p BP. Đặt I1 =

, J1 = , suy ra I1 J1. Dùng quy nạp ta có P(I) =

= P(J).

Bổ đề 4.2 Toán tử = P P đơn điệu tăng theo quan hệ .

Chứng minh: Giả sử I1 và I2 là hai thể hiện 3-trị của P và I1 I2. Lúc đó

P(I2) P(I1), suy ra P(P(I1)) P(P(I2)), nghĩa là (I1) (I2).

Vậy đơn điệu. Định lý 4.3 Cho P là chương trình Datalog, MP là mô hình bền vững 3-trị -

nhỏ nhất của P. Lúc đó:

(i) Toán tử có điểm bất động nhỏ nhất IB = <TB, FB>.

(ii) Tập các sự kiện đúng của MP là TB và tập các sự kiện sai của MP là tập các

sự kiện sai F'B của P(IB).

Chứng minh:

(i) Do ( x ,) là dàn đầy đủ và đơn điệu nên có điểm bất động nhỏ

nhất IB = <TB, FB>.

(ii) Do P phản đơn điệu nên I'B = P(IB) =<T'B, F'B> là điểm bất động lớn

nhất của .Trước hết ta chứng minh I = <TB, F'B> là mô hình bền vững 3-trị

của P, nghĩa là cần chứng minh P(I) = I. Ta chứng minh p BP, nếu I(p) =

{0, , 1} thì P(I)(p) = . Từ IB I I'B, P(IB) = I'B và P(I'B) = IB nên

ta có: IB P(I) I'B. Ta có nếu I(p) = 0 thì P(I)(p) = 0 và nếu I(p) = 1 thì

P(I)(p) = 1. Bây giờ nếu I(p) = , ta sẽ chứng minh P(I)(p) = . Ta có P(I)

(p) không thể bằng 1. Thật vậy, nếu P(I)(p) = 1 thì các quy tắc được sử dụng

để suy ra p chỉ chứa các sự kiện có giá trị 0 và 1. Do những sự kiện này có

cùng giá trị trong IB và I'B nên các quy tắc này được dùng trong cả và để

suy ra p. Vì vậy IB(p) = I'B(p) = I(p) = 1. Điều này mâu thuẫn với giả thiết là -93-

Page 94: Gt Datalog 2

I(p) = .

Theo định nghĩa của I ta có IB(p) = 0 và I'B(p) = 1. Do P(IB) = I'B nên

P(IB)(p) = 1. Ta có P(IB) là giới hạn của dãy .Gọi k là giá trị i nhỏ

nhất sao cho (p) =1, ta sẽ chứng minh qui nạp theo k rằng P(I)(p)

. Thật vậy, nếu k = 1 thì tồn tại trong P một quy tắc có dạng: p hoặc p

q1 ... qn với IB(qj) = 0 (j = 1,.., n). Ta nhận thấy trường hợp thứ nhất

không thể xảy ra, bởi vì nếu ngược lại thì I'B(p) = IB(p) = 1 và do đó I(p) =1,

mâu thuẫn với I(p) = . Lập luận tương tự, I'B(qj) = 1, vì vậy I(qj) = với j =

1,..., n, suy ra P(I)(p) . Bây giờ ta giả sử khẳng định trên đúng với k = i.

Ta chứng minh khẳng định cũng đúng với k = i+1. Thật vậy, lúc đó trong P

tồn tại quy tắc p  p1...pm q1...qn sao cho: IB(qj) = 0 và (ps) = 1

với mọi j = 1,..., n và s = 1,..., m. Vì IB(qj) = 0, I(qj) nên I(qj) . Mặt

khác, theo giả thiết qui nạp P(I)(pk) suy ra P(I)(p) . Vậy P(I) = I

nên I là mô hình bền vững 3-trị của P.

Tiếp theo ta chứng minh I là mô hình bền vững 3-trị - nhỏ nhất của P.

Rõ ràng với mọi mô hình bền vững 3-trị M của P thì: IB M I'B. Từ đó I

M. Vậy I là mô hình bền vững 3-trị - nhỏ nhất của P. Thuật toán sau được suy ra trực tiếp từ Định lý 4.3:

Thuật toán 4.2:

Vào: Chương trình Datalog P.

Ra: Mô hình bền vững 3-trị - nhỏ nhất của P.

Phương pháp: Thuật toán được thực hiện theo các bước:

1. Tính điểm bất động nhỏ nhất IB = <TB, FB> của toán tử .

2. Tính điểm bất động nhỏ nhất P(IB) = <T'B, F'B>

3. Mô hình bền vững 3-trị -nhỏ nhất của P là <TB, F'B>.

-94-

Page 95: Gt Datalog 2

Ví dụ 4.2 Xét chương trình:

P = {a b, b c, c a, d , e a d }

Đặt J0 = <, {a, b, c, d, e}>, Ji+1 = (Ji), i = 0, 1, 2,... Ta có thể tính mô

hình bền vững 3-trị -nhỏ nhất như sau:

Bước 1: Tính điểm bất động nhỏ nhất IB = <TB, FB> của toán tử :

Khởi đầu: J0 = <, {a, b, c, d, e}>

Bước 11: Tính J1 = (J0) = P(P(J0))

Ta có: = { a 1, b 1, c 1, d , e a 1 }

* Trước hết, ta tính P(J0), các bước lặp như sau:

0 = <, {a, b, c, d, e}>; 1 = <{a, b, c, d}, {e}> ;

2 = <{a, b, c, d, e}, >; 3 = 2;

Vậy P(J0) = <{a, b, c, d, e}, >.

* Các bước lặp để tính J1 = P(P(J0)):

Ta có: = {a 0, b 0, c 0, d , e a 0 }

0 = <, {a, b, c, d, e}>; 1 = <{d}, {a, b, c, e}> ; 2 =

<{d}, {a, b, c, e} > = 1;

Vậy J1 = (J0) = <{d}, {a, b, c, e} >

Bước 12: Tính J2 = (J1) = P(P(J1))

Ta có: = {a 1, b 1, c 1, d , e a 0 }

Vậy P(J1) = <{ a, b, c, d}, {e}>;

= {a 0, b 0, c 0, d , e a 0 }

Vậy J2 = P(P(J1)) = <{d}, {a, b, c, e}> = J1. Do đó tập các sự kiện đúng của

mô hình bền vững 3-trị -nhỏ nhất là TB  = {d}.

Bước 2: Tính điểm bất động nhỏ nhất P(IB), ta có IB = J2 = <{d}, {a, b, c,

e}>

Ta có ={a 1, b 1, c 1, d , e a 0 }

Vậy P(IB) = <{a, b, c, d }, {e}>. Do đó tập các sự kiện sai của mô hình

bền vững 3-trị -nhỏ nhất là {e}.

-95-

Page 96: Gt Datalog 2

Bước 3: Mô hình bền vững 3-trị -nhỏ nhất của P là <{d}, {e}>.

Ví dụ 4.3 Xét chương trình Datalog P ở ví dụ 4.1:

P ={p r, q r p, s t, t q s, u t p s }

Đặt J0 = <, {p, q, r, s, t, u}>, Ji+1 = (Ji), i = 0, 1, 2,... Ta có thể tính mô

hình bền vững 3-trị -nhỏ nhất như sau:

Bước 1: Tính điểm bất động nhỏ nhất IB = <TB, FB> của toán tử :

Khởi đầu: J0 = <, {p, q, r, s, t, u}>

Bước 11: Tính J1 = (J0) = P(P(J0))

Ta có: = { p 1, q 1 p, s 1, t q 1, u 1 p s }

* Trước hết, ta tính P(J0), các bước lặp như sau:

0 = <, {p, q, r, s, t, u}>; 1 = <{p, s}, {q, r, t, u}> ;

2 = <{p, q, s, u}, {r, t}> ; 3 = <{p, q, s, t, u}, {r}> ;

4 = 3. Vậy P(J0) = <{ p, q, s, t, u}, {r}>.

* Các bước lặp để tính J1 = P(P(J0)):

Ta có: = {p 1, q 1 p, s 0, t q 0, u 0 p s }

1 = <{p}, {q, r, s, t, u}> ; 2 = <{p, q}, {r, s, t, u} > ;

3 = 2. Vậy J1 = (J0) = <{p, q}, {r, s, t, u}>

Bước 12: Tính J2 = (J1) = P(P(J1))

Ta có: = { p 1, q 1 p, s 1, t q 1, u 1 p s } =

Vậy IB = (J1) = <{p, q}, {r, s, t, u}>, do đó tập các sự kiện đúng của

mô hình bền vững 3-trị -nhỏ nhất là TB ={p, q}.

Bước 2: Tính điểm bất động nhỏ nhất P(IB), ta có IB = <{p, q},{r, s, t, u}>

Ta có ={p 1, q 1 p, s 1, t q 1, u 1 p s} =

Vậy P(IB) = <{p, q, s, t, u}, {r}>. Do đó tập các sự kiện sai của mô hình

bền vững 3-trị -nhỏ nhất là {r}.

Bước 3: Mô hình bền vững 3-trị -nhỏ nhất của P là <{p, q}, {r}>.

Việc xác định mô hình bền vững 3-trị -nhỏ nhất MP ở trên được thực hiện

dựa vào quan hệ trên các thể hiện. Sau đây là một cách tính khác của MP

-96-

Page 97: Gt Datalog 2

nhưng dựa vào quan hệ .

4.2.2 Thuật toán tính mô hình bền vững 3-trị -nhỏ nhất dựa vào quan

hệ 

Định lý 4.4 Cho P là chương trình Datalog. Lúc đó:

(i) Toán tử P là đơn điệu tăng theo quan hệ .

(ii) P có điểm bất động -nhỏ nhất và cũng là mô hình bền vững 3-trị

-nhỏ nhất của P.

Chứng minh:

(i) Giả sử I1 I2, đặt (I) = <Ti, Fi>, i = 1, 2. Ta chứng minh <T1, F1> <T2,

F2>. Nếu p T1 thì có quy tắc p p1 ... pn trong P sao cho I(pi) = 1 với

mọi i =1,..., n theo I1. Suy ra I(pi) =1 với mọi i =1,..., n theo I2, vậy p T2.

Tương tự nếu p F1 thì với mọi quy tắc p  p1 ... pn trong P, I(p1 ... pn) =

0 theo I1, suy ra I(p1 ... pn) = 0 theo I2, từ đó p F2. Tóm lại ta có (I)

(I), sử dụng phép quy nạp ta được .

(ii) Do P đơn điệu tăng theo quan hệ và cơ sở Herbrand BP hữu hạn nên P

có điểm bất động -nhỏ nhất M'P. Mặt khác, P có mô hình bền vững 3-trị -

nhỏ nhất MP cũng là điểm bất động của P, vậy M'P = MP. Thuật toán sau được suy ra trực tiếp từ định lý 4.4:

Thuật toán 4.3:

Vào: Chương trình Datalog P.

Ra: Mô hình bền vững 3-trị - nhỏ nhất của P.

Phương pháp: Thuật toán được viết theo ngôn ngữ tựa Pascal:

I := <, >;

repeat

J := I;

I := P(J);

until J = I;

output I là mô hình bền vững 3-trị -nhỏ nhất của P.

-97-

Page 98: Gt Datalog 2

Ví dụ 4.4 Xét chương trình P trong ví dụ 4.2:

P = {a b, b c, c a, d , e a d }

Khởi đầu: I0 = P0 = <, >

Bước 1:

Ta có: = {a , b , c , d 1, e a }

Các bước lặp để tính I1 = P(I0):

0 = <,{a, b, c, d, e}>; 1 = <{d}, {e}>; 2 = <{d}, >;

3 = 2. Vậy I1 = <{d}, >

Bước 2:

Ta có: ={a , b , c , d 1, e a 0 }

Các bước lặp để tính I2 = P(I1)

0 = <, {a, b, c, d, e}>, 1 = <{d}, {e}>, 2 = 1

Vậy I2 = <{d}, {e}>, lúc đó = . Do đó <{d}, {e}> là mô hình bền

vững 3-trị -nhỏ nhất của P.

Ví dụ 4.5 Xét chương trình đã cho trong ví dụ 4.1

{p r, q r p, s t, t q s,u t p s}

Khởi đầu: I0 = P0 = <, >

Bước 1: Ta có:

= {p , q p, s , t q , u p s}

Các bước lặp để tính I1 = P(I0):

0 = <, {p, q, r, s, t, u}>; 1 = <, {q, r, t, u}>;

2 = <, {r, t}>

3 = <, {r}> ; 4 = <, {r}> = 3. Vậy I1 = <, {r}>.

Bước 2: Ta có:

= {p 1, q 1 p, s , t q , u p s}

Các bước lặp để tính I2 = P(I1):

-98-

Page 99: Gt Datalog 2

0 = <, {p, q, r, s, t, u}>; 1 = <{p},{q, r, t, u}>;

2 = <{p, q}, {r, t}>; 3 = <{p, q}, {r}> ; 4 = 3.

Vậy I2 = <{p, q}, {r}>

Bước 3: Ta có:

= {p 1, q 1 p, s , t q , u p s} =

Vậy sau 3 bước lặp ta nhận được mô hình 3-trị -nhỏ nhất của P là

<{p, q}, {r}>.

Ví dụ 4.6 Xét chương trình sau:

P = { u , s u p, p q, r p, q r}

Khởi đầu: I0 = P0 = <, >

Bước 1: Ta có:

= { u , s p, p , r , q }

Các bước lặp để tính I1 = P(I0):

0 = <, {u, s, p, r, q}>; 1 = <{u}, {s}>; 2 = <{u}, >

3 = 2. Vậy I1 = <{u}, >.

Bước 2: Ta có:

= { u , s 0 p, p , r , q }

Các bước lặp để tính I2 = P(I1):

0 = <, {u, s, p, r, q}>; 1 = <{u}, {s}>; 2 = 1

Bước 3: Ta có:

= { u , s 0 p, p , r , q } =

Do đó mô hình bền vững 3-trị -nhỏ nhất của P là P(I2) = <{u}, {s}>.

Định lý 4.5 Các thuật toán 4.2 và 4.3 để tính mô hình bền vững 3-trị -nhỏ

nhất được thực hiện với thời gian đa thức.

Chứng minh: Bởi vì P là chương trình Datalog nên cơ sở Herbrand BP của

P là hữu hạn và với các bước lặp trong thuật toán 4.2 và 4.3 ta suy ra ngay

-99-

Page 100: Gt Datalog 2

mô hình bền vững 3-trị -nhỏ nhất được tính với thời gian đa thức theo kích

thước của BP. 4.2.3 Mối quan hệ giữa mô hình bền vững 3-trị -nhỏ nhất với mô hình

bền vững 2-trị và mô hình hoàn hảo

Trong trường hợp tổng quát, mô hình bền vững 3-trị -nhỏ nhất của

chương trình Datalog P chưa hẳn là mô hình bền vững (2-trị) của P.

Ví dụ 4.7 Chương trình p p không có mô hình bền vững 2-trị nhưng mô

hình bền vững 3-trị -nhỏ nhất của nó là <, >.

Định lý 4.6 Nếu chương trình Datalog P có mô hình bền vững 3-trị -nhỏ

nhất là 2-trị thì nó chính là mô hình bền vững 2-trị duy nhất của P. Điều

ngược lại là không đúng.

Chứng minh: Giả sử I = <TI, FI> là mô hình bền vững 3-trị -nhỏ nhất của P

và là mô hình 2-trị. Như vậy tập các sự kiện không xác định của P là rỗng.

Lúc đó với mọi quy tắc trong chương trình PI, nếu trị 1 xuất hiện trong thân

quy tắc thì nó có thể xóa khỏi quy tắc và nếu trị 0 xuất hiện trong thân quy

tắc thì quy tắc đó có thể loại bỏ mà không gây ảnh hưởng gì. Mặt khác mọi

quy tắc trong PI đều không chứa giá trị chân lý trong thân. Vậy PI nhận

được bởi phép biến đổi Gelfond-Lifchitz trong [ ]. Điều này suy ra I là mô

hình bền vững 2-trị của P. Hơn nữa rõ ràng I là mô hình bền vững 2-trị duy

nhất.

Điều ngược lại của định lý là không đúng. Thật vậy, xem chương trình sau

đây:

P = { b a, a b, p p, p a }

Chương trình này có mô hình bền vững 2-trị duy nhất là <{p, b}, {a}> nhưng

mô hình bền vững 3-trị -nhỏ nhất của nó là <, >.Ví dụ 4.8 Xem chương trình sau:

P ={q(1,2) , p(1) q(1,2) p(2), p(1) q(1,1) p(1),

p(2) q(2,2) p(2), p(2) q(2,1) p(1)}

-100-

Page 101: Gt Datalog 2

Ta tìm mô hình bền vững 3-trị -nhỏ nhất của P.

Khởi đầu: I0 = P0 = <, >

Bước 1: Các bước lặp để tính I1 = P(I0)

Ta có: = {q(1,2) 1, p(1) q(1,2) , p(1) q(1,1) ,

p(2) q(2,2) , p(2) q(2,1) }

0 = <, {q(1,1), q(1,2), q(2,1), q(2,2), p(1), p(2)}>

1 = <{q(1,2)}, {q(1,1), q(2,1), q(2,2), p(1), p(2)}

2 = <{q(1,2)}, {q(1,1), q(2,1), q(2,2), p(2)}

3 = <{q(1,2)}, {q(1,1), q(2,1), q(2,2), p(2)} = 2Vậy I1 = <{q(1,2)}, {q(1,1), q(2,1), q(2,2), p(2)}>

Bước 2: Các bước lặp để tính I2 = P(I1)

Ta có: = {q(1,2) 1, p(1) q(1,2) 1, p(1) q(1,1) ,

p(2) q(2,2) 1, p(2) q(2,1) }

0 = <, {q(1,1), q(1,2), q(2,1), q(2,2), p(1), p(2)}>,

1 = <{q(1,2)}, {q(1,1), q(2,1), q(2,2), p(1), p(2)}>

2 = <{q(1,2), p(1)}, {q(1,1), q(2,1), q(2,2), p(2)}

3 = <{q(1,2), p(1)}, {q(1,1), q(2,1), q(2,2), p(2)} = 2Bước 3: Các bước lặp để tính I3 = P(I2)

Ta có: = { q(1,2) 1, p(1) q(1,2) 1, p(1) q(1,1) 0, p(2) q(2,2) 1, p(2) q(2,1) 0}.

0 = <, {q(1,1), q(1,2), q(2,1), q(2,2), p(1), p(2)}>,

1 = <{q(1,2)}, {q(1,1), q(2,1), q(2,2), p(1), p(2)}>

2 = <{{q(1,2), p(1)}, {q(1,1), q(2,1), q(2,2), p(2)}

3 = <{q(1,2), p(1)}, {q(1,1), q(2,1), q(2,2), p(2)} = 2Vậy có mô hình 3-trị cực tiểu là I3 = <{q(1,2), p(1)}, {q(1,1), q(2,1),

q(2,2), p(2)}> và là mô hình bền vững 3-trị -nhỏ nhất của P. Do I là mô hình

-101-

Page 102: Gt Datalog 2

2-trị nên I chính là mô hình bền vững 2-trị duy nhất của chương trình P.

Định lý 4.7 Nếu P là chương trình Datalog phân tầng địa phương và mô

hình bền vững 3-trị -nhỏ nhất là 2-trị thì nó là mô hình hoàn hảo của P.

Chứng minh: Vì P phân tầng địa phương nên P có mô hình bền vững 2-trị

duy nhất I và là mô hình hoàn hảo của P. Mặt khác, P có mô hình 3-trị -nhỏ

nhất J là 2-trị nên theo định lý 4.6 thì J là mô hình bền vững 2-trị duy nhất

của P. Vậy J I.

-102-

Page 103: Gt Datalog 2

BÀI TẬP

1. Cho chương trình:

win(X) move(X,Y) win(Y)

a) Giả sử cơ sở dữ liệu EDB = {move(1,2), move(2,3), move(3,4), move(3,1)}

Tìm mô hình mô hình bền vững 3-trị -nhỏ nhất của chương trình này.

b) Giả sử cơ sở dữ liệu EDB = {move(1,2), move(2,3), move(3,4), move(3,1),

move(4,5)}

Tìm mô hình mô hình bền vững 3-trị -nhỏ nhất của chương trình này.

-103-

Page 104: Gt Datalog 2

CHƯƠNG 5

TỐI ƯU CÂU TRUY VẤN

ĐỐI VỚI CHƯƠNG TRÌNH DATALOG

5.1 Xử lý vòng lặp vô hạn trong quá trình định giá câu truy vấn

Hai phương pháp nhằm ngăn chặn các vòng lặp vô hạn trong quá trình định

giá câu truy vấn đối với các chương trình Datalog được xem xét là phép biến

đổi ma tập và phép định giá bảng SLG, chúng đều là những thuật toán hướng

đích, có thể được áp dụng để định giá câu truy vấn đối với chương trình

Datalog.

5.1.1 Định giá SLD

SLD là phương pháp định giá câu truy vấn theo kiểu trên xuống. Phương

pháp này là đầy đủ, nghĩa là tất cả các câu trả lời đúng được biểu diễn trong

cây SLD. Cây SLD đã tạo ra một sự phân chia chính xác trong không gian tìm

kiếm: cần tính toán gì và thứ tự tính toán là như thế nào. Một điều đáng tiếc

đối với phương pháp này là nó không hiệu quả, việc tính toán trên cây SLD

có thể kéo dài vô hạn.

Định nghĩa 5.1 Giả sử P là một chương trình Datalog và Q là một đích truy

vấn. Cây SLD của đích truy vấn Q đối với chương trình P được xác định như

sau:

Mỗi nút của cây là một đích và gắn kết với một phép thay thế.

Đích Q là nút gốc, phép thay thế của Q là rỗng.

Nếu Q' = q1 q2 ... qn (n 1) là một nút trong cây và q1 là vị từ IDB. Các

nút con của Q’ được xây dựng như sau: Với mọi quy tắc r trong P mà đầu

của r và q1 là có thể hợp nhất được, đặt: H B1 B2 ... Bm là một biến thể

của r bằng cách dùng các biến mới. Lúc đó một nút con Q” của Q’ là : (B1

B2 ... Bm q2 ... qn)trong đó là hợp nhất tử tổng quát nhất (mgu) của q1 và H. Phép thay thế tính

toán ở Q'' là trong đó là phép thay thế tính toán ở Q'.

-104-

Page 105: Gt Datalog 2

Nếu Q' = q1 q2 ... qn (n 1) là một nút trong cây và q1 là vị từ EDB. Các

nút con của Q’ được xác định như sau: Với mọi phép thay thế nền mà q1 thuộc CSDL EDB của P thì (q2 ... qn) là nút con của Q’.

Nút kết thúc là nút không có nút con, ký hiệu là nút kết thúc.

Định nghĩa 5.2 Việc định giá câu truy vấn trên chương trình Datalog dựa vào

cây SLD được gọi là phép định giá SLD.

Phép định giá SLD là một chiến lược xử lý câu truy vấn theo kiểu trên

xuống. Quá trình định giá bắt đầu từ đích truy vấn và lặp lại các phép thay

thế đối với thân quy tắc. Quá trình định giá câu truy vấn sẽ thành công nếu tất

cả các literal trong đích là được tìm ra, có nghĩa khi đích là nút kết thúc.

Ví dụ 5.1 Xét chương trình Datalog P sau đây :

r1 : p(X,Y) e(X,Y)

r2 : p(X,Z) e(X,Y) p(Y,Z)

Câu truy vấn (Q) : ? p(1,Y)

Trong đó p là vị từ IDB và e là vị từ EDB, giả sử quan hệ của vị từ e được

cho bởi tập E = {(1,2),..., (n-1,n)}. Cây SLD đối với câu truy vấn p(1,Y) như

sau:

p(1,Y)

e(1,Y) e(1,Z) p(Z,Y)

p(2,Y)

Y=2

e(2,Y) e(2,Z) p(Z,Y)

Y=3 p(3,Y) .

.-105-

Page 106: Gt Datalog 2

. p(n,Y)

e(n,Y) e(n,Z) p(Z,Y) H×nh 5.1 C©y SLD ®èi víi c©u truy vÊn p(1,Y) trong vÝ dô

5.1

Phép định giá SLD có thể sẽ kéo dài vô hạn trong trường hợp cây SLD là vô

hạn. Chúng ta xét ví dụ sau:

Ví dụ 5.2 Xét chương trình Datalog P sau đây:

r1: p(X,Y) p(X,Z) p(Z,Y)

r2: p(X,Y) a(X,Y)

Câu truy vấn: ? p(1,Y)

Trong đó a là vị từ EDB, giả sử quan hệ của vị từ a gồm các bộ:

(1,2), (1,3), (2,3), p là vị từ IDB.

Cây hợp giải SLD đối với chương trình này và câu truy vấn đã cho như sau:

p(1,Y)

p(1,Z) p(Z,Y) a(1,2) a(1,3)

p(1,Z1) p(Z1,Y) a(1,2) p(2,Y) a(1,3) p(3,Y)

...

Hình 5.2 Cây SLD đối với câu truy vấn p(1,Y) trong ví dụ 5.2

Nhánh bên trái nhất của cây hợp giải này là kéo dài vô hạn, vì vậy phép

định giá SLD sẽ đi vào vòng lặp vô hạn khi tìm kiếm các lời giải của câu truy

vấn. Trong phần tiếp theo, chúng tôi trình bày hai phương pháp hiệu quả để

xử lý tình huống này.

-106-

Page 107: Gt Datalog 2

5.1.2 Định giá bảng

Kỹ thuật định giá bảng mở rộng khả năng của các ngôn ngữ lập trình logic

vì nó có thể được dùng để định giá các câu truy vấn đệ qui như trong Prolog

nhưng với các tính chất kết thúc tốt hơn nhiều. Phương pháp này sẽ ngăn

chặn các vòng lặp vô hạn như đã xảy ra trong phương pháp định giá SLD và

đảm bảo việc định giá sẽ kết thúc đối với chương trình Datalog.

Ý tưởng chính của phương pháp định giá bảng như sau: trong suốt quá

trình định giá câu truy vấn, các đích con và các câu trả lời được lưu giữ vào

một bảng. Một bảng bao gồm một tập các đích con, mỗi đích con gắn liền với

một tập các câu trả lời, hai đích con hoặc các câu trả lời được xem là đồng

nhất với nhau trong bảng nếu chúng là các biến thể của nhau. Mỗi lời gọi đến

đích con phải được kiểm tra xem đích con này (hoặc một biến thể của nó) có

được gọi trước đó hay không. Nếu không có thì đích con này được chèn vào

bảng và các quy tắc được hợp giải dựa vào đích con này y như trong phương

pháp định giá SLD. Kết quả của việc định giá sẽ được đưa vào bảng. Nếu có

một biến thể của đích con đã được gọi trước đó, đích con sẽ được hợp giải

dựa vào các câu trả lời đã có trong bảng. Các câu trả lời mới nhận được, đến

lượt nó sẽ được thêm vào bảng và gắn liền với một đích con trong suốt quá

trình định giá. Việc định giá sẽ kết thúc khi tất cả các quy tắc và các câu trả

lời được hợp giải nhờ vào việc áp dụng tất cả các đích con.

Định nghĩa 5.3 (Hệ thống SLG)

Một hệ thống SLG là một rừng cây SLG được xây dựng như sau:

Nút gốc của cây SLG có dạng: q q, trong đó q là một đích con,

Các nút không phải là nút gốc có một trong hai dạng:

- Nút thất bại (ký hiệu fail) được thêm vào như một nút lá của các nhánh

thất bại, hoặc:

- Nút có dạng: Answer_template Goal_list, trong đó Answer_template là

một nguyên tố biểu diễn các sự kiện của các đích con được xếp vào bảng

-107-

Page 108: Gt Datalog 2

trong quá trình định giá, Goal_list chứa danh sách các nguyên tố vẫn còn

phải hợp giải.

Định nghĩa 5.4 (Định giá SLG)

Giả sử P là chương trình Datalog, định giá SLG đối với đích truy vấn root

là một dãy các rừng cây F0, F1,..., Fn, sao cho:

F0 là rừng chứa một cây đơn root root

Với mỗi i 0 hữu hạn, Fi+1 nhận được từ Fi bằng cách áp dụng một trong

các phép toán SLG (định nghĩa 5.5).

Nếu không có phép toán nào được áp dụng vào Fn thì Fn được gọi là hệ

thống cuối cùng của định giá SLG.

Định nghĩa 5.5 (Các phép toán SLG)

(i) Đích con mới: Giả sử N là nút không phải nút gốc:

Answer_Template S Goal_List

trong đó đích con S được xếp vào bảng. Nếu S là đích con mới đối với việc

định giá thì thêm một cây mới với gốc là S S.

(ii) Hợp giải quy tắc:

- Với N là một nút gốc S S và R là quy tắc Head Body, trong đó

Head hợp nhất với đích con S với mgu là . Thêm (S Body) là một nút

con của nút N nếu nó là nút mới .

- Với nút N : Answer_Template S Goal_List không phải là nút gốc, đích

con S không xếp vào bảng, R là quy tắc Head Body, trong đó Head hợp

nhất với đích con S với mgu là . Thêm (Answer_Template Body goal_list) là nút con của nút N.

(iii) Hợp giải câu trả lời: Giả sử N không phải nút gốc mà đích con S được

chọn của nó là được xếp vào bảng và Ans là một nút trả lời. Gọi N' là hợp

nhất của N và Ans trên S. Lúc đó nếu N' không phải là con của N thì thêm N'

như là nút con của N.

Để minh họa các phép toán trong định nghĩa 5.5 ta xét ví dụ sau:

-108-

Page 109: Gt Datalog 2

Ví dụ 5.3 Xét trở lại chương trình Datalog P trong ví dụ 5.2:

r1: p(X,Y) p(X,Z) p(Z,Y)

r2: p(X,Y) a(X,Y)

Câu truy vấn: ? p(1,Y)

Trong đó a là vị từ EDB, giả sử quan hệ của vị từ a gồm các bộ: (1,2), (1,3),

(2,3). Định giá SLG của chương trình P như hình vẽ sau:

1. p(1,Y) p(1,Y)

2. p(1,Y) p(1,Z) p(Z,Y) 3.p(1,Y) a(1,Y)

5. p(1,Y) p(2,Y) 11. p(1,Y) p(3,Y) 4. p(1,2) 20. p(1,3)

10. p(1,3) 17. Fail

6. p(2,Y) p(2,Y) 12. p(3,Y) p(3,Y)

7. p(2,Y) p(2,Z)p(Z,Y) 8.p(2,Y) a(2,Y) 13. p(3,Y) p(3,Z) a(Z,Y) 14. p(3,Y) a(3,Y)

Đích con

Trả lời

p(1,Y)

p(1,2),

p(1,3)

P(2,Y)

p(2,3)

P(3,Y)

-109-

Page 110: Gt Datalog 2

18. p(2,Y) p(3,Y) 9. p(2,3) 16. Fail 15. Fail

19. Fail

Hình 5.3 Định giá SLG của chương trình P trong ví dụ 5.3

Trong ví dụ này, hệ thống SLG khởi đầu từ nút 1. Các nút 6, 12 được tạo ra

bằng cách dùng phép toán tạo đích con mới. Các nút 2, 3, 7, 8, 13, 14, 4, 9,

20 được tạo ra bằng phép toán hợp giải quy tắc. Các nút 5, 11, 18 được tạo ra

bằng phép toán hợp giải câu trả lời.

Định nghĩa 5.6 (định giá đầy đủ)

Cho F là hệ thống SLG, một tập S các đích con của F gọi là được định giá

đầy đủ nếu mọi đích con q S, có ít nhất một trong các điều kiện sau đây

được thỏa mãn:

(i) q có một nút trả lời là một biến thể của q, hoặc

(ii) Đối với mỗi nút N trong cây có gốc là q,

- đích con được chọn SL của N là đầy đủ, hoặc

- SL S và không còn áp dụng được các phép toán SLG đối với SL.

Trong ví dụ 5.3, ta có {p(3,Y)}, {p(2,Y), p(3,Y)}, {p(1,Y), p(2,Y), p(3,Y)} là

các tập được định giá đầy đủ.

Giả sử F là hệ thống SLG đối với định giá SLG của một chương trình P và

câu truy vấn Q. Thể hiện bộ phận của F, ký hiệu I(F), là tập các nguyên tố

nền được xây dựng như sau: A I(F) nếu A là một trong các câu trả lời trong

F, A I(F) nếu A là một hiện hành của một nguyên tố p và cây SLG đối với p

là đầy đủ trong F nhưng không chứa A là một trong các câu trả lời.

Định lý 5.1 Cho Q là câu truy vấn đối với chương trình Datalog P. Lúc đó

phép định giá SLG sẽ đạt đến một hệ thống cuối cùng Fn mà trong đó một

nguyên tố nền A thuộc vào I(Fn) nếu và chỉ nếu nó thuộc vào MPP/S, trong đó

-110-

Page 111: Gt Datalog 2

MPP/S là mô hình cực tiểu của P được giới hạn đối với tập các đích con S

trong F.

5.1.3 Phương pháp ma tập

Cùng với phương pháp định giá bảng, phương pháp ma tập (magic set)

cũng là phương pháp hiệu quả để định giá câu truy vấn trên chương trình

Datalog. Sau đây là một số khái niệm chính của phương pháp ma tập.

5.1.3.1 Tô điểmTô điểm (adornment) là cách chú thích trên các vị từ để cung cấp thông tin

về các vị từ sẽ được sử dụng như thế nào trong quá trình định giá câu truy

vấn.

Định nghĩa 5.7

Một đối của một đích con trong quy tắc r được gọi là buộc nếu trong suốt

quá trình định giá câu truy vấn, mọi đích được tạo ra từ đích con này có

một tập các hằng ở vị trí của đối này. Ngược lại, đối được gọi là tự do.

Một tô điểm đối với vị từ p(t1,t2,...,tk) là một ánh xạ :{1,2,...,k} {b, f}. Ta thường ký hiệu tô điểm là (1)(2)...(k). Nếu ký hiệu thứ i của

tô điểm là b thì đối thứ i của p là buộc, nếu ký hiệu thứ i của tô điểm là f

thì đối thứ i của p là tự do. Chỉ có các vị từ IDB là được tô điểm.

Cho quy tắc p q1 q2 ... qn và là tô điểm của vị từ p, tô điểm i của các

đích con được xác định như sau: Nếu ti,j là hằng hoặc biến đã

xuất hiện trong đích con qk trước đó (k < i) hoặc trong một vị trí buộc của p

thì i[j] = b, ngoài ra thì i[j] = f (với i[j] là ký hiệu ở vị trí thứ j của tô

điểm).

Cho chương trình P, chương trình tô điểm của P, ký hiệu là Pad, gồm các

quy tắc trong P đã được tô điểm.

Tô điểm của câu truy vấn p(t1,...,tn) được xác định bởi: [i] = b nếu ti là

hằng và [i] = f nếu ngược lại.

5.1.3.2 Truyền thông tin sang ngang

-111-

Page 112: Gt Datalog 2

Một chiến lược truyền thông tin sang ngang (Sips-Sideway infomation

passing strategy) là một quyết định về cách thức để lan truyền thông tin

ngang trong thân quy tắc khi định giá quy tắc. Chiến lược này chỉ ra cách

thức để các trị buộc trong đầu quy tắc được sử dụng, thứ tự mà các đích con

trong thân sẽ được tính và cách thức để các trị buộc này truyền sang ngang

giữa các đích con trong thân quy tắc.

Sử dụng Sips ta có thể truyền các trị buộc của đầu quy tắc và các trị buộc

nhận được từ việc định giá các đích con trước đó vào các đích con chưa được

định giá. Điều này tương ứng với việc tính toán các quy tắc trong định giá

trên xuống nhưng ở đây quyết định được thực hiện ở thời gian dịch. Chiến

lược truyền thông tin sang ngang có thể biểu diễn bằng các quy tắc được tô

điểm.

Ví dụ 5.4 Sử dụng chiến lược truyền thông tin từ trái sang phải, chương trình

P trong ví dụ 5.1 có thể biến đổi thành chương trình tô điểm Pad như sau:

? pbf(1,Y)

ar1 : pbf(X,Y) e(X,Y)

ar2 : pbf(X,Z) e(X,Y) pbf(Y,Z)

5.1.3.3 Phép biến đổi ma tập

Vào: Chương trình Datalog P, câu truy vấn q. Gọi Pad là chương trình tô

điểm nhận được từ P theo một chiến lược truyền thông tin ngang đã cho.

Ra: Một chương trình mới, ký hiệu Mag_Pad. Việc định giá trên chương trình

Mag_Pad sẽ cho cùng kết quả câu truy vấn q trên chương trình P.

Phương pháp: Phép biến đổi ma tập được thực hiện theo các bước:

1. Đối với mỗi vị từ p với đối là trong chương trình Pad, tạo ra một vị từ mới

mag_p( ) với là đối bị buộc của vị từ p.

2. Đối với mỗi quy tắc r trong Pad: p( ) q1( ) ... qn( ) ta sửa đổi thành

một quy tắc trong Mag_Pad: p( ) mag_p( ) q1( ) ... qn( )

-112-

Page 113: Gt Datalog 2

3. Đối với mỗi quy tắc r trong Pad : p( ) q1( ) ... qn( ) và với mọi vị từ

IDB qi, 1 i n ta thêm vào Mag_Pad các quy tắc magic:

mag_qi( ) mag_p( ) q1( ) ... qi-1( )

4. Thêm một sự kiện “hạt nhân” mag_q( ), trong đó là tập các hằng tương

ứng với các đối bị buộc của câu truy vấn.

Tính đúng đắn của phép biến đổi ma tập được thể hiện bởi định lý:

Định lý 5.2 Giả sử P là chương trình Datalog và q là câu truy vấn. Dùng

phép biến đổi ma tập để biến đổi P và q thành chương trình Mag_Pad, chương

trình này sẽ tương đương với P theo nghĩa khi định giá Mag_Pad sẽ cho ra

cùng kết quả của câu truy vấn q.

5.1.3.4 Phương pháp ma tập

Phương pháp ma tập được thực hiện qua hai bước sau đây :

1. Dùng phép biến đổi ma tập để viết lại chương trình P và câu truy vấn q

thành chương trình Mag_Pad.

2. Định giá chương trình Mag_Pad bằng các thuật toán kiểu dưới lên như sơ

đẳng, bán sơ đẳng.

Ví dụ 5.5 Sử dụng phép biến đổi ma tập đối với chương trình Pad trong ví dụ

5.4, ta nhận được chương trình Mag_Pad sau đây :

mar1 : pbf(X,Y) mag_pbf(X) e(X,Y)

mar2 : pbf(X,Z) mag_pbf(X) e(X,Y) pbf(Y,Z)

mar3 : mag_pbf(Y) mag_pbf(X) e(X,Y)

mar5 : mag_pbf(1)

Giả sử quan hệ của vị từ e được cho bởi tập E = {(1,2), (2,3), (3,4)}.

Bước 1: mag_pbf(1) được tạo ra

Bước 2: pbf(1,2), mag_pbf(2) được thêm vào.

Bước 3: pbf(2,3), mag_pbf(3) được thêm vào.

Bước 4: pbf(3,4), mag_pbf(4) được thêm vào.

Bước 5: Kết thúc, không còn sự kiện mới được phát sinh.

-113-

Page 114: Gt Datalog 2

5.1.4 So sánh về các phương pháp

Các lời gọi trong phương pháp định giá SLD được biểu diễn bởi các vị từ

magic trong phương pháp ma tập. Mặt khác, ở bước 3 của phép biến đổi

ma tập, đầu quy tắc magic có cùng tô điểm như các vị từ magic được thêm

vào quy tắc. Vì vậy các tô điểm trong vị từ magic biểu diễn các đối buộc và

các đối tự do của một lời gọi.

Cả hai phương pháp định giá bảng và ma tập thực chất thực hiện cùng một

sự tính toán và đều là các thuật toán hướng đích. Sự khác nhau cơ bản

trong việc thực hiện của cả hai cách tiếp cận này là về mặt cấu trúc dữ liệu.

Phương pháp định giá bảng duy trì một cây stack của phép tính sao cho các

câu trả lời được trả về trực tiếp đối với các phép tính toán. Với phương

pháp định giá ma tập, các câu trả lời được đưa ra bằng cách thực hiện phép

toán nối. Mặc dù chiến lược định giá bảng được xem là thuộc cách tiếp cận

trên xuống và phép biến đổi ma tập được xem là dưới lên, nhưng điều đáng

ghi nhận là định giá bảng trình bày một thành phần dưới lên trong khi phép

biến đổi ma tập trình bày một thành phần trên xuống trong các chiến lược

chung của chúng.

Một điểm bất lợi của hai phương pháp định giá bảng và ma tập là quá trình

tìm câu trả lời truy vấn không tách rời được không gian tìm kiếm ra khỏi

chiến lược tìm kiếm.

Phương pháp ma tập loại bỏ một nét đặc trưng của phương pháp định giá

bảng, đó là chia sẻ câu trả lời giữa các lời gọi giống nhau.

5.2 Áp dụng phương pháp ma tập trên một số lớp con của chương trình

Datalog

5.2.1 Phương pháp ma tập trên chương trình Datalog tuyến tính phải

Định nghĩa 5.8 Xét chương trình Datalog P chỉ gồm một vị từ IDB p và câu

truy vấn p được tô điểm , giả sử tô điểm biểu thị k đối đầu tiên của p là

-114-

Page 115: Gt Datalog 2

bị buộc và h đối còn lại là tự do. Chương trình P được gọi là tuyến tính phải

nếu:

(i) Mỗi quy tắc đệ qui của P có dạng:

p(X1,...,Xk,Y1,...,Yh) q1 ... qm p(Z1,...,Zk,Y1,...,Yh) (R)

trong đó q1,...,qm là các vị từ EDB và thỏa mãn các điều kiện sau:

Các biến Y1,...,Yh phân biệt và xuất hiện chính xác hai lần trong quy tắc,

một lần trong đầu và một lần trong đích con đệ qui theo cùng một vị trí,

chúng không xuất hiện trong bất kỳ đích con q1,..., qm.

Các biến Z1,...,Zk hoặc xuất hiện trong các đối của q1,...,qm hoặc thuộc

vào các biến X1,...,Xk.

(ii) Mỗi quy tắc không đệ qui của P có dạng:

p(X1,...,Xk,Y1,...,Yh) e(X1,...,Xk,Y1,...,Yh) (E)

Trong đó e là hội của các vị từ EDB. Các biến xuất hiện trong p cũng phải

xuất hiện trong e.

Trên lớp chương trình Datalog tuyến tính phải, phép biến đổi ma tập được

thực hiện theo các bước:

1. Đối với vị từ đệ qui p trong chương trình P ta tạo ra một vị từ mag_p

trong Mag_Pad.

2. Đối với mỗi quy tắc đệ qui tuyến tính phải được biến đổi thành hai quy tắc:

mar1: mag_p(Z1,...,Zk) mag_p(X1,...,Xk) q1 ... qm

mar2:p(X1,...,Xk,Y1,...,Yh) mag_p(X1,...,Xk) q1 ... qm p(Z1,...,Zk,Y1,...,Yh)

3. Đối với mỗi quy tắc không đệ qui được biến đổi thành quy tắc:

mar3: p(X1,...,Xk,Y1,...,Yh) mag_p(X1,...,Xk) e(X1,...,Xk,Y1,...,Yh)

4. Câu truy vấn p(c1,...,ck,Y1,...,Yh), với c1,...,ck là các hằng, được viết thành:

mar4: mag_p(c1,...,ck)

Ví dụ 5.6 Xét chương trình Datalog tuyến tính phải định nghĩa quan hệ

totien:

-115-

Page 116: Gt Datalog 2

r1 : totien(X,Y) bome(X,Y)

r2 : totien(X,Y) bome(X,Z) totien(Z,Y)

Câu truy vấn (Q) : ? totien(x0,Y)

Giả sử quan hệ của vị từ EDB bome được cho bởi tập hợp:

E = {(x0,x1), (x1,x2),..., (xn-1,xn)}

Chương trình được viết lại bởi phép biến đổi ma tập là:

mar1 : totienbf(X,Y) mag_totienbf(X) bome(X,Y)

mar2 : totienbf(X,Y) mag_totienbf(X) bome(X,Z) totienbf(Z,Y)

mar3 : mag_totienbf(Z) mag_totienbf(X) bome(X,Z)

mar4 : mag_totienbf(x0)

Sử dụng thuật toán định giá dưới lên đối với chương trình này, chẳng

hạn thuật toán bán sơ đẳng, ta nhận được n bộ mag_totienbf(xi), 0 i n, do

đó với mỗi bộ mag_totien(xi), ta nhận được bộ totien(xi,xj), 0 i < j n.

Điều này có nghĩa số các bộ được tạo ra đối với vị từ totien là 0(n2).

Tuy nhiên, chỉ với những bộ phát sinh đối với vị từ mag_totien đã bao gồm

tất cả các bộ cần tìm của câu truy vấn, vì vậy quy tắc mar1 có thể được áp

dụng để tìm được lời giải câu truy vấn. Trong khi đó quy tắc mar2 lại tính các

bộ “tổ tiên” của những tổ tiên của a, rõ ràng điều này là thừa. Do đó quy tắc

mar2 có thể loại bỏ, như vậy sẽ giảm số các bộ cần tính đối với vị từ

mag_totien xuống còn O(n). Ta có cải tiến phép biến đổi ma tập sau đây:

Thuật toán 5.1 (Phép biến đổi ma tập trên chương trình Datalog tuyến

tính phải)

Vào: Chương trình Datalog P đệ qui tuyến tính phải và câu truy vấn

p(c1,...,ck,Y1,...,Yh), với c1,..., ck là các hằng.

Ra: Chương trình RMag_Pad sao cho khi định giá RMag_Pad (bằng các thuật

toán như sơ đẳng, bán sơ đẳng,...) sẽ cho ra kết quả của câu truy vấn p.

-116-

Page 117: Gt Datalog 2

Phương pháp: Thuật toán thực hiện theo các bước:

1. Đối với vị từ đệ qui p trong chương trình Pad ta tạo ra một vị từ mag_p

trong chương trình RMag_Pad.

2. Đối với mỗi quy tắc đệ qui tuyến tính phải có dạng (R) trong định nghĩa

5.8, được biến đổi thành quy tắc:

mar1: mag_p(Z1,...,Zk) mag_p(X1,...,Xk) q1 ... qm

3. Đối với mỗi quy tắc không đệ qui có dạng (E) trong định nghĩa 5.8, được

biến đổi thành quy tắc:

mar2: p(X1,...,Xk,Y1,...,Yh) mag_p(X1,...,Xk) e(X1,...,Xk,Y1,...,Yh)

4. Câu truy vấn p(c1,...,ck,Y1,...,Yh) trở thành:

mar3: mag_p(c1,...,ck).

Áp dụng phép biến đổi trên vào chương trình ở ví dụ 5.6, nó loại bỏ quy

tắc mar2 được tạo ra bởi phép biến đổi ma tập.

Định lý 5.3 Việc định giá trên chương trình RMag_Pad bằng thuật toán bán sơ

đẳng sẽ sinh ra cùng kết quả với việc định giá trên chương trình P, mặt khác

nó hiệu quả hơn khi định giá trên chương trình Mag_Pad.

Chứng minh: Với các điều kiện trong định nghĩa 5.8, với đầu quy tắc tô

điểm p thì đích con p trong thân cũng có tô điểm và một câu trả lời đối

với đích con p cũng là một câu trả lời đối với đầu quy tắc bởi vì các đối tự do

của p có cùng các biến như trong đầu. Mặt khác, khi một câu trả lời đối với

một đích con được thay thế trong thân của quy tắc đệ qui thì cũng không tạo

ra thêm câu trả lời nào khác đối với đầu quy tắc. Do đó quy tắc mar2 được tạo

ra bởi phép biến đổi ma tập là thừa, vì vậy việc định giá trên chương trình

RMag_Pad và Mag_Pad là cho cùng kết quả của câu truy vấn. Từ đó theo định

lý 5.2, việc định giá này sẽ cho cùng kết quả khi định giá trên P. Thuật toán

này là hiệu quả hơn thuật toán ma tập nhờ vào việc nó loại bỏ được một quy

tắc đệ qui không cần thiết.

-117-

Page 118: Gt Datalog 2

Ví dụ 5.7 Áp dụng phép biến đổi ma tập tuyến tính phải vào chương trình ở

ví dụ 5.6, quy tắc mar2 được tạo ra bởi phép biến đổi ma tập sẽ bị loại bỏ, kết

quả ta nhận được chương trình:

mar1: mag_totienbf(Z) mag_totienbf(X) bome(X,Z)

mar3: totienbf(X,Y) mag_totienbf(X) bome(X,Y)

mar4: mag_totienbf(x0)

Chương trình này sẽ tính các bộ của vị từ mag_totien với thời gian là O(n), từ

đó lời giải của câu truy vấn ?totien(x0,Y) gồm n bộ sẽ được tính cũng với thời

gian O(n).

5.2.2 Phép biến đổi ma tập trên chương trình Datalog không đệ qui

Rõ ràng đối với các chương trình không đệ qui thì không nhất thiết phải

dùng đến phép biến đổi ma tập, tuy nhiên chúng tôi muốn thảo luận phép

biến đổi ma tập trên lớp chương trình này chỉ nhằm nêu lên tính hiệu quả

tương đối của phương pháp. Do phương pháp ma tập sử dụng một chiến lược

truyền thông tin sang ngang để biến đổi chương trình ban đầu, vì vậy nếu

trong chương trình có sự lặp lại các vị từ trong thân quy tắc thì khi áp dụng

phép biến đổi ma tập, luôn luôn dẫn tới một chương trình đệ qui.

Ví dụ 5.8 Xem chương trình Datalog P gồm các quy tắc sau:

r1: ongba(X,Z) p(X,Y) p(Y,Z)

r2: p(X,Y) bome(X,Y)

Câu truy vấn (Q) ? ongba(a,Z)

Chương trình này là không đệ qui, áp dụng phép biến đổi ma tập đối

với chương trình P ta nhận được chương trình Mag_Pad như sau:

mar1: ongba(X,Z) mag_ongbabf(X) pbf(X,Y) pbf(Y,Z)

mar2: p(X,Y) mag_pbf(X) bome(X,Y)

mar1: mag_pbf(X) mag_ongbabf(X)

mar3: mag_pbf(Y) mag_ongbabf(X) pbf(X,Y)

Câu truy vấn (Q) ? ongba(a,Z)

-118-

Page 119: Gt Datalog 2

Chương trình này là đệ qui do đồ thị phụ thuộc có chu trình p mag_p p

Phép biến đổi ma tập đưa vào vị từ magic để truyền thông tin sang ngang. Từ

đồ thị phụ thuộc của một chương trình Datalog, ta có thể kết hợp với một

chiến lược truyền thông tin sang ngang để xây dựng nên một đồ thị khác mà

ta gọi là đồ thị phụ thuộc mở rộng. Có thể xem đồ thị phụ thuộc mở rộng là

sự mở rộng của đồ thị phụ thuộc bằng cách thêm vào đồ thị phụ thuộc một

chiến lược truyền thông tin sang ngang.

Đồ thị phụ thuộc mở rộng của một chương trình Datalog P, ký hiệu EDG(P),

là một đồ thị có hướng được gán nhãn, nhận được bằng cách mở rộng đồ thị

phụ thuộc DG(P) của chương trình Datalog P. Đồ thị EDG(P) được xây dựng

như sau:

Đối với mỗi vị từ p trong chương trình P, tạo ra một nút được gán nhãn là

p.

Đối với mỗi vị từ IDB p trong chương trình P, tạo ra một nút thông tin

được gán nhãn là m_p.

Đồ thị EDG(P) có hai loại cạnh: cạnh phụ thuộc (ký hiệu bởi ) và các

cạnh thông tin (ký hiệu bởi ). Với mỗi quy tắc có dạng:

r: p q1 q2 ... qn

các cạnh của đồ thị EDG(P) nhận được như sau:

- Cạnh phụ thuộc qi p với mọi i = 1,..., n

- Cạnh thông tin m_p m_qj, trong đó qj là đích con IDB đầu tiên trong

quy tắc r.

- Gọi qi là đích con trong quy tắc r, qj là đích con IDB đầu tiên (nếu có)

sau đích con qi. Cạnh thông tin qi m_qj nhận được từ mọi đích con

qi.

- Cạnh thông tin m_p p nhận được từ mọi quy tắc có dạng:

p q1 q2 ... qn

Đồ thị phụ thuộc mở rộng được cho bởi hình vẽ sau:

-119-

Page 120: Gt Datalog 2

ongba m_ongba

p m_p

bome

Hình 5.6 Đồ thị phụ thuộc mở rộng của chương trình trong ví dụ 5.8

Trong đồ thị phụ thuộc mở rộng, các cạnh biểu diễn một chiến lược

truyền thông tin sang ngang giữa các đích con trong quy tắc và sự lan truyền

các trị buộc từ đầu quy tắc tới thân quy tắc. Đây chính là cách thức mà phép

biến đổi ma tập đã sử dụng để biến đổi chương trình ban đầu. Như vậy, ta có

thể liên kết một nút thông tin m_p trong đồ thị phụ thuộc mở rộng EDG(P)

của chương trình P với một vị từ mag_p trong chương trình được viết lại bởi

phép biến đổi ma tập. Lúc đó các đường đi trong EDG(P) biểu diễn các

đường đi trong đồ thị phụ thuộc của chương trình viết lại này.

Định lý sau đây cho thấy mối liên hệ giữa đồ thị phụ thuộc của chương trình

viết lại bởi phép biến đổi ma tập và đồ thị EDG(P):

Định lý 5.4 Cho P là chương trình Datalog và Mag_P là chương trình viết lại

của P bởi phép biến đổi ma tập. Lúc đó Mag_P là đệ qui khi và chỉ khi đồ thị

phụ thuộc mở rộng EDG(P) có chu trình.

Chứng minh:

Điều kiện cần: Để ý các đồ thị đồ thị EDG(P) và DG(Mag_P) có sự tương

ứng 1-1 giữa các nút của chúng. Mặc khác theo phép biến đổi ma tập thì mỗi

quy tắc r trong P có đầu là p được sửa đổi thành một quy tắc trong Mag_P

bằng cách thêm vị từ mag_p vào thân của nó, vì vậy có một cạnh từ mag_p

đến p, chính là cạnh thông tin trong EDG(P). Với mỗi quy tắc r trong P có

đầu là p và ứng với mỗi vị từ IDB qi trong thân của nó, Mag_P được thêm

vào các quy tắc: đầu của quy tắc này là mag_qi và thân bao gồm vị từ mag_ p

cùng với các đích con đứng trước qi trong quy tắc r. Điều này suy ra trong đồ

-120-

Page 121: Gt Datalog 2

thị DG(Mag_P) có các cạnh từ mag_p đến mag_q với q là các đích con IDB

trong quy tắc r định nghĩa p và từ q đến mag_p với q là đích con đứng trước p

trong quy tắc r trong P. Theo định nghĩa của đồ thị EDG(P) thì các cạnh này

tương ứng với các đường đi trong EDG(P). Tóm lại, mọi cạnh trong

DG(Mag_P) đều tương ứng các đường đi trong EDG(P). Do đó nếu

DG(Mag_P) có chu trình thì EDG(P) cũng có chu trình.

Điều kiện đủ: Bởi vì mỗi cạnh trong EDG(P) cũng tương ứng với một cạnh

trong DG(Mag_P) nên mỗi đường đi trong đồ thị EDG(P) sẽ có một đường

đi trong DG(Mag_P). Do đó nếu EDG(P) có chu trình thì DG(Mag_P) cũng

có chu trình.Phương pháp ma tập trên chương trình Datalog không đệ qui: Các vị từ

lặp lại là nguyên nhân sinh ra chương trình đệ qui sau khi áp dụng phép biến

đổi ma tập. Vì vậy để loại bỏ việc lặp lại các vị từ trùng nhau trong thân các

quy tắc của một chương trình không đệ qui ta có thể thực hiện như sau: đối

với sự xuất hiện k lần của vị từ p trong thân các quy tắc thì ta tạo ra bản sao

của vị từ p bởi các vị từ p1, p2,..., pk và khi thay thế mọi sự xuất hiện của p

trong chương trình bởi p1, p2,..., pk, kết quả ta thu được các quy tắc tương

đương mà không lặp lại các đích con trong thân các quy tắc. Từ đó đồ thị phụ

thuộc mở rộng EDG(P) của chương trình này không có chu trình, vì vậy phép

biến đổi ma tập đối với P sẽ tạo ra một chương trình không đệ qui. Ta có

thuật toán sau:

Thuật toán 5.2

Vào: Chương trình Datalog P không đệ qui, câu truy vấn q.

Ra: Chương trình Datalog Mag_P' không đệ qui.

Phương pháp: Thuật toán thực hiện theo các bước sau đây:

1. Nếu đích con p có mặt k lần ở các quy tắc (k >1) của P thì tạo ra bản sao

của vị từ p bởi p1, p2,..., pk và thay thế mọi sự xuất hiện của đích con p trong

các quy tắc bởi p1, p2,..., pk.

-121-

Page 122: Gt Datalog 2

2. Gọi P' là chương trình mới nhận được. áp dụng phép biến đổi ma tập vào

chương trình P' và câu truy vấn q ta nhận được chương trình Mag_P',

Mag_P' là chương trình không đệ qui.

Định lý 5.5 Thuật toán 5.2 là đúng đắn.

Chứng minh: Rõ ràng đồ thị phụ thuộc mở rộng EDG(P') không có chu

trình, vì vậy theo định lý 5.4 thì đồ thị phụ thuộc DG(Mag_P') cũng không có

chu trình. Chương trình P' tương đương P, vì vậy việc định giá trên chương

trình Mag_P' sẽ cho ra kết quả của câu truy vấn q theo thuật toán ma tập.Ví dụ 5.9 Xét chương trình Datalog P đã cho trong ví dụ 5.8

r1: ongba(X,Z) p(X,Y) p(Y,Z)

r2: p(X,Y) bome(X,Y)

Câu truy vấn (Q) ? ongba(a,Z)

Do vị từ p xuất hiện 2 lần trong quy tắc r1 nên ta tạo ra hai bản sao p1 và p2

của p. Chương trình P' nhận được từ P là:

r1: ongba(X,Z) p1(X,Y) p2(Y,Z)

r2: p1(X,Y) bome(X,Y)

r3: p2(X,Y) bome(X,Y)

Câu truy vấn (Q) ? ongba(a,Z)

Phép biến đổi ma tập trên P' tạo ra chương trình không đệ qui.

5.3 Phương pháp ma tập cải tiến

Phần này trình bày một cải tiến của phương pháp ma tập. Trước hết nhận

xét rằng phép biến đổi ma tập được thực hiện qua hai giai đoạn:

Giai đoạn 1 (Bước tô điểm): Thực hiện việc tô điểm chương trình ban đầu

thành một chương trình (ký hiệu Pad) theo một chiến lược truyền thông tin

ngang được chọn trước.

Giai đoạn 2 (Bước biến đổi chương trình): Một chương trình mới, ký hiệu

Mag_Pad, được tạo ra từ chương trình Pad gọi là chương trình magic.

Phương pháp ma tập cải tiến trên hai điểm chính:

-122-

Page 123: Gt Datalog 2

Cải tiến giai đoạn tô điểm chương trình của phép biến đổi ma tập.

Cải tiến việc thực thi chương trình Mag_Pad được tạo ra trong giai đoạn 2

của phép biến đổi ma tập.

5.3.1 Thuật toán tô điểm chương trình

Giai đoạn hai của phép biến đổi ma tập đã được trình bày chi tiết trong [ ],

tuy nhiên vấn đề tô điểm các quy tắc trong chương trình ban đầu chưa hẳn là

rõ ràng. Trước hết cần phải phân tích chi tiết bước tô điểm chương trình, từ

đó xác định một thuật toán tô điểm chương trình.

Chương trình tô điểm Pad bao gồm một tập các quy tắc chứa các vị từ

được tô điểm. Quá trình tô điểm được bắt đầu bằng việc tô điểm vị từ của câu

truy vấn, từ đó thực hiện tô điểm vị từ của đầu các quy tắc. Thông tin về các

đối buộc sẽ được truyền từ đầu đến thân và trong thân thì thông tin được

truyền giữa các đích con. Quá trình tô điểm một quy tắc r có thể thực hiện

nhờ vào đồ thị truyền thông tin được xây dựng cho quy tắc đó.

Định nghĩa 5.9 Đối với mỗi quy tắc r có chứa ít nhất một vị từ IDB trong

thân, ta tạo ra một đồ thị, ký hiệu IPG, được gọi là đồ thị truyền thông tin của

quy tắc r - là một đồ thị có hướng được xây dựng như sau:

Vị từ đầu quy tắc r tạo thành nút xuất phát của đồ thị và chỉ có các cạnh đi.

Mỗi vị từ IDB trong thân quy tắc r được biểu diễn bởi một nút trong IPG.

Các cạnh có hướng p S q từ nút p đến nút q được gán nhãn là tập S các

biến. Các cạnh và nhãn chỉ định cách thức thông tin được truyền giữa các

đích con.

Các cạnh của đồ thị chỉ ra một thứ tự để các đích con được định giá, các

nhãn chỉ định thông tin được truyền sang ngang từ đích con này đến đích con

khác. Giá trị của các nhãn được truyền từ vị từ p đến vị từ q để giới hạn số

các bộ được tính trong q. Nếu vế phải của quy tắc chứa một vài vị từ cùng tên

thì cần phân biệt chúng bằng các chỉ số dưới để chúng là phân biệt nhau

trong đồ thị IPG.

-123-

Page 124: Gt Datalog 2

Quy tắc được tô điểm như sau: Sau khi đã tạo ra đồ thị IPG đối với quy tắc

r đã cho và đầu của quy tắc này được tô điểm, ta có thể dựa vào đồ thị này để

tô điểm thân quy tắc: gán ký tự b cho các đối của vị từ IDB q nếu chúng xuất

hiện trong các nhãn của tất cả các cạnh dẫn đến nút q trong đồ thị IPG và gán

ký tự f cho các đối khác của q.

Ví dụ 5.10 Xem quy tắc sau, trong đó p, q, s là các vị từ IDB:

p(X,Y) q(X,Z) s(Z,Y)

Giả sử đối X của vị từ p bị buộc bởi hằng 1, việc truyền thông tin trong quy

tắc r được biểu diễn như sau hình vẽ:

p(X,Y) q(X,Z) s(Z,Y)

X Z

Hình 5.7 Truyền thông tin ngang trong ví dụ 5.10

Như vậy quy tắc r được tô điểm thành quy tắc:

pbf(X,Y) qbf(X,Z) sbf(Z,Y)

Khi đã hoàn thành việc tô điểm các vị từ trong thân quy tắc, ta có thể tiếp

tục với các quy tắc định nghĩa những vị từ này. Nếu có biến thể khác của tô

điểm của vị từ đã được tô điểm thì ta tạo ra bản sao của mỗi quy tắc định

nghĩa vị từ đó và dùng biến thể mới này để tô điểm cho đầu quy tắc mới. Sau

khi các quy tắc được xử lý bởi kỹ thuật này, thân của quy tắc mới sẽ bắt đầu

được tô điểm. Chẳng hạn với quy tắc tô điểm pbf(X,Y) qbf(X,Z) qfb(Y,Z),

quy tắc này chứa hai phiên bản tô điểm của vị từ q, vì vậy ta tạo ra hai quy

tắc trong Pad cho mỗi quy tắc trong P có đầu là q. Một quy tắc được tô điểm

bf và một quy tắc được tô điểm fb.

Ví dụ 5.11 Xem chương trình Datalog :

r1: p(X,Y) p1(X,Y) p2(Y,X)

r2: p1(X,Y) e1(X,Y)

r3: p1(X,Y) e1(X,Z) p1(Z,Y)

r4: p2(Y,X) e2(Y,X)

-124-

Page 125: Gt Datalog 2

r5: p2(Y,X) e2(Y,Z) p2(Z,X)

Trong đó e1, e2 là những vị từ EDB, p1, p2, p là các vị từ IDB.

Câu truy vấn ? p(a,Y).

Xem quy tắc r1 định nghĩa vị từ p, đối đầu tiên X của p bị buộc vào hằng a.

Đồ thị truyền thông tin IPG của quy tắc r1 như sau:

p p1 p2

Trong quy tắc này, thông tin được truyền từ p vào p1 qua biến X và từ vị từ

p1, thông tin được truyền sang p2 qua các biến X, Y. Như vậy quy tắc r1 được

tô điểm thành quy tắc: pbf(X,Y) Lúc này vị từ p1 được tô điểm bf và vị từ p2 được tô điểm bb, tiếp tục thực

hiện việc tô điểm cho các vị từ p1, p2.

Xét quy tắc r3 định nghĩa vị từ p1, đối đầu tiên X của p1 bị buộc. Đồ thị truyền

thông tin IPG của quy tắc r3 như sau: p1 e1 p1

Như vậy quy tắc r3 được tô điểm thành quy tắc:

e1(X,Z) Tương tự, quy tắc r5 được tô điểm thành quy tắc:

e2(Y,Z) Kết quả ta nhận được chương trình tô điểm sau:

pbf(X,Y) e1(X,Y)

e1(X,Z) e2(Y,X)

e2(Y,Z) Trong ví dụ này thì việc truyền thông tin là rõ ràng bởi vì ta không thể chọn

cách thức truyền thông tin nào khác khi xây dựng đồ thị IPG. Tuy nhiên có

nhiều tình huống mà có thể có nhiều cách chọn để truyền thông tin trong quy

tắc, ta hãy xem lại quy tắc r1 trong ví dụ 5.11, nhưng ta đảo ngược thứ tự các

đích con:

-125-

Page 126: Gt Datalog 2

r1: p(X,Y) p2(Y,X) p1(X,Y)

Lúc này đồ thị truyền thông tin IPG của quy tắc r1 như sau:

p p2 p1

và ta được quy tắc tô điểm:

pbf(X,Y) Tiếp tục tô điểm cho các quy tắc còn lại, kết quả ta nhận được chương trình

tô điểm:

pbf(X,Y) e1(X,Y)

e1(X,Z) e2(Y,X)

e2(Y,Z) Ta có thuật toán sau:

Thuật toán 5.3 (Tô điểm chương trình)

Vào: Chương trình Datalog P và câu truy vấn q.

Ra: Chương trình tô điểm Pad.

Phương pháp: Thuật toán thực hiện theo các bước sau đây:

1. Khởi đầu tập các quy tắc tô điểm Pad của chương trình Datalog P là rỗng.

2. Tô điểm đích truy vấn của chương trình ban đầu. Thêm đích đã tô điểm

này vào Pad.

3. Tô điểm đầu các quy tắc và chèn các quy tắc này vào Pad.

4. Đối với mỗi quy tắc r với tô điểm mới được thêm vào trong tập quy tắc

tô điểm, thực hiện tô điểm thân các quy tắc.

5. Nếu ta nhận được một tô điểm của một vị từ chưa được tô điểm hoặc một

biến thể mới của một tô điểm của vị từ đã được tô điểm rồi thì quay lại

bước 3. Ngược lại, dừng quá trình tô điểm, ta nhận được chương trình Pad

gồm các quy tắc được tô điểm.

-126-

Page 127: Gt Datalog 2

Định lý 5.6 Thuật toán tô điểm chương trình 5.3 là đúng đắn và dừng sau

một số hữu hạn bước.

Chứng minh: Tính đúng đắn được suy từ định lý 5.2. Quá trình lặp để tô

điểm các quy tắc sẽ dừng do quá trình lặp để tô điểm vị từ không bao giờ lặp

lại vị từ đó và do số vị từ IDB cùng tập các quy tắc trong chương trình là hữu

hạn.5.3.2 Tối ưu bước tô điểm chương trình

Một hạn chế của phép biến đổi ma tập là không xác định được thứ tự tối ưu

giữa các đích con để thực hiện ở giai đoạn tô điểm. Câu truy vấn được tô

điểm trước tiên nhằm xác định các đối nào của một vị từ là bị buộc và các đối

nào là tự do. Chiến lược truyền thông tin sang ngang cho trước sẽ được dùng

trong suốt quá trình tô điểm và thứ tự các đích con trong quy tắc phải được

chỉ ra để thực hiện tô điểm. Vì vậy kỹ thuật ma tập sẽ hiệu quả hơn nếu ta

xác định được một thứ tự giữa các đích con trong quy tắc để hỗ trợ cho quá

trình tô điểm. Tuy nhiên, thường thì không có nhiều thông tin để làm cơ sở

đánh giá chi phí về thứ tự phép nối giữa các đích con và khi áp dụng kỹ thuật

ma tập thì hoặc chấp nhận một thứ tự giống như thứ tự của các đích con trong

quy tắc hoặc sử dụng một thứ tự được chỉ ra. Ta xét ví dụ sau đây:

Ví dụ 5.12 Cho chương trình P gồm các quy tắc:

r1: p(X,Y) q(X,Z) s(Z,Y)

r2: q(X,Y) v(X,W,V,Y) w(Y,W,U,V)

r3: s(X,Y) t(X,Z) u(X,Y)

Câu truy vấn: (Q) ? r(2,X) p(X,Y)

Trong đó p, q, s là các vị từ IDB, r, u, v, w và t là các vị từ EDB.

Trong bước tô điểm, đích con p(X,Y) trong truy vấn (Q) có tô điểm bf bởi vì

đối thứ nhất của nó là đối thứ hai của vị từ EDB r(2,X). Vì vậy, quy tắc r1

được tô điểm với đầu là pbf. Ta cần phải đưa ra một quyết định về thứ tự giữa

các đích con q và s trong quy tắc r1. Lúc này thông tin duy nhất có thể sử

-127-

Page 128: Gt Datalog 2

dụng để xác định thứ tự các đích con q và s là biến X bị buộc vào một tập các

hằng và như vậy có thể xác định thứ tự các đích con trong quy tắc r1 là là

(q,s). Kết quả ta nhận được chương trình tô điểm Pad như sau:

ar1: pbf(X,Y) qbf(X,Z) sbf(Z,Y)

ar2: qbf(X,Y) v(X,W,V,Y) w(Y,W,U,V)

ar3: sbf(X,Y) t(X,Y) u(X,Y)

Câu truy vấn (Q) được tô điểm: ? r(2,X) pbf(X,Y)

Bước biến đổi chương trình của phép biến đổi ma tập sẽ biến đổi chương

trình Pad thành chương trình Mag_Pad sau đây:

mar1: pbf(X,Y) mag_pbf(X) qbf(X,Z) sbf(Z,Y)

mar2: qbf(X,Y) mag_qbf(X) v(X,W,V,Y) w(Y,W,U,V)

mar3: sbf(X,Y) mag_sbf(X) t(X,Y) u(X,Y)

mar4: mag_pbf(X) r(2,X)

mar5: mag_qbf(X) mag_pbf(X)

mar6: mag_sbf(X) mag_pbf(X) qbf(X,Z)

Câu truy vấn: (Q) ? r(2,X) pbf(X,Y)

Trong chương trình Mag_Pad, việc định giá trên quy tắc mar1 phụ thuộc

vào số các bộ nhận được của vị từ mag_pbf(X). Mặt khác, từ quy tắc mar4, ta

có thể xác định các bộ của r(2,X), từ đó có thể tính được các bộ của

mag_pbf(X).

Như vậy, nếu biết thông tin về các vị từ cung cấp trị buộc thì điều này sẽ

giúp ta xác định được thứ tự của các đích con trong bước tô điểm. Tuy nhiên,

chỉ khi thực hiện xong bước thứ nhất thì ta mới nhận được vị từ này. Ta có

thể giải quyết vấn đề này bằng cách áp dụng vị từ magic đối với câu truy vấn

(Q) ngay trong bước tô điểm. Từ việc phân tích trên ta có thể cải tiến bước tô

điểm chương trình của phép biến đổi ma tập như sau:

-128-

Page 129: Gt Datalog 2

Sử dụng vị từ magic để biến đổi câu truy vấn, từ đó xác định một thứ tự

giữa các đích con trong các quy tắc để biến đổi chương trình P thành chương

trình tô điểm Pad.

Ví dụ 5.13 Xem chương trình P trong ví dụ 5.12. Từ câu truy vấn (Q) ta tạo

ra quy tắc magic (mar4) định nghĩa vị từ mag_pbf và thêm vị từ magic này

như là một đích con vào quy tắc r1, ta nhận được chương trình P' gồm các

quy tắc:

r1': pbf(X,Y) mag_pbf(X) q(X,Z) s(Z,Y)

r2: q(X,Y) v(X,W,V,Y) w(Y,W,U,V)

r3: s(X,Y) t(X,Y) u(X,Y)

r4: mag_pbf(X) r(2,X)

Để ý rằng các đích con trong quy tắc r1' không được tô điểm bởi vì chúng

ta chưa xác định một thứ tự nối giữa các đích con q và s. Lúc này với các

thông tin về vị từ mag_pbf(X) cùng với những thông tin của các đích con q và

s ta có thể xác định một thứ tự của các đích con.

5.3.3 Cải tiến việc thực thi chương trình Mag_Pad

5.3.3.1 Hạn chế tính toán dư thừa trên chương trình viết lại bởi thuật toán ma tập

Sau khi thực hiện phép biến đổi ma tập, ta nhận được một chương trình

mới và việc tìm kiếm lời giải của chương trình viết lại này thường được thực

hiện bởi các thuật toán định giá dưới lên chẳng hạn thuật toán bán sơ đẳng,

thuật toán này cho phép ngăn chặn việc tính toán lại các sự kiện đã được tính

ở bước trước. Tuy nhiên, nó không ngăn chặn được việc dẫn xuất ra các vị từ

magic dư thừa.

Giữa các vị từ magic tô điểm, mặc dầu không có quan hệ về cú pháp nhưng

về mặt ngữ nghĩa, một vị từ magic tô điểm có thể chứa các vị từ magic tô

điểm khác. Vấn đề ở đây chính là sử dụng các thông tin trong các tô điểm để

xác định xem một vị từ magic có chứa vị từ magic khác hay không. Việc

-129-

Page 130: Gt Datalog 2

kiểm tra quan hệ giữa các vị từ magic có thể thu hẹp thành việc kiểm tra giữa

các vị từ tương ứng của chúng. Điều này được thực hiện qua thuật toán sau

đây:

Thuật toán 5.4 (Kiểm tra quan hệ giữa các vị từ magic được tô điểm)

Vào: Giả sử mag_ và mag_ là hai vị từ magic lần lượt có tô điểm là

và .

Ra: Cho biết vị từ mag_ có chứa vị từ mag_ hay không.

Phương pháp: Thuật toán thực hiện theo các bước:

Bước 1: Biến đổi các vị từ mag_ thành hạng thức p1( ), trong đó bao

gồm các hằng trong tương ứng với ký tự b và các biến phân biệt tương ứng

với ký tự f. Tương tự, biến đổi vị từ mag_ thành hạng thức p2( ).

Bước 2: Nếu tồn tại hợp nhất tử tổng quát nhất (mgu) của p1( ) và p2( )

sao cho p1 chính là p2 thì kết luận vị từ mag_ chứa vị từ mag_ ,

ngược lại thì mag_ không chứa vị từ mag_ .

Định lý 5.7 Thuật toán 5.4 là đúng đắn.

Chứng minh: Rõ ràng nếu tồn tại mgu của p1( ) và p2( ) sao cho p1( ) =

p2( ) thì p1( ) chứa p2( ), điều này có nghĩa mag_ chứa mag_ .

Để ý rằng phép hợp nhất trở nên đơn giản hơn nhiều nếu một trong hai vị

từ cần hợp nhất là nguyên tố nền. Trong trường hợp này thì phép hợp nhất

thu hẹp thành phép đối sánh hạng thức.

Ví dụ 5.14 Xét hai vị từ mag_pbff(a) và mag_pbbf(a,b). Ta có mag_pbff(a)

tương ứng với đích ?p(a,X,Y) và mag_pbbf(a,b) tương ứng với đích ?p(a,b,Z),

mặt khác hợp nhất tử tổng quát nhất của p(a,X,Y) và p(a,b,Z) là {X/b,Y/Z}

và p(a,X,Y) = p(a,b,Z). Vì vậy mag_pbff(a) chứa mag_pbbf(a,b).

Ví dụ 5.15 Xét chương trình Datalog P trong ví dụ 5.6:

r1: totien(X,Y) bome(X,Y)

r2: totien(X,Y) bome(X,Z) totien(Z,Y)

Trong đó: bome là vị từ EDB, totien là vị từ IDB. Giả sử quan hệ đối với vị

-130-

Page 131: Gt Datalog 2

từ EDB bome gồm các bộ (a,b), (b,c), (c,d). Câu truy vấn ?totien(X,d).

Sử dụng chiến lược truyền thông tin từ trái sang phải, sau giai đoạn 1 của

phép biến đổi ma tập ta nhận được chương trình tô điểm Pad sau đây:

ar1 : totienfb(X,Y) bome(X,Y)

ar2 : totienfb(X,Y) totienfb(Z,Y) bome(X,Z)

ar3 : totienbb(Z,Y) bome(X,Y)

ar4 : totienbb(X,Y) totienbb(Z,Y) bome(X,Z)

Đích truy vấn có tô điểm: ? totienfb(X, d)

Sau giai đoạn 2 của phép biến đổi ma tập, ta nhận được chương trình

Mag_Pad:

mar1 : totienfb(X,Y) mag_totienfb(Y) bome(X,Y)

mar2 : totienfb(X,Y) mag_totienfb(Y) bome(X,Z) totienbb(Z,Y)

mar3 : mag_totienbb(Z,Y) mag_totienfb(Y) bome(X,Z)

mar4 : totienbb(X,Y) mag_totienbb(X,Y) bome(X,Y)

mar5 : totienbb(X,Y) mag_totienbb(X,Y) bome(X,Z) totienbb(Z,Y)

mar6 : mag_totienbb(Z,Y) mag_totienbb(X,Y) bome(X,Z)

mar7 : mag_totienfb(d)

Áp dụng thuật toán bán sơ đẳng cho chương trình Mag_Pad này, ta nhận

được:

Bước 1: mag_totienfb(d) được tạo ra.

Bước 2: totienfb(c,d), mag_totienbb(b,d), mag_totienbb(c,d), mag_totienbb(d,d)

được thêm vào.

Bước 3: totienbb(c,d) được thêm vào.

Bước 4: totienbb(b,d), totienfb(b,d) được thêm vào.

Bước 5: totienfb(a,d) được thêm vào.

Bước 6: Kết thúc, ta nhận được lời giải câu truy vấn (c,d), (b,d), (a,d).

-131-

Page 132: Gt Datalog 2

Rõ ràng các vị từ mag_totienbb(b,d), mag_totienbb(c,d), mag_totienbb(d,d)

được tạo ra ở bước 2 là chứa trong vị từ magic biểu diễn câu truy vấn ban đầu

mag_totienfb(d), vì vậy chúng là dư thừa và không cần phải tính.

Tóm lại, tính toán dư thừa trong các thuật toán định giá câu truy vấn trên

chương trình viết lại bởi phép biến đổi ma tập sẽ tránh được bằng cách kết

hợp thêm thuật toán kiểm tra vị từ magic được tạo ra ở mỗi bước có chứa

trong vị từ magic đã tạo ra ở bước trước hay không, nếu có thì ta loại bỏ nó.

5.3.3.2 Kết hợp các chiến lược Sips trong quá trình định giá chương trình Mag_Pad

Chương trình Mag_Pad thường được định giá bởi các thuật toán lặp kiểu

dưới lên, các thuật toán này đã không xem xét số các sự kiện được phát sinh

trong quá trình định giá câu truy vấn, tức là số các sự kiện được tạo ra trong

mỗi bước lặp. Trong mỗi bước lặp nếu ta chọn được một chiến lược truyền

thông tin “tốt” thì có thể giảm bớt sự phát sinh các sự kiện dư thừa và đạt

được hiệu quả tối ưu. Điều này thường không thể nhận được trên chương

trình Mag_Pad theo chiến lược truyền thông tin được chọn trước.

Vấn đề đặt ra trong việc định giá câu truy vấn là làm thế nào tránh được

việc chọn một chiến lược Sips kém hiệu quả trong khi lại không biết được

một chiến lược Sips tốt nhất. Trong trường hợp tổng quát ta không thể biết

trước số các sự kiện phát sinh khi định giá câu truy vấn và vì vậy không thể

chọn ra được một chiến lược Sips nào là tốt nhất. Tuy nhiên, ta có thể có

những thông tin bổ sung về số sự kiện có liên quan trong suốt quá trình định

giá câu truy vấn. Trong việc xác định một chiến lược Sips ở mỗi bước lặp, ta

cần xem xét một số vấn đề sau đây:

Các vị từ magic có thể chứa các vị từ magic khác, chẳng hạn mag_pbf(a) chứa

mag_pbb(a,k). Nghĩa là, với một tập quy tắc magic đã cho mà ở đó các truy

vấn con mag_pbf(a) và mag_pbb(a,k) được tạo ra trong suốt quá trình định giá,

tất cả các câu trả lời đối với truy vấn con thứ hai cũng sẽ được tạo ra bởi truy

-132-

Page 133: Gt Datalog 2

vấn con đầu tiên (tổng quát hơn). Vì vậy, các truy vấn con mag_pbb(a,_)

không cần phải được định giá trong tập quy tắc này.

Các quy tắc ban đầu chỉ nên được xem xét lại sau khi một số khá lớn các sự

kiện được phát sinh. Như vậy, chúng ta cần có một tiêu chuẩn chọn để xác

định vào thời điểm nào thì nên thay đổi sang một chiến lược Sips khác tốt

hơn.

Ví dụ 5.16 Xét chương trình Datalog P trong ví dụ 5.6:

r1 : totien(X,Y) bome(X,Y)

r2 : totien(X,Y) bome(X,Z) totien(Z,Y)

Câu truy vấn là ?totien(a,Y).

Hai chiến lược truyền thông tin có thể được chọn để định giá các đích con

trong thân quy tắc của totien là từ trái sang phải và từ phải sang trái.

Dùng chiến lược trái sang phải ta nhận được tập các quy tắc sau:

totienbf(X,Y) mag_totienbf(X) bome(X,Y)

totienbf(X,Y) mag_totienbf(X) bome(X,Z) totien(Z,Y)

mag_totienbf(Z) mag_totienbf(X) bome(X,Z)

Dùng chiến lược phải sang trái ta nhận được tập các quy tắc sau:

totienbf(X,Y) mag_totienbf(X) bome(X,Y)

totienbf(X,Y) mag_totienbf(X) totien(Z,Y) bome(X,Z)

mag_totienff mag_totienbf(X)

totienff(X,Y) mag_totienff bome(X,Y)

totienff(X,Y) mag_totienff totien(Z,Y) bome(X,Z)

Hai chiến lược này dẫn đến các tập truy vấn con Q1 = {mag_totienbf} và

Q2 = {mag_totienbf,mag_totienff}. Trong Q2 truy vấn con mag_totienff chứa

truy vấn con mag_totienbf. Như vậy việc chọn chiến lược Sips từ phải sang

trái để định giá các đích con dẫn đến quá trình câu truy vấn ?totien(X,Y) và

kiểm tra a có thuộc X không? Tuy nhiên, để ý rằng mag_totienff chứa

mag_totienbf, vì vậy chiến lược từ trái sang phải là tốt hơn chiến lược từ phải

-133-

Page 134: Gt Datalog 2

sang trái.

5.3.4 Phương pháp ma tập cải tiến

Vào: Chương trình Datalog P và câu truy vấn q.

Ra: Câu trả lời truy vấn.

Phương pháp:

1. Tô điểm chương trình Datalog đã cho thành chương trình tô điểm Pad theo

thuật toán tô điểm chương trình.

2. Biến đổi chương trình P thành chương trình Mag_Pad.

3. định giá chương trình Mag_Pad bằng thuật toán dưới lên như bán sơ đẳng,

trong đó ở mỗi bước lặp có kiểm tra quan hệ bao hàm giữa các vị từ magic

được tô điểm để hạn chế tính toán dư thừa và một chiến lược truyền thông

tin sẽ được chọn dựa vào kích thước nhỏ nhất của các quan hệ của các vị từ

được tạo ra tại thời điểm đó.

Định lý 5.8 Phương pháp ma tập cải tiến là đúng đắn và hiệu quả hơn

phương pháp ma tập.

Chứng minh: Tính đúng đắn của thuật toán được suy ra từ định lý 5.6 và

5.7. Tính hiệu quả của phương pháp ma tập cải tiến được thể hiện ở chỗ:

trong quá trình định giá chương trình Mag_Pad, ở mỗi bước lặp có kiểm tra

các quan hệ bao hàm giữa các vị từ magic để hạn chế tính toán dư thừa, đồng

thời có xem xét số các bộ của các quan hệ được tạo ra tại thời điểm đó. Từ đó

kết hợp được các chiến lược truyền thông tin khác nhau trong từng bước lặp,

điều này giảm được chi phí tính toán đối với các phép toán nối trong thân quy

tắc trong quá trình định giá.

-134-

Page 135: Gt Datalog 2

BÀI TẬP

1. Xét chương trình P sau đây:

r1 : p(X,Y) e(X,Y)

r2 : p(X,Z) e(X,Y) p(Y,Z)

Câu truy vấn (Q) : ?- p(1,Y)

Quan hệ EDB của vị từ e được cho bởi tập hợp E = {(1,2),...,(n-1,n)}.

Xây dựng cây hợp giải SLD đối với câu truy vấn ?- p(1,Y)

2. Xét chương trình P sau đây:

r1 : p(X,Z) e(X,Y) p(Y,Z)

r2 : p(n,Y) t(Y)

Câu truy vấn (Q) : ?- p(1,Y)

Giả sử quan hệ E đối với vị từ EDB e gồm các bộ (1,2),...,(n-1,n), quan hệ

đối với vị từ EDB t gồm các bộ 1,2,...,m.

Xây dựng cây hợp giải SLD đối với câu truy vấn ?- p(1,Y)

3. Xét chương trình P sau đây :

r1 : p(X,Z) p(X,Y) e(Y,Z)

r2 : p(X,Y) e(X,Y)

Câu truy vấn (Q) : ?- p(1,Y)

Quan hệ EDB của vị từ e được cho bởi tập hợp E = {(1,2),...,(n-1,n)}.

Xây dựng cây hợp giải SLD đối với câu truy vấn ?- p(1,Y)

4. Xét chương trình "cùng thế hệ" P sau đây:

sg(X,Y) X=Y

sg(X,Y) par(X,Xp) sg(Xp,Yp) par(Y,Yp)

Câu truy vấn: ?-sg(1,Y)

Xây dựng cây hợp giải SLG đối với câu truy vấn ?- p(1,Y)

5. Xét chương trình Datalog P sau đây:

p(X,Z) p(X,Y) p(Y,Z)

p(X,Z) e(X,Z) q(Z)

-135-

Page 136: Gt Datalog 2

Giả sử quan hệ EDB đối với vị từ e gồm là tập { (a,b), (a,d), (b,c) } và quan

hệ đối với vị từ EDB q là {a, b, c}. Xây dựng cây hợp giải SLG đối với câu

truy vấn ?- p(a,Z)

-136-

Page 137: Gt Datalog 2

CHƯƠNG 6

MỞ RỘNG CHƯƠNG TRÌNH DATALOG TRONG

TRƯỜNG HỢP CÁC QUY TẮC CÓ CHỨA KÝ HIỆU HÀM

6.1 Mở đầuTrong chương 2 khi xét các quy tắc của chương trình Datalog ta đã giả

thiết là các đối số của các vị từ chỉ là hằng hoặc biến. Tuy nhiên có những

tình huống được mô tả dễ hơn nhiều bằng cách dùng đối số là các hạng thức

được xây dựng từ biến, hằng và ký hiệu hàm. Các bộ của các quan hệ EDB

có thể có các thành phần là các hạng thức thay vì là các hằng như trước đây.

Ta giả sử các hạng thức trong quan hệ EDB là hạng thức nền, nghĩa là

không chứa biến.

Khi các quy tắc là đệ quy, việc sử dụng các ký hiệu hàm có thể tạo ra một

tập vô hạn các giá trị trong các quan hệ, như ví dụ sau đây :

Ví dụ 6.1 Phép cọng có thể định nghĩa đệ quy như sau : Giả sử int(X) là ký

hiệu vị từ và int(X) là true nếu X nguyên (không âm) và vị từ sum(X,Y,Z) là

true nếu Z=X+Y. Giả sử succ là ký hiệu hàm và succ(X) là số nguyên X+1.

Hằng 0 là số nguyên. Lúc đó succ(0) ta gọi là "1", succ(succ(0)) là "2", các số

nguyên khác ngoại trừ 0 là không tồn tại trong dạng khác. Lúc đó ta có các

quy tắc sau đây thỏa mãn định nghĩa trên :

(1) int(0)

(2) int(succ(X)) int(X)

(3) sum(X,0,X) int(X)

(4) sum(X,succ(Y),succ(Z)) sum(X,Y,Z)

Hai quy tắc (1) và (2) định nghĩa 0, succ(0), succ(succ(0)),...là các số

nguyên,...

Quy tắc (3) nói rằng tổng của mọi số nguyên với 0 là chính số nguyên đó.

Quy tắc (4) nói rằng X+(Y+1) = Z nếu X+Y=Z

Chú ý :

-137-

Page 138: Gt Datalog 2

Các vị từ int và sum tạo ra các quan hệ vô hạn mặc dù các quy tắc đã cho là

an toàn.

Mặc dầu cú pháp đối với các ký hiệu hàm và các ký hiệu vị từ là như nhau

(chuỗi bắt đầu bằng chữ thường) nhưng hoàn toàn không có sự nhầm lẫn

giữa hai kiểu ký hiệu này. Các ký hiệu hàm lấy giá trị trên miền như các

đối số và trả về các giá trị của miền, các ký hiệu vị từ cũng lấy giá trị trên

miền như các đối số nhưng trả về giá trị chân lý (true hoặc false). Như ở ví

dụ trên thì succ lấy một đối số là số nguyên và trả về một số nguyên, trong

khi sum lấy ba đối số nguyên và trả về true nếu thành phần thứ ba bằng

tổng thành phần thứ nhất và thứ hai, ngược lại nó trả về false.

6.2 Định giá các quy tắc Datalog có chứa ký hiệu hàm

Trong phần này ta sẽ tổng quát hóa các kỹ thuật để định giá các quy tắc

Datalog không chứa ký hiệu hàm đã xét đến trong chương 2. Các thuật tóan

sơ đẳng và bán sơ đẳng sẽ hội tụ đến một quan hệ hữu hạn khi các quy tắc là

Datalog. Trường hợp các quy tắc có chứa ký hiệu hàm, ta có thể chỉ ra rằng

tồn tại điểm bất động nhỏ nhất nhưng có thể là không hữu hạn, trong trường

hợp này sẽ không có một số hữu hạn các bước lặp trong thuật toán sơ đẳng để

đạt đến điểm bất động nhỏ nhất.

Trước khi đi vào chi tiết ta sẽ xét xem thuật toán sơ đẳng được sử dụng như

thế nào đối với ví dụ đã cho ở trên, trong ví dụ này, vì đích con không chứa

ký hiệu hàm nên phép toán EVAL làm việc gần như trong chương 2 nhưng

khi ta tìm một phép thay thế có kết quả đối với các biến và thay vào đầu quy

tắc sẽ nhận được các hạng thức không tầm thường.

Ví dụ 6.2 Xét hai quy tắc (1) và (2) trong ví dụ 6.1 trên :

(1) int(0)

(2) int(succ(X)) int(X)

Ta áp dụng thuật toán sơ đẳng đối với các quy tắc này.

Các quy tắc này không chứa vị từ EDB, gọi I là quan hệ một ngôi IDB

-138-

Page 139: Gt Datalog 2

tương ứng với vị từ IDB int.

Khởi đầu : Gán I=Bước 1: Quy tắc (2) không tạo ra bộ nào do I=, quy tắc (1) tạo ra bộ 0

đối với quan hệ I

Bước 2: Quy tắc (1) lại cho ra bộ 0 một lần nữa, nhưng quy tắc (2) bây giờ

có giá trị 0 cho biến X, vì vậy quy tắc (2) sinh ra bộ succ(0) cho I, để ý bộ

này có một thành phần và thành phần này là một hạng thức với ký hiệu hàm

succ.

Bước 3: X có thể lấy giá trị succ(0), quan hệ đối với quy tắc (2) là quan hệ

trên thuộc tính X, đó là {0,succ(0)}. Giá trị mới này của X sinh ra bộ mới

succ(succ(0)) cho I.

Trong trường hợp tổng quát, ở bước i của thuật toán sơ đẳng sẽ sinh ra một

bộ mới succi-1(0) cho quan hệ I.

Như vậy có thể thấy rằng quan hệ I biểu thị một quan hệ vô hạn và tập các

số nguyên không âm {0,1,2,...} là tập các bộ của quan hệ I "nhận được" sau

vô hạn lần các bước lặp.

Một quá trình tương tự như vậy cũng xãy ra đối với quy tắc (3) và (4) để

tính quan hệ sum. Ở bước đầu tiên các đích con trong thân của cả hai quy tắc

có các quan hệ rỗng, vì vậy không có bộ mới nào được tạo ra. Ở bước 2, I

chứa 0 vì vậy quy tắc (3) tạo ra bộ (0,0,0) cho sum. Ở bước 3, I cũng chứa

succ(0), vì vậy quy tắc (3) tạo ra bộ (succ(0),0,succ(0)). Cũng vậy, sum chứa

(0,0,0), nên quy tắc (4) tạo ra bộ (0,succ(0),succ(0)). Tổng quát bộ:

succ(succi(0),succj(0),succi+j(0))

được thêm vào ở bước i+j+2, nếu dùng quy tắc (3) thì j = 0 và nếu dùng quy

tắc (4) thì j > 0. Không có bộ nào khác là được thêm vào đối với sum. Như

vậy sum cũng là một quan hệ vô hạn

Trong ngữ cảnh này không thể tính các quan hệ vô hạn như int, sum vì

không bao giờ đạt đến điểm bất động nhỏ nhất của các quy tắc, không quan

-139-

Page 140: Gt Datalog 2

trọng vấn đề thời gian thực hiện thuật toán. Mặc khác, tính không thể tính

toán được của các quan hệ không mâu thuẩn với sự kiện chúng được xác định

khá tốt bởi quá trình tạo ra điểm bất động nhỏ nhất. Trong phần tiếp theo ta

sẽ thấy làm thế nào để có thể dùng các quy tắc được định nghĩa bởi các quan

hệ vô hạn và nhận được câu trả lời trong khoảng thời gian hữu hạn.

6.2.1 Ghép hạng thức (Term Matching)

Thuật toán ghép hạng thức mà ta sẽ xét sau đây đóng vai trò hết sức quan

trọng trong việc mở rộng các thuật toán sơ đẳng, bán sơ đẳng khi các quy tắc

Datalog có chứa ký hiệu hàm trong các đối số. Với một đích con là một công

thức nguyên tố thông thường chứa các biến, ta thử ghép nó với một nguyên

tố nền, tức là với một bộ của quan hệ đối với các vị từ xuất hiện trong đích

con. Khi ta ghép một công thức nguyên tố tùy ý với một nguyên tố nền, ta

thay thế mỗi biến của công thức đầu để làm nó y hệt đối với công thức thứ

hai. Thuật toán sau đây kiểm tra xem tồn tại một phép thay thế như vậy hay

không và tim nó nếu tồn tại.

Thuật toán 6.1: Thuật toán ghép hạng thức

Vào: Một công thức nguyên tố F với các biến X1,...,Xn (n 0) và một

nguyên tố nền G.

Ra: Kết quả là true nếu tồn tại phép thay thế duy nhất trên các biến X1,...,Xn

sao cho đối với mỗi sự xuất hiện của Xi trong F ta thay thế bởi (Xi) sẽ nhận

được nguyên tố nền G. Ta bảo phép ghép hạng thức thành công.

Kết quả là false nếu không tồn tại phép thay thế như vậy. Ta bảo phép

ghép hạng thức thất bại.

Phương pháp: Khởi đầu, với mọi i, (Xi) không được xác định. Lúc đó ta áp

dụng thủ tục đệ quy match sau đây đối với F và G. Nếu lần gọi thủ tục

match(F,G) thành công tức là cho kết quả true thì (Xi) sẽ được xác định với

mọi i và phép thay thế này là phép ghép hạng thức được đưa ra như một

output, nếu ngược lại (kết quả là fail) thì không tồn tại phép ghép hạng thức.

-140-

Page 141: Gt Datalog 2

Thủ tục ghép hạng thức:

procedure match(A,B) : Boolean;

/* A là một biểu thức, B là một biểu thức không chứa biến, thủ tục sẽ cho kết

quả true nếu nó tìm thấy một phép ghép hạng thức và false nếu ngược lại */

If A là một biến đơn then

If (A) không được xác định then

begin

(A) := B;

return (true);

end

else /* (A) được xác định */

if (A) = B then return (true)

else /* (A) được xác định và không bằng B */

return (false)

else

begin /* A không phải là biến đơn */

let A = (T1,...,Tk) ; /* có thể là một vị từ hoặc ký hiệu hàm */

If B không có dạng (S1,...,Sk) then

return (false)

for i := 1 to k do match(Ti,Si);

If mọi lần gọi đệ quy đều cho giá trị false then

return (false)

else

return (true)

end

Ví dụ 6.3 Ghép công thức nguyên tố: p(f(X,Y),g(X)) (1)

với nguyên tố nền: p(f(h(a),b),g(h(a))) (2)

Đặt A = p(f(X,Y),g(X))

-141-

Page 142: Gt Datalog 2

B = p(f(h(a),b),g(h(a)))

Lúc này p chính là trong thuật toán và :

T1 = f(X,Y)

T2 = g(X)

S1 = f(h(a),b)

S2 = g(h(a))

Việc gọi thủ tục match(A,B) sẽ dẫn đến việc gọi đệ quy như sau :

match(A,B)

return (true)

Như vậy việc ghép hạng thức là thành công và ta nhận được phép thay thế .

Ví dụ 6.4 Kiểm tra phép ghép hạng thức đối với công thức nguyên tố p(X,X)

và nguyên tố nền p(a,a) có thành công không ?

Đặt: A = p(X,X)

B = p(a,b)

Việc gọi thủ tục match(A,B) sẽ dẫn đến việc gọi đệ quy như sau :

match(A,B)

return (false)

Trong phần tiếp theo ta sẽ xét hai phép toán ATOV và VTOA và có thể nhìn

nhận chúng như các phép toán đại số quan hệ được tổng quát hoá..

6.2.2 Phép toán ATOV (Arguments To Variables)

Quan hệ đối với thân quy tắc được xây dựng từ các quan hệ đối với các

đích con của thân. Mỗi quan hệ đối với một đích con có các thuộc tính tương

ứng với các đối số của vị từ đối với đích con đó. Trước tiên ta chuyển đổi các

quan hệ đối với các đích con thành các quan hệ có các thuộc tính tương ứng

với các biến có trong đích con đó bằng cách dùng một phép toán mà ta gọi là

ATOV. Tiếp theo dùng phép nối các quan hệ đã được chuyển đổi đó để tính

quan hệ cho thân quy tắc.

Thuật toán 6.2 (Thuật toán chuyển đổi từ đối sang biến)

-142-

Page 143: Gt Datalog 2

Đặt P là quan hệ đối với đích con p(t1,...,tk);

X1,...,Xn là các biến xuất hiện trong đích con này

Gọi Q là quan hệ output, có lược đồ X1,...,Xn và được khởi gán rỗng.

for mỗi bộ (s1,...,sk) trong P do

if tồn tại một phép ghép hạng thức đối với đích con p(t1,...,tk) và bộ

p(s1,...,sk) then

Thêm vào Q bộ ((X1),..., (Xn))

end

Thuật toán này chuyển đổi một quan hệ P mà các thuộc tính của nó tương

ứng với các đối số của vị từ p thành một quan hệ Q = ATOV(G,P), quan hệ

Q này có các thuộc tính tương ứng với các biến xuất hiện trong đích con G, G

là đích con với vị từ p. Thuật toán ghép hạng thức được sử dụng đối với công

thức nguyên tố G với mỗi bộ của P và ở mỗi thời điểm phép ghép hạng thức

thành công, ta tạo được một bộ của Q từ phép ghép hạng thức nhận được.

Ví dụ 6.5 Xét quy tắc sau đây :

p(f(X),g(X,Y)) q(h(Z),g(f(X),X)) r(Z,Y)

Giả sử quan hệ đối với q gồm 2 bộ :

Q1 Q2

h(c) g(f(a),a)

h(h(d)) g(f(f(a)),f(a))

Quan hệ đối với đích con thứ hai r gồm hai bộ :

R1 R2

c b

h(d) g(b,c)

Thực hiện phép ghép hạng thức cho đích con q(h(Z),g(f(X),X)) với nguyên

tố cơ sở q(h(c),g(f(a),a)) ta nhận được 1(X) = a và 2(Z) = c.

Cũng vậy, thực hiện phép ghép hạng thức cho đích con q(h(Z),g(f(X),X))

với nguyên tố nền q(h(h(d)),g(f(f(a)),f(a))) ta nhận được 2(X) = f(a) và 2(Z)

-143-

Page 144: Gt Datalog 2

= h(d).

Như vậy output của thuật toán khi áp dụng cho quan hệ đối với q và đích

con thứ nhất là :

X Z

a c

f(a) h(d)

Tương tự thực hiện phép ghép hạng thức cho đích con thứ hai r với mỗi bộ

trong quan hệ đối với r, ta được :

Y Z

b c

g(b,c) h(d)

Lấy nối tự nhiên của 2 quan hệ trên ta được quan hệ cho thân quy tắc đã

cho là :

X Y Z

a b c

f(a) g(b,c) h(d)

6.2.3 Phép toán VTOA (Variables To Arguments)

Giả sử R(X1,...,Xn) là quan hệ đối với thân của một quy tắc an toàn, ta có

thể xây dựng quan hệ S đối với đầu quy tắc: Với mỗi bộ của quan hệ R của

thân quy tắc, thay thế đối với mỗi biến X xuất hiện trong đầu quy tắc bởi giá

trị của thành phần của tương ứng với thuộc tính X. Bộ nhận được sẽ thuộc

quan hệ S = VTOA(H,R). Ta có thuật toán như sau :

Thuật toán 6.3 (Thuật toán chuyển đổi từ biến sang đối)

for mỗi bộ của quan hệ R do

begin

for mỗi biến X xuất hiện trong đầu H do

Thay thế tất cả sự xuất hiện của biến X trong H bởi [X];

Đặt vị từ đầu kết quả là p(t1,...,tm);

-144-

Page 145: Gt Datalog 2

Thêm bộ (t1,...,tm) vào S;

end

Ví dụ 6.6 Xét quy tắc ở ví dụ trên, ta đã tính được quan hệ đối với thân quy

tắc này là :

X Y Z

a b c

f(a) g(b,c) h(d)

Quan hệ này chứa 2 bộ, trong bộ thứ nhất cả ba thành phần đều là hằng,

trong bộ thứ hai, cả ba thành phần là các hạng thức không tầm thường.

Khi thay thế bộ đầu tiên (a,b,c) đối với (X,Y,Z) trong đầu, đầu trở thành

p(f(a),g(a,b)), các đối số của nguyên tố này trở thành thành phần thứ nhất và

thứ hai của một bộ trong quan hệ của đầu quy tắc. Thực hiện phép thay thế

tương tự cho bộ thứ hai, ta nhận được bộ thứ hai của quan hệ đối với đầu.

Vậy ta có kết quả quan hệ đối với đầu quy tắc trong ví dụ này :

P1 P2

f(a) g(a,b)

f(f(a)) g(f(a)),g(b,c))

Ta tổng kết các phép toán ở trên trong thuật toán sau đây để tính quan hệ

đối với đầu quy tắc từ các quan hệ đối với các đích con của quy tắc đó.

6.2.4 Tính quan hệ cho đầu quy tắc từ các quan hệ đối với các đích con

của nó

Thuật toán 6.4:

Vào: Các quan hệ R1,...,Rk đối với các đích con G1,...,Gk của quy tắc an toàn

r.

Ra: Quan hệ đối với đầu quy tắc r.

Phương pháp: Đặt X1,...,Xm là toàn bộ các biến xuất hiện trong G1,...,Gk

1. Đối mỗi đích con thông thường, dùng thuật toán 2 để chuyển đổi quan

hệ Ri trên các đối của vị từ của Gi thành quan hệ Qi = ATOV(Gi, Ri) trên các

-145-

Page 146: Gt Datalog 2

biến xuất hiện trong Gi.

2. Thực hiện phép nối (bỏ qua Qi nếu Gi là đích con xây

dựng trong).

3. Áp dụng vào Q một phép chọn đối với mỗi đích con xây dựng trong của

r nếu có. Chú ý rằng vì các quy tắc giả sử là an toàn nên các đích con xây

dựng trong có thể được biểu thị trong các hạng thức của các thuộc tính của Q.

Kết quả ta được quan hệ đối với thân quy tắc của r.

4. Dùng thuật toán 3 để tính quan hệ cho đầu của r từ quan hệ đối với thân

của r.

.2.5 Thuật toán sơ đẳng mở rộng

Thuật toán sau đây là một sự mở rộng của thuật toán sơ đẳng đã trình bày

trong chương 2.

Thuật toán 6.5

Vào: Một tập các quy tắc an toàn, có thể bao gồm các ký hiệu hàm và quan

hệ R1,...,Rk đối với các vị từ EDB trong thân của những quy tắc này.

Ra: Điểm bất động nhỏ nhất của các quy tắc các quan hệ EDB đã cho nếu nó

hữu hạn. Nếu điểm bất động nhỏ nhất là vô hạn thì ta đưa ra một dãy các xấp

xỉ mà hội tụ về điểm bất động nhỏ nhất

Phương pháp : Trước tiên khởi gán quan hệ P đối với mỗi vị từ IDB là rỗng.

Giả sử ở một vài thời điểm ta có các xấp xỉ P1,...,Pm đối với các vị từ IDB

p1,...,pm. Ta nhận được xấp xỉ kế tiếp đối với pi bằng cách tính :

như sau :

1. Với mỗi quy tắc chứa pi, áp dụng thuật toán 6.4 để tính quan hệ cho đầu

quy tắc bằng cách dùng quan hệ thích hợp trong số các quan hệ R1,...,Rk và

P1,...,Pm đối với mỗi đích con thông thường của quy tắc đó.

2. Lấy hợp trên tất cả quy tắc chứa pi của các quan hệ được xây dựng ở 1,

kết quả là .

-146-

Page 147: Gt Datalog 2

Tiếp theo ta so sánh với các Pi. Vì EVAL là toán tử đơn điệu nên ta có P i

với mọi i. Nếu Pi = với mọi i thì nó hội tụ về điểm bất động nhỏ nhất.

Nếu có một vài Pi là tập con thực sự của thì ta phải thay thế các Pi đó bởi

các tương ứng và lặp lại quá trình vừa mô tả, ta nhận được các xấp xỉ mới

đối với các quan hệ IDB. Chú ý rằng khi có các ký hiệu hàm trong các quy

tắc thì có thể không bao giờ đi đến một bước lặp mà ở đó các P i và là bằng

nhau. Trong trường hợp này thuật toán sẽ lặp vô hạn tạo ra các xấp xỉ tăng

dần theo từng bước đến điểm bất động vô hạn.

Ví dụ 6.7 Giả sử có 3 khối hộp: A, B, C và chúng có thể đặt vào trong các

chồng nếu các chồng là các khối có thứ tự kích thước giảm dần. Có 5 tình

huống có thể xãy ra như sau:

C

B

C C

A A B A B

(a) (b) (c)

B

A B A

C C

(d) (e)

Các sự di chuyển hợp lệ của hệ thống được biểu thị bởi quan hệ EDB

-147-

Page 148: Gt Datalog 2

GO(S,T) và có ngữ nghĩa là true nếu và chỉ nếu tầng S có thể trở thành tầng T

bằng một phép di chuyển. Ở đây di chuyển có nghĩa là thay đổi vị trí của một

khối, loại bỏ nó khỏi khối hay nền mà nó đứng trên đó và đặt nó hoặc trên

nền hoặc trên khối lớn hơn.

Đối với các tầng của hình trên quan hệ GO chứa 10 bộ được cho bởi các

nguyên tố cơ sở như sau :

go(a,e) go(b,c) go(b,d) go(c,b) go(c,d)

go(d,b) go(d,c) go(d,e) go(e,a) go(e,d)

ta dùng một ký hiệu hàm hai ngôi g, đặt g(S,T) là một hạng thức biểu diễn

khả năng mà tầng S có thể biến đổi thành tầng T bằng một hay nhiều phép di

chuyển.

Ta định nghĩa vị từ một ngôi true như sau :

(1) true(g(S,T)) go(S,T)

trong đó go được xem là vị từ EDB có quan hệ EDB là GO.

Ta cũng cần một quy tắc để định nghĩa "đi bằng một hay nhiều phép di

chuyển" :

(2) true(g(S,T)) true(g(S,U)) true(g(U,T))

Ta áp dụng thuật toán Sơ đẳng mở rộng đối với hai quy tắc (1) và (2) này:

Khởi đầu ,quan hệ true là rỗng

Bước 1: Quy tắc (2) không tạo ra điều gì cả. Quan hệ EDB GO gồm 10 bộ đã

cho, như vậy ở bước 1 quan hệ đối với quy tắc (1) là GO(S,T). Từ mỗi bộ

trong 10 bộ của quan hệ này ta xây dựng một hạng thức g(S,T) và hạng thức

này trở thành thành phần trong bộ gồm một thành phần của quan hệ một ngôi

đối với vị từ true. Vậy sau bước 1 quan hệ đối với true chứa 10 bộ :

g(a,e) g(b,c) g(b,d) g(c,b) g(c,d)

g(d,b) g(d,c) g(d,e) g(e,a) g(e,d)

Trong các bước sau không tạo thêm bộ mới đối quy tắc (1) nhưng quy tắc

(2) bắt đầu sinh ra các bộ mới đối với true.

-148-

Page 149: Gt Datalog 2

Bước 2:Ta tính quan hệ đối với quy tắc (2), ta có sau bước 1, quan hệ đối

với true gồm 10 bộ ở trên .

Nhắc lại rằng quan hệ đối đối với quy tắc (2) có các thuộc tính S, T, U

tương ứng với 3 biến xuất hiện trong thân quy tắc, mỗi bộ phải có các giá trị

s, t, và u đối với các biến này, sao cho cả hai đích con true(g(S,U)) và

true(g(U,T)) trở thành các bộ của quan hệ đối với true khi ta thay thế s cho S,

t cho T và u cho U.

Tiến hành ghép hạng thức mỗi đích con với mỗi bộ của quan hệ true, điều

này cho chúng ta các giá trị đối với các biến xuất hiện trong đích con đó, S và

U đối với đích con thứ nhất, T và U đối với đích con thứ hai, và rồi lấy nối tự

nhiên của tập các bộ đối với mỗi đích con. Ghép đích con true(g(S,U)) với

mỗi bộ trong 10 bộ trong quan hệ true ở trên. Ví dụ, ghép g(S,U) với bộ thứ

nhất g(a,e) ta thấy rằng phép ghép hạng thức là có thể thực hiện và giá trị của

S trở thành a, U trở thành e. Dễ kiểm tra đối với mỗi bộ trong 10 bộ trên phép

ghép hạng thức là thực hiện được và ta nhận được quan hệ :

{ae,bc,bd,cb,cd,db,dc,de,ea,ed}

ta gọi quan hệ này là Q1(S,U) đối với đích con đầu tiên của quy tắc (2).

Đối với đích con thứ hai true(g(U,T)), ta cũng xây dựng một quan hệ gọi là

Q2(U,T), giá trị của Q2(U,T)) dễ dàng tìm được là :

{ae,bc,bd,cb,cd,db,dc,de,ea,ed}

Tuy nhiên Q1 là quan hệ trên các thuộc tính S và U và Q2 là trên thuộc tính U,

T.

Bây giờ ta lấy nối để nhận được quan hệ đối với quy tắc (2), R

chứa 22 bộ :

{aea,aed,bcb,bcd,bdb,bdc,bde,cbc,cbd,cdb,cdc,cde,dbc,dbd,dcb,dcd,dea,ded,e

ae,edb,edc,ede}

mỗi bộ có các thành phần tương ứng với các biến S, U và T . Đối với mỗi bộ

ta xây dựng bộ một thành phần g(S,T) thuộc quan hệ của true . Vậy 22 bộ

-149-

Page 150: Gt Datalog 2

này tạo ra các bộ của true :

g(a,a), g(a,d), g(b,b), g(b,d), g(b,c), g(b,e), g(c,c), g(c,d), g(c,b), g(c,e), g(d,c),

g(d,d), g(d,b), g(d,a), g(e,e), g(e,b),g(e,c).

Tiến hành tương tự cho các bước tiếp theo.

Nhận xét: Việc tính toán lặp đi lặp lại của true bằng cách dùng các quy tắc

(1) và (2) chắc chắn hội tụ, bởi vì ta không xây dựng các hạng thức lớn dần

theo từng bước, ở đây tất cả các hạng thức của quan hệ true có dạng g(x,y),

trong đó x và y là các giá trị xuất hiện trong quan hệ EDB GO, do GO là hữu

hạn nên true không thể gồm vô hạn các bộ khác nhau.

6.2.6 Thuật toán bán sơ đẳng mở rộng

Tương ứng với thuật toán 6.5 ta có một thuật toán hiệu quả hơn gọi là thuật

toán bán sơ đẳng mở rộng. Đối với mỗi vị từ IDB p ta có một vị từ khác là

P biểu thị sự thay đổi đối với p trong mỗi bước lặp, P = trong thuật

toán 5.

Thay thế quy tắc H G1 G2 ... Gn chứa một hay nhiều đích con IDB

bằng một quy tắc đối với mỗi đích con IDB. Nếu Gi là một đích con IDB thì

ta có quy tắc sau:

H G1 G2 ... Gi-1 Gi Gi+1 ... Gn

Ví dụ 6.8 Xét quy tắc sau :

true(and(X,Y)) true(X) true(Y)

Cả hai đích con đều là đích con IDB, vậy ta có hai quy tắc :

true(and(X,Y)) true(X) true(Y)

true(and(X,Y)) true(X) true(Y)

Hai quy tắc này định nghĩa vị từ true

Thuật toán 6.7

Vào: Một tập các quy tắc an toàn, có thể bao gồm các ký hiệu hàm và quan

hệ R1,...,Rk đối với các vị từ EDB của những quy tắc này.

Ra: Điểm bất động nhỏ nhất của các quy tắc chứa các quan hệ EDB đã cho

-150-

Page 151: Gt Datalog 2

nếu nó hữu hạn. Ngược lại, ta đưa ra một dãy các xấp xỉ vô hạn như trong

thuật toán sơ đẳng.

Phương pháp : Ta bắt đầu tính các quy tắc vi phân đối với tất cả vị từ IDB

như đã nêu ở trên.Thuật toán có thể có vòng lặp vô hạn và tạo ra các xấp xỉ

liên tiếp đối với các quan hệ IDB. Khởi gán quan hệ P đối với mỗi vị từ IDB

p là rỗng và ta tính quan hệ P ban dầu đối với p bằng cách áp dụng thủ tục

EVAL của thuật toán 6 nhưng chỉ với các quy tắc chứa p mà không có các

đích con IDB. Tiếp theo thực hiện các bước lặp sau đây :

Bước 1: Nết tất cả các P là rỗng thì thoát khỏi vòng lặp, thuật toán hội tụ

đến điểm bất động nhỏ nhất là quan hệ P đối với vị từ IDB p.

Bước 2: Ngược lại, thay mỗi quan hệ IDB P bởi PP

Bước 3: Đối với mỗi vị từ IDB p, tính quan hệ vi phân mới P' bằng cách áp

dụng thuật toán 5 đối với mỗi quy tắc vi phân của p bằng cách sử dụng các

quan hệ EDB R1,...,Rk , các quan hệ hiện tại P1,...,Pm đối với các vị từ IDB và

các quan hệ vi phân P1,..., Pm và lấy hợp trên tất cả quy tắc vi phân đối với

p.

Bước 4 : Đối với mỗi quan hệ IDB P, tính P = P' - P, quay lại bước 1.

-151-

Page 152: Gt Datalog 2

Tµi liÖu tham kh¶o

a. Tµi liÖu tham kh¶o tiÕng viÖt

[1] Phan Đình Diệu (1999), Lý thuyết độ phức tạp tính toán, Khoa Công nghệ, ĐHQG Hà Nội.

[2] Đặng Huy Ruận (2000), Lý thuyết đồ thị và ứng dụng, NXB Khoa học và Kỹ thuật.

[3] Lê Mạnh Thạnh, Trương Công Tuấn (1998), “Một số phương pháp xác định mô hình của chương trình Datalog và mở rộng của nó”, Kỷ yếu hội thảo Quốc gia về Tin học ứng dụng, tr. 152-160.

[4] Lê Mạnh Thạnh, Trương Công Tuấn (2001), “Một số phương pháp ước lượng câu truy vấn trong cơ sở dữ liệu suy diễn”, Tạp chí Khoa học Đại học Huế, (7), tr. 49-59.

[5] Lê Mạnh Thạnh, Trương Công Tuấn (2002), “Tối ưu câu truy vấn trên chương trình Datalog”, Báo cáo Hội nghị Toán học toàn quốc lần VI tại Huế.

[6] Lê Mạnh Thạnh, Trương Công Tuấn (2002), “Thuật toán ma tập cải tiến để ước lượng câu truy vấn đối với lớp con của chương trình Datalog”, Chuyên san Tạp chí Bưu chính Viễn thông “Các công trình nghiên cứu - Triển khai Viễn thông và Công nghệ thông tin”, (8), tr. 78-84.

[7] Lê Mạnh Thạnh, Trương Công Tuấn (2003), “Tối ưu hóa câu truy vấn trong cơ sở dữ liệu suy diễn bằng phép biến đổi ma tập”, Tạp chí Tin học và Điều khiển học, 19(3), tr. 233-242.

[8] Lê Mạnh Thạnh, Trương Công Tuấn (2003), “Một số cải tiến đối với phép biến đổi ma tập để tối ưu câu truy vấn trên chương trình Datalog”, Chuyên san Tạp chí Bưu chính Viễn thông “Các công trình nghiên cứu - Triển khai Viễn thông và Công nghệ thông tin”, (9), tr. 77-81.

[9] Hồ Thuần, Lê Mạnh Thạnh, Trương Công Tuấn (2002), “Phân tích một số phương pháp xử lý vòng lặp vô hạn trong quá trình -ước lượng câu truy vấn đối với chương trình Datalog”, Tạp chí Tin học và Điều khiển học, 18(2), tr. 119-127.

[10]Hồ Thuần, Lê Mạnh Thạnh, Trương Công Tuấn (2003), “Ngữ nghĩa chương trình Datalog có chứa phủ định dựa trên logic ba giá trị”, Kỷ yếu hội thảo Khoa học quốc gia “Nghiên cứu phát triển và ứng dụng Công nghệ thông tin và Truyền thông”

-152-

Page 153: Gt Datalog 2

(ICT.Rda), NXB Khoa học và Kỹ thuật, tr. 89-96. [11]Ullman J. D. (1989), Biên dịch: Trần Đức Quang (1999), Nguyên

lý các hệ Cơ sở dữ liệu và Cơ sở tri thức, NXB Thống kê.

B. Tµi liÖu tham kh¶o tiÕng Anh

[12]Abiteboul S. ,Hull R. ,Vianu V. (1995), Foundation of Databases, Addision Wesley Publishing, MA.

[13]Aho A. V., Hopcroft J. E. , and Ullman J. D. (1980), The Design and Analysis of Computer Algorithms, Addison-Wesley Publishing Company.

[14]Aho A. V., Hopcroft J. E., and Ullman J. D. (1983), Data Structures and Algorithms, Addison-Wesley Publishing Company.

[15]Apt K. R. , Blair H. A., and Walker A. (1988), “Towards a Theory of Declarative Knowledge”, In J. Minker, editor, Foundation of Deductive Databases and Logic Programming, Morgan Kaufmann, pp. 89-142.

[16]Apt K. R. (1990), Logic Programming, Elsevier Science Publishers.

[17]Apt K. R., Van Emden M. (1982), “Contributions to Theory of Logic Programming”, JACM, 29(3), 841-862.

[18]Beeri C., Ramakrishnan R. (1987), “On the Power of Magic”, Procceding of the ACM Symposium on the Principles of Databases Systems, CA.

[19]Ceri S. , Gottlob G., Tanca L. (1990), Logic Programming and Databases, Springer-Verlag Berlin Heidelberg.

[20]Ceri S., Gottlob G., Tanca L., Wiederhold G. (1989), “Magic Semi-joins”, Information Processing Letters, Elsevier Science Publishers, pp. 97-107.

[21]Chen W. and Warren D.S. (1996), “Tabled Evaluation with Delaying for General Logic Programs”, JACM, 43(1), pp. 20-74.

[22]Clark K. L. (1978), “Negation as failure”, in Logic and Databases, H. Gallaire and J. Minker, editors, Plenum Press, New York, pp. 293-322.

-153-

Page 154: Gt Datalog 2

[23]Dahi V. (1982), “On Database Systems Developtment through logic”, ACM Trans, on Database Systems 7(1), pp. 102-123.

[24]East D. and M. Truszczynski, (2000) “Datalog with constraints - an answer-set programming system”, Proceedings of the 17th National Conference on Artificial Intelligence, MIT Press, 163-168.

[25]Faber W., Leone N., and Pfeifer G. (2001) “Optimizing the Computation of heuristics for answer set Programming systems”, Proceedings of the 6th International Conference on Logic Programming and Nonmonotonic Reasoning, Springer Verlag, 295-308.

[26]Fitting M. C. (1985), “A Kripke/Kleene semantics for logic programs”, Journal of Logic Programming, pp. 295-312.

[27]Feire J., Swift T., Warren D. S. (1997), “Taking I/O Seriously: Resolution Reconsidered for Disk”, In proceeding of the International Conference on Logic Programming.

[28]Gallaire H., Minker J. and Nicolas J. (1984), “Logic and Databases: A Deductive Approach”, In Computing Survey, Vol 16.

[29]Gelder A. V. (1986), “A Message Passing Framework for Logical Query Evaluation”, ACM, pp. 155-165.

[30]Gelfond M., Lifschitz V. (1988), “The Stable Model Semantics for Logic Programming”, Proceedings of the Fifth Logic Programming Symposium, In R. Kowalski and K. Bowen, Editors, pp. 1070-1080.

[31]Gottlob G., Erich Gradel, Helmut Veith (2002), “Datalog LITE: A Deductive Query Language with Linear Time Model Checking”, ACM Transactions on Computational Logic, 3(1), pp. 42-79.

[32]Kowalski R.A. (1974), “Predicate Logic As a Programming Language”, In Pro, IFIP Congress, North Holland, 569-574.

[33]Loyd J. W. (1984), Foundations of Logic Programming, First Edition. Springer-Verlag, New York.

[34]Minker, J. (1982), “On Indefinite Databases and the Closed World Assumption”, Pro. 6th Int. Conf. on Automated Deduction, Lecture Notes in Computer Science, Spinger-Verlag, pp. 292-308.

[35]Przymusinski T. C. (1988), “On the declarative semantics of -154-

Page 155: Gt Datalog 2

stratified deductive databases and logic programs”, In J. Minker, editor, Foundation of Deductive Databases and Logic Programming, Morgan Kaufmann, pp. 193-216.

[36]Przymusinski T. C. (1995), “Three-Value Non-Monotonic Formalisms And Semantics of Logic Programs”, Journal of Artificial Intelligence, pp. 341-348.

[37]Rajasekar, A., Lobo, J. and Minker, J. (1989), “Weak Generalized Closed World Assumption”, J. Automated Reasoning (5), pp. 293-307.

[38]Ramakrishnan R. (1991), “Magic Templates : A spellbinding Approach to Logic Programs”, Journal of Logic Programming, (11), pp. 189-216.

[39]Ramakrishnan R., Ullman J. D. (1995), “A Survey of Deductive Database Systems”, Journal of Logic Programming, 23(1), 125-149.

[40]Reiter R. (1984), “Towards a Logical Reconstruction of Relational Database Theory”, In M. Brodie and J. Mylopoulos, editors, Springer Verlag, New York, pp. 191-233.

[41]Reiter, R. (1978), “On Closed World Databases”, In Logic and Databases (H. Gallaire and J. Minker eds.), Plenum, New York, pp. 55-76.

[42]Simons P. (1999), “Extending the Stable Model Sementics with more Expressive Rules”, Proceedings of the 5th International Conference on logic Programming and nonmonotonic, Springer Verlag, 305-316.

[43]Shepherdson J. C. (1987), “Negation in Logic Programming”, in Foundation of Deductive Databases and Logic Programming, Minker J., Los Altos.

[44]Subrata Kumar Das (1992), Deductive Databases and Logic Programming, Addision Wesley Ed.

[45]Ullman J. D. (1989), Principles of Database and Knowledge-Base Systems, Computer Science Press.

[46]Van Emden M. and Kowalski R. (1976), “The Semantics of Predicate Logic as a Programming Language”, JACM, 23(4), pp. 733-742.

[47]Widom J. , Garcia-Molina H., Ullman J. D. (2002), Database Systems: The Complete Book, Prentice Hall, Inc.

-155-

Page 156: Gt Datalog 2

CHƯƠNG 1

1.1 Ngôn ngữ cấp một....................................................................3

1.2. Chương trình logic..................................................................4

1.2.1 Một số định nghĩa..............................................................4

1.2.2 Phép thể hiện của chương trình logic...............................7

1.2.3 Phép thể hiện Herbrand....................................................8

1.2.4 Điểm bất động của chương trình logic...........................10

1.2.5 Toán tử hệ quả trực tiếp của chương trình logic..........11

1.3 Cơ sở dữ liệu suy diễn và chương trình Datalog.................12

1.3.1 Cơ sở dữ liệu suy diễn......................................................12

1.3.2 Cú pháp của chương trình Datalog................................12

1.3.3 Giả thiết thế giới đóng và các tiếp cận để xác định ngữ nghĩa

chương trình Datalog................................................................14

2.1 Một số định nghĩa..................................................................18

2.1.1 Các quy tắc an toàn.........................................................18

2.1.2 Các quy tắc chính tắc.......................................................18

2.2 Định giá chương trình Datalog không đệ quy.....................19

2.3 Định giá chương trình Datalog đệ quy.................................23

2.3.1 Hệ phương trình đại số quan hệ ứng với chương trình Datalog 23

2.3.2 Các điểm bất động của hệ phương trình Datalog.........24

2.3.3 Giải hệ phương trình Datalog đệ quy bằng thuật toán sơ đẳng 26

2.3.4 Giải hệ phương trình Datalog đệ quy bằng thuật toán bán sơ

đẳng............................................................................................28

2.4 Định giá chương trình Datalog theo các thành phần liên thông mạnh

.......................................................................................................32

2.5. Định giá chương trình Datalog trong các trường hợp đặc biệt 36

3.1 Chương trình Datalog phủ định phân tầng.........................40

3.2 Chương trình Datalog phân tầng địa phương...................44

-156-

Page 157: Gt Datalog 2

3.3 Chương trình Datalog phân tầng yếu.................................45

3.4 Ngữ nghĩa mô hình bền vững hai giá trị..............................51

4.1 Một số khái niệm và kết quả liên quan................................58

4.2 Ngữ nghĩa của chương trình Datalog P..............................62

4.2.1 Thuật toán tính mô hình bền vững 3-trị -nhỏ nhất dựa vào quan

hệ ............................................................................................62

4.2.2 Thuật toán tính mô hình bền vững 3-trị -nhỏ nhất dựa vào quan

hệ  ..............................................................................................66

4.2.3 Mối quan hệ giữa mô hình bền vững 3-trị -nhỏ nhất với mô hình

bền vững 2-trị và mô hình hoàn hảo.......................................68

5.1 Xử lý vòng lặp vô hạn trong quá trình định giá câu truy vấn 72

5.1.1 Định giá SLD....................................................................72

5.1.2 Định giá bảng...................................................................74

5.1.3 Phương pháp ma tập.......................................................76

5.1.4 So sánh về các phương pháp...........................................78

5.2 Áp dụng phương pháp ma tập trên một số lớp con của chương trình

Datalog..........................................................................................79

5.2.1 Phương pháp ma tập trên chương trình Datalog tuyến tính phải

....................................................................................................79

5.2.2 Phép biến đổi ma tập trên chương trình Datalog không đệ qui 81

5.3 Phương pháp ma tập cải tiến................................................84

5.3.1 Thuật toán tô điểm chương trình...................................84

5.3.2 Tối ưu bước tô điểm chương trình.................................87

5.3.3 Cải tiến việc thực thi chương trình Mag_Pad.................89

6.1 Mở đầu....................................................................................94

6.2 Định giá các quy tắc Datalog có chứa ký hiệu hàm............94

6.2.1 Ghép hạng thức (Term Matching).................................95

6.2.2 Phép toán ATOV..............................................................97

-157-

Page 158: Gt Datalog 2

6.2.3 Phép toán VTOA (Variables To Arguments)................99

6.2.5 Thuật toán sơ đẳng mở rộng.........................................100

6.2.6 Thuật toán bán sơ đẳng mở rộng.................................102

-158-