作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Agda 中玩证明验证时,我意识到我对某些类型明确使用了归纳原则,而在其他情况下则使用模式匹配。
我终于在维基百科上找到了一些关于模式匹配和归纳原则的文字:“在 Agda 中,依赖类型模式匹配是该语言的一种原语,核心语言没有模式匹配转化为的归纳/递归原则。”
那么由于 Agdas 模式匹配,Agda 中的类型理论归纳和递归原则(定义类型上的函数)是完全多余的吗?像这样的东西( Path induction implied )那时只会有教学值(value)。
http://en.wikipedia.org/wiki/Agda_%28programming_language%29#Dependently_typed_pattern_matching
最佳答案
我对Agda不熟悉,但我认为在这一点上,它与Coq相似,我可以为Coq回答相应的问题。两种语言均基于 intuitionistic type theory with inductive types .
在直觉类型理论中,可以从足够通用的固定点组合器以及依赖模式匹配中推导出递归原理。模式匹配是不够的:虽然这允许破坏归纳类型,但仅模式匹配不允许在该类型上编写递归函数。以维基百科的例子为例:
add zero n = n
add (suc n) m = suc (add n m)
add
的第一个参数上形成的模式匹配之外,它需要一个规则,说明第二种情况下的递归调用是良构的。
nat_ind f_zero f_suc zero = f
nat_ind f_zero f_suc (suc n) = f_suc (nat_ind f_zero f_suc n)
关于agda - Agda 中通过归纳原理定义的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30598260/
我一直在阅读Practical Foundations for Programming Languages并发现迭代和同时归纳定义很有趣。我能够很容易地对偶函数和奇函数的相互递归版本进行编码 onli
我是一名优秀的程序员,十分优秀!