Relaciones de equivalencia
Usando el tipo de las relaciones binarias, definir la función
1 |
esEquivalencia :: Ord a => Rel a -> Bool |
tal que esEquivalencia r
se verifica si la relación r
es de equivalencia. Por ejemplo,
1 2 3 4 5 6 |
λ> esEquivalencia (R ([1,3,5],[(1,1),(1,3),(3,1),(3,3),(5,5)])) True λ> esEquivalencia (R ([1,2,3,5],[(1,1),(1,3),(3,1),(3,3),(5,5)])) False λ> esEquivalencia (R ([1,3,5],[(1,1),(1,3),(3,3),(5,5)])) False |
Soluciones
A continuación se muestran las soluciones en Haskell y las soluciones en Python.
1 2 3 4 5 6 7 |
import Relaciones_binarias (Rel(R)) import Relaciones_reflexivas (reflexiva) import Relaciones_simetricas (simetrica) import Relaciones_transitivas (transitiva) esEquivalencia :: Ord a => Rel a -> Bool esEquivalencia r = reflexiva r && simetrica r && transitiva r |
1 2 3 4 5 6 7 8 9 10 11 |
from typing import TypeVar from src.Relaciones_binarias import Rel, relacionArbitraria from src.Relaciones_reflexivas import reflexiva from src.Relaciones_simetricas import simetrica from src.Relaciones_transitivas import transitiva A = TypeVar('A') def esEquivalencia(r: Rel[A]) -> bool: return reflexiva(r) and simetrica(r) and transitiva(r) |