Tại sao nhà nước vẫn không thay đổi trong ngữ nghĩa hoạt động bước nhỏ của một vòng lặp while?


9

Thông thường tôi thấy rằng trong biểu diễn ngữ nghĩa hoạt động cấu trúc cho vòng lặp while, trạng thái chương trình không thay đổi:

(whileBdoS,σ)(ifBthenS;(whileBdoS)elseSKIP,σ)

Đối với tôi, điều này không trực quan, nếu trạng thái không thay đổi (nghĩa là trạng thái của bộ nhớ vẫn giữ nguyên) thì sẽ tiếp tục giữ nguyên và chương trình sẽ không bao giờ chấm dứt.B

Bất cứ ai có thể giải thích tại sao nhà nước không thay đổi trong quy tắc này?


Lưu ý rằng điều này chỉ đúng nếu chúng ta có thể cho rằng không có tác dụng phụ. Điều này không đúng trong hầu hết các ngôn ngữ lập trình. B
Raphael

Câu trả lời:


10

Trong ngữ nghĩa ngôn ngữ lập trình, khái niệm trạng thái chương trình không phải là một khái niệm triết học mơ hồ, mà là một khái niệm toán học rất chính xác. Một nhà nước trong này nhỏ bước ngữ nghĩa hoạt động là một hàm từng phầns

s:VarZ

ghi lại các giá trị của các biến. Vì vậy, nếu , sau đó biến x có giá trị v . Trạng thái nhất thiết phải là một hàm, vì nó chỉ có ý nghĩa để ghi lại các giá trị của các biến thực sự xảy ra.sx=vxv

Tiên đề mở ra

whilebdoS,sifbthenS;whilebdoSelse skip,s

chỉ đơn giản là nói với chúng ta rằng chúng ta mở ra một vòng lặp while thành một câu lệnh có điều kiện, một trong những nhánh của nó chứa vòng lặp. Không có biến nào sẽ thay đổi giá trị của chúng vì điều này và vì lý do này, trạng thái không thay đổi.


10

Trạng thái có thể thay đổi trong các bước giảm tiếp theo vì ở phía bên phải của

while B do S,σif B then (S; while B do S) else skip,σ

các -loop được bảo vệ (preceeded) bởi S . Tính toán của S có thể thay đổi trạng thái để điều kiện B có thể đánh giá thành f a l s e .whileSSBfalse


Vì vậy, điều này có nghĩa là sự thay đổi trạng thái nên được thể hiện trong các quy tắc khác mà S có thể được giảm tiềm năng trong một chương trình cụ thể?
El Marce

@ElMarce Vâng. Tôi đề nghị đi qua một ví dụ đơn giản, ví dụ và xem cách thức hoạt động của nó. x:=2; while x>0 do x:=x1
Martin Berger

9

Tình trạng không thay đổi khi chúng ta xem xét B để quyết định xem có nên thực hiện một lần lặp của vòng lặp, nhưng nó có thể thay đổi sau khi chúng tôi chạy cơ thể S . Và như vậy, lần sau khi chúng ta xem xét B , có thể có một sự thay đổi của σ .σBSBσ


Giải thích này, về cơ bản là chính xác, không đề cập đến các trạng thái là gì (cụ thể là một hàm cho chúng ta biết các giá trị của varialbes) và những gì một thay đổi trạng thái biểu thị (cụ thể là giá trị của ít nhất một biến thay đổi).
Hans Hüttel

Thật vậy, không liên quan gì đến các trạng thái hoặc cách chúng được thực hiện cho mục đích trả lời của tôi. Các giải thích giữ bất kể. Và hơn nữa, thật sai lầm khi nói rằng "các trạng thái thực sự là chức năng" bởi vì theat chỉ là một cách để mô hình hóa chúng theo toán học. Có những mô hình khác có thể. Và chúng ta đừng nhầm lẫn các mô hình toán học với cách thức hoạt động của phần cứng.
Andrej Bauer

Nhưng câu hỏi liên quan đến một ngữ nghĩa hoạt động bước nhỏ cụ thể, trong đó khái niệm về một trạng thái được xác định rõ.
Hans Hüttel

Tôi chưa bao giờ nói nó không phải. Tôi chỉ nói rằng nhận xét của bạn là không cần thiết, bởi vì lời giải thích của tôi giữ mà không đề cập rõ ràng về cách thức nhà nước được mô hình hóa. Có lẽ bạn đã phát hiện ra rằng OP không biết trạng thái đó là bản đồ từ các biến đến các giá trị. Tốt cho bạn, bạn đã chấp nhận câu trả lời của bạn, và tôi thì không. Xin chúc mừng. Tại sao bây giờ bạn buộc chế độ trả lời của bạn đối với tôi là ngoài tầm hiểu biết của tôi. Tại sao chính xác bạn cảm thấy cần phải làm cho câu trả lời của tôi giống như của bạn? Câu trả lời của tôi có ý nghĩa mà không cần nhận xét mà bạn nghĩ là cần thiết. Có lẽ ai đó sẽ đến bằng cách tìm kiếm câu trả lời của tôi một ngày.
Andrej Bauer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.