Các trường hợp xem xét với exit

Một phần của tài liệu (LUẬN văn THẠC sĩ) chứng minh tính đúng đắn cho bài toán xung đột tài nguyên cho các hệ đa tác tử (Trang 48 - 68)

Chương 5. KẾT LUẬN

Luận văn này đề xuất một phương pháp đặc tả các hệ đa tác tử sử dụng chung đa tài nguyên với không gian trạng thái là vô hạn. Với phương pháp này, hành vi của các tác tử, hành vi của hệ thống và các thuộc tính cần chứng minh của hệ thống được đặc tả bằng ngôn ngữ đại số. Từ những đặc tả đó, không gian trạng thái của hệ thống được xây dựng một cách đệ quy mà không cần chỉ ra tất cả mọi trạng thái của hệ thống như khi tiếp cận bài toán bằng phương pháp kiểm chứng mô hình. Hơn nữa, với bài toán này, số lượng các tác tử là vô hạn, do đó không gian trạng thái của hệ thống là vô hạn nên chúng ta không thể áp dụng phương pháp kiểm chứng mô hình được.

Chứng minh định lý (theorem proving) đã cho thấy tính ưu việt hơn so với phương pháp kiểm chứng mô hình (model checking) trong việc kiểm chứng hệ thống với không gian trạng thái là vô hạn. Luận văn này trình bày tổng quan về ngôn ngữ CafeOBJ - một ngôn ngữ đặc tả đại số, hỗ trợ việc đặc tả và kiểm chứng hệ thống theo tư tưởng của chứng minh định lý. Từ đó, luận văn này đã áp dụng phương pháp đề xuất để đặc tả và chứng minh tính đúng đắn cho hệ thống đại lý vé máy bay sử dụng bộ chứng minh định lý CafeOBJ.

Trong quá trình áp dụng phương pháp đề xuất, chúng ta cũng thấy được công việc thực hiện chứng minh là bán tự động, có nhiều trường hợp kết quả trả về là một biểu thức lôgic, chúng ta cần tìm thêm các bổ đề (lemma) sau đó áp dụng vào để tiếp tục chứng minh cho tới khi kết quả trả về là “true” thì thôi, rõ ràng đây là một công việc khó khăn, đòi hỏi sự am hiểu của người thực hiện đối với hệ thống và tính kiên trì nhưng cũng đem lại sự thú vị.

Phương pháp đề xuất cũng có một số hạn chế như: chỉ áp dụng chứng minh các thuộc tính bất biến, trong khi các hệ đa tác tử có rất nhiều các thuộc tính khác nhau cần chứng minh. Hơn nữa, phương pháp này chỉ đúng khi đặc tả của hệ thống là đúng đắn nhưng đây là một vấn đề khó vì đặc tả này được xây dựng thủ công. Quá trình chứng minh là bán tự động, do đó đây cũng là một điểm hạn chế.

Từ những hạn chế của phương pháp đề xuất và những vấn đề gặp phải trong quá trình thực hiện luận văn này, trong tương lai cần mở rộng phương pháp đề xuất với các thuộc tính khác của hệ thống chứ không chỉ áp dụng riêng cho các thuộc tính bất biến, cần nghiên cứu về các giải pháp đảm bảo tính đúng đắn của đặc tả cho hệ thống, áp dụng phương pháp này với các ví dụ phức tạp hơn.

TÀI LIỆU THAM KHẢO Tiếng việt

[1] Phạm Ngọc Hùng, Đào Anh Hiển, Nguyễn Ánh Nguyệt và Nguyễn Việt

Hà (2011), “Đặc tả và kiểm chứng tính bất biến của các hệ đa tác tử”,

Tạp chí khoa học (Khoa học tự nhiên và công nghệ), Đại học quốc gia Hà Nội, Vol. 27, no.4, pp. 225-232

[2] Tạ Thị Thu Hiền (2010), Nghiên cứu về chứng minh tự động (Theorem

Proving) trong CafeOBJ, luận văn thạc sĩ Công nghệ thông tin, Trường Đại học Công nghệ, Đại học Quốc gia Hà Nội

Tiếng anh

[3] A.T. Nakagawa – T. Sawada – K.Futatsugi. “CafeOBJ User’s Manual”

[4] CafeOBJ official homepage, http://www.ldl.jaist.ac.jp/cafeobj/

[5] Edmund M. Clarke, Jr. Oma Grumberg, Doron A.Peled (1999), Model

Checking, MIT Press

[6] J. Magee and J. Kramer (1999), Concurrency: State Models & Java

Programs, John Wiley & Sons

[7] K. L. McMillan. “The SMV System*”

[8] NuSMV homepage, http://nusmv.irst.itc.it/

[9] P. N. Hung, T. Aoki, and T. Katayama (Nov. 2009), Modular

conformance testing and assume guarantee verification for evolving component –based software, IEICE Trans. Fundamentals, Special Issue on Theory of Concurrent Systems and Its Applications, Vol. E92-A, no.11, pp. 2772-2780

PHỤ LỤC 1

-- Dòng bắt đầu bằng **> để nói đoạn proof đó vừa được thêm vào hoặc vừa được chứng minh là đúng (true) -- Dòng kết thúc bằng * để nói đoạn proof đó trả về 1 biểu thức logic

--> init

--> want(s,Fi,Ak), c-want(s,Fi,Ak), Ai = Ak

--> want(s,Fi,Ak), c-want(s,Fi,Ak), ~(Ai = Ak), AJ = Ak

--> want(s,Fi,Ak), c-want(s,Fi,Ak), ~(Ai = Ak), ~(AJ = Ak), Áp dụng INST, TRANS, HIDE

--> want(s,Fi,Ak), ~c-want(s,Fi,Ak) **> try(s,Fi,Ak), c-try(s,Fi,Ak) * **> try(s,Fi,Ak), ~c-try(s,Fi,Ak) --> exit(s,Fi,Ak)*

--> Chứng minh ở trạng thái khởi tạo - init open inv ops Ai Aj : -> AId . op Fi : -> FId . -- red inv(init,Fi,Ai,Aj) . close

--> Đúng, đoạn proof này đã trả về true . --

///////////////////////////////////////////////////// --> 1. want(s,Fi,Ak)

--> 1.1 c-want(s,Fi,Ak)

--> 1.1.1 Với trường hợp: c-want(s,Fi,Ak) , Ai = Ak open inv

-- Khai báo các hằng tùy ý ops s s' : -> ATASys . op Fi : -> FId .

ops Ai Aj Ak : -> AId . --

-- Khai báo các giả thiết

eq inv(s,FI:FId,AI:AId,AJ:AId) = true . -- c-want(s,Fi,Ak)

eq pc(s,Fi,Ak) = rm . -- Ai = Ak

-- s' - trạng thái kế tiếp của s eq s' = want(s,Fi,Ak) .

-- Rút gọn để kiểm chứng red inv(s',Fi,Ai,Aj) . close

--> Đúng, đoạn proof này đã trả về true. --

///////////////////////////////////////////////////// --> 1.1.2 Với trường hợp: want(s,Fi,Ak), ~(Ai = Ak); Aj = Ak

open inv

-- Khai báo các hằng tùy ý ops s s' : -> ATASys . op Fi : -> FId .

ops Ai Aj Ak : -> AId . --

-- Khai báo các giả thiết

eq inv(s,FI:FId,AI:AId,AJ:AId) = true . -- c-want(s,Fi,Ak)

eq pc(s,Fi,Ak) = rm . -- ~(Aj = Ak); Aj = Ak eq (Ai = Ak) = false . eq Aj = Ak .

-- s' - trạng thái kế tiếp của s eq s' = want(s,Fi,Ak) .

-- Rút gọn để kiểm chứng red inv(s',Fi,Ai,Aj) . close

--> Đúng, đoạn proof này đã trả về true. --

///////////////////////////////////////////////////// --> 1.1.3 Với trường hợp: want(s,Fi,Ak), ~(Ai = Ak); ~(Aj = Ak), Áp dụng INST, TRANS, HIDE

open inv

-- Khai báo các hằng tùy ý ops s s' : -> ATASys . op Fi : -> FId .

ops Ai Aj Ak : -> AId . --

-- Khai báo các giả thiết

-- eq inv(s,FI:FId,AI:AId,AJ:AId) = true . -- c-want(s,Fi,Ak)

eq pc(s,Fi,Ak) = rm .

-- ~(Aj = Ak); ~(Aj = Ak) eq (Ai = Ak) = false . eq (Aj = Ak) = false .

-- s' - trạng thái kế tiếp của s eq s' = want(s,Fi,Ak) .

-- Rút gọn để kiểm chứng

red inv(s,Fi,Ai,Aj) implies inv(s',Fi,Ai,Aj) . close --> Đúng, Kết quả trả về true -- ///////////////////////////////////////////////////// --> 1.2 not c-want(s,Fi,Ak) open inv

-- Khai báo các hằng tùy ý ops s s' : -> ATASys . op Fi : -> FId .

ops Ai Aj Ak : -> AId . --

-- Khai báo các giả thiết

eq inv(s,FI:FId,AI:AId,AJ:AId) = true . eq c-want(s,Fi,Ak) = false .

-- Định nghĩa trạng thái kế tiếp của s eq s' = want(s,Fi,Ak) .

-- Rút gọn để kiểm chứng red inv(s',Fi,Ai,Aj) .

--> Đúng, đoạn proof này đã trả về true . --

///////////////////////////////////////////////////// --> 2. try(s,Fi,Ak)

--> 2.1 try(s,Fi,Ak), c-try(s,Fi,Ak) open inv

-- Khai báo các hằng tùy ý ops s s' : -> ATASys . op Fi : -> FId .

ops Ai Aj Ak : -> AId . --

-- Khai báo các giả thiết

eq inv(s,FI:FId,AI:AId,AJ:AId) = true . -- c-try(s,Fi,Ak)

eq pc(s,Fi,Ak) = wt .

-- Định nghĩa trạng thái kế tiếp của s eq s' = try(s,Fi,Ak) .

-- Thực hiện rút gọn để kiểm chứng red inv(s',Fi,Ai,Aj) .

close

--> Kết quả trả về là một biểu thức logic --

///////////////////////////////////////////////////// --> 2. try(s,Fi,Ak)

--> 2.2 try(s,Fi,Ak), ~c-try(s,Fi,Ak) open inv

-- Khai báo các hằng tùy ý ops s s' : -> ATASys . op Fi : -> FId .

ops Ai Aj Ak : -> AId . --

-- Khai báo các giả thiết

eq inv(s,FI:FId,AI:AId,AJ:AId) = true . -- not c-try(s,Fi,Ak)

eq c-try(s,Fi,Ak) = false .

-- Định nghĩa trạng thái kế tiếp của s eq s' = try(s,Fi,Ak) .

-- Thực hiện rút gọn để kiểm chứng red inv(s',Fi,Ai,Aj) .

close

--> Đúng, đoạn proof này đã trả về true . --

///////////////////////////////////////////////////// --> 3. exit(s,Fi,Ak)

open inv

-- Khai báo các hằng tùy ý ops s s' : -> ATASys . op Fi : -> FId .

ops Ai Aj Ak : -> AId . --

-- Khai báo các giả thiết

eq inv(s,FI:FId,AI:AId,AJ:AId) = true . -- Định nghĩa trạng thái kế tiếp của s eq s' = exit(s,Fi,Ak) .

-- Thực hiện rút gọn để kiểm chứng red inv(s',Fi,Ai,Aj) .

--> Kết quả trả về là một biểu thức logic --> 2. try(s,Fi,Ak)

--> 2.1.1 try(s,Fi,Ak), c-try(s,Fi,Ak), Ai = Ak open inv

-- Khai báo các hằng tùy ý ops s s' : -> ATASys . op Fi : -> FId .

ops Ai Aj Ak : -> AId . --

-- Khai báo các giả thiết

eq inv(s,FI:FId,AI:AId,AJ:AId) = true . -- c-try(s,Fi,Ak) eq pc(s,Fi,Ak) = wt . eq top(queue(s,Fi)) = Ak . -- Ai = Ak eq Ai = Ak .

-- Định nghĩa trạng thái kế tiếp của s eq s' = try(s,Fi,Ak) .

-- Thực hiện rút gọn để kiểm chứng red inv(s',Fi,Ai,Aj) .

close

--> Kết quả trả về là một biểu thức logic --

///////////////////////////////////////////////////// --> 2.1.2 try(s,Fi,Ak), c-try(s,Fi,Ak), ~(Ai = Ak) open inv

-- Khai báo các hằng tùy ý ops s s' : -> ATASys . op Fi : -> FId .

ops Ai Aj Ak : -> AId . --

-- Khai báo các giả thiết

eq inv(s,FI:FId,AI:AId,AJ:AId) = true . -- c-try(s,Fi,Ak)

eq pc(s,Fi,Ak) = wt .

eq top(queue(s,Fi)) = Ak . -- ~(Ai = Ak)

eq (Ai = Ak) = false .

-- Định nghĩa trạng thái kế tiếp của s eq s' = try(s,Fi,Ak) .

-- Thực hiện rút gọn để kiểm chứng red inv(s',Fi,Ai,Aj) .

close

--> Kết quả trả về là một biểu thức logic --

///////////////////////////////////////////////////// --> 2. try(s,Fi,Ak)

--> 2.1.1.1 try(s,Fi,Ak), c-try(s,Fi,Ak), Ai = Ak, Aj = Ak

open inv

-- Khai báo các hằng tùy ý ops s s' : -> ATASys . op Fi : -> FId .

ops Ai Aj Ak : -> AId . --

-- Khai báo các giả thiết

eq inv(s,FI:FId,AI:AId,AJ:AId) = true . -- c-try(s,Fi,Ak) eq pc(s,Fi,Ak) = wt . eq top(queue(s,Fi)) = Ak . -- Ai = Ak eq Ai = Ak . -- Aj = Ak eq Aj = Ak .

-- Định nghĩa trạng thái kế tiếp của s eq s' = try(s,Fi,Ak) .

-- Thực hiện rút gọn để kiểm chứng red inv(s',Fi,Ai,Aj) .

close

--> Đúng, đoạn proof này đã trả về true . --

///////////////////////////////////////////////////// --> 2.1.1.2 try(s,Fi,Ak), c-try(s,Fi,Ak), Ai = Ak, ~(Aj = Ak)

open inv

-- Khai báo các hằng tùy ý ops s s' : -> ATASys . op Fi : -> FId .

ops Ai Aj Ak : -> AId . --

-- Khai báo các giả thiết

eq inv(s,FI:FId,AI:AId,AJ:AId) = true . -- c-try(s,Fi,Ak)

eq top(queue(s,Fi)) = Ak . -- Ai = Ak

eq Ai = Ak . -- ~(Aj = Ak)

eq (Aj = Ak) = false .

-- Định nghĩa trạng thái kế tiếp của s eq s' = try(s,Fi,Ak) .

-- Thực hiện rút gọn để kiểm chứng red inv(s',Fi,Ai,Aj) .

close

--> Kết quả trả về là một biểu thức logic --

///////////////////////////////////////////////////// --> 2.1.1.2 try(s,Fi,Ak), c-try(s,Fi,Ak), Ai = Ak, ~(Aj = Ak), Áp dụng bổ đề ((pc(s,Fi,Ai) = cs) = false) rút ra từ lemma1

open inv

-- Khai báo các hằng tùy ý ops s s' : -> ATASys . op Fi : -> FId .

ops Ai Aj Ak : -> AId . --

-- Khai báo các giả thiết

eq inv(s,FI:FId,AI:AId,AJ:AId) = true . -- c-try(s,Fi,Ak) eq pc(s,Fi,Ak) = wt . eq top(queue(s,Fi)) = Ak . -- Ai = Ak eq Ai = Ak . -- ~(Aj = Ak)

eq (Aj = Ak) = false . -- Thêm bổ đề

eq (pc(s,Fi,Aj) = cs ) = false .

-- Định nghĩa trạng thái kế tiếp của s eq s' = try(s,Fi,Ak) .

-- Thực hiện rút gọn để kiểm chứng red inv(s',Fi,Ai,Aj) .

close

--> Đúng, đoạn proof này đã trả về true . --

///////////////////////////////////////////////////// --> 2.1.2.1 try(s,Fi,Ak), c-try(s,Fi,Ak), ~(Ai = Ak),

Aj = Ak open inv

-- Khai báo các hằng tùy ý ops s s' : -> ATASys . op Fi : -> FId .

ops Ai Aj Ak : -> AId .

Một phần của tài liệu (LUẬN văn THẠC sĩ) chứng minh tính đúng đắn cho bài toán xung đột tài nguyên cho các hệ đa tác tử (Trang 48 - 68)

Tải bản đầy đủ (PDF)

(68 trang)