形式化方法 Assignment 2: Proof engineering

LAB2

​ lab2总体来说比lab1有意思很多,做完感觉像通关打游戏一样,看一个例子,写一个练习,不知不觉就写完了,感觉意犹未尽。实现过程参考了https://blog.csdn.net/m0_37714470/article/details/105375686.

做之前需要了解一下coq程序基本的结构:

Theorem (题目名字): forall P Q(所有变量) :Prop,
    需要证明的结论。
Proof.
    证明的过程。
Qed.

另外其他需要注意的主要如下:

  • ctrl + ↓ 让程序执行到光标的下一行,ctrl + ↑ 让程序执行到上一行。类似于可以回退的单步调试。

  • 证明的过程中每一句后面必须加上.

  • 原则:先有前提(inversion)后有结论(spilt) 先提出的结论必须先证. (详细见exercise4)

  • 如果要证明 A->(B->C)->D->(E->F)->G 其中A,(B->C),D,(E->F)均为前提,而G为结论。

  • intros 蕴含 得到命题所有前提

  • inversion H 反演 将前提H左边拆成两份(合取析取均可)

  • spilt 拆分 将结论拆成两份

  • unford not 非 将条件中的~变成false

  • elim 消除谬误 如果条件中有H0:P->false此时使用命令elim H0命令相当于只需要证明P的正确性

  • leftright 分别选择结论 选择析取的左半部分和右半部分

  • apply 应用 如果条件H与结论相同,可直接使用apply H完成证明

  • apply A in B 以B为前提,结合A能够推出的结果,这里一定要注意顺序

具体结果如下:

Theorem exercise1: forall P Q :Prop,
    P -> (Q -> P).
Proof.
    intros.
    apply H.

Qed.

Theorem exercise2: forall P Q H:Prop,
     (P->Q) -> (Q->H) -> (P->H).
Proof.
    intros.
    apply H0 in H2.
    apply H1 in H2.
    apply H2.
Qed.

Theorem exercise3: forall P Q :Prop,
       P /\ (P -> Q) -> Q.
Proof.
    intros.
    inversion H.
    apply H1 in H0.
    apply H0.
Qed.

Theorem exercise4: forall P Q R:Prop,
     (P /\ (Q /\ R)) -> ((P /\ Q) /\ R).
Proof.
    intros.
    inversion H.
    inversion H1.
    split.
    split.
    apply H0.
    apply H2.
    apply H3.
Qed.

Theorem exercise5: forall P Q R:Prop,
      (P \/ (Q \/ R)) -> ((P \/ Q) \/ R).
Proof.
    intros.
    inversion H.
    left.
    left.
    apply H0.
    inversion H0.
    left.
    right.
    apply H1.
    right.
    apply H1.
Qed.

Theorem exercise6: forall P Q R:Prop,
    ((P -> R) /\ (Q -> R)) -> (P /\ Q -> R).
Proof.
    intros.
    inversion H.
    inversion H0.
    apply H1 in H3.
    apply H3.
Qed.    

Theorem exercise7: forall P Q R:Prop,   
    (P -> Q /\ R) -> ((P -> Q) /\ (P -> R)).
Proof.
    intros.
    split.
    apply H.
    apply H.
Qed.

Theorem challenge1: forall P Q R S T:Prop,
    (((P /\ Q) /\ R) /\ (S /\ T)) -> (Q /\ S).
Proof.
    intros.
    inversion H.
    inversion H0.
    inversion H1.
    inversion H2.
    split.
    apply H7.
    apply H4.
Qed.

Theorem challenge2: forall P Q:Prop,
    (P -> Q) -> (~Q -> ~P).
Proof.
    unfold not.
    intros.
    apply H in H1.
    apply H0 in H1.
    apply H1.
Qed.    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值