热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

coq的一点体会2

下面是谓词逻辑。在coq里,量词的表示如下:全称量词:forall存在量词:exists同样都有自己的引入规则和删除规则1.forall引入规则introsx输入int

下面是谓词逻辑。在coq里,量词的表示如下:

全称量词:forall

存在量词:exists

同样都有自己的引入规则和删除规则

1. forall引入规则 intros x

1

输入intros x就可以提取出一个前提x,使得结论成为F。intros前面有讲很多,这里就不多说了。

2. forall删除规则 apply H

2

 

对于已知的前提H : forall x:A , F.可以用它来简化结论,比如对于H : forall x:A, P x -> forall y:A, R x y -> R x (f y),输入coq>apply H. 可以看到目标R a (f (f a))被分解为两个:P a 和 R a (f a)

下面来举个课件中的例子。。下面有用到";" 意思就是两句合并到一起执行。注意有时A ; B与A. (换行) B. 的运行结果是不一样的,这两句并不等价。

输入:

Hypothesis Hf : forall x y:A, R x y -> R x (f y).
Hypothesis R_refl : forall x:A, R x x.
Lemma Lf : forall x :A, R x (f (f (f x))).
Proof.
intro x;apply Hf.

1 subgoal

Hf : forall x y : A, R x y -> R x (f y)
R refl : forall x : A, R x x
x : A
============================
R x (f (f x))

repeat apply Hf.

1 subgoal
A : Set
f : A -> A
Hf : forall x y : A, R x y -> R x (f y)
R refl : forall x : A, R x x
x : A
============================
R x x

apply R_refl.
Qed.

有时候应用前提来证明时,系统并不知道如何给forall x:A找到一个合适的赋值,在我们输入apply H时,会给出如下的错误提示:

Error: Unable to find an instance for the variable m.

这时需要给出H的赋值,使用with后缀。下面看一个例子:

Hypothesis lt_trans : forall n m p : nat, n m

n Lemma lt_n_SSn : forall i:nat, i Proof.
intro i.

1 subgoal

Hypothesis lt_trans : forall n m p : nat, n m

n

i : nat

===========================

i

如果这时输入的是apply lt_trans. 会给出错误提示找不到m的实例。正确的输入应该是:

apply lt_trans with (S i);

目标这时就会分解为 i S i 。类似的可以输入eapply lt_trans. 系统会自动找一个随机变量替代m。

注:with x 这一后缀同样适用于elim子句。

3. 存在量词引入规则 exists t

image

输入exists t. 提取出F来证明。需要注意的是这个t必须是在前提中存在的。

4. 存在量词删除规则 destruct H as [x Hx]

image

输入destruct H as [x Hx]. ,将前提H分解为两个,分别是x和Hx :F –>  G。

5. 等价性引入规则 reflexivity

image

当证明目标是很显然的a=a时,可以输入reflexivity, trivial, auto中的一个来证明。

6. 替换规则

image

已知前提e : a=b,想要用b来替换目标A[a]中的a,可以输入rewrite –>e.

同样的

image

用a来替换b:rewrite <-e.

还是比较直观的,下面是一个例子:

Lemma eq_trans_on_A :
forall x y z:A, x = y -> y = z -> x = z.
Proof.
intros x y z e.

. . .
e : x = y
============================
y = z -> x = z

rewrite -> e.

. . .
e : x = y
============================
y = z -> y = z

class over~

 

本文原创,转载请注明出处:

http://blog.163.com/sara_athena/ 或

http://www.cnblogs.com/luluathena/


推荐阅读
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了Codeforces Round #321 (Div. 2)比赛中的问题Kefa and Dishes,通过状压和spfa算法解决了这个问题。给定一个有向图,求在不超过m步的情况下,能获得的最大权值和。点不能重复走。文章详细介绍了问题的题意、解题思路和代码实现。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • Go语言实现堆排序的详细教程
    本文主要介绍了Go语言实现堆排序的详细教程,包括大根堆的定义和完全二叉树的概念。通过图解和算法描述,详细介绍了堆排序的实现过程。堆排序是一种效率很高的排序算法,时间复杂度为O(nlgn)。阅读本文大约需要15分钟。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • Iamtryingtocreateanarrayofstructinstanceslikethis:我试图创建一个这样的struct实例数组:letinstallers: ... [详细]
author-avatar
重孙女俘虏
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有