在伊德里斯,我可以证明自由定理,例如'forall t'类型的唯一(总)函数。 t - > t`是`id`?

时间:2017-05-27 06:11:02

标签: idris parametric-polymorphism free-theorem

对于足够多态的类型,参数可以唯一地确定函数本身(有关详细信息,请参阅Wadler's Theorems for free!)。例如,类型为forall t. t -> t的唯一总函数是标识函数id

是否有可能在伊德里斯声明并证明这一点? (如果它不能在伊德里斯内部得到证实,那么它是真的吗?)

以下是我的尝试(我知道函数相等在Idris中不是原始概念,所以我断言泛型类型t -> t的任何函数总是返回与标识函数返回的相同的结果):< / p>

%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

1 个答案:

答案 0 :(得分:15)

你做不到。像这样的定理(“自由定理”)假设类型是抽象的,你不能在它们上进行模式匹配或以任何方式辨别它们的结构。但是你无法在Idris内部表达类型的抽象属性。没有类型理论的主流实现使这成为可能。 Type theory in color具有此功能,但它非常复杂,没有实际实现。

您仍然可以假设自由定理并使用它们,但您必须确保它们不会阻止对您要评估的事物进行评估。