import public Data.List.EqualitiesextractBasedOnFst : (xs : List (a, b)) -> Elem x (map fst xs) -> bextractBasedOnFstSpec : (xs : List a) -> (f : (a -> (b, c))) -> (x : b) -> (xInXs : Elem x (map fst (map f xs))) -> (e : a ** extractBasedOnFst (map f xs) xInXs = snd (f e))extractBasedOnFstAppLor : (xs : List (a, b)) -> (ys : List (a, b)) -> (x : a) -> (xInApp : Elem x (map fst (xs ++ ys))) -> Either (xInXs : Elem x (map fst xs) ** extractBasedOnFst (xs ++ ys) xInApp = extractBasedOnFst xs xInXs) (xInYs : Elem x (map fst ys) ** extractBasedOnFst (xs ++ ys) xInApp = extractBasedOnFst ys xInYs)replicate : Nat -> a -> SnocList areplicateForSucc : (k : Nat) -> (elem : a) -> [<elem] ++ replicate k elem = replicate (S k) elembindSpec : (f : (a -> List b)) -> (p : Pred b) -> (q : Pred a) -> ((x : a) -> (y : b ** (Elem y (f x), p y)) -> q x) -> (cs : List a) -> (y : b ** (Elem y (cs >>= f), p y)) -> (x : a ** (Elem x cs, (q x, (y : b ** (Elem y (f x), p y)))))mapSpec : (f : ((a, b) -> c)) -> (q : Pred (a, b)) -> (p : Pred c) -> (xs : List (a, b)) -> ((x1 : a) -> (x2 : b) -> p (f (x1, x2)) -> q (x1, x2)) -> (y : c) -> (Elem y (map f xs), p y) -> (x1 : a ** (x2 : b ** (prf : Elem x1 (map fst xs) ** (extractBasedOnFst xs prf = x2, (f (x1, x2) = y, q (x1, x2))))))biMapOnFst : (xs : List (a, c)) -> (f : (a -> b)) -> (g : (c -> d)) -> map fst (map (bimap f g) xs) = map f (map fst xs)elemMapRev : (xs : List a) -> (f : (a -> b)) -> Elem e (map f xs) -> (e' : a ** (Elem e' xs, f e' = e))eqForJust : Just x = Just y -> x = y