轻量级自由定理

轻量级自由定理库(附件:LFT.agda)允许轻松构建所谓的“自由定理”。

背景

正如雷诺兹告诉我们的那样,类型“T”可以解释为一种关系“[T]”,并且“T”型的每个居民“T”都满足关系。

如果⊢t:t,则(t,t)∈[t]

对于复杂的类型T,对应的关系[T]可能很繁琐来写作。Voigtländer等工具(http://www-ps.iai.uni-bonn.de/ft/)可能会有所帮助。不幸的是,该工具只支持Haskell,并且限制了支持数据类型。图书馆支持完整的Agda,成本为更多用户参与。

用法

要为类型创建自由定理,例如:

过滤器=(A:设置)(A)布尔)列表A列表A

使用π组合子重写:

过滤器=π集\A(A)布尔)列表A列表A

然后“引用”每个符号:

[滤波器]=[∏][设置]\[A](【A】[→] [Bool])[→]  [列表][A][→]  [列表][A]

使用Agda的“normalize-term”功能扩展关系。

该库提供组合符[∏]、[集合]和[→]. 这取决于用户添加对每个数据类型的支持,但这很容易做到接下来我们再看。

数据类型

数据类型的关系是以类似的方式创建的。为了产生归纳定义的关系等价物,例如a,引用每个符号,并将(翻译的)类型应用于原始常数(两次)。

data Bool:设置位置真:布尔假:布尔data[Bool]:[Set]Bool Bool其中[true]:[Bool]true true[false]:[Bool]false false

参数

如果归纳定义有参数,则必须重复该参数,并且必须添加额外的参数(见证关系):

数据列表(A:Set):设置位置nil:列表A缺点:A->列表A->列表Adata[List]{A1-A2:Set}([A]:[Set]A1-A2):[Set](ListA1)(ListA2)其中【无】:【列表】【A】无无[cons]:([A][->][List][A][->][列表][A])cons-cons

更多

确保查看附件中提供的示例(附件:LFT.agda).本文详细介绍了理论:http://publications.lib.chalmers.se/cpl/record/index.xsql?pubid=118913

页面上次修改时间:2015年8月7日下午07:05
技术支持私人维基