【coq】函数语言设计 笔记 10 - indPriciples

本文详细探讨了Coq证明助手中的数学归纳法原理,解释了如何利用归纳法证明自然数和其他递归类型定义的性质。Coq自动生成归纳原则,如nat_ind,用于证明涉及这些类型的所有值的性质。通过比较apply和induction策略,强调了induction在处理上下文变量和量词时的便利性。此外,还介绍了多态性和归纳假设的概念,展示了如何在实际证明中应用这些原理。
摘要由CSDN通过智能技术生成

 

 
本章:对数学归纳法进行了拓展
 
 
Basic
 
每当我们使用 Inductive 来声明数据类型时, Coq 就会自动为该类型生成 ' 归纳法则 (inductionPriciples)' 。这个归纳法则也是定理
如果 t 是归纳定义的,那么对应的归纳法则被称作 t_ind
 
 
举例:自然数的归纳定义
 Suppose P is a property of natural numbers (that is, P n is a  Prop  for every n ).
 
To show that P n holds of all n, it suffices to show:

  • P holds of  0

  • for any n, if P holds of n, then P holds of S n.

 
即:
A0YeVsYzDs4vAAAAAElFTkSuQmCC
 
 
nat_ind 应用
 
fotuoGm5jLgAAAABJRU5ErkJggg==
 
几乎等价于
B+BX4Kf36w2JAAAAAElFTkSuQmCC
 
二者的区别:
在 apply  nat_ind 之前我们没有在上下文中引入 n —— nat_ind 的结论 是一个带有量词的公式,apply 需要这个结论精确地匹配当前证明目标状态的形状,包括其中的量词。
相反**,induction**  策略对于上下文中的变量或目标中由量词引入的变量都适用
 
我们必须手动为 apply 提供归纳法则,而 induction 可以自己解决它。
相比于直接使用 nat_ind 这样的归纳法则,在实践中使用 induction 更加方便。
 
 
 
 
Coq 为每一个 Inductive 定义的数据类型生成了归纳法则,包括那些非递归的。 尽管我们不需要归纳,便可证明非递归数据类型的性质,但归纳原理仍可用来证明其性质; 给定类型,及关于该类型所有值的性质,归纳原理提供了证明该性质的方法。
 
如果我们定义了带有构造子 c1  … cn 的类型 t,那么 Coq 会生成形如下文的定理:
wcMqDkx8Vu0agAAAABJRU5ErkJggg==
 
举例:
HxI5iMs+PvAe33Mf3+Q0Ae1AMGSs7EyybuD3DsaVaKYDweiwVoskg5W88QUmAAwXpsCGlbwxBiYAgEgDEwBApIEJACDSwAQAEGlgAgCINDABAEQamAAAIg1MAACRBiYAgEgDEwBApIEJACDSwAQAEGlgAgCINDABAEQYQv4f9SfSRcvSgvQAAAAASUVORK5CYII=
 
 
例子二
l3f57KYafXGGVkwWHjkvjWN3nSyCViPB8iHenOuKA4ID5CPtyC4AgDqQxbhVZ9rLXW7AwBZAccDAAUA4QGAAmQFVwAAKA7geABQdBD6P07eCaUpA9qVAAAAAElFTkSuQmCC
 
QIAQCUi5P8DzWKrbrRlJekAAAAASUVORK5CYII=
 
 
例子三 booltree
jg3FGqxjAAAAAElFTkSuQmCC
 
0DtuMQxhrDMAAAAASUVORK5CYII=
 
 
A5Zd1OSC4b69AAAAAElFTkSuQmCC
 
 
多态
AbDkHrIPUm8mAAAAAElFTkSuQmCC
 
T he main difference is that, here, the whole definition is   parameterized   ( 参数化 ) on a set X: that is, we are defining a  family  of inductive types list X, one for each X
wG3g4jrxC+9uQAAAABJRU5ErkJggg==
 
注意归纳法则的*'所有部分'* 都被 X 所参数化。也即,list_ind 可认为是一个 多态函数,当被应用类型 X 时,返回特化在类型 list X 上的归纳法则。
 
 
 
 
归纳假设 Induction Hypotheses
 
T6foDl14IUAAAAAASUVORK5CYII=
它对所有的命题 P 都成立, 
Each time we use this principle, we are choosing P to be a particular expression of type nat →  Prop
每次使用这个原理,我们将 P 特化为一个类型为 nat →  Prop 的表达式
 
 instead of stating the theorem mul_0_r as " ∀  n, n  ×   0   =   0 ," we can write it as " ∀  n, P_m0r n"
KabgAAAAASUVORK5CYII=
 
P_m0r n 的定义
A+AHuIsjPW0wnrcyI0XDyv8Hb28at1FfeSNqfkf5iu1regAXmMPviJVAIwD7scHAKC1SfKdAIA6gHgBAKAF8QIAQAviBQCAFsQLAAAtiBcAAFoQLwAAtCBeAABoQbwAANCCeAEAoAXxAgBAC+IFAIAWxAsAAC2IFwAAOgj9Hz5tYiTpgmlBAAAAAElFTkSuQmCC
或者
PkNF0o+zJ95X0p4qmorX9sTRIbJfAFAUOh7AgBBITwBgKAQngBAUAhPACAohCcAEBTCEwAICuEJAASF8AQAgkJ4AgBBITwBgKAQngBAUAhPACAkQv4PIJpzZ+lyN7wAAAAASUVORK5CYII=
 
H+d0KCk4InA0QAAAABJRU5ErkJggg==
 
 
 
 
 
 
后略
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值