表示两个函数等效的证明的数据类型

时间:2018-11-22 20:56:32

标签: idris

我试图创建一个数据类型来表示两个函数是等效的事实。错误是什么意思?

代码:

record FEq (f1 : a -> b) (f2 : a -> b) where
    constructor MkFEq
    unFEq : (x : a) -> (f1 x = f2 x)

错误:

Type checking ./FEq.idr
FEq.idr:1:1-3:36:
  |
1 | record FEq (f1 : a -> b) (f2 : a -> b) where
  | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...
When checking type of Main.FEq.unFEq:
When checking argument x to type constructor =:
        Type mismatch between
                free_a b a f1 f2 rec
        and
                a

1 个答案:

答案 0 :(得分:2)

AFAIK,您不允许在记录中提及未绑定的参数。 因此,您必须像这样添加ab作为参数:

record FEq a b (f1 : a -> b) (f2 : a -> b) where
  constructor MkFEq
  unFEq : (x : a) -> (f1 x = f2 x)