verifiable-c - forward_call 遇到问题 - “没有适用的策略”
问题描述
我正在阅读软件基础第 5 册。
在通过 body_push_increasing (verif-triang) 工作时,我试图通过调用来推送。之前的上下文是:
Espec : OracleKind
p : val
n : Z
gv : globals
Delta_specs := abbreviate : Maps.PTree.t funspec
Delta := abbreviate : tycontext
H : 0 <= n <= Int.max_signed
i : Z
HRE : i < n
H0 : 0 <= i <= N
POSTCONDITION := abbreviate : ret_assert
===========================
semax Delta (PROP () LOCAL (temp _i (Vint (Int.repr (i + 1)));
temp _n (Vint (Int.repr n));
temp _p p)
SEP (stack (decreasing i) p; mem_mgr gv))
(_push([(_p)%expr; (_i)%expr]);) POSTCONDITION
我正在尝试的命令是
forward_call (p, i + 1, decreasing i, gv)
消息失败
Error: No applicable tactic.
推送的规范是
DECLARE _push
WITH p : val, i : Z, l : list Z, gv : globals
PRE [tptr (tptr (Tstruct _cons noattr)), tint]
PROP (Int.min_signed <= i <= Int.max_signed)
PARAMS (p; Vint (Int.repr i)) GLOBALS (gv)
SEP (stack l p; mem_mgr gv)
POST [tvoid]
PROP () RETURN () SEP (stack (i :: l) p; mem_mgr gv)
(C 表示typedef struct cons *stack;
堆栈没有单元素结构)
我究竟做错了什么?
解决方案
......结果我忘了在前面输入“gvars gv” forward_while
。不是一个明显的陷阱。
推荐阅读
- django - Django获取集合中对象多对多字段的计数
- google-cloud-platform - 无法通过 gsutil 将文件 cp 到 Google 对象存储
- java - 将第一个单词移到最后一个单词,同时将第一个单词更改为小写
- python - 通过应用 Python 使用函数
- java - 应用程序启动方法 java.lang.reflect.InvocationTargetException Javafx fxml 中的异常
- firebase - Firestore 数据库中的云函数更新问题
- python - 如何关闭默认标题样式?
- arrays - 当 UIPanGesture 上的状态为 .ended 时循环遍历数组
- python-3.x - python scipy fmin没有成功完成
- python - 是否可以在 python json.dumps 中跳过输出特定键和关联值?