LOGO

Đặc tả hình thức

Giới thiệu về Alloy

Nguyễn Thị Minh Tuyền

Nguyễn Thị Minh Tuyền 1

Assertion

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

}

2 Nguyễn Thị Minh Tuyền Đặc tả hình thức

Ví 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{

no p: Married | some (p.^parents & p.spouse.^parents)

}

3 Nguyễn Thị Minh Tuyền Đặc tả hình thức

Lệ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.

4 Nguyễn Thị Minh Tuyền Đặc tả hình thức

Check

v assert a {F} v check a scope Nếu mô hình có các fact M, tìm một ví dụ sao cho M && !F v check a for default v check a for default but list v check a for list

5 Nguyễn Thị Minh Tuyền Đặc tả hình thức

Ví dụ về check

v Ví dụ: Cho trước các khai báo của một

hệ thống file: abstract sig Object {} sig Directory extends Object {} sig File extends Object {} sig Alias extends File {}

v và một assertion A. Các lệnh sau đây

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

6 Nguyễn Thị Minh Tuyền Đặc tả hình thức

Ví 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.

7

Nguyễn Thị Minh Tuyền

Đặc tả hình thức

Câu hỏi

v Nếu AA không tìm được một phản ví

dụ cho assertion thì assertion có hợp lệ không?

8 Nguyễn Thị Minh Tuyền Đặc tả hình thức

Run

v Được dùng để yêu cầu AA sinh ra các

instance của mô hình.

v AA chỉ thực thi lệnh run đầu tiên

trong file.

v Để phân tích một mô hình, thêm lệnh

run và chỉ dẫn AA thực thi nó.

v Có thể cung cấp cho lệnh run một

phạm vi §  giới hạn kích thước các instance được xem xét.

9 Nguyễn Thị Minh Tuyền Đặc tả hình thức

Run và vị từ

v pred p[x:X, y:Y,...] {F} v run p scope v Nếu mô hình có các fact M, tìm ví dụ

sao cho M && (some x:X, y:Y|F)

v fun f[x:X,y:Y,...] R{E} v run f scope v Nếu mô hình có các fact M, tìm ví dụ

sao cho

v M && (some x:X, y:Y,...,result:R|result =

E)

10 Nguyễn Thị Minh Tuyền Đặc tả hình thức

Ví dụ về lệnh run

v Lệnh run đơn giản nhất

§  run {}

v Lệnh run có điều kiện

§  run {some Man && some Woman && some Married}

for 2

v Một số kịch bản khác

§  run {some Woman && no Man} for 7 §  run {some Man && some Married && no Woman}

11 Nguyễn Thị Minh Tuyền Đặc tả hình thức

Câu hỏi

v sử dụng lệnh run cho một vị từ và

check cho một assertion có khác nhau không?

12 Nguyễn Thị Minh Tuyền Đặc tả hình thức

Trở 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]

25 } 26 run ownGrandpa for 4

13 Nguyễn Thị Minh Tuyền Đặc tả hình thức

LOGO