【coq】函数语言设计 练习题induction&lists 总结

induction
 
H3R56d5FlZe4AAAAAElFTkSuQmCC
 
这一题如果直接写,非常麻烦
 
w+YptiOg4Mp1wAAAABJRU5ErkJggg==
正确的做法
先证明
 
QAAAAASUVORK5CYII=
 
61vAsAAEDvwHoFAABbgLwCAIAtQF4BAMAWIK8AAGALkFcAALAFyCsAANgC5BUAAGwB8goAALYAeQUAABsg5P8BNJ6WMgJC79AAAAAASUVORK5CYII=
经验总结:
在遇到可重用的关键模块时,分离之。
关于 nat plus 熟练证明交换律、分配律、结合律、零加定律
 
常用规律
零加定律( n+0=n )( 0+n=n 是定义)
AgAAAAN+BAAARoCNAADACLARAAAYATYCAAAjwEYAAGAE2AgAAPRB6P8BbdMoI0PPGj4AAAAASUVORK5CYII=
 
加法分配律
变种
AU6PtniMKRTHAAAAAElFTkSuQmCC
 
加法交换律
G16QkbnMxj0AAAAASUVORK5CYII=
 
加法结合律
AeBc1ly8zXDgAAAAAElFTkSuQmCC
其他
单射性
w++my0uqlFMfwAAAABJRU5ErkJggg==
 
B9NQp8xJ5Q2tAAAAAElFTkSuQmCC
下面和加法类似,不表
零乘定律
 
乘法交换律
 
乘法分配律
 
乘法结合律
 
 
在证明过程中,如果碰到特别困难的式子,可以用 assert 提出假设,或者提前写好 Theorem 再证明
 
 
 
 
list( 主要考对 induction fixpoint 以及各种操作的的定义 )
对 list 的操作(构造子 cons )
定义 list
wPc9UqgCg1cFQAAAABJRU5ErkJggg==
 
BxhJbVYUOLb4AAAAAElFTkSuQmCC
 
JNmXj7gBtP8XhK9wxm46YDfEgAAABhlwG8JAAAAAO3SsOcAAAAAYPQAew4AAAAYZUDnAAAAgFEGdA4AAAAYXRD6PyjW05PfPUBUAAAAAElFTkSuQmCC
nat :: list
list ++ list
repeat
wWEwbfPHO8kAAAAASUVORK5CYII=
 
长度
N28ARRtqLVsAAAAASUVORK5CYII=
append
append 的性质
KSb7VgAAAAyjAQCQLym01gEAYHsQ1gEAcgVhHQAgVxDWAQByBWEdACBXENYBAHIFYR0AIFcQ1gEAcgVhHQAgRwj5f2Ay6cZ00mECAAAAAElFTkSuQmCC
结合律 assoc
append length
 
 
取头
取尾
VsP3v6TR+ZfvsXzzwEAj5P8HKxPbgxKEHaUAAAAASUVORK5CYII=
左为多态版本
 
去除 0
[![AcomG+yzEuAxAAAAAElFTkSuQmCC][18]][18]
提取奇数
[![D2Bf+MSt4S+fAAAAAElFTkSuQmCC][19]][19]
奇数个数
[![x+JXEcIKR8ymgAAAABJRU5ErkJggg==][20]][20]
法一:递归重新定义
法二:先求奇数数组,再计算新数组长度
提取奇数位(参考 alternative )
 
两个 list 交替插入
将两个列表交织成一个,在从第一个列表中抽取的元素和从第二个列表中抽取的元素之间交替进行。
递归,列表 ++ 列表
[![ukAAAAASUVORK5CYII=][21]][21]
删除某个元素
[![tV+6yae+i1eLT0h7nqmV3dz+k9Ni7d67bu98v7POF+uX+31bpL7OdysnAIAADXUW4wGIhBzrKOC4X7YgQAAGBDrKx8BgAAcIkQzwAAIAsQzwAAIAsQzwAAIAsQzwAAIAsQzwAAIAsQzwAAIAsQzwAAIAsQzwAAIAsQzwAAIAsQzwAAIAsQzwAAIAsQzwAAIAsQzwAAYPMR8v8B2i5kPaA1M9gAAAAASUVORK5CYII=][22]][22]
 
 
倒置
[![wcvlExmL2jM8AAAAABJRU5ErkJggg==][23]][23]
倒置的性质
倒置 l++[n]
双重倒置
 
排序( homework07- sort )
Fixpoint insert (i : nat) (l : list nat) :=
match l with
| nil => i::nil
| h::t => if i <=? h
then i::h::t
else h::insert i t
end.
 
Fixpoint sort (l : list nat) :=
match l with
| nil => nil
| h::t => insert h (sort t)
end.
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值