霍尔逻辑 |什么post条件在死循环时有效?

Hoare Logic | What post-condition is valid when there is an infinite loop?

我的老师告诉我以下说法是有效的: {x > 3} while true (x := 3) {x = 3}

为什么这个说法有效? 是因为 post-条件永远不会被检查,还是 post-条件现在算作不变检查?

简而言之:当存在无限循环时,post条件可以是任何东西吗?

那么这将是有效的:{x > 3} while true (x := 3) {x = 0}

一个无限循环可以有任何后置条件(包括一些完全愚蠢的东西,比如 1=0)并且它会空洞地为真。事实上,始终为假的后置条件是一种强制循环永远不会退出的方法。