{"id":3452,"date":"2017-11-29T06:00:49","date_gmt":"2017-11-29T04:00:49","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=3452"},"modified":"2017-12-08T08:33:16","modified_gmt":"2017-12-08T06:33:16","slug":"reconocimiento-de-relaciones-funcionales-entre-dos-conjuntos","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/reconocimiento-de-relaciones-funcionales-entre-dos-conjuntos\/","title":{"rendered":"Reconocimiento de relaciones funcionales entre dos conjuntos"},"content":{"rendered":"<p>Una <a href=\"http:\/\/bit.ly\/2hQkyKO\">relaci\u00f3n binaria<\/a> entre dos conjuntos A y B se puede representar mediante un conjunto de pares (a,b) tales que a \u2208 A y b \u2208 B. Por ejemplo, la relaci\u00f3n &lt; entre A = {1,5,3} y B = {0,2,4} se representa por {(1,2),(1,4),(3,4)}.<\/p>\n<p>Una relaci\u00f3n R entre A y B es funcional si cada elemento de A est\u00e1 relacionado mediante R como m\u00e1ximo con un elemento de B. Por ejemplo, [(2,4),(1,5),(3,4)] es funcional, pero [(3,4),(1,4),(1,2),(3,4)] no lo es.<\/p>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   esFuncional :: (Ord a, Ord b) => [(a,b)] -> Bool\n<\/pre>\n<p>tal que (esFuncional r) se verifica si la relaci\u00f3n r es funcional. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   esFuncional [(2,4),(1,5),(3,4)]        ==  True\n   esFuncional [(3,4),(1,4),(1,2),(3,4)]  ==  False\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List (nub, sort)\n\nesFuncional :: (Ord a, Ord b) => [(a,b)] -> Bool\nesFuncional r =\n  and [esUnitario (imagen r x) | x <- dominio r] \n\n-- (dominio r) es el dominio de la relaci\u00f3n r. Por ejemplo,\n--    dominio [(5,4),(1,4),(1,2),(3,4)]  ==  [1,3,5]\ndominio :: Ord a => [(a,b)] -> [a]\ndominio = sort . nub . map fst\n\n-- (imagen r x) es la imagen de x en la relaci\u00f3n r. Por ejemplo,\n--    imagen [(5,4),(1,4),(1,2),(3,4)] 1  ==  [2,4]\n--    imagen [(5,4),(1,4),(1,2),(3,4)] 2  ==  []\nimagen :: (Ord a, Ord b) => [(a,b)] -> a -> [b]\nimagen r x =\n  conjunto [y | (x1,y) <- r, x1 == x]\n\n-- (conjunto xs) es el conjunto (es decir, lista ordenada de elementos\n-- distintos) correspondiente a la lista xs. Por ejemplo, \n--    conjunto [7,2,3,2,7,3]  ==  [2,3,7]\nconjunto :: Ord a => [a] -> [a]\nconjunto = sort . nub\n\n-- (esUnitario xs) se verifica si xs tiene s\u00f3lo un elemento.\nesUnitario :: [a] -> Bool\nesUnitario xs =\n  length xs == 1\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Una relaci\u00f3n binaria entre dos conjuntos A y B se puede representar mediante un conjunto de pares (a,b) tales que a \u2208 A y b \u2208 B. Por ejemplo, la relaci\u00f3n &lt; entre A = {1,5,3} y B = {0,2,4} se representa por {(1,2),(1,4),(3,4)}. Una relaci\u00f3n R entre A y B es funcional si cada&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"footnotes":"","_jetpack_memberships_contains_paid_content":false},"categories":[5],"tags":[100,8,80,10,24,11,14],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3452"}],"collection":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/comments?post=3452"}],"version-history":[{"count":4,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3452\/revisions"}],"predecessor-version":[{"id":3504,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3452\/revisions\/3504"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=3452"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=3452"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=3452"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}