私はCoqを学び始めました。かなり単純なものを証明しようとしています。リストにxが含まれている場合、そのリストのxのインスタンス数は0より大きくなります。証明書がCOQで2つの再帰関数を展開することを含む
私は含まれており、以下のような機能を数える定義しました:私は証明しようとしている
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は非常に素晴らしい解決策を提示しました。 –