Questions tagged «hoare-logic»

5
缺乏正确性证明的算法示例
我们有Hoare逻辑。为什么仍然有可能算法是正确的,但是没有证据证明它是正确的?假设算法用C表示。然后我们可以逐步论证它正在执行应做的事情。 所以我的问题是: 给我一个正确的算法示例,但没有正确性证明。 编辑:我认为有一点背景可以帮助阐明我要去的地方。让我引用斯科特·亚伦森的话: 自1970年代以来,一直有人猜测P NP可能独立于数学的标准公理系统(例如Zermelo-Fraenkel集理论)(即,既不可证明也不可证明)。需要明确的是,这意味着≠≠\ne 尚不存在用于NP完全问题的多项式时间算法,但我们永远无法证明它(至少在我们通常的形式系统中无法证明),否则 确实存在用于NP完全问题的多项式时间算法,但是我们永远无法证明它有效,或者我们永远无法证明它在多项式时间内停止。 我指的是第二种可能性。由于Aaronson可以如此自信地将其列出为一种可能性,因此我认为必须存在类型2的现有示例。这就是为什么我要问这个问题。但是似乎没有一个快速明确的答案。

1
从属类型,细化类型和Hoare逻辑之间的区别
我几乎不了解依赖类型理论。来自维基百科: 从属类型是其定义取决于值的类型。 从我的类型理论课程中,我记得一个从属类型是: 由类型索引的类型族。 但是我对依赖类型,细化类型和hoare逻辑感到困惑。 因为从Depenedent VS细化类型来看,细化类型看起来像Hoare逻辑。除了仅允许陈述必须满足的陈述之外,还有哪些功率改进类型还提供什么(看起来与Hoare Logic几乎相同)? 相较于细化类型,从属类型还提供了哪些其他功能?并且从属类型比优化类型+ Sat / Constraint求解器更强大。 任何人都可以举例说明。

2
在Hoare风格的正确性证明中如何处理数组
在围绕该问题的讨论中,Gilles正确地提到,使用数组的算法的任何正确性证明都必须证明没有越界的数组访问;根据运行时模型,这将导致运行时错误或访问非数组元素。 一种执行这种正确性证明的通用技术(至少在本科生中,可能在自动验证中)是使用Hoare逻辑。我不知道标准规则集包含与数组有关的任何内容;他们似乎仅限于单子变量。 我可以想象添加以下形式的公理 {0≤i<A.length∧P[A[i]/E]} A[i]:=E; {P}{0≤i<A.length∧P[A[i]/E]} A[i]:=E; {P}\qquad \displaystyle \frac{}{\{0 \leq i \lt A.\mathrm{length} \land {P[A[i]/E]} \}\ A[i] := E;\ \{P\}} 但是,我不清楚您将如何处理右侧的数组访问,即在某些语句x:= E中它是否是复杂表达式EEE的一部分。x:=Ex:=Ex := E 如何在Hoare逻辑中对数组访问进行建模,以便可以并且必须证明无效访问的存在以确保程序的正确性? 答案可能假设我们不允许数组元素比其他语句中使用或一些的一部分在,因为这不限制表现; 我们总是可以为临时变量分配所需的值,即写而不是。A[i]:=EA[i]:=EA[i] := EEEEx:=Ex:=Ex := Et:=A[i]; if(t>0)…t:=A[i]; if(t>0)…t := A[i];\ \mathtt{if} ( t > 0 ) \dotsif(A[i]>0)…if(A[i]>0)…\mathtt{if} ( A[i] > 0 )\dots
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.