1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu về chứng minh tự động (Theorem Proving) trong CafeOBJ

71 604 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 71
Dung lượng 838,2 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Có hai hướng tiếp cận đặc tả hình thức để phát triển các hệ thống tương đối phức tạp: - Tiếp cận đại số, hệ thống được mô tả dưới dạng các toán tử và các quan hệ - Tiếp cận mô hình, mô h

Trang 1

Hà Nội - 2010

Trang 2

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Hà Nội - 2010

Trang 3

LỜI CẢM ƠN

Trước tiên tôi xin bày tỏ lòng biết ơn sâu sắc tới TS Phạm Ngọc Hùng, giảng viên Bộ môn Công nghệ phần mềm - Khoa Công nghệ thông tin - Trường Đại học Công nghệ - ĐHQGHN Trong thời gian học và làm luận văn tốt nghiệp, thầy đã dành nhiều thời gian quí báu và tận tình chỉ bảo, hướng dẫn tôi trong việc nghiên cứu, thực hiện luận văn

Tôi xin được cảm ơn các GS, TS đã giảng dạy tôi trong quá trình học tập và làm luận văn Các thầy cô đã giúp tôi hiểu thấu đáo hơn lĩnh vực mà mình nghiên cứu để có thể vận dụng những kiến thức đó vào trong công tác của mình Xin cảm ơn bạn bè, đồng nghiệp và nhất là các thành viên trong gia đình đã tạo mọi điều kiện tốt nhất, động viên, cổ vũ tôi trong suốt quá trình học tập và nghiên cứu để hoàn thành tốt bản luận văn tốt nghiệp này

Hà nội, tháng 9 năm 2010

Học viên thực hiện

Tạ Thị Thu Hiền

Trang 4

LỜI CAM ĐOAN

Tôi xin cam đoan rằng, đây là kết quả nghiên cứu của tôi trong đó có sự giúp đỡ rất lớn của thầy hướng dẫn và các đồng nghiệp ở cơ quan Các nội dung nghiên cứu và kết quả trong đề tài này hoàn toàn trung thực

Trong luận văn, tôi có tham khảo đến một số tài liệu của một số tác giả đã được liệt kê tại phần tài liệu tham khảo ở cuối luận văn

Hà nội, tháng 9 năm 2010

Học viên thực hiện

Tạ Thị Thu Hiền

Trang 5

MỤC LỤC

LỜICẢMƠN ii

LỜI CAM ĐOAN ii

MỤC LỤC iii

BẢNG CÁC CHỮ VIẾT TẮT iv

DANH MỤC HÌNH VẼ v

Chương 1Giới thiệu 1

1.1 Đặt vấn đề 1

1.2 Nêu bài toán 2

1.3 Kết quả 2

1.4 Cấu trúc luận văn 3

Chương 2Tổng quan về CafeOBJ 4

2.1 Giới thiệu 4

2.2 Đặc tả và kiểm chứng trong CafeOBJ 7

2.3 Ví dụ 7

Chương 3Đặc tả hệ thống đa tác tử và các thuộc tính 11

3.1 Mô tả bài toán QLOCK 11

3.2 Đặc tả bài toán QLOCK bằng ngôn ngữ cafeOBJ 14

3.3 Đặc tả các thuộc tính 20

Chương 4Kiểm chứng hệ thống đa tác tử 23

4.1 Tư tưởng kiểm chứng 23

4.2 Kiểm chứng các thuộc tính của bài toán QLOCK 23

4.2.1 Chứng minh inv1(S,I,J) 23

4.2.2 Chứng minh inv2(S,I) 27

4.2.3 Chứng minh inv3(S,I) 28

4.2.4 Chứng minh inv4(S,I) 32

4.2.5 Chứng minh inv5(S,I) 33

Chương 5Kết luận 39

Tài liệu tham khảo 41

Phụ lục 1Chứng minh cho inv1(s,i,j) 42

Phụ lục 2Chứng minh cho inv2(s,i) 48

Phụ lục 3Chứng minh cho inv3 (s,i) 52

Phụ lục 4Chứng minh cho inv4(s,i) 56

Phụ lục 5Chứng minh cho inv5(s,i) 57

Trang 6

BẢNG CÁC CHỮ VIẾT TẮT

MAS Multi-Agent System OTS Observation Transition System QLOCK Locking with queue

Trang 7

DANH MỤC HÌNH VẼ

Hình 2.1 Cú pháp của mô đun 5

Hình 2.2 Đặc tả mô đun simple-nat.mod 5

Hình 2.3 Đọc file simple-nat.mod trong CafeOBJ 5

Hình 2.4 Mô tả eof trong CafeOBJ 6

Hình 2.5 Định nghĩa subsort trong sort 6

Hình 2.6 Mô đun NAT+ trong CafeOBJ 7

Hình 2.7 Chứng minh tính kết hợp của phép cộng các số tự nhiên 8

Hình 2.8 Chứng minh bổ đề i+0=i 9

Hình 2.9 Chứng minh 0+j=j+0 9

Hình 2.10 Chứng minh lemma2: i + s(j) = s(i+j) 10

Hình 2.11 Chứng minh i+j = j + i 10

Hình 3.1 Mã lệnh của các BXL 11

Hình 3.2 Mô tả QLOCK với phương thức độc quyền truy xuất 12

Hình 3.3 View of QLOCK 13

Hình 3.4 Mô hình QLOCK với OTS 14

Hình 3.5 Đặc tả (signature) cho hệ thống QLOCK 15

Hình 3.6 Đặc tả mô đun LABEL 16

Hình 3.7 Đặc tả mô đun PID 16

Hình 3.8 Kiểu biến tổng quát cho hàng đợi QUEUE 17

Hình 3.9 Hàng đợi QUEUE cho bài toán QLOCK 18

Hình 3.10 Các lemma trong queue 19

Hình 3.11 Hành động try trong hệ thống QLOCK 19

Hình 3.12 Đặc tả các thuộc tính trong CafeOBJ 21

Hình 3.13 Mô đun ISTEP trong CafeOBJ 22

Hình 4.1 Kiểm chứng inv1 với trường hợp (1) 25

Hình 4.2 Kiểm chứng inv1 với trường hợp (5) 25

Hình 4.3 Kiểm chứng inv1 với trường hợp (*) 26

Trang 8

Hình 4.4 Kiểm chứng inv2 với trường hợp c-exit, ~(i = k) 28

Hình 4.5 Kiểm chứng inv3 với trường hợp c-want(s,k), ~(i = k), ~(i \in queue(s)) 30

Hình 4.6 Kiểm chứng inv3 với c-exit(s,k), i=k 31

Hình 4.7 Kiểm chứng inv3 với c-exit(s,k), ~(i = k), ~(i \in queue(s)) 32

Hình 4.8 Chứng minh inv4 với trường hợp queue(s) = x,q, i = x 33

Hình 4.9 Chứng minh inv5 với trường hợp c-want(s,k), queue(s) = x,q, i = k 35

Hình 4.10 Chứng minh inv5 với trường hợp c-want(s,k), queue(s) = x,q, ~(i = k), x = i, ~(i \in q).36 Hình 4.11 Chứng minh inv5 với trường hợp c-exit(s,k), i = k, queue(s) = x,q, x = k, ~(k \in q) 37 Hình 4.12 Chứng minh inv5 với trường hợp c-exit(s,k), ~(i = k), queue(s) = x,q, x = i.38

Trang 9

CHƯƠNG 1 GIỚI THIỆU 1.1 Đặt vấn đề

Đặc tả và kiểm chứng hình thức là một pha quan trọng nhằm nâng cao độ tin cậy

và chất lượng của phần mềm Có thể chia đặc tả phần mềm ra làm hai loại: đặc

tả phi hình thức là đặc tả dựa trên ngôn ngữ tự nhiên và đặc tả hình thức là đặc

tả dựa trên kiến trúc toán học Đặc tả phi hình thức không được chặt chẽ bằng đặc tả hình thức nhưng được nhiều người biết và có thể dùng để trao đổi với nhau để làm chính xác hóa các điểm chưa rõ, chưa thống nhất giữa các bên phát triển hệ thống Đặc tả hình thức là đặc tả mà ở đó các từ ngữ, cú pháp, ngữ nghĩa được định nghĩa hình thức dựa vào toán học Đặc tả hình thức có thể coi là một phần của hoạt động đặc tả phần mềm Trong đặc tả hình thức các đặc tả yêu cầu được phân tích chi tiết, các mô tả trừu tượng của các chức năng chương trình có thể được tạo ra để làm rõ yêu cầu

Đặc tả phần mềm hình thức là một đặc tả được trình bày trên một ngôn ngữ bao gồm: từ vựng, cú pháp và ngữ nghĩa được định nghĩa Định nghĩa ngữ nghĩa đảm bảo ngôn ngữ đặc tả không phải là ngôn ngữ tự nhiên mà dựa trên toán học Các chức năng nhận các đầu vào trả lại các kết quả Các chức năng có thể định

ra các điều kiện tiền tố và hậu tố Điều kiện tiền tố là điều kiện cần thỏa mãn để

có dữ liệu vào, điều kiện hậu tố là điều kiện cần thỏa mãn sau khi có kết quả

Có hai hướng tiếp cận đặc tả hình thức để phát triển các hệ thống tương đối phức tạp:

- Tiếp cận đại số, hệ thống được mô tả dưới dạng các toán tử và các quan hệ

- Tiếp cận mô hình, mô hình hệ thống được cấu trúc sử dụng các thực thể toán học như là các tập hợp và các thứ tự

Kiểm thử một sản phẩm phần mềm là xây dựng một cách có chủ đích những tập

dữ liệu và dãy thao tác nhằm đánh giá một số hoặc toàn bộ các tiêu chuẩn của sản phẩm phần mềm đó Thử nghiệm có hai mục đích: chỉ ra hệ thống phù hợp với đặc tả và phơi ra được các khuyết tật của hệ thống Trong khi việc kiểm thử phần mềm (software testing) [4] chỉ có thể chỉ ra các lỗi phát hiện được nhưng không thể chỉ ra được phần mềm hoàn toàn không có lỗi, các phương pháp kiểm

Trang 10

chứng có thể đảm bảo hệ thống không có lỗi sau khi đã được kiểm chứng đúng đắn

Theo hướng tiếp cận mô hình, chúng ta có phương pháp kiểm chứng mô hình (Model checking) [3], với đầu vào là một otomat hữu hạn trạng thái và thuộc tính cần kiểm chứng, sẽ cho kết quả đầu ra là true hoặc false Hiện nay có nhiều phương pháp hỗ trợ đặc tả và kiểm chứng phần mềm theo hướng tiếp cận trên như SPIN [5], SMV [6], NuSMV [7] Khác với kiểm chứng mô hình, chứng minh tự động (Theorem Proving) có thể kiểm chứng các hệ thống với mô hình là

vô hạn trạng thái; CafeOBJ [2] là một ngôn ngữ hỗ trợ đặc tả và kiểm chứng theo tư tưởng của chứng minh tự động

Mục đích của khóa luận là tìm hiểu về phương pháp đặc tả và kiểm chứng hình thức phần mềm trong CafeOBJ Từ mô tả của hệ thống cần kiểm chứng, chúng

ta cần đặc tả hệ thống một cách hình thức bằng ngôn ngữ CafeOBJ Các thuộc tính cần kiểm chứng của hệ thống cũng được đặc tả một cách tương tự Sử dụng ngữ nghĩa cú pháp trong ngôn ngữ CafeOBJ để thể hiện các đặc tả hệ thống cũng như các đặc tả thuộc tính của hệ thống cần kiểm chứng dưới dạng hình thức từ các phát biểu của ngôn ngữ tự nhiên

1.2 Nêu bài toán

Bài toán thực hiện trong khóa luận là bài toán đặc tả và kiểm chứng hệ thống đa tác tử (MAS) sử dụng ngôn ngữ CafeOBJ Tài liệu [1] đã giải quyết được trường hợp xung đột tài nguyên, tại một thời điểm chỉ có một tiến trình (agent) được sử dụng tài nguyên dùng chung Khóa luận của tôi sẽ tập trung vào chứng minh các thuộc tính khác của hệ thống đa tác tử bằng ngôn ngữ CafeOBJ; tư tưởng chứng minh là dùng phương pháp qui nạp, phân rã bài toán ra các trường hợp và thêm các bổ đề vào Tư tưởng trên đã kiểm chứng được hệ thống đa tác tử (MAS) với không gian trạng thái là vô hạn

1.3 Kết quả

Luận văn đã đạt được các kết quả sau:

- Tìm hiểu và nắm rõ phương pháp đặc tả phần mềm sử dụng ngôn ngữ đại số CafeOBJ

- Nắm vững phương pháp chứng minh tự động sử dụng tư tưởng qui

Trang 11

nạp toán học để kiểm chứng các thuộc tính bất biến (invariant property) Với phương pháp này, để chứng minh một thuộc tính bất biến, chúng ta cần chứng minh nó đúng tại trạng thái khởi tạo của hệ thống Giả sử thuộc tính đúng tại một trạng thái bất kỳ s, chúng ta phải chứng minh nó đúng với mọi trạng thái tiếp theo của s

- Áp dụng những kiến thức đã tìm hiểu để kiểm chứng 04 thuộc tính của

hệ thống đa tác tử Trong hệ thống này, các tác tử chia sẻ một tài nguyên dùng chung Số lượng tác tử trong hệ thống là vô hạn vì vậy không gian trang thái là vô hạn Với hệ thống này, chúng ta không thể

áp dụng các phương pháp kiểm chứng mô hình vì lý do trên Kết quả kiểm chứng cho thấy hệ thống đa tác tử thỏa mãn các thuộc tính cần kiểm tra tại mọi trạng thái của hệ thống

1.4 Cấu trúc luận văn

Các phần còn lại của luận văn có cấu trúc như sau:

- Chương 2 trình bày tổng quan về ngôn ngữ CafeOBJ, kỹ thuật đặc tả

và kiểm chứng phần mềm bằng phương pháp hình thức được sử dụng trong CafeOBJ

- Một hệ thống đa tác tử và 5 thuộc tính được đặc tả trong chương 3

- Chương 4 mô tả về phương pháp kiểm chứng hệ thống đa tác tử bằng ngôn ngữ CafeOBJ, với tư tưởng quy nạp, có thể kiểm chứng với không gian trạng thái là vô hạn

- Tóm tắt kết quả đã đạt được, kết luận, những hạn chế và hướng nghiên cứu phát triển trong tương lai sẽ được trình bày trong chương 5

Trang 12

Các lôgic cơ bản của CafeOBJ bao gồm :

- Lôgic được sắp xếp theo thứ tự (Order-sorted logic): một kiểu có thể

là kiểu con của kiểu khác Ví dụ: số tự nhiên là thuộc số hữu tỉ, nhưng chúng đảm bảo tính chất hợp lệ là 3 phải bằng 6/2

- Lôgic biến đổi (Rewriting logic): Ngoài ra để bằng nhau, các biểu thức phải hợp lệ tính đối xứng, chúng ta có thể sử dụng quan hệ bắc cầu Đặc trưng của quan hệ bắc cầu là rất thuận lợi để thể hiện đồng thời hoặc tính không xác định

- Các kiểu ẩn (Hidden sorts): Chúng ta có 2 loại trương đương Một là tương đương cực tiểu (minimal equivalence) chính là đồng nhất hóa 2

vế và chúng tương đương khi và chỉ khi chúng giống nhau thông qua các phương trình đã cho Kiểu tương đương khác dùng cho kiểu ẩn, là biến đổi 2 vế là tương đương khi và chỉ khi chúng ứng xử đồng nhất dựa trên bộ quan sát đã cho

Đặc tả trong CafeOBJ bao gồm các mô đun Mỗi mô đun trong CafeOBJ được định nghĩa với cú pháp như hình 2.1, trong đó < mod_name > là tên của mô đun

và mod_elements là thành phần của mô đun

mod module-name { module-elements }

Trang 13

Hình 2.1 Cú pháp của mô đun

Hình 2.2 đặc tả 2 mô đun là mô đun SIMPLE-NAT và mô đun NAT+, được lưu

là simple-nat.mod; mô đun SIMPLE-NAT định nghĩa hai phép toán 0 và s (next)

Mô đun NAT+ kế thừa mô đun SIMPLE-NAT, định nghĩa thêm phép toán + và tính chất của phép toán 0 và s (next) bởi từ khóa eq

Hình 2.2 Đặc tả mô đun simple-nat.mod

Có 3 kiểu khai báo mô đun trong CafeOBJ là mod! (Tight modules) , mod*

(Loose modules ), mod Để load mô đun simple-nat.mod ta dùng cú pháp in

filename

Hình 2.3 Đọc file simple-nat.mod trong CafeOBJ

Với từ khóa eof trong CafeOBJ, chương trình sẽ chỉ đọc file đến dòng trước từ eof, ở hình 2.4 chương trình sẽ chỉ đọc mod SIMPLE-NAT mà lờ đi mod NAT+

mod! SIMPLE-NAT { [ Nat ]

op 0 : -> Nat { constr }

op s : Nat -> Nat { constr } }

mod! NAT+ { pr(SIMPLE-NAT)

op _+_ : Nat Nat -> Nat

eq 0 + M:Nat = M

eq s (N:Nat) + M:Nat = s (N + M) }

op 0 : -> Nat { constr }

op s : Nat -> Nat { constr } }

eof

Trang 14

Hình 2.4 Mô tả eof trong CafeOBJ

Định nghĩa kiểu (sort) trong CafeOBJ có cú pháp như sau:

Định nghĩa kiểu con (subsort) trong kiểu (sort) như sau:

Hình 2.5 sẽ mô tả kiểu số nguyên không âm là kiểu con của kiểu số nguyên, định nghĩa phép toán nhân hai số nguyên, phép chia một số nguyên cho một số nguyên không âm

Hình 2.5 Định nghĩa subsort trong sort

Các thành phần của mô đun được cấu trúc trong ba phần chính Phần thứ nhất,

imports chỉ rõ các mô đun phải được khai báo trong mô đun hiện thời, hay là sự

thừa kế các mô đun đã triển khai được khai báo trong mô đun hiện thời Có ba

dạng của việc thừa kế các mô đun: protecting (thừa kế các mô đun nhưng không thể thay đổi chúng), extending (thừa kế các mô đun có thể mở rộng chúng, nhưng những mô tả ban đầu còn lại không được thay đổi) và using (thừa

kế các mô đun có thể mở rộng hoặc thay đổi sự mô tả ban đầu) Phần thứ hai,

signature, khai báo các kiểu (sorts), các kiểu con (subsorts), và các toán tử

(operators) được sử dụng trông mô đun Và cuối cùng, axioms bao gồm sự khai

báo của các biến, các phương trình (equations), các sự dịch chuyển (transitions),

[ sort-name sort-name ]

[ subsort-name < supersort-name ]

[ NzInt < Int ]

op _*_ : Int Int -> Int

op _/_ : Int NzInt -> Int

Trang 15

và các biểu thức thể hiện hành vi của mô đun

2.2 Đặc tả và kiểm chứng trong CafeOBJ

Để cung cấp sự mô tả một mô đun trong CafeOBJ, chúng ta tìm hiểu ví dụ trong hình 2.6, với sự định nghĩa mô đun NAT+ nhƣ là mô tả cho số tự nhiên Mô đun NAT+ thừa kế các kiểu (sorts) và các toán tử (operators) đã đƣợc định nghĩa

trong mô đun SIMPLE-NAT Phần signature khai báo toán tử + Hằng số 0,

toán tử s đƣợc khai báo bởi op trong SIMPLE-NAT Hành vi của toán tử “+” là

đƣợc thực hiện bởi hai biểu thức và đƣợc khai báo bởi eq

Hình 2.6 Mô đun NAT+ trong CafeOBJ

Chúng ta có thể tham khảo thêm trong [2] về cú pháp, ngữ nghĩa của đặc tả và kiểm chứng trong CafeOBJ

Qui trình kiểm chứng trong CafeOBJ nhƣ sau:

- Kiểm tra thuộc tính có đúng với i=giá trị khởi đầu hay không (i là một thành phần của thuộc tính)

- Giả sử thuộc tính đúng đúng với i bất kỳ

- Đi chứng minh thuộc tính đúng với i'=s(i)

2.3 Ví dụ

mod! NAT+{

imports { pr(SIMPLE-NAT) }

signature {

op _+_ : Nat Nat -> Nat }

axioms { vars N M : Nat

eq 0 + M = M

eq s(N) + M = s(N + M) }

}

Trang 16

Để tìm hiểu về đặc tả và kiểm chứng trong CafeOBJ, chúng ta tìm hiểu một ví

dụ đơn giản về sự đặc tả hệ thống số tự nhiên, đặc tả thuộc tính cần chứng minh

và kiểm chứng thuộc tính đó Trong ví dụ này chúng ta chỉ mô tả một số đặc tả

cơ bản với phép toán cộng (“+”), phép so sánh (“=”), phép toán (“s”) tăng số tự nhiên lên một đơn vị, và đặc tả thuộc tính cần kiểm chứng chính là tính chất kết hợp của phép cộng tức là:

( I+ J) + K = I + (J + K), với I, J, K là số tự nhiên bất kỳ (*)

Sử dụng mô đun NAT+ được mô tả ở trên để chứng minh cho thuộc tính (*) như hình sau, tư tưởng chứng minh là dùng phương pháp quy nạp, đầu tiên kiểm chứng (*) với i=0, sau đó giả thiết (*) đúng với trường hợp i bất kỳ, sau đó chứng minh (*) đúng với s(i) Sử dụng mod NAT+ được mô tả trong hình 2.6 để chứng minh tính chất (*) như hình sau:

Hình 2.7 Chứng minh tính kết hợp của phép cộng các số tự nhiên

Kết quả của hình 2.7 trả về true, vậy thuộc tính (*) được chứng minh

Tiếp theo ta sẽ chứng minh tính chất giao hoán của phép cộng các số tự nhiên

I+ J = J+ I , với I, J là số tự nhiên bất kỳ (**)

Cũng với tư tưởng quy nạp như trên nhưng khi red 0+ j = j + 0 không trả về giá trị true mà trả về một kiểu boolean, khi đó ta phải thêm các bổ đề vào, làm sao

CLAIM: associativity over _+_

\forall i, j, k \in Nat: (i + j) + k = i + (j + k)

will be proven by induction on i

PROOF:

open NAT+ + EQL

declaring three arbitrary numbers i,j and k on the sort Nat:

Trang 17

để tìm ra bổ đề, ta nhận thấy trong mô đun NAT+ ta đã có tính chất eq 0 +

M:Nat = M Bây giờ nếu chứng minh đƣợc bổ đề j+0=j với mọi j thì kết quả

LEMMA1: \forall i \in Nat: i + 0 = i

PROOF:

open NAT+ + EQL

ops i : -> Nat base step:

red 0 + 0 = 0 > should be true

induction hypothesis:

eq i + 0 = i inductive step:

red s(i) + 0 = s(i) > should be true

Close Q.E.D

open NAT+ + EQL

arbitarily choosen two naturals:

Trang 18

Hình 2.10 Chứng minh lemma2: i + s(j) = s(i+j)

Hình 2.11 sau sẽ chứng minh cho tính chất giao hoán của phép cộng các số tự nhiên

Hình 2.11 Chứng minh i+j = j + i

Với tư tưởng kiểm chứng bằng phương pháp quy nạp đó, trong CafeOBJ cũng hỗ trợ rất mạnh mẽ sẽ được đề cập ở phần sau Được xem như là một tư tưởng nổi bật của việc kiểm chứng phần mềm và kiểm thử phần mềm Nhờ phương pháp quy nạp này

mà việc kiểm chứng các thuộc tính của hệ thống với không gian trạng thái vô hạn được thực hiện một cách rõ ràng, trong hình 2.11 chúng ta thấy được sự kiểm chứng bằng phương pháp quy nạp với việc thêm vào các bổ đề Sau khi thực hiện chương

trình như hình 2.11 trong CafeOBJ, hệ thống CafeOBJ trả về kết quả “true”, nghĩa là

hệ thống đã được kiểm chứng thỏa mãn với điều kiện (**)

open NAT+ + EQL arbitarily choosen two naturals:

ops i j : -> Nat base step:

eq N:Nat + 0 = N use LEMMA1

red 0 + s ( j ) = s ( 0 + j ) > should be true

**> induction step

eq i + s ( j ) = s ( i + j ) > conclusion of induction step red s ( i ) + s ( j ) = s ( s ( i ) + j )

**> should be true

**> QED for Lemma2 close

open NAT+ + EQL

arbitarily choosen two naturals:

Trang 19

CHƯƠNG 3

3.1 Mô tả bài toán QLOCK

Giả thiết là các tác tử (agents) hay các bộ xử lý (processes) tương tranh với nhau trong việc sử dụng tài nguyên dùng chung, nhưng tại một thời điểm chỉ có một agent duy nhất được sử dụng tài nguyên, do vậy các bộ xử lý thực hiện loại trừ lẫn nhau trong việc sử dụng tài nguyên Một phương thức (thuật toán hay kỹ thuật) giải quyết việc loại trừ lẫn nhau gọi là giao thức độc quyền truy xuất (mutual exclusion protocol)

Mã lệnh của mỗi bộ xử lý như hình 3.1 chia thành 4 đoạn

- Đoạn vào (Entry Section): chuẩn bị để được truy nhập tài nguyên

- Đoạn găng (Critical Section): sử dụng tài nguyên

- Đoạn ra ( Exit Section): giải phóng tài nguyên

- Đoạn còn lại (Remainder Section): không cần sử dụng tài nguyên

Hình 3.1 Mã lệnh của các BXL

Trong đó QLOCK là một hệ thống sử dụng giao thức độc quyền truy xuất với một hàng đợi (Queue) dùng chung cho tất cả các tiến trình (processes) thỏa mãn các yêu cầu sau:

- Agents: không giới hạn số lượng các agents

- Atomic action: khi có một action đang được thực hiện trong hàng đợi thì các hành động khác phải chờ cho đến khi hành động hiện thời kết thúc

- Trạng thái ban đầu (initial state): mọi tiến trình là ở đoạn còn lại (Remainder Section) được gán nhãn là l1, và hàng đợi là rỗng

Đoạn còn lại

Đoạn vào

Đoạn găng Đoạn ra

Trang 20

Hình 3.2 sau mô tả bài toán QLOCK với phương thức độc quyền truy xuất: mỗi

bộ xử lý (agent) i bất kỳ thực hiện: đầu tiên ở vào đoạn còn lại và được gán nhãn

là l1, sau đó i được đẩy vào đáy (bottom) của hàng đợi, sau đó nếu i muốn vào miền găng thì i được gán nhãn là l2, kiểm tra i có phải ở đỉnh của hàng đợi hay không, nếu đúng thì i đi vào miền găng và gán nhãn là cs, ngược lại i phải chờ cho đến khi là đỉnh của hàng đợi Sau khi thực hiện trong miền găng, i đi ra đoạn remainder section và gán nhãn l1

Hình 3.2 Mô tả QLOCK với phương thức độc quyền truy xuất

Trong bài toán QLOCK chúng ta phải sử dụng một hàng đợi để thực hiện phương thức độc quyền truy xuất cho cả hệ thống Việc tạo ra một hàng đợi với các thuộc tính và phương thức cơ bản của một hàng đợi như chúng ta đã biết,

gồm các phương thức put đưa một thành phần vào hàng đợi, phương thức get

xóa một thành phần ra khỏi hàng đợi Hình 3.3 sau mô tả một hàng đợi queue với 3 tiến trình (agent) i, j, k; 2 phương thức top và get; i đang ở đỉnh hàng đợi, j

ở đáy hàng đợi; i đang ở đỉnh hàng đợi do vậy có thể thực hiện phương thức get

Mỗi tiến trình i thực hiện:

true : atomic action

false

Trang 21

với i mà không thực hiện phương thức put với i được; phương thức put đẩy k vào cuối hàng đợi; tiến trình j ở trong hàng đợi nhưng không ở đầu hàng đợi nên không thực hiện được hai phương thức put và get

Hình 3.3 View of QLOCK

Tiếp theo hình 3.4 sẽ mô hình hóa bài toán QLOCK trong hệ thống chuyển dịch tổng quan (OTS) bằng biểu đồ ký số (signature diagram), sau đây sẽ mô tả chi tiết hơn các ký số: Sys là kiểu thể hiện không gian trạng thái của hệ thống; Label

là kiểu thể hiện nhãn cho mỗi trạng thái, bao gồm: l1, l2, cs; Pid là kiểu thể hiện định danh các tiến trình; Queue là kiểu thể hiện hàng đợi chứa các tiến trình; pc

là toán tử trực quan (observer) trả về nhãn của các agent ở trạng thái hiện thời,

pc có đầu vào là một trạng thái kiểu Sys và một tiến trình kiểu Pid, đầu ra là kiểu Label; queue: toán tử trực quan (observer) trả về hàng đợi các định danh của tiến trình ở trạng thái hiện thời, queue có đầu vào là một trạng thái kiểu Sys, đầu ra kiểu Queue; init là trạng thái khởi đầu; want là một hành động của việc đưa về trạng thái tiếp theo sau khi thực hiện tiến trình có kiểu Pid với nhãn l1 ở trạng thái có kiểu Sys; try là một hành động của việc đưa về trạng thái tiếp theo sau khi thực hiện tiến trình có kiểu Pid với nhãn l2 ở trạng thái có kiểu Sys, nếu tiến trình có kiểu Pid có nhãn l2 và đang ở đỉnh của hàng đợi thì nhãn của tiến trình

đó ở trạng thái tiếp theo là cs; exit là một hành động của việc đưa về trạng thái tiếp theo sau khi thực hiện tiến trình có kiểu Pid với nhãn cs ở trạng thái có kiểu Sys

Trang 22

Hình 3.4 Mô hình QLOCK với OTS

3.2 Đặc tả bài toán QLOCK bằng ngôn ngữ cafeOBJ

Có thể vắn tắt bài toán QLOCK dưới dạng thuật toán (hình 3.2) trong đó:

- Queue là hàng đợi chứa các định danh (i) của các tiến trình và được khởi tạo rỗng

- Mọi tiến trình được khởi tạo với nhãn ban đầu là l1; khi một tiến trình được đưa vào hàng đợi, tiến trình được gán nhãn là l2; khi một tiến trình được gán nhãn là l2 và ở đỉnh hàng đợi thì tiến trình được gán nhãn là cs

- put, top, get , \in là các phương thức của hàng đợi (Queue)

QLOCK sẽ được đặc tả như một OTS với các thành phần:

Trang 23

o queue(init) trả về empty

o pc(init, i) trả về nhãn l1 với mọi tiến trình i

- Với 3 hành động want, try, exit

o want(s,i) đƣa về trạng thái tiếp theo sau khi thực hiện tiến

trình i với nhãn l1 ở trạng thái s

o try(s,i) đƣa về trạng thái tiếp theo sau khi thực hiện lặp lại

tiến trình i với nhãn l2 ở trạng thái s Nếu i có nhãn l2 và top(queue(s) là i, thì nhãn của i ở trạng thái tiếp theo sẽ là cs

o exit(s,i) đƣa về trạng thái tiếp theo sau khi thực hiện tiến

trình i với nhãn cs ở trạng thái s

Chúng ta sẽ có đặc tả (signature) hệ thống nhƣ hình 3.5 bao gồm 1 kiểu không gian trạng thái của hệ thống Sys; 3 kiểu khai báo: Queue, Label, Pid; 2 toán tử trực quan: pc, queue; 3 hành động: want, try, exit

Hình 3.5 Đặc tả (signature) cho hệ thống QLOCK

Chúng ta có đặc tả mô đun LABEL chứa nhãn của các bộ xử lý nhƣ hình 3.6 sau,

mô đun bao gồm các phần tử có kiểu Label; các hằng: l1, l2, cs; một phép toán bằng = để so sánh hai nhãn bằng nhau có tính chất giao hoán; l1, l2, cs là khác nhau từng đôi một; L=L trả về true

state space of the system

*[Sys] *

visible sorts for observation

[Queue Pid Label]

observations

bop pc : Sys Pid > Label

bop queue : Sys > Queue

actions

bop want : Sys Pid > Sys

bop try : Sys Pid > Sys

bop exit : Sys Pid > Sys

Observation declaration

action declaration Hiden sort declaration

visible sort declaration

Trang 24

Hình 3.6 Đặc tả mô đun LABEL

Hình 3.7 sẽ đặc tả mô đun PID bao gồm các phần tử có kiểu Pid, một toán tử "="

có kiểu boolean để so sánh hai phần tử kiểu Pid có tính chất giao hoán

Hình 3.7 Đặc tả mô đun PID

Hình 3.8 sẽ khai báo hàng đợi tổng quát và định nghĩa cho phương thức “top” trong QUEUE trước hết chúng ta tạo 2 mô đun EQTRIV và OPTION trong đó:

mô đun EQTRIV thể hiện các phần tư khai báo tổng quát có kiểu [Elt]; toán tử

"= " để so sánh hai phần tử kiểu Elt có tính chất giao hoán Mô đun OPTION với tham số truyền vào là một thể hiện của lớp EQTRIV, các phần tử có kiểu [Option]; 3 hằng số: none, some, val; một toán tử = để so sánh hai phần tử kiểu [Option] có tính chất giao hoán Mô đun OPTION nhằm tiền định nghĩa cho phương thức “top” trong QUEUE Khi một hàng đợi rỗng thì phương thức “top”

sẽ trả về hằng số none ngược lại sẽ trả về some(E) (trong đó E chính là phần tử ở đỉnh hàng đợi); toán tử val là some-1 nghĩa là val(some (E))= E; trong mô đun OPTION có tính chất none <> some(E) và (some(E) = some(E')) = (E=E')

mod! LABEL { [Label]

ops l1 l2 cs : -> Label pred (_=_) : Label Label {comm}

mod* PID { [Pid]

op _=_ : Pid Pid -> Bool {comm}

var I : Pid

eq (I = I) = true }

Trang 25

Hình 3.8 Kiểu biến tổng quát cho hàng đợi QUEUE

Trong bài toán QLOCK chúng ta phải sử dụng một hàng đợi để thực hiện phương thức độc quyền truy xuất cho cả hệ thống Việc tạo ra một hàng đợi với các thuộc tính và phương thức cơ bản của một hàng đợi như chúng ta đã biết,

gồm các phương thức put đưa một thành phần vào hàng đợi, phương thức get xóa một thành phần ra khỏi hàng đợi và top lấy ra một thành phần trên đỉnh của hàng đợi, phương thức \in kiểm tra một phần tử có ở trong hàng đợi hay không, phương thức del xóa một phần tử trong Queue Các thuộc tính và những phương

thức cơ bản đó được định nghĩa trong CafeOBJ như hình 3.9; mô đun QUEUE chính là đặc tả cho hàng đợi trong hệ thống QLOCK

op some : Elt.X -> Option

op val : Option -> Elt.X

op _=_ : Option Option -> Bool {comm}

var O : Option

vars E E' : Elt.X

eq val(some(E)) = E

eq (O = O) = true

eq (none = some(E)) = false

eq (some(E) = some(E')) = (E = E')

}

Trang 26

Hình 3.9 Hàng đợi QUEUE cho bài toán QLOCK

Các bổ đề cần thiết để chứng minh các thuộc tính sẽ được nói đến trong chương

4 trong mô đun QUEUE như hình 3.10 sau:

- queue-lemma1(Q,X,Y) nghĩa là X nằm trong hàng đợi sau khi đã đẩy

Y vào Q khi và chỉ khi X chính là Y hoặc X đã ở trong Q từ trước

- queue-lemma2(Q,X) có nghĩa là: X nằm trong hàng đợi sau khi đã xóa một Element từ Q thì X nằm trong Q

- queue-lemma3(Q,X) nghĩa là X nằm trong hàng đợi sau khi đẩy X vào

Q rồi lại xóa X ra khỏi Q khi và chỉ khi X nằm trong Q

- queue-lemma4(Q,X,Y) nghĩa là X khác Y và X nằm trong hàng đợi

mod! QUEUE(D :: EQTRIV) {

op put : Queue Elt.D -> Queue

op get : Queue -> Queue

op top : Queue -> Option

op empty? : Queue -> Bool

op _\in_ : Elt.D Queue -> Bool

op del : Queue Elt.D -> Queue

eq X \in empty = false

eq X \in (Y,Q) = (X = Y) or X \in Q

eq del(empty,Y) = empty

eq del((X,Q),Y) = if X = Y then Q else X,del(Q,Y) fi

Trang 27

sau khi đã đẩy Y vào trong Q và xóa X ra khỏi Q kéo theo X nằm tron hàng đợi sau khi đã xóa X khỏi Q

- queue-lemma5(Q,X) nghĩa là X không nằm trong hàng đợi sau khi đã xóa X khỏi Q

Hình 3.10 Các lemma trong queue

Phương trình được định nghĩa cho hành động try như hình 3.11; c-try(S,I) = true

có nghĩa là I được gán nhãn là cs và I đang ở đỉnh hàng đợi Nhãn của tiến trình

J tại trạng thái S' = try(S,I) là cs nếu I chính là J và c-try(S,I) = true; nhãn của tiến trình J tại trạng thái S' = try(S,I) là nhãn của tiến trinh J tại trạng thái S nếu I khác J và c-try(S,I) = true; nếu c-try(S,I) = false thì S'=try(S,I)= S

Hình 3.11 Hành động try trong hệ thống QLOCK

Các phương trình định nghĩa cho các hành động khác hoàn toàn tương tự

Từ hệ thống đa tác tử được mô tả ở trên, chúng ta sẽ thấy được sự dịch chuyển của hệ thống từ trạng thái này sang trạng thái khác bởi sự tác động của một trong các hành động: {want, try, exit} Tập hợp các trạng thái đó chính là không

Lemmas

op queue-lemma1 : Queue Elt.D Elt.D -> Bool

eq queue-lemma1(Q,X,Y) = (X \in put(Q,Y) iff (X = Y or X \in Q))

op queue-lemma2 : Queue Elt.D -> Bool

eq queue-lemma2(Q,X) = (X \in get(Q) implies X \in Q)

op queue-lemma3 : Queue Elt.D -> Bool

eq queue-lemma3(Q,X) = (X \in del(put(Q,X),X) iff X \in Q)

op queue-lemma4 : Queue Elt.D Elt.D -> Bool

eq queue-lemma4(Q,X,Y) = (not(X = Y) and X \in del(put(Q,Y),X) implies

X \in del(Q,X))

op queue-lemma5 : Queue Elt.D -> Bool

eq queue-lemma5(Q,X) = not (X \in del(Q,X)

}

for try

op c-try : Sys Pid -> Bool {memo strat: (0 1 2)}

eq c-try(S,I) = (pc(S,I) = wt and top(queue(S)) = I)

Trang 28

gian trạng thái của hệ thống đa tác tử Chúng đƣợc hình thức hóa với RQLOCK là không gian trạng thái của hệ thống QLOCK đƣợc đặc tả hình thức trong CafeOBJ, RQLOCK đƣợc định nghĩa quy nạp nhƣ sau: bao gồm trạng thái khởi đầu hoặc trạng thái s' bất kỳ ứng với các hành động want, try, exit của tiến trình i ở trạng thái s

R QLOCK = {init} {want(s,i)|sR QLOCK , iPid}

{try(s,i) |sR QLOCK , iPid}

{exit(s,i)|sR QLOCK , iPid}

3.3 Đặc tả các thuộc tính

Chúng ta cần phải kiểm chứng rằng mô hình đƣợc mô tả của hệ thống đa tác tử QLOCK thỏa mãn với các thuộc tính sau:

- Thuộc tính 1: với mọi agent I, J tại mọi trạng thái S, nếu nhãn của I là

cs (I đang sử dụng tài nguyên dùng chung) và nhãn của J là cs (J đang

sử dụng tài nguyên dùng chung) thì I chính là J tại trạng thái S.Đặc tả của thuộc tính này trong CafeOBJ nhƣ sau:

eq inv1(S,I,J) = (((pc(S,I) = cs) and (pc(S,J) = cs)) implies I = J)

- Thuộc tính 2: với mọi agent I, tại mọi trạng thái S, nếu nhãn của I là

cs (I đang sử dụng tài nguyên dùng chung) thì I phải ở top của hàng đợi tại trạng thái S.Đặc tả của thuộc tính này trong CafeOBJ nhƣ sau:

eq inv2(S,I) = (pc(S,I) = cs implies top(queue(S)) = some(I))

- Thuộc tính 3: với mọi agent I tại mọi trạng thái S, nếu I đang ở trong

hàng đợi (I đang chờ tài nguyên dùng chung) thì nhãn của I là cs hoặc l2 tại trạng thái S Đặc tả của thuộc tính này trong CafeOBJ nhƣ sau:

eq inv3(S,I) = (I \in queue(S) implies (pc(S,I) = l2 or pc(S,I) = cs))

- Thuộc tính 4: với mọi agent I, tại mọi trạng thái S, nếu I đang ở đỉnh

của hàng đợi thì không thể xóa I ra khỏi hàng đợi tại trạng thái S.Đặc

tả của thuộc tính này trong CafeOBJ nhƣ sau:

eq inv4(S,I) = (top(queue(S)) = some(I) implies not(I \in get(queue(S))))

Trang 29

- Thuộc tính 5: với mọi agent I tại mọi trạng thái S, I sẽ không ở trong

hàng đợi sau khi đã xóa I ra khỏi hàng đợi tại trạng thái S Đặc tả của thuộc tính này trong CafeOBJ như sau:

eq inv5(S,I) = not(I \in del(queue(S),I))

Từ các thuộc tính được mô tả bằng ngôn ngữ tự nhiên trên, chúng ta sẽ đặc tả hình thức chúng trong ngôn ngữ CafeOBJ bằng modun INV, với sự thừa kế các thuộc tính và các phương thức của mô đun QLOCK và các đặc tả thuộc tính

được biểu diễn bởi các hàm trong CafeOBJ Trong đó, inv1 là đặc tả của thuộc tính 1 trong hệ thống, inv2 là đặc tả của thuộc tính 2 trong hệ thống, inv3 là đặc

tả của thuộc tính 3 trong hệ thống, inv4 là đặc tả của thuộc tính 4 trong hệ thống

và inv5 là đặc tả của thuộc tính 5 trong hệ thống, với đầu vào là một trạng thái

bất kỳ trong không gian trạng thái Các hàm này sẽ kiểm tra tính đúng đắn của đặc tả hệ thống trong chương trình có thỏa mãn các thuộc tính đã được mô tả hay không Việc triển khai này trong CafeOBJ sẽ được mô tả chi tiết trong hình 3.12

Hình 3.12 Đặc tả các thuộc tính trong CafeOBJ

mod INV {

pr(QLOCK)

arbitrary objects

ops i j : -> Pid

declare invariant candidates

op inv1 : Sys Pid Pid -> Bool

op inv2 : Sys Pid -> Bool

op inv3 : Sys Pid -> Bool

op inv4 : Sys Pid -> Bool

op inv5 : Sys Pid -> Bool

CafeOBJ variables

var S : Sys

vars I J : Pid

define invariant candidates

eq inv1(S,I,J) = (pc(S,I) = cs and pc(S,J) = cs implies I = J)

eq inv2(S,I) = (pc(S,I) = cs implies top(queue(S)) = some(I))

eq inv3(S,I) = (I \in queue(S) implies (pc(S,I) = l2 or pc(S,I) = cs))

eq inv4(S,I) = (top(queue(S)) = some(I) implies not(I \in get(queue(S))))

eq inv5(S,I) = not(I \in del(queue(S),I))

}

Trang 30

Để chứng minh cho các thuộc tính bất biến bằng phương pháp quy nạp trên không gian trạng thái RQLOCK, chúng ta khai báo theo mô đun được gọi là ISTEP trong CafeOBJ như hình 3.13 sau: 2 hằng s, s' là trạng thái của hệ thống; 5 toán

tử istep1, istep2, istep3, istep4, istep5 có kiểu boolean; mỗi toán tử istep có công thức istep(I) = inv(s,I) implies inv(s',I) trong đó I là biến có kiểu Pid Có nghĩa

là để chứng minh inv(s',I)= true với giả thiết inv(S,I)=true, ta đi chứng minh istep(I) = true với mọi I

Hình 3.13 Mô đun ISTEP trong CafeOBJ

mod ISTEP {

pr(INV)

arbitrary objects

ops s s' : -> Sys

declare predicates to prove in inductive step

op istep1 : Pid Pid -> Bool

op istep2 : Pid -> Bool

op istep3 : Pid -> Bool

op istep4 : Pid -> Bool

op istep5 : Pid -> Bool

CafeOBJ variables

vars I J : Pid

define predicates to prove in inductive step

eq istep1(I,J) = inv1(s,I,J) implies inv1(s',I,J)

eq istep2(I) = inv2(s,I) implies inv2(s',I)

eq istep3(I) = inv3(s,I) implies inv3(s',I)

eq istep4(I) = inv4(s,I) implies inv4(s',I)

eq istep5(I) = inv5(s,I) implies inv5(s',I)

}

Trang 31

- Phần cơ sở: Kiểm tra các thuộc tính invI thỏa mãn với trạng thái khởi

tạo init hay không

- Phần quy nạp: s là một trạng thái của hệ thống, giả thiết thuộc tính invI thỏa mãn ở trạng thái s, chúng ta phải kiểm tra rằng thuộc tính đó

có thỏa mãn với trạng thái tiếp theo của trạng thái s với các hành động của hệ thống sau: want, try, exit

Phương pháp top - down có nghĩa là vừa kiểm chứng vừa phân rã thành các trường hợp và thêm các bổ đề vào với các trường hợp chưa trả ra kết quả true ngay Nếu tất cả việc kiểm tra trên trả về giá trị đúng (true) thì việc kiểm chứng các thuộc tính bất biến của hệ thống hoàn thành

4.2 Kiểm chứng các thuộc tính của bài toán QLOCK

Chúng ta triển khai các bước quy nạp cho việc kiểm chứng các đặc tả được mô

tả theo các bước kiểm chứng trong CafeOBJ Khi chạy tất cả chúng trong CafeOBJ, tất cả sẽ trả về giá trị đúng (true) Điều đó có nghĩa là tất cả các thuộc tính thỏa mãn hệ thống Từ đó chúng ta đã hoàn thành việc kiểm chứng các thuộc tính bất biến của hệ thống dựa trên các đặc tả hình thức trong CafeOBJ

4.2.1 Chứng minh inv1(S,I,J)

Ta mô tả cho việc chứng minh inv1(S,I,J) = true với mọi trạng thái S và tiến

trình I, J như sau: nhận thấy rằng A implies B = (A and B) xor (A xor true), do vậy A implies B = false chỉ khi A=true va B=false

- Đầu tiên là kiểm chứng cho trạng thái init

inv1(init,i,j) = (( pc(init,i) = cs and pc(init,j) = cs) implies i=j)

Trang 32

= ( ( l1=cs and l2=cs ) implies i=j)

= (false implies i=j)

= true

Mô tả trong CafeOBJ như sau:

> init open INV red inv1(init,i,j) >

close

- Tiếp theo ta giả sử inv1(s,i,j)= true

- Ta chứng minh cho inv1(s', i, j) = true với s' là trạng thái đạt được

với 3 hành động: want, try, exit

a) s'=want(s,k)

pc(s',i) = pc (want(s,k),i); pc(s',j) = pc (want(s,k),j)

Từ trên ta thấy sẽ phân rã thành các trường hợp:

inv1(s',i,j) = (pc(s',i) = cs and pc(s',j) = cs implies i=j)

inv1(s',i,j) = (l2=cs and l2=cs implies i=j )

= false implies i=j

= true Viết dưới ngôn ngữ CafeOBJ như hình 4.1 sau:

Trang 33

Hình 4.1 Kiểm chứng inv1 với trường hợp (1)

Sau khi thực hiện như trên (hình 4.1) kết quả trả về là true, vậy trường

hợp này thỏa mãn

Với trường hợp (2), (3), (4) tham chiếu trong phần phụ lục 1

Với trường hợp (5) (~c-want(s,k)) chúng ta nhận thấy

inv1(s',i,j) = (pc(s',i) = cs and pc(s',j) = cs implies i=j)

= (pc(s,i) = cs and pc(s,j) = cs implies i=j)

= inv1(s,i,j) = true

Viết dưới ngôn ngữ CafeOBJ như hình 4.2 sau:

Hình 4.2 Kiểm chứng inv1 với trường hợp (5)

-> ~c-want(s,k) open ISTEP arbitrary objects

op k : -> Pid assumptions

eq c-want(s,k) = false successor state

eq s' = want(s,k) check if the predicate is true

red istep1(i,j) close

> c-want(s,k), i = k, j = kopen ISTEP

arbitrary objects

op k : -> Pid assumptions eq c-want(s,k) = true

eq pc(s,k) = l1

eq i = k

eq j = k successor state

eq s' = want(s,k) check if the predicate is true

red istep1(i,j) close

Trang 34

Sau khi thực hiện như trên (hình 4.2) kết quả trả về là true, vậy trường hợp

này thỏa mãn

b) s'=try(s,k)

Cũng tương tự như want phân rã thành các trường hợp nhưng chúng ta sẽ chỉ quan tâm đến các trường hợp làm cho inv1(s',i,j) không đạt được true ngay, còn các trường hợp đạt true tham chiếu trong phụ lục 1

Trường hợp c-try(s,k), i = k, ~(j = k) (*) inv2(s,j)

inv1(s',i,j) = (true and pc(s,j) = cs implies i=j)

= (pc(s,j) = cs) implies false

Nhận thấy inv1(s',i,j) = false nếu pc(s,j) = cs là true, do vậy ta phải tìm bổ

đề để chỉ ra pc(s,j)=cs là false dưới các giả thiết (*):

c- try(s,k) có nghĩa là pc(s,k) = l2 và top(queue(s)) = some(k); i = k; ~(j =k)

Nhận thấy một bổ đề đúng đắn: eq inv2(s,j) = pc(s,j) = cs implies top

(queue(s))= some(j) Mà giả thiết top(queue(s)) = some(k), k<>j nên top

(queue(s)) =some(j) là false; do vậy pc(s,j) = cs là false Viết dưới ngôn

arbitrary objects

op k : -> Pid assumptions eq c-try(s,k) = true

eq pc(s,k) = l2

eq top(queue(s)) = some(k)

eq i = k

eq (j = k) = false successor state

eq s' = try(s,k) check if the predicate is true

red inv2(s,j) implies istep1(i,j) close

Trang 35

4.2.2 Chứng minh inv2(S,I)

Ta mô tả cho việc chứng minh inv2(S,I) = true với mọi trạng thái S và tiến trình

I như sau:

- Đầu tiên là kiểm chứng cho trạng thái init

inv2(init,i) = ( pc(init,i) = cs implies top (queue(init)) = some(i) )

= ( ( l1=cs implies none =some(i))

= (false implies false)

= true

Mô tả trong CafeOBJ như sau:

> init open INV red inv2(init,i) >

Close

- Tiếp theo ta giả sử inv2(s,i)= true

- Ta chứng minh cho inv2(s', i) = true với s' là trạng thái đạt được

với 3 hành động: want, try, exit

a) s' = want(s,k)

inv2(s',i) = (pc(s',i) = cs implies top (queue(s')) = some(i) )

Nhận xét: pc(s',i) = pc (want(s,k),i);

top ( queue(want(s,k))) = some(k) nếu queue(s) = empty

= some (k2) nếu queue(s)= k2,q

Do vậy sẽ phân rã thành các trường hợp như sau:

> c-want(s,k), i = k > c-want(s,k), ~(i = k), queue(s) = empty > c-want(s,k), ~(i = k), queue(s) = k2,q > ~c-want(s,k)

Chi tiết chứng minh trong phụ lục 2

b) s' = try(s,k)

> c-try(s,k), i = k > c-try(s,k), ~(i = k) > ~c-try(s,k)

Ngày đăng: 25/03/2015, 10:01

HÌNH ẢNH LIÊN QUAN

Hình 2.10. Chứng minh lemma2: i + s(j) = s(i+j). - Nghiên cứu về chứng minh tự động (Theorem Proving) trong CafeOBJ
Hình 2.10. Chứng minh lemma2: i + s(j) = s(i+j) (Trang 18)
Hình 2.11 sau sẽ chứng  minh cho tính chất giao  hoán của phép cộng các số tự  nhiên - Nghiên cứu về chứng minh tự động (Theorem Proving) trong CafeOBJ
Hình 2.11 sau sẽ chứng minh cho tính chất giao hoán của phép cộng các số tự nhiên (Trang 18)
Hình 3.2 sau mô tả bài toán QLOCK với phương thức độc quyền truy xuất: mỗi - Nghiên cứu về chứng minh tự động (Theorem Proving) trong CafeOBJ
Hình 3.2 sau mô tả bài toán QLOCK với phương thức độc quyền truy xuất: mỗi (Trang 20)
Hình 3.4. Mô hình QLOCK với OTS. - Nghiên cứu về chứng minh tự động (Theorem Proving) trong CafeOBJ
Hình 3.4. Mô hình QLOCK với OTS (Trang 22)
Hình 3.5. Đặc tả (signature) cho hệ thống QLOCK. - Nghiên cứu về chứng minh tự động (Theorem Proving) trong CafeOBJ
Hình 3.5. Đặc tả (signature) cho hệ thống QLOCK (Trang 23)
Hình 3.6. Đặc tả mô đun LABEL. - Nghiên cứu về chứng minh tự động (Theorem Proving) trong CafeOBJ
Hình 3.6. Đặc tả mô đun LABEL (Trang 24)
Hình 3.8. Kiểu biến tổng quát cho hàng đợi QUEUE. - Nghiên cứu về chứng minh tự động (Theorem Proving) trong CafeOBJ
Hình 3.8. Kiểu biến tổng quát cho hàng đợi QUEUE (Trang 25)
Hình 3.9. Hàng đợi QUEUE cho bài toán QLOCK. - Nghiên cứu về chứng minh tự động (Theorem Proving) trong CafeOBJ
Hình 3.9. Hàng đợi QUEUE cho bài toán QLOCK (Trang 26)
Hình 3.13. Mô đun ISTEP trong CafeOBJ. - Nghiên cứu về chứng minh tự động (Theorem Proving) trong CafeOBJ
Hình 3.13. Mô đun ISTEP trong CafeOBJ (Trang 30)
Hình 4.1. Kiểm chứng inv1 với trường hợp (1). - Nghiên cứu về chứng minh tự động (Theorem Proving) trong CafeOBJ
Hình 4.1. Kiểm chứng inv1 với trường hợp (1) (Trang 33)
Hình 4.4. Kiểm chứng inv2 với trường hợp c-exit, ~(i = k). - Nghiên cứu về chứng minh tự động (Theorem Proving) trong CafeOBJ
Hình 4.4. Kiểm chứng inv2 với trường hợp c-exit, ~(i = k) (Trang 36)
Hình 4.9. Chứng minh inv5 với trường hợp c-want(s,k), queue(s) = x,q, i = k. - Nghiên cứu về chứng minh tự động (Theorem Proving) trong CafeOBJ
Hình 4.9. Chứng minh inv5 với trường hợp c-want(s,k), queue(s) = x,q, i = k (Trang 43)
Hình 4.10. Chứng minh inv5 với trường hợp c-want(s,k), queue(s) = x,q, ~(i = - Nghiên cứu về chứng minh tự động (Theorem Proving) trong CafeOBJ
Hình 4.10. Chứng minh inv5 với trường hợp c-want(s,k), queue(s) = x,q, ~(i = (Trang 44)
Hình 4.11. Chứng minh inv5 với trường hợp c-exit(s,k), i = k, queue(s) = x,q, x - Nghiên cứu về chứng minh tự động (Theorem Proving) trong CafeOBJ
Hình 4.11. Chứng minh inv5 với trường hợp c-exit(s,k), i = k, queue(s) = x,q, x (Trang 45)
Hình 4.12. Chứng minh inv5 với trường hợp c-exit(s,k), ~(i = k), queue(s) = x,q, - Nghiên cứu về chứng minh tự động (Theorem Proving) trong CafeOBJ
Hình 4.12. Chứng minh inv5 với trường hợp c-exit(s,k), ~(i = k), queue(s) = x,q, (Trang 46)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w