我正在尝试在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
我如何证明这一点?
答案 0 :(得分:4)
proof
上的 Pattern-match使它的语句可用于约束求解器。然后,(:~:)
类型只有一个构造函数,因此其余定义中没有太多选择。
sucCong :: (p :~: q) -> (p+1) :~: (q+1)
sucCong Refl = Refl