module Compose where {-@ cmp :: forall < pref :: b -> Bool, postf :: b -> c -> Bool , pre :: a -> Bool, postg :: a -> b -> Bool , post :: a -> c -> Bool >. {xx::a
, w::b|- c <: c } {ww::a |- b<: b } f:(y:b -> c ) -> g:(z:a -> b) -> x: a -> c@-} cmp :: (b -> c) -> (a -> b) -> a -> c cmp f g x = f (g x) {-@ incr :: x:Nat -> {v:Nat | v == x + 1} @-} incr :: Int -> Int incr x = x + 1 {-@ incr2 :: x:Nat -> {v:Nat | v == x + 3} @-} incr2 :: Int -> Int incr2 = cmp incr incr