为什么伊德里斯没有涉及"减去"类型检查的平等?

Yan*_* Bo 4 dependent-type idris

为什么不会出现以下类型的问题:

minusReduces : (n : Nat) -> n `minus` Z = n
minusReduces n = Refl
Run Code Online (Sandbox Code Playgroud)

然而,这将很好地检查:

plusReduces : (n : Nat) -> Z `plus` n = n
plusReduces n = Refl
Run Code Online (Sandbox Code Playgroud)

Cac*_*tus 6

minus n不会减少,因为minus定义与第一参数模式匹配:

total minus : Nat -> Nat -> Nat
minus Z        right     = Z
minus left     Z         = left
minus (S left) (S right) = minus left right
Run Code Online (Sandbox Code Playgroud)

所以,你需要分割你ZS n情况,以及:

minusReduces : (n : Nat) -> n `minus` Z = n
minusReduces Z = Refl
minusReduces (S k) = Refl
Run Code Online (Sandbox Code Playgroud)

  • 是的,但你首先必须通过'减去Z'右边的情况才能到达那里!请记住案件已订购. (3认同)