错误:无法强制到coq中的可计算引用
我正在尝试展开Mem.load,但出现错误: 错误:无法将错误:无法强制到coq中的可计算引用,coq,compcert,Coq,Compcert,我正在尝试展开Mem.load,但出现错误: 错误:无法将Mem.load强制为可计算引用 我编写了与load1完全相同的Mem.load定义,并且是可展开的 Require Import compcert.common.AST. Require Import compcert.common.Memory. Require Import compcert.common.Values. Require Import compcert.lib.Coqlib. Require Import compc
Mem.load
强制为可计算引用
我编写了与load1
完全相同的Mem.load
定义,并且是可展开的
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.
compcert.common.Memory
模块定义了几个不透明的名称,包括Mem.load
:
Global Opaque Mem.alloc Mem.free Mem.store Mem.load Mem.storebytes Mem.loadbytes.
这意味着它不能展开
在尝试展开Mem.load
之前,只需说它是透明的
,然后一切都会工作:
Transparent Mem.load.
unfold Mem.load.
我想说,我确信
Mem.load
是可以展开的,这是有充分理由的,因此OP应该重新考虑他们最初的策略。