Questions tagged «program-logic»

3
框架规则作为变更保存者?
一帧的规则,像下面给出的一个,捕获的想法,给定一个计划c与前提p保存在运行前和后置条件q保存后,一些不相交的条件r应之前和之后都保持c运行。(连接词*要求其参数不相交。)通常,前置条件和后置条件是堆的状态,并且c是一种有效的程序,可以某种方式修改堆。 {p} c {q} ----------------- (where no free variable in r is modified by c) {p * r} c {q * r} 我所看到的关于框架规则的讨论似乎总是集中在如何r保留堆的不相交部分上。这将启用“局部推理”:在对具有影响的效果进行推理时c,我们可以忽略r堆的一部分,而只关心实际更改的部分。但是另一种看待它的方法是,即使从那里p到qr现在都保留了从到的更改。换句话说,重要的是我们要以后置条件结束{q * r},而不是{q' * r}其他条件q'。 所以,我的问题是,是否有框架规则,讨论或利用保存-的变化-从-的任何治疗p至- q事情。

3
将终止降低到部分正确性有多难?
如果您熟悉程序验证,则可能更喜欢在“ 背景知识”之前阅读“ 问题 ” 。如果您不熟悉程序验证,那么您仍然可以回答这个问题,但是您可能更喜欢先阅读背景知识。 背景 人们经常说检查部分正确性是不确定的。为了便于讨论,让我们选择一种非常特殊的方式,使之以Floyd-Hoare的风格准确地表述。甲流图是带有区分的有向图的初始节点从所有的节点可达。甲程序是一个流图的节点是命令。有三种命令类型:(1)假设假设 q,(2)断言声明 q,以及(3)分配v:= e。这里q是fol(一阶逻辑)公式,e是fol项,v是变量。 我们说一个程序是部分正确时,有一种方法来注释每个节点X与前提A(X)和一个后置条件B(X) ,使得(1)的初始节点的先决条件是有效的,(2){ a(x) } x { b(x) }对所有命令x都成立,并且(3)(b(x)暗示a(y))对从x到y的所有边均有效。这里的Hoare三元组定义如下: { p } 断言 q { r }表示(p暗示(q和r))有效 { p } 假设 q { r }表示((p和q)暗示r)有效 { p } v:= e { r }表示((用e代替v的p表示r)有效 这就是为什么检查手工波浪参数这部分正确性是不可判定:当你在一些填写A(X)和部分B(X) ,你需要检查,如果一些阶逻辑公式是有效的,而且是不可判定。 在部分正确的情况下对终止进行编码的一种典型方法是添加一些特殊的断言,这些断言本质上说“自从我上次执行以来,就朝终止迈进了一步。” 必须放置这些进度断言,以使流程图上的所有无限遍历(从初始节点开始)都包含无限多个进度断言。更具体地说,假设进度断言的形式始终为assert u < v,其中u和v是正整数,在赋值u:= f之前,然后是赋值v:= …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.