2016-11-17 4 views
0

例えば、specification_of_sumのような関数の仕様が与えられた場合、そのような関数が1つだけ存在することをCoqでどのように証明できますか?仕様が与えられたCoqの関数の一意性を証明する方法は?

私は数学を勉強していますが、これを証明することはできますが、Coqのスキルは限られています(rewriteapplyを使って証明されています)。

私は下にあるコードスニペットを見つけました。これはしばらくの間苦労しています。

私は証明で仕様を広げようとしていますが、私の旧友である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. 

答えて

1

次の開始は、本質的です。

intros sum1 sum2 H1 H2 f n. (* introduce all the hypotheses *)          
unfold specification_of_sum in *. (* unfold definition in all places *)        
specialize H1 with (f := f). (* narrow statement to be about f *)         
specialize H2 with (f := f). (* narrow statement to be about f *)         
inversion_clear H1. (* split up the AND statements *)            
inversion_clear H2.                     
(* induction on n, and do rewrites *) 

さらに基本的なコマンドをいくつか追加して、速度を落としやすくしました。証明の残りの部分にはrewritereflexivityが必要です。

+0

ありがとう、これは私の証明をキックスタートするために必要でした:-) – Shuzheng

+0

inversion_clearを「より単純な」ものに置き換えることは可能ですか? – Shuzheng

+1

確かに逆転クリアは仮説を処理する適切な方法ではありません、私の答えに正しい方法(イントロパターン)があります。 – ejgallego

1

誘導を使用してこれを証明する必要があります。nあなたの仕様が0n.+1のケースをカバーしているので、誘導を使用するのは当然です。

誘導については、基本的にあなたが選んだCoqの本を読むことができます。

あなた仕様の使用方法の例は次のとおりです。ejgallegoは、すでに述べたよう

intros sum1 sum2 s1_spec s2_spec f n. 
specialize (s1_spec f) as [s1_spec0 s1_specS]. 
specialize (s2_spec f) as [s2_spec0 s2_specS]. 
+0

しかし、仕様を使用する構文が見つかりません。どのように書き直したり適用したりできますか?見せてもらえますか? – Shuzheng

+0

'special1(spec1 f)'を使うことをお勧めします。ここで 'spec1'は' sum1'の仕様です。 'spec1でunfold specification_of_sum 'を実行することもできますが、それは必要ではありません。定義は通常Coqで自動的に展開されます。 – ejgallego

+0

あなたは例を挙げますか?私は間違いを続けている。 – Shuzheng

関連する問題