9

タクティカルを使用した有効な Coq 証明が与えられた場合、;それを有効な等価証明に変換するための一般式はあり.ます;か?

多くの Coq 証明では、タクティック;シーケンス タクティカルまたはタクティック シーケンスが使用されます。初心者として、個々のステップが実行されるのを見たいので、 を代用.したいのです;が、驚いたことに、これは証明を破る可能性があることがわかりました。

のドキュメント;はまばらで、明示的な議論は.どこにも見つかりませんでした。の非公式な意味はt1; t2

現在の証明コンテキストでt2の実行によって生成されたすべてのサブゴールに適用されます。t1

そして.、現在のサブゴールでのみ動作し、それが異なる動作を説明するのだろうか? しかし、特に代用による破損を修復するための一般的な解決策があるかどうかを知り.たい;.

4

1 に答える 1

16

のセマンティクスは、 によって作成されたすべてのサブゴールを実行しtac1 ; tac2てから実行することです。したがって、さまざまなケースに直面する可能性があります。tac1tac2tac1

走った後、ゴールはありませんtac1

実行後にゴールが残っていない場合、tac1thentac2は決して実行されず、Coq は黙って成功します。たとえば、この最初の導出では; intros、(有効な) 証明の最後に役に立たないものがあります。

Goal forall (A : Prop), A -> (A /\ A /\ A /\ A /\ A).
intros ; repeat split ; assumption ; intros.
Qed.

それを分離すると、Error: No such goal.証明するものが何もないときに戦術を実行しようとしているため、 が得られます!

Goal forall (A : Prop), A -> (A /\ A /\ A /\ A /\ A).
intros ; repeat split ; assumption.
intros. (* Error! *)

を実行した後、残りのゴールは 1 つだけtac1です。

tac1実行後にちょうど 1 つのゴールが残っている場合tac1 ; tac2、 は少し のように動作しますtac1. tac2。主な違いは、2 つの戦術のシーケンスが、tac2全体tac1 ; tac2として成功するか失敗するかのいずれかになるユニットとして見なされるため、失敗すると全体が失敗することです。しかし、tac2成功すれば、ほとんど同等です。

たとえば、次の証明は有効なものです。

Goal forall (A : Prop), A -> (A /\ A /\ A /\ A /\ A).
intros.
repeat split ; assumption.
Qed.

ランニングtac1は複数の目標を生み出します。

最後に、実行によって複数のゴールが生成された場合、生成されたすべてのサブゴールにtac1thenが適用されます。tac2実行中の例では、その後の一連の戦術を中断するとrepeat split、手に 5 つのゴールがあることがわかります。つまり、 をassumption使用して前に与えられた証明を複製するには、5 回コピー/貼り付けする必要があり;ます。

Goal forall (A : Prop), A -> (A /\ A /\ A /\ A /\ A).
intros ; repeat split.
 assumption.
 assumption.
 assumption.
 assumption.
 assumption.
Qed.
于 2016-03-29T22:17:19.870 に答える