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
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
NGUYỄN QUỲNH CHI
ĐẶC TẢ VÀ CHỨNG MINH TÍNH ĐÚNG ĐẮN
CỦA THIẾT KẾ CHO CÁC HỆ ĐA TÁC TỬ
Chuyên ngành : BẢO ĐẢM TOÁN HỌC CHO MÁY TÍNH VÀ HỆ
Trang 2LỜ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
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
Nam định, Ngày 20 tháng 06 năm 2013
Nguyễn Quỳnh Chi
Trang 3LỜ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à gia đình 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
Nam Định, Ngày 20 tháng 06 năm 2013
Học viên thực hiện
Nguyễn Quỳnh Chi
Trang 4BẢNG CÁC CHỮ VIẾT TẮT
OTS Observation Transition System
Trang 5Phụ lục
Giới thiệu 1
1.1 Đặt vấn đề 1
1.2 Nêu bài toán 3
1.3 Kết quả 3
1.4 Cấu trúc luận văn 4
Chương 2 5
Tổng quan về CafeOBJ 5
2.1 Giới thiệu 5
2.2 Đặc tả và kiểm chứng trong CafeOBJ 10
2.2.1 Ví dụ 10
2.2.2 Đặc tả số tự nhiên 11
2.2.3 Đặc tả thuộc tính 12
2.2.4 Kiểm chứng thuộc tính 12
Chương 3 17
Đặc tả hệ thống đa tác tử 17
3.1 OTS (Observation transition system) 17
3.2 Mô tả bài toán QLOCK 18
3.4 Đặc tả bài toán QLOCK bằng ngôn ngữ cafeOBJ 22
Chương 4 29
Kiểm chứng hệ thống đa tác tử 29
4.1 Thuộc tính INV1 được mô tả 29
4.1.1 Kiểm chứng bằng phương pháp quy nạp trong ngôn ngữ tự nhiên 29
4.1.2 Kiểm chứng bằng phương pháp quy nạp trong ngôn ngữ CafeOBJ 30
4.2- Thuộc tính INV2 được mô tả 46
Chương 5 Error! Bookmark not defined Kết luận 55
Tài liệu tham khảo 57
Trang 6DANH MỤC HÌNH VẼ
Hình 2.1- Cú pháp của mô đun 6
Hình 2.2- Đặc tả 2 mô đun BASIC-NAT trong CafeOBJ 8
Hình 2.3 Đọc file nat+ps.mod trong CafeOBJ 9
Hình 2.4: Đọc chi tiết file cần chứng minh trong CafeOBJ 9
Hình 2.5 Mô tả eof trong CafeOBJ 10
Hình 2.6 Mô đun BASIC-NAT trong CafeOBJ 11
Hình 2.7 Đặc tả thuộc tính cho điều kiện (*) và điều kiện (**) 12
Hình 2.8 Chứng minh tính chất kết hợp của phép cộng các số tự nhiên 13
Hình 2.9 Chứng minh 0+j=j+0 16
Hình 2.10 Chứng minh lemma2: i + s(j) = s(i+j) 16
Hình 2.11 Chứng minh i+j = j + i 17
Hình 3.1 Mô tả bài toán Qlock 20
Hình 3.2 View of QLOCK 21
Hình 3.3 Mô hình QLOCK với OTS 22
Hình 3.4 Đặc tả (signature) cho hệ thống QLOCK 24
Hình 3.5 Đặc tả mô đun LABEL 25
Hình 3.6 Đặc tả mô đun PID 25
Hình 3.7 Kiểu biến tổng quát cho hàng đợi QUEUE 26
Hình 3.8 Hàng đợi QUEUE cho bài toán QLOCK 27
Hình 3.9 Hành động want trong hệ thống QLOCK 28
Hình 3.10 Hành động try trong hệ thống QLOCK 28
Hình 3.11 Hành động exit trong hệ thống QLOCK 29
Hình 4.1 Kiểm tra giá trị của INV1 tại trạng thái init 31
Hình 4.2 Kiểm tra giá trị của INV1 với hành động want tại trạng thái s 32
Hình 4.3 Kiểm chứng INV1 với hành động want cho trường hợp ~(c-want) 32
Hình 4.4 Kiểm chứng INV1 với hành động want cho trường hợp (c-want) 33
Hình 4.5 Kiểm chứng INV1 với hành động want cho trường hợp (2) 34
Trang 7Hình 4.7 Kiểm chứng INV1 với hành động want cho trường hợp (4) 36
Hình 4.8 Kiểm chứng INV1 với hành động want cho trường hợp (5) 36
Hình 4.9 Kiểm chứng istep1 với hành động want cho trường hợp (5) 37
Hình 4.10 Kiểm chứng istep 1 với hành động try cho trường hợp c-try (s,k) 38
Hình 4.11 Kiểm chứng istep 1 với hành động try cho trường hợp ~(c-try (s,k)) 38
Hình 4.12 Kiểm chứng istep 1 với hành động try cho trường hợp (2) 39
Hình 4.13 Kiểm chứng istep 1 với hành động try cho trường hợp (3) 40
Hình 4.14 Kiểm chứng istep 1 với hành động try cho trường hợp (4) 41
Hình 4.15 Kiểm chứng istep 1 với hành động try cho trường hợp (5) 42
Hình 4.16 Kiểm tra giá trị của INV1 với hành động exit tại trạng thái s 43
Hình 4.17 Kiểm tra istep1 với hành động exit cho trường hợp ~c-exit(s,k) 43
Hình 4.18 Kiểm tra istep1 với hành động exit cho trường hợp c-exit(s,k) 44
Hình 4.19 Kiểm tra istep1 với hành động exit cho trường hợp (2) 44
Hình 4.20 Kiểm tra istep1 với hành động exit cho trường hợp (3) 45
Hình 4.21 Kiểm tra istep1 với hành động exit cho trường hợp (4) 45
Hình 4.22 Kiểm tra istep1 với hành động exit cho trường hợp (5) 46
Hình 4.23 Kiểm tra giá trị của INV2 tại trạng thái init 47
Hình 4.24 Kiểm tra istep2 với hành động WANT cho trạng thái s 48
Hình 4.25 Kiểm tra istep2 với hành động WANT cho trường hợp ~c-want(s,k) 48
Hình 4.26 Kiểm tra istep2 với hành động WANT cho trường hợp c-want(s,k) 49
Hình 4.27 Kiểm tra istep2 với hành động WANT cho trường hợp i=k 49
Hình 4.28 Kiểm tra istep2 với hành động WANT cho trường hợp ~(i=k) 50
Hình 4.29 Kiểm tra istep2 với hành động WANT cho trường hợp ~(i=k) queue(s) = empty 51
Hình 4.30 Kiểm tra istep2 với hành động WANT cho trường hợp ~(i=k) queue(s) = j,q 51
Hình 4.31 Kiểm chứng inv1(s,i,k) implies istep2(i) với hành động exit cho trường hợp ~(i = k), pc(s,i) = cs, inv1 53
Hình 4.32 Kiểm chứng istep2 với hành động exit cho trường hợp ~(i = k), ~(pc(s,i) = cs 54
Trang 8Giớ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 (ngôn ngữ tự nhiên) và đặc tả hình thức (dựa
trên kiến trúc toán học) Đặc tả phi hình thức là đặc tả sử dụng ngôn ngữ tự
nhiên Tuy nó 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 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ự
Trang 9Kiể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) 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 (
phần mềm luôn đúng), các phương pháp kiểm chứng có thể đảm bảo hệ thống
không có lỗi sau khi đã được kiểm chứng đúng đắn
Hiện này đã có nhiểu phương pháp và công cụ hỗ trợ cho việc đặc tả và
kiểm chứng phần mềm như OBJ, Maude, CafeOBJ, SPIN, SMV, NuSMV…
Mỗi phương pháp có những ưu và nhược điểm riêng và bi hạn chế trong một
số hệ thống nhất định
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 CafeOBJ
có thể kiểm chứng hệ thống đa tác tử (MAS) với không gian trạng thái là vô
hạn
Trang 101.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à chứng minh tính
đúng đắn của hệ thống đa tác tử (MAS) sử dụng ngôn ngữ CafeOBJ Quy
trình sẽ được thực hiện như sau:
Yêu cầu là phải đảm bảo thiết kế đúng trước khi lập trình, nếu không lỗi
sẽ lan sang các bước sau và mất nhiều công hơn ( có thể là cấp mũ) mới tìm
được ra lỗi Hiện nay vẫn còn làm thủ công, xem từng thiết kế so sánh với đặc
tả yêu cầu mới có thể tìm ra lỗi nên khó đảm bảo chất lượng Một số sản
phẩm sẽ đòi hỏi chất lượng cao ( bằng phần mềm điều khiển) Vì không biết
trước số tác tử nên không biết được số trạng thái của hệ thống, ta coi không
gian trạng thái là hộp đen, nên không thể áp dụng các phương pháp kiểm
chứng bằng mô hình yêu cầu chứng minh lý thuyết không được làm thủ công,
ngược lại sẽ không nghiệm thu thiết kế Khóa luận của tôi sẽ tập trung vào
chứng minh các thuộc tính 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
Thu thập
yêu cầu
Đặc tả yêu cầu
Lập trình Thiết kế
Trang 11-Nắm vững phương pháp chứng minh tự động sử dụng tư tưởng qui 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 02 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 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
Chương 3 Đặc tả hệ thống đa tác tử
Chương 4 Trình bày về phương pháp kiểm chứng hệ thống đa tác tử bằng
ngôn ngữ CafeOBJ
Kết luậ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
Trang 12Chương 2 Tổng quan về CafeOBJ
2.1 Giới thiệu
CafeOBJ là một ngôn ngữ đặc tả đại số được phát triển ở Nhật Bản dưới
sự chỉ đạo của GS Kokichi Futatsugi trong phòng thí nghiệm Language
Design tại Viện khoa học và công nghệ tiên tiến Nhật Bản (JAIST) Chúng hỗ
trợ phương pháp kiểm chứng dựa trên kỹ thuật đặc tả đại số và phương pháp
quy nạp nhằm kiểm chứng các chương trình với miền trạng thái vô hạn
CafeOBJ là một ngôn ngữ thực thi dựa trên nhiều cơ sở lôgic, chủ yếu dựa
trên các đại số ban đầu và đại số được suy luận
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
Trang 13Đặc tả trong CafeOBJ bao gồm các mô đul, mỗi mô đun trong cafeOBJ
được định nghĩa với cú pháp
module module_name {
imports {
module_element …
} signature {
module_element …
} axioms {
module_element …
} }
Hình 2.1- Cú pháp của mô đun
Trong đó: <module name> là tên của module
<module_element> là thành phần của module
Các thành phần của module được cấu trúc trong 3 phần chính
Imports: Chỉ rõ mô đun đượ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ó 3 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ể thừa kế 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 không được thay đổi)
Trang 14 Using ( Thừa kế các mô đun có thể mở rộng hoặc thay đổi sự mô tả
ban đầu
Singnature: Khai báo các kiểu (sorts), các kiểu con (subsorts) và các toán tử
(operators)
Axioms: Bao gồm sự khai báo của các biến, các phương trình (equation), các
sự dịch chuyển (transitions) và các biểu thức thể hiện hành vi của mô đun
Thành phần của module có thể được khai báo import, khai báo kiểu (sort),
khai báo toán tử (operation), khai báo biến, khai báo một phương trình
(equation), khai báo sự dịch chuyển (transition)
Định nghĩa kiểu (sort) trong CafeOBJ có cú pháp như sau:
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
Để cung cấp sự mô tả các mô đun trong CafeOBJ, chúng ta tìm hiểu ví dụ
trong hình 2.2 với sự định nghĩa là mô đun BASIC-NAT như là mô tả số tự
nhiên, được lưu là nat+ps.mod; mô đun BASIC-NAT định nghĩa hai phép
toán 0 và s (next), đị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
[ sort-name sort-name ]
[ NzInt < Int ]
op _*_ : Int Int -> Int
op _/_ : Int NzInt -> Int
Trang 15Hình 2.2- Đặc tả 2 mô đun BASIC-NAT trong CafeOBJ
Phần import : Mô đun BASIC-NAT thừa kế các kiểu (sort) và các toán tử
(operators) đã được định nghĩa trong Nat
Phần Signature khai báo các kiểu NzNat, Nat, Zero, ký hiệu “<” nghĩa là
kiểu NzNat là kiểu con của kiểu Nat ( kiểu số tự nhiên không âm là kiểu con
của kiểu số tự nhiên và bao gồm hằng số 0, toán tử s được khai báo la op
Phần Axioms : Hành vi của toán tử “+” được thực hiện bởi 2 biểu thức và
được khai báo bởi eq
Có 3 kiểu khai báo mô đun trong CafeOBJ là mod! (Tight modules) ,
mod* (Loose modules ), mod Để load mô đun BASIC-NAT.mod và mô đun
NATplus ta dùng cú pháp in filename
Trang 16Hình 2.3 Đọc file nat+ps.mod trong CafeOBJ
Để hiểu chi tiết hơn về cách chứng minh tính đúng đắn của đặc tả trong
CafeOBj ta dùng cú pháp:
CafeOBJ> set trace on
CafeOBJ> set trace whole on
CafeOBJ> -thuộc tính cần chứng minh
Hình 2.4: Đọc chi tiết file cần chứng minh 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.5 chương trình sẽ chỉ đọc mod BASIC-NAT mà lờ đi
mod NATplus, và mô đun NATplus thừa kế mô đun BASIC-NAT
CafeOBJ> in nat+ps.mod
processing input : nat+ps.mod defining module! BASIC-NAT+ _* done
CafeOBJ>
Trang 17file: nat+ps.mod
mod! BASIC-NAT { protecting (NAT) protecting (NZNAT) [Zero NZNAT < NAT]
op 0 : -> Zero
op s_ : NAT -> NZNAT }
}
Hình 2.5 Mô tả eof trong CafeOBJ
2.2 Đặc tả và kiểm chứng trong CafeOBJ
2.2.1 Ví dụ
Để 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à
2.2.1.1: Tính chất kết hợp của phép cộng các số tự nhiên
Trang 18op _+_ : Nat Nat -> Nat Phép cộng số tự nhiên
op _=_ : Nat Nat -> Bool {comm} - - Phép so sánh số tự nhiên
var M,N : Nat M, N Là các biến dùng để đặc tả
eq 0 + M = M Biểu diễn quan hệ của các phép toán
Từ mô tả về số tự nhiên với ba phép toán cơ bản và các thuộc tính của
nó, chúng ta tiến hành đặc tả bài toán bằng mô đun BASIC-NAT trong
CafeOBJ như trong (hình 2.6) Đặc tả này định nghĩa các toán tử cần thiết và
các quan hệ giữa chúng, trong đặc tả này khai báo số tự nhiên kiểu [Nat],
hằng số 0, các phép toán tăng “s”, phép toán cộng “+”, phép so sánh “=” được
khai báo sau từ khoa op, cùng với các phương trình biểu diễn quan hệ giữa
chúng được khai báo sau từ khóa eq
Trang 192.2.3 Đặc tả thuộc tính
Với đặc tả hệ thống BASIC-NAT như trên (Hình 2.6) , chúng ta cần đặc
tả thuộc tính cần kiểm chứng ( điều kiện (*) và điều kiện (**)) Trong đó i , j,
k là các số tự nhiên bất kỳ, hàm bất biến INV nhằm kiểm chứng tính đúng đắn
của thuộc tính
ops i j k : -> Nat
- Điều cần chứng minh
eq inv (i,j,k)=(( i + j) + k = i +(j + k))(*)
eq inv (i, j,)=(( I+ J) = (J+ I)) (**)
Hình 2.7 Đặc tả thuộc tính cho điều kiện (*) và điều kiện (**)
2.2.4 Kiểm chứng thuộc tính
Sử dụng mô đun BASIC-NAT được mô tả ở (hình 2.6) để 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)
opening module NATplus and EQL
open (NATplus + EQL)
> declaring constants for arbitrary values
Trang 20Hình 2.8 : Chứng minh tính chất kết hợp của phép cộng các số tự nhiên
Sử dụng chương trình kiểm chứng bằng ngôn ngữ toán học CafeOBJ kết
quả của hình 2.8 trả về true, vậy thuộc tính (*) được chứng minh cụ thể như
Trang 21Theo giả thiết ((s M) +N) = (s (M+N)
Trang 22Sử dụng mô đun BASIC-NAT được mô tả ở (hình 2.6) để chứng minh
cho thuộc tính (**) như hình sau, cũng với 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, và giả thiết (**)
đúng với trường hợp i bất kỳ, sau đó chứng minh (**) đúng với s(i) 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 để tìm ra bổ đề, ta nhận thấy trong mô
đun BASIC-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ả của 0+j=j+0 sẽ trả về true
Sử dụng bổ đề trên ta sẽ chứng minh được j+0=0+j như hình sau
Hình 2.9 Chứng minh 0+j=j+0 Tiếp theo giả thiết i + j = j+i, khi red s(i) + j = j + s(i) không trả về true mà trả
về một kiểu boolean, có nghĩa là ta phải thêm bổ đề vào, vậy tìm bổ đề như
thế nào, nhận thấy từ BASIC-NAT ta có s(i) + j = s(i+j) theo giả thiết i+j=j+i
open (NATplus + EQL) > declaring constants for induction ops i j : -> Nat
**> Prove Lemma1: i + 0 = i, by induction on i
**> induction base case (i = 0) : 0 + 0 = 0 red 0 + 0 = 0
**> induction step
eq i + 0 = i red (s i) + 0 = (s i)
Trang 23vậy s(i) + j = s(j+i), do vậy mục đích là chứng minh j+s(i) = s(j+i), hình 2.10
sau sẽ chứng minh bổ đề trên
Hình 2.10 Chứng minh lemma2: i + s(j) = s(i+j)
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ự
**> Prove Lemma2: i + (s j) = s(i + j) by induction on i
**> induction base case (i = 0) : 0 + (s j) = s(0 + j) red 0 + (s j) = s(0 + j)
**> induction step
eq i + (s J:Nat) = s(i + J) > conclusion of induction step red (s i) + (s j) = s((s i) + j)
Trang 24Vớ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 (**)
Chương 3 Đặc tả hệ thống đa tác tử
3.1 OTS (Observation transition system)
Chúng ta sử dụng OTS/ CafeOBJ để mô hình hóa hệ thống với kỹ thuật đại số
cho việc đặc tả và kiểm chứng của các hệ thống một cách rõ nét hơn
Ưu điểm của phương pháp này:
- Trình bày một mô hình hình thức để mô tả hệ thống, trong đó
chú trọng đến các quan sát (observers) cũng như các hành động trong OTS
- Phương thức OTS/CafeOBJ cung cấp một mô hình ngữ nghĩa và
framework chúng cho một hệ thống phức tạp
Trang 25- Đối với việc kiểm chứng hình thức với một hệ thống bởi bộ
chúng được cung cấp bởi phương thức OTS/CafeOBJ
Trong chương 2 trình bày về đặc tả và kiểm chứng trong CafeOBJ với hệ
thống đơn giản, trong khi thực tế có nhiều hệ thống phức tạp với sự chuyển
đổi trạng thái của hệ thống khi có một hoạt động nào đó tác động vào hệ
thống đó Vì vậy với hệ thống biến đổi trạng thái trực quan (OTS) là một mô
hình hóa toán học sẽ giúp chúng ta dễ biểu diễn các đặc tả và kiểm chứng hệ
thống một cách chính xác và rõ ràng hơn
3.2 Mô tả bài toán QLOCK
Ta thấy rằng nhiều tiến trình (agents or processes) tranh quyền sử dụng
một tài nguyên, nhưng tại một thời điểm chỉ có duy nhất một tiến trình có thể
sử dụng tài nguyên, vì thế mà tất cả các tiến trình phải tuân theo giao thức độc
quyền truy xuất (mutual exclusion protocol) trong việc sử dụng tài nguyên
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:
-Độc quyền truy xuất: Nếu tiến trình Pi đang sử dụng tài nguyên thì không
tiến trình nào được sử dụng , mà phải chờ cho tới khi tiến trình hiện thời kết
thúc
-Tiến trình: Nếu không có tiến trình nào sử dụng tài nguyên và có một số
tiến trình muốn dùng thì một tiến trình nào đó phải được dùng
-Trạng thái ban đầu: Mọi tiến trình không có nhu cầu sử dụng tài nguyên và
hàng đợi là rỗng
Trang 26Hình 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 mọi tác tử chưa có nhu cầu
dùng tài nguyên và được gán nhãn là rm, sau đó khi một tác tử i muốn dùng
tài nguyên nó sẽ được đẩy vào hàng đợi ( vào trước ra trước), thì i được gán
nhãn là wt, kiểm tra tác tử i có phải ở đỉnh của hàng đợi hay không, nếu đúng
thì i được dùng tài nguyên gán nhãn là cs, ngược lại i phải chờ cho đến khi là
đỉnh của hàng đợi Khi i đang dùng tài nguyên, nếu dùng xong hệ thống sẽ tự
xóa nó ra khỏi hàng đợi và có nhãn là rm
Mỗi tiến trình i thực hiện
Sử dụng tài nguyên
Đẩy i vào đáy queue
Trạng thái ban đầu
Trang 27Hình 3.1 Mô tả bài toán Qlock
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.2 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
Trang 2821
Hình 3.2 View of QLOCK Tiếp theo hình 3.3 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: rm, wt, 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 rm ở 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 wt ở trạng thái có kiểu Sys, nếu tiến trình có kiểu Pid có
nhãn wt 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
Label pid
Trang 29Hình 3.3 Mô hình QLOCK với OTS
3.4 Đặ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.3) 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à rm ; khi một tiến trình
được đưa vào hàng đợi, tiến trình được gán nhãn là wt ; khi một tiến trình
được gán nhãn là wt và ở đỉnh hàng đợi thì tiến trình được gán nhãn là cs
-put, top, get 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:
- Hai hàm queue và pc
+queue(s) trả về hàng đợi các định danh của tiến trình ở trang thái s
Trang 30+ pc(s,i) trả về nhãn (rm, wt hay cs) của tiến trình i ở trạng thái s
-Khởi tạo với trạng thái ban đầu (init)
queue(init) trả về empty
pc(init, i) trả về nhãn rm với mọi tiến trình i
-Với 3 hành động want, try, exit
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 rm ở trạng thái s
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 wt ở trạng thái s Nếu i có nhãn wt và top(queue(s) là i, thì
nhãn của i ở trạng thái tiếp theo sẽ là cs
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.4 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
*[Sys]
Trạng thái ban đầu
Op init : -> Sys Các hàm bop pc: Sys Pid -> Label bop queue : Sys -> Queue Các hành động
bop want : Sys pid -> Sys bop try : Sys pid -> Sys bop exit : Sys pid -> Sys
Trang 31Hình 3.4 Đặ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.5 sau, mô đun bao gồm các phần tử có kiểu Label; các hằng: rm, wt,
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; rm, wt, cs là khác nhau từng đôi một; L=L trả về true
Hình 3.5 Đặc tả mô đun LABEL
Hình 3.6 sẽ đặc tả mô đun PID bao gồm các phần tử có kiểu Pid, một
toán tử "=" để so sánh hai phần tử kiểu Pid có tính chất giao hoán
Hình 3.6 Đặc tả mô đun PID Hình 3.7 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 TRIVerr và OPTION
trong đó: mô đun TRIVerr 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ô
mod! LABEL { [Label]
ops rm wt cs : -> Label pred (_=_) : Label Label {comm} var L : Label
eq (L = L) = true
eq (rm = wt) = false
eq (rm = cs) = false
eq (wt = cs) = false }
mod* PID { [Pid < PidErr]
op none : -> PidErr pred (_=_) : PidErr PidErr {comm}
var I : Pid
eq (I = I) = true
eq (none = I) = false (none = none) is not defined intentionally}
Trang 32đun OPTION với tham số truyền vào là một thể hiện của lớp TRIVerr, 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 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* TRIVerr { [Elt]
op _=_ : Elt Elt -> Bool {comm}
} mod! OPTION(X :: TRIVerr) { [Option]
op none : -> Option
op some : Elt.X -> Option
op val : Option -> Elt.X
op _=_ : Option Option -> Bool {comm}
Trang 3326
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')
}
Hình 3.7 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 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.8; mô đun QUEUE chính là đặc tả cho
hàng đợi trong hệ thống QLOCK
mod! QUEUE(D :: TRIVerr) {
[Queue]
constructors
op empty : -> Queue {constr}
op _,_ : Queue Elt.D -> Queue {constr l-assoc}
operators
op put : Elt.D Queue -> Queue
op get : Queue -> Queue
op top : Queue -> EltErr.D
op empty? : Queue -> Bool