úÎY3V»     NoneCIMembership value between 0 and 1 with Lukasiewicz join and meet operatorsDMembership value between 0 and 1 with Goguen join and meet operatorsCMembership value between 0 and 1 with Godel join and meet operators !"#$%&'()*+,- !"#$%&'()*+,-None &357>CL=Defines a mapping between sub-categories preserving morphisms FuzzySet type definition TReturns the preimage of the given set in input prop> preimage (^2) 25 [1..5] == [5] Returns an empty fuzzy setªInserts a new pair (i, m) to the fuzzy set prop> add godel1 (i, L.bottom) == godel1 prop> add goguen1 (i, L.bottom) == goguen1 prop> add lukas1 (i, L.bottom) == lukas1€Returns the fuzzy set's support prop> support godel1 == [1, 2] prop> support goguen1 == [1, 2] prop> support lukas1 == [1, 2]ÿAReturns the element i's membership if i belongs to the support returns its membership, otherwise returns bottom lattice value prop> mu godel1 1 == Godel 0.2 prop> mu godel1 10 == L.bottom prop> mu goguen1 1 == Goguen 0.2 prop> mu goguen1 10 == L.bottom prop> mu lukas1 1 == Lukas 0.2 prop> mu lukas1 10 == L.bottomÿˆReturns the crisp subset of given fuzzy set consisting of all elements with membership equals to one prop> core (fromList [(-1, Godel 0.5), (0, Godel 0.8), (1, Godel 1.0), (2, Godel 0.4)]) == [1] prop> core (fromList [(-1, Goguen 0.5), (0, Goguen 0.8), (1, Goguen 1.0), (2, Goguen 0.4)]) == [1] prop> core (fromList [(-1, Lukas 0.5), (0, Lukas 0.8), (1, Lukas 1.0), (2, Lukas 0.4)]) == [1]ÿ¼Returns those elements whose memberships are greater or equal than the given alpha prop> alphaCut (fromList [(-1, Godel 0.5), (0, Godel 0.8), (1, Godel 1.0), (2, Godel 0.4)]) (Godel 0.5) == [-1, 0, 1] prop> alphaCut (fromList [(-1, Goguen 0.5), (0, Goguen 0.8), (1, Goguen 1.0), (2, Goguen 0.4)]) (Goguen 0.5) == [-1, 0, 1] prop> alphaCut (fromList [(-1, Lukas 0.5), (0, Lukas 0.8), (1, Lukas 1.0), (2, Lukas 0.4)]) (Lukas 0.5) == [-1, 0, 1]àBuilds a fuzzy set from a list of pairs prop> fromList [(1, Godel 0.2)] == add empty (1, Godel 0.2) prop> fromList [(1, Goguen 0.2)] == add empty (1, Goguen 0.2) prop> fromList [(1, Lukas 0.2)] == add empty (1, Lukas 0.2)ÿApplies a unary function to the specified fuzzy set prop> map1 (*2) godel1 == fromList [(1, Godel 0.4), (2, Godel 1.0)] prop> map1 (*2) goguen1 == fromList [(1, Goguen 0.4), (2, Goguen 1.0)] prop> map1 (*2) lukas1 == fromList [(1, Lukas 0.4), (2, Lukas 1.0)]ÿOApplies a binary function to the two specified fuzzy sets prop> map2 (+) godel1 godel2 == fromList [(1, Godel 0.2), (2, Godel 0.7), (3, Godel 0.2)] prop> map2 (+) goguen1 goguen2 == fromList [(1, Goguen 0.2), (2, Goguen 0.7), (3, Goguen 0.2)] prop> map2 (+) lukas1 lukas2 == fromList [(1, Lukas 0.2), (2, Lukas 0.7), (3, Lukas 0.2)]ÿCReturns the union between the two specified fuzzy sets prop> union godel1 godel2 == fromList [(1, Godel 0.2), (2, Godel 0.5), (3, Godel 0.2)] prop> union goguen1 goguen2 == fromList [(1, Goguen 0.2), (2, Goguen 0.6), (3, Goguen 0.2)] prop> union lukas1 lukas2 == fromList [(1, Lukas 0.2), (2, Lukas 0.7), (3, Lukas 0.2)]éReturns the intersection between the two specified fuzzy sets prop> intersection godel1 godel2 == fromList [(2, Godel 0.2)] prop> intersection goguen1 goguen2 == fromList [(2, Goguen 0.1)] prop> intersection lukas1 lukas2 == emptyÿReturns the complement of the specified fuzzy set prop> complement godel1 == fromList [(1, Godel 0.8), (2, Godel 0.5)] prop> complement goguen1 == fromList [(1, Goguen 0.8), (2, Goguen 0.5)] prop> complement lukas1 == fromList [(1, Lukas 0.8), (2, Lukas 0.5)]ÿ`Returns the algebraic sum between the two specified fuzzy sets prop> algebraicSum godel1 godel2 == fromList [(1, Godel 0.2), (2, Godel 0.7), (3, Godel 0.2)] prop> algebraicSum goguen1 goguen2 == fromList [(1, Goguen 0.2), (2, Goguen 0.7), (3, Goguen 0.2)] prop> algebraicSum lukas1 lukas2 == fromList [(1, Lukas 0.2), (2, Lukas 0.7), (3, Lukas 0.2)]ÿReturns the algebraic product between the two specified fuzzy sets prop> algebraicProduct godel1 godel2 == fromList [(2, Godel 0.1)] prop> algebraicProduct goguen1 goguen2 == fromList [(2, Goguen 0.1)] prop> algebraicProduct lukas1 lukas2 == fromList [(2, Lukas 0.1)]ÿþReturns the cartesian product between two fuzzy sets using the specified function prop> generalizedProduct (+) godel1 godel2 == fromList [((1, 2), Godel 0.4), ((1, 3), Godel 0.4), ((2, 2), Godel 0.7), ((2, 3), Godel 0.7)] prop> generalizedProduct (+) goguen1 goguen2 == fromList [((1, 2), Goguen 0.4), ((1, 3), Goguen 0.4), ((2, 2), Goguen 0.7), ((2, 3), Goguen 0.7)] prop> generalizedProduct (+) lukas1 lukas2 == fromList [((1, 2), Lukas 0.4), ((1, 3), Lukas 0.4), ((2, 2), Lukas 0.7), ((2, 3), Lukas 0.7)].ÿ1Defines a functor for the FuzzySet type which allows to implement the Extension principle prop> fmap (^2) (fromList [(-1, Godel 0.5), (0, Godel 0.8), (1, Godel 1.0), (2, Godel 0.4)]) == fromList [(0, Godel 0.8), (1, Godel 1.0), (4, Godel 0.4)] prop> fmap (^2) (fromList [(-1, Goguen 0.5), (0, Goguen 0.8), (1, Goguen 1.0), (2, Goguen 0.4)]) == fromList [(0, Goguen 0.8), (1, Goguen 1.0), (4, Goguen 0.4)] prop> fmap (^2) (fromList [(-1, Lukas 0.5), (0, Lukas 0.8), (1, Lukas 1.0), (2, Lukas 0.4)]) == fromList [(0, Lukas 0.8), (1, Lukas 1.0), (4, Lukas 0.4)] ./     ./0      !"#$%&'()*+,-./012lfst_9SgdgCe01sSB0nBaCNWruB MembershipFuzzySetLukasiewiczMembershipLukasGoguenMembershipGoguenGodelMembershipGodel ExoFunctorSubCatConstraintISubCatConstraintJfmapFSpreimageemptyaddsupportmucorealphaCutfromListmap1map2union intersection complement algebraicSumalgebraicProductgeneralizedProduct%$fBoundedLatticeLukasiewiczMembership-$fBoundedMeetSemiLatticeLukasiewiczMembership-$fBoundedJoinSemiLatticeLukasiewiczMembership$fLatticeLukasiewiczMembership&$fMeetSemiLatticeLukasiewiczMembership&$fJoinSemiLatticeLukasiewiczMembership $fBoundedLatticeGoguenMembership($fBoundedMeetSemiLatticeGoguenMembership($fBoundedJoinSemiLatticeGoguenMembership$fLatticeGoguenMembership!$fMeetSemiLatticeGoguenMembership!$fJoinSemiLatticeGoguenMembership$fBoundedLatticeGodelMembership'$fBoundedMeetSemiLatticeGodelMembership'$fBoundedJoinSemiLatticeGodelMembership$fLatticeGodelMembership $fMeetSemiLatticeGodelMembership $fJoinSemiLatticeGodelMembership$fExoFunctorFuzzySeti$fShowFuzzySet