ersatz-0.4: A monad for expressing SAT or QSAT problems using observable sharing.

Safe HaskellNone
LanguageHaskell2010

Ersatz.Relation

Documentation

data Relation a b Source #

Instances

(Ix a, Ix b) => Codec (Relation a b) Source # 

Associated Types

type Decoded (Relation a b) :: * Source #

Methods

decode :: MonadPlus f => Solution -> Relation a b -> f (Decoded (Relation a b)) Source #

encode :: Decoded (Relation a b) -> Relation a b Source #

type Decoded (Relation a b) Source # 
type Decoded (Relation a b) = Array (a, b) Bool

relation :: (Ix a, Ix b, MonadState s m, HasSAT s) => ((a, b), (a, b)) -> m (Relation a b) Source #

symmetric_relation :: (HasSAT s, MonadState s m, Ix b) => ((b, b), (b, b)) -> m (Relation b b) Source #

build :: (Ix a, Ix b) => ((a, b), (a, b)) -> [((a, b), Bit)] -> Relation a b Source #

identity :: Ix a => ((a, a), (a, a)) -> Relation a a Source #

bounds :: (Ix a, Ix b) => Relation a b -> ((a, b), (a, b)) Source #

(!) :: (Ix a, Ix b) => Relation a b -> (a, b) -> Bit Source #

indices :: (Ix a, Ix b) => Relation a b -> [(a, b)] Source #

assocs :: (Ix a, Ix b) => Relation a b -> [((a, b), Bit)] Source #

elems :: (Ix a, Ix b) => Relation a b -> [Bit] Source #

table :: (Enum a, Ix a, Enum b, Ix b) => Array (a, b) Bool -> String Source #

mirror :: (Ix a, Ix b) => Relation a b -> Relation b a Source #

union :: (Ix a, Ix b) => Relation a b -> Relation a b -> Relation a b Source #

complement :: (Ix a, Ix b) => Relation a b -> Relation a b Source #

product :: (Ix a, Ix b, Ix c) => Relation a b -> Relation b c -> Relation a c Source #

power :: Ix a => Int -> Relation a a -> Relation a a Source #

intersection :: (Ix a, Ix b) => Relation a b -> Relation a b -> Relation a b Source #

implies :: (Ix a, Ix b) => Relation a b -> Relation a b -> Bit Source #

symmetric :: Ix a => Relation a a -> Bit Source #

transitive :: Ix a => Relation a a -> Bit Source #

reflexive :: Ix a => Relation a a -> Bit Source #

regular :: Ix a => Int -> Relation a a -> Bit Source #

max_in_degree :: Ix a => Int -> Relation a a -> Bit Source #

min_in_degree :: Ix a => Int -> Relation a a -> Bit Source #

empty :: (Ix a, Ix b) => Relation a b -> Bit Source #

complete :: (Ix a, Ix b) => Relation a b -> Bit Source #

disjoint :: (Ix a, Ix b) => Relation a b -> Relation a b -> Bit Source #

equals :: (Ix a, Ix b) => Relation a b -> Relation a b -> Bit Source #