packages feed

liquidhaskell-0.8.0.2: tests/todo/maps.hs

module Maps where

import Prelude hiding (lookup)
import Data.Map

{-@ prop0   :: _ -> x:_ -> y:{_ | y == x} -> TT @-}
prop0       :: Map Int Int -> Int -> Int -> Bool
prop0 m x y = (a == b)
  where
    a       = m ! x 
    b       = m ! y 

{-@ prop1   :: _ -> x:_ -> y:{_ | y /= x} -> TT @-}
prop1       :: Map Int Int -> Int -> Int -> Bool
prop1 m x y = (z == 10)
  where
    m1      = insert x 10 m 
    m2      = insert y 20 m1
    z       = m2 ! x 

{-@ prop2   :: _ -> x:_ -> y:{_ | y == x} -> TT @-}
prop2 m x y = (z == 20)
  where
    m1      = insert x 10 m 
    m2      = insert y 20 m1
    z       = m2 ! x

-----------------------------------------------------------------------

{-@ embed Map as Map_t @-}
{-@ measure Map_select :: Map k v -> k -> v @-}
{-@ measure Map_store  :: Map k v -> k -> v -> Map k v @-}
{-@ assume (!)         :: (Ord k) => m:Map k v -> k:k -> {v:v | v = Map_select m k} @-}
{-@ assume insert      :: (Ord k) => key:k -> value:v -> m:Map k v -> {n:Map k v | n = Map_store m key value} @-}

-----------------------------------------------------------------------