Có rất nhiều phương pháp để kiểm chứng tính đúng đắn của một chương trình Java đa luồng. Một trong các phương pháp đó là sử dụng logic Hoare. Kiểm chứng tính đúng đắn của một chương trình Java đa luồng sử dụng logic Hoare yêu cầu ta cần phải chứng minh một chương trình được bổ sung và chú thích dưới sự thi hành của các lệnh phải thỏa mãn: Nếu bước tính toán thi hành một phép gán, thì ta sử dụng các điều kiện tính đúng đắn cục bộ để chứng minh tính quy nạp của sự...
TRƯỜNG ………………… KHOA……………………… - - Báo cáo tốt nghiệp Đề tài: Phương pháp kiểm chứng tính đắn chương trình Java đa luồng thơng qua sử dụng logic Hoare -1- TĨM TẮT KHĨA LUẬN Có nhiều phương pháp để kiểm chứng tính đắn chương trình Java đa luồng Một phương pháp sử dụng logic Hoare Kiểm chứng tính đắn chương trình Java đa luồng sử dụng logic Hoare yêu cầu ta cần phải chứng minh chương trình bổ sung thích thi hành lệnh phải thỏa mãn: Nếu bước tính tốn thi hành phép gán, ta sử dụng điều kiện tính đắn cục để chứng minh tính quy nạp thi hành thuộc tính cấu hình cục bộ, kiểm tra tính khơng có can thiệp tất cấu hình cục khác bất biến lớp khác Đối với giao tiếp, tính bất biến thi hành đối tác bất biến tồn cục chứng tỏ thơng qua kiểm tra hợp tác giao tiếp Giao tiếp với khơng ảnh hưởng trạng thái tồn cục; tính bất biến thuộc tính cịn lại quan sát tương ứng chứng tỏ thông qua kiểm tra tính khơng có can thiệp Cuối cùng, tạo đối tượng, tính bất biến bất biến tồn cục, tạo cấu hình cục bộ, bất biến lớp đối tượng tạo đảm bảo điều kiện kiểm tra hợp tác tạo đối tượng; tất thuộc tính khác chứng tỏ bất biến thơng qua sử dụng kiểm tra tính khơng có can thiệp -2- MỤC LỤC TĨM TẮT KHĨA LUẬN - MỞ ĐẦU - CHƯƠNG LOGIC HOARE - 1.1 Logic vị từ - 1.2 Các tiên đề Logic Hoare .- 1.2.1 Các cơng thức cú pháp cho chứng minh chương trình - 1.2.2 Tiên đề phép gán - 10 1.2.3 Các quy tắc bổ sung - 10 CHƯƠNG NGÔN NGỮ TUẦN TỰ - 12 2.1 Cú pháp - 13 2.2 Ngữ nghĩa - 16 2.2.1 Trạng thái cấu hình - 16 2.2.2 Các ngữ nghĩa toán tử - 18 2.3 Ngôn ngữ khẳng định - 20 2.3.1 Cú pháp - 20 2.3.2 Ngữ nghĩa - 21 2.4 Hệ chứng minh - 25 2.4.1 Phác thảo chứng minh - 26 2.4.2 Kiểm chứng điều kiện - 31 CHƯƠNG NGÔN NGỮ TƯƠNG TRANH Error! Bookmark not defined 3.1 Cú pháp - 42 3.2 Ngữ nghĩa - 42 3.3 Hệ chứng minh - 43 3.3.1 Phác thảo chứng minh - 43 3.3.2 Kiểm chứng điều kiện - 43 CHƯƠNG BỘ ĐIỀU PHỐI LẶP LẠI Error! Bookmark not defined 4.1 Cú pháp - 47 4.2 Ngữ nghĩa - 47 4.3 Hệ chứng minh……………………………………………………………………….- 484.3.1 Phác thảo chứng minh - 49 4.3.2 Kiểm chứng điều kiện - 51 CHƯƠNG PHÉP TOÁN ĐIỀU KIỆN TRƯỚC YẾU NHẤT - 53 5.1 Các phép toán thay - 54 5.2 Kiểm chứng điều kiện………………………………………………………… - 54CHƯƠNG TÍNH ĐÚNG ĐẮN Error! Bookmark not defined 6.1 Tính đắn - 59 KẾT LUẬN……………………………………………………………………………… - 62TÀI LIỆU THAM KHẢO……………………………………………………………… - 63- -3- MỞ ĐẦU Yêu cầu người dùng phần mềm ngày khơng phải có giao diện đẹp, tốc độ xử lý liệu nhanh, tốc độ phản ứng chương trình với người dùng u cầu khơng thể bỏ qua Một chương trình yêu cầu vừa có giao diện đẹp, vừa xử lý nhanh chạy máy cấu hình bình thường cần có chế để quản lý cấp phát tài nguyên máy cách phù hợp Và chế quản lý đa luồng giải pháp cho u cầu Ngơn ngữ lập trình Java ngơn ngữ lập trình bậc cao hỗ trợ mạnh cho lập trình đa luồng, sử dụng nhiều hệ thống lớn phần mềm có quy mơ vừa nhỏ Trong hệ thống lớn, lỗi nhỏ dẫn tới kết tai hại, chí phá hủy hệ thống Do ta thấy tính quan trọng việc kiểm chứng tính đắn chương trình Việc kiểm chứng tính đắn chương trình Java đa luồng thiếu việc phát triển hệ thống Ta cần có phương pháp kiểm chứng tính đắn chương trình Java đa luồng Đó phương pháp thông qua sử dụng logic Hoare Logic Hoare hệ thống hình thức phát triển nhà khoa học máy tính Anh C.A.R.Hoare, sau cải tiến Hoare nhà nghiên cứu khác Mục đích hệ thống cung cấp tập quy tắc logic để lý luận tính đắn chương trình máy tính với tính xác logic tốn học Logic Hoare sở để định nghĩa tính đắn hệ thống Trong khóa luận tốt nghiệp em trình bày phương pháp kiểm chứng tính đắn chương trình Java đa luồng thơng qua sử dụng logic Hoare Khóa luận có sáu chương với nội dung sau: Chương 1: Logic Hoare Chương 2: Ngôn ngữ -4- Chương 3: Ngôn ngữ tương tranh Chương 4: Bộ điều phối lặp lại Chương 5: Phép toán trước yếu Chương 6: Tính đắn Tuy nhiên nhiều hạn chế thời gian kiến thức thân, khóa luận khơng thể tránh khỏi thiếu sót Em mong nhận quan tâm góp ý thầy, giáo anh, chị bạn, người quan tâm đến vấn đề Em xin chân thành cảm ơn thầy giáo, tiến sỹ Đặng Văn Hưng, người hướng dẫn trực tiếp, động viên giúp đỡ em nhiều để hồn thành khóa luận Cuối cùng, em xin bày tỏ lòng biết ơn sâu sắc tới gia đình, bạn bè, thầy giáo, người quan tâm, giúp đỡ em nhiều suốt năm ngồi ghế nhà trường Hà Nội, tháng năm 2009 Sinh viên LÊ VĂN VIỄN -5- CHƯƠNG LOGIC HOARE 1.1 Logic vị từ Định nghĩa: Vị từ hàm nhận giá trị Bool Một vị từ thực giá trị logic biểu tham số Nó với số đối số, sai với số đối số khác Chẳng hạn x > vị từ với đối số, ta đặt tên gt0(x) Do mà gt0(5) gt0(0) sai Định nghĩa: Các thành phần logic vị từ wffs gồm có thành phần sau: • Các định danh biến – tập (thường vô hạn) tên biến, thường x , x , x , , y , y , y , • Các định danh – tập (hữu hạn, vô hạn, rỗng) tên hằng, thường a , a , a , , b , b1 , b • Các định danh vị từ – tập (không rỗng) tên vị từ, thường p , p , p , , q , q , q • Các định danh hàm – tập tên hàm, thường f , f , f , , g , g , g , Mỗi định danh hàm định vị từ có số cố định đối số mà chấp nhận arity Định nghĩa: Các toán hạng logic vị từ định nghĩa cách đệ quy sau: (i) tên biến tên toán hạng, (ii) t1 , , tk tốn hạng f tên hàm có số đối số cố định k, f t1 , t , , tk tốn hạng -6- Một tốn hạng khơng chứa biến gọi toán hạng sở Định nghĩa: t1 , , tk toán hạng vị từ p có số đối số cố định k, p t1 , t , , tk công thức nguyên tử logic vị từ Các phép toán logic thêm vào logic vị từ lượng hóa phổ biến x đọc với x, lượng hóa tồn tại, x đọc tồn x Trong sơ đồ ưu tiên để tránh dấu ngoặc công thức, có độ ưu tiên thấp liên kết Định nghĩa: Các công thức ngữ pháp (wffs) logic vị từ định nghĩa đệ quy sau: (i) công thức nguyên tử công thức ngữ pháp wff, (ii) wffs x tên biến, cơng thức sau cơng thức ngữ pháp: • ( ) • • ( x. ) • • x. • • Hai phép tốn lượng hóa cung cấp ngữ nghĩa thiếu để biểu diễn khẳng định kết chân lý vị từ Sự thể phép toán phép toán logic phụ thuộc vào hiểu biết khơng gian từ giá trị biến đưa Nếu khơng gian hữu hạn, nói c1 , c2 , , ck , phép tốn logic biểu thị cách sử dụng quan hệ logic mệnh đề Một công thức x. tương đương với kết hợp công thức ngữ pháp đạt thay x phần tử phần tử khơng gian (ví dụ, x p x, y p c1 , y p c2 , y pck , y ) Tương tự công thức x. tương đương với tách rời công thức wffs đạt thay x phần tử phần tử khơng gian (ví dụ x p x , y p c1 , y pc2 , y p ck , y ) Các phép tốn lượng hóa yêu cầu ta phân biệt cách sử dụng biến Chẳng hạn, cơng thức p(x) có tham biến x, với số giá trị sai với số giá trị khác Tuy nhiên, công thức x p( x ) thực tham biến -7- thể giá trị – giá trị x gọi biên trường hợp trước tự trường hợp sau Nó minh họa hai vai trị khác biến biểu thức khuôn dạng logic mệnh đề phải phân biệt cẩn thận Định nghĩa: Các xuất bị chặn biến x. xuất bị chặn biến , cộng thêm tất xuất x , gọi phạm vi lượng hóa Tất xuất biến mà không bị chặn biến tự Tương tự định nghĩa áp dụng cho x. Một cơng thức ngữ pháp wff gọi đóng khơng có xuất biến tự Định nghĩa: Một thể i gồm có (i) Một tập D không rỗng – miền (hoặc không gian giá trị) (ii) Một phép gán • tên vị từ n đối số thành quan hệ n vị trí D, • tên hàm n đối số thành hàm n vị trí D, • định danh thành phần tử D Ta viết i = D, Một thể toán hạng thể D tất toán hạng, phép gán tên hàm toán hạng khởi tạo tương ứng, f t1 , , tk f t1 , , tk Định nghĩa: Một thể cho i = D, , biến gán (hoặc trạng thái) hàm tập biến V, : V D Phép gán mở rộng cách đệ quy để mang giá trị cho tất toán hạng cơng thức, (i) tốn hạng • với biến x, val ( x ) x , c, val (c) c , • với tốn hạng phức hợp val ( f ( t , , t k )) ( f )( val ( t1 ), , val ( t k )) (ii) cơng thức • cơng thức nguyên tử val ( p(t1 , , t k ) ( p )(val (t1 ), , val (tk )) • cơng thức phức hợp val ( ) val ( ) -8- val ( ) val ( ) val ( ) val ( ) val ( ) val ( ) val ( ) val ( ) val ( ) val ( ) val ( ) val ( ) val x. true val ' true ' ' y y y x , false ngược lại val x. true val ' true ' ' y y y x , = false ngược lại Hai định nghĩa cuối biểu thị rằng, cho thể trạng thái, có giá trị định cho tốn hạng cơng thức việc ước lượng phép toán logic Điều cung cấp giá trị ta sử dụng phân loại công thức Định nghĩa: Cho biểu thức hợp khuân dạng wff, i thể hiện, trạng thái Thì thỏa mãn i, i | val ( ) = true Biểu thức hợp khuân dạng i, i | , trạng thái thỏa mãn i, i gọi mơ hình , sai i khơng có trạng thái thỏa mãn i Một thể gọi mô hình tập biểu thức hợp khuân dạng mơ hình biểu thức hợp khuân dạng wff tập, thể tốn hạng, gọi mơ hình tốn hạng Định nghĩa: Một cơng thức ngữ pháp wff logic (công thức đúng) thể hiện, thỏa mãn tồn thể trạng thái thỏa mãn nó, ngược lại khơng thể thỏa mãn Định nghĩa: Một công thức ngữ pháp wff hệ logic tập công thức ngữ pháp , | , thể trạng thái thỏa mãn , tương đương logic, với thể trạng thái , val ( ) val ( ) 1.2 Các tiên đề Logic Hoare 1.2.1 Các công thức cú pháp cho chứng minh chương trình -9- Các cơng thức ta viết xác nhận thuộc tính chương trình (các đoạn chương trình thực sự) Do vậy, cơng thức phải bao gồm xác nhận chương trình tới cơng thức mà gắn liền Các xác nhận chương trình (wffs) có dạng P gồm thành phần: • P đoạn chương trình - lệnh (có thể phức hợp), • công thức logic vị từ sử dụng tên biến hàm/thao tác chương trình, ký hiệu {, } siêu ký hiệu sử dụng để biểu thị bắt đầu kết thúc công thức logic vị từ, không nên hiểu ký hiệu ngôn ngữ lập trình Cơng thức logic gọi điều kiện trước, gọi điều kiện sau 1.2.2 Tiên đề phép gán Ta giả thiết X : biểu thị lệnh gán, X biến biểu thức thích hợp Tiên đề phép gán nằm hệ thống logic để chứng minh chương trình khơng điều kiện Tiên đề phép gán: | P X X : P P công thức logic vị từ, X biến, biểu thức, P X công thức P với lần xuất X thay Một bước chứng minh xác nhận việc chứng minh cú pháp công thức tương ứng Tuy nhiên ta không phân biệt công thức mà chúng tương đương logic Độ mạnh công thức ngữ pháp Nếu P Q công thức ngữ pháp mà P Q , ta nói P xác nhận mạnh Q, Q yếu P Một điều kiện mạnh điều kiện mà nhiều – giá trị thỏa mãn điều kiện mạnh 1.2.3 Các quy tắc bổ sung Tiên đề Skip | P skip P với P công thức logic mệnh đề Bằng trực giác, skip khơng làm gì, nên sau thực trước - 10 - khóa free (null, 0) biểu thị khóa tự Các biến thể wait notified kiểu list Thread Int tương đương với tập wait notified ngữ nghĩa lưu trữ luồng đợi điều phối, theo thứ tự luồng thông báo Bên cạnh định danh luồng, số lời gọi đồng lưu trữ Nói cách khác, biến nhớ giá trị khóa cũ trước tạm thời ngừng, giá trị trả lại luồng hoạt động trở lại Tất biến bổ trợ khởi tạo cách bình thường Đối với giá trị thread kiểu Thread wait kiểu list ( Thread Int ), ta viết thread wait thay thread , n wait với giá trị n Theo cú pháp, bên cạnh bổ sung tích hợp chương trước, quan sát gọi điểm đầu điểm cuối thân phương thức đồng hóa thi hành theo thứ tự lock : inc lock lock : dec lock Các ngữ nghĩa tăng khóa inclock inst , thread , n 1 inst lock v, n Chú ý định danh luồng sở hữu khóa khơng trường hợp khóa tự mà cịn trường hợp có luồng sở hữu khóa Tuy nhiên, cập nhật thi hành phương thức đồng bộ, nên ngữ nghĩa đảm bảo cho trường hợp có luồng sở hữu khóa, luồng sở hữu khóa luồng thực thi, nghĩa là, khóa khơng tự thành phần luồng khóa khơng sửa đổi Điều có nghĩa là, tăng giá trị khóa , n tạo , n 1 , tăng khóa tự null , 0 luồng có kết , 1 Giảm khóa dec lock thực inst , ngược lại: dec lock với inst lock , n , n 1 n > 1, tự ngược lại Thay câu lệnh phụ trợ ngữ nghĩa, thông báo thể hệ chứng minh dựa trạng thái phép gán phụ trợ biến wait notified: Các câu lệnh phụ trợ !signal !signal_all thay phép gán phụ trợ Các câu lệnh phụ trợ ?signal Điều có nghĩa là, thơng báo thể phép gán phụ trợ thi hành luồng đưa thông báo Đối với luồng thông báo, điểm điều khiển trước sau thông báo mô tả khẳng định phương thức wait Các điểm điều khiển khác phân biệt giá trị biến phụ trợ tích hợp wait notified Vào phương thức wait nhận quan sát wait , lock : wait lock , free trả từ phương thức wait - 50 - quan sát lock , notified : get notified , thread , notified \ get notified , thread Đối với luồng Val Thread danh sách notified Val list thread Int , get notified , lấy giá trị , n từ danh sách Các ngữ nghĩa đảm bảo tính kết hợp Câu lệnh ! signal phương thức notify thay lệnh gán bội phụ trợ wait , notified : notifywait , notified , giá trị notifywait , notified cặp tập cho với phần tử chọn, chuyển từ tập tập wait sang tập notified; tập wait rỗng, định danh hàm Cuối cùng, câu lệnh ! signal _ all phương thức notifyAll thay phép gán phụ trợ notified , wait : notified wait , 4.3.2 Kiểm chứng điều kiện Tính đắn cục tính đắn ban đầu Java conc Đối với tính đắn cục bộ, ý điều kiện bao hàm thêm vào tính bất biến luồng thi hành thông báo Tuy nhiên, ta không cần thêm vào điều kiện cho trường hợp này, kết thông báo giữ lại phép gán phụ trợ Đối với luồng thông báo, điểm điều khiển trước sau thông báo mô tả khẳng định Kiểm tra tính khơng có can thiệp Các phương thức đồng đối tượng thi hành tương tranh cấu hình cục tương ứng chờ trả về: Nếu luồng thi hành khác nhau, luồng thi hành phương thức không đồng hóa wait đối tượng; mặt khác, hai cấu hình cục thi hành dãy lời gọi Định nghĩa 4.3.1 (Tính khơng có can thiệp) Một phác thảo chứng minh khơng có can thiệp, điều kiện định nghĩa 3.3.2 tất lớp c, tất phép gán bội y : e với điều kiện p c, tất khẳng định q điểm điều khiển c, cho hai p q không xuất phương thức đồng bộ, q điểm điều khiển chờ trả Chú ý thông báo, ta yêu cầu tính bất biến khẳng định luồng đợi thông báo Thông báo mô tả phép gán phụ trợ thi hành luồng thơng báo Điều có nghĩa là, hai tình trạng đợi tình trạng thơng báo luồng bị tạm thời ngừng thay điểm điều khiển phương thức wait Hai tình trạng phân biệt - 51 - giá trị biến wait biến notified Tính bất biến điều kiện trước lệnh trả phương thức wait phép gán phương thức notify biểu thị q trình thơng báo, tính bất biến khẳng định thơng qua phép gán thay đổi khóa biểu thị kỹ thuật đồng hóa Thơng tin giá trị khóa khai báo từ kiểm tra hợp tác thơng tin phụ thuộc vào hành vi tồn cục Ví dụ 4.3.2 Ví dụ biểu diễn cách nhiều luồng sở hữu khóa đối tượng sử dụng để biểu diễn loại trừ lẫn Ta sử dụng khẳng định owns thread , lock thread null thread lock thread , thread lock thành phần giá trị khóa Cho free _ for thread , lock thread null owns thread , lock lock free Cho q, cho owns thread , lock , khẳng định điểm điều khiển cho p? call stm ? call với p def free _ forthread , lock quan sát gọi phần bắt đầu phương thức đồng hóa lớp Chú ý quan sát stm thay đổi giá trị khóa Điều kiện khơng có can thiệp | L p q'interferes q, stm stm q' đảm bảo tính bất biến q quan sát stm Các khẳng định p q’ kéo theo thread = thread’ Các điểm p q đạt tới đồng thời luồng q mô tả điểm chờ trả Nhưng điều sai định nghĩa vị từ interferes: Nếu q không điểm điều khiển chờ trả về, mệnh đề điều kiện ước lượng sai Mặt khác, sau thi hành lệnh phụ trợ tích hợp lock : inclock stm ta có owns thread , lock , có nghĩa owns thread ' , lock Kiểm tra hợp tác Ta mở rộng kiểm tra hợp tác cho Java conc với kỹ thuật đồng hóa với thi hành phương thức điều phối Trong ngôn ngữ trước, khẳng định comm phát biểu lệnh cho đại diện đối tác giao tiếp Trong ngôn ngữ với đồng hóa điều phối, giao tiếp luôn cho phép Do khẳng định comm phải giữ thêm tính cho phép giao tiếp: Trong trường hợp thi hành phương thức đồng hóa, khóa đối tượng phải tự thuộc sở hữu luồng gọi Điều biểu diễn z'.lock free thread z'.lock thread , thread luồng gọi, z’ đối tượng gọi, thread z'.lock thành phần giá trị khóa, có nghĩa là, luồng sở hữu khóa z’ Đối với thi hành phương thức điều phối ta yêu cầu luồng thi hành - 52 - giữ khóa Sự trả từ phương thức wait giả thiết luồng thông báo khóa đối tượng gọi tự Định nghĩa 4.3.3 (Kiểm tra hợp tác: Giao tiếp) Một phác thảo chứng minh thỏa mãn kiểm tra hợp tác giao tiếp, điều kiện định nghĩa 3.3.5 lệnh liệt kê với ngoại lệ trường hợp quy tắc CALL, thêm vào trường hợp sau đây: 1.CALL: Sự thi hành phương thức khơng đồng hóa m với m start , wait , notify, notifyAll xử lý trước Đối với tất lệnh p1 u ret : e0 mep !call !call y1 : e1 p wait (hoặc lệnh mà không nhận giá trị) lớp c với e kiểu c’, phương thức m start , wait , notify, notifyAll q ? call ? call y : e c’ đồng hóa với thân q stm; return eret , biến hình thức u , biến cục v ngoại trừ biến hình thức, điều kiện 2.6 2.7 phải với định nghía sau: Bất biến lớp gọi q1 : I c ' Khẳng định comm cho E z z ' z '.lock free thread z '.lock thread Hơn nữa, f comm u' , v ' : E z , Init v , f obs1 cho z y1 : E1 z , f obs z ' y ' : E ' z ' CALLmonitor : Đối với m wait , notify, notifyAll, comm cho E z z 'thread z '.lock thread RETURN wait : Đối với q1 return getlock q !ret y : e !ret q phương thức wait, comm E z z 'u' E z z '.lock free thread ' z '.notified Ví dụ 4.3.4 Giả thiết thi hành phương thức đồng m lớp c, m c có thân stm ? call thread lock thread stm' ; return Chú ý mở rộng tích hợp stm thiết lập luồng sở hữu khóa phép gán lock : inclock Kiểm tra hợp tác yêu cầu | G truez '.lock : inc z '.lock thread z '.lock thread ' với định nghĩa inc - 53 - CHƯƠNG PHÉP TOÁN ĐIỀU KIỆN TRƯỚC YẾU NHẤT Để tăng tính dễ đọc, kiểm chứng điều kiện chương trước đưa ba logic Hoare chuẩn Mục đích sử dụng chứng minh định lý để chứng minh điều kiện Thay thi hành ngữ nghĩa ba logic Hoare chứng minh định lý, ta đưa ngữ nghĩa phép kéo theo logic thông qua phép toán điều kiện trước yếu Theo cách ta phải thi hành ngữ nghĩa khẳng định chứng minh định lý 5.1 Các phép toán thay Sự thay cục p e / y thay khẳng định cục p tất xuất biến khác biệt y biểu thức cục e Ta áp dụng thay cho biểu thức cục Bổ đề sau biểu diễn thuộc tính chuẩn thay trên, liên kết với cập nhật trạng thái Quan hệ thay cập nhật đưa bổ đề khẳng định p e / y điều kiện trước yếu p phép gán y : e Bổ đề đưa cho khẳng định, thuộc tính cho biểu thức Bổ đề 5.1.1 (Sự thay cục bộ) Đối với môi trường logic trạng thái thể cục inst , ta có ,inst, |L p e / y , inst y e L, inst , , y e ,inst , L | L p Sự kết phép gán biểu diễn mức toàn cục thay toàn cục P E / z.e , thay khẳng định toàn cục P biến thể x đối tượng tham chiếu tới z biểu thức toàn cục E Để phù hợp với kết phép gán, ta phải thay theo cú pháp xuất z xi biến thể hiện, mà cịn cho tất bí danh E' xi , z kết thay áp dụng cho E’ tham chiếu tới đối tượng Bởi điều kiện định danh kiểm tra theo cú pháp, ta định nghĩa trường hợp thay biểu thức điều kiện E ' xi E / z x if E ' E / z x z then Ei else E' E / z x xi fi - 54 - Sự thay mở rộng cho khẳng định toàn cục Ta sử dụng thay P E / z x cho dãy biến y chứa biến logic, mà ngữ nghĩa chúng định nghĩa thay đồng thời Ex / z.x E /u u , x u dãy biến thể logic y , dãy tương ứng E x Eu E Eu / u thay thay cục bộ; biến logic thay thế, ta viết đơn giản P E / u Bổ đề 5.1.2 (Thay toàn cục) Đối với trạng thái tồn cục mơi trường logic tham chiếu tới giá trị tồn ta có , |G P E / z y ' , ' | G P , ' z ' y E , G , G , y E G 5.2 Kiểm chứng điều kiện Trong kiểm chứng điều kiện cục bộ, kết phép gán y : e biểu diễn thay e cho y khẳng định Trong điều kiện toàn cục kiểm tra hợp tác, kết giao tiếp, thay đổi trạng thái cục bộ, biểu diễn thay đồng thời biến lưu trữ kết giá trị giao tiếp Điều có nghĩa là, trường hợp lời gọi phương thức, tham biến hình thức thay tham biến thực biểu diễn ngôn ngữ toàn cục Kết quan sát gọi y : e !call khẳng định toàn cục P biểu diễn thay P E z / z y , z biểu diễn đối tượng gọi Hiệu quan sát gọi quản lý tương tự Chú ý thứ tự: giao tiếp diễn ra, quan sát gửi sau quan sát nhận Để mô tả hiệu tách rời, ta phải thay quan sát nhận, sau quan sát nhận, cuối giao tiếp Đối với lời gọi phương thức, ta phải thêm vào thay khởi tạo biến cục Để cho dễ đọc, định nghĩa sau ta sử dụng ký hiệu p f với f e / y thay p e / y ; ta sử dụng ký hiệu tương tự cho thay toàn cục Chú ý toán tử thay kết nối mạnh toán tử logic - 55 - Định nghĩa 5.2.1 (Tính đắn ban đầu) Một phác thảo chứng minh đắn ban đầu, | G InitState z z ' z ' null z z ' P2 z f init GI P3 z I c z f obs f init , c lớp chính, p2 ? call y : e2 ? call p3 stm; return thân biến cục v phương thức run c, z LVar c , z' LVar Object Khẳng định toàn cục InitState định nghĩa trước Hơn nữa, f init f obs z , null E z / z y , , null / thread , caller Init v / v , Định nghĩa 5.2.2 (Tính đắn cục bộ: Phép gán) Một phác thảo chứng minh đắn cục bộ, với tất phép gán bội p1 y : e p2 lớp c, quan sát giao tiếp tạo đối tượng, | L p1 I c p2 f ass , với fass e / y Định nghĩa 5.2.3 (Khơng có can thiệp) Một phác thảo chứng minh khơng có can thiệp, với tất lớp c, với tất phép gán bội y : e với điều kiện trước p c, | L p I c I c f ass , với f ass e / y Hơn nữa, tất khẳng định q điểm điều khiển c, cho p q không xuất phương thức đồng bộ, q điểm điều khiển chờ trả về, | L p q' I c interferes q, y : e q' f ass với khẳng định interferces định nghĩa phần Định nghĩa 5.2.4 (Kiểm tra hợp tác: Giao tiếp) Một phác thảo chứng minh thỏa mãn kiểm tra hợp tác giao tiếp, - 56 - | G GI P1 z I c z Q ' z ' I c ' z ' comm z null z ' null P2 z Q' z' f comm GI P3 z Q' z ' f obs f obs1 f comm (5.5) biến logic khác biệt z LVar c z' LVar c ' , trường hợp sau: (a) CALL: Đối p1 u ret : e0 m e p2 !call với tất !call y1 : e1 lời gọi p3 wait (hoặc lời gọi không nhận giá trị) lớp c với e0 thuộc kiểu c ' , phương thức m start , wait , notify , notifyAll c’ đồng hóa với thân ? call q2 ? call q3 stm; y : e2 return eret , tham biến hình thức u , biến cục v trừ tham biến hình thức Bất biến lớp gọi q1 I c ' Khẳng định comm cho E0 z z ' z '.lock free thread z '.lock thread Hơn nữa, fobs2 E'2z' / z'.y2 Nếu m f comm E z, Init v / u', v' , fobs1 E1z / z y1 , không đồng hóa, z' lock free thread z'.lock thread comm loại bỏ (b) CALLmonitor : Với m wait , notify, notifyAll, comm cho E0 z z ' thread z '.lock thread (c) CALLstart : Với m = start, comm E0 z z ' z'.started , q2 ? call ? call y : e2 q3 stm; return thân phương thức run c’ (d) CALLstart skip : Với m = start, thêm vào, (5.5) phải với comm cho E0 z z' z'.started , q2 q3 true , f comm f obs định danh hàm (a) RETURN : uret : e0 m e y1 : e1 Đối !call với tất p1 wait p2 ? ret lệnh ? ret y : e4 gọi phương thức p3 (hoặc lệnh mà không nhận giá trị) xuất c với e0 kiểu c’, cho - 57 - phương q1 return comm thức !ret !ret e ret q mu y : e3 cho c’ có lệnh trả q , phương trình (5.5) phải với E z z ' u ' E z , f comm E ' ret z ' / u ret , f obs1 E3 ' z' / z' y ' , f obs E4 z / z y (b) RETURN wait : Với q1 return getlock q !ret y : e wait, thức !ret q phương comm E0 z z ' u' E z z'.lock free thread ' z '.notified (c) RETURN run : Với q1 return q !ret y : e3 !ret q xuất phương thức run, p1 p2 p3 true , comm = true, f comm f obs định danh hàm Định nghĩa 5.2.5 (Kiểm tra hợp tác: Tạo đối tượng) Một phác thảo chứng minh thỏa mãn kiểm tra hợp tác tạo đối tượng, với tất lớp c’ lệnh p1 u : new c p new y : e new p c’: | G z null z u z ' Fresh z ' , u GI u P1 z I c ' z z ' P2 z I c u GI P3 z f obs , với z LVar c ' z' LVar listObject đối tượng mới, fobs E z / z y , Fresh định nghĩa 2.4.2 - 58 - CHƯƠNG TÍNH ĐÚNG ĐẮN Một chương trình cho với thích nó, hệ chứng minh quy định số kiểm chứng điều kiện kiểu khác khẳng định cấu trúc chương trình Tính đắn hệ chứng minh có nghĩa phác thảo chứng minh thỏa mãn kiểm chứng điều kiện, tất cấu hình đạt ngữ nghĩa toán tử thỏa mãn khẳng định cho Để thuận tiện, ta giới thiệu thích sau: Một chương trình cho prog, ta viết prog cho thích nó, viết prog | , prog thỏa mãn tất yêu cầu phát biểu khẳng định, prog ' | ' , prog’ với thích ' thỏa mãn kiểm chứng điều kiện hệ chứng minh: Định nghĩa 6.0.1 Một chương trình cho prog với thích , prog | với tất cấu hình đạt T , , , stm T , với tất môi trường logic prog, với tất tham chiếu tới giá trị tồn : , , | L pre stm , , | G GI Hơn nữa, với tất lớp c, đối tượng Val c , trạng thái cục ': , , ' | L I c Đối với phác thảo chứng minh, ta viết prog ' | ' prog’ với thích ' thỏa mãn kiểm chứng điều kiện hệ chứng minh 6.1 Tính đắn Tính đắn có nghĩa tất cấu hình đạt thỏa mãn khẳng định chúng chương trình thích – kiểm chứng sử dụng chứng minh điều kiện Tính đắn phương thức chứng minh quy nạp đơn giản số bước tính tốn - 59 - Trước bắt tay vào trình bày tính đắn chứng minh nó, ta cần hiểu rõ mối quan hệ chương trình gốc phác thảo chứng minh, có nghĩa là, chương trình gốc mở rộng biến phụ trợ, bao bọc với khẳng định Để tạo rõ ràng mối quan hệ chương trình gốc phác thảo chứng minh, ta định nghĩa toán tử chiếu prog , xóa tất phần thêm vào biến đổi Cho prog’ phác thảo chứng minh với prog, T ' , ' cấu hình tồn cục prog’ Thì ' prog định nghĩa bỏ tất biến thể phụ trợ từ miền trạng thái thể Với tập cấu hình luồng, T ' prog cho hạn chế miền trạng thái cục để biến phụ trợ bỏ tất bổ sung Thêm vào đó, với cấu hình cục , , return getlock stm !ret T ' , luồng thi hành tập đợi, nghĩa là, thread , n ' wait với số n đó, lệnh return getlock thay ? signal; return getlock Hơn nữa, với cấu hình cục , , stm; return stm' !ret T ' với stm phép gán phụ trợ phương thức notify phương thức notifyAll, phép gán phụ trợ stm thay theo thứ tự !signal !signal_all Bổ đề sau biểu thị biến đổi không thay đổi hành vi chương trình: Bổ đề 6.1.1 Cho prog’ phác thảo chứng minh với chương trình prog Thì T , cấu hình đạt prog tồn cấu hình đạt T ' , ' prog’ với T ' prog , ' prog T , Bổ đề 6.1.2 (Định danh) Cho T , cấu hình đạt phác thảo chứng minh Thì: với tất ngăn xếp ' T với tất cấu hình cục , , stm ' , ' , stm' ' ta có thread ' thread ' , với ngăn xếp , , stm0 n , n , stmn T số i, j n , (a) i thread ; (b) i < j i j kéo theo i conf j conf i counter , (c) < j kéo theo j caller j 1 , j 1 conf , j 1 thread , (d) proj caller , 3 thread , - 60 - proj v , i thành phần thứ i v Bổ đề sau phát biểu luồng sở hữu khóa, tập đợi tập thơng báo ngữ nghĩa trình bày biến lock, wait, notified Hơn nữa, bổ đề đảm bảo tính phân đoạn dãy lưu trữ biến wait notified; thứ tự phần tử không quan trọng, ta sử dụng tập ký hiệu cho giá trị chúng Bổ đề 6.1.3 (Lock, Wait, Notify) Cho T , cấu hình đạt phác thảo chứng minh với chương trình gốc prog, Val định danh đối tượng, cho , , stm0 ' T Hơn cho n số thi hành phương đồng , nghĩa là, n = | , , stm | stm synchr. | Thì: (a) owns T prog , lock free (b) owns prog , lock , n (a) wait T prog , , n wait (b) notified T prog , , n notified (c) proj wait i , 1 = proj wait j , 1 kéo theo i = j (d) proj notified i , 1 = proj noitified j , 1 kéo theo i = j (e) , m wait , m notified m = n (f) wait notified si thành phần thứ i dãy s Cuối cùng, biến thể phụ trợ started đối tượng lưu trữ luồng đối tượng khởi động không: Bổ đề 6.1.4 (Started) Đối với tất cấu hình đạt T , phác thảo chứng minh cho chương trình prog, tất đối tượng Val , ta có started T prog , started Cho prog chương trình với thích , prog’ phác thảo chứng minh tương ứng với thích ' Cho GI’ bất biến toàn cục ' , I c ' biểu thị - 61 - bất biến lớp nó, với khẳng định p cho p’ biểu thị khẳng định ' kết hợp với điểm điều khiển Ta viết | ' | G GI ' GI , | L I c ' I c tất lớp c, | L p p' , tất khẳng định p kết hợp với điểm điều khiển Để cho biến phụ trợ ngữ nghĩa, kéo theo ước lượng ngữ cảnh trạng thái chương trình bổ sung Định lý sau phát biểu tính đắn phương pháp chứng minh Định lý 6.1.5 (Tính đắn) Cho prog’ phác thảo chứng minh với thích prog ' Nếu prog ' | prog ' prog ' | prog ' Chứng minh tính đắn bao gồm chứng minh quy nạp chiều dài tính tốn, đồng thời tất ba phần từ định nghĩa 6.0.1 Đối với bước quy nạp, ta giả thiết kiểm chứng điều kiện thỏa mãn giả thiết cấu hình đạt thỏa mãn thích Ta tạo trường hợp khác biệt cú pháp bước tính tốn kế tiếp: Nếu bước tính tốn thi hành phép gán, ta sử dụng điều kiện tính đắn cục để chứng minh tính quy nạp thi hành thuộc tính cấu hình cục bộ, kiểm tra tính khơng có can thiệp tất cấu hình cục khác bất biến lớp khác Đối với giao tiếp, tính bất biến thi hành đối tác bất biến toàn cục chứng tỏ sử dụng kiểm tra hợp tác giao tiếp Giao tiếp với khơng ảnh hưởng trạng thái tồn cục; tính bất biến thuộc tính cịn lại quan sát tương ứng chứng tỏ với giúp đỡ của kiểm tra tính khơng có can thiệp Cuối cùng, tạo đối tượng, tính bất biến bất biến tồn cục, tạo cấu hình cục bộ, bất biến lớp đối tượng tạo đảm bảo điều kiện kiểm tra hợp tác tạo đối tượng; tất thuộc tính khác chứng tỏ bất biến thông qua sử dụng kiểm tra tính khơng có can thiệp Định lý 6.1.5 đưa tính đạt chương trình bổ sung Với giúp đỡ bổ đề 6.1.1, ta có : Hệ 6.1.6 Nếu prog ' | prog ' | prog ' prog , prog | prog - 62 - KẾT LUẬN Với phát triển không ngừng nhu cầu tính tốn, xử lý số liệu, khai phá thơng tin lập trình đa luồng ngày quan trọng phần thiếu hệ thống tính tốn, hệ thống ứng dụng Sự quan trọng cần thiết việc kiểm chứng tính chương trình ln quan tâm mức vai trị to lớn Kiểm chứng tính đắn chương trình Java đa luồng không mang ý nghĩa mặt lý thuyết kiểm chứng mà thực có vai trị khơng thể thiếu thực tế, qua giúp ta tránh sai lầm, thiếu sót dù nhỏ dẫn tới hậu thật khó lường Trong hệ thống địi hỏi tính an tồn cao hệ thời gian thực, hệ mô phỏng, hệ thống giám sát vệ tinh, máy bay kiểm chứng tính đắn chương trình mang ý nghĩa vơ to lớn Nó cho phép xác định tính đắn chương trình từ giả thiết khẳng định ban đầu mà khơng cần phải chứng thực điều chạy chương trình, mà thực tế chương trình chạy sai gây hậu vô nghiêm trọng Phương pháp kiểm chứng sử dụng để chứng minh tính khơng có deadlock chương trình Java Phác thảo chứng minh chương trình thỏa mãn điều kiện chứng minh tính khơng có deadlock chương trình khơng có deadlock Để kiểm chứng tính đắn chương trình Java đa luồng, ta sử dụng phương pháp trình bày Nó sở, tiền đề để xây dựng công cụ hỗ trợ việc kiểm chứng tự động Do thời gian thực đề tài có hạn phạm vi rộng lớn đề tài, khóa luận chưa đề cập hết phương pháp kỹ thuật đại kiểm chứng tính đắn chương trình, cơng cụ hỗ trợ kiểm chứng - 63 - TÀI LIỆU THAM KHẢO [1] Erika Abraham - An Assertional Proof System for Multitheaded Java – Theory and Tool Support WEBSITE: [2] http://www.cs.uiowa.edu/~fleck/181.html [3] http://en.wikipedia.org/wiki/Hoare_logic - 64 - ... TẮT KHĨA LUẬN Có nhiều phương pháp để kiểm chứng tính đắn chương trình Java đa luồng Một phương pháp sử dụng logic Hoare Kiểm chứng tính đắn chương trình Java đa luồng sử dụng logic Hoare yêu... thấy tính quan trọng việc kiểm chứng tính đắn chương trình Việc kiểm chứng tính đắn chương trình Java đa luồng khơng thể thiếu việc phát triển hệ thống Ta cần có phương pháp kiểm chứng tính đắn chương. .. tắc logic để lý luận tính đắn chương trình máy tính với tính xác logic toán học Logic Hoare sở để định nghĩa tính đắn hệ thống Trong khóa luận tốt nghiệp em trình bày phương pháp kiểm chứng tính