В главе 9 Type Driven Development with Idris, мы введены в Elem
предиката с конструкторами Here
и There
для доказательства того, что элемент является членом вектора. напримердоказав Не (Эль х Xs) когда х и хз статически известны
oneInVector : Elem 1 [1, 2, 3]
oneInVector = Here
twoInVector : Elem 2 [1, 2, 3]
twoInVector = There Here
мне интересно, как показать, что элемент в векторе не. Это, возможно, следует быть, предоставляя решение этого типа:
notThere : Elem 4 [1, 2, 3] -> Void
notThere = ?rhs
Выражение/Proof поиск не приходит с ответом в этом случае дает:
notThere : Elem 4 [1,2,3] -> Void
notThere = \__pi_arg => ?rhs1
Scanning through the library for Data.Vect
, эти определения выглядят полезными (но я не уверен, как соединить точки):
||| Nothing can be in an empty Vect
noEmptyElem : {x : a} -> Elem x [] -> Void
noEmptyElem Here impossible
Uninhabited (Elem x []) where
uninhabited = noEmptyElem