Quy tắc vịng lặp while

Một phần của tài liệu Đại cương về công nghệ phần mềm (Trang 63 - 64)

E ∧ B { P } E

∴ E { while B do P } E ∧ ¬B

Ở đây, E và B là nhũng điều kiện. Riêng điều kiện E được gọi là bất biến của vịng lặp.

Một trong những khĩ khăn của việc chứng minh tính đúng đắn của chương trình là tìm được bất biến cho mỗi vịng lặp (nghĩa là một bất biến cho phép chứng minh đúng cái yêu cầu). Thực tế khơng tồn tại một phương pháp cĩ tính hệ thống

và tổng quan để tìm ra những bất biến như vậy.

V

Víí dduuûû 44 ::

Sử dụng bất biến của vịng lặp, chứng minh đoạn chương trình tính fac = n!, với n ∈ Ν sau đây : i := 1; fac := 1; while i < n do begin i := i + 1; fac := fac * i end;

Gọi P ≡ {begin i:= i + 1; fac := fac * i end }

Giả sử điều kiện E ≡ (fac = i!) ∧ (i ≤ n), ta cần chứng minh E là bất biến của vịng lặp.

Ta sẽ chứng minh bằng quy nạp :

E đúng trước khi vào vịng lặp, vì i = 1, fac = 1 = 1! Và 1 ≤ n.

Giả sử E đúng với i < n sau khi thực hiện vịng lặp và sau đĩ, while cịn được thực thi một lần nữa. Trước hết i được tăng thêm 1 (với lệnh gán i:= i + 1) và do vậy vẫn cịn i ≤ n. Do giả thiết quy nạp fac = (i − 1) ! trước khi vào vịng lặp nên fac sẽ cĩ giá trị là :

fac = (i − 1)! * i = i!

Từ đĩ E quả thật là bất biến của vịng lặp và mệnh đề : (E ∧ (i < n)) {P} E đúng. Từ đĩ suy ra khẳng định :

E { while i < n do P } E ∧ (i ≥ n) cũng đúng. Vì vịng lặp kết thúc sau khi lặp n − 1 lần, khi đĩ i = n và fac = n!.

Một phần của tài liệu Đại cương về công nghệ phần mềm (Trang 63 - 64)

Tải bản đầy đủ (PDF)

(154 trang)