Với 1 biểu thức LTL φ trên tập các biểu thức logic thông thường AP, xây dựng 1 máy Buchi B sao cho mọi xâu được chấp nhận bởi B đều thỏa φ.
Ta gọi B = (Σ, S, ∆, S0, F) là Ôtômat Buchi được chuyển đổi từ công thức
φ với:
Σ = 2AP là bảng chữ vào và ởđây chính là tập các tập con của AP S0 = {init}, Trạng thái đầu chỉ gồm 1 trạng thái thêm vào
S= {init} ∪(2Sub(φ) × 2Sub(φ))
(các trạng thái tiếp đó là từng cặp các biểu thức con)
∆ là tập các luật chuyển trạng thái (s, σ, t) : s, t ∈ S, σ∈∑
F: Tập các trạng thái kết thúc
Cụ thể giải thuật chuyển đổi từ LTL sang Ôtômat Buchi gồm những bước sau:
Bước 1: Tìm bảng chữ vào cho Ôtômat Buchi mới được sinh ra, là tập các tập con của AP
Bước 2: Đặt trạng thái S0 = init
Bước 3: Tìm tập các trạng thái S của Ôtômat Buchi
S là tập các trạng thái của B, mỗi trạng thái s được đặc trưng bởi 2 tập Old và Next là các tập con của Sub(φ) trong đó Old chứa các biểu thức được thỏa bởi 1 xâu chạy đạt đến s, Next chứa các biểu thức được thỏa bởi xâu chạy từ s về
Hình 3.3 Tập các trạng thái của Ôtômat Buchi
• Đểđưa ra được tập các trạng thái S và các hàm chuyển ∆, ta định nghĩa hàm Expand có dạng Expand (Old, New, Next)
• Các trạng thái được sinh ra 1 cách đệ quy (hàm expand(Old, New, Next)). Giả sử hiện tại ta có trạng thái s = (Old, Next). Khi đó từ s sẽ có thể dịch chuyển đến các trạng thái được sinh ra bởi hàm expand(∅, Next, ∅).
• Hàm expand(Old, New, Next) được định nghĩa 1 cách đệ quy: ban đầu sẽ gọi hàm expand(∅, { φ }, ∅). Mỗi trạng thái s = (Old, Next) được sinh ra ta lại gọi tiếp hàm expand(∅, Next, ∅) để sinh ra các hàm tiếp theo (các trạng thái không được trùng lặp). Tại mỗi bước đệ quy, hàm Expand(Old, New, Next) sẽ chuyển các biểu thức từ New sang Old để
tiếp tục tính toán.
• Từ trạng thái {init} có thể dịch chuyển đến các trạng thái được sinh ra bởi
expand(∅, {φ}, ∅)
Hàm Expand:
Trường hợp kết thúc:
Expand (Old, {}, Next) = {(Old, Next)}
Một số trường hợp đơn giản:
Expand (Old, New ∪ {p}, Next) = Expand (Old ∪ {p}, New, Next)
Expand (Old, New ∪ {¬p}, Next) = Expand (Old ∪ {¬p}, New, Next)
nếu p ∈ AP và p ∉ Old
Expand (Old, New ∪ {p}, Next) = {} nếu p ∈ AP và ¬p ∈ Old Expand (Old, New ∪ {¬p}, Next) = {} nếu p ∈ AP và p ∈ Old Expand (Old, New ∪ {true}, Next) = Expand (Old, New, Next) Expand (Old, New ∪ {false}, Next) = {}
Một số trường hợp đơn giản khác:
Expand (Old, New ∪ {οφ1}, Next) = Expand (Old ∪ {οφ1}, New, Next {φ1}) Expand (Old, New ∪ {φ1 ∧φ2}, Next)
= Expand (Old ∪{φ1 ∧φ2}, New ∪{φ1 ∧φ2},Next)
Trường hợp phức tạp: Phép hoặc
Expand (Old, New ∪ {φ1 ∨φ2}, Next)
= Expand (Old ∪ {φ1 ∨φ2}, New ∪ {φ1}, Next) ∪ Expand (Old ∪ {φ1 ∨φ2}, New ∪ {φ2}, Next)
Đối với toán tử Until U, xuất phát từ công thức:
φ1 U φ2 ≡ φ2 ∨ (φ1 ∧ο (φ1 U φ2))
Do đó, chúng ta sẽ áp dụng hàm Expand cho toán tử Until như sau: Expand (Old, New ∪ {φ1 U φ2}, Next)
= Expand (Old ∪ {φ1 U φ2}, New ∪ {φ2}, Next) ∪ Expand (Old ∪{φ1 U φ2}, New ∪ {φ1}, Next)
Tương tự, với toán tử Release R ta có:
φ1 R φ2 ≡ (φ1 ∧φ2) ∨ (φ1 ∧ο (φ1 R φ2)) Do đó:
Expand (Old, New ∪ {φ1 R φ2}, Next)
= Expand (Old ∪ {φ1 R φ2}, New ∪ {φ1, φ2}, Next)
Bước 4: Tìm các chuyển trạng thái ∆
Từ trạng thái s = (Old, Next) có thể dịch chuyển đến trạng thái s’ = (Old’, Next’) với ký hiệu vào σ∈∑ phải thỏa mãn điều kiện sau:
• σ phải chứa tất cả các biểu thức atomic p (p ∈ AP) thuộc Old’.
• σ không chứa các biểu thức atomic p (p ∈ AP) mà ¬p thuộc Old’. Từđó ta xây dựng hàm chuyển ∆ chính là bộ (s, σ, t)
Bước 5: Tìm tập các trạng thái kết thúc
Nếu Sub(φ) chứa các biểu thức dạng φ1 U φ2 thì F chứa các trạng thái s = (Old, Next) sao cho hoặc φ2 ∈ Old hoặc φ1 U φ2 ∉ Old.