传统上,Haskell中的仿函数应该支持身份和组成规律。在Agda中,这些法律应该正式化,但标准库只发布RawFunctor
s(即没有法律的fmap)。在正式化仿函数的过程中,出现了一些问题:
仿函数一般应该支持一致吗?
Setoid
或仅Relation.Binary.PropositionalEquality.setoid
?Function.Equality.Π
?(id′ : A → A) → id′ ≗ id
)?答案 0 :(得分:1)
部分答案:
关于等价关系的函数
如果要将映射F : Setoid ℓ ℓ → Setoid ℓ ℓ
转换为仿函数,则其他法律不会遵循同余。例如,F
可以将s
与Relation.Binary.PropositionalEquality.setoid (Carrier s)
的平凡关系映射并设置fmap = id
。然后,一致性并不成立。因此,只要第一个等价关系与平等不同,就不会产生一致性。
关于命题平等的函数
似乎所有同余证明都具有相同的结构:对fmap
函数的语法进行归纳。因此,它们与自由定理属于同一类别。除了与lightweight free theorems类似的东西之外,没有自动的方法来获得这样的证据。
欢迎更多答案。