Bên cạnh việc định nghĩa các vị từ mở rộng, DATALOG cho phép viết các mệnh đề Horn chỉ rõ các vị từ mục đích. Bảng chữ cái sử dụng đƣợc lấy ra trực tiếp từ bảng chữ cái của logic bậc một. Nó bao gồm các ký tự sau đây: Các bảng Các quy tắc Suy diễn Tìm kiếm và cập nhật
1.Các biến đƣợc ký hiệu là x, y, z, …
2. Các hằng đƣợc chọn giữa các thể hiện của các kiểu cơ sở
nguyên, số, chuỗi ký tự..
3. Các vị từ quan hệ đƣợc ký hiệu qua một chuỗi ký tự, mỗi vị từ có thể nhận một số cố định các đối số (n cho một vị từ n ngôi) 4.Các vị từ so sánh =, <, , ,
5. Các dấu nối logic: “AND” đƣợc ký hiệu qua dấu phẩy ( , ), “kéo theo” đƣợc ký hiệu qua mũi tên ngƣợc () (thể hiện từ phải qua trái).
Xuất phát từ bảng chữ cái này , ngƣời ta xây dựng các công thức cụ
thể, đó là các mệnh đề Horn hoặc là các quy tắc DATALOG:
o Một term (hạng) là một hằng hoặc một biến.
o Một nguyên tử ( hoặc một công thức nguyên tử, hoặc literal
dƣơng) là một biểu thức dạng P(t1, t2,…,tn) trong đó P là
một vị từ n ngôi (có n tham đối).
o Một nguyên tử tức thời (cơ sở) là một nguyên tử không chứa biến (các đối đều là hằng).
Từ các khái niệm này, một quy tắc đƣợc định nghĩa nhƣ sau:
Khái niệm 2.5: Quy tắc DATALOG (DATALOG rule)
Quy tắc DATALOG là biểu thức có dạng Q P1,P2,….,Pn với
n>=0 và Q là một nguyên tử được xây dựng từ một vị từ quan hệ, trong khi đó các Pi là các nguyên tử được xây dựng với các vị từ quan hệ hoặc các vị từ so sánh.
Q đƣợc gọi là đầu (head) của quy tắc (hoặc gọi là kết luận);
P1,P2,…,Pn đƣợc gọi là thân (body) của quy tắc (hoặc là điều kiện). Mỗi
Bằng cách áp dụng luật tƣơng đƣơng P Q P Q, một quy
tắc đƣợc viết dƣới dạng (P1,P2,…Pn) Q; sau đó bằng cách áp dụng luật
(P1,P2) P1P2, ta nhận đƣợc P1 P2 … Pn Q.
Nhƣ vậy một quy tắc là một mệnh đề Horn với nhiều nhất là một literal
dƣơng (đầu của quy tắc Q).
Ví dụ 2.1: Chƣơng trình DATALOG định nghĩa một cơ sở dữ liệu mở
rộng mô tả các nhân viên (vị từ NHANVIEN) và các phòng (vị từ PHONG) của
một xí nghiệp lớn. Cơ sở dữ liệu mục đích chỉ rõ sếp trực tiếp của từng nhân
viên (vị từ LANHDAO), sau đó là sếp của sếp trực tiếp (vị từ LANHDAO2):
Ví dụ 2.2: Định nghĩa một cơ sở dữ liệu mở rộng bao gồm các nƣớc và các chuyến bay nối các thủ đô của các nƣớc. Cơ sở dữ liệu mục đích cho
phép tính toán các thủ đô gần nhau (vị từ THUDOGAN) nhƣ là các thủ đô có
thể đến đƣợc nhau trong vòng ít hơn 5 giờ theo cả hai chiều. Các nƣớc gần
nhau (vị từ NUOCGAN)là các nƣớc có thủ đô gần nhau:
{
/* Khai báo các vị từ mở rộng */
NHANVIEN(TenPH: String, TenNV: String ); PHONG( TenPH: String, TenLĐ : String);
/*Khai báo các vị từ mục đích*/
LANHDAO1(x,y) PHONG(z,x), NHANVIEN(z,y) LANHDAO2(x,y) LANHDAO1(x,z),LANHDAO1(z,y) }
{
/* Khai báo các vị từ nhập */
NUOC(TenN: String, Thudo: String, Danso: Int); CHUYENBAY(Maso: Int, Đi: String,
Trong số các quy tắc, có tồn tại một lớp quan trọng đặc biệt bởi sức mạnh mà nó đem lại cho ngôn ngữ: Đó là các quy tắc đệ quy, chúng cho
phép định nghĩa một vị từ mục đích trong vai trò của chính nó.
Khái niệm 2.6: Quy tắc đệ quy (Recursive rule)
Quy tắc đệ quy là quy tắc mà vị từ đầu cũng xuất hiện trong thân.
Một quy tắc đệ quy mà vị từ đầu của nó xuất hiện chỉ một lần trong thân đƣợc gọi là tuyến tính. Một quy tắc không tuyến tính là bậc hai nếu vị từ đầu xuất hiện hai lần trong thân. Ngoài ra, một quy tắc đệ quy mà vị từ đầu của nó xuất hiện n lần (n>=3) trong thân trở nên khó hiểu.
Ví dụ 2.3: Minh hoạ các quy tắc đệ quy:
{
/* Các mức được chỉ ra bằng một quy tắc đệ quy tuyến tính*/
LANHDAO(x,y) LANHDAO1(x,y) ;
LANHDAO(x,y) LANHDAO1(x,z) , LANHDAO(z,y)
/* Các mức được chỉ ra bằng một quy tắc đệ quy bậc hai */
LANHDAO(x,y) LANHDAO(x,y) ;
LANHDAO(x,y) LANHDAO(x,z) , LANHDAO(z,y) ; /*Định nghĩa các vị từ mục đích */
THUDOGAN(x,y) CHUYENBAY(z,x,y,t),t<=5, CHUYENBAY(w,y,x,u), u<=5; NUOCGAN(x,y) NUOC(x,u,p), NUOC(y,v,q),
THUDOGAN(u,v);
/* Các sự kết nối thực hiện được bằng các bước ít hơn 5 giờ */
KETNOI(x,y) CHUYENBAY(z,x,y,t) , t <= 5 ; KETNOI(x,y) KETNOI(x,z) , KETNOI(z,y) ; }
Mỗi quan hệ đệ quy cần một quy tắc ban đầu không đệ quy, sau đó là
một quy tắc tính toán đệ quy. Cặp quy tắc đầu tiên định nghĩa ai lãnh đạo ai ở mọi mức. Cặp quy tắc thứ hai định nghĩa cùng một quan hệ nhƣng bằng cách sử dụng một quy tắc không tuyến tính. Cặp cuối cùng chỉ ra các kết nối hàng không có thể giữa các thủ đô bằng các chuỗi kết nối kết nối đơn giản đƣợc thực hiện trong ít hơn 5 giờ.
Ví dụ 2.4 chỉ ra trong DATALOG cơ sở dữ liệu nổi tiếng GIAĐÌNH xuất phát từ các vị từ nhập BO và ME chỉ ra ai là bố hoặc mẹ của ai. Quan hệ
đệ quy TOTIEN thƣờng đƣợc sử dụng để nghiên cứu các vấn đề của đệ
quy.Ta thêm vào định nghĩa ONGBA nhƣ là bố mẹ của các bố mẹ và
ANHEMHO nhƣ là hai ngƣời có một tổ tiên chung. Các bạn của gia đình
(BANGĐ) là các bạn (vị từ nhập BAN) hoặc các bạn gia đình của bố mẹ. Anh em cùng thế hệ (vị từ CUNGTHEHE) đƣợc suy diễn từ anh em trai hoặc chị em gái. Ta thấy rằng định nghĩa này là rộng: nó cho không chỉ là anh em họ
mà mình là anh em của chính mình (bạn là anh em họ đúng mức 0 của bạn),
các anh em trai và chị em gái sau đó là các anh em họ cùng thế hệ. Ví dụ 2.4: Cơ sở dữ liệu gia đình:
{
/* Các vị từ nhập BO, ME và BAN */ BO(Bo: String, Con: String)
ME(Me: String, Con: String)
/* Thân sinh như là hợp của BO và ME */ THANSINH(x,y) BO(x,y);
THANSINH(x,y) ME(x,y);
/* Ông bà thông qua tự nối của bố mẹ */
ONGBA(x,z) THANSINH(x,y), THANSINH(y,z) ;
/* Tổ tiên được định nghĩa thông qua một quy tắc tuyến tính */
TOTIEN(x,y) BOME(x,y);
TOTIEN(x,z) TOTIEN(x,y), BOME(y,z) ;
/* anh em họ thông qua tổ tiên */
ANHEMHO(x,y) TOTIEN(z,x), TOTIEN(z,y) ;
/* Bạn của gia đình như là bạn của tổ tiên */ BANGĐ(x,y) BAN(x,y);
BANGĐ(x,y) BOME(x,z), BANGĐ(z,y) ;
/* Anh em cùng thế hệ thông qua các bố mẹ */ CUNGTHEHE(x,y) BOME(z,x), BOME(z,y) ;
CUNGTHEHE(x,y) BOME(z,x), CUNGTHEHE(z,u) , BOME (u,y) ;
}
Tổng quát hơn, một quan hệ đệ quy là một quan hệ đƣợc định nghĩa trong chức năng của chính nó. Một quan hệ đệ quy không phải bắt buộc đƣợc định nghĩa thông qua một quy tắc đệ quy, do các quy tắc đệ quy lẫn nhau cho phép định nghĩa một quan hệ đệ quy. Chính xác hơn, có thể biểu diễn theo cách mà các vị từ của nó phụ thuộc cái này vào cái kia thông qua
vị từ P với một vị từ Q nếu có tồn tại một quy tắc với đầu Q trong đó P xuất hiện nhƣ một mục đích con. Một vị từ mục đích là đệ quy nếu nó xuất hiện trong một vòng tròn.
Ví dụ 2.5: Chƣơng trình DATALOG minh hoạ các quy tắc đệ quy lẫn nhau, vị từ R là đệ quy: { R(x,y) B(x,y) ; R(x,y) P(x,z) , B(z,y) ; P(x,y) R(x,z) , C(z,y) ; } Tổng kết
Một chƣơng trình DATALOG là một tập hợp các quy tắc. Ngƣời ta ghi chép các quy tắc tạo thành chƣơng trình giữa các dấu ngoặc nhọn { }, mỗi một quy tắc đƣợc ngăn cách với với quy tắc đi sau bằng dấu chấm phẩy. Thứ tự của các quy tắc là không quan trọng. Các vị từ quan hệ đƣợc phân lớp thành các vị từ mở rộng (extension) mà các thể hiện của chúng đƣợc lƣu giữ trong một cơ sở trên các đĩa và các vị từ mục đích (intension), đó là các quan hệ suy diễn. DATALOG cho phép ngƣời sử dụng định nghĩa cùng một lúc các quy tắc và các sự kiện, một sự kiện đƣợc chỉ ra một cách
đơn giản giống nhƣ một quy tắc với biến đƣợc thể hiện không có thân. Mặc
dù cơ sở mở rộng có thể đƣợc định nghĩa trong DATALOG giống nhƣ một dãy các vị từ, nói chung nó đƣợc tạo ra giống nhƣ một cơ sở dữ liệu quan hệ kinh điển. Nhƣ vậy, DATALOG sẽ đƣợc sử dụng để chỉ rõ các quy tắc
với các thân và các đầu. Cặp cơ sở dữ liệu ngoại diện - cơ sở dữ liệu mục
đích được viết trong DATALOG tạo nên một cơ sở dữ li ệu suy diễn được định nghĩa trong logic.