1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Phát triển các kỹ thuật tìm bất biến (invariants) và biến (variants) cho việc sử dụng hoare logic để chứng minh tính đúng đắn của chu trình

79 28 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 79
Dung lượng 526,49 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

LỜI CAM ĐOANTôi xin cam đoan luận văn “Phát triển các kỹ thuật tìm bất biếninvariants và biến variants cho việc sử dụng Hoare Logic để chứng minh tínhđúng đắn của chu trình” là do tôi th

Trang 1

ĐẠI HỌC QUỐC GIA HÀ NỘI

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

NGUYỄN MINH HẢI

PHÁT TRIỂN CÁC KỸ THUẬT TÌM BẤT BIẾN (INVARIANTS) VÀ BIẾN (VARIANTS) CHO VIỆC

SỬ DỤNG HOARE LOGIC ĐỂ CHỨNG MINH TÍNH

ĐÚNG ĐẮN CỦA CHU TRÌNH

LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN

Hà Nội – 2016

Trang 2

ĐẠI HỌC QUỐC GIA HÀ NỘI

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

NGUYỄN MINH HẢI

PHÁT TRIỂN CÁC KỸ THUẬT TÌM BẤT BIẾN (INVARIANTS) VÀ BIẾN (VARIANTS) CHO VIỆC

SỬ DỤNG HOARE LOGIC ĐỂ CHỨNG MINH TÍNH

Trang 4

LỜI CẢM ƠN

Trước tiên, tôi xin chân thành cảm ơn TS Đặng Văn Hưng, người thầy đãtận tình hướng dẫn, giúp đỡ tôi trong suốt quá trình học tập và thời gian hoànthành luận văn tốt nghiệp

Tôi cũng xin chân thành cảm ơn các thầy cô giáo khoa Công nghệ thôngtin, Trường đại học công nghệ, Đại học quốc gia hà nội, những người đã hếtmình, tận tụy truyền đạt kiến thức, đã quan tâm, động viên trong suốt quá trìnhtôi học tập và nghiên cứu tại Trường

Tôi xin gửi lời cảm ơn đến đơn vị Trường THPT Bình gia, Sở giáo dục vàđào tạo tỉnh Lạng Sơn đã tạo điều kiện cho tôi có được cơ hội học tập, nâng caotrình độ chuyên môn

Cuối cùng, lời cảm ơn chân thành của tôi xin gửi đến các bạn học cùnglớp K21 Công nghệ phần mềm đã thường xuyên quan tâm, giúp đỡ, chia sẻ kinhnghiệm, tài liệu hữu ích trong suốt quá trình học tập

Một lần nữa, tôi xin cảm ơn và gửi lời chúc sức khỏe, thành công đến tất

cả mọi người

Hà Nội, tháng 11 năm 2016

Tác giả luận văn

Nguyễn Minh Hải

Trang 5

LỜI CAM ĐOAN

Tôi xin cam đoan luận văn “Phát triển các kỹ thuật tìm bất biến(invariants) và biến (variants) cho việc sử dụng Hoare Logic để chứng minh tínhđúng đắn của chu trình” là do tôi thực hiện, được hoàn thành trên cơ sở tìmkiếm, thu thập, nghiên cứu, tổng hợp phần lý thuyết và các phương pháp kĩ thuậtđược trình bày trong các tài liệu được công bố trong nước và trên thế giới Cáctài liệu tham khảo đều được nêu ở phần cuối của luận văn Luận văn này khôngsao chép nguyên bản từ bất kì một nguồn tài liệu nào khác

Nếu có gì sai sót, tôi xin chịu mọi trách nhiệm

Hà Nội, tháng 11 năm 2016

Tác giả luận văn

Nguyễn Minh Hải

2

MỤC LỤC

Trang 6

LỜI CẢM ƠN

LỜI CAM ĐOAN

MỤC LỤC

DANH MỤC CÁC HÌNH VẼ

CHƯƠNG 1 MỞ ĐẦU

L Ý DO CHỌN ĐỀ TÀI

M ỤC ĐÍCH NGHIÊN CỨU

Đ ỐI TƯỢNG VÀ PHẠM VI NGHIÊN CỨU

K ẾT CẤU CỦA LUẬN VĂN

CHƯƠNG 2 TỔNG QUAN VỀ LOGIC HOARE

2.1 L OGIC VỊ TỪ .

2.2 N HỮNG HIỂU BIẾT VỀ L OGIC H OARE

2.2.1Lịch sử của logic Hoare:

2.2.2 Nội dung của logic Hoare

2.2.3 Các tiên đề của logic Hoare:

CHƯƠNG 3 CHỨNG MINH TÍNH ĐÚNG ĐẮN CỦA LỆNH CHU TRÌNH BẰNG LOGIC HOARE

3.1 P HƯƠNG PHÁP CHỨNG MINH

3.2 C ÁC VÍ DỤ ÁP DỤNG

CHƯƠNG 4 NGHIÊN CỨU VỀ BIẾN VÀ BẤT BIẾN TRONG PHƯƠNG PHÁP CHỨNG MINH TÍNH ĐÚNG ĐẮN CỦA LỆNH CHU TRÌNH

4.1 B IẾN .

4.1.1Khái niệm

4.1.2Phương pháp tìm biến

4.2 B ẤT BIẾN

4.2.1Bất biến vòng lặp

4.2.2Một cách nhìn mang tính xây dựng 4.2.3Ví dụ cơ bản

4.2.4Phân loại bất biến:

4.2.4.1 Phân loại theo luật

Trang 7

4.3.1 Tìm phần tử có giá trị lớn nhất trong một dãy các phần tử 32

4.3.1.1 Số lớn nhất với vòng lặp một biến 32

4.3.1.2 Số lớn nhất với vòng lặp hai biến 33

4.3.2 Tìm kiếm 35

4.3.2.1 Tìm kiếm trong một mảng chưa được sắp xếp 35

4.3.2.2 Tìm kiếm nhị phân 36

4.3.3 Sắp xếp 39

4.4 Ứ NG DỤNG KINH NGHIỆM ĐỂ TÌM BIẾN , BẤT BIẾN TRONG MỘT SỐ BÀI TOÁN 42 CHƯƠNG 5 KẾT LUẬN 61

5.1 K ẾT LUẬN 61

5.2 H ẠN CHẾ VÀ KIẾN NGHỊ 61

TÀI LIỆU THAM KHẢO 63

4

Trang 8

DANH MỤC CÁC HÌNH VẼ

Hình 2 1 Ảnh Tony Hoare và Robert Floyd ………12

Hình 4 1 Các vòng lặp như là một sự tính toán bằng cách xấp xỉ

Hình 4 2 Ước số chung lớn nhất của hai số nguyên dương a và b

Hình 4 3 Số lớn nhất với vòng lặp một biến

Hình 4 4 Số lớn nhất với vòng lặp hai biến .

Hình 4.5 Tìm kiếm trong một mảng chưa được sắp xếp .

Hình 4 6 Tìm kiếm nhị phân

Hình 4 7 Sắp xếp kiểu nổi bọt .

Trang 9

CHƯƠNG 1 MỞ ĐẦU

Lý do chọn đề tài

Trong suốt quá trình tôi được học tập, nghiên cứu tại trường Đại học Côngnghệ, Đại học Quốc Gia Hà Nội Bản thân đã được tiếp xúc với nhiều kiến thứcmới, quan trọng, được ứng dụng mạnh mẽ trong các lĩnh vực rộng lớn củaCNTT Là một giáo viên giảng dạy bộ môn tin học tại cấp THPT, tôi thườngxuyên tiếp xúc và hướng dẫn học sinh những kiến thức cơ bản về ngôn ngữ lậptrình trên cơ sở là ngôn ngữ Pascal Do đó, tôi đặc biệt có hứng thú với bộ mônkiểm thử Việc kiểm tra một chương trình xem nó có đúng, chạy tốt, phù hợp vớiyêu cầu của người lập trình hay không luôn là một vấn đề quan trọng, mang tínhthời đại đối với mọi lập trình viên cũng như các nhà quản lý phần mềm Cả dự

án có thể bị ảnh hưởng nếu gặp những lỗi nghiêm trọng trong việc viết mã.Trong những tính chất đảm bảo chương trình phù hợp với yêu cầu, có một tínhchất rất quan trọng đó là tính đúng đắn

Việc chứng mình một chương trình là đúng đắn có nhiều phương pháp,trong phần nghiên cứu của luận văn, tôi chọn nghiên cứu Hoare logic (logicHoare) Logic Hoare được Hoare xuất bản trong một bài báo năm 1969 Nó thực

sự đã được ra đời rất lâu, nhưng bản thân nó luôn mang tính thời đại vì việc ápdụng logic Hoare để kiểm tra tính đúng của chương trình vẫn đang được tiếnhành thường xuyên trên phạm vi rộng lớn Việc tìm hiểu về phương pháp chứngminh tính đúng logic Hoare đã gợi mở cho tôi một hướng nghiên cứu Trong đó,tôi đi xâu vào việc phân tích về Biến (Variants) và Bất biến (Invariants), hai yếu

tố quan trọng đầu tiên trong việc chứng minh tính đúng của lệnh chu trình Bảnchất của một vòng lặp luôn có sự ẩn chứa của một bất biến vòng lặp Hay nóicách khác, bạn không thể hiểu được vòng lặp nếu chưa biết về bất biến của nó

và biến (variants) cho việc sử dụng logic Hoare để chứng minh tính đúng đắncủa chu trình là mục đích nghiên cứu chủ yếu của luận văn

6

Trang 10

Việc hiểu, làm rõ các vấn đề liên quan đến tính đúng của chu trình, bảnchất của vòng lặp, tính kết thúc… sẽ là những cơ sở quan trọng cho công việcdạy học THPT của bản thân tôi và các bạn đồng nghiệp khác.

Đối tượng và phạm vi nghiên cứu

Đối tượng và phạm vi nghiên cứu của luận văn xoay quanh logic Hoare

Nó bao gồm những kiến thức cơ bản của luận lý đó là bộ ba Hoare, các tiên đểcủa luận lý Luận văn cũng nêu rõ những đặc điểm nổi bật và áp dụng vào việcchứng minh tính đúng đắn của chương trình mà cơ bản tập trung vào việc chứngminh tính đúng đắn của lệnh chu trình Thông qua các bài toán cơ bản, tôi thực

tế áp dụng lý thuyết của logic Hoare vào việc chứng minh này

Nghiên cứu tập chung vào tìm biến và bất biến Áp dụng trên các thuậttoán cơ bản trong chương trình tin học

Kết cấu của luận văn

Chương 4 Nghiên cứu về biến và bất biến trong phương pháp chứngminh tính đúng đắn của lệnh chu trình Ứng dụng vào tìm biến và bất biến trongmột số thuật toán cơ bản

Chương 5 Kết luận Chương tổng kết lại những vấn đề đạt được, chưa đạtđược và những kiến nghị đề xuất của luận văn

Trang 11

CHƯƠNG 2 TỔNG QUAN VỀ LOGIC HOARE

2.1 Logic vị từ

 Định nghĩa: Vị từ là một hàm nhận một giá trị kiểu boolean

Một vị từ thực sự là một giá trị logic được biểu hiện bằng tham số Nó cóthể đúng với một số đối số, và sai với một số đối số khác Chẳng hạn x> 0 là một

vị từ với một đối số, tôi có thể đặt tên đó là gt(x) Do vậy mà gt(5) tức là 5 > 0 là

đúng và gt(0) tức là 0 > 0 là sai

Cụ thể hơn tôi phân tích một phát biểu “x bằng 3” nhận thấy nó có hai bộ phận Bộ phận thứ nhất là biến x, là chủ ngữ của câu Bộ phận thứ hai “bằng 3” là

vị ngữ(vị từ) nó cho biết một tính chất mà chủ ngữ có thể có Tôi có thể ký hiệu câu

“x bằng 3” là P(x) , với P ký hiệu vị từ “bằng 3” và x là biến Một khi x được

gán một giá trị cụ thể, thì P(x) sẽ có giá trị chân lý Ví dụ: xác định giá trị chân

lý của P (3) , P(0) Tôi thay x= 3 vào câu “3 bằng 3” là đúng và x = 0 vào câu “0 bằng 3” cho kết quả là sai.

Các thành phần của logic vị từ wffs gồm các thành phần sau:

- Các định danh biến – một tập (thường là vô hạn) của các tên biến, ví dụ:

x, x1, x2…, y, y1, y2…

- Các định danh hằng – một tập (hữu hạn, vô hạn, hoặc rỗng) của các tên

hằng, thường là a, a1, a2…, b, b1, b2…

- Các định danh vị từ - một tập (không rỗng) của các tên vị từ, thường là

p, p1, p2, …, q, q1, q2…

- Các định danh hàm – một tập các tên hàm, thường là f, f1 ,f2, … g, g1, g2

 Các toán hạng của logic vị từ được định nghĩa một cách đệ quy như sau:

- Các tên biến và các tên hằng là toán hạng, và

- Nếu t1 , , tk là các toán hạng và f là một tên hàm có số các đối số cố định

là k, thì f (t1 , , tk ) là một toán hạng

Một toán hạng không chứa các biến được gọi là một toán hạng cơ sở

 Định nghĩa công thức nguyên tử của logic vị từ:

8

Trang 12

Nếu k là các toán hạng và vị từ pcó số của các đối sốcố định là k, thì

là công thức nguyên tử của logic vị từ

Các phép toán thêm vào trong logic vị từ là lượng hóa phổ biến ∀x đọc là

với mọi x, và lượng hóa tồn tại, x đọc là tồn tại x Trong sơ đồ ưu tiên để tránh

các dấu ngoặc trong các công thức, ∀∃ có độ ưu tiên thấp nhất trong các liên kết

Ví dụ:

Với lượng từ “với mọi x ( x ) ” Diễn đạt câu: “Tất cả học sinh đều

mang máy tính đến trường” Giải: Cho P(x) là ký hiệu của câu “mang máy tính đến trường ” Khi đó câu “Tất cả học sinh đều mangmáy tính đến trường” được viết là ∀x.P (x), ở đây không gian gồmtất cả học sinh

Với lượng từ “Tồn tại x( x )” Diễn đạt câu: “Có ít nhất một học sinh

mang máy tính đến trường” Giải: Cho P(x) là ký hiệu của câu “mang máy tính đến trường ” Khi đó câu “Có ít nhất một học sinhmang máy tính đến trường” được viết là ∃x.P(x) , ở đây không gian

là ít nhất một học sinh

 Một công thức đúng ngữ pháp của logic vị từ được định nghĩa đệ quy như sau:

o Mỗi công thức nguyên tử là một công thức đúng ngữ pháp wff, và o

Nếu α và β là wffs và x là một tên biến, thì mỗi công thức sau đây

p (t1 , , tk)

t1 , , t

Trang 13

cách sử dụng các quan hệ logic mệnh đề Một công thức ( ∀x.α ) thì tương đương

với sự kết hợp của các công thức đúng ngữ pháp đạt được bằng sự thay thế x bởi

mỗi phần tử của các phần tử trong không gian (ví dụ ∀x.p(x, y)

p(c1 , y) ∧ p(c 2 , y) ∧ ∧ p(c k , y) ) Tương tự như vậy đối với công thức ( ∃x.α )

tương đương với sự tách rời của các công thức wffs đạt được bởi thay thế x bởi

mỗi phần tử của các phần tử trong không gian (ví dụ ∃x.p(x, y) p(c1 , y) ∨ p(c 2 ,y) ∨ ∨ p(c k , y) )

Các phép toán lượng hóa này yêu cầu phân biệt cách sử dụng của cácbiến Chẳng hạn, p (x)có một tham biến x và nó có thể đúng với một số giá trị

và cũng có thể sai với một số giá trị khác Tuy nhiên, công thức ∀x p (x) thực

sự không có tham biến và thể hiện một giá trị duy nhất – giá trị x được gọi làbiên trong trường hợp trước và tự do trong trường hợp sau Nó minh họa hai vaitrò khác nhau đối với các biến trong biểu thức đúng khuôn dạng logic mệnh đề

do đó phải phân biệt cẩn thận

Các xuất hiện bị chặn của các biến trong ∀x.α là các xuất hiện bị chặn củacác biến trong α , cộng thêm các xuất hiện của x trong α α được gọi là phạm

vi của lượng hóa Tất cả các xuất hiện của biến mà không bị chặn là các biến tự

do Tương tự định nghĩa áp dụng cho ∃x.α Một công thức đúng ngữ pháp wff

được gọi là đóng nếu nó không có các xuất hiện của biến tự do

 Một thể hiện i gồm:

o Một tập D không rỗng – miền(Hoặc không gian của giá trị)

o Một phép gán µ

Mỗi tên vị từ n đối số thành một quan hệ n vị trí trong D

Mỗi tên hàm n đối số thành một hàm n vị trí trong D

 Mỗi định danh hằng thành một phần tử của DTôi viết i =(D, µ)

Một thể hiện là một toán hạng thể hiện nếu D là tất cả các toán hạng, vàcác phép gán đối với mỗi tên hàm là toán hạng khởi tạo tương ứng,

( f )(t1 , , t k ) = f (t1 , ,t k ).

• Một thể hiện được cho i = (D, µ), một biến gán (hoặc trạng thái) δ là hàmcho tập các biến V , σ :VD Phép gán được mở rộng một cách đệ quy đểmang một giá trị cho tất cả các toán hạng và các công thức:

10

Trang 14

o Đối với các toán hạng:

Với biến x, valσ(x)=σ(x), và đối với hằng c, valσ(c)=µ(c)

valσ( f (t1 , t k ) )= µ( f ) (σ ( t1 ), ,σ (t k ) )

o Đối với các công thức:

 Đối với một công thức nguyên tử

valσ( p (t1 , t k) )= µ( p ) (σ( t1 ), , σ(t k) )

 Đối với các công thức phức hợp: valσ (¬α) = ¬valσ(α)

valσ(α ∧ β)= valσ(α)∧ valσ(β)

valσ(α ∨ β)= valσ(α)∨ valσ(β)

valσ(α ⇒ β)= valσ(α)⇒ valσ(β)

valσ(α ⇔ β)= valσ(α)⇔ valσ(β)

valσ'(α) =true đối với mỗi σ'trong

đóbằng false nếu ngược lại.

valσ'(α) =true đối với mỗiσ'trong đó

bằng false nếu ngược lại.

Một công thức đúng ngữ pháp wff là đúng logic (công thức hằng đúng)

nếu nó đúng trên mọi thể hiện, có thể thỏa mãn nếu tồn tại một thể hiện và trạngthái thỏa mãn nó, và ngược lại nếu nó là không thể thỏa mãn

 Một công thức đúng ngữ pháp wff là hệ quả logic của một tập các côngthức đúng ngữ pháp Γ , Γ | = α nếu mội thể hiện và trạng thái thỏa mãn mỗi β ∈Γ ,

 và β là tương đương logic, α≡ β nếu với mọi thể hiện và trạng thái σ ,

valσ(α) = valσ(β)

2.2 Những hiểu biết về Logic Hoare

2.2.1 Lịch sử của logic Hoare:

Logic Hoare (còn được biết đến với cái tên logic Floyd-Hoare) là một hệ

Trang 15

trình máy tính bằng tính chính xác của luận lý toán học Nó được xuất bản trongbài báo của Hoare vào năm 1969, ở đó Hoare đã sử dụng lại những đóng góptrước đó của Robert Floyd, người đã xuất bản một hệ thống nghiên cứu tương tựđối với sơ đồ luồng(flowchart).

Hình 2 2 Ảnh Tony Hoare và Robert Floyd

2.2.2 Nội dung của logic Hoare

Đặc điểm trung tâm của logic Hoare là bộ ba Hoare (Hoare Triples) Bộ

ba này mô tả sự thực thi một đoạn mã có thể thay đổi trạng thái tính toán như thếnào Một bộ ba hoare có dạng {P}c {Q} Trong đó P là điều kiện tiên quyết, Q

là các hậu điều kiện, c là các lệnh chương trình Ở đây P và Q là những công

thức có dạng logic vị từ, chúng đưa ra những khảng định là đúng hoặc sai Ýnghĩa của một bộ ba Hoare {P}c {Q} có thể được giải thích như sau: Nếu tôi

bắt đầu một trạng thái trong đó P đúng và thực hiện c thì c sẽ chấm dứt trong một trạng thái trong đó Q là đúng, chương trình cho kết quả đúng Chú ý rằng trường hợp nếu c không dừng thì sẽ không có khái niệm Q, tức là Q có thể là bất

cứ thứ gì Như vậy, tôi thường chọn Q là false để diễn tả rằng c không dừng.

2.2.3 Các tiên đề của logic Hoare:

Logic hoare có những tiên đề và luật suy diễn nhằm chứng minh tínhđúng đắn của chương trình Logic Hoare chuẩn chỉ chứng minh tính đúng đắn bộphận, trong khi điều kiện dừng phải được chứng minh độc lập hoặc dùng phiênbản mở rộng của quy luật While để chứng minh tính đúng đắn toàn phần

Luật tiên đề rỗng

12

Trang 16

{P}skip{P}với P là một công thức logic mệnh đềbất kỳ Trong khi

skip không làm gì, tôi thấy cái gì đúng sau khi nó thực hiện cũng như là cái

đã đúng trước đó

Luật về phép gán

Tôi giả thiết rằng x := E biểu thị một lệnh gán, trong đó x là một biến và E

là một biểu thức thích hợp, P là một công thức logic vị từ Khi đó, luật về phépgán được phát biểu như sau {P[x/E] } x:=E {P}

{P [x / E] }chỉ ra rằng biểu thứcPtrong đó tất cả các lần xuất hiện tự do của

biến x đã được thay bằng biểu thức E Ý nghĩa là giá trị đúng hay sai của {P [x /

E] } tương đương với giá trị đúng hay sai của {P} sau khi gán Cụ thể hơn, nếu{P [x / E] } là true trước phép gán, nhờ tiên đề gán {P} sẽ là true sau phép gán.Ngược lại, nếu {P [x/E ] } là false trước phép gán, nhờ tiên đề gán {P} sẽ là false

sau phép gán

Xét ví dụ: {y+1=33} x:=y+1{x=33}, tôi thấy {y+1=33} là đúng, qua

phép gán x:=y+1 dễ dàng nhận thấy x có giá trị là 33 Vậy bộ ba Hoare ở trên là

đúng

Các quy tắc bổ trợ :

Độ mạnh của các công thức đúng ngữ pháp:

Nếu P và Q là hai công thức đúng ngữ pháp, mà P ⇒ P' thì khi đó tôi nói

P là công thức mạnh hơn P’ và P’ thì yếu hơn P Một điều kiện mạnh hơn là mộtđiều kiện mà có ít các giá trị thỏa mãn nó hơn điều kiện kia

Độ mạnh của điều kiện trước:

Đó là quy tắc đầu tiên của các quy tắc suy luận trong hệ chứng minhchương trình Ý kiến một cách trực quan là nếu một xác nhận chương trình cóthể được chứng minh, thì điều kiện trước có thể được thay thế bởi bất kỳ côngthức nào kéo theo nó

{P '}c '{Q}, P ⇒ P'{P}c '{Q}

c là một đoạn chương trình bất kỳ

Trang 17

được chứng minh, thì điều kiện sau có thể được thay thể bởi bất kỳ công thức nào nó kéo theo.

{P}c {Q}, Q ⇒ Q '{P}c {Q '}

c là một đoạn chương trình bất kỳ

Luật ghép:

Luật này của logic Hoare được áp dụng cho những chương trình được thực thi tuần tự Giả thiết có chương trình S và T, trong đó chương trình S được thực

thi trước T tôi viết là S ;T

Luật điều kiện :

chứng minh tính dừng bằng cách chứng minh giá trị của một số hạng (t) giảm dần sau mỗi lần lặp t được gọi là biến, chú ý rằng t phải thuộc tập chắc chắn, để

cho mỗi lần lặp có thể giảm đi một giá trị hữu hạn nào đó

Trong phần đề tài này, tôi sẽ chỉ tập trung vào việc chứng minh tính đứngđắn toàn phần của lệnh chu trình bằng logic Hoare Trên cơ sở lập trình, bản chấtcủa mỗi chương trình gồm nhiều yếu tố, trong đó lệnh chu trình luôn là vấn đềcăn bản hay còn gọi là lõi của chương trình Người lập trình và người kiểm thửtính đúng đắn của chương trình luôn phải giành nhiều thời gian tập trung vào nó

Việc sử dụng luật While dành cho tính đúng đắn toàn phần của lệnh chu trình sẽ

được tìm hiểu sâu và áp dụng trong các chương sau

Trang 18

14

Trang 19

CHƯƠNG 3 CHỨNG MINH TÍNH ĐÚNG ĐẮN CỦA LỆNH

CHU TRÌNH BẰNG LOGIC HOARE3.1 Phương pháp chứng minh

Như tôi đã biết mục tiêu của logic Hoare là để cung cấp một hệ thống chínhthức cho lý luận về tính đúng đắn của chương trình bằng lý thuyết logic toán học.Logic Hoare được dựa trên ý tưởng được đặc tả như một hợp đồng giữa việc thựchiện một chức năng và các đặc điểm kỹ thuật của nó Các đặc điểm kỹ thuật đượctạo thành từ một điều kiện tiên quyết và hậu điều kiện Các điều kiện tiên quyết códạng một vị từ logic mô tả trạng thái chức năng dựa trên những hoạt động chínhxác, khách hàng phải đáp ứng điều kiện này Các hậu điều kiện là một vị từ mô tảtình trạng chức năng thiết lập một cách chính xác sau khi chạy, khách hàng có thểdựa vào tình trạng này là đúng sau khi cuộc gọi đến chức năng

Việc thực hiện một chức năng đúng một phần đối với đặc điểm kỹ thuậtcủa nó nếu, với giả định các điều kiện tiên quyết là đúng trước khi chức năngthực hiện và sau đó nếu chức năng chấm dứt, các hậu điều kiện là đúng Việcthực hiện là đúng đắn toàn phần nếu, một lần nữa giả định các điều kiện tiênquyết là đúng trước khi chức năng thực hiện, chức năng được đảm bảo để chấmdứt, và khi đó các hậu điều kiện là đúng Như vậy đúng đắn toàn phần là đúngđắn bộ phận phần cộng điều kiện kết thúc của chức năng

Giờ tôi hãy xem xét bộ ba Hoare {x=10}x:=x−3{x>0} Rõ ràng bộ ba

Hoare này là đúng, bởi vì nếu x =10 và sau khi tôi thực hiện x := 10 − 3, tôi đượckết quả x = 7 Điều này rõ ràng có hàm ý hậu điều kiện là đúng x> 0 Tuy nhiên,mặc dù là đúng, bộ ba Hoare này vẫn chưa phải là một kết quả chính xác như tôimong muốn Bởi vì tôi có thể viết ra một vài hậu điều kiện mạnh hơn mà vẫn

thỏa mãn x > 0 Ví dụ: x > 0 ∧ x <10 là mạnh hơn bởi vì nó là thông tin mới hơn

và nó ghim xuống giá trị của x chính xác hơn so với x > 0 Hậu điều kiện mạnhnhất đương nhiên là x= 7 , đây là hậu điều kiện điều hữu ích nhất Về hình thức,nếu với bộ ba Hoare {P} c {Q} và cho tất cả các Q mà {P} c {Q}, Q ⇒ Q, khi

đó Q là hậu điều kiện mạnh nhất của c đối với P Tôi cũng có thể suy luận theo

hướng ngược lại Nếu với bộ ba Hoare {P} c {Q} và cho tất cả P mà {P} c {Q},

P'⇒P , khi đó P là điều kiện tiên quyết yếu nhất wp(c, Q) của c đối với Q.

Tôi có thể định nghĩa một hàm năng suất điều kiện tiên quyết yếu nhất đốivới một số hậu điều kiện cho các bài toán, trình tự được phát biểu như sau:

wp (x: = E, P) = [E / x] P

15

Trang 20

wp (S, T, Q) = wp (S, wp (T, Q))

wp (if B then S else T, Q) = B ⇒ wp (S, Q) && ¬B ⇒ wp (T, Q)

Để xác minh tính chính xác một phần của các vòng lặp có dạng hình thức

while b do c, tôi cần một bất biến I sao cho các điều kiện sau đây được thỏa mãn:

P I : Các bất biếnbước đầu là đúng

 {I b} c {I}: Mỗi lần thực hiện vòng lặp luôn bảo tồn bất biến, tức là sau

mỗi lần thực hiện thân vòng lặp thể hiện bất biến luôn được giữ nguyên

 (I ∧ ¬b )⇒ Q : Các bất biến và điều kiện thoát vòng lặp bao hàm hậu điều

kiện

Tôi có thể xác minh đầy đủ tính đúng đắn của vòng lặp bằng cách đưa ra

một biến chức năng có giá trị nguyên t, đáp ứng các điều kiện sau đây:

I b t > 0 : Nếu tôi đi vào thân vòng lặp (nghĩa là điều kiện lặp b được

đánh giá đúng) và bất biến được bảo tồn, sau đó t phải được khảng định

đúng Tôi thấy t > 0 nghĩa là biến chức năng có giá trị dương, điều đó cầnđược đảm bảo để có thể bắt đầu thân vòng lăp

 {I ∧ b ∧ t = N }c {t < N}: Giá trị của biến chức năng sẽ giảm sau mỗi lần

thực hiện thân vòng lặp (ở đây N là một hằng số) Tất nhiên, tôi có thể dễ

dàng hình dung ra việc biến chức năng t sẽ giảm liên tục giá trị từ N sau

mỗi lần lặp Và khi t = 0 ( Thường là vậy ), điều đó đồng nghĩa với việcvòng lặp sẽ phải dừng lại hoặc dừng trong điều kiện đặc biệt như có vấn

đề bất ổn về ngoại cảnh tác động (mất điện, mất kết nối…) Tính dừngtrong hoạt động của vòng lặp thực sự là điều vô cùng quan trọng

Từ những phân tích ở trên, tôi có thể tổng hợp lại nhằm thỏa mãn công việcchứng minh tính đúng đắn đầy đủ của lệnh chu trình dựng trên những luận cứ của

Hoare Thực vậy, điều đó được thể hiện như sau:

P I b t > 0

{I b t = N }c {I t < N}

I ∧ ¬b )⇒ Q

{P}while b do c {Q}

Trang 21

Vậy là tôi đã có được những luận cứ cơ bản để chứng minh được tính đúng

đắn đầy đủ của các lệnh chu trình có dạng thức while b do c Để chứngminh được, tôi cần dùng các lý luận của logic vị từ lần lượt chỉ ra tất cả nhữngkhảng định trên là đúng

3.2 Các ví dụ áp dụng

Trên thực tế, với hàng tỉ bài toán khác nhau, có những đặc điểm vô tận

trong việc dùng vòng lặp có dạng thức while b do c để thể hiện Để rèn luyện và

làm rõ cách thức chứng minh tính đúng đắn dựa trên lý thuyết của Hoare, tôi sẽlần lượt làm các ví dụ Trong phần này, tôi sẽ thực hiện hai ví dụ sau đây:

Ví dụ 1 Tính tổng từ 1 n

i = 1 s = 0

{

Giải:

Để chứng minh tính đúng của lệnh lặp tôi cần xác định một bất biến vòng lặp

I từ dữ liệu của đoạn lệnh Ở bài này, bất biến lặp sẽ được tìm bằng cách thay

Tiếp theo, để chứng minh đúng đắn toàn phần tôi cần chọn một biến chức

năng (t) để đảm bảo cho thấy vòng lặp đó sẽ kết thúc Tôi nhận thấy chỉ số của vòng lặp sẽ tăng lên 1 sau mỗi lần lặp ( i := i +1) Giá trị đó sẽ tiến dần tới n Khi

đó, tôi chọn t := n i trong phán đoán đầu tiên để làm biến chức năng Bởi vì từ đầu

tôi phân tích 1 ≤ i n +1 giá trị của i sẽ chạy đến n, để có t>0 và t=0 vòng lặp

1 ≤ i n + 1 ,

Trang 22

17

Trang 23

sẽ dừng tôi thêm 1 vào hiệu n-i Cuối cùng tôi chọn được một biến chức năng là

Đúng với logic toán học

Vì theo điều kiện ban đầu phân tích 1 ≤ i n +1 tôi đươngnhiên có 1 ≤ n +1.

theo giả thiết

Cộng thêm 1 vào hai vế

Chuyển i qua vế phảitrừ 1 ở cả 2 vế

logic toán học

Trang 24

18

Trang 25

Tiếp theo là việc chứng minh sau mỗi lần lặp bất biến vòng lặp không đổi

và sau đó tôi còn phải khảng định tính dừng bằng cách chứng minh giá trị của

biến t giảm dần sau mỗi lần lặp Điều đó được thực hiện khi tôi chứng minh vấn

Ở đây tôi chia ra làm 2 vấn đề: Đầu tiên là chứng minh sau khi thực hiện

vòng lặp bất biến I không đổi Vấn đề thứ hai là chứng minh giá trị của t giảm

Trang 26

Cuối cùng, tôi cần phải chứng minh hậu điều kiện được giữ khi tôi thoát khỏi vòng lặp Việc này được tiến hành bằng việc chứng minh logic sau:

với bài toán Tôi nhận thấy biến chỉ số i của

Trang 27

điều kiện đầu tiên cóđược đó là 0 ≤ i ≤ m ∧ n

> 0

Công việc tiếp theoluôn là xác định một bấtbiến vòng lặp chuẩn xác

Nó thực sự là vấn đề quantrọng trong việc có nhữngtiền đề để chứng minhtính đúng đắn của lệnhchu trình Bất biến vònglặp I, cũng như trong bàitoán 1 ở trên, tôi thay đổihậu điều kiện {r = n m}

để cho nó phụ thuộc vàochỉ số vòng lặp thay vì

một số biến khác nào đó

Tôi thử thay thế m = i do

đó r = n i là lựa chọn đầutiên cho bất biến vònglặp Tuy nhiên r=n i chưaphải là một bất biến vònglặp đầy

20

Trang 28

đủ Bởi vì: đầu tiên nó luôn phải đi liền với các điều kiện thoát khỏi vòng lặp để

có được hậu điều kiện Ở đây điều kiện thoát vòng lặp là i m Tôi cần chú ý rằng thực ra khi đó i chỉ có giá trị đến m Sau đó, để chứng minh các cơ chế lặp

đúng tôi cần thêm các điều kiện 0 ≤ i m ∧ n > 0 vào bất biến vòng lặp Cuốicùng, việc lựa chọn một bất biến vòng lặp đầy đủ sẽ là :

I ⇔ 0 ≤ i m n > 0 ∧ r = ni

Công việc xác định biến chức năng (t) để đảm bảo chứng minh vòng lặp

được thực hiện và nó có tính dừng Trong bài toán này, tôi có thể đơn giản nhận

ra giá trị mi sẽ được lựa chọn làm biến Giá trị của t = m i sẽ thay đổi liên tục khi i tăng lên Cuối cùng nó giảm về bằng 0 khi i = m Điều đó cũng đồng nghĩa với việc lệnh lặp sẽ dừng và thoát Trường hợp i = m vòng lặp vẫn tiến hành phần thân, đảm bảo trường hợp ban đầu t>0.

Sau khi tôi đã có đủ hai thành phần quan trọng là bất biến vòng lặp I và biến

chức năng i, nhiệm vụ tiếp theo tôi sẽ phải chứng minh lần lượt các điều kiện sau

đây là đúng để khảng định tính đúng đắn của lệnh chu trình theo logic Hoare:

thi Để thực hiện việc này, tôi lần lượt truyền r := 1; i :=0; vào bất biến vòng lặp

I Tôi có: m ≥ 0 ∧n> 0 ⇒ 0 ≤ 0 ≤mn> 0 ∧ 1 =n0 với m ≥ 0 ∧ n > 0 là nhữngđiều kiện giả thiết ban đầu Khi đó, tôi sẽ chứng minh điều này là đúng bằngnhững logic sau:

0 ≤ 0

0 ≤ m

n > 0

Đúng theo logic bất đẳng thứcĐúng theo giả thiết

Đúng theo giả thiết

n >

Trang 29

Chứng minh biến chức năng t ban đầu là dương, bởi sau khi thực hiện vòng lặp nó sẽ giảm dần và khi bằng 0 vòng lặp phải được dừng và thoát.

0 ≤ i m n > 0 ∧ r = n i i < m m i > 0 Tôi sẽ chứng minh như sau:

m i > 0 Trừ i ở cả hai vế của bất đẳng thức

Công việc tiếp theo là chứng minh sau mỗi lần thực hiện vòng lặp bất biến

vòng lặp I không đổi, nhưng biến chức năng t sẽ phải giảm để đảm bảo tính dừng

của vòng lặp Điều này đồng nghĩa với việc tôi chỉ rõ điều kiện sau đây là đúng

i + 1 < m + 1 Cộng thêm 1 vào hai vế của bất phương

Nhân cả hai vế với n và theo định nghĩa

Công việc tiếp theo là chứng minh biến chức năng t giảm sau khi thực

hiện lệnh lặp Nó được thực hiện bằng việc tôi chỉ ra các logic sau là đúng:

Trang 30

22

Trang 31

0 ≤ i m n > 0 ∧ r = n i i < m m i = N m − (i + 1) < N Thật đơn giảntôi chứng minh như sau:

m − i = N Theo giả thiết

m i 1 = N − 1 Trừ cả hai vế đi 1

m

(i

+ 1) < N Bởi vì N− 1 <N

Cuối cùng bằng việc chứng minh logic

0 ≤ i m n > 0 ∧ r = n i i m r = n m Tôi sẽ khảng định được hậuđiều kiện sẽ giữ khi thoát khỏi vòng lặp Tôi chứng minh bằng những luận cứnhư sau:

bộ ba Hoare là đúng Do đó lệnh chu trình là đúng đắn

{r := 1; i := 0} while i< m do (r :=r* n;i := i+1;) {r =n m}

Từ hai bài toán trên, có lẽ phần nào tôi cũng đã nắm được cơ bản việc chứngminh tính đúng đắn của lệnh chu trình bằng phương pháp logic Hoare Vậy đểchứng minh tính đúng đắn toàn phần, tôi cần thực hiện các công việc: Đầu tiên là

phải xác định một biến bất biến (I) và biến chức năng (t), sau đó lần lượt chứng

minh thỏa mãn các điều kiện ,{Ibt=N}c {It<N},

I ∧ ¬b )⇒ Q bằng các suy dẫn logic căn cứ áp dụng các luật của logic Hoare

Có thể thấy, tôi trình bày khá dài và cặn kẽ từng bước được liệt kê chỉ

nhắm tới một mục đích là làm rõ từng ý nghĩa những mệnh đề trong luật while

cho chứng minh tính đúng đắn toàn phần

P I b t > 0

Trang 32

23

Trang 33

CHƯƠNG 4 NGHIÊN CỨU VỀ BIẾN VÀ BẤT BIẾN TRONG PHƯƠNG PHÁP CHỨNG MINH TÍNH ĐÚNG ĐẮN CỦA LỆNH

CHU TRÌNH

Qua chương 3, chúng đã đã làm một vài bài toán với mục đích thực hànhviệc chứng minh tính đúng đắn đầy đủ của lệnh chu trình bằng phương pháp củalogic Hoare Trong việc chứng minh, tôi nhận thấy muốn tìm ra một bất biến vàbiến đảm bảo đúng, đủ không phải là công việc dễ dàng Thực tế, vấn đề này vẫnluôn đem lại một thách thức không hề nhỏ Trong chương này, tôi sẽ cố gắngnghiên cứu các vấn đề liên quan đến bất biến và biến nhằm đem lại một cái nhìnđầy đủ về chúng đồng thời mong muốn tìm ra các phương pháp cụ thể xác địnhbiến và bất biến trong vòng lặp

4.1 Biến

4.1.1 Khái niệm

Khái niệm biến chức năng (t) được phát biểu là một đại lượng có giá trị

thay đổi trong mỗi lần thực hiện phần thân vòng lặp Nó dùng để chứng minhtính dừng của vòng lặp

Trong chương 3, tôi đã biết biến t được sử dụng nhằm mục đích chứng minh tính dừng của vòng lặp Vậy nếu không xác định được biến chức năng t tôi

sẽ không thể chứng minh được một vòng lặp có đúng đắn toàn phần hay không

Biến t sẽ thay đổi giá trị khi mỗi lần thực hiện phân thân vòng lặp Tôi phải đảm bảo ban đầu (trước khi thực hiện phần thân) t phải có giá trị dương.

4.1.2 Phương pháp tìm biến

Phương pháp đoán biến chức năng thường được sử dụng:

Lặp với một chỉ số, ở đây i được sử dụng là biến chỉ số của vòng lặp

- N ± i là biến chức năng được chọn dễ dàng.

- Áp dụng nếu bạn luôn luôn thêm hoặc luôn luôn trừ một hằng số, và nếubạn thoát khỏi vòng lặp khi chỉ số đạt đến một số hằng số nào đó

- Sử dụng N - i nếu bạn đang tăng i, N + i nếu bạn được giảm giá trị của i

- Thiết lập N với N ± i ≤ 0 ở lối ra vòng lặp, thường là bằng 0.

Ví dụ: Tôi xét vòng lặp sau đây

While (j < N) do

s := s + a[j];

24

Trang 34

j := j + 1;

End

Với biến được xác định là t = N - j Tôi có thể phân tích như sau: Khi j=N hiệu N-j sẽ nhận giá trị là 0, đồng nghĩa với việc vòng lặp kết thúc Trong việc chứng minh tôi phải đảm bảo trường hợp biến (t, xem phần 3.1 và 3.2) ban đầu

là dương nhằm thỏa mãn phần thân vòng lặp có thể được thực hiện

 Đối với các vòng lặp khác hãy tìm một biểu thức đó là một ràng buộc trên

cơ bản về vòng lặp, hiển thị những gì nó đang cố gắng để đạt được và làm thếnào để đạt được nó Do vậy tôi có thể nói là: tôi không thể hiểu được một vònglặp mà không biết bất biến của nó

Các bất biến vòng lặp của các phương pháp tiếp cận theo các tiên đề củaFloyd (1967) và Hoare (1969) Đối với phương pháp này, khái niệm một bấtbiến vòng lặp có thể phát biểu là một biểu thức logic không đổi trong suốt quátrình vận hành của thân vòng lặp, đặc biệt hơn là "bất biến quy nạp", trong đóđịnh nghĩa chính xác xuất hiện bên cạnh Việc xác minh chương trình cũng sửdụng các loại bất biến, đặc biệt là bất biến của lớp (Hoare 1972; Meyer 1997)

Các khái niệm về bất biến vòng lặp được thể hiện dễ dàng trong cú phápvòng lặp sau đây:

Trang 35

Mệnh đề biến chức năng (variant) giúp thiết lập chấm dứt vòng lặp Khởi

tạo (Init) và thân vòng lặp (Body) là một danh sách các lệnh được thực hiện theo

trình tự, một trong hai hoặc cả hai có thể là rỗng, mặc dù thực tế phần thân bình

thường sẽ không rỗng Exit (Điều kiện thoát) và Inv (bất biến) là biểu thức dạng logic vị từ trả ra kết quả là True hoặc False.

Ngữ nghĩa của các vòng lặp là:

(1) Thực thi Init.

(2) Sau đó, nếu Exit có giá trị True, không làm gì cả; nếu nó có giá trị False, thực hiện Body, và lặp lại bước 2.

Một cách khác để nêu đặc điểm kỹ thuật không chính thức này là việc

thực hiện phần thân của vòng lặp bao gồm việc thực hiện các Init tiếp theo là rỗng hay những thân vòng lặp khác, dừng lại ngay khi Exit mang giá trị True.

Có rất nhiều biến thể của cấu trúc vòng lặp trong ngôn ngữ lập trình: dạng

"while" sử dụng một điều kiện để tiếp tục chứ không phải là điều kiện thoát sau khi thực hiện thân vòng lặp; dạng "do-until" luôn thực hiện thân vòng lặp ít nhất

một lần, việc kiểm tra được thực hiện cho các điều kiện cuối hơn là kiểm tra khi

vào đầu vòng lặp; dạng "for" hoặc "do" lặp trên một khoảng không gian số

nguyên hoặc một cấu trúc dữ liệu Tất cả chúng đều có thể được bắt nguồn từmột hình thức cơ bản ở trên

Các Inv (bất biến vòng lặp) không có vai trò trực tiếp trong ngữ nghĩa của

ngôn ngữ lập trình, nhưng phục vụ cho ý nghĩa về vòng lặp và tính đúng đắn của

26

Trang 36

nó Inv là một bất biến chính xác cho các vòng lặp, nếu có đủ các điều kiện

sau đây:

(1) Mỗi thực hiện Init, bắt đầu ở trạng thái trước khi thực hiện vòng

lặp, sẽ mang lại một trạng thái mà Inv nắm giữ.

(2) Mỗi thực hiện Body, bắt đầu ở bất kỳ trạng thái nào mà Inv nắm giữ và Exit không nắm giữ (Có giá trị false), sẽ mang lại một trạng thái mà Inv nắm giữ

một lần nữa

Nếu các thuộc tính là nắm giữ (là true), sau đó bất kỳ việc thực hiện chấm dứt của vòng lặp sẽ mang lại một trạng thái trong đó cả Inv và Exit đều nắm giữ.

Kết quả này là một hệ quả của ngữ nghĩa vòng lặp, trong đó xác định việc thực

hiện vòng lặp như việc thực hiện các Init tiếp theo rỗng hoặc nhiều sự thực thi của body, từng thực hiện trong một trạng thái mà Exit không giữ.

4.2.2 Một cách nhìn mang tính xây dựng

Tôi có thể nhìn vào các khái niệm về bất biến vòng lặp từ quan điểmmang tính xây dựng của một lập trình viên chỉ đạo chương trình của mình để đạtđược một trạng thái thỏa mãn một mong muốn nhất định của các hậu điều kiện.Theo quan điểm này, xây dựng chương trình là một hình thức giải quyết vấn đề,

và các cấu trúc điều khiển khác nhau là giải quyết vấn đề kỹ thuật [Dijkstra1976; Meyer 1980; Gries 1981; Morgan 1994]; Một vòng lặp giải quyết một vấn

đề thông qua xấp xỉ kế tiếp (successive approximation)

Hình 4 1 Các vòng lặp như là một sự tính toán bằng cách xấp xỉ

Trang 37

- Khái quát hóa các hậu (các đặc tính của các giải pháp có thể) vào mộtđiều kiện rộng hơn, được thể hiện: bất biến.

- Kết quả là, các hậu điều kiện có thể được định nghĩa như là sự kết hợp ( phần giao cắt trong hình 4.1) của bất biến và điều kiện khác: điều kiện thoát

- Tìm một cách để đạt được bất biến từ trạng thái trước đó của tính

toán: việc khởi tạo

- Tìm một cách, cho một trạng thái đáp ứng các bất biến, để có được một trạng thái khác, vẫn đáp ứng bất biến nhưng gần gũi hơn, theo một nghĩa nào thích hợp, với điều kiện thoát: Thân vòng lặp

Tầm quan trọng của việc trình bày ở trên trong quá trình vòng lặp là nó làmnổi bật bản chất của bất biến: Nó là một dạng tổng quát của hậu điều kiện mongmuốn, mà trong một trường hợp đặc biệt (đại diện bởi các điều kiện thoát vòng lặp)

sẽ cho tôi hậu điều kiện đó Quan điểm này của bất biến, như là một cách đặc biệttrong khái quát các mục tiêu mong muốn của việc tính toán vòng lặp, giải thích lý

do tại sao bất biến vòng lặp là một tài sản quan trọng như vậy của các vòng lặp; ai

có thể tranh luận rằng sự hiểu biết một vòng lặp có nghĩa là sự hiểu biết bất biếncủa nó (mặc dù các quan sát rõ ràng rằng nhiều người lập trình viết các vòng lặp màgần như chưa bao giờ chính thức học qua khái niệm bất biến, mặc dù tôi có thểkhẳng định rằng nếu họ hiểu những gì họ đang làm họ đang dựa vào một số hiểubiết trực giác về bất biến, như ông Jourdain Moli`ere đã nói)

4.2.3 Ví dụ cơ bản

Để minh họa cho ý tưởng trên, tôi áp dụng trong thuật toán tìm ước chunglớn nhất của 2 số nguyên dương a và b Thuật toán như sau:

while a khác b do

nếu a>b thì a:=a-b ngược lại b:=b-a;

Uoc chung lon nhat la: a;

Khi đó, Hậu điều kiện của bài toán là: Result = UC(a, b)

Trong trường hợp các số nguyên dương a và b là các đầu vào và UC làhàm toán học tính ước số chung lớn nhất Tôi có thể viết tổng quát như sau:

Result = x UC(Result, x) = UC(a,b) Với mỗi biến x mới, bằng các tính chất toán học, với mọi x, tôi có

UC(x,x) = x

28

Trang 38

Do vậy, tôi có được các thành phần của bất biến là:

Result >0 và x > 0

UC (Result, x) = UC (a, b)

Những liên kết thứ hai, một sự tổng quát của hậu điều kiện, sẽ được sửdụng như là bất biến; các liên kết đầu tiên sẽ sử dụng như là điều kiện thoátvòng lặp Để có được thân vòng lặp, áp dụng đặc tính phương pháp toán học tìmước chung lớn nhất, tôi có:

với mọi x > y thì UC (x, y) = UC (x-y, y) với mọi x < y thì UC (x, y) = UC (x, y-x)

Tôi thể hiện thuật toán với bất biến vòng lặp như sau:

Hình 4 2 Ước số chung lớn nhất của hai số nguyên dương a và b

o Các bất biến cần thiết là bất biến bảo toàn Nó thể hiện rằng một số lượng nhất định vẫn còn tương đương với giá trị ban đầu của nó

o Các chiến lược dẫn đến bất biến bảo toàn này là tách cặp, thay thế thuộc

Trang 39

4.2.4 Phân loại bất biến:

Bất biến vòng lặp có thể được chia theo hai hướng:

o Bởi vai trò của nó đối với các hậu điều kiện, giúp tôi phân biệt giữa tính bất

biến "cốt lõi" (“essential”) và "chặn" (“bounding”)

o Bằng các kỹ thuật chuyển đổi đó mang lại các bất biến từ hậu điều kiện Ởđây tôi có kỹ thuật như tách cặp (uncoupling) và giảm dư hằng (constantrelaxation)

4.2.4.1 Phân loại theo luật

Trong chiến lược lặp điển hình được mô tả trong phần 4.1.2, vấn đề cầnthiết đó là việc lặp đi lặp lại liên tiếp của thân vòng lặp duy trì trong các vùnghội tụ nơi dạng thức tổng quát của hậu điều kiện được xác định Các điều kiệntương ứng, tạo nên bất biến chặn; các mệnh đề mô tả hậu điều kiện tổng quát làbất biến cốt lõi

Các bất biến chặn áp dụng cho thuật toán tìm ước số chung lớn nhất baogồm các mệnh đề:

Result > 0

x > 0

Mệnh đề quan trọng là:

UC(Result, x) = UC(a, b)

Cho kết quả hậu điều kiện nếu Result = x.

Đối với các chương trình tìm số lớn nhất trong mảng một chiều, bất biếnchặn là:

a.lower ≤ i ≤ a.upper và bất biến cốt lõi là: Result = max (a [a.lower i] )

Cho kết quả hậu điều kiện khi i = a.upper Lưu ý rằng bất biến cốt lõi sẽ không được định nghĩa nếu không có bất biến chặn, vì a [1 i] sẽ chưa được xác định (nếu i> a.upper) hoặc sẽ là trống rỗng và không lớn nhất (nếu i <a.lower ).

Đối với các chương trình tối đa hai chiều, bất biến chặn là:

a.lower ≤ i ≤ j ≤ a.upper

và bất biến cốt lõi là: max(a) = max(a[i j])

Cho kết quả các hậu khi i = j Một lần

luôn được xác định mà không có bất biến chặ

nữa, bất biến cốt lõi sẽ không luônn

30

Ngày đăng: 11/11/2020, 22:11

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w