Định giá câu truy vấn theo kiểu dƣới lên (bottom-up)

Một phần của tài liệu Datalog và cơ sở dữ liệu suy diễn (Trang 47)

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}.

Một phần của tài liệu Datalog và cơ sở dữ liệu suy diễn (Trang 47)

Tải bản đầy đủ (PDF)

(98 trang)