Agda中感应原理的功能定义

时间:2015-06-02 14:00:27

标签: agda type-theory

当在Agda中使用证明验证时,我意识到我明确地使用了某些类型的归纳原理,而在其他情况下使用了模式匹配。 我终于在维基百科上找到了一些关于模式匹配和归纳原则的文本:"在Agda中,依赖类型模式匹配是该语言的原语,核心语言没有模式匹配翻译的归纳/递归原则。到"

由于Agdas模式匹配,Agda中的类型理论归纳和递归原理(在类型上定义函数)是完全冗余的吗?这样的事情(Path induction implied)只会产生教学价值。

http://en.wikipedia.org/wiki/Agda_%28programming_language%29#Dependently_typed_pattern_matching

2 个答案:

答案 0 :(得分:1)

我不熟悉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)

答案 1 :(得分:0)

我不会说它们完全不相关:它们是组合器,因此可以帮助您构建开发,思考它们的方式并帮助您编写更少(重复)的代码。

以Haskell为例:模式匹配在Haskell中也是原始的,但通常会使用bindfoldtraverse<?php include '../include/header.php';?> <?php include '../include/footer.php';?> 来编写更少的代码或提供更通用,更强大的实现。