8 | data Has : (v : a) -> (ts : List a) -> Type where
10 | S : Has v vs -> Has v (w :: vs)
13 | Uninhabited (Has v []) where
14 | uninhabited Z
impossible
15 | uninhabited (S
_) impossible
18 | 0 lemma_has_single : Has f [x] -> x === f
19 | lemma_has_single Z = Refl
22 | drop : (ts : List a) -> Has v ts -> List a
23 | drop (x :: xs) Z = xs
24 | drop (x :: xs) (S k) = x :: drop xs k
31 | (-) : (ts : List a) -> (v : a) -> (prf : Has v ts) => List a
32 | (-) xs _ {prf} = drop xs prf
38 | data Subset : {0 a: Type} -> (xs, ys : List a) -> Type where
40 | (::) : {0 x: a} -> (e : Has x ys) -> Subset xs ys -> Subset (x::xs) ys
43 | lemma_subset : Subset fs fs' -> Has f fs -> Has f fs'
44 | lemma_subset Nil has0 impossible
45 | lemma_subset (e :: _ ) Z = e
46 | lemma_subset (_ :: subset) (S has) = lemma_subset subset has