| Copyright | (c) Andrey Mokhov 2016-2021 |
|---|---|
| License | MIT (see the file LICENSE) |
| Maintainer | andrey.mokhov@gmail.com |
| Stability | experimental |
| Safe Haskell | None |
| Language | Haskell2010 |
Algebra.Graph.Relation.Preorder
Contents
Description
An abstract implementation of preorder relations. Use Algebra.Graph.Class for polymorphic construction and manipulation.
Synopsis
- data PreorderRelation a
- fromRelation :: Relation a -> PreorderRelation a
- toRelation :: Ord a => PreorderRelation a -> Relation a
Data structure
data PreorderRelation a Source #
The PreorderRelation data type represents a
binary relation that is both reflexive and transitive. Preorders satisfy all
laws of the Preorder type class and, in particular, the self-loop axiom:
vertexx ==vertexx *vertexx
and the closure axiom:
y /= empty ==> x * y + x * z + y * z == x * y + y * zFor example, the following holds:
pathxs == (cliquexs :: PreorderRelation Int)
The Show instance produces reflexively and transitively closed expressions:
show (1 :: PreorderRelation Int) == "edge 1 1" show (1 * 2 :: PreorderRelation Int) == "edges [(1,1),(1,2),(2,2)]" show (1 * 2 + 2 * 3 :: PreorderRelation Int) == "edges [(1,1),(1,2),(1,3),(2,2),(2,3),(3,3)]"
Instances
fromRelation :: Relation a -> PreorderRelation a Source #
Construct a preorder relation from a Relation.
Complexity: O(1) time.
toRelation :: Ord a => PreorderRelation a -> Relation a Source #
Extract the underlying relation. Complexity: O(n * m * log(m)) time.