You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

E-ACSL编写循环不变量时报guard invalid错误的原因是什么?

报错触发原因

E-ACSL 是 ACSL 规范的运行时验证实现,它要求全称量词\forall的量化域必须是可枚举的连续有限整数区间,不支持在量词的顶层守卫中混入区间外的额外筛选条件。

你原注解的写法将j%2==0的奇偶筛选条件和4<=j<i的区间条件合并作为全称量词的顶层守卫,相当于要求工具遍历所有满足「在4到i区间内且为偶数」的整数,但这类非连续的量化范围无法被E-ACSL识别,因此会抛出invalid guard警告并忽略注解。

修复方案

调整条件的层级,将区间约束单独作为量词的作用域,把奇偶筛选条件移到蕴含式的前件位置,调整后的逻辑和原逻辑完全等价,同时符合E-ACSL的语法要求:

/*@ loop invariant (\forall integer j; 4<=j<i ==> (j%2==0 ==> prime[j]==2));
  */
for (int i = 4; i <= n; i += 2) {
  prime[i] = 2;
}

调整后量化的j的范围是连续的[4, i-1]整数区间,E-ACSL可以枚举区间内所有整数逐个校验规则,不会再抛出无效构造警告。

内容的提问来源于stack exchange,提问作者João Teixeira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:39:01