Assertion là ràng buộc bổ sung và được kiểm tra bởi bộ phân tích xem chúng có đúng hay không. Bài giảng Đặc tả hình thức: Chương 5 do Nguyễn Thị Minh Tuyền sau đây sẽ giúp các bạn nắm chi tiết hơn về Assertion. Mời các bạn cùng tham khảo!
Trang 1LOGO
Đặc tả hình thức
Nguyễn Thị Minh Tuyền
Giới thiệu về Alloy
Trang 2Assertion
v Assertion là ràng buộc bổ sung và được
kiểm tra bởi bộ phân tích xem chúng có
đúng hay không
v Nếu một assertion không đúng, bộ phân tích
sẽ tạo ra một phản ví dụ
v Cú pháp:
assert tên{
ràng buộc }
Trang 3Ví dụ
v Không ai có bố mẹ mà đồng thời cũng là anh chị
em
assert parentsSiblings{
all p: Person | no p.parents & p.siblings
}
v Anh chị em của một người là anh chị em của
những người đó
assert siblingsSiblings{
all p: Person | p.siblings = p.siblings.siblings
}
v Không ai có cùng tổ tiên với chồng/vợ mình ( ví
dụ vợ/chồng không có quan hệ huyết thống)
assert sameBlood{
Trang 4Lệnh (command) và phạm vi (scope)
v Để phân tích một mô hình, ta cần một lệnh
và chỉ dẫn công cụ thực thi nó
§ Lệnh run yêu cầu công cụ tìm kiếm một instance của một vị từ
§ Lệnh check yêu cầu công cụ tìm kiếm một phản ví dụ của một assertion
§ Ví dụ:
• check Safe
• run trans
v Để chỉ rõ một phạm vi, ta có thể đưa ra một giới hạn (scope )cho mỗi signature tương
ứng với một loại cơ bản
Trang 5Check
Nếu mô hình có các fact M, tìm một ví dụ
sao cho M && !F
v check a for list
Trang 6Ví dụ về check
hệ thống file:
abstract sig Object {}
sig Directory extends Object {}
sig File extends Object {}
sig Alias extends File {}
là đúng cú pháp
§ check A for 5 Object
§ check A for 4 Directory, 3 File
§ check A for 5 Object, 3 Directory
§ check A for 3 Directory, 3 Alias, 5 File
Trang 7Ví dụ về check
v Ta có thể thiết lập một phạm vi mặc định, và
có thể trộn lẫn giữa phạm vi mặc định với
giới hạn rõ ràng cho một loại cụ thể
v Ví dụ:
§ check A for 5
§ Đặt một giới hạn là 5 cho tất cả các loại top-level
§ check A for 5 but 3 Directory
§ đặt thêm một giới hạn là 3 cho Directory, và một giới hạn là 2
cho File bằng phép suy dẫn
v Có thể dùng từ khóa exactly:
§ check A for exactly 3 Directory, exactly 3 Alias, 5 File
§ Giới hạn File với nhiều nhất 5 phần tử, nhưng yêu cầu Directory
và Alias có chính xác 3 phần tử cho mỗi loại.
Trang 8Câu hỏi
dụ cho assertion thì assertion có hợp
lệ không?
Trang 9Run
instance của mô hình
trong file
phạm vi
§ giới hạn kích thước các instance được xem xét
Trang 10Run và vị từ
v run f scope
sao cho
v M && (some x:X, y:Y, ,result:R|result =
E)
Trang 11Ví dụ về lệnh run
§ run {}
§ run {some Man && some Woman && some Married} for 2
§ run {some Woman && no Man} for 7
§ run {some Man && some Married && no Woman}
Trang 12Câu hỏi
không?
Trang 13Trở lại ví dụ granpa
1 module language/grandpa1
2 abstract sig Person {
3 father: lone Man,
4 mother: lone Woman
5 }
6 sig Man extends Person {
7 wife: lone Woman
8 }
9 sig Woman extends Person {
10 husband: lone Man
11 }
12 fact {
13 no p: Person | p in p.^(mother + father)
14 wife = ~husband
15 }
16 assert NoSelfFather {
17 no m: Man | m = m.father
18 }
19 check NoSelfFather
20 fun grandpas (p: Person): set Person {
21 p.(mother + father).father
22 }
23 pred ownGrandpa (p: Person) {
24 p in grandpas [p]
Trang 14LOGO