module Test.Function.Monotone where import Test.Logic monotone :: Ord r => (r -> r) -> r -> r -> Bool monotone = monotone_on (<=) (<=) -- | \( \forall a, b: a \leq b \Rightarrow f(a) \leq f(b) \) -- monotone_on :: Rel r Bool -> Rel s Bool -> (r -> s) -> r -> r -> Bool monotone_on (#) (%) f a b = a # b ==> f a % f b antitone :: Ord r => (r -> r) -> r -> r -> Bool antitone = antitone_on (<=) (<=) -- | \( \forall a, b: a \leq b \Rightarrow f(b) \leq f(a) \) -- antitone_on :: Rel r Bool -> Rel s Bool -> (r -> s) -> r -> r -> Bool antitone_on (#) (%) f a b = a # b ==> f b % f a