Module trong Alloy
v Alloy là một hệ thống module cho
phép module hóa việc sử dụng lại các
mô hình.
v Một module định nghĩa một mô hình
và có thể xem mô hình này là một mô
hình con của mô hình khác.
v Để thuận lợi cho việc tái sử dụng, các
module có thể được tham số hóa
trong một hoặc nhiều signature
              
                                            
                                
            
 
            
                 23 trang
23 trang | 
Chia sẻ: phuongt97 | Lượt xem: 624 | Lượt tải: 0 
              
            Bạn đang xem trước 20 trang nội dung tài liệu Bài giảng Đặc tả hình thức - Chương 6: Các module trong Alloy - Nguyễn Thị Minh Tuyền, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
LOGO 
Đặc tả hình thức 
Nguyễn Thị Minh Tuyền 
Các module trong Alloy 
Nguyễn Thị Minh Tuyền 1 
Đặc tả hình thức 
Module trong Alloy 
v Alloy là một hệ thống module cho 
phép module hóa việc sử dụng lại các 
mô hình. 
v Một module định nghĩa một mô hình 
và có thể xem mô hình này là một mô 
hình con của mô hình khác. 
v Để thuận lợi cho việc tái sử dụng, các 
module có thể được tham số hóa 
trong một hoặc nhiều signature 
2 Nguyễn Thị Minh Tuyền 
Đặc tả hình thức 
Ví dụ 
module util/relation 
 -- r is acyclic over the set s 
pred acyclic [r: univ->univ, s: set univ] { 
 all x: s | x !in x.^r 
} 
module family 
open util/relation as rel 
sig Person { 
 parents: set Person 
} 
fact { acyclic [parents, Person] } 
3 Nguyễn Thị Minh Tuyền 
Đặc tả hình thức 
Ví dụ 
module util/relation 
 -- r is acyclic over the set s 
pred acyclic [r: univ->univ, s: set univ] { 
 all x: s | x !in x.^r 
} 
module fileSystem 
open util/relation as rel 
sig Object {} 
sig Folder extends Object { 
 subFolders: set Folder 
} 
fact { acyclic [subFolders, Folder] } 
4 Nguyễn Thị Minh Tuyền 
Đặc tả hình thức 
Khai báo module 
v Dòng đầu tiên của mỗi module là 
module header 
 module modulePathName 
v Module có thể import một module 
khác với câu lệnh open ngay sau 
header 
 open modulePathName 
5 Nguyễn Thị Minh Tuyền 
Đặc tả hình thức 
Định nghĩa module 
v Một module A có thể import một 
module B, module B lại có thể import 
một module C ... 
v Không cho phép có bất cứ vòng lặp 
nào trong cấu trúc import. 
6 Nguyễn Thị Minh Tuyền 
Đặc tả hình thức 
Định nghĩa ModulePathName 
v Mỗi module có một tên đường dẫn, 
tên này phải khớp với đường dẫn của 
file chứa module đó trong hệ thống 
file. 
v Tên đường dẫn module có thể 
§  chỉ là tên file (mà không có phần mở rộng .als) 
§  có thể là đường dẫn đầy đủ. 
7 Nguyễn Thị Minh Tuyền 
Đặc tả hình thức 
Ví dụ 
module C/F/mod 
open D/lib1 
open C/E/H/lib2 
open C/E/G/lib3 
modulePathName trong 
module header chỉ đặc 
tả đường dẫn gốc cho 
mọi file được import 
8 Nguyễn Thị Minh Tuyền 
A B 
C D 
E F 
G H 
lib1 
mod 
lib2 lib3 
Đặc tả hình thức 
Định nghĩa ModulePathName 
v Ví dụ: 
module family 
 open lib/people 
v Nếu đường dẫn của family.als là 
trong hệ thống file thì AA sẽ tìm kiếm 
people.als trong /lib/ 
9 Nguyễn Thị Minh Tuyền 
family.als 
people.als 
lib 
Đặc tả hình thức 
Định nghĩa ModulePathName 
v Ví dụ: 
module myProject/family 
 open lib/people 
v Nếu đường dẫn của myProject là 
trong hệ thống file thì AA sẽ tìm kiếm 
people.als trong /lib/ 
10 Nguyễn Thị Minh Tuyền 
family.als people.als 
lib myProject 
Đặc tả hình thức 
Các module định nghĩa sẵn 
v Alloy 4 có một thư viện các module 
được định nghĩa sẵn. 
v Bất kỳ một module nào được import 
thì AA sẽ tìm kiếm trong các module 
này đầu tiên. 
11 Nguyễn Thị Minh Tuyền 
Đặc tả hình thức 
As 
v Khi tên đường dẫn của một import 
chứa / (ví dụ như đó không chỉ là tên 
file mà còn là đường dẫn) 
v Thì ta phải đưa ra một tên ngắn hơn 
cho module với từ khóa as. 
 open util/relation as rel 
12 Nguyễn Thị Minh Tuyền 
Đặc tả hình thức 
Xung đột về tên 
v Các module có không gian tên 
(namespace) riêng. 
v Để tránh xung đột tên giữa các thành 
phần của các module khác nhau, ta 
dùng qualified name. 
module family 
 open util/relation as rel 
 sig Person { parents: set Person } 
 fact { rel/acyclic [parents] } 
13 Nguyễn Thị Minh Tuyền 
Đặc tả hình thức 
Các module được tham số hóa 
v Một mô hình m có thể được tham số 
hóa bởi một hoặc nhiều tham số 
signature [x1,...,xn] 
v Hiệu ứng của việc mở m[s1,...,sn] là 
import một bản copy của m với mỗi 
tham số của signature xi được thay 
thế bởi tên signature si. 
14 Nguyễn Thị Minh Tuyền 
Đặc tả hình thức 
Ví dụ 
module graph [node] // 1 signature param 
 open util/relation as rel 
 pred dag [r: node -> node] { 
 acyclic [r, node] 
 } 
module family 
 open util/graph [Person] as g 
 sig Person { parents: set Person } 
 fact { dag [parents] } 
15 Nguyễn Thị Minh Tuyền 
Đặc tả hình thức 
Module định nghĩa sẵn: Ordering 
v Tạo ra một chuỗi có thứ tự các nguyên tử 
trong module S: module util/ordering[S] 
v Nếu scope trên một signature là 5 thì 
opening ordering[S] sẽ buộc S phải có 5 
phần tử và tạo ra một chuỗi tuyến tính 
trên 5 phần tử đó. 
16 Nguyễn Thị Minh Tuyền 
Đặc tả hình thức 
Module Ordering 
module util/ordering[S] 
 private one sig Ord { 
 First, Last: S, 
 Next, Prev: S -> lone S 
 } 
fact { 
 // all elements of S are totally ordered 
 S in Ord.First.*Next 
 ... 
} 
17 Nguyễn Thị Minh Tuyền 
Đặc tả hình thức 
Module Ordering 
// constraints that actually define the 
// total order 
Ord.Prev = ~(Ord.Next) 
one Ord.First 
one Ord.Last 
no Ord.First.Prev 
no Ord.Last.Next 
18 Nguyễn Thị Minh Tuyền 
Đặc tả hình thức 
Module Ordering 
{ 
// either S has exactly one atom, 
// which has no predecessors or successors ... 
(one S and no S.(Ord.Prev) and 
no S.(Ord.Next)) or 
// or ... 
all e: S | 
 // ... each element except the first has one predecessor, and ... 
 (e = Ord.First or one e.(Ord.Prev)) and 
 // ...each element except the last has one successor, and ... 
 (e = Ord.Last or one e.(Ord.Next)) and 
 // ... there are no cycles 
 (e !in e.^(Ord.Next)) 
} 
19 Nguyễn Thị Minh Tuyền 
Đặc tả hình thức 
Module Ordering 
// first 
fun first: one S { Ord.First } 
// last 
fun last: one S { Ord.Last } 
// return the predecessor of e, or empty set if e is 
//the first element 
fun prev [e: S]: lone S{ e.(Ord.Prev) } 
// return the successor of e, or empty set of e is 
// the last element 
fun next [e: S]: lone S { e.(Ord.Next) } 
// return elements prior to e in the ordering 
fun prevs [e: S]: set S { e.^(Ord.Prev) } 
// return elements following e in the ordering 
fun nexts [e: S]: set S { e.^(Ord.Next) } 
20 Nguyễn Thị Minh Tuyền 
Đặc tả hình thức 
Module Ordering 
// e1 is before e2 in the ordering 
pred lt [e1, e2: S] { e1 in prevs[e2] } 
// e1 is after than e2 in the ordering 
pred gt [e1, e2: S] { e1 in nexts[e2] } 
// e1 is before or equal to e2 in the ordering 
pred lte [e1, e2: S] { e1=e2 || lt [e1,e2] } 
// e1 is after or equal to e2 in the ordering 
pred gte [e1, e2: S] { e1=e2 || gt [e1,e2] } 
21 Nguyễn Thị Minh Tuyền 
Đặc tả hình thức 
Module Ordering 
// returns the larger of the two elements in the ordering 
fun larger [e1, e2: S]: S 
 { lt[e1,e2] => e2 else e1 } 
// returns the smaller of the two elements in the ordering 
fun smaller [e1, e2: S]: S 
 { lt[e1,e2] => e1 else e2 } 
// returns the largest element in es 
// or the empty set if es is empty 
fun max [es: set S]: lone S 
 { es - es.^(Ord.Prev) } 
// returns the smallest element in es 
// or the empty set if es is empty 
fun min [es: set S]: lone S 
 { es - es.^(Ord.Next) } 
22 Nguyễn Thị Minh Tuyền 
LOGO 
            Các file đính kèm theo tài liệu này:
 bai_giang_dac_ta_hinh_thuc_chuong_6_cac_module_trong_alloy_n.pdf bai_giang_dac_ta_hinh_thuc_chuong_6_cac_module_trong_alloy_n.pdf