有一个Idris教程,一个Agda教程和许多其他教程风格的论文和介绍性材料,其中包含对待学习内容的永无止境的参考。我在所有这些中间爬行,大部分时间我都被数学符号和新术语突然出现而没有任何解释。也许我的数学很糟糕: - )
是否有任何有纪律的方法来处理依赖类型编程?就像你想要学习Haskell一样,你从“自学一个Haskell”开始,当你想学习Scala时,你可以从Odersky的书开始,对于Ruby,你会阅读带有变异错误的奇怪教程。但我不能用他们的书开始阿格达或伊德里斯。他们远远超过我的头脑。我试过Coq并且陷入了它的全部证明风格。阿格达需要一个巨大的数学背景和伊德里斯,好吧,让我们暂时离开!
我非常了解静态类型系统,我对Scala非常熟练,如果有必要,我可以使用Haskell。我理解功能范例并且日常使用它,我理解代数数据类型和GADT(实际上相当顺利),我最近成功地理解了Lambda Cube。不过,我缺乏数学和逻辑部分。
答案 0 :(得分:29)
我强烈推荐Software Foundations。这本书非常擅长一次向你介绍Coq。有许多定理证明,是的,但这是依赖类型的美味的一部分。当“编程”和“证明”之间的界线开始模糊时,感觉很棒。
我缺乏数学和逻辑部分。
我认为Software Foundations可以帮助您快速掌握您需要了解的逻辑。尽管如此,已经对蕴涵概念感到满意有帮助。
答案 1 :(得分:21)
(注意:这是一个自我广告)
我正在撰写Agda tutorial,我的主要目标是 让人们在没有理论背景的情况下与阿格达一起玩。
本教程可以解决您的大多数问题:
它正在开发中,但上半场已经准备好了。