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

 

 
本章:对数学归纳法进行了拓展
 
 
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==
 
 
 
 
 
 
后略
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


版权声明:本文为qq_42817577原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。