关于Morte(构造演算)键入的困惑

时间:2018-06-27 09:27:15

标签: lambda-calculus morte

Morte(一种构造微积分的实现)中,该表达式的类型很好:

$ morte
(  λ(Nat : *)
-> λ(Zero : Nat)
-> Zero
)
(∀(a : *) ->  (a ->  a) ->  a ->  a)
(λ(a : *) ->  λ(Succ : a ->  a) ->  λ(Zero : a) ->  Zero) 
^D
∀(a : *) → (a → a) → a → a

λ(a : *) → λ(Succ : a → a) → λ(Zero : a) → Zero

但是这个显然等效的表达式不是:

$ morte
(  λ(Nat : *)
-> (  λ(Zero : Nat)
   -> Zero)
   (λ(a : *) ->  λ(Succ : a ->  a) ->  λ(Zero : a) ->  Zero)
)
(∀(a : *) ->  (a ->  a) ->  a ->  a)
^D
morte: 
Context:
Nat : *

Expression: (λ(Zero : Nat) → Zero) (λ(a : *) → λ(Succ : a → a) → λ(Zero : a) → Zero)

Error: Function applied to argument of the wrong type

Expected type: Nat
Argument type: ∀(a : *) → ∀(Succ : a → a) → ∀(Zero : a) → a

这是为什么?

1 个答案:

答案 0 :(得分:0)

您只是放错了一个括号。交换第4行和第5行,然后键入check pass。