2017-03-14 19 views
2

Coqでアサートを許可する方法はありますか?Coq:Admit assert

は、私はこのような定理があるとします。

Theorem test : forall m n : nat, 
    m * n = n * m. 
Proof. 
    intros n m. 
    assert (H1: m + m * n = m * S n). { Admitted. } 
Abort. 

上記のassertが私のために動作するようには思えません。

私が受け取るエラーは、次のとおりです。

Error: No focused proof (No proof-editing in progress). 

私が欲しいHaskellではundefinedのようなものです。 Baiscally、私はこれに後で戻ってそれを証明するでしょう。それを達成するためにCoqのようなものがありますか?

+1

一般に、戦術的な「承認」(小文字の最初の文字)は、現在の副目標を認める。したがって、 'あなたの主張を主張する '。あなたの主張>あなたのケースではうまくいくはずです。 – ichistmeinname

+0

@ichistmeinnameありがとう、それは動作します。それを回答として投稿できますか? – Sibi

答えて

3

一般に、戦術admit(小文字の最初の文字)は現在の副目標を認めます。したがって、assert <your assertion>. admit.はあなたのケースで動作するはずです。

または以下のように完全に栄光してください。

Theorem test : forall m n : nat, 
    m * n = n * m. 
Proof. 
    intros n m. 
    assert (H1: m + m * n = m * S n). admit. 
Abort. 

編集:あなたはすべてのサブゴールを認めたくはありませんので、;とバージョンは、ナンセンスです。

+3

また、Coq 8.5(以前はないと思います)では、結果を保存したい場合は 'Qmit.' /' Defined.'の代わりに 'admit'を使用してプルーフスクリプトを終了する必要があります。 –

+1

@ AntalSpector-Zabuskyバージョン '8.4pl4'では、' Qed'でそれを終わらせてくれます。 – Sibi

+4

他の構文は、 '' assert(H1:m + m * n = m * S n)by admit.''です。 – eponier

関連する問題