【中科大软院-形式化】Part B: Predicate Logic

在本节中,我们将学习如何使用Coq来证明谓词逻辑定理。在Coq中,我们可以像声明命题变量一样声明集合变量: 

Variables A B: Set.

在我们声明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 a b表达了a和b的关系,你可以把R看作一个带有两个参数的函数。

全称量词化(Universal Quantification)

在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”以及两个假设H1和H2。策略引入a引入了一个假设a: A,在这个假设中,所有目标中x的每一次出现都被替换为a,所以我们的目标变成了Q。

我们有假设H1:对于所有x: A, P x -> Q x,我们想证明Q a,我们可以使用应用H1来实例化假设H1到P a -> Q a,这将消除蕴含,我们只需要证明P a。

扫描二维码关注公众号,回复: 12386776 查看本文章

我们在最后一步做消元。如果我们知道H: forall x: A, P,并且我们想证明P,其中x被A替换,我们应用H2来证明P。 

Exercise 3: Try to prove the following predicate logic proposition:

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

Exercise 4: Try to prove the following predicate logic proposition:

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

Exercise 5: Try to prove the following predicate logic proposition:

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

存在量化(Existential Quantification)

在Coq中,关键字exists用来表示存在量化。我们可以写exists x: A, P x  来表示A的一个元素x满足命题P。

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.

在将两个假设H1, H2介绍到上下文中之后,我们需要处理假设和目标中存在的符号。存在量化的策略与连接量化的策略相似。证明存在的表述存在x: Q x,我们可以假设x的值满足存在和替换Q中所有x。在这个定理,我们假设H1:存在x: A, P x,可以被拆解成两个假说:a : A and P : a.。

 

策略存在将目标中所有“x”都替换为“a”,这是对存在的消除。 

最后一次应用操作与示例4相同。  

 

Exercise 6: Try to prove the following predicate logic proposition:

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

Exercise 7: Try to prove the following predicate logic proposition:

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

Exercise 8: Try to prove the following predicate logic proposition:

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

 #中科大软院-hbj形式化课程笔记-欢迎留言与私信交流

猜你喜欢

转载自blog.csdn.net/weixin_41950078/article/details/109655738