Clausura reflexiva
Usando el tipo de las relaciones binarias, definir las funciones
clausuraReflexiva :: Eq a => Rel a -> Rel a
tal que clausuraReflexiva r
es la clausura reflexiva de r
; es decir, la menor relación reflexiva que contiene a r. Por ejemplo,
λ> clausuraReflexiva (R ([1,3],[(1,1),(3,1)])) R ([1,3],[(1,1),(3,1),(3,3)])
Soluciones
A continuación se muestran las soluciones en Haskell y las soluciones en Python.
Soluciones en Haskell
import Relaciones_binarias (Rel(R)) import Data.List (union) import Test.QuickCheck (quickCheck) clausuraReflexiva :: Eq a => Rel a -> Rel a clausuraReflexiva (R (u,g)) = R (u, g `union` [(x,x) | x <- u])
Soluciones en Python
from typing import TypeVar from src.Relaciones_binarias import Rel A = TypeVar('A') def clausuraReflexiva(r: Rel[A]) -> Rel[A]: (u, g) = r return (u, list(set(g) | {(x, x) for x in u}))