module Fuzzy.Relations.RelationComposition (
circlet,
subproduct,
superproduct,
square,
) where
import Fuzzy.Relations.LRelation
import Lattices.ResiduatedLattice
import Utils.Utils
circlet :: (Eq a,ResiduatedLattice l) => LRelation a l -> LRelation a l -> LRelation a l
circlet :: forall a l.
(Eq a, ResiduatedLattice l) =>
LRelation a l -> LRelation a l -> LRelation a l
circlet (LRelation (a, a) -> l
r [(a, a)]
u) (LRelation (a, a) -> l
s [(a, a)]
_ ) = forall a l. ((a, a) -> l) -> [(a, a)] -> LRelation a l
LRelation (a, a) -> l
composition [(a, a)]
u
where composition :: (a, a) -> l
composition (a
x, a
z) = 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
bot [(a, a) -> l
r (a
x, a
y) forall l. ResiduatedLattice l => l -> l -> l
`tnorm` (a, a) -> l
s (a
y, a
z) | a
y <- [a]
universe]
universe :: [a]
universe = forall a. Eq a => [(a, a)] -> [a]
universeToList [(a, a)]
u
subproduct :: (Eq a,ResiduatedLattice l) => LRelation a l -> LRelation a l -> LRelation a l
subproduct :: forall a l.
(Eq a, ResiduatedLattice l) =>
LRelation a l -> LRelation a l -> LRelation a l
subproduct (LRelation (a, a) -> l
r [(a, a)]
u) (LRelation (a, a) -> l
s [(a, a)]
_) = forall a l. ((a, a) -> l) -> [(a, a)] -> LRelation a l
LRelation (a, a) -> l
composition [(a, a)]
u
where composition :: (a, a) -> l
composition (a
x, a
z) = 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
r (a
x, a
y) forall l. ResiduatedLattice l => l -> l -> l
--> (a, a) -> l
s (a
y, a
z) | a
y <- [a]
universe]
universe :: [a]
universe = forall a. Eq a => [(a, a)] -> [a]
universeToList [(a, a)]
u
superproduct :: (Eq a,ResiduatedLattice l) => LRelation a l -> LRelation a l -> LRelation a l
superproduct :: forall a l.
(Eq a, ResiduatedLattice l) =>
LRelation a l -> LRelation a l -> LRelation a l
superproduct (LRelation (a, a) -> l
r [(a, a)]
u) (LRelation (a, a) -> l
s [(a, a)]
_) = forall a l. ((a, a) -> l) -> [(a, a)] -> LRelation a l
LRelation (a, a) -> l
composition [(a, a)]
u
where composition :: (a, a) -> l
composition (a
x, a
z) = 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
bot [(a, a) -> l
r (a
x, a
y) forall l. ResiduatedLattice l => l -> l -> l
<-- (a, a) -> l
s (a
y, a
z) | a
y <- [a]
universe]
eq :: a -> a -> l
eq a
x a
y = (a, a) -> l
r (a
x, a
y) forall l. ResiduatedLattice l => l -> l -> l
<--> (a, a) -> l
s (a
x, a
y)
universe :: [a]
universe = forall a. Eq a => [(a, a)] -> [a]
universeToList [(a, a)]
u
square :: (Eq a, ResiduatedLattice l) => LRelation a l -> LRelation a l -> LRelation a l
square :: forall a l.
(Eq a, ResiduatedLattice l) =>
LRelation a l -> LRelation a l -> LRelation a l
square (LRelation (a, a) -> l
r [(a, a)]
u) (LRelation (a, a) -> l
s [(a, a)]
_) = forall a l. ((a, a) -> l) -> [(a, a)] -> LRelation a l
LRelation (a, a) -> l
composition [(a, a)]
u
where composition :: (a, a) -> l
composition (a
x, a
z) = 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
bot [(a, a) -> l
r (a
x, a
y) forall l. ResiduatedLattice l => l -> l -> l
<--> (a, a) -> l
s (a
y, a
z) | a
y <- [a]
universe]
universe :: [a]
universe = forall a. Eq a => [(a, a)] -> [a]
universeToList [(a, a)]
u