Thuật toán Focus giải hệ ràng buộc

Một phần của tài liệu Nghiên cứu kỹ thuật giải thích trừu tượng (Trang 69)

Các tính toán Focus là vấn đề cốt lõi cho phân tích tính chính xác. Tuy nhiên, nó có thể tạo ra một số lượng lớn các cấu trúc. Thuật toán trình bày ở đây sử dụng các hàm thuộc tính của các vị từ để giảm số lượng của cấu trúc được tạo ra.

Thuật toán Focus như sau:

Focus(S: structure, φ: formula) : Set of structures conj1 ∨ ... ∨ conjn:=DNF(QuatifierFree(TCEliminate(φ))) XS0:= {S}

68

For i in 1..n do

XSi := FocusConjunction(XSi−1, conji) od

return XSn

Định nghĩa 3.7: Cho một tập các công thức F, một toán tử Focus cho F là một toán tử có thể chuyển đổi tất cả các cấu trúc S vào một tập hợp các cấu trúc XS sao cho

+ XS và S đại diện cho cùng cấu trúc cụ thể,

+ Mỗi công thức ∈ có có giá trị nhất định trong từng cấu trúc trong

XS trên từng phép gán có thể.

Thuật toán bắt đầu bằng các công thức tổng quát đưa vào trong một tập hợp các liên từ của các ký hiệu vị từ. Mỗi kết hợp được phân tích thành từng bước để tìm ra nguồn gốc của phép gán không xác định. Đối với mỗi phép gán không xác định như vậy, cấu trúc được thay thế bằng một tập hợp các cấu trúc nhúng cùng với một tập các cấu trúc cụ thể mà phép gán là không còn hiện tượng không xác định.

Chuẩn hóa công thức Focus

Focus bắt đầu bằng cách chuẩn hóa các công thức tập trung vào trong một tập hợp các phép hội (conjunctions) của các ký hiệu vị từ. Focus trên kết quả các liên từ trả ra là các cấu trúc trong đó các công thức gốc là được xác định.

FocusConjunction(XS0:Set of structs, φ1 ∧ ... ∧φn : conj. of literals) : Set of structs

For i in 1. . . n do

XSi := FocusLiteral(XSi−1, φ1∧ ... ∧φi-1, φi) od

return XSn

FocusLiteral(XS: Set of structures, φ: formula, φ’: literal) : Set of structures

AnswerSet :=ϕ While XS≠ϕ do

69

select and remove S from XS

if exists Zsuch that [[φ∧φ’]]S(Z) = ½ do XS := XS ∪ FocusAssignment (S, φ’, Z) else AnswerSet := AnswerSet ∪ {S} fi od return AnswerSet

Function FocusAssignment(S: structure, φ: Literal, Z assignment): Set of structures

sw3Ditch φ c3Dase φ≡1/2

error (Illegal focus formula) c3Dase φ≡ v1 = v2

error (Focusing on equality of a summary node Z(v1) may create infinite number of structures)

c3Dase φ≡p(v1,v2, . . . , vk) Let ui =Z(vi)

S0:= S[pS(u1,u2, . . . , uk).→ 0] S1:= S[pS(u1,u2, . . . , uk).→ 1] XS :={S0,S1}

i3Df there exists i, s.t., smS(ui) = ½ then i3Df there exists j≠i, s.t., smS(uj) = ½ then

error(Focusing on a formula φ with two summary nodes ui and uj may create an infinite number of structures)

fi

let u.0 and u.1 be individuals not in US S’:= Expand(S, ui, u.0, u.1)

S’’:=S’[pS’(u1,...,ui−1,u.0,ui+1,...,uk).→0,pS’(u1,...,ui−1, u.1,ui+1,..., uk)→1] XS := XS∪{S’’} fi return XS c3Dase φ≡¬φ’ return FocusAssignment(S, φ’, Z) esac

Hàm trả về một tập hợp các cấu trúc có thể được nhúng vào trong S sao cho là ước lượng một giá trị nhất định cho phép gán Z.

70

Đầu tiên, TC_Eliminate loại bỏ tất cả toán tử bao đóng phản xạ bắc cầu để đảm bảo rằng các biến của các công thức con là được giải phóng và được giữ lại là duy nhất. Sau đó Focus trên kết quả công thức cho mỗi phép gán để ước lượng công thức con TC tới một giá trị nhất định, do đó bao đóng bắc cầu của công thức con cũng phải được ước lượng là một giá trị nhất định. Như vậy chúng ta có thể Focus vào công thức sau khi TC_Eliminate thực hiện thay vì công thức ban đầu.

Tiếp theo, QuatifierFree loại bỏ tất cả các lượng từ. Focus vào kết quả đảm bảo rằng tất cả các công thức cho phép gán để ước lượng công thức đến một giá trị nhất định, do đó các công thức ban đầu mà lượng từ trên của một số các biến cũng phải đánh giá một giá trị nhất định. Do đó, chúng ta có thể Focus vào công thức sau khi QuatifierFree thay vì công thức ban đầu.

Cuối cùng DNF được sử dụng để chuyển đổi các công thức tự do định lượng tới DNF. [13].

Một phần của tài liệu Nghiên cứu kỹ thuật giải thích trừu tượng (Trang 69)