(==>) :: Bool -> Bool -> Bool x ==> y = (not x) || y (<=>) :: Bool -> Bool -> Bool x <=> y = x == y exists, forall :: (a -> Bool) -> [a] -> Bool exists p = or.map p forall p = and . map p todo, algun :: [a] -> (a -> Bool) -> Bool todo xs p = forall p xs algun xs p = exists p xs val1 :: (Bool -> Bool) -> Bool val1 bf = (bf True) && (bf False) val2 :: (Bool -> Bool -> Bool) -> Bool val2 bf = and [ bf p q | p <- [False, True], q <- [False, True]] p = True q = False for0 p = p ==> not p for1 = (not p) && (p==>q) <=> not (q && (not p)) for2 p q = ((not p) && (p ==> q) <=> not (q && (not p)))