module Fuzzy.Sets.Properties (
isEmpty,
isSingleton,
isCrisp,
isUniversal,
strictSubsethood,
strictEquality,
gradedSubsethood,
gradedEquality,
) where
import FuzzySet
import Fuzzy.Sets.LSet
import Lattices.ResiduatedLattice
import FuzzySet
isEmpty :: (FuzzySet set a l) => set -> Bool
isEmpty :: forall set a l. FuzzySet set a l => set -> Bool
isEmpty set
set = forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all (forall a. Eq a => a -> a -> Bool
== forall l. BoundedLattice l => l
bot) (forall set a l. FuzzySet set a l => set -> [l]
truthDegrees set
set)
isSingleton :: (FuzzySet set a l) => set -> Bool
isSingleton :: forall set a l. FuzzySet set a l => set -> Bool
isSingleton set
set = forall (t :: * -> *) a. Foldable t => t a -> Int
length (forall a. (a -> Bool) -> [a] -> [a]
filter (forall a. Ord a => a -> a -> Bool
> forall l. BoundedLattice l => l
bot) (forall set a l. FuzzySet set a l => set -> [l]
truthDegrees set
set)) forall a. Eq a => a -> a -> Bool
== Int
1
isCrisp :: (FuzzySet set a l) => set -> Bool
isCrisp :: forall set a l. FuzzySet set a l => set -> Bool
isCrisp set
set = forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all (\l
x -> l
x forall a. Eq a => a -> a -> Bool
== forall l. BoundedLattice l => l
top Bool -> Bool -> Bool
|| l
x forall a. Eq a => a -> a -> Bool
== forall l. BoundedLattice l => l
bot) [a -> l
f a
x | a
x <- [a]
u]
where
f :: a -> l
f = forall set a l. FuzzySet set a l => set -> a -> l
member set
set
u :: [a]
u = forall set a l. FuzzySet set a l => set -> [a]
universe set
set
isUniversal :: (FuzzySet set a l) => set -> Bool
isUniversal :: forall set a l. FuzzySet set a l => set -> Bool
isUniversal set
set = forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all (forall a. Eq a => a -> a -> Bool
== forall l. BoundedLattice l => l
top) [a -> l
f a
x | a
x <- [a]
u]
where
u :: [a]
u = forall set a l. FuzzySet set a l => set -> [a]
universe set
set
f :: a -> l
f = forall set a l. FuzzySet set a l => set -> a -> l
member set
set
height :: (FuzzySet set a l) => set -> l
height :: forall set a l. FuzzySet set a l => set -> l
height set
_ = forall l. BoundedLattice l => l
top
support :: (FuzzySet set a l) => set -> [a]
support :: forall set a l. FuzzySet set a l => set -> [a]
support set
set = forall a. (a -> Bool) -> [a] -> [a]
filter ((forall a. Eq a => a -> a -> Bool
/=forall l. BoundedLattice l => l
bot) forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> l
f) [a]
u
where f :: a -> l
f = forall set a l. FuzzySet set a l => set -> a -> l
member set
set
u :: [a]
u = forall set a l. FuzzySet set a l => set -> [a]
universe set
set
core :: (FuzzySet set a l) => set -> [a]
core :: forall set a l. FuzzySet set a l => set -> [a]
core = forall set a l. FuzzySet set a l => l -> set -> [a]
alphaCut forall l. BoundedLattice l => l
top
strictSubsethood :: (FuzzySet set a l) => set -> set -> Bool
strictSubsethood :: forall set a l. FuzzySet set a l => set -> set -> Bool
strictSubsethood set
set1 set
set2 = forall l. BoundedLattice l => l
top forall a. Eq a => a -> a -> Bool
== forall set a l. FuzzySet set a l => set -> set -> l
gradedSubsethood set
set1 set
set2
strictEquality :: (FuzzySet set a l) => set -> set -> Bool
strictEquality :: forall set a l. FuzzySet set a l => set -> set -> Bool
strictEquality set
set1 set
set2 = forall l. BoundedLattice l => l
top forall a. Eq a => a -> a -> Bool
== forall set a l. FuzzySet set a l => set -> set -> l
gradedEquality set
set1 set
set2
gradedSubsethood :: (FuzzySet set a l) => set -> set -> l
gradedSubsethood :: forall set a l. FuzzySet set a l => set -> set -> l
gradedSubsethood set
set1 set
set2 = 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 a b. (a -> b) -> a -> b
$ forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith forall l. ResiduatedLattice l => l -> l -> l
(-->) (forall a b. (a -> b) -> [a] -> [b]
map a -> l
f [a]
u) (forall a b. (a -> b) -> [a] -> [b]
map a -> l
g [a]
u)
where
f :: a -> l
f = forall set a l. FuzzySet set a l => set -> a -> l
member set
set1
g :: a -> l
g = forall set a l. FuzzySet set a l => set -> a -> l
member set
set2
u :: [a]
u = forall set a l. FuzzySet set a l => set -> [a]
universe set
set1
gradedEquality :: (FuzzySet set a l) => set -> set -> l
gradedEquality :: forall set a l. FuzzySet set a l => set -> set -> l
gradedEquality set
set1 set
set2 = 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 a b. (a -> b) -> a -> b
$ forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith forall l. ResiduatedLattice l => l -> l -> l
(<-->) (forall a b. (a -> b) -> [a] -> [b]
map a -> l
f [a]
u) (forall a b. (a -> b) -> [a] -> [b]
map a -> l
g [a]
u)
where
f :: a -> l
f = forall set a l. FuzzySet set a l => set -> a -> l
member set
set1
g :: a -> l
g = forall set a l. FuzzySet set a l => set -> a -> l
member set
set2
u :: [a]
u = forall set a l. FuzzySet set a l => set -> [a]
universe set
set1