对于足够多态的类型,参数性可以唯一地确定函数本身(详情请参阅Wadler定理!)。例如,唯一具有类型的总函数forall t. t -> t
是恒等函数id
。
是否有可能在 Idris 中陈述和证明这一点?(如果它不能在 Idris 内部得到证明,那是真的吗?)
以下是我的尝试(我知道函数相等不是 Idris 中的原始概念,所以我断言任何泛型类型的函数t -> t
总是返回与恒等函数返回的结果相同的结果):
%default total
GenericEndomorphism: Type
GenericEndomorphism = (t: Type) -> (t -> t)
id_is_an_example : GenericEndomorphism
id_is_an_example t = id
id_is_the_only_example : (f : GenericEndomorphism) -> (t : Type) -> (x : t) -> f t x = x
id_is_the_only_example f t x = ?id_is_the_only_example_rhs
产生的洞是:
- + Main.id_is_the_only_example_rhs [P]
`-- f : GenericEndomorphism
t : Type
x : t
-------------------------------------------------------
Main.id_is_the_only_example_rhs : f t x = x