Professional Documents
Culture Documents
Đặc tả hình thức - Đặc tả hàm
Đặc tả hình thức - Đặc tả hàm
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
2
Tổng Quan Về Hàm
Hàm là một khái niệm trừu tượng toán học: là ánh xạ giữa hai
tập giá trị.
function_name: domain → range, ở đó
gcd: N1xN1 → N1
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
3
Tổng Quan Về Hàm
Hàm định nghĩa trực tiếp (tường minh) của bình phương
square: Z → N
square(i) ≜ i*i
Hàm xác định giá trị tuyệt đối
abs: Z → N
abs(i) ≜ if i<0 then –i else i
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
4
Tổng Quan Về Hàm
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
5
Tổng Quan Về Hàm
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
6
Tổng Quan Về Hàm
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
7
Các phép tổng quát trên ngôn ngữ VDM
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
8
Đặc tả hàm
Ví dụ:
Hàm luỹ thừa có thể được xác định bằng phương pháp
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
9
Đặc tả hàm
Ví dụ:
Hàm luỹ thừa củng có thể được xác định bằng phương
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
10
Đặc tả hàm không tường minh
thay vì định nghĩa trực tiếp vấn đề, chúng ta không phải chỉ
ra kết quả được tính toán như thế nào.
Có nhiều nguyên nhân để chúng ta phải đặc tả không tường
bài toán mong muốn hơn so với đặc tả tường minh (hay cài
đặt).
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
11
Đặc tả hàm không tường minh
thể mô tả đầy đủ miền giá trị bao trùm cho cài đặt.
Đặc tả không tường minh là cách lưu trữ lại yêu cầu chức
năng mà không cần bận tâm đến phương thức cụ thể của
tính toán. Tính chất khác của đặc tả là nó có thể mô tả các
thuộc tính của kết quả cần thiết sao cho người dùng dễ hiểu
nhất.
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
12
Đặc tả hàm không tường minh
mà người dùng mong muốn trả về kết quả đúng nhất từ đặc
tả.
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
13
Đặc tả hàm không tường minh
hàm
Không cần nêu ra các bước để thực hiện xử lý trong hàm
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
14
Đặc tả hàm không tường minh
Định nghĩa tên hàm, tên và kiểu của các tham số đầu vào, tên
và kiểu của kết quả trả về (tham số đầu ra)
Vị từ Pre-condition và Post-condition là biểu thức điều kiện
logic, có thể có giá trị là true hoặc false.
Biểu thức điều kiện có thể chứa một hoặc nhiều vị từ. Các
từ được liên kết bởi các phép liên kết logic, lượng từ và có
thể chứa đựng hàm, tham số, hằng số và biến
Xác định Vị từ Pre-condition để phát biểu điều kiện về giá trị
của các tham số đầu vào
Xác định Vị từ Post-condition để phát biểu mối quan hệ giữa
các tham số đầu vào với kết quả trả về của hàm
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
15
Đặc tả hàm không tường minh
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
16
Đặc tả hàm không tường minh
Theo cấu trúc chuẩn của đặc tả hàm không tường minh:
Mỗi hàm có tối đa 1 kết quả trả về
Vấn đề: Làm cách nào đặc tả hàm cần trả về nhiều nội dung
thông tin?
Giải pháp: Định nghĩa kiểu cấu trúc để chứa tất cả các thành phần
thông tin sẽ trả về (Chương 6)
Giải pháp khác???
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
17
Đặc tả hàm không tường minh
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
18
Đặc tả hàm không tường minh
tâm
Mô tả một tập các kết quả có thể bởi vị từ post-condition
Giá trị tường minh (giá trị true hoặc false) của vị từ pre-
condition
Ít xem xét tới đặc tả thuật toán
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
19
Đặc tả hàm không tường minh
Ví dụ:
max_of_set (s: ℕ-set) r: ℕ
pre s {}
post (r s) ( n s n r)
Ví dụ:
abs (z: ℤ) r: ℕ
pre true
post ((r = z) (z 0))
((r = -z) (z < 0))
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
20
Đặc tả hàm không tường minh
Ví dụ: hàm tính ước số chung lớn nhất bằng phương pháp
không tường minh sử dụng lượng từ như sau:
gcd (i:N1, j:N1) r:N1
pre true
post is-common-divisor (i,j,r)
¬ s N1 is-common-divisor (i,j,s) s>r
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
21
Đặc tả hàm không tường minh
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
22
Đặc tả hàm không tường minh
Ví dụ: Hàm trả về vị trí xuất hiện đầu tiên của chuỗi pt trong
chuỗi cx, hoặc trả về 0 nếu chuỗi pt không xuất hiện trong cx ?
Thảo luận:?
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
23
Đặc tả hàm không tường minh
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
24
Đặc tả hàm không tường minh
Ví dụ: Hàm kiểm tra chuỗi p có phải là prefix ngắn nhất của
chuỗi s trong chuỗi t hay không?
is-shortest-prefix (p: String, s: String, t: String) r: B
pre
post is-prefix (p, s, t)
q String ( is-prefix (q, s, t) len q len p)
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
25
Đặc tả hàm không tường minh
Ví dụ: Hàm trả về vị trí xuất hiện đầu tiên của chuỗi pt trong
chuỗi cx, hoặc trả về 0 nếu chuỗi pt không xuất hiện trong cx
location (pt: String, cx: String) r: ℕ
pre pt [] cx []
post ( p String is-shortes-prefix(p, pt, cx) r = (1 + len p))
(r = 0)
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
26
Đặc tả hàm tường minh
Lưu ý:
Trong đặc tả không tường minh, mọi giá trị thỏa Vị từ Post-
condition đều có thể được chấp nhận là kết quả phù hợp
của hàm.
Trong đặc tả tường minh xác định một giá trị cụ thể phù
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
27
Đặc tả hàm tường minh
Ở đó chứa đựng tham số, hằng số, hàm, vị từ, hàm xác
định bởi người sử dụng
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
28
Đặc tả hàm tường minh
Lưu ý:
Trong đặc tả dạng tường minh không đặt tên cho biến kết
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
29
Mối Quan Hệ Giữa Hàm Tường Minh
Và Không Tường Minh
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
30
Cấu trúc điều khiển if-then-else
Cú pháp:
if Biểu-thức-điều-kiện
then giá-trị1
else giá-trị2
Cấu trúc if-then-else có thể lồng nhau
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
31
Cấu trúc điều khiển if-then-else
Ví dụ: hàm tính giai thừa bằng phương pháp tường minh
factorial : N → N
factorial(n) ≜
if n ≥ 1
then n factorial(n-1)
else 1
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
32
Cấu trúc điều khiển if-then-else
Ví dụ:
Đặc tả dạng không tường minh Đặc tả dạng tường minh
abs (z: ℤ) r: ℕ abs : ℤ ℕ
pre abs (z) ≜
post ((r = z) (z 0)) if (z<0) then –z else
((r = -z) (z < 0)) z
max (a: ℤ, b: ℤ) r: ℤ max : ℤ ℤ ℤ
pre max (a, b) ≜
post ((r = a) (a b)) if (a b) then a else
((r = b) (a < b)) b
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
33
Cấu trúc cases
Cú pháp:
cases index:
( value1, value2 result1,
value3, value4, value5 result2,
…
valuen resultm
)
Cấu trúc case được sử dụng khi chúng ta cấn xét nhiều trường
hợp mà viết đặc tả ngắn gọn hơn thay vì sử dụng cấu trúc if-
then-else.
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
34
Cấu trúc cases
Ví dụ: Hàm tính số ngày của 1 tháng trong năm không nhuận
số-ngày-trong-tháng: ℕ ℕ
số-ngày-trong-tháng (th) ≜
cases th:
( 1, 3, 5, 7, 8, 10, 12 31,
4, 6, 9, 11 30,
2 28
)
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
35
Sử dụng hàm phụ
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
36
Sử dụng hàm phụ
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
37
Sử dụng hàm phụ
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
38
Sử dụng hàm phụ
là-usc : ℕ1 ℕ1 ℕ1 B
là-usc (z, x, y) ≜
chia-hết (x, z) chia-hết (y, z)
chia-hết : ℕ1 ℕ1 B
chia-hết ( x, y) ≜
k ℕ1 x = y * k
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
39
Đặc tả đệ quy
Đối với đặc tả hàm tường minh thì kỹ thuật đặc tả đệ quy cũng
được áp dụng. Đối với kỹ thuật này chúng ta cần xác định
được điều kiện dừng cho hàm cục bộ. Kỹ thuật này cũng được
áp dụng đối với đặc tả hàm không tường minh.
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
40
Đặc tả đệ quy
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
41
Đặc tả đệ quy
Ví dụ: Đặc tả hàm trả về giá trị của phần tử lớn nhất trong
mảng
maxnum (s: ℤ *) r: ℤ
pre s []
post ( r elems s ) ( x elems s x r )
maxnum (s: ℤ *) r: ℤ
pre s []
post ( ( r = hd s) (len s = 1) )
( ( r = hd s) ( r maxnum (tl s)) )
( ( r > hd s) ( r = maxnum (tl s)) )
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
42
Đặc tả đệ quy
Ví dụ: Đặc tả hàm trả về giá trị của phần tử lớn nhất trong
mảng
maxnum : ℤ* ℤ
maxnum (s) ≜
if len s = 1
then hd s
else
if hd s maxnum (tl s)
then hd s
else maxnum (tl s)
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
43
Khai báo biến tạm bằng let-in
Trong quá trình đặc tả các hàm cục bộ, chúng ta có thể sử
dụng giá trị của một biểu thức lặp đi lặp lại nhiều lần. Trong
đặc tả hàm đa số các ngôn ngữ đều hỗ trợ ký pháp let in để đặc
tả một biến tạm và biến này được xem như là một định danh
để thay thế giá trị của biểu thức được sử dụng trong hàm cục
bộ.
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
44
Khai báo biến tạm bằng let-in
Cú pháp 1:
let định danh (identifier) = Biểu-thức1 in Biểu-thức2
Ý nghĩa:
Xác định giá trị của Biểu-thức1 và gán vào “biến tạm” đinh
danh
Thay thế những vị trí xuất hiện của định danh trong Biểu-
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
45
Ký pháp let-in
Ví dụ: Đặc tả hàm tính giá trị tuyệt đối của tích 2 số nguyên
như sau:
absprod : ℤ × ℤ
absprod (i,j) ≜
let k = i*j in
if k<0 then –k else k
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
46
Ký pháp let-in
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
47
Ký pháp let-in
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
48
Ký pháp let-in
Ví dụ: Đặc tả hàm trả về giá trị của phần tử lớn nhất trong
mảng
maxnum : ℤ* ℤ
maxnum (s) ≜
if len s = 1
then hd s
else
let max-in-tail = maxnum (tl s) in
if hd s max-in-tail
then hd s
else max-in-tail
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
49
Khai báo biến tạm bằng let-in
Cú pháp 2a:
let định danh Biểu-thức-tập-hợp in Biểu-thức
Cú pháp 2b:
let định danh Biểu-thức-tập-hợp s.t. Điều-kiện in Biểu-thức
Ý nghĩa:
Biến tạm định danh nhận giá trị của MỘT phần tử (thỏa Điều-
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
50
Khai báo biến tạm bằng let-in
Ví dụ: Đặc tả hàm tính tổng các phần tử trong 1 tập hợp
sumset : ℝ-set ℝ
sumset (s) ≜
if s = {}
then 0
else
let x s in
x + sum-set ( s – {x} )
4/5/2019 CuuDuongThanCong.com
PGS.TS. Vũ Thanh Nguyên https://fb.com/tailieudientucntt
51