是否有可能将自由定理作为命题的等式?

时间:2014-07-13 00:44:36

标签: agda

Wadler的论文“免费定理”意义上的“自由定理”关于某些值的等式是仅基于它们的类型导出的。所以,例如,

f : {A : Set} → List A → List A

自动满足

f . map g = map g . f

我可以接受以下类型的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)

或者如果是这样/如果没有,我可以做更多/更不普遍的事情吗?

我知道Lightweight Free Theorems library的存在,但我不认为它符合我的要求(或者如果它确实存在,我不太了解它)。

(一个示例用例是我有一个仿函数F : Set → Set,并希望证明多态函数F A × F B → F (A × B)自动转换。{/ p>

2 个答案:

答案 0 :(得分:12)

不,构建Agda的类型理论还不足以证明这一点。这需要一个名为“内化参数”的功能,参见Guilhem的工作:

这将允许您例如证明“(A:Set)→A→A”的所有居民都等于(多态)身份函数。据我所知,这还没有用任何语言实现。

答案 1 :(得分:4)

Chantal Keller和Marc Lasson为Coq开发了一种策略,生成对应于(闭合)类型的参数关系,并证明此类型的居民满足生成的关系。您可以在Keller's website上找到有关此工作的更多详细信息。

现在在Agda的案例中,理论上可以通过使用一种称为反射的技术在纯粹的Agda中实施策略来完成同样的工作。