【中国科学技術大学-形式化】パートB:述語論理

このセクションでは、Coqを使用して述語論理の定理を証明する方法を学習します。Coqでは、命題変数のような集合変数を宣言できます。 

変数AB:セット

。AとBがセット変数であることを宣言する前に。次に、セットAでいくつかの述語変数PとQを宣言します。

Variables P Q: A -> Prop.

PとQは、Aから要素を取得してPropを返す関数と考えることができます。a:Aなどの要素のセットがある場合、P(a)を使用し
て、命題P満たされていることを示すことができます同じメソッドを使用して、いくつかの要素に関連する属性を宣言できます。たとえば、次の方法で関係Rを導入して、AとBを接続できます。

Variable R : A -> B -> Prop.

ここで、R abはaとbの関係を表します。Rは、2つのパラメーターを持つ関数と考えることができます。

 

全称記号(全称記号)

Coqでは、キーワードforallは全称記号を表すために使用されます。forall x:A、P xと書くと、Aのすべての要素が命題Pを満たすことを示し、forall x:A、P x-> Q xは、Aの任意の要素が命題Pを満たし、命題Qを満たすことを意味します。

Variables A: Set.
Variables P Q: A -> Prop.
Theorem example4 :
        (forall x: A, P x -> Q x) -> (forall x: A, P x) -> forall x: A, Q x.
    Proof.
        intros H1 H2 a.
        apply H1.
        apply H2.
    Qed.

この例は、「すべてのAがプロパティPを満たし、Qも満たす」という大前提、「すべてのAがプロパティPを満たしている」、結論は「すべてのAがQを満たしている」という三段論法と見なすことができます。

これを証明するためにいくつかの手順を使用します。最初のステップでは、戦略の紹介を使用します。このステップの後、前提「a:A」と2つの仮説H1およびH2を取得します。戦略の導入により、仮説aが導入されます。A。この仮説では、すべてのターゲットでxが出現するたびにaに置き換えられるため、ターゲットはQになります。

仮説H1があります:すべてのx:A、P x-> Q xについて、Q aを証明したいので、アプリケーションH1を使用して仮説H1をP a-> Q aにインスタンス化できます。これにより、含意がなくなります。 Prove Paが必要です。

最後のステップで除去を行います。H:forall x:A、Pがわかっていて、Pを証明したい場合(xはAに置き換えられます)、H2を使用してPを証明します。 

演習3: 次の述語論理命題を証明してみてください。

       ∀x.(~P(x) /\ Q(x)) -> ∀x.(P(x) -> Q(x))  

演習4: 次の述語論理命題を証明してみてください。

       ∀x.(P(x) -> Q(x)) -> ∀x.~Q(x) -> ∀x.~P(x)    

演習5: 次の述語論理命題を証明してみてください。

       ∀x.(P(x) /\ Q(x)) <-> (∀x.P(x) /\ ∀x.Q(x))

存在記号

Coqでは、キーワードexistsは、存在の数量化を示すために使用されます。Aの要素xが命題Pを満たすことを示すためにexistsx:A、Pxと  書くことができます

Theorem example5 :
        (exists x: A, P x) -> (forall x: A, P x -> Q x) -> exists x: A, Q x.
    Proof.
        intros H1 H2.
        destruct H1 as [a p].
        exists a.
        apply H2.
        apply p.
    Qed.

2つの仮説H1とH2をコンテキストに導入した後、仮説と目標に存在するシンボルを処理する必要があります。存在の定量化の戦略は、接続の定量化の戦略に似ています。存在を証明する式x:Q x、xの値が存在を満たし、Qのすべてのxを置き換えると仮定できます。この定理では、H1:が存在するx:A、P xであると仮定します。これは、a:AとP:aの2つの仮説に分解できます。

 

戦略の存在は、ターゲット内のすべての「x」を「a」に置き換えます。これは、存在の排除です。 

最後のアプリケーション操作は例4と同じです。  

 

 

演習6: 次の述語論理命題を証明してみてください。

       ∃x.(~P(x) \/ Q(x)) -> ∃x.(~(P(x) /\ ~Q(x)))   

演習7: 次の述語論理命題を証明してみてください。

       ∃x.(~P(x) /\ ~Q(x)) -> ∃x.~(P(x) /\ Q(x))    

演習8: 次の述語論理命題を証明してみてください。

       ∃x.(P(x) \/ Q(x)) <-> (∃x.P(x) \/ ∃x.Q(x))

 #中科大软院-hbj形式化されたコースノート-メッセージを残してプライベートメッセージを交換することを歓迎します

 

 

 

 

 

 

 

 

 

おすすめ

転載: blog.csdn.net/weixin_41950078/article/details/109655738