のセマンティクスは、 によって作成されたすべてのサブゴールを実行しtac1 ; tac2
てから実行することです。したがって、さまざまなケースに直面する可能性があります。tac1
tac2
tac1
走った後、ゴールはありませんtac1
実行後にゴールが残っていない場合、tac1
thentac2
は決して実行されず、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
は複数の目標を生み出します。
最後に、実行によって複数のゴールが生成された場合、生成されたすべてのサブゴールにtac1
thenが適用されます。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.