{-@ LIQUID "--no-termination" @-} {-@ LIQUID "totality" @-} module DataBase (values) where {-@ values :: forall val -> Prop>. k:key -> [Dict key val] -> [val] @-} values :: key -> [Dict key val] -> [val] values k = map go where go (D _ f) = f k data Dict key val = D {ddom :: [key], dfun :: key -> val} {-@ ddom :: forall val -> Prop>. x:Dict key val -> [key] @-} {-@ dfun :: forall val -> Prop>. x:Dict key val -> i:key -> val @-} {-@ data Dict key val val -> Prop> = D ( ddom :: [key]) ( dfun :: i:key -> val) @-}