coq使用笔记

article/2025/10/21 13:15:23

Coq 使用笔记

Coq中可分三部分:
1、vernacular:用来处理定义,使用大写字母开头,例如Theorem、Proof、Qed
2、tactics:用作证明过程,以小写字母开头,例如intros、exact
3、Gallina:用来描述定理,例如(forall A : Prop, A -> A)

基本形式

Theorem ident body: type.
Proof.Tactics
Qed.
  • 解释:
    • Theorem是Coq中的一个命令,它声明了一个应该被证明的新定理;
    • ident是新定理的名称;
    • body是新定理的主体;
    • type为类型;
    • Proof开始定理的证明。在此之后需要给出完整的定理证明;
    • Tactics为策略类型,接下来主要会介绍:intros, apply, inversion, split, right and left.
    • Qed命令证明结尾符,表示证明完成;
    • 每个Coq命令都要加上.表示结束;
    • (* COMMENTS HERE *)表示注释;

1.Tactics:intros & apply

  • 范例1:
1 Theorem example1: forall P:Prop,P -> P.
2 Proof.
3     intros.
4     apply H.
5 Qed.

首先通过Theorem来声明一个名为example1的定理。该定理为forall P:Prop,P -> P。这里的A : Prop表示一个具有Prop类型的A。类似的有0 : nat表示一个自然数0,true : bool表示一个布尔值true。下面的Proof表示证明开始,Qed示证明结束。

1.1 intros: 引入前提
  • 基于当前目标,intros有不同的的效果。对 forall T:type将会在上下文(local context)中引入T: type,对T -> U 会引入Hn: T。也就是,intros会从目标中按照顺序引入假设。每一次它会消耗 forall 里面的一个自由变量,或者是一个 -> 前面的命题(也就是前提条件)。intros. 会引入所有的假设,Coq 会自动给他们命名。如范例1中,执行到第三行时会输出如下:
    在这里插入图片描述

如上窗口为证明过程展示,即goal windows展示内容。在水平线上的称为假设(hypotheses)或上下文(the context),在水平线下的是要证明的东西,称为the current subgoal我们要证明的定理(theorem)称为goal,而subgoal指的是我们在证明过程的任意一点需要证明的东西

1.2 apply
  • 在范例1中的第三行后,我们得到一个名为H的假设其值为P。其假设值与我们唯一的子目标相同。此时使用apply即可完成证明。也就是,当您有一个与目标相同的假设时就可以用apply完成证明。
  • apply的高级用法:
    • 范例2:
Theorem example2: forall P Q: Prop,(P -> Q) -> P -> Q.
Proof.intros.apply H in H0.apply H0.
Qed.

在例2中,转到第四行,我们从局部上下文中得到了两个假设,但它们都不与我们的目标相同,如图:
在这里插入图片描述
即我们知道了从P->Q,同时得到假设P。可使用策略apply … in …,从而得到假设Q。

1.3 Qed
  • 当目标窗口显示No more subgoals.时,您可以使用Qed命令来完成证明 ,该命令将使Coq保存该定理及其证明。
练习1
  • 使用intros 和 apply证明定理:P -> (Q -> P)
Theorem exercise1: forall P Q:Prop,P -> (Q -> P).
Proof.intros.apply H.
Qed.

2.Tactics:inversion & split

2.1 inversion
  • 范例3:
Theorem example3: forall P Q: Prop,P/\Q -> Q.
Proof.intros.inversion H.apply H1.
Qed.

inversion用于对在上下文中的连词(Coq中的/\ )进行分解,即将P/\Q分解为H0:PH1:Q

2.1 split
  • 范例4:
Theorem example4: forall P Q:Prop,(P /\ Q) -> (Q /\ P).
Proof.intros.inversion H.split.apply H1.apply H0.
Qed.

同inversion,split主要用来分解goal中的连词。如范例3,slpit将Q /\ P分解成2个goal P 和 Q。

3.Tactics:right & left

  • 范例5:
Theorem example5: forall P Q: Prop,(P \/ Q) -> (Q \/ P).
Proof.intros.inversion H.right.apply H0.left.apply H0.
Qed.
  • 该策略针对goal中的 \/运算符。对上下文中的\/取inversion策略会生成2个子目标,2个子目标具有相同的结论但在上下文中有不同的H0值。在第一个子目标中,我们需要在假设H0:P的情况下证明Q\/P,由于该运算符只要求左右中一个为真即可成立,因此此时使用right即可证明。在第二个子目标中使用left完成一样的操作。

http://chatgpt.dhexx.cn/article/4mS19WkQ.shtml

相关文章

【coq】函数语言设计 笔记 06 -logic

参考博客:https://www.cnblogs.com/TheFutureIsNow/p/11993851.html Coq中的命题类型语句 Coq是一种类型化语言,这意味着它的世界中的每个合理表达式都有一个相关的类型。逻辑声明也不例外,任何一个可以证明的语句都有一个类型&#xff0c…

离散数学——coq学习笔记(一)

Coq学习笔记(一) BASICS函数编程枚举类型引例:Days of the week(定义一个类型) 一些基础语法定义TypeCheck命令多元组ModulesCompute命令定义一个新常量 BOOLEANS布尔表达式的构造相关定义布尔表达式的相关运算律用Exa…

求网络号、子网号、主机号、子网网络地址、子网广播地址

例题:某计算机的IP地址为10.38.51.21,子网掩码为255.255.0.0,写出该计算机的网络号、子网号、主机号以及子网网络地址、子网广播地址。 网络号:10子网号:38主机号:51.21子网网络地址:10.38.0.0子…

根据子网掩码算出 IP 地址 的网络号和主机号

我们如何根据子网掩码算出 IP 地址 的网络号和主机号呢? 举个例子,比如 10.100.122.0/24,后面的/24表示就是 255.255.255.0 子网掩码,255.255.255.0 二进制是「11111111-11111111-11111111-00000000」,大家数数一共多…

关于IP地址、网络号、主机号、子网掩码之间的关系

IP地址类似于我们的身份证号码 国家为了唯一确定我们每个人的身份,会为我们每个人分配一个唯一确定身份的号码,同理: 为了确切地标识Internet(互联网)中的每一台主机和路由器,TCP/IP建立了一套编址方案&a…

关于IP网络号和主机号的原理

网络号和主机号具体怎么弄出来的? ? ? ? 1、标准分类的ip地址的网络号是, A类是前8位 B类是前16位 C类是前24位 举一个例子 如172.16.10.2,因为172.16.10.2是B类地址,所以172.16所代表的位就是网络号的位,后面10.2代表的…

子网划分以及网络号的计算

目录 一、子网划分的作用 1.计算网络号,通过网络号选择正确的网络设备连接终端设备 2.根据网络的规模,可以对局域网(内网)进行网络地址规划 二、IP地址 1.IP地址的组成部分 2.IP地址的版本 三、IP地址的分类 1.IP地址分类 2.IP地址分类总结思维…

网络号,网络标识,广播地址,有效主机范围计算

网络计算 IP 地址计算网络号,网络标识,有效主机范围IP地址分类 IP 地址 IP地址:网络部分主机部分 网络部分:确定终端是不是在同一网段 主机部分:用来确定终端的容量大小(最多可以容纳多少台) 同…

网络号、主机号、子网号--例题

已知 IP:195.169.20.50 子网掩码:255.255.255.224 求网络号 子网号 主机号。答: IP为C类,一知道子网掩码值是224 所以网络被划分为8个子网网络号是用将你的IP和子网掩码255.255.255.224的二进制进行逻辑与运算得到转换为十进制为…

计算机网络:根据IP和子网掩码计算网络号

题目感觉有误,但是解题思路是正确的。 已知B类地址的子网掩码为255.255.0.0,假设某B类地址为127.24.36.55,那么它的网络号为:() A、127.24.0.0 B、0.0.36.55 C、255.255.36.55 D、127.24.36.55 解题思路&…

网络号和主机号具体计算原理-ipv4篇

来自之前163网易博客,因博客倒闭,放CSDN供 大家学习。 1、标准分类的ip地址的网络号是, A类是前8位 B类是前16位 C类是前24位 举一个例子 如172.16.10.2,因为172.16.10.2是B类地址,所以172.16所代表的位就是网络号的位…

网络号的计算

子网掩码和ip地址结合使用,可区分出一个网络的网络号和主机号. 例如: 有一个c类地址为: 192.9.200.12 默认子网掩码为: 255.255.255.0 ① 将IP地址转化为二进制: 11000000 00001001 11001000 00001100 ② 将子网掩码转换为二进制:11111111 11111111 11111111 00000000 ③ 将子…

计算机网络号的学习

目录 一、子网的划分 1.1子网划分的作用 二、相同网络与不同网络 1、相同网络 2、不同网络 三、IP地址的组成与作用 1、IP地址的组成 2、各组成的作用 四、IPV4地址与IPV6地址 五、IP地址的分类 六、IP地址按用途分类 七、网络号的计算方法 八、网络地址的划分 1…

计算机网络中的子网号和网络号

IP地址是一个32为的二进制数。 IP地址=网络id 主机id 网络号 网络号就是网络id,是某个互联网中子网的地址,通过子网掩码和IP地址按位“与”得到。 如192.9.200.13/24,子网掩码为255.255.255.0,该IP地址的网络号就是1…

认识网络号与子网划分

目录 一、计算机网络号 二、网络号的构成 1.认识网络号 (1)IP地址 (2)子网掩码 2.IP地址用途分类 (1)私有地址 (2)公有地址 三、网络号的…

IP地址、网络号、主机号、网络地址、子网掩码、网关、192.168.0.1/24是什么意思

IP地址 IP地址通俗上讲,就是台电脑在网络世界的唯一标识,它由32的二进制数组成,也就是4个字节,就像人的身份证一样,它能够唯一标识一台电脑。 IP地址的组成 IP地址网络ID主机ID,同一个网络的IP地址能够公用…

正方形的展开图

记得这个题目是我小学竞赛的最后一个题目,当时这个题目没有做出来 (^_^) 正方形的展开图共有11种。 分下面的4种情况:

如何用几何画板作正方体的动态展开图

在教学中,为了增强教学效果,通常用折纸法演示正方体的展开与折叠过程,这样的做法对学生的理解还是起不了多大作用的。如果可以借助一些教学辅助工具制作模型进行演示,那效果肯定更为显著。几何画板就是符合这样要求的教学辅助工具…

矩形可以切割多少个最大的正方形

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 题目描述 小明有一些矩形的材料,他要从这些矩形材料中切割出一些正方形。 当他面对一块矩形材料时,他总是从中间切割一刀,切出一块最大的正…