Bài toán suy dẫn cho lớp phụ thuộc Boole dương tổng quát

Một phần của tài liệu luận án tiến sĩ phát triển một số phụ thuộc logic trong cơ sở dữ liệu (Trang 58 - 64)

PHÁT TRIỂN LỚP CÁC PHỤ THUỘC BOOLE DƯƠNG VÀ ÁNH XẠ ĐÓNG TRONG CSDL

3.1.1Bài toán suy dẫn cho lớp phụ thuộc Boole dương tổng quát

Với hầu hết các loại phụ thuộc dữ liệu, bài toán suy dẫn hay còn gọi là bài toán thành viên đều được đề cập đến với nhiều khía cạnh khác nhau. Bài toán thành viên là bài toán quyết định xem với một tập F hữu hạn các phụ thuộc và

f là một phụ thuộc nào đó, hãy cho biết tập F có suy dẫn hay dẫn ra được f

theo quan hệ hay không.

Vận dụng bài toán thành viên ta có thể xác định được một tập phụ thuộc dữ liệu đã cho có dư thừa không hay có thể kiểm tra xem hai tập phụ thuộc dữ liệu có tương đương với nhau hay không. Thuật toán giải quyết bài toán thành viên có ý nghĩa quan trọng trong việc thiết kế cơ sở dữ liệu. Nhiều nhà nghiên cứu xem đây như là một trong những mục đích cơ bản của việc nghiên cứu các phụ thuộc dữ liệu.

Bài toán suy dẫn cho phụ thuộc Boole dương tổng quát được phát biểu như sau:

Cho LĐQH a = (U ,F ), F là tập các PTBDTQ và một PTBDTQ f. Xác định f ∈ F+ (hay F╞ f) hay không, trong đó F+ là bao đóng của tập PTBDTQ F ?

Bao đóng của tập PTBDTQ F được định nghĩa như sau:

Định nghĩa 3.1.1

Cho tập PTBDTQ F trên U. Xét LĐQH a = (U, F). Bao đóng của tập PTBDTQ F, ký hiệu F+ là tập PTBDTQ được suy dẫn từ F, cụ thể là

trong đó P(U) là tập các công thức Boole dương trên U.

Trong phần này sẽ đề cập một số kết quả giải quyết bài toán suy dẫn trong trường hợp F là tập PTBDTQ và f là một trong các PTBDTQ ứng với các công thức suy dẫn, suy dẫn mạnh, suy dẫn yếu, suy dẫn đối ngẫu và một dạng hỗn hợp. Thuật toán giải bài toán suy dẫn trong trường hợp tổng quát cũng được đề xuất và chứng minh. Các kết quả này đã được trình bày trong [47], [50].

Trong logic ta đã biết F ╞ (g→h) khi và chỉ khi với mọi t ∈ TF ta có hoặc là

g(t) = 0 hoặc là h(t) = 1.

F ╞ (g→h) ⇔ ∀t ∈ TF : g(t) = 0 ∨ h(t) =1

Hoặc một phát biểu tương đương khác,

F ╞ (g→h) ⇔ ∀t ∈ TF : g(t) = 1 ⇒ h(t) = 1

Ngoài ra ta có, với mọi tập biến X ⊆ U và với mọi phép gán trị v ∈ Bn: ∧X(v) = 1 ⇔∀A X: v.A = 1

∨X(v) = 1 ⇔ ∃ A ∈ X: v.A = 1 hoặc các mệnh đề đối ngẫu là

∧X(v) = 0 ⇔ ∃ A ∈ X: v.A = 0 ∨X(v) = 0 ⇔∀ A X: v.A = 0

Vận dụng các nhận xét trên ta có,

Định lý 3.1.1

Cho tập PTBDTQ F trên U và các tập X, Y, Z ⊆ U. Khi đó:

1. ∧X→∧Y ∈ F+ ⇔ ∀v∈TF : ((∃ A ∈ X: v.A = 0) ∨ (∀B ∈ Y: v.B=1))

2. ∧X→∨Y F+ ⇔∀v TF : ((∃ A X: v.A = 0) ∨(∃B Y: v.B=1))

3. ∨X→∧Y ∈ F+ ⇔ ∀v ∈ TF : ((∀A ∈ X: v.A = 0) ∨ (∀B ∈ Y: v.B=1))

5. ∧X→(∧Y)∨(∧Z) F+

⇔ ∀v∈TF:((∃ A∈X:v.A=0)∨(∀B∈Y: v.B=1)∨(∀C∈Z: v.C=1))

Định nghĩa 3.1.2

Cho U = {A1,A2,...,An} và tập trị logic B = {0,1}. Với mỗi phép gán trị v∈Bn

ta ký hiệu Set(v)= {A U | v.A=1} và với mỗi bảng T B n ta ký hiệu

Set(T) = {Set(v) | v ∈ T}. (adsbygoogle = window.adsbygoogle || []).push({});

Ngoài ra ta định nghĩa ánh xạ Vec: SubSet(U) →Bn như sau:

X ⊆ U: Vec(X) = (v1,v2,...,vn), vi = 1 nếu AiX và vi = 0 nếu AiX.

Ta cũng thác triển toán tử Vec cho họ các tập con bất kỳ của U, cụ thể là, ∀P SubSet(U): Vec(P) = {Vec(X) | X ∈ P}

Dễ thấy Vec và Set là hai ánh xạ thuận nghịch với nhau.

Thí dụ 3.1.1

1. Với bảng T cho trên tập U = ABC như dưới đây ta có :

Set(T) = {BC, AC, B}.

2. Cho U = ABCD và P = {AC,ABD,B,∅}. Ta có

Vec(P) = {(1,0,1,0), (1,1,0,1), (0,1,0,0), (0,0,0,0)}.

Khi đó kết quả trên có thể phát biểu theo ngôn ngữ tập hợp như sau:

Định lý 3.1.2

Cho tập PTBDTQ F trên U và các tập X, Y, Z U. Khi đó : 1. ∧X → ∧Y ∈ F+⇔ ∀V ∈ Set(TF ): ( X ⊆ V ⇒ Y ⊆ V ) T A B C 0 1 1 1 0 1 0 1 0

2. X →∨Y F+⇔∀V Set(TF ): ( X V Y V ≠∅)

3. ∨X → ∧Y ∈ F+⇔ ∀V ∈ Set(TF ): ( X ∩ V ≠ ∅ ⇒ Y ⊆ V)

4. X →∨Y F+⇔∀V Set(TF ): ( X V ≠∅ Y V ≠∅ )

5. X→(∧Y)∨(∧Z)∈ F+⇔∀V Set(TF ):

( X ⊆ V ⇒ (Y ⊆ V) ∨ (Z ⊆ V))

Để giải bài toán suy dẫn nói trên trong trường hợp tổng quát, ta có thể vận dụng kết quả của thuật toán hợp giải. Thuật toán hợp giải được mô tả lần đầu trong [45] sau đó được phát triển và cài đặt trong môi trường Prolog [20], [25]. Kết quả của luận án về thuật toán giải bài toán suy dẫn trong trường hợp tổng quát cho phụ thuộc Boole dương tổng quát được công bố trong [47]. Theo định nghĩa 1.5.2 về định lý tương đương của PTBDTQ trong chương 1, bài toán thành viên được giải thông qua mệnh đề sau:

f ∈ F+ khi và chỉ khi F╞ f

Trước khi giải bài toán trên ta có một số nhận xét sau :

Nhận xét

Để chứng minh công thức dương E (là hằng đúng với mọi phép gán trị) ta tiến hành theo các bước sau:

1. Biểu diễn ¬E dưới dạng chuẩn hội tức là dạng tích của các tổng C = C1

∧ C2 ∧ …∧ Ck với mỗi nhân tử Ci là tổng của các biến và hằng 0/1. 2. Thực hiện các bước hợp giải đến khi không thể biến đổi C được nữa:

• Tìm hai nhân tử Ci và Cj có dạng Ci = (p ∨ x) và Cj = (q ∨ ¬x); Nếu tìm được thì thay Ci và Cj trong C bằng nhân tử (p ∨ q).

3. Kết luận: Nếu C = ∅ thì công thức E được chứng minh; ngược lại E không phải là công thức hằng đúng.

Thuật toán giải bài toán trên được thể hiện dưới dạng các thành phần theo kiến trúc sau :

Gọi công thức chuẩn hội C là khả hợp nếu sau khi thực hiện bước 2 của sơ đồ thuật toán trên ta thu được công thức rỗng; ngược lại, kết luận C là không khả hợp.

Thuật toán Resolution dưới đây chứng minh công thức dương E là hằng đúng

Thuật toán 3.1.1 (adsbygoogle = window.adsbygoogle || []).push({});

Algorithm Resolution

Function: Chứng minh công thức E

Input: Công thức dương E

Output: True nếu E là công thức hằng đúng; ngược

lại: False Method

1. Đưa ¬E về dạng chuẩn hội: C:= cnf(¬E);

2. Hợp giải: return(Unification(C) = ∅);

EndResolution.

Thuật toán Unification dưới đây thực hiện chức năng hợp nhất các nhân tử trong công thức dương dạng chuẩn hội C đến mức tối đa

Thuật toán 3.1.2

Algorithm Unification

Function: Hợp nhất các nhân tử trong công thức dương

dạng chuẩn hội C đến mức tối đa.

Input: Công thức dương C dạng chuẩn hội

C = C1C2 ∧ … ∧ Ck;

Output: công thức sau khi hợp nhất. Method

while (còn xử lý được) do

Tìm hai nhân tử trong C có dạng

Ci = (px) và Cj = (q ∨ ¬x); if (tìm được) Thay Ci Cj trong C bằng (pq) else break; endif; endwhile; return C; EndUnification. Nhận xét

Khi quản trị CSDL, người ta thường cho trước một tập các phụ thuộc Boole dương tổng quát F, sau đó với mỗi PTBDTQ f, ta phải xác định F╞ f ?

Nếu biến đổi trước F về dạng tiện lợi C nào đấy thì mỗi lần giải bài toán trên chỉ việc gọi thủ tục hợp giải với tham trị là C và f, trong đó C đã được thu gọn.

Từ định lý tương đương cho lớp các PTBDTQ, ta có nhận xét:

F╞ f Ff ≡¬F ∨ f .

Đặt E ≡ ¬F ∨ f, ta có ¬E ≡ ¬(¬F ∨ f) ≡ F ∧ ¬f.

Theo giả thiết F là tập các PTBDTQ do đó trước hết cần đưa F về dạng chuẩn hội và thực hiện các bước hợp giải đến mức tối đa.

Thuật toán Reduction dưới đây thực hiện nhiệm vụ trên.

Thuật toán 3.1.3

Algorithm Reduction

Input: Tập PTBDTQ F

Output: Công thức thu gọn C của F (adsbygoogle = window.adsbygoogle || []).push({});

Method

1. Đưa F về dạng chuẩn hội:

C := ∅;

for each member f in F do

C := C ∧ cnf(f);

endfor;

2. return (Unification(C));

EndReduction.

Cuối cùng, để giải bài toán thành viên F╞ f ta gọi thuật toán Member_GPBD sau đây.

Thuật toán 3.1.4

Algorithm Member_GPBD

Function: Giải bài toán thành viên F ╞ f

Input: - Tập PTBDTQ F

- PTBDTQ f

Output: True nếu F ╞ f ; ngoài ra: False

Method

1. C:=Reduce(F) ∧ cnf(¬f)

2.return Resolution(C);

EndMember.

Một phần của tài liệu luận án tiến sĩ phát triển một số phụ thuộc logic trong cơ sở dữ liệu (Trang 58 - 64)