ersatz-0.4.5: A monad for expressing SAT or QSAT problems using observable sharing.
Ersatz.Relation
data Relation a b Source #
Defined in Ersatz.Relation.Data
Associated Types
type Decoded (Relation a b) :: Type Source #
Methods
decode :: MonadPlus f => Solution -> Relation a b -> f (Decoded (Relation a b)) Source #
encode :: Decoded (Relation a b) -> Relation a b Source #
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 #
buildFrom :: (Ix a, Ix b) => (a -> b -> Bit) -> ((a, b), (a, b)) -> 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 #
difference :: (Ix a, Ix b) => Relation a 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 #
reflexive_closure :: Ix a => Relation a a -> Relation a a Source #
symmetric_closure :: Ix a => Relation a a -> Relation a a Source #
implies :: (Ix a, Ix b) => Relation a b -> Relation a b -> Bit Source #
symmetric :: Ix a => Relation a a -> Bit Source #
anti_symmetric :: Ix a => Relation a a -> Bit Source #
transitive :: Ix a => Relation a a -> Bit Source #
irreflexive :: Ix a => Relation a a -> Bit Source #
reflexive :: Ix a => Relation a a -> Bit Source #
regular :: (Ix a, Ix b) => Int -> Relation a b -> Bit Source #
regular_in_degree :: (Ix a, Ix b) => Int -> Relation a b -> Bit Source #
regular_out_degree :: (Ix a, Ix b) => Int -> Relation a b -> Bit Source #
max_in_degree :: (Ix a, Ix b) => Int -> Relation a b -> Bit Source #
min_in_degree :: (Ix a, Ix b) => Int -> Relation a b -> Bit Source #
max_out_degree :: (Ix a, Ix b) => Int -> Relation a b -> Bit Source #
min_out_degree :: (Ix a, Ix b) => Int -> Relation a b -> Bit Source #
empty :: (Ix a, Ix b) => Relation a b -> Bit Source #
complete :: (Ix a, Ix b) => Relation a b -> Bit Source #
total :: Ix a => Relation a a -> 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 #