Wadler的论文"免费定理"意义上的"自由定理" 关于某些值的等式是仅基于它们的类型导出的.所以,例如,
f : {A : Set} ? List A ? List A
Run Code Online (Sandbox Code Playgroud)
自动满足
f . map g = map g . f
Run Code Online (Sandbox Code Playgroud)
我可以接受以下类型的Agda术语:
(f : {A : Set} ? List A ? List A) {B C : Set} (g : B ? C) (xs : List B)
? f (map g xs) ? map g (f xs)
Run Code Online (Sandbox Code Playgroud)
或者如果是这样/如果没有,我可以做更多/更少一般的事情吗?
我知道轻量级自由定理库的存在,但我认为它没有做我想要的(或者如果它确实如此,我不能很好地理解它).
(一个示例用例是我有一个仿函数,F : Set ? Set
并且想要证明多态函数F A × F B ? F (A × B)
自动转换.)
Jes*_*per 12
不,构建Agda的类型理论不足以证明这一点.这需要一个名为"内化参数"的功能,参见Guilhem的工作:
这将允许您例如证明"(A:Set)→A→A"的所有居民都等于(多态)身份函数.据我所知,这还没有用任何语言实现.