[英]How can I prove following lemma in Coq?
我正在嘗試為以下引理編寫Coq po:
Require Export Coq.Structures.OrderedTypeEx.
Require Import FMapAVL.
Module M := FMapAVL.Make(Nat_as_OT).
Fixpoint cc (n: nat) (c: M.t nat):bool :=
match M.find n c with
| None => false
| _ => true
end.
Lemma l: forall (n: nat) (k:nat) (m: M.t nat), cc n m = true -> cc n (M.add k k m) = true.
我無法簡化(M.add kkm)
部分。
首先, cc
沒有遞歸調用,因此您應該使此定義成為普通定義(使用關鍵字Definition
而不是Fixpoint
)。
其次,如果您想對M.find
和M.add
的行為進行M.find
,則應查看描述這些功能的定理:定理M.find_2
, M.add_2
, MEeq_dec
和M.add_1
將很有用(我通過使用“ Search
命令找到了這些引理。 因此,首先展開cc
,然后根據( M.find nm
)的值進行M.find nm
,然后使用這些定理對語句中出現的函數進行邏輯M.find nm
。 請注意,函數M.MapsTo
在此問題中起關鍵作用。
我寧願不給您解決方案,因為它看起來像是對表進行推理的基本練習。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.