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

82 28 0
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

Đ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

ĐẠ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 ĐẠ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 Ngành: Cơng nghệ Thơng tin Chun ngành: Kỹ thuật phần mềm Mã số: 60480103 LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN NGƯỜI HƯỚNG DẪN KHOA HỌC: TS ĐẶNG VĂN HƯNG Hà Nội - 2016 LỜI CẢM ƠN Trước tiên, 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 suốt q trình học tập thời gian hoàn thành luận văn tốt nghiệp Tôi xin chân thành cảm ơn thầy cô giáo khoa Công nghệ thông tin, Trường đại học công nghệ, Đại học quốc gia hà nội, người hết mình, tận tụy truyền đạt kiến thức, quan tâm, động viên suốt q trình tơi học tập nghiên cứu 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 đào tạo tỉnh Lạng Sơn tạo điều kiện cho tơi có hội học tập, nâng cao trình độ chun mơn Cuối cùng, lời cảm ơn chân thành xin gửi đến bạn học lớp K21 Công nghệ phần mềm thường xuyên quan tâm, giúp đỡ, chia sẻ kinh nghiệm, tài liệu hữu ích suốt q trình học tập Một lần nữa, xin cảm ơn gửi lời chúc sức khỏe, thành công đến tất người Hà Nội, tháng 11 năm 2016 Tác giả luận văn Nguyễn Minh Hải LỜI CAM ĐOAN Tôi xin cam đoan luận văn “Phát triển kỹ thuật tìm bất biến (invariants) biến (variants) cho việc sử dụng Hoare Logic để chứng minh tính đắn chu trình” tơi thực hiện, hồn thành sở tìm kiếm, thu thập, nghiên cứu, tổng hợp phần lý thuyết phương pháp kĩ thuật trình bày tài liệu công bố nước giới Các tài liệu tham khảo nêu phần cuối luận văn Luận văn khơng chép ngun từ nguồn tài liệu khác Nếu có sai sót, tơi xin chịu 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 MỤC LỤC LỜI CẢM ƠN LỜI CAM ĐOAN MỤC LỤC DANH MỤC CÁC HÌNH VẼ CHƯƠNG 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 TỔNG QUAN VỀ LOGIC HOARE 2.1 LOGIC VỊ TỪ 2.2 NHỮNG HIỂU BIẾT VỀ LOGIC HOARE 11 2.2.1 Lịch sử logic Hoare: 11 2.2.2 Nội dung logic Hoare 12 2.2.3 Các tiên đề logic Hoare: 12 CHƯƠNG CHỨNG MINH TÍNH ĐÚNG ĐẮN CỦA LỆNH CHU TRÌNH BẰNG LOGIC HOARE 15 3.1 PHƯƠNG PHÁP CHỨNG MINH 15 3.2 CÁC VÍ DỤ ÁP DỤNG 17 CHƯƠNG 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 24 4.1 BIẾN 24 4.1.1 Khái niệm 24 4.1.2 Phương pháp tìm biến 24 4.2 BẤT BIẾN 25 4.2.1 Bất biến vòng lặp 25 4.2.2 Một cách nhìn mang tính xây dựng 27 4.2.3 Ví dụ 28 4.2.4 Phân loại bất biến: 30 4.2.4.1 Phân loại theo luật 30 4.2.4.2 Phân loại theo kỹ thuật khái quát hóa 31 4.3 TÌM BIẾN VÀ BẤT BIẾN VỊNG LẶP TRONG MỘT VÀI THUẬT TỐN CƠ BẢN .32 4.3.1 Tìm phần tử có giá trị lớn dãy phần tử 32 4.3.1.1 Số lớn với vòng lặp biến 32 4.3.1.2 Số lớn 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 mảng chưa 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 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 DANH MỤC CÁC HÌNH VẼ Hình Ảnh Tony Hoare Robert Floyd ………………………………………12 Hình Các vịng lặp tính tốn cách xấp xỉ Hình Ước số chung lớn hai số nguyên dương a b Hình Số lớn với vòng lặp biến 3 Hình 4 Số lớn với vòng lặp hai biến Hình 4.5 Tìm kiếm mảng chưa xếp Hình Tìm kiếm nhị phân Hình Sắp xếp kiểu bọt CHƯƠNG MỞ ĐẦU Lý chọn đề tài Trong suốt q trình tơi học tập, nghiên cứu trường Đại học Công nghệ, Đại học Quốc Gia Hà Nội Bản thân tiếp xúc với nhiều kiến thức mới, quan trọng, ứng dụng mạnh mẽ lĩnh vực rộng lớn CNTT Là giáo viên giảng dạy môn tin học cấp THPT, thường xuyên tiếp xúc hướng dẫn học sinh kiến thức ngơn ngữ lập trình sở ngơn ngữ Pascal Do đó, tơi đặc biệt có hứng thú với mơn kiểm thử Việc kiểm tra chương trình xem có đúng, chạy tốt, phù hợp với yêu cầu người lập trình hay khơng ln vấn đề quan trọng, mang tính thời đại lập trình viên nhà quản lý phần mềm Cả dự án bị ảnh hưởng gặp lỗi nghiêm trọng việc viết mã Trong tính chất đảm bảo chương trình phù hợp với u cầu, có tính chất quan trọng tính đắn Việc chứng chương trình đắn có nhiều phương pháp, phần nghiên cứu luận văn, chọn nghiên cứu Hoare logic (logic Hoare) Logic Hoare Hoare xuất báo năm 1969 Nó thực đời lâu, thân ln mang tính thời đại việc áp dụng logic Hoare để kiểm tra tính chương trình tiến hành thường xuyên phạm vi rộng lớn Việc tìm hiểu phương pháp chứng minh tính logic Hoare gợi mở cho hướng nghiên cứu Trong đó, tơi xâu vào việc phân tích Biến (Variants) Bất biến (Invariants), hai yếu tố quan trọng việc chứng minh tính lệnh chu trình Bản chất vịng lặp ln có ẩn chứa bất biến vịng lặp Hay nói cách khác, bạn khơng thể hiểu vịng lặp chưa biết bất biến Mục đích nghiên cứu Mục đích nghiên cứu luận văn tìm hiểu làm rõ kiến thức liên quan đến logic Hoare Qua phần nghiên cứu, muốn cung cấp tài liệu cụ thể nhằm hướng dẫn việc chứng minh tính lệnh chu trình logic Hoare Bên cạnh đó, việc đưa gợi mở chất vịng lặp thơng qua bất biến vòng lặp trú trọng Các chương luận văn cung cấp nhìn tổng quan biến bất biến lý thuyết toán áp dụng thuật toán Phát triển kỹ thuật tìm bất biến (invariants) biến (variants) cho việc sử dụng logic Hoare để chứng minh tính đắn chu trình mục đích nghiên cứu chủ yếu luận văn n −i + −1 < N n − (i + 1) + < N Định nghĩa phép < Quy tắc toán học Bất biến   ( i ≤ n ∧1  ≤ i ≤ n + ∧m =  )  3  i−1 /2 ∑ (2 * j )  j=    if ( i mod = 0) then m := m + i ∗ i ∗i; i := i + 1;     )   ( ≤ i ≤ n + ∧m =  Tôi cần phải cho thấy  i−1 /2 ∑  (2 * j )   j=   Tôi phải chứng minh hai trường hợp sau  i   + Trường hợp 1:      (  )  ≤ i + ≤ + ∧m + i = n ) (  ∑ (2 * j ) )  j= ( )   i−1 /2 ∧m = ∑ (2 * j ) j=          j=  ∧(i mod = 0)   i+1−1 /2 m := m + i ∗ i ∗i; (     i+1−1 /2   ≤ i + ≤ + ∧m = ∑ (2 * j ) n  j=       ∑ (2 * j ) ≤ n ∧1 ≤ ≤ n + ∧m i = i := i + 1;    ≤ i≤ n+  ) j=  i−1 /2  1  3  ∑ (2 * j ≤ n ∧1 ≤ ≤ n + ∧m = i  i )  i−1 /2   (   3       (i mod = 0: true) Luật gán, luật ghép Luật gán b ∧I {I} Luật rẽ nhánh 53  (   )     i−1 /2 (2 * j ) ∑  i ≤ n ∧1 ≤ i ≤ n + ∧m =  ∧(i mod = 0)  j= (  )     i+1−1 /2 ∑ ⇒  1≤ i + ≤ n + ∧m + i =  logic sau: i + ≤ n +1  (2 * j ) m= (   Điều minh chứng  j= Vì i ≤ n ≤ i +1   Vì ≤ i )   i−1 /2 ∑ (2 * j )3 Theo giả thiết j=  m+ i = ( )    i −1 /2  ∑ (2 * j ) j= + i = ( )   i+1−1 /2 ∑ (2 * j j= Vì )  ( i −1) /2     + = i /2 với i mod =   i  + Trường hợp 2:  ≤ n ∧1 ≤ ≤ n + ∧m = i ( ∑ (2 * j )   ( (   ≤ i+1≤ n   i+1−1 /2 ∑ (2 * j ) + ∧m =    i−1 /2   ) ( ≤ i ≤ n + ∧m =    ∑ (2 * j )  ≤ n ∧1 ≤ ≤ n + ∧m  (i mod = 0: false)   Luật phép gán   {I}   j=  Tôi cần phải cho thấy  Luật rẽ nhánh ∧(i mod ≠ 0)  j=       i := i + 1; ) )  b ∧I    j=     ∑ (2 * j i  )  i−1 /2  ≤ n ∧1 ≤ ≤ n + ∧m  = i  j=   )   i−1 /2   (   )  i−1 /2 ∑ (2 * j )  ∧(i mod ≠ 0)  i i    = ⇒  ≤ i + ≤ n + ∧m =  logic sau: ( j=  )   i+1−1 /2 ∑ j=  (2 * j )    Điều minh chứng  54 i + ≤ n +1 ≤ i +1  m=  ) (  i−1 /2 ∑ (2 * j )3 j= ) ( m= Vì i ≤ n Vì ≤ i   i +1−1 /2  ∑ (2 * j ) j= Theo giả thiết 3=  ( )  i−1 /2 ∑ (2 * j ) Vì ( i −1) /2  = i /2 với i mod ≠  j=    Kết luận: Bất biến biến tơi dự đốn Bài Cho chương trình (tựa mã) sau: Cho m, i biến nguyên, n nguyên dương m := 0; i := 1; while i ≤ n begin if (i mod = 1) then m := m + i ∗ i ∗ i; i := i + 1; end Hãy tìm biến (t) bất biến (I) để chứng minh tính đắn chương trình Giải: Tơi dự đốn biến bất biến: Biến: Giống toán 2, 4, trên, áp dụng dạng mẫu trường hợp có biến số vịng lặp i, tơi có biến t = n – i +1 Bất biến: Bài toán tốn dùng để tính tổng số lẻ mũ ba khơng vượt q n Tơi đưa hậu điều kiện tổng quát sau ( )  n−1 /2 m=  ∑  ( * j +1) Với [n/2] nghĩa n chia cho lấy phần nguyên Nhận j= thấy biến số vòng lặp ≤ i ≤ n +1 tạo nên bất biến chặn Áp dụng kỹ thuật giảm dư thay n biến số i Khi tơi bất biến  ( i−2 )/2 sau: I ⇔ ≤ i ≤ n + ∧m =  ∑  ( * j +1) j= Chứng minh biến bất biến vừa tìm đúng: Biến Với biến t = n – i +1, thực chứng minh giống với toán Kết luận biến t tìm thỏa mãn yêu cầu 55 Bất biến   i   ( i−2 )    ≤ n ∧1 ≤ i ≤ n + ∧m =  ( /2 ∑ ( * j +1)   j= )  if i mod = then m := m + i ∗ i ∗i; i := i + 1;     )  (  i−1 /2 ∑ ≤ i ≤ n ∧m = +    ( * j +1)    j=   Tôi phải chứng minh hai trường hợp sau (các phân tích tối giản, xem chi tiết tốn 5) + Trường hợp 1: Tôi cần phải cho thấy  i ≤ n ∧1 ≤ i ≤ n +1 ∧m =   ( i−2  * j +1 ∧(i mod = 1)  /2  )  ( ∑     j= ⇒  ≤ i +1 ≤ n +1 ∧m + i3 =  (  logic sau: i + ≤ n +1 1≤ i +1   ( ∑ ( * j +1) ) Theo giả thiết  ( ∑ ( * j + 1)   j= +1= )   i −2 /2  i − ) /2  Vì i ≤ n /2 ( (   i−2  ) ( Vì ≤ i   j= * j +1 Điều minh chứng ) j= m+i =   ∑  m = )  i+1−2 /2  Vì )  i+1−2 /2 +i3 ∑ (2 * j =     ( i−1) /2 j= với i mod = + Trường hợp 2: Tôi cần phải cho thấy  +1) 56   i ≤ n ∧1 ≤ i ≤ n +1 ∧m = i−2 * j +1 ∧(i mod ≠ 1)   ) (    (    ⇒ ≤ i +1 ≤ n +1 ∧m = /2 ∑ j= ) (   i+1−2 /2  j= ∑  * j +1  (  )     )  Điều minh chứng logic sau: i+1≤ n +1 ≤ i +1 Vì ≤ i )  ( m= Vì i ≤ n  )  (  i +1− /2   i−2  /2 ∑ ( * j + 1) ∑ ( * j +1) 3 j= Vì ( i +1− ) /2  =    ( i−2 ) /2 với i mod = = j= Kết luận: Bất biến biến tơi dự đốn Bài Cho chương trình (tựa mã) sau: với x,y,z biến nguyên, n nguyên dương x=0;y=1;z=1;1≤n While z < n begin y := x + y; x := y – x; z := z + 1; end {y = fib n} Tìm biến ( t ) bất biến ( I ) để chứng minh tính đắn lệnh chu trình Giải: Dự đốn biến bất biến Biến Từ toán làm, tơi dễ dàng đưa dự đốn biến chức lệnh chu trình t = n – z Khi z = n vòng lặp chấm dứt Bất biến Tơi thấy đoạn chương trình dùng để tính số fibonacci số nguyên n (1 ≤ n) Hậu điều kiện tổng quát y = fib ( n ) Bằng cách thay n biến số điều kiện lặp Với z chạy miền giá trị từ đến n, thấy biến x y nhận giá trị fib sau: y = fib (z) x = fib (z-1) 57 Từ phân tích kỹ thuật áp dụng phương pháp giảm dư hằng, đưa dự đốn biết biến vịng lặp I ⇔ y = fib ( z ) ∧x = fib ( z − 1) ∧z ≤ n Chứng minh biến bất biến vừa tìm Biến Chứng minh ban đầu t > Tôi phải chứng minh b ⇒ t > Khi đó, tơi cần z < n ⇒ n −z > Điều hiển nhiên Chứng minh {b ∧t = N }c {t < N} Áp dụng luật phép gán phép ghép, tơi có: z < n ∧n − z = N n − ( z + 1) < N y := x + y; x := y – x; n − ( z + 1) < N z := z + n −z < N Tôi cần z < n ∧n −z = N ⇒ n − ( z + 1) < N Điều minh chứng logic sau: n −z = N Giả thiết n − z − = N −1 Trừ hai vế n − ( z + 1) < N N−1

Ngày đăng: 30/07/2020, 10:18

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan