阿格达的编织法

时间:2014-03-05 12:02:05

标签: agda

传统上,Haskell中的仿函数应该支持身份和组成规律。在Agda中,这些法律应该正式化,但标准库只发布RawFunctor s(即没有法律的fmap)。在正式化仿函数的过程中,出现了一些问题:

仿函数一般应该支持一致吗?

  1. 是:在任意Setoid或仅Relation.Binary.PropositionalEquality.setoid
  2. 是:仿函数应该采用还是提供Function.Equality.Π
  3. 否:身份法应支持哪种身份功能?所有这些(即(id′ : A → A) → id′ ≗ id)?
  4. 否:函数应该如何要求支持同余的仿函数?
  5. 否:什么(现实世界?)仿函数不支持同余?

1 个答案:

答案 0 :(得分:1)

部分答案:

关于等价关系的函数

如果要将映射F : Setoid ℓ ℓ → Setoid ℓ ℓ转换为仿函数,则其他法律不会遵循同余。例如,F可以将sRelation.Binary.PropositionalEquality.setoid (Carrier s)的平凡关系映射并设置fmap = id。然后,一致性并不成立。因此,只要第一个等价关系与平等不同,就不会产生一致性。

关于命题平等的函数

似乎所有同余证明都具有相同的结构:对fmap函数的语法进行归纳。因此,它们与自由定理属于同一类别。除了与lightweight free theorems类似的东西之外,没有自动的方法来获得这样的证据。

欢迎更多答案。