伊莎贝尔类型错误

时间:2017-11-28 09:03:22

标签: types isabelle

我是伊莎贝尔的新手并为大学做运动。我需要在Isabelle证明一个反向函数。

在Haskell中,函数看起来像这样:

rev [] = []
rev (x:xs) = rev xs ++ [x]

我现在试着定义这个功能" rev"在伊莎贝尔。类型列表和功能" app" (附加)

function app and rev in Isabelle

错误伊莎贝尔给我的是:

Type unification failed: Clash of types "_
          ⇒ _" and "_ Exercise5.list"

Type error in application: incompatible operand type

Operator:  app (rev xs) ::
  'a Exercise5.list ⇒ 'a Exercise5.list
Operand:   Exercise5.list.Cons ::
  ??'a ⇒ ??'a Exercise5.list ⇒ ??'a Exercise5.list

问题出在哪里?据我所知,Isabelle告诉我"嘿伙计app需要2个类型 a'列表,但这不是这里的情况"

但为什么呢? xs 显然属于 a'列表并且使用我的Cons运算符我是否也使x也成为列表?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

考虑括号应该放在app rev xs Cons x Nil中的位置:目前,您似乎在其参数x上应用了函数Nil