我已經開始學習Coq的,而且我想證明的東西,似乎相當簡單:如果列表包含X,然後在列表x的實例的數量將是> 0。證明涉及展開兩個遞歸函數COQ
我已經定義了包含與如下計數功能:
Fixpoint contains (n: nat) (l: list nat) : Prop :=
match l with
| nil => False
| h :: t => if beq_nat h n then True else contains n t
end.
Fixpoint count (n acc: nat) (l: list nat) : nat :=
match l with
| nil => acc
| h :: t => if beq_nat h n then count n (acc + 1) t else count n acc t
end.
我試圖證明:
Lemma contains_count_ge1 : forall (n: nat) (l: list nat), contains n l -> (count n 0 l > 0).
據我所知,證明將包括展開definitio納秒計數和包含,但然後我想說「列表不能爲零,因爲包含是真實的,所以必須有x
l
這樣的beq_nat h x
是真實的」,我已經玩了一下但無法弄清楚如何使用策略來做到這一點。任何指導將不勝感激。
感謝您的全面解釋!我不確定我應該在這裏選擇哪個答案,因爲在你詳細解釋我應該採取的方法時,另一個答案提供瞭如何在Coq中執行的代碼示例;這兩個答案都很有幫助。 – LogicChains
可以爲我工作; @ejgallego確實提出了一個非常好的解決方案。 –