| Copyright | (c) Erich Gut |
|---|---|
| License | BSD3 |
| Maintainer | zerich.gut@gmail.com |
| Safe Haskell | None |
| Language | Haskell2010 |
OAlg.Entity.Diagram.Definition
Description
definition of Diagrams on Oriented structures.
Duality Each diagram admits a co-diagram just by reversing the arrows and leaving the points untouched. In the following it will be demonstrated how to work - respectively - how to switch between a diagram and its co-diagram and how this duality-concept is implemented.
Let d be a diagram in over a Diagram t n m xOriented structure x. To get
the co-diagram d' of d just use the code:
Contravariant2 i = toDualOpOrt SDualBi (Left1 d') = amapF i (SDualBi (Right1 d))
where toDualOpOrt is the duality operator with type
which can be applied to IsoO Ort Op x (Op x)SDualBi.
And to get the diagram d of a given co-diagram d' just use the code:
Contravariant2 i = toDualOpOrt SDualBi (Right1 d) = amapF (inv2 i) (SDualBi (Left1 d'))
where is the inverse of inv2 ii. As the application of on IsoO Ort OpSDualBi
is functorial, the two mappings and amapF i are inverse to each other.amapF (inv2 i)
To implement this behavior, follow the following steps:
First implement two functions on , where the one maps it to
Diagram t n m x according to a covariant homomorphism on Diagram t n m yOriented structures
(see dgMapCov) and the other maps it to (see Diagram (Dual t) n m ydgMapCnt).
Now define the duality on the types according
type instance Dual1 (Diagram t n m) = Diagram (Dual t) n m
With this definitions you can implement the mapping dgMapS on SDualBi by
dgMapS = vmapBi dgMapCov dgMapCov dgMapCnt dgMapCnt
where vmapBi implements the duality mapping on SDualBi.
Finally on can declare the
instance (HomDisjunctiveOriented h, t ~ Dual (Dual t)) => ApplicativeG (SDualBi (Diagram t n m)) h (->) where amapG = dgMapS
and because of the given implementation of dgMapCov, dgMapCnt and the property of vmapBi
on can declare:
instance ( HomOrientedDisjunctive h , FunctorialOriented h , t ~ Dual (Dual t) ) => FunctorialG (SDualBi (Diagram t n m)) h (->)
Synopsis
- data Diagram (t :: DiagramType) (n :: N') (m :: N') a where
- DiagramEmpty :: forall a. Diagram 'Empty 'N0 'N0 a
- DiagramDiscrete :: forall (n :: N') a. FinList n (Point a) -> Diagram 'Discrete n 'N0 a
- DiagramChainTo :: forall a (m :: N'). Point a -> FinList m a -> Diagram ('Chain 'To) (m + 1) m a
- DiagramChainFrom :: forall a (m :: N'). Point a -> FinList m a -> Diagram ('Chain 'From) (m + 1) m a
- DiagramParallelLR :: forall a (m :: N'). Point a -> Point a -> FinList m a -> Diagram ('Parallel 'LeftToRight) ('S N1) m a
- DiagramParallelRL :: forall a (m :: N'). Point a -> Point a -> FinList m a -> Diagram ('Parallel 'RightToLeft) ('S N1) m a
- DiagramSink :: forall a (m :: N'). Point a -> FinList m a -> Diagram ('Star 'To) (m + 1) m a
- DiagramSource :: forall a (m :: N'). Point a -> FinList m a -> Diagram ('Star 'From) (m + 1) m a
- DiagramGeneral :: forall (n :: N') a (m :: N'). FinList n (Point a) -> FinList m (a, Orientation N) -> Diagram 'General n m a
- data DiagramType
- rt' :: forall (t :: DiagramType). (Dual (Dual t) :~: t) -> Dual (Dual (Dual t)) :~: Dual t
- dgType :: forall (t :: DiagramType) (n :: N') (m :: N') a. Diagram t n m a -> DiagramType
- dgTypeRefl :: forall (t :: DiagramType) (n :: N') (m :: N') a. Diagram t n m a -> Dual (Dual t) :~: t
- dgPoints :: forall a (t :: DiagramType) (n :: N') (m :: N'). Oriented a => Diagram t n m a -> FinList n (Point a)
- dgCenter :: forall (t :: Site) (n :: N') (m :: N') c. Diagram ('Star t) n m c -> Point c
- dgArrows :: forall (t :: DiagramType) (n :: N') (m :: N') a. Diagram t n m a -> FinList m a
- dgQuiver :: forall a (t :: DiagramType) (n :: N') (m :: N'). Oriented a => Diagram t n m a -> Quiver n m
- dgMapS :: forall h (t :: DiagramType) x y (n :: N') (m :: N'). (HomOrientedDisjunctive h, t ~ Dual (Dual t)) => h x y -> SDualBi (Diagram t n m) x -> SDualBi (Diagram t n m) y
- dgMapCov :: forall (h :: Type -> Type -> Type) x y (t :: DiagramType) (n :: N') (m :: N'). HomOrientedDisjunctive h => Variant2 'Covariant h x y -> Diagram t n m x -> Diagram t n m y
- dgMapCnt :: forall (h :: Type -> Type -> Type) x y (t :: DiagramType) (n :: N') (m :: N'). HomOrientedDisjunctive h => Variant2 'Contravariant h x y -> Diagram t n m x -> Dual1 (Diagram t n m) y
- dgMap :: forall h x y (t :: DiagramType) (n :: N') (m :: N'). HomOriented h => h x y -> Diagram t n m x -> Diagram t n m y
- chnToStart :: forall a (n :: N') (m :: N'). Oriented a => Diagram ('Chain 'To) n m a -> Point a
- chnFromStart :: forall (n :: N') (m :: N') a. Diagram ('Chain 'From) n m a -> Point a
- dgPrlAdjZero :: forall a (n :: N') (m :: N'). Distributive a => Diagram ('Parallel 'LeftToRight) n m a -> Diagram ('Parallel 'LeftToRight) n (m + 1) a
- dgPrlTail :: forall (d :: Direction) (n :: N') (m :: N') a. Diagram ('Parallel d) n (m + 1) a -> Diagram ('Parallel d) n m a
- dgPrlDiffHead :: forall a (d :: Direction) (n :: N') (m :: N'). Abelian a => Diagram ('Parallel d) n (m + 1) a -> Diagram ('Parallel d) n (m + 1) a
- dgPrlDiffTail :: forall a (d :: Direction) (n :: N') (m :: N'). Abelian a => Diagram ('Parallel d) n (m + 1) a -> Diagram ('Parallel d) n m a
- data SomeDiagram a where
- SomeDiagram :: forall (t :: DiagramType) (n :: N') (m :: N') a. Diagram t n m a -> SomeDiagram a
- sdgMap :: forall (h :: Type -> Type -> Type) s (o :: Type -> Type) x y. (HomOriented h, DualisableOriented s o) => HomDisj s o h x y -> SomeDiagram x -> SomeDiagram y
- data XDiagram (t :: DiagramType) (n :: N') (m :: N') a where
- XDiagramEmpty :: forall a. XDiagram 'Empty 'N0 'N0 a
- XDiagramDiscrete :: forall (n :: N') a. Any n -> X (Point a) -> XDiagram 'Discrete n 'N0 a
- XDiagramChainTo :: forall (m :: N') a. Any m -> XOrtSite 'To a -> XDiagram ('Chain 'To) (m + 1) m a
- XDiagramChainFrom :: forall (m :: N') a. Any m -> XOrtSite 'From a -> XDiagram ('Chain 'From) (m + 1) m a
- XDiagramParallelLR :: forall (m :: N') a. Any m -> XOrtOrientation a -> XDiagram ('Parallel 'LeftToRight) ('S N1) m a
- XDiagramParallelRL :: forall (m :: N') a. Any m -> XOrtOrientation a -> XDiagram ('Parallel 'RightToLeft) ('S N1) m a
- XDiagramSink :: forall (m :: N') a. Any m -> XOrtSite 'To a -> XDiagram ('Star 'To) (m + 1) m a
- XDiagramSource :: forall (m :: N') a. Any m -> XOrtSite 'From a -> XDiagram ('Star 'From) (m + 1) m a
- xDiagram :: forall a (t :: DiagramType) (n :: N') (m :: N'). Oriented a => (Dual (Dual t) :~: t) -> XDiagram t n m a -> X (Diagram t n m a)
- xDiagramChain :: forall x (m :: N') (n :: N') (t :: Site). (Oriented x, Attestable m, n ~ (m + 1)) => XOrtSite t x -> X (Diagram ('Chain t) n m x)
- xSomeDiagram :: Oriented a => X SomeNatural -> XOrtSite 'To a -> XOrtSite 'From a -> XOrtOrientation a -> X (SomeDiagram a)
- dstSomeDiagram :: Oriented a => Int -> X (SomeDiagram a) -> IO ()
- xSomeDiagramOrnt :: Entity p => X SomeNatural -> X p -> X (SomeDiagram (Orientation p))
Diagram
data Diagram (t :: DiagramType) (n :: N') (m :: N') a where Source #
diagram for a Oriented structure a of type t having n points
and m arrows.
Properties Let d be in for a Diagram t n m aOriented
structure a, then holds:
- If
dmatchesthen holds:DiagramChainToe aseand==enda0for allstartai==endai+1i = 0..m-2wherea0.:|..:|ai:|..:|am-1:|Nil= as - If
dmatchesthen holds:DiagramChainFroms assand==starta0for allendai==startai+1i = 0..m-2wherea0.:|..:|ai:|..:|am-1:|Nil= as - If
dmatchesthen holds:DiagramParallelLRl r asfor allorientationa==l:>rainas. - If
dmatchesthen holds:DiagramParallelRLl r asfor allorientationa==r:>lainas. - If
dmatchesthen holds:DiagramSinke asefor all==endaainas. - If
dmatchesthen holds:DiagramSources assfor all==startaainas. - If
dmatchesthen holdsDiagramGeneralps aijspi==startaijandpj==endaijfor allaijinaijsandps = p0..pn-1@.
Constructors
| DiagramEmpty :: forall a. Diagram 'Empty 'N0 'N0 a | |
| DiagramDiscrete :: forall (n :: N') a. FinList n (Point a) -> Diagram 'Discrete n 'N0 a | |
| DiagramChainTo :: forall a (m :: N'). Point a -> FinList m a -> Diagram ('Chain 'To) (m + 1) m a | |
| DiagramChainFrom :: forall a (m :: N'). Point a -> FinList m a -> Diagram ('Chain 'From) (m + 1) m a | |
| DiagramParallelLR :: forall a (m :: N'). Point a -> Point a -> FinList m a -> Diagram ('Parallel 'LeftToRight) ('S N1) m a | |
| DiagramParallelRL :: forall a (m :: N'). Point a -> Point a -> FinList m a -> Diagram ('Parallel 'RightToLeft) ('S N1) m a | |
| DiagramSink :: forall a (m :: N'). Point a -> FinList m a -> Diagram ('Star 'To) (m + 1) m a | |
| DiagramSource :: forall a (m :: N'). Point a -> FinList m a -> Diagram ('Star 'From) (m + 1) m a | |
| DiagramGeneral :: forall (n :: N') a (m :: N'). FinList n (Point a) -> FinList m (a, Orientation N) -> Diagram 'General n m a |
Instances
data DiagramType Source #
the types of a Diagram.
Instances
rt' :: forall (t :: DiagramType). (Dual (Dual t) :~: t) -> Dual (Dual (Dual t)) :~: Dual t Source #
Dual is well defined on diagram types.
dgType :: forall (t :: DiagramType) (n :: N') (m :: N') a. Diagram t n m a -> DiagramType Source #
the type of a diagram.
dgTypeRefl :: forall (t :: DiagramType) (n :: N') (m :: N') a. Diagram t n m a -> Dual (Dual t) :~: t Source #
reflexivity of the underlying diagram type.
dgPoints :: forall a (t :: DiagramType) (n :: N') (m :: N'). Oriented a => Diagram t n m a -> FinList n (Point a) Source #
the points of a diagram.
dgCenter :: forall (t :: Site) (n :: N') (m :: N') c. Diagram ('Star t) n m c -> Point c Source #
the center point of a Star-diagram.
dgArrows :: forall (t :: DiagramType) (n :: N') (m :: N') a. Diagram t n m a -> FinList m a Source #
the arrows of a diagram.
dgQuiver :: forall a (t :: DiagramType) (n :: N') (m :: N'). Oriented a => Diagram t n m a -> Quiver n m Source #
the underlying quiver of a diagram.
Duality
dgMapS :: forall h (t :: DiagramType) x y (n :: N') (m :: N'). (HomOrientedDisjunctive h, t ~ Dual (Dual t)) => h x y -> SDualBi (Diagram t n m) x -> SDualBi (Diagram t n m) y Source #
dgMapCov :: forall (h :: Type -> Type -> Type) x y (t :: DiagramType) (n :: N') (m :: N'). HomOrientedDisjunctive h => Variant2 'Covariant h x y -> Diagram t n m x -> Diagram t n m y Source #
dgMapCnt :: forall (h :: Type -> Type -> Type) x y (t :: DiagramType) (n :: N') (m :: N'). HomOrientedDisjunctive h => Variant2 'Contravariant h x y -> Diagram t n m x -> Dual1 (Diagram t n m) y Source #
mapping of a diagram via a Contravariant homomorphism on Oriented structures.
Properties Let d be in 'Diagram t n m a and
in Contravariant2 h with
Variant2 Contravariant h a b, then holds:HomOrientedDisjunctive s o h
.dgArrows(dgMapCovq h d)==amap1(amaph) (dgArrowsd).dgPoints(dgMapCovq h d)==amap1(pmaph) (dgPointsd)
where q is any proxy in q s o.
dgMap :: forall h x y (t :: DiagramType) (n :: N') (m :: N'). HomOriented h => h x y -> Diagram t n m x -> Diagram t n m y Source #
mapping of a diagram via a Covariant homomorphism on Oriented structures.
Properties Let d be in 'Diagram t n m a and
in Covariant2 h with
Variant2 Covariant h a b, then holds:HomOrientedDisjunctive s o h
.dgArrows(dgMapCovq h d)==amap1(amaph) (dgArrowsd).dgPoints(dgMapCovq h d)==amap1(pmaph) (dgPointsd)
where q is any proxy in q s o.
Chain
chnToStart :: forall a (n :: N') (m :: N'). Oriented a => Diagram ('Chain 'To) n m a -> Point a Source #
the last point of the chain.
chnFromStart :: forall (n :: N') (m :: N') a. Diagram ('Chain 'From) n m a -> Point a Source #
the first point of the chain.
Parallel
dgPrlAdjZero :: forall a (n :: N') (m :: N'). Distributive a => Diagram ('Parallel 'LeftToRight) n m a -> Diagram ('Parallel 'LeftToRight) n (m + 1) a Source #
adjoins a zero arrow as the first parallel arrow.
dgPrlTail :: forall (d :: Direction) (n :: N') (m :: N') a. Diagram ('Parallel d) n (m + 1) a -> Diagram ('Parallel d) n m a Source #
the _tail__ of a parallel diagram.
dgPrlDiffHead :: forall a (d :: Direction) (n :: N') (m :: N'). Abelian a => Diagram ('Parallel d) n (m + 1) a -> Diagram ('Parallel d) n (m + 1) a Source #
subtracts to every arrow of the parallel diagram the first arrow.
dgPrlDiffTail :: forall a (d :: Direction) (n :: N') (m :: N'). Abelian a => Diagram ('Parallel d) n (m + 1) a -> Diagram ('Parallel d) n m a Source #
subtracts the first arrow to all the others an drops it.
SomeDiagram
data SomeDiagram a where Source #
some diagram.
Constructors
| SomeDiagram :: forall (t :: DiagramType) (n :: N') (m :: N') a. Diagram t n m a -> SomeDiagram a |
Instances
| (HomOriented h, DualisableOriented s o) => ApplicativeG SomeDiagram (HomDisj s o h) (->) Source # | |
Defined in OAlg.Entity.Diagram.Definition Methods amapG :: HomDisj s o h x y -> SomeDiagram x -> SomeDiagram y Source # | |
| (HomOriented h, DualisableOriented s o) => FunctorialG SomeDiagram (HomDisj s o h) (->) Source # | |
Defined in OAlg.Entity.Diagram.Definition | |
| Oriented a => Show (SomeDiagram a) Source # | |
Defined in OAlg.Entity.Diagram.Definition Methods showsPrec :: Int -> SomeDiagram a -> ShowS # show :: SomeDiagram a -> String # showList :: [SomeDiagram a] -> ShowS # | |
| Oriented a => Eq (SomeDiagram a) Source # | |
Defined in OAlg.Entity.Diagram.Definition Methods (==) :: SomeDiagram a -> SomeDiagram a -> Bool # (/=) :: SomeDiagram a -> SomeDiagram a -> Bool # | |
| Oriented a => Validable (SomeDiagram a) Source # | |
Defined in OAlg.Entity.Diagram.Definition Methods valid :: SomeDiagram a -> Statement Source # | |
sdgMap :: forall (h :: Type -> Type -> Type) s (o :: Type -> Type) x y. (HomOriented h, DualisableOriented s o) => HomDisj s o h x y -> SomeDiagram x -> SomeDiagram y Source #
mapping of some diagram.
X
data XDiagram (t :: DiagramType) (n :: N') (m :: N') a where Source #
generator for random variables of diagrams.
Constructors
| XDiagramEmpty :: forall a. XDiagram 'Empty 'N0 'N0 a | |
| XDiagramDiscrete :: forall (n :: N') a. Any n -> X (Point a) -> XDiagram 'Discrete n 'N0 a | |
| XDiagramChainTo :: forall (m :: N') a. Any m -> XOrtSite 'To a -> XDiagram ('Chain 'To) (m + 1) m a | |
| XDiagramChainFrom :: forall (m :: N') a. Any m -> XOrtSite 'From a -> XDiagram ('Chain 'From) (m + 1) m a | |
| XDiagramParallelLR :: forall (m :: N') a. Any m -> XOrtOrientation a -> XDiagram ('Parallel 'LeftToRight) ('S N1) m a | |
| XDiagramParallelRL :: forall (m :: N') a. Any m -> XOrtOrientation a -> XDiagram ('Parallel 'RightToLeft) ('S N1) m a | |
| XDiagramSink :: forall (m :: N') a. Any m -> XOrtSite 'To a -> XDiagram ('Star 'To) (m + 1) m a | |
| XDiagramSource :: forall (m :: N') a. Any m -> XOrtSite 'From a -> XDiagram ('Star 'From) (m + 1) m a |
xDiagram :: forall a (t :: DiagramType) (n :: N') (m :: N'). Oriented a => (Dual (Dual t) :~: t) -> XDiagram t n m a -> X (Diagram t n m a) Source #
the induced random variables of diagrams.
xDiagramChain :: forall x (m :: N') (n :: N') (t :: Site). (Oriented x, Attestable m, n ~ (m + 1)) => XOrtSite t x -> X (Diagram ('Chain t) n m x) Source #
random variable for Chains.
xSomeDiagram :: Oriented a => X SomeNatural -> XOrtSite 'To a -> XOrtSite 'From a -> XOrtOrientation a -> X (SomeDiagram a) Source #
the induced random variable of some diagrams.
dstSomeDiagram :: Oriented a => Int -> X (SomeDiagram a) -> IO () Source #
distribution of a random variable of some diagrams.
xSomeDiagramOrnt :: Entity p => X SomeNatural -> X p -> X (SomeDiagram (Orientation p)) Source #
random variable of some diagram of .Orientation p