Ошибка: невозможно привести к доступной ссылке в coq
Я пытаюсь развернуть Mem.load и получаю ошибку:
Ошибка: не удается принудительно
Mem.load
к оцениваемой ссылке.
Я написал то же самое Definition
из Mem.load
как load1
и разворачивается.
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.
1 ответ
Решение
compcert.common.Memory
Модуль определяет несколько имен, в том числе Mem.load
быть непрозрачным:
Global Opaque Mem.alloc Mem.free Mem.store Mem.load Mem.storebytes Mem.loadbytes.
Это означает, что это не может быть unfold
редактор
Прежде чем пытаться unfold Mem.load
просто скажи что это Transparent
после этого все будет работать:
Transparent Mem.load.
unfold Mem.load.