coq - 代表归纳类型

标签 coq agda dependent-type idris

我本着本文的精神实现了依赖类型的 lambda 演算:http://www.andres-loeh.de/LambdaPi/LambdaPi.pdf微积分有效,我用它进行了实验并扩展了几件事:许多宇宙,硬编码归纳公理。但是,我想添加归纳类型来做更复杂的事情。

我正在考虑两种方法

  • 介绍 Fin-N、Product 和 W 类型,并用它们表示归纳类型。
  • 生成归纳和递归公理。

这两种方式我都不喜欢。第一个太低级,需要付出大量努力才能从高级语言转换为核心语言。第二种方法工作量很大,而且容易出错,因为复杂归纳类型的递归原理的生成有很多极端情况,即正/负出现。

如何做到这一点?这些类型在 Coq、Agda 和 Idris 等现有系统中是如何实现的?

最佳答案

抱歉,我不了解 Idris。

对于 Agda,我推荐 Ulf Norell Phd Thesis作为起点,但此后系统不断发展。

Coq 在您的列表中引入了第三个项目符号:自动生成的谓词。 每个归纳类型都带有 3 个(在某些特殊情况下为 1 个)自动为用户定义的归纳方案,并命名为 your_type_rectyour_type_recyour_type_ind(特殊情况下只有后一种)。这些是语言的实际术语,为用户自动生成,并由 induction 策略使用(我对最后一个不是 100% 确定),而不是公理。

其实你可以关闭这个自动生成,自己写你的归纳方案。

可以找到一些关于induction 的文档here .我建议您在 Coq 邮件列表上提问,开发人员可能会给您更多关于 Coq 内部结构的见解。

最好的, 五、

关于coq - 代表归纳类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22340809/

相关文章:

agda -\forall (∀) 在签名中实际上是什么意思?

haskell - 从依赖类型中提取类型级值/在值级使用类型级绑定(bind)

logic - 如何在 Coq 中为蕴涵建模引入规则?

coq - 如何从外部软件调用证明助手 Coq

coq - coq 中有限映射的等式(使用 map2 定义)

windows - 如何在 Windows 上安装 Agda 的标准库?

coq - 统一在 Coq 核心类型系统中的作用是什么?

stream - 什么是 `where .force` ?

haskell - 可以用 Haskell 写这个函数吗?

types - 在 Agda 中使用字符串作为键进行映射?