-- | Proof: map
{-@ type Equal X Y = {v:Proof | X == Y} @-}

{- invariant {v:Proof | v == Proof } @-}

{-@ bound chain @-}
chain :: (Proof -> Bool) -> (Proof -> Bool) -> (Proof -> Bool) -> Proof -> Bool
chain p q r v = p v ==> q v ==> r v
chain :: (Proof -> Bool) -> (Proof -> Bool) -> (Proof -> Bool) -> Proof -> Bool
chain p q r v = p v ==> q v ==> r v
chain p q r v = p v ==> q v ==> r v