module Fuzzy.Relations.Properties (
ref,
sym,
tra,
irref,
asym,
) where
import Fuzzy.Relations.LRelation
import Lattices.ResiduatedLattice
import Utils.Utils(universeToList)
import Lattices.UnitIntervalStructures.Godel
ref :: (Eq a, ResiduatedLattice l) => LRelation a l -> l
ref :: forall a l. (Eq a, ResiduatedLattice l) => LRelation a l -> l
ref (LRelation (a, a) -> l
f [(a, a)]
u) =
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr forall l. BoundedLattice l => l -> l -> l
(/\) forall l. BoundedLattice l => l
top [(a, a) -> l
f (a, a)
x | (a, a)
x <- [(a, a)]
u, forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall a. Eq a => a -> a -> Bool
(==) (a, a)
x]
where universe :: [a]
universe = forall a. Eq a => [(a, a)] -> [a]
universeToList [(a, a)]
u
sym :: (Eq a,ResiduatedLattice l) => LRelation a l -> l
sym :: forall a l. (Eq a, ResiduatedLattice l) => LRelation a l -> l
sym (LRelation (a, a) -> l
f [(a, a)]
u) =
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr forall l. BoundedLattice l => l -> l -> l
(/\) forall l. BoundedLattice l => l
top [(a, a) -> l
f (a
x, a
y) forall l. ResiduatedLattice l => l -> l -> l
--> (a, a) -> l
f (a
y, a
x) | a
x <- [a]
universe, a
y <- [a]
universe]
where universe :: [a]
universe = forall a. Eq a => [(a, a)] -> [a]
universeToList [(a, a)]
u
tra :: (Eq a,ResiduatedLattice l) => LRelation a l -> l
tra :: forall a l. (Eq a, ResiduatedLattice l) => LRelation a l -> l
tra (LRelation (a, a) -> l
f [(a, a)]
u) =
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr forall l. BoundedLattice l => l -> l -> l
(/\) forall l. BoundedLattice l => l
top [(a, a) -> l
f (a
x, a
y) forall l. BoundedLattice l => l -> l -> l
/\ (a, a) -> l
f (a
y, a
z) forall l. ResiduatedLattice l => l -> l -> l
--> (a, a) -> l
f (a
x, a
z) |
a
x <- [a]
universe, a
y <- [a]
universe, a
z <- [a]
universe]
where universe :: [a]
universe = forall a. Eq a => [(a, a)] -> [a]
universeToList [(a, a)]
u
irref :: (Eq a,ResiduatedLattice l) => LRelation a l -> l
irref :: forall a l. (Eq a, ResiduatedLattice l) => LRelation a l -> l
irref (LRelation (a, a) -> l
f [(a, a)]
u) =
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr forall l. BoundedLattice l => l -> l -> l
(/\) forall l. BoundedLattice l => l
top [forall l. ResiduatedLattice l => l -> l
negation ((a, a) -> l
f (a, a)
x) | (a, a)
x <- [(a, a)]
u, forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall a. Eq a => a -> a -> Bool
(==) (a, a)
x]
where universe :: [a]
universe = forall a. Eq a => [(a, a)] -> [a]
universeToList [(a, a)]
u
asym :: (Eq a,ResiduatedLattice l) => LRelation a l -> l
asym :: forall a l. (Eq a, ResiduatedLattice l) => LRelation a l -> l
asym (LRelation (a, a) -> l
f [(a, a)]
u) =
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr forall l. BoundedLattice l => l -> l -> l
(/\) forall l. BoundedLattice l => l
top [(a, a) -> l
f (a
x, a
y) forall l. ResiduatedLattice l => l -> l -> l
--> forall l. ResiduatedLattice l => l -> l
negation ((a, a) -> l
f (a
y, a
x)) | a
x <- [a]
universe, a
y <- [a]
universe]
where universe :: [a]
universe = forall a. Eq a => [(a, a)] -> [a]
universeToList [(a, a)]
u