哈斯克尔(Haskell)级别的Nats同等

时间:2018-07-11 16:17:33

标签: haskell proof type-level-computation

我正在尝试在Haskell中实现Braun Tree版本,这需要我证明有关Nat s的事实

  

如果n :~: m,则n + 1 :~: m + 1

但是,我无法填写下面的undefined。我尝试过Refl,但是类型系统抱怨。

import GHC.TypeLits
import Data.Type.Equality

sucCong :: ((p :: Nat) :~: (q :: Nat)) -> (p + 1 :: Nat) :~: (q + 1 :: Nat)
sucCong proof = undefined

我如何证明这一点?

1 个答案:

答案 0 :(得分:4)

proof上的

Pattern-match使它的语句可用于约束求解器。然后,(:~:)类型只有一个构造函数,因此其余定义中没有太多选择。

sucCong :: (p :~: q) -> (p+1) :~: (q+1)
sucCong Refl = Refl