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 |
Chia sẻ: phuongt97 | Lượt xem: 353 | 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