✨Luận lý Hoare

Luận lý Hoare

Luận lý Hoare (còn được biết đến với tên Luận lý Floyd–Hoare) là một hệ chính quy do nhà khoa học máy tính người Anh C. A. R. Hoare phát triển, và sau đó được Hoare và những nhà nghiên cứu khác tinh lọc lại. Mục đích của hệ thống là cung cấp một tập các quy luật luận lý để suy luận tính đúng đắn của các chương 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 trong bài báo năm 1969 của Hoare, ở đó Hoare đã sử dụng lại những đóng góp trước đó của Robert Floyd, người đã xuất bản một hệ thống tương tự dành cho sơ đồ luồng (flowchart).

Đặc điểm trung tâm của luận lý Hoarebộ ba Hoare. 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. Bộ ba Hoare có dạng

:{P}\;C\;{Q}

trong đó PQ là những khẳng địnhC là một mệnh lệnh. P được gọi là tiền điều kiệnQhậu điều kiện. Những khẳng định là những công thức có dạng luận lý vị từ.

Luận lý Hoare có những tiên đề và luật suy diễn dành cho tất cả những mẫu cơ bản của ngôn ngữ lập trình mệnh lệnh. Ngoài các luật dành cho ngôn ngữ đơn giản trong bài báo nguyên thủy của Hoare, những luật dành cho những mẫu ngôn ngữ khác cũng đã được phát triển từ lúc đó bởi Hoare và nhiều nhà nghiên cứu khác. Có những luật dành cho đồng thời, thủ tục, nhảy, và con trỏ.

Tính đúng đắn bộ phận và toàn phần

Luận lý 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. Do đó cách diễn dịch bộ ba Hoare là: Nếu P là trạng thái trước khi thực thi C, thì Q sẽ là trạng thái sau khi thực thi nó, hoặc C không dừng (chạy vô tận). Chú ý rằng nếu C không dừng thì sẽ không có khái niệm "sau", do đó Q có thể là bất cứ thứ gì. Thực vậy, người ta có chọn Q là false để diễn tả rằng C không dừng.

Tính đúng đắn toàn phần cũng có thể được chứng minh bằng phiên bản mở rộng của quy luật While.

Các quy luật

Luật tiên đề rỗng

: \frac{}{{P}\ \textbf{skip}\ {P\ !

Luật về phát biểu gán

Tiên đề gán chỉ ra rằng sau phép gán, bất kỳ vị từ nào chứa biến là true đối với vế phải phép gán:

: \frac{}{{P[E/x]}\ x=E \ {P} } !

Ở đây P[E/x] chỉ ra rằng biểu thức P trong đó 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 của tiên đề gán này là giá trị đúng sai của {P[E/x]} là tương đương với giá trị đúng sai của {P} sau khi gán. Do đó nếu {P[E/x]}true trước phép gán, nhờ tiên đề gán {P} cũng sẽ true sau phép gán. Ngược lại, nếu {P[E/x]}false trước phép gán, thì chắc chắn {P} phải là false sau phép gán.

Các ví dụ về những bộ ba đúng:

:{x+1 = 43}\ y:=x + 1\ { y = 43 }! :{x + 1 \leq N }\ x:= x + 1\ {x \leq N}\ !

Tiên đề gán do Hoare đưa ra không áp dụng vào trường hợp có nhiều hơn một tên cùng chỉ một giá trị lưu trữ. Ví dụ,

:{ y = 3} \ x:= 2\ {y = 3 }

là không đúng nếu xy cùng đại diện cho một biến, vì không có tiền điều kiện nào có thể khiến cho y bằng 3 sau khi x được gán bằng 2.

Luật ghép

Luật về phát biểu ghép của Hoare áp dụng cho những chương trình được thực thi tuần tự ST, trong đó S thực thi trước T và được viết là S;T.

: \frac {{P}\ S\ {Q}\, \ {Q}\ T\ {R} } {{P}\ S;T\ {R\ !

Ví dụ, xét hai phát biểu sau:

:{ x + 1 = 43} \ y:=x + 1\ {y =43 }

:{ y = 43} \ z:=y\ {z =43 }

Theo luật ghép, ta có thể kết luận:

:{ x + 1 = 43} \ y:=x + 1; z:= y\ {z =43 }

Luật điều kiện

:\frac { {B \wedge P}\ S\ {Q}\,\ {\neg B \wedge P }\ T\ {Q} } { {P}\ \textbf{if}\ B\ \textbf{then}\ S\ \textbf{else}\ T\ \textbf{endif}\ {Q} } !

Luật While

:\frac { {P \wedge B }\ S\ {P} } { {P }\ \textbf{while}\ B\ \textbf{do}\ S\ \textbf{done}\ {\neg B \wedge P} } !

Ở đây P là điều kiện bất biến của vòng lặp.

Luật hệ quả

: \frac { P^\prime \rightarrow\ P\,\ \lbrace P \rbrace\ S\ \lbrace Q \rbrace\,\ Q \rightarrow\ Q^\prime } { \lbrace P^\prime\ \rbrace\ S\ \lbrace Q^\prime\rbrace } !

Luật While dành cho tính đúng đắn toàn phần

:: \frac { {P \wedge B \wedge t = z }\ S\ {P \wedge t < z } \,\ P \rightarrow t \geq 0} { {P }\ \textbf{while}\ B\ \textbf{do}\ S\ \textbf{done}\ {\neg B \wedge P} } !

Trong luật này, ngoài việc giữ các điều kiện bất biến vòng lặp, ta cũng phải chứng minh dừng bằng cách chứng minh giá trị của một số hạng giảm dần sau mỗi lần lặp, ở đây là t. Chú ý rằng t phải là giá trị thuộc tập chắc chắn, để cho mỗi bước lặp có thể tính được bằng cách giảm giá trị đi một chuỗi hữu hạn.

Ví dụ

:

👁️ 1 | 🔗 | 💖 | ✨ | 🌍 | ⌚
**Luận lý Hoare** (còn được biết đến với tên **Luận lý Floyd–Hoare**) là một hệ chính quy do nhà khoa học máy tính người Anh C. A. R. Hoare phát triển, và sau đó được
Sir **Charles Antony Richard Hoare** (**Tony Hoare** hay **C.A.R. Hoare**, sinh ngày 11 tháng 1 năm 1934) là một nhà khoa học máy tính người Anh, có lẽ nổi tiếng nhất vì đã phát triển
**Diana Spencer, Thân vương phi xứ Wales** (Diana Frances Spencer; 1 tháng 7 năm 1961 – 31 tháng 8 năm 1997), báo chí Việt Nam thường gọi là **Công nương** thay vì là **Vương phi**,
"**Bộ quần áo mới của hoàng đế**" () là một truyện ngắn của nhà văn Hans Christian Andersen về việc hai người thợ dệt hứa với vị hoàng đế là sẽ dệt cho ông một
**Hội Quốc Liên** là một tổ chức liên chính phủ được thành lập vào ngày 10 tháng 1 năm 1920 theo sau Hội nghị hòa bình Paris nhằm kết thúc Thế Chiến 1. Đây là
**Honduras thuộc Anh** là thuộc địa Vương quốc Anh trên bờ biển phía đông của Trung Mỹ, phía nam Mexico, từ 1862 đến 1964, sau đó là thuộc địa tự quản, đổi tên thành Belize
**Pascal** là một ngôn ngữ lập trình cho máy tính thuộc dạng mệnh lệnh và thủ tục, được Niklaus Wirth phát triển vào năm 1970. Pascal là ngôn ngữ lập trình đặc biệt thích hợp
**HMS _Ark Royal_ (91)** là một tàu sân bay của Hải quân Hoàng gia Anh đã từng hoạt động trong Chiến tranh thế giới thứ hai. Đây là loại tàu sân bay kiểu cũ có
**Gamal Abdel Nasser Hussein** (ngày 15 tháng 1 năm 1918 – ngày 28 tháng 9 năm 1970) là chính khách người Ai Cập, tổng thống Ai Cập từ năm 1954 tới khi qua đời vào
Trong việc lập trình, các ngôn ngữ lập trình thường được coi là **kiểu yếu** hoặc **kiểu mạnh**. Nói chung thì các khái niệm này không có định nghĩa chính xác cụ thể. Thực ra,
thumb| Tủ đựng đồ quý của [[Ole Worm từ _Museum Wormianum,_ 1655]] **Nhà nghiên cứu đồ cổ** hay **người sưu tầm đồ cổ** (bắt nguồn từ tiếng Latin: _antiquarius_, có nghĩa là liên quan đến
Ngày **11 tháng 1** là ngày thứ 11 trong lịch Gregory. Còn 354 ngày trong năm (355 ngày trong năm nhuận). ## Sự kiện *937 – Cho rằng không thể chống lại nổi liên quân
**Benito Amilcare Andrea Mussolini** (; 29 tháng 7 năm 1883 – 28 tháng 4 năm 1945). Được gọi là _Il Duce_ (Quý Lãnh tụ), Mussolini là người sáng lập ra chủ nghĩa phát xít Ý.Năm
là một giải thưởng hàng năm của Quỹ Inamori, do Inamori Kazuo thành lập từ năm 1985. Đây là một giải thưởng của Nhật Bản có mục đích tương tự như giải Nobel, là nhìn
**ALGOL** (viết tắt từ **ALGO**rithmic **L**anguage) là một họ các ngôn ngữ lập trình máy tính bắt buộc được phát triển vào năm 1958. ALGOL ảnh hưởng lớn đến nhiều ngôn ngữ khác và là
Từ khi bắt đầu chiến tranh lạnh, chính quyền Mỹ đã nhiều lần thông qua CIA để giật dây các lực lượng bất đồng chính kiến, hỗ trợ tiền của, vũ khí nhằm giúp các