06 Hoare Logic
这篇笔记介绍lecture11,Hoare Logic的内容。
基本概念
霍尔三元组
程序状态包括程序中所有使用变量的值。前置条件描述执行程序前的程序状态,后置条件描述执行程序后的程序状态。前置/后置条件可以是谓词逻辑公式。
如果程序C在初始满足前置状态的条件中执行,并且如果C的执行终止,则C的终止状态满足后置条件,那么程序C是部分正确的(注意,部分正确性不考虑程序是否可以终止)。可以用霍尔三元组来定义程序正确性。
霍尔三元组可以写作 ,其中 是前置条件, 是程序, 是后置条件。例如, 是部分正确的。
停机问题
停机问题指,是否存在一个算法可以给出任意程序是否会停止(基本上停止意味着终止)。
事实上没有通用算法可以解答停机问题。
命令式语言
简单起见,不考虑那些包含指针、函数、结构体、堆栈等待的程序。
那么命令式语言有以下几种:
skip:什么都不做a := e:赋值,将e的值赋值给as1; s2:顺序执行s1和s2if(b) {s1} else {s2}:如果b为真执行s1,否则执行s2while(b) {s}:在b为真时重复执行s