ASL中的前提条件和后条件

时间:2013-10-15 09:29:12

标签: frama-c

我无法区分ACSL中的各种前提条件和后置条件。据我所知,需要,终止和假设是在前提条件下确保并分配后置条件。但是在哪个集合休息如减少等等?

任何人都可以帮助我搞清楚吗? 提前谢谢

2 个答案:

答案 0 :(得分:3)

这是一个棘手的问题。基本上,decreases将作为递归调用的先决条件:如果您有f函数decreases x;,如果碰巧调用自身,则必须证明在此通话网站x<\at(x,Pre)。此外,当您拨打x>=0(递归通话或不通话)时,您有f的前提条件。 关于其他条款(根据ACSL 1.7中的上诉顺序:

  • completedisjoint子句基本上是合同assumes子句的逻辑属性,它们并不意味着实现任何内容,而是作为规范的完整性检查。本身。
  • allocatesfrees是后置条件(例如assigns,但关于动态分配)
  • exits(以及returnsbreakscontinues)是后置条件(当我们退出函数或语句时会对它们进行评估)。
  • 依赖项(\from)是后置条件(如assigns)。

答案 1 :(得分:2)

ACSL的

减少子句基本上用于递归函数调用。 如果你用指针变量x指定了reduce子句,那么:reduce * x; 那意味着,每当控制进入与此减少子句相关的函数时,它会检查指针x指向的值是否比函数的预先状态期间x指向的值小1 。在调用该函数时,第一次检查前置条件为:(* x)&gt; = 0,因为函数处于预先状态,因此没有要比较的预状态值。