Tải bản đầy đủ - 0 (trang)
Chương 1 TỔNG QUAN VỀ CHƯƠNG TRÌNH LOGIC

Chương 1 TỔNG QUAN VỀ CHƯƠNG TRÌNH LOGIC

Tải bản đầy đủ - 0trang

(iii) Nếu f là ký hiệu hàm n-ngôi trong A 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 mệnh đề trên.

Một hằng được xem là ký hiệu hàm 0-ngôi. Hằng và biến là các hạng thức

nguyên tố, hạng thức nền là hạng thức không chứa biến.

Định nghĩa 1.3 (Nguyên tố). Một nguyên tố có dạng p(t1,…,tn), trong đó p là ký

hiệu vị từ n-ngôi và các đối t1,...,tn là các hạng thức. Nguyên tố nền là nguyên tố

không chứa biến.

Ví dụ 1.1 Để chỉ mối quan hệ cha/con ta có thể định nghĩa nguyên tố father(X,Y),

trong đó vị từ father là vị từ 2-ngôi và father(X,Y) để chỉ X là cha của Y.

Định nghĩa 1.4 (Literal). Literal là một nguyên tố, gọi là literal dương và literal

âm là phủ định của nguyên tố.

Trong phần tiếp theo sẽ trình bày cú pháp và ngữ nghĩa của chương trình

logic xác định – đây là lớp chương trình logic đơn giản nhất.

1.2. CHƯƠNG TRÌNH LOGIC

Các chương trình logic cho phép mơ hình hóa khá nhiều bài tốn khác

nhau, các mệnh đề trong chương trình mơ tả các đối tượng xác định và mối quan

hệ giữa chúng.

1.2.1. Cú pháp

Định nghĩa 1.5 (Chương trình logic). Chương trình logic là một tập hữu hạn khác

rỗng các mệnh đề có dạng:

a ← b1,…,bm, not c1,…, not cn



(1)



trong đó n, m ≥ 0, a và bi, cj là các nguyên tố. Trong mệnh đề (1), nếu m = n = 0 thì

nó được gọi là mệnh đề đơn vị, nghĩa là mệnh đề có dạng: a ←, đó là mệnh đề với

thân rỗng, ký hiệu ← có thể không viết.



11



Chú ý rằng thân mệnh đề chứa các lietral phủ định not c1,…,not cn. Literal not

a sẽ được xem là sai nếu giá trị chân lý của a không được chứng minh một cách hữu

hạn thông qua phép hợp giải SLD. Vì vậy phủ định not còn được gọi là phủ định do

thất bại hoặc phủ định mặc định. Để ý rằng phép phủ định trong logic cổ điển, còn

gọi là phủ định mạnh, ký hiệu là ¬.

Định nghĩa 1.6 (Vũ trụ/Cơ sở). Cho P là chương trình logic xác định.

• Vũ trụ Herbrand của P, ký hiệu UP, là tập các hạng thức nền được xây dựng

từ các hằng và các ký hiệu hàm trong P.

• Cơ sở Herbrand của P, ký hiệu BP, là tập các nguyên tố nền được xây dựng

từ các vị từ trong P có đối là các hạng thức nền trong vũ trụ Herbrand UP.

Định nghĩa 1.7 (Thể hiện/Mơ hình). Cho P là chương trình logic xác định.

Một thể hiện Herbrand (hoặc đơn giản là thể hiện) của P là một tập con tùy ý của

cơ sở Herbrand BP của P.

Một thể hiện I của P là mơ hình của P nếu mọi mệnh đề của P là đúng theo thể hiện I.

Ví dụ 1.2. Xét chương trình logic P:

r1: sotunhien(0)

r2: sotunhien(ketiep(X)) ← sotunhien(X)

Trong chương trình logic này thì ketiep là ký hiệu hàm 1-ngôi và ketiep(X) = X+1

với X ∈ tập số tự nhiên N, nguyên tố sotunhien(X) để chỉ X là một nguyên tố tự

nhiên. Mệnh đề đơn vị r1 có ý nghĩa0 là một số tự nhiên và r2 là mệnh đề với ý

nghĩa nếu X là số tự nhiên thì ketiep(X) cũng là số tự nhiên.

Vũ trụ Herbrand của P là:

UP = {0, ketiep(0), ketiep(ketiep(0)), ketiep(ketiep(ketiep(0))),...}

Cơ sở Herbrand của P là:

BP = {sotunhien(0), sotunhien(ketiep(0)), sotunhien(ketiep(ketiep(0))),...}

Một số thể hiện Herbrand của P là:

12



I1 = {sotunhien(0)}

I2 = {sotunhien(0), sotunhien(ketiep(0))}

I3 = {sotunhien(ketiepn(0)) | n ∈ {0, 1, 2,…}}

I4 = BP

Rõ ràng I1 khơng phải là mơ hình của P vì mặc dầu I1 là mơ hình của mệnh đề

sotunhien(0) nhưng I1 khơng phải là mơ hình của mệnh đề r2 vì tồn tại mệnh đề

nền sotunhien(ketiep(0)) ← sotunhien(0) của r2 mà I1 khơng phải là mơ hình của

mệnh đề nền này. Cũng vậy, I2 cũng khơng phải là mơ hình của P vì mệnh đề tồn

tại mệnh đề nền:

sotunhien(ketiep(ketiep(0))) ← sotunhien(ketiep(0))

của r2 mà I2 khơng phải là mơ hình của nó.Tuy nhiên, I3 là mơ hình của P. Ta có I3 là

mơ hình của r1. I3 cũng là mơ hình của r2. Thật vậy, xét mệnh đề:

sotunhien(ketiep(t)) ← sotunhien(t)

là một mệnh đề nền nào đó của mệnh đề r2, trong đó t∈UP. Rõ ràng mệnh đề

sotunhien(ketiep(t)) ← sotunhien(t) đúng vì sotunhien(t) và sotunhien(ketiep(t)) đều

thuộc I3. Vậy I3 là mơ hình của P. Ta cũng có ngay I4 là mơ hình của P.

Định nghĩa 1.8 (Mệnh đề nền). Một mệnh đề nền của mệnh đề C là một mệnh đề C’

nhận được từ C bằng cách thay thế các biến trong C bởi các hạng thức nền trong vũ

trụ Herbrand UP. Ký hiệu ground(C) là tập tất cả mệnh đề nền của C và

đặt:ground(P) = .

Định nghĩa 1.9 (Mơ hình cực tiểu/nhỏ nhất). Cho P là chương trình logic.

1. Thể hiện M của P là mơ hình cực tiểu của P nếu không tồn tại tập con thực

sự N của M mà N là mơ hình của P.

2. Thể hiện M của P là mơ hình nhỏ nhất của P nếu M ⊆ N, với mọi mơ hình

N của P.



13



1.2.2. Ngữ nghĩa

Đối với chương trình logic khơng chứa phủ định trong thân các mệnh đề thì nó

ln có duy nhất một mơ hình cực tiểu và cũng chính là mơ hình nhỏ nhất. Tuy

nhiên, khi các mệnh đề của chương trình có chứa phủ định not ở thân thì chương

trình có thể có nhiều mơ hình cực tiểu và khơng có mơ hình nhỏ nhất. Chẳng hạn,

xem ví dụ sau:

Ví dụ 1.3. Xem chương trình logic P gồm các mệnh đề sau:

man(dung)

single(X) ← man(X), not husband(X)

husband(X) ← man(X), not single(X)

Dễ dàng kiểm tra P có hai mơ hình cực tiểu:

M1 = {man(dung), single(dung)},

M2 = {man(dung), husband(dung)}.

và P khơng có mơ hình nhỏ nhất do M1 M2 và M2 M1.

Từ ví dụ trên, ta nhận thấy khi cho phép mệnh đề có chứa literal âm thì

chương trình có thể tồn tại nhiều mơ hình cực tiểu nhưng khơng có mơ hình nhỏ

nhất. Vấn đề đặt ra ở đây là khi một chương trình logic khơng tồn tại mơ hình nhỏ

nhất thì ngữ nghĩa của chương trình sẽ được xác định như thế nào? Trong phần tiếp

theo sẽ trình bày hai cách tiếp cận nhằm giải quyết vấn đề này là tiếp cận theo ngữ

nghĩa mơ hình hồn hảo và ngữ nghĩa tập trả lời.

Trước hết chúng ta xem tiếp cận theo ngữ nghĩa mơ hình hồn hảo của chương

trình logic phân tầng.

1.2.2.1. Ngữ nghĩa mơ hình hồn hảo

Phần này xem xét một lớp con hạn chế của chương trình logic thơng thường,

gọi là chương trình logic phân tầng. Trước hết ta cần đến khái niệm đồ thị phụ thuộc

của một chương trình logic thông thường.

14



Định nghĩa 1.10 (Đồ thị phụ thuộc). Đồ thị phụ thuộc của một chương trình logic

P, ký hiệu DG(P), là một đồ thị có hướng được xây dựng như sau:

-



Ứng với mỗi vị từ p trong P, có một đỉnh được gán nhãn là p.

Có một cạnh có hướng từ đỉnh q đến đỉnh p nếu có mệnh đề trong P có dạng:

p ←...q...

Lúc đó ta nói cạnh q → p là cạnh dương.



-



Có một cạnh có hướng từ đỉnh q đến đỉnh p được gán nhãn "_" nếu có mệnh đề

trong P có dạng:

p ← . . . ¬q . . .

Lúc đó ta nói cạnh q → p là cạnh âm và vị từ p là phụ thuộc âm vào vị từ q.

Định nghĩa 1.11 (Chương trình logic đệ qui). Một chương trình logic P gọi là đệ qui

nếu đồ thị phụ thuộc của nó có chu trình, ngược lại P được gọi là khơng đệ qui. Vị từ

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

Định nghĩa 1.12 (Chương trình logic phân tầng). Chương trình logic P được gọi là

chương trình logic phân tầng nếu đồ thị DG(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 đệ qui.

Định nghĩa 1.13 (Tầng của vị từ). Cho P là chương trình logic phân tầng. Tầng của

vị từ p trong P được xác định theo quy tắc sau :

(i) Nếu vị từ p là phần đầu của mệnh đề có q là đích con phủ định, nghĩa là p

phụ thuộc âm vào q thì tầng của p lớn hơn tầng của q.

(ii) Nếu vị từ p là phần đầu của mệnh đề có q là đích con khơng phủ định thì

tầng của p lớn hơn hoặc bằng tầng của q.

Do DG(P) khơng có chu trình chứa cạnh âm (tức khơng có đích con phủ định

đệ qui) nên tầng của tất cả vị từ đều hữu hạn.

Thuật toán sau đây cho phép kiểm tra một chương trình logic thơng thường có

được phân tầng hay khơng.

15



Thuật tốn 1.1 Kiểm tra và xây dựng các tầng

Vào: Chương trình logic thơng thường P.

Ra: Kết luận P có phân tầng được hay khơng. Nếu có thì xây dựng các tầng cho các

vị từ của P.

Phương pháp:

Bước khởi đầu: Mọi vị từ của chương trình được gán ở tầng 1.

Bước lặp: Nếu một mệnh đề có đầu là p và có đích con phủ định q, gọi i, j lần lượt

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 mệnh đề là p và có đích con không phủ định 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 còn tầng nào bị thay đổi nữa thì thuật tố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 trong

đó một vị từ được gán cho một tầng lớn hơn tổng số các vị từ thì chương trình logic

P khơng được phân tầng.

Chi tiết thuật tố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 mệnh đề r có đầu là p do

begin

for mỗi đích con phủ định q của r do

tầng[p] := max{tầng[p],tầng[q]+1};

for mỗi đích con khơng phủ định q của r do

tầng[p] := max{tầng[p],tầng[q]};

end;

16



until khơng còn sự thay đổi nào đối với các tầng hoặc có một tầng của vị từ

nào đó vượt quá số lượng các vị từ.

Output trả lời "yes" (chương trình logic P được phân tầng) nếu khơng còn tầng

nào bị thay đổi, những tầng hiện tại là kết xuất của thuật toán và trả lời " no"

(chương trình logic P khơng được phân tầng) nếu tầng của vị từ nào đó vượt

quá số lượng các vị từ.

Ví dụ 1.4 Xem chương trình logic P gồm các mệnh đề:

p(X) ← r(X) ∧ not q(X)



(1)



q(X) ← r(X) ∧ not p(X)



(2)



Đồ thị phụ thuộc DG(P) của chương trình P:



_p



pp



qp

_p



rp



Hình 1.1. Đồ thị DG(P) của chương trình logic ở ví dụ 1.4

Đồ 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ụ 1.5 Xét chương trình logic P gồm các mệnh đề:

r1: p(X,Y) ← e(X,Y)

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

r3: q(X,Y) ← r(X,Y) ∧ ¬p(X,Y)

17



18



Đồ thị phụ thuộc DG(P) của chương trình P như sau:



qp



_p

pp



ep



rp



Hình 1.2. Đồ thị DG(P) của chương trình logic ở ví dụ 1.5

Đồ thị này khơng có chu trình chứa cạnh âm, vì vậy chương trình P phân tầng. 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.

Khi một chương trình logic là phân tầng, giả sử có k tầng thì ta có thể tạo nên

một phân hoạch P1, . . . , Pk của P sao cho P = P1 ∪ . . . ∪ Pk, trong đó Pi gồm các

mệnh đề mà vị từ đầu của nó thuộc tầng i, i = 1, . . . , k.

Đối với chương trình logic phân tầng ta cũng có thể định nghĩa tốn tử hệ quả

trực tiếp như sau:

Định nghĩa 1.14 (Toán tử hệ quả trực tiếp). Giả sử P là chương trình logic, I là một

thể hiện Herbrand của P. Ta ký hiệu I ⊨A nếu A ∈ I và I ⊨ ¬A nếu A ∉ I. Toán tử

hệ quả trực tiếp TP đối với chương trình P là ánh xạ

TP:







19



được định nghĩa như sau: Với mỗi I ∈



,



Tp(I) = {A ∈BP | ∃A ←L1 ∧ . . . ∧ Lm ∈ ground(P) và I ⊨ L1, . . . ,Lm}.

trong đó



là tập các tập con của cơ sở Herbrand BP.



Ký hiệu là giới hạn của dãy:

,

.

Giả sử P là chương trình logic phân tầng và P = P1 ∪ . . . ∪ Pn.

Đặt:

M1 =



(∅)



M2 =



(M1)



...

Mn =



(Mn-1)



Lúc này ta có định lý sau:

Định lý 1.1. Giả sử P là chương trình logic phân tầng. Lúc đó:

(i) MP = Mn là độc lập với phép phân tầng của P.

(ii) MP là mô hình cực tiểu của P.

Định nghĩa 1.15 (Ngữ nghĩa mơ hình hồn hảo). Giả sử P là chương trình logic

phân tầng. Ngữ nghĩa mơ hình hồn hảo của P là mơ hình cực tiểu MP được xác

định bởi Định lý 1.1.

Ví dụ 1.6. Xét chương trình logic P gồm các mệnh đề sau:

20



p(X) ← r(X)

p(X) ← p(X)

q(X) ← s(X) ∧ ¬p(X)

r(1) ←

s(1) ←

s(2) ←



21



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Chương 1 TỔNG QUAN VỀ CHƯƠNG TRÌNH LOGIC

Tải bản đầy đủ ngay(0 tr)

×