首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:不能强制使用coq中的可评估引用。

错误:不能强制使用coq中的可评估引用。
EN

Stack Overflow用户
提问于 2016-10-14 19:49:37
回答 1查看 604关注 0票数 1

我正在尝试展开Mem.load,我得到了一个错误:

错误:不能强迫Mem.load到可评估的引用。

我写的Definition of Mem.loadload1完全一样,是不可折叠的。

代码语言:javascript
复制
Require Import compcert.common.AST.
Require Import compcert.common.Memory.
Require Import compcert.common.Values.
Require Import compcert.lib.Coqlib.
Require Import compcert.lib.Maps.

Local Notation "a # b" := (PMap.get b a) (at level 1).

Definition load1 (chunk: memory_chunk) (m: mem) (b: block) (ofs: Z): option val :=
  if Mem.valid_access_dec m chunk b ofs Readable
  then Some(decode_val chunk (Mem.getN (size_chunk_nat chunk) ofs (m.(Mem.mem_contents)#b)))
  else None.

Lemma mem_load_eq: forall (c : memory_chunk) (m : mem) (b : block) (ofs : Z),
(load1 c m b ofs) = (Mem.load c m b ofs).
Proof.
  intros.
  unfold load1.
  unfold Mem.load. (*I get error here when unfolding *)
Admitted.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-14 20:22:33

compcert.common.Memory模块定义了几个名称,包括不透明的Mem.load

代码语言:javascript
复制
Global Opaque Mem.alloc Mem.free Mem.store Mem.load Mem.storebytes Mem.loadbytes.

这意味着它不能被unfold编辑。

在尝试unfold Mem.load之前,只要说它是Transparent,在那之后,一切都会正常运行:

代码语言:javascript
复制
Transparent Mem.load.
unfold Mem.load.
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40050969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档