connections-0.1.0: Orders, Galois connections, and lattices.

Safe HaskellSafe
LanguageHaskell2010

Data.Semigroup.Quantale

Description

Synopsis

Documentation

class Semigroup a => Quantale a where Source #

A residuated, partially ordered semigroup.

In the interest of broader usability we relax the common definition slightly and use the term quantale to describe any residuated, partially ordered semigroup. This admits instances of hoops and triangular (co)-norms.

Laws:

x \\ x = mempty  
x <~ y iff mempty = x \\ y
x <> (x \\ y) = y <> (y \\ x)  
(x <> y) \\ z = y \\ (x \\ z) (currying)
x <> y <~ z iff y <~ x \\ z iff x <~ z // y.

See https://ncatlab.org/nlab/show/quantale.

TODO: There are several additional properties that apply when the poset structure is lattice-ordered (i.e. a residuated lattice) or when the semigroup is a monoid or semiring.

Minimal complete definition

Nothing

Methods

residL :: a -> ConnL a a Source #

residR :: a -> ConnR a a Source #

(//) :: a -> a -> a infixl 5 Source #

(\\) :: a -> a -> a infixr 5 Source #

Instances
Quantale All Source # 
Instance details

Defined in Data.Semigroup.Quantale

(TotalOrder a, Bounded a) => Quantale (Min a) Source # 
Instance details

Defined in Data.Semigroup.Quantale

Methods

residL :: Min a -> ConnL (Min a) (Min a) Source #

residR :: Min a -> ConnR (Min a) (Min a) Source #

(//) :: Min a -> Min a -> Min a Source #

(\\) :: Min a -> Min a -> Min a Source #

Quantale (Meet Bool) Source # 
Instance details

Defined in Data.Semigroup.Quantale

Quantale (Meet a) => Quantale (Meet (r -> a)) Source # 
Instance details

Defined in Data.Semigroup.Quantale

Methods

residL :: Meet (r -> a) -> ConnL (Meet (r -> a)) (Meet (r -> a)) Source #

residR :: Meet (r -> a) -> ConnR (Meet (r -> a)) (Meet (r -> a)) Source #

(//) :: Meet (r -> a) -> Meet (r -> a) -> Meet (r -> a) Source #

(\\) :: Meet (r -> a) -> Meet (r -> a) -> Meet (r -> a) Source #

Quantale (Meet Int) Source # 
Instance details

Defined in Data.Semigroup.Quantale

Quantale (Meet Int8) Source # 
Instance details

Defined in Data.Semigroup.Quantale

Quantale (Meet Int16) Source # 
Instance details

Defined in Data.Semigroup.Quantale

Quantale (Meet Int32) Source # 
Instance details

Defined in Data.Semigroup.Quantale

Quantale (Meet Int64) Source # 
Instance details

Defined in Data.Semigroup.Quantale

UnitalQuantale (Meet a) => Quantale (Meet (Maybe a)) Source # 
Instance details

Defined in Data.Semigroup.Quantale

Methods

residL :: Meet (Maybe a) -> ConnL (Meet (Maybe a)) (Meet (Maybe a)) Source #

residR :: Meet (Maybe a) -> ConnR (Meet (Maybe a)) (Meet (Maybe a)) Source #

(//) :: Meet (Maybe a) -> Meet (Maybe a) -> Meet (Maybe a) Source #

(\\) :: Meet (Maybe a) -> Meet (Maybe a) -> Meet (Maybe a) Source #

Quantale (Meet Ordering) Source # 
Instance details

Defined in Data.Semigroup.Quantale

Quantale (Meet Word) Source # 
Instance details

Defined in Data.Semigroup.Quantale

Quantale (Meet Word8) Source # 
Instance details

Defined in Data.Semigroup.Quantale

Quantale (Meet Word16) Source # 
Instance details

Defined in Data.Semigroup.Quantale

Quantale (Meet Word32) Source # 
Instance details

Defined in Data.Semigroup.Quantale

Quantale (Meet Word64) Source # 
Instance details

Defined in Data.Semigroup.Quantale

(Preorder a, UnitalQuantale (Meet a)) => Quantale (Meet (Either a a)) Source # 
Instance details

Defined in Data.Semigroup.Quantale

Methods

residL :: Meet (Either a a) -> ConnL (Meet (Either a a)) (Meet (Either a a)) Source #

residR :: Meet (Either a a) -> ConnR (Meet (Either a a)) (Meet (Either a a)) Source #

(//) :: Meet (Either a a) -> Meet (Either a a) -> Meet (Either a a) Source #

(\\) :: Meet (Either a a) -> Meet (Either a a) -> Meet (Either a a) Source #

Quantale (Meet ()) Source # 
Instance details

Defined in Data.Semigroup.Quantale

Methods

residL :: Meet () -> ConnL (Meet ()) (Meet ()) Source #

residR :: Meet () -> ConnR (Meet ()) (Meet ()) Source #

(//) :: Meet () -> Meet () -> Meet () Source #

(\\) :: Meet () -> Meet () -> Meet () Source #

Quantale (Meet (Predicate a)) Source # 
Instance details

Defined in Data.Semigroup.Quantale

Quantale (Join a) => Quantale (Meet (Down a)) Source # 
Instance details

Defined in Data.Semigroup.Quantale

Methods

residL :: Meet (Down a) -> ConnL (Meet (Down a)) (Meet (Down a)) Source #

residR :: Meet (Down a) -> ConnR (Meet (Down a)) (Meet (Down a)) Source #

(//) :: Meet (Down a) -> Meet (Down a) -> Meet (Down a) Source #

(\\) :: Meet (Down a) -> Meet (Down a) -> Meet (Down a) Source #

(TotalOrder k, Finite k, UnitalQuantale (Meet a)) => Quantale (Meet (Map k a)) Source # 
Instance details

Defined in Data.Semigroup.Quantale

Methods

residL :: Meet (Map k a) -> ConnL (Meet (Map k a)) (Meet (Map k a)) Source #

residR :: Meet (Map k a) -> ConnR (Meet (Map k a)) (Meet (Map k a)) Source #

(//) :: Meet (Map k a) -> Meet (Map k a) -> Meet (Map k a) Source #

(\\) :: Meet (Map k a) -> Meet (Map k a) -> Meet (Map k a) Source #

TotalOrder a => Quantale (Meet (Set a)) Source # 
Instance details

Defined in Data.Semigroup.Quantale

Methods

residL :: Meet (Set a) -> ConnL (Meet (Set a)) (Meet (Set a)) Source #

residR :: Meet (Set a) -> ConnR (Meet (Set a)) (Meet (Set a)) Source #

(//) :: Meet (Set a) -> Meet (Set a) -> Meet (Set a) Source #

(\\) :: Meet (Set a) -> Meet (Set a) -> Meet (Set a) Source #

Quantale (Meet a) => Quantale (Join (Down a)) Source # 
Instance details

Defined in Data.Semigroup.Quantale

Methods

residL :: Join (Down a) -> ConnL (Join (Down a)) (Join (Down a)) Source #

residR :: Join (Down a) -> ConnR (Join (Down a)) (Join (Down a)) Source #

(//) :: Join (Down a) -> Join (Down a) -> Join (Down a) Source #

(\\) :: Join (Down a) -> Join (Down a) -> Join (Down a) Source #

Quantale a => Quantale (r -> a) Source # 
Instance details

Defined in Data.Semigroup.Quantale

Methods

residL :: (r -> a) -> ConnL (r -> a) (r -> a) Source #

residR :: (r -> a) -> ConnR (r -> a) (r -> a) Source #

(//) :: (r -> a) -> (r -> a) -> r -> a Source #

(\\) :: (r -> a) -> (r -> a) -> r -> a Source #

(Applicative f, Quantale a) => Quantale (F1 f a) Source # 
Instance details

Defined in Data.Semigroup.Quantale

Methods

residL :: F1 f a -> ConnL (F1 f a) (F1 f a) Source #

residR :: F1 f a -> ConnR (F1 f a) (F1 f a) Source #

(//) :: F1 f a -> F1 f a -> F1 f a Source #

(\\) :: F1 f a -> F1 f a -> F1 f a Source #

(Applicative f, Applicative g, Quantale a) => Quantale (F2 f g a) Source # 
Instance details

Defined in Data.Semigroup.Quantale

Methods

residL :: F2 f g a -> ConnL (F2 f g a) (F2 f g a) Source #

residR :: F2 f g a -> ConnR (F2 f g a) (F2 f g a) Source #

(//) :: F2 f g a -> F2 f g a -> F2 f g a Source #

(\\) :: F2 f g a -> F2 f g a -> F2 f g a Source #

(<==) :: (Meet - Quantale) a => a -> a -> a infixl 1 Source #

(==>) :: (Meet - Quantale) a => a -> a -> a infixr 1 Source #

Logical implication.

x ==> x           = top
x /\ (x ==> y)  = x /\ y
y /\ (x ==> y)  = y
x ==> (y ==> z) = (x /\ y) ==> z
x ==> (y /\ z)  = (x ==> y) /\ (x ==> z)
meetLe ((x ==> y) \/ x) y
meetLe y (x ==> x /\ y)
meetLe x y => meetLe (z ==> x) (z ==> y)
meetLe x y => meetLe (x ==> z) (y ==> z)
meetLe x y = x ==> y == top
meetLe (x /\ y) z = meetLe x (y ==> z)

See Heyting for the laws.