否定:戦術が展開する
Coqは、記号〜を使用して命題の否定を示します。〜PはP-> Falseの文法です。次のように、否定を使用して定理を確立できます。
Theorem example_1: forall P: Prop,
~(P /\ ~P).
Proof.
unfold not.
intros.
inversion H.
apply H1.
apply H0.
Qed.
演習1:〜(P \ / Q)-> 〜P / \ 〜Q
Theorem exercise_1: forall P Q :Prop,
~(P \/ Q) -> ~P /\ ~Q.
Proof.
unfold not.
intros.
split.
intros.
destruct H.
left.
apply H0.
intros.
destruct H.
right.
apply H0.
Qed.
ポリシーアサーション(アサート)
場合によっては、現在の目標を中間目標から証明する必要があります。アサートまたはアサート(h:h)戦略は、hを新しいサブゴールとして導入します。新しいゴールを証明した後、仮説h:hを使用して元のゴールを証明できます。以下に例を示します。
Theorem example2 : forall P Q: Prop,
(P /\ ~P) -> Q.
Proof.
unfold not.
intros.
assert (f : False).
inversion H.
apply H1.
apply H0.
inversion f.
Qed.
戦略の破壊(破壊)
割り当て2では、反転戦略を使用して、仮想の接続または分離を解除します。接続詞と論理和を処理するために、より一般的に使用されるもう1つの戦略があります。それは、破壊戦略です。この戦略は、1つの仮説P / \ Qを2つの仮説PとQに置き換えます。または、仮説が別個のP \ / Qである場合、この戦略は2つのサブゴールを生成します。1つのPで保持し、別のQで保持します。戦略の破棄は、帰納型のコンストラクターごとにサブゴールを生成することもできます。
Theorem example3 : forall P Q R: Prop,
P \/ Q -> (P -> R) -> (Q -> R) -> R
Proof.
intros.
destruct H as [Hp|Hq].
apply H0 in Hp.
apply Hp.
apply H1 in Hq.
apply Hq.
Qed.
演習2: 戦術的破壊を使用して証明する
P /\ (Q \/ R) <-> (P /\ Q) \/ (P /\ R).
Theorem exercise_1: forall P Q R:Prop,
P /\ (Q \/ R) <-> (P /\ Q) \/ (P /\ R).
Proof.
intros.
split.
intros.
inversion H.
destruct H1 as [Hq | Hr].
left.
split.
apply H0.
apply Hq.
right.
split.
apply H0.
apply Hr.
intros.
inversion H.
destruct H as [H1 | H2].
split.
inversion H0.
apply H.
inversion H0.
left.
apply H2.
inversion H2.
split.
apply H.
right.
apply H1.
inversion H0.
split.
apply H1.
right.
apply H2.
Qed.
中国科学技術大学-hbj教師がコースノートを正式に作成-メッセージを残したり、プライベートメッセージを交換したりすることを歓迎します