为什么在 Idris 中不涉及“负”类型检查的相等性?
Why doesn't equality involving “minus” typecheck in Idris?
为什么不能进行以下类型检查:
minusReduces : (n : Nat) -> n `minus` Z = n
minusReduces n = Refl
然而这将进行类型检查:
plusReduces : (n : Nat) -> Z `plus` n = n
plusReduces n = Refl
minus n
不会减少,因为 minus
是 defined,在第一个参数上有模式匹配:
total minus : Nat -> Nat -> Nat
minus Z right = Z
minus left Z = left
minus (S left) (S right) = minus left right
因此您还需要拆分 Z
和 S n
案例:
minusReduces : (n : Nat) -> n `minus` Z = n
minusReduces Z = Refl
minusReduces (S k) = Refl
为什么不能进行以下类型检查:
minusReduces : (n : Nat) -> n `minus` Z = n
minusReduces n = Refl
然而这将进行类型检查:
plusReduces : (n : Nat) -> Z `plus` n = n
plusReduces n = Refl
minus n
不会减少,因为 minus
是 defined,在第一个参数上有模式匹配:
total minus : Nat -> Nat -> Nat
minus Z right = Z
minus left Z = left
minus (S left) (S right) = minus left right
因此您还需要拆分 Z
和 S n
案例:
minusReduces : (n : Nat) -> n `minus` Z = n
minusReduces Z = Refl
minusReduces (S k) = Refl