satEU :: (CTL m a s, Ord a, Ord s) => m -> Formula a -> Formula a -> Set s
satEU m phi psi = satEU' (sat m phi) (states m) (sat m psi)
    where
        satEU' w x y = if x == y then y else satEU' w y
                       (Set.union y (Set.intersection w (preE m y)))
satEU :: (CTL m a s, Ord a, Ord s) => m -> Formula a -> Formula a -> Set s
satEU m phi psi = satEU' (sat m phi) (states m) (sat m psi)
    where
        satEU' w x y = if x == y then y else satEU' w y
                       (Set.union y (Set.intersection w (preE m y)))
satEU m phi psi = satEU' (sat m phi) (states m) (sat m psi)
    where
        satEU' w x y = if x == y then y else satEU' w y
                       (Set.union y (Set.intersection w (preE m y)))