我目前正在学习模型检查(模态逻辑,LTL,CTL,SAL模型检查器等)。在我的业余时间,我正在学习Idris,这是一种支持依赖类型的强类型函数式编程语言。由于我正在查看模型检查和Idris,我开始对Idris如何与正式方法和模型检查相关而感到好奇。
在了解模型检查时,感觉大多数示例都是关于验证以强制方式编写的系统或硬件组件。所以我对强类型函数式编程语言中的模型检查的相关性感到困惑,特别是在依赖类型的语言中,例如Idris,在我看来,类型检查器在验证正确性方面已经做了出色的工作。 然而,我的直觉告诉我,模型检查可能与部分函数无关,而这些部分函数不会给出任何终止承诺。
使用强大且依赖类型的编程语言(例如Idris)时模型检查是否相关?
答案 0 :(得分:4)
你是对的,模型检查最常用于硬件验证和命令式(通常是并发的)程序,因为它的起源也在这个领域。对于功能程序,精心设计的类型系统技术被广泛用于验证。但是,它们通常需要大量注释,或者可能产生误报"导致反驳"正确"程序。模型检查不需要这些注释,也可以允许回答更具体的问题。 我不是该领域的专家,但似乎来自类型系统和模型检查的技术通常被组合用于功能程序。 如果您对目前的功能程序模型检查研究和方法感兴趣,那么有很多在线材料的优秀课程:
http://www.cs.ox.ac.uk/people/luke.ong/personal/EWSCS13
该课程由该领域的领先研究人员之一Luke Ong编写。