Đích con Trả lời
p(1, Y) p(1, 2), p(1, 3) p(2, Y) p(2, 3)
p(3, Y)
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 2.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 thoả 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:
2.p(1, Y) p(1, Z) p(Z, Y) 5.p(1, Y) p(2, Y) 11.p(1, Y) p(3, Y) 3.p(1, Y) a(1, Y) 4.p(1, 2) 20.p(1, 3) 10.p(1, 3) 17.Fail 6.p(2, Y) p(2, Y) 7.p(2, Y) p(2, Z) p(Z, Y) 8.p(2, Y) a(2, Y) 18.p(2, Y) p(3, Y) 19.Fail 9.p(2, 3) 12.p(3, Y) p(3, Y) 13.p(3, Y) p(3, Z) a(Z, Y) 14.p(3, Y) a(3, Y) 16.Fail 15.Fail
- Đí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ụ 3.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 đủ.
Tính đúng đắn của phép định giá SLG đối với chƣơng trình logic tổng quát, từ đó dẫn theo tính đúng đắn trong trƣờng hợp ta đang xét, là một thu hẹp của phép định giá SLG đối với chƣơng trình Datalog.
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ý 2.1 [15] Giả sử 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 đó 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.
2.3. Định giá câu truy vấn theo kiểu dƣới lên (bottom-up) [4]
Cách tiếp cận dƣới lên (bottom-up) còn đƣợc gọi là kết xâu tiến (forward- chaining). Phép suy luận đƣợc thực hiện trên các quy tắc theo hƣớng từ thân đến đầu và đƣợc xem là suy luận theo hƣớng tới. Việc tính toán đƣợc khởi đầu chỉ với các sự kiện EDB và áp dụng lặp đi lặp lại các quy tắc từ phải sang trái, nghĩa là từ thân đến đầu. Kết thúc quá trình tính toán ta nhận đƣợc mô hình nhỏ nhất của chƣơng trình Datalog. Cơ sở của phƣơng pháp dƣới lên xuất phát từ khái niệm điểm bất động của toán tử hệ quả trực tiếp Tp. Với thể hiện 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 Tp(I) - chứa các sự kiện đƣợc dẫn xuất bởi các quy tắc trong chƣơng trình từ những sự kiện trong I.
Quá trình định giá các quy tắc theo kiểu dƣới lên thƣờng sử dụng một phép toán gọi là phép đối sánh, phép toán này đơn giản hơn nhiều so với phép hợp nhất trong phƣơng pháp trên xuống. Khi ta đối sánh một nguyên tố tuỳ ý với một nguyên tố cơ sở, ta thay thế mỗi biến của nguyên tố đầu để làm nó đồng nhất với nguyên tố 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à tìm nó nếu tồn tại.
Thuật toán đối sánh hạng thức (Term match) [4]
Vào: Một công thức nguyên tố F với các biến X1, …, Xn (n 1) và một nguyên
tố cơ sở G.
Ra: Phép đối sánh thành công và cho 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 với mọi i, khi thay Xi trong F bởi (Xi) sẽ nhận đƣợc nguyên tố cơ sở G. Phép đối sánh thất bại và cho kết quả là false nếu không tồn tại phép thay thế nhƣ vậy.
Phƣơng pháp: Khởi đầu, với mỗi i, (Xi) chƣa đƣợc xác định. Lúc đó ta áp dụng thủ tục đệ qui match sau đây đối với F và G. Nếu lời gọi thủ tục match(F, G) thành công thì (Xi) sẽ đƣợc xác định với mọi i và thay thế này là phép đối sánh hạng thức đƣợc đƣa ra nhƣ một kết xuất của thuật toán. Nếu ngƣợc lại thì không tồn tại phép đối sánh.
Chi tiết thuật toán viết theo ngôn ngữ tựa pascal nhƣ sau:
Procedure matchI(A, B);
/* A là một biểu thức, B là biểu thức không chứa biến*/
if (A) là một biến đơn then begin
(A) := B;
return(true);
else /* (A) đƣợc định nghĩa*/
if (A) = B then return(true)
else
return(false);
else
begin /*A không phải là biến đơn*/ Đặt A = p(T1, …, Tk);
If B không có dạng p(S1, …, Sk) then Return(false)
for i:=1 to k do match(Ti, Si);
if một trong những lời gọi đệ quy trả về false then return(false)
else
return(true)
End;
Ví dụ 2.4 Đối sánh nguyên tố p(X, Y) với nguyên tố cơ sở p(b, c).
Đặt A=p(X, Y) B=p(b, c)
Việc gọi hàm match(A, B) sẽ dẫn đến việc gọi đệ quy nhƣ sau: ( , ) ( ) Match(A,B)= ( , ) ( ) match X b X b true match Y c Y c true return(true)
Nhƣ vậy phép đối sánh thành công và ta nhận đƣợc phép thay thế ={X/b, Y/c}.
2.3.1. Thuật toán định giá câu truy vấn theo phƣơng pháp dƣới lên [4]
Từ định lý 1.2 và phép toán đối sánh, ta có thuật toán sau đây:
1. Khởi đầu từ tập M các sự kiện EDB đã cho trong chƣơng trình, thêm vào chƣơng trình P quy tắc sau đây : ans(t1, t2, …, tk) q(t1, t2, …, tk)
2. Đối với mỗi quy tắc A A1 A2 … An trong P, sử dụng phép đối sánh hạng thức, tìm một phép thế sao cho Ai , …, An M. Đối với mỗi phép thế nhƣ vậy, thêm A vào M.
3. Nếu tập các sự kiện M tăng lên thì quay trở lại bƣớc 2. Ngƣợc lại sang bƣớc 4. 4. Câu trả lời đối với truy vấn là tập các sự kiện của vị từ ans trong M.
Phƣơng pháp dƣới lên có ƣu điểm là quá trình định giá câu truy vấn đảm bảo kết thúc.
Phƣơng pháp dƣới lên có nhƣợc điểm là không hƣớng đích, nhiều sự kiện không thích hợp với câu truy vấn cũng đƣợc tính, vì vậy sẽ dẫn xuất nhiều sự kiện dƣ thừa. Số các sự kiện dƣ thừa có thể rất lớn và trong trƣờng hợp đó thì tính toán dƣới lên là không hiệu quả.
Để ý trong thuật toán trên ở mỗi bƣớc lặp sẽ lặp lại tính toán những sự kiện đã đƣợc tạo ra trong những bƣớc trƣớc. Chúng ta có thể làm giảm đi các tính toán dƣ thừa bằng cách chia quá trình định giá các quy tắc thành các tính toán nhỏ hơn trên mỗi tập con cực đại các vị từ đệ quy lẫn nhau của chƣơng trình. Các tập này đƣợc xác định bằng cách xác định thành phần liên thông mạnh của đồ thị phụ thuộc
2.3.2. Thuật toán định giá chƣơng trình Datalog theo các thành phần liên thông mạnh [7] mạnh [7]
Các thuật toán ngây thơ và nửa ngây thơ thƣờng đƣợc sử dụng để xác định 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.7 Gọi DG(P) = (V, E) là đồ thị phụ thuộc của chƣơng trình Datalog P.
(i) 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.
(ii) Đồ 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:
Ví dụ 2.5 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} Đồ thị phụ thuộc thu gọn của P nhƣ hình vẽ sau:
Đồ thị phụ thuộc của chƣơng trình trong ví dụ 2.5
s t
r q
Lúc đó ta có đồ thị phụ thuộc thu gọn của P nhƣ hình vẽ sau:
Hình 2.5 Đồ thị phụ thuộc thu gọn của chƣơng trình trong ví dụ 2.5
Định nghĩa 2.8 Một sắp xếp tuyến tính trên đồ thị phụ thuộc thu gọn G’ 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’ thi i<j. Với đồ thị phụ thuộc thu gọn G’ ở ví dụ trên, 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’.
Định nghĩa 2.9 (Đánh số hiệu của mức cho các đồ thị 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ác mức, các vị từ EDB thuộc mức 0, đỉnh thuộc 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 đó.
Trong ví dụ 2.5 thì S1 = {s}, S2 = {t} thuộc mức 0, S3 = {r, u} thuộc mức 1, S4 = {q} thuộc mức 2.
Thuật toán 2.1 [7]
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 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.
s t
r, u q
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
i
P
EVAL (DB) là lời giải việc định giá chƣơng trình Pi theo thuật toán nửa ngây thơ 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 :=
i
P
EVAL (DB I)
Output I;
Định lý 2.2 [7] Thuật toán trên 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 Pj với j<i xem nhƣ là các vị từ EDB cho chƣơng trình Pi. 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 nửa ngây thơ đƣợc áp dụng cho từng bƣớ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 nửa ngây thơ đƣợ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:
- 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 này định giá chƣơng trình sẽ đơn giản hơn nhiều.
Ví dụ 2.6 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)
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:
Hình 2.6 Đồ thị phụ thuộc của chƣơng trình trong ví dụ 2.6
p
p1 p2
Đồ 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 nửa ngây thơ, 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: 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.4. Định giá câu truy vấn theo cách kết hợp trên xuống và dƣới lên [4]
Trong thời gian gần đây, một số phƣơng pháp mở rộng để trả lời câu truy vấn đƣợc đề xuất nhằm mục đích tạo ra một chiến lƣợc tìm kiếm hƣớng đích, đồng thời có tính hiệu quả là đảm bảo kết thúc quá trình tính toán câu trả lời truy vấn. Điển hình là phép biến đổi ma tập (magic set transformation). Phƣơng pháp này đƣợc đánh giá là một trong những kỹ thuật tối ƣu câu truy vấn có hiệu quả trong CSDL suy diễn. Lý do quan trọng đối với sự thành công của các phƣơng pháp này là sự kết hợp đƣợc các ƣu điểm của kỹ thuật định giá theo kiểu trên xuống và dƣới lên, từ đó giảm thiểu đƣợc số các sự kiện cần tính và tìm kiếm CSDL. Trong [3] tác giả đã áp dụng hai phƣơng pháp
này để xử lý vòng lặp vô hạn trong quá trình định giá câu truy vấn trên chƣơng trình Datalog.
Có thể minh hoạ cho kiểu tiếp cận này bởi hoạt động của phép biến đổi ma tập. Ý tƣởng chính của phép biến đổi ma tập là mô phỏng sự lan truyền các trị buộc đƣợc tạo ra trong phƣơng pháp định giá câu truy vấn kiểu trên xuống. Sự lan truyền này nhận đƣợc bằng cách viết lại chƣơng trình gốc ban đầu. Trong mỗi quy tắc gốc một điều kiện mới đƣợc thêm vào để hạn chế việc tính toán trên quy tắc. Các điều kiện này đƣợc xem là các quan hệ lọc. Một tập quy tắc mới đƣợc tạo ra để mô phỏng sự lan truyền các trị buộc.
Phƣơng pháp ma tập biến đổi chƣơng trình Datalog P thành một chƣơng trình đƣợc gọi là chƣơng trình magic. Chƣơng trình magic tƣơng đƣơng với chƣơng trình P (theo nghĩa cho cùng kết quả câu truy vấn) nhƣng việc định giá trên chƣơng trình magic này sẽ hiệu quả hơn so với việc định giá câu truy vấn trên chƣơng trình ban đầu. Quá trình biến đổi chƣơng trình P theo phƣơng pháp ma tập bao gồm hai giai đoạn:
Giai đoạn 1: Thực hiện việc tô điểm chƣơng trình ban đầu thành một chƣơng trình (ký