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)
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)
所以,你需要分割你Z
和S n
情况,以及:
minusReduces : (n : Nat) -> n `minus` Z = n
minusReduces Z = Refl
minusReduces (S k) = Refl
Run Code Online (Sandbox Code Playgroud)