例えば、specification_of_sum
のような関数の仕様が与えられた場合、そのような関数が1つだけ存在することをCoqでどのように証明できますか?仕様が与えられたCoqの関数の一意性を証明する方法は?
私は数学を勉強していますが、これを証明することはできますが、Coqのスキルは限られています(rewrite
とapply
を使って証明されています)。
私は下にあるコードスニペットを見つけました。これはしばらくの間苦労しています。
私は証明で仕様を広げようとしていますが、私の旧友であるrewrite
を使って私はさらに進まないようです。
単純な構文を使用してこの問題にアプローチする方法を説明できる人はいますか?
Definition specification_of_sum (sum : (nat -> nat) -> nat -> nat) :=
forall f : nat -> nat,
sum f 0 = f 0
/\
forall n' : nat,
sum f (S n') = sum f n' + f (S n').
(* ********** *)
Theorem there_is_only_one_sum :
forall sum1 sum2 : (nat -> nat) -> nat -> nat,
specification_of_sum sum1 ->
specification_of_sum sum2 ->
forall (f : nat -> nat)
(n : nat),
sum1 f n = sum2 f n.
Proof.
Abort.
ありがとう、これは私の証明をキックスタートするために必要でした:-) – Shuzheng
inversion_clearを「より単純な」ものに置き換えることは可能ですか? – Shuzheng
確かに逆転クリアは仮説を処理する適切な方法ではありません、私の答えに正しい方法(イントロパターン)があります。 – ejgallego