{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE DataKinds, ConstraintKinds #-}
module OAlg.Entity.Diagram.Diagrammatic
(
Diagrammatic(..)
, DiagramG(..), dmap
, sdbToDgmObj, sdbFromDgmObj
, NaturalDiagrammatic
, drohS
, NaturalDiagrammaticW
, NaturalDiagrammaticBi
, prpNaturalDiagrammatic
) where
import Control.Monad
import Data.Typeable
import OAlg.Prelude
import OAlg.Category.NaturalTransformable
import OAlg.Category.SDuality
import OAlg.Category.Unify
import OAlg.Data.Either
import OAlg.Hom.Definition
import OAlg.Hom.Oriented
import OAlg.Structure.Oriented
import OAlg.Entity.Natural
import OAlg.Entity.Diagram.Definition
class Diagrammatic d where
diagram :: d t n m x -> Diagram t n m x
instance Diagrammatic Diagram where diagram :: forall (t :: DiagramType) (n :: N') (m :: N') x.
Diagram t n m x -> Diagram t n m x
diagram = Diagram t n m x -> Diagram t n m x
forall x. x -> x
id
newtype DiagramG d (t :: DiagramType) (n :: N') (m :: N') x = DiagramG (d t n m x)
deriving (Int -> DiagramG d t n m x -> ShowS
[DiagramG d t n m x] -> ShowS
DiagramG d t n m x -> String
(Int -> DiagramG d t n m x -> ShowS)
-> (DiagramG d t n m x -> String)
-> ([DiagramG d t n m x] -> ShowS)
-> Show (DiagramG d t n m x)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
Show (d t n m x) =>
Int -> DiagramG d t n m x -> ShowS
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
Show (d t n m x) =>
[DiagramG d t n m x] -> ShowS
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
Show (d t n m x) =>
DiagramG d t n m x -> String
$cshowsPrec :: forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
Show (d t n m x) =>
Int -> DiagramG d t n m x -> ShowS
showsPrec :: Int -> DiagramG d t n m x -> ShowS
$cshow :: forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
Show (d t n m x) =>
DiagramG d t n m x -> String
show :: DiagramG d t n m x -> String
$cshowList :: forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
Show (d t n m x) =>
[DiagramG d t n m x] -> ShowS
showList :: [DiagramG d t n m x] -> ShowS
Show,DiagramG d t n m x -> DiagramG d t n m x -> Bool
(DiagramG d t n m x -> DiagramG d t n m x -> Bool)
-> (DiagramG d t n m x -> DiagramG d t n m x -> Bool)
-> Eq (DiagramG d t n m x)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
Eq (d t n m x) =>
DiagramG d t n m x -> DiagramG d t n m x -> Bool
$c== :: forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
Eq (d t n m x) =>
DiagramG d t n m x -> DiagramG d t n m x -> Bool
== :: DiagramG d t n m x -> DiagramG d t n m x -> Bool
$c/= :: forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
Eq (d t n m x) =>
DiagramG d t n m x -> DiagramG d t n m x -> Bool
/= :: DiagramG d t n m x -> DiagramG d t n m x -> Bool
Eq)
type instance Dual1 (DiagramG d t n m) = DiagramG d (Dual t) n m
instance Oriented x => ShowDual1 (DiagramG Diagram t n m) x
instance Oriented x => EqDual1 (DiagramG Diagram t n m) x
instance Validable (d t n m x) => Validable (DiagramG d t n m x) where
valid :: DiagramG d t n m x -> Statement
valid (DiagramG d t n m x
d) = d t n m x -> Statement
forall a. Validable a => a -> Statement
valid d t n m x
d
dmap :: ApplicativeG (DiagramG d t n m) h (->)
=> h x y -> d t n m x -> d t n m y
dmap :: forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') (h :: * -> * -> *) x y.
ApplicativeG (DiagramG d t n m) h (->) =>
h x y -> d t n m x -> d t n m y
dmap h x y
h d t n m x
d = d t n m y
d' where DiagramG d t n m y
d' = h x y -> DiagramG d t n m x -> DiagramG d t n m y
forall x y. h x y -> DiagramG d t n m x -> DiagramG d t n m y
forall (t :: * -> *) (a :: * -> * -> *) (b :: * -> * -> *) x y.
ApplicativeG t a b =>
a x y -> b (t x) (t y)
amapG h x y
h (d t n m x -> DiagramG d t n m x
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
d t n m x -> DiagramG d t n m x
DiagramG d t n m x
d)
droh :: Diagrammatic d => DiagramG d t n m x -> DiagramG Diagram t n m x
droh :: forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
Diagrammatic d =>
DiagramG d t n m x -> DiagramG Diagram t n m x
droh (DiagramG d t n m x
d) = Diagram t n m x -> DiagramG Diagram t n m x
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
d t n m x -> DiagramG d t n m x
DiagramG (d t n m x -> Diagram t n m x
forall (t :: DiagramType) (n :: N') (m :: N') x.
d t n m x -> Diagram t n m x
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
Diagrammatic d =>
d t n m x -> Diagram t n m x
diagram d t n m x
d)
instance Diagrammatic d => Natural s (->) (DiagramG d t n m) (DiagramG Diagram t n m) where
roh :: forall x.
Struct s x -> DiagramG d t n m x -> DiagramG Diagram t n m x
roh Struct s x
_ = DiagramG d t n m x -> DiagramG Diagram t n m x
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
Diagrammatic d =>
DiagramG d t n m x -> DiagramG Diagram t n m x
droh
sdbToDgmObj :: Dual1 (d t n m) ~ d (Dual t) n m
=> SDualBi (DiagramG d t n m) x -> SDualBi (d t n m) x
sdbToDgmObj :: forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
(Dual1 (d t n m) ~ d (Dual t) n m) =>
SDualBi (DiagramG d t n m) x -> SDualBi (d t n m) x
sdbToDgmObj (SDualBi (Right1 (DiagramG d t n m x
d))) = Either1 (Dual1 (d t n m)) (d t n m) x -> SDualBi (d t n m) x
forall (d :: * -> *) x. Either1 (Dual1 d) d x -> SDualBi d x
SDualBi (d t n m x -> Either1 (d (Dual t) n m) (d t n m) x
forall (g :: * -> *) x (f :: * -> *). g x -> Either1 f g x
Right1 d t n m x
d)
sdbToDgmObj (SDualBi (Left1 (DiagramG d (Dual t) n m x
d'))) = Either1 (Dual1 (d t n m)) (d t n m) x -> SDualBi (d t n m) x
forall (d :: * -> *) x. Either1 (Dual1 d) d x -> SDualBi d x
SDualBi (d (Dual t) n m x -> Either1 (d (Dual t) n m) (d t n m) x
forall (f :: * -> *) x (g :: * -> *). f x -> Either1 f g x
Left1 d (Dual t) n m x
d')
sdbFromDgmObj :: Dual1 (d t n m) ~ d (Dual t) n m
=> SDualBi (d t n m) x -> SDualBi (DiagramG d t n m) x
sdbFromDgmObj :: forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
(Dual1 (d t n m) ~ d (Dual t) n m) =>
SDualBi (d t n m) x -> SDualBi (DiagramG d t n m) x
sdbFromDgmObj (SDualBi (Right1 d t n m x
d)) = Either1 (Dual1 (DiagramG d t n m)) (DiagramG d t n m) x
-> SDualBi (DiagramG d t n m) x
forall (d :: * -> *) x. Either1 (Dual1 d) d x -> SDualBi d x
SDualBi (DiagramG d t n m x
-> Either1 (DiagramG d (Dual t) n m) (DiagramG d t n m) x
forall (g :: * -> *) x (f :: * -> *). g x -> Either1 f g x
Right1 (d t n m x -> DiagramG d t n m x
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
d t n m x -> DiagramG d t n m x
DiagramG d t n m x
d))
sdbFromDgmObj (SDualBi (Left1 Dual1 (d t n m) x
d')) = Either1 (Dual1 (DiagramG d t n m)) (DiagramG d t n m) x
-> SDualBi (DiagramG d t n m) x
forall (d :: * -> *) x. Either1 (Dual1 d) d x -> SDualBi d x
SDualBi (DiagramG d (Dual t) n m x
-> Either1 (DiagramG d (Dual t) n m) (DiagramG d t n m) x
forall (f :: * -> *) x (g :: * -> *). f x -> Either1 f g x
Left1 (d (Dual t) n m x -> DiagramG d (Dual t) n m x
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
d t n m x -> DiagramG d t n m x
DiagramG d (Dual t) n m x
Dual1 (d t n m) x
d'))
drohS :: Diagrammatic d => SDualBi (DiagramG d t n m) x -> SDualBi (DiagramG Diagram t n m) x
drohS :: forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
Diagrammatic d =>
SDualBi (DiagramG d t n m) x -> SDualBi (DiagramG Diagram t n m) x
drohS (SDualBi (Right1 DiagramG d t n m x
d)) = Either1 (Dual1 (DiagramG Diagram t n m)) (DiagramG Diagram t n m) x
-> SDualBi (DiagramG Diagram t n m) x
forall (d :: * -> *) x. Either1 (Dual1 d) d x -> SDualBi d x
SDualBi (DiagramG Diagram t n m x
-> Either1
(DiagramG Diagram (Dual t) n m) (DiagramG Diagram t n m) x
forall (g :: * -> *) x (f :: * -> *). g x -> Either1 f g x
Right1 (DiagramG d t n m x -> DiagramG Diagram t n m x
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
Diagrammatic d =>
DiagramG d t n m x -> DiagramG Diagram t n m x
droh DiagramG d t n m x
d))
drohS (SDualBi (Left1 Dual1 (DiagramG d t n m) x
d')) = Either1 (Dual1 (DiagramG Diagram t n m)) (DiagramG Diagram t n m) x
-> SDualBi (DiagramG Diagram t n m) x
forall (d :: * -> *) x. Either1 (Dual1 d) d x -> SDualBi d x
SDualBi (DiagramG Diagram (Dual t) n m x
-> Either1
(DiagramG Diagram (Dual t) n m) (DiagramG Diagram t n m) x
forall (f :: * -> *) x (g :: * -> *). f x -> Either1 f g x
Left1 (DiagramG d (Dual t) n m x -> DiagramG Diagram (Dual t) n m x
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
Diagrammatic d =>
DiagramG d t n m x -> DiagramG Diagram t n m x
droh Dual1 (DiagramG d t n m) x
DiagramG d (Dual t) n m x
d'))
instance Diagrammatic d
=> Natural s (->) (SDualBi (DiagramG d t n m)) (SDualBi (DiagramG Diagram t n m)) where
roh :: forall x.
Struct s x
-> SDualBi (DiagramG d t n m) x
-> SDualBi (DiagramG Diagram t n m) x
roh Struct s x
_ = SDualBi (DiagramG d t n m) x -> SDualBi (DiagramG Diagram t n m) x
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
Diagrammatic d =>
SDualBi (DiagramG d t n m) x -> SDualBi (DiagramG Diagram t n m) x
drohS
class
( Diagrammatic d
, CategoryDisjunctive h
, HomOrientedDisjunctive h
, FunctorialOriented h
, NaturalTransformable h (->) (SDualBi (DiagramG d t n m)) (SDualBi (DiagramG Diagram t n m))
, t ~ Dual (Dual t)
)
=> NaturalDiagrammatic h d t n m
instance
( HomOrientedDisjunctive h
, t ~ Dual (Dual t)
)
=> ApplicativeG (SDualBi (DiagramG Diagram t n m)) h (->) where
amapG :: forall x y.
h x y
-> SDualBi (DiagramG Diagram t n m) x
-> SDualBi (DiagramG Diagram t n m) y
amapG h x y
h = SDualBi (Diagram t n m) y -> SDualBi (DiagramG Diagram t n m) y
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
(Dual1 (d t n m) ~ d (Dual t) n m) =>
SDualBi (d t n m) x -> SDualBi (DiagramG d t n m) x
sdbFromDgmObj (SDualBi (Diagram t n m) y -> SDualBi (DiagramG Diagram t n m) y)
-> (SDualBi (DiagramG Diagram t n m) x
-> SDualBi (Diagram t n m) y)
-> SDualBi (DiagramG Diagram t n m) x
-> SDualBi (DiagramG Diagram t n m) y
forall y z x. (y -> z) -> (x -> y) -> x -> z
forall (c :: * -> * -> *) y z x.
Category c =>
c y z -> c x y -> c x z
. h x y -> SDualBi (Diagram t n m) x -> SDualBi (Diagram t n m) y
forall x y.
h x y -> SDualBi (Diagram t n m) x -> SDualBi (Diagram t n m) y
forall (t :: * -> *) (a :: * -> * -> *) (b :: * -> * -> *) x y.
ApplicativeG t a b =>
a x y -> b (t x) (t y)
amapG h x y
h (SDualBi (Diagram t n m) x -> SDualBi (Diagram t n m) y)
-> (SDualBi (DiagramG Diagram t n m) x
-> SDualBi (Diagram t n m) x)
-> SDualBi (DiagramG Diagram t n m) x
-> SDualBi (Diagram t n m) y
forall y z x. (y -> z) -> (x -> y) -> x -> z
forall (c :: * -> * -> *) y z x.
Category c =>
c y z -> c x y -> c x z
. SDualBi (DiagramG Diagram t n m) x -> SDualBi (Diagram t n m) x
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
(Dual1 (d t n m) ~ d (Dual t) n m) =>
SDualBi (DiagramG d t n m) x -> SDualBi (d t n m) x
sdbToDgmObj
instance
( HomOrientedDisjunctive h
, FunctorialOriented h
, t ~ Dual (Dual t)
)
=> FunctorialG (SDualBi (DiagramG Diagram t n m)) h (->)
instance
( HomOrientedDisjunctive h
, FunctorialOriented h
, t ~ Dual (Dual t)
)
=> NaturalTransformable h (->) (SDualBi (DiagramG Diagram t n m)) (SDualBi (DiagramG Diagram t n m))
instance
( CategoryDisjunctive h
, HomOrientedDisjunctive h
, FunctorialOriented h
, t ~ Dual (Dual t)
)
=> NaturalDiagrammatic h Diagram t n m
data NaturalDiagrammaticW h d t n m where
NaturalDiagrammaticW :: NaturalDiagrammatic h d t n m
=> NaturalDiagrammaticW h d t n m
type NaturalDiagrammaticBi h d t n m =
( NaturalDiagrammatic h d t n m
, NaturalDiagrammatic h d (Dual t) n m
)
prpNaturalDiagrammatic :: NaturalDiagrammatic h d t n m
=> q h d t n m
-> X (SomeNaturalApplication h (SDualBi (DiagramG d t n m)) (SDualBi (DiagramG Diagram t n m)))
-> Statement
prpNaturalDiagrammatic :: forall (h :: * -> * -> *) (d :: DiagramType -> N' -> N' -> * -> *)
(t :: DiagramType) (n :: N') (m :: N')
(q :: (* -> * -> *)
-> (DiagramType -> N' -> N' -> * -> *)
-> DiagramType
-> N'
-> N'
-> *).
NaturalDiagrammatic h d t n m =>
q h d t n m
-> X (SomeNaturalApplication
h (SDualBi (DiagramG d t n m)) (SDualBi (DiagramG Diagram t n m)))
-> Statement
prpNaturalDiagrammatic q h d t n m
q X (SomeNaturalApplication
h (SDualBi (DiagramG d t n m)) (SDualBi (DiagramG Diagram t n m)))
xsa = String -> Label
Prp String
"NaturalDiagrammatic"
Label -> Statement -> Statement
:<=>: X (SomeNaturalApplication
h (SDualBi (DiagramG d t n m)) (SDualBi (DiagramG Diagram t n m)))
-> (SomeNaturalApplication
h (SDualBi (DiagramG d t n m)) (SDualBi (DiagramG Diagram t n m))
-> Statement)
-> Statement
forall x. X x -> (x -> Statement) -> Statement
Forall X (SomeNaturalApplication
h (SDualBi (DiagramG d t n m)) (SDualBi (DiagramG Diagram t n m)))
xsa (\(SomeNaturalApplication h x y
h SDualBi (DiagramG d t n m) x
d)
-> [Statement] -> Statement
And [ NaturalTransformation
h
(->)
(SDualBi (DiagramG d t n m))
(SDualBi (DiagramG Diagram t n m))
-> h x y -> SDualBi (DiagramG d t n m) x -> Statement
forall (a :: * -> * -> *) (g :: * -> *) y (f :: * -> *) x.
(Show2 a, Eq (g y), Show (f x)) =>
NaturalTransformation a (->) f g -> a x y -> f x -> Statement
relNaturalTransformable (q h d t n m
-> NaturalTransformation
h
(->)
(SDualBi (DiagramG d t n m))
(SDualBi (DiagramG Diagram t n m))
forall (h :: * -> * -> *) (d :: DiagramType -> N' -> N' -> * -> *)
(t :: DiagramType) (n :: N') (m :: N')
(q :: (* -> * -> *)
-> (DiagramType -> N' -> N' -> * -> *)
-> DiagramType
-> N'
-> N'
-> *).
NaturalDiagrammatic h d t n m =>
q h d t n m
-> NaturalTransformation
h
(->)
(SDualBi (DiagramG d t n m))
(SDualBi (DiagramG Diagram t n m))
n q h d t n m
q) h x y
h SDualBi (DiagramG d t n m) x
d
]
)
where n :: NaturalDiagrammatic h d t n m
=> q h d t n m
-> NaturalTransformation h (->)
(SDualBi (DiagramG d t n m)) (SDualBi (DiagramG Diagram t n m))
n :: forall (h :: * -> * -> *) (d :: DiagramType -> N' -> N' -> * -> *)
(t :: DiagramType) (n :: N') (m :: N')
(q :: (* -> * -> *)
-> (DiagramType -> N' -> N' -> * -> *)
-> DiagramType
-> N'
-> N'
-> *).
NaturalDiagrammatic h d t n m =>
q h d t n m
-> NaturalTransformation
h
(->)
(SDualBi (DiagramG d t n m))
(SDualBi (DiagramG Diagram t n m))
n q h d t n m
_ = NaturalTransformation
h
(->)
(SDualBi (DiagramG d t n m))
(SDualBi (DiagramG Diagram t n m))
forall (a :: * -> * -> *) (b :: * -> * -> *) (f :: * -> *)
(g :: * -> *).
NaturalTransformable a b f g =>
NaturalTransformation a b f g
NaturalTransformation
xsoOrtSite :: s ~ OrtSiteX => X (SomeObjectClass (SHom s s Op h))
xsoOrtSite :: forall s (h :: * -> * -> *).
(s ~ OrtSiteX) =>
X (SomeObjectClass (SHom s s Op h))
xsoOrtSite = [SomeObjectClass (SHom s s Op h)]
-> X (SomeObjectClass (SHom s s Op h))
forall a. [a] -> X a
xOneOf [ Struct (ObjectClass (SHom s s Op h)) OS
-> SomeObjectClass (SHom s s Op h)
forall (m :: * -> * -> *) x.
Transformable (ObjectClass m) Typ =>
Struct (ObjectClass m) x -> SomeObjectClass m
SomeObjectClass (Struct OrtSiteX OS
forall s x. Structure s x => Struct s x
Struct :: Struct OrtSiteX OS)
, Struct (ObjectClass (SHom s s Op h)) (Op OS)
-> SomeObjectClass (SHom s s Op h)
forall (m :: * -> * -> *) x.
Transformable (ObjectClass m) Typ =>
Struct (ObjectClass m) x -> SomeObjectClass m
SomeObjectClass (Struct OrtSiteX (Op OS)
forall s x. Structure s x => Struct s x
Struct :: Struct OrtSiteX (Op OS))
, Struct (ObjectClass (SHom s s Op h)) (U N)
-> SomeObjectClass (SHom s s Op h)
forall (m :: * -> * -> *) x.
Transformable (ObjectClass m) Typ =>
Struct (ObjectClass m) x -> SomeObjectClass m
SomeObjectClass (Struct OrtSiteX (U N)
forall s x. Structure s x => Struct s x
Struct :: Struct OrtSiteX (U N))
]
type HomTest s = HomDisj s Op (HomId s)
xsOrtSiteXOp :: X (SomeMorphism (HomTest OrtSiteX))
xsOrtSiteXOp :: X (SomeMorphism (HomTest OrtSiteX))
xsOrtSiteXOp = (SomeCmpb2 (HomTest OrtSiteX) -> SomeMorphism (HomTest OrtSiteX))
-> X (SomeCmpb2 (HomTest OrtSiteX))
-> X (SomeMorphism (HomTest OrtSiteX))
forall (h :: * -> * -> *) (f :: * -> *) x y.
Applicative1 h f =>
h x y -> f x -> f y
amap1 SomeCmpb2 (HomTest OrtSiteX) -> SomeMorphism (HomTest OrtSiteX)
forall (h :: * -> * -> *).
Category h =>
SomeCmpb2 h -> SomeMorphism h
smCmpb2 (X (SomeCmpb2 (HomTest OrtSiteX))
-> X (SomeMorphism (HomTest OrtSiteX)))
-> X (SomeCmpb2 (HomTest OrtSiteX))
-> X (SomeMorphism (HomTest OrtSiteX))
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ X (SomeObjectClass (SHom OrtSiteX OrtSiteX Op (HomId OrtSiteX)))
-> X (SomeMorphism (HomId OrtSiteX))
-> X (SomeCmpb2 (HomTest OrtSiteX))
forall (o :: * -> *) s (h :: * -> * -> *).
(TransformableG o s s, Morphism h,
Transformable (ObjectClass h) s) =>
X (SomeObjectClass (SHom s s o h))
-> X (SomeMorphism h) -> X (SomeCmpb2 (HomDisj s o h))
xscmHomDisj X (SomeObjectClass (SHom OrtSiteX OrtSiteX Op (HomId OrtSiteX)))
forall s (h :: * -> * -> *).
(s ~ OrtSiteX) =>
X (SomeObjectClass (SHom s s Op h))
xsoOrtSite X (SomeMorphism (HomId OrtSiteX))
xhid where
xhid :: X (SomeMorphism (HomId OrtSiteX))
xhid = [SomeMorphism (HomId OrtSiteX)]
-> X (SomeMorphism (HomId OrtSiteX))
forall a. [a] -> X a
xOneOf [ HomId OrtSiteX OS (Id OS) -> SomeMorphism (HomId OrtSiteX)
forall (m :: * -> * -> *) x y. m x y -> SomeMorphism m
SomeMorphism (HomId OrtSiteX OS (Id OS)
forall s x. (Structure s x, Structure s (Id x)) => HomId s x (Id x)
ToId :: HomId OrtSiteX OS (Id OS))
, HomId OrtSiteX (Id OS) OS -> SomeMorphism (HomId OrtSiteX)
forall (m :: * -> * -> *) x y. m x y -> SomeMorphism m
SomeMorphism (HomId OrtSiteX (Id OS) OS
forall s y. (Structure s y, Structure s (Id y)) => HomId s (Id y) y
FromId :: HomId OrtSiteX (Id OS) OS)
, HomId OrtSiteX (U N) (Id (U N)) -> SomeMorphism (HomId OrtSiteX)
forall (m :: * -> * -> *) x y. m x y -> SomeMorphism m
SomeMorphism (HomId OrtSiteX (U N) (Id (U N))
forall s x. (Structure s x, Structure s (Id x)) => HomId s x (Id x)
ToId :: HomId OrtSiteX (U N) (Id (U N)))
, HomId OrtSiteX (Id (U Z)) (U Z) -> SomeMorphism (HomId OrtSiteX)
forall (m :: * -> * -> *) x y. m x y -> SomeMorphism m
SomeMorphism (HomId OrtSiteX (Id (U Z)) (U Z)
forall s y. (Structure s y, Structure s (Id y)) => HomId s (Id y) y
FromId :: HomId OrtSiteX (Id (U Z)) (U Z))
]
xdChainToStruct :: (n ~ m+1, t ~ Chain To, Show2 h)
=> Any m
-> Homomorphous OrtSiteX x y
-> h x y
-> X (SomeNaturalApplication h (SDualBi (DiagramG Diagram t n m)) (SDualBi (DiagramG Diagram t n m)))
xdChainToStruct :: forall (n :: N') (m :: N') (t :: DiagramType) (h :: * -> * -> *) x
y.
(n ~ (m + 1), t ~ 'Chain 'To, Show2 h) =>
Any m
-> Homomorphous OrtSiteX x y
-> h x y
-> X (SomeNaturalApplication
h
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m)))
xdChainToStruct Any m
m (Struct OrtSiteX x
Struct :>: Struct OrtSiteX y
Struct) h x y
h = do
Bool
b <- X Bool
xBool
case Bool
b of
Bool
True -> do
Diagram ('Chain 'To) n m x
d <- (Dual (Dual ('Chain 'To)) :~: 'Chain 'To)
-> XDiagram ('Chain 'To) n m x -> X (Diagram ('Chain 'To) n m x)
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)
xDiagram Dual (Dual ('Chain 'To)) :~: 'Chain 'To
'Chain 'To :~: 'Chain 'To
forall {k} (a :: k). a :~: a
Refl (Any m -> XOrtSite 'To x -> XDiagram ('Chain 'To) (m + 1) m x
forall (m :: N') a.
Any m -> XOrtSite 'To a -> XDiagram ('Chain 'To) (m + 1) m a
XDiagramChainTo Any m
m XOrtSite 'To x
forall (s :: Site) a. XStandardOrtSite s a => XOrtSite s a
xStandardOrtSite)
SomeNaturalApplication
h
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m))
-> X (SomeNaturalApplication
h
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m)))
forall a. a -> X a
forall (m :: * -> *) a. Monad m => a -> m a
return (h x y
-> SDualBi (DiagramG Diagram t n m) x
-> SomeNaturalApplication
h
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m))
forall (a :: * -> * -> *) (g :: * -> *) y (f :: * -> *) x.
(Show2 a, Eq (g y), Show (f x)) =>
a x y -> f x -> SomeNaturalApplication a f g
SomeNaturalApplication h x y
h (Either1 (Dual1 (DiagramG Diagram t n m)) (DiagramG Diagram t n m) x
-> SDualBi (DiagramG Diagram t n m) x
forall (d :: * -> *) x. Either1 (Dual1 d) d x -> SDualBi d x
SDualBi (DiagramG Diagram t n m x
-> Either1
(DiagramG Diagram ('Chain 'From) ('S m) m)
(DiagramG Diagram t n m)
x
forall (g :: * -> *) x (f :: * -> *). g x -> Either1 f g x
Right1 (Diagram t n m x -> DiagramG Diagram t n m x
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
d t n m x -> DiagramG d t n m x
DiagramG Diagram t n m x
Diagram ('Chain 'To) n m x
d))))
Bool
False -> do
Diagram ('Chain 'From) ('S m) m x
d <- (Dual (Dual ('Chain 'From)) :~: 'Chain 'From)
-> XDiagram ('Chain 'From) ('S m) m x
-> X (Diagram ('Chain 'From) ('S m) m x)
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)
xDiagram Dual (Dual ('Chain 'From)) :~: 'Chain 'From
'Chain 'From :~: 'Chain 'From
forall {k} (a :: k). a :~: a
Refl (Any m -> XOrtSite 'From x -> XDiagram ('Chain 'From) (m + 1) m x
forall (m :: N') a.
Any m -> XOrtSite 'From a -> XDiagram ('Chain 'From) (m + 1) m a
XDiagramChainFrom Any m
m XOrtSite 'From x
forall (s :: Site) a. XStandardOrtSite s a => XOrtSite s a
xStandardOrtSite)
SomeNaturalApplication
h
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m))
-> X (SomeNaturalApplication
h
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m)))
forall a. a -> X a
forall (m :: * -> *) a. Monad m => a -> m a
return (h x y
-> SDualBi (DiagramG Diagram t n m) x
-> SomeNaturalApplication
h
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m))
forall (a :: * -> * -> *) (g :: * -> *) y (f :: * -> *) x.
(Show2 a, Eq (g y), Show (f x)) =>
a x y -> f x -> SomeNaturalApplication a f g
SomeNaturalApplication h x y
h (Either1 (Dual1 (DiagramG Diagram t n m)) (DiagramG Diagram t n m) x
-> SDualBi (DiagramG Diagram t n m) x
forall (d :: * -> *) x. Either1 (Dual1 d) d x -> SDualBi d x
SDualBi (DiagramG Diagram ('Chain 'From) ('S m) m x
-> Either1
(DiagramG Diagram ('Chain 'From) ('S m) m)
(DiagramG Diagram t n m)
x
forall (f :: * -> *) x (g :: * -> *). f x -> Either1 f g x
Left1 (Diagram ('Chain 'From) ('S m) m x
-> DiagramG Diagram ('Chain 'From) ('S m) m x
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
d t n m x -> DiagramG d t n m x
DiagramG Diagram ('Chain 'From) ('S m) m x
d))))
xdChainTo ::
( Morphism h
, ObjectClass h ~ OrtSiteX
, n ~ m+1, t ~ Chain To, Show2 h
)
=> Any m
-> h x y
-> X (SomeNaturalApplication h
(SDualBi (DiagramG Diagram t n m)) (SDualBi (DiagramG Diagram t n m)))
xdChainTo :: forall (h :: * -> * -> *) (n :: N') (m :: N') (t :: DiagramType) x
y.
(Morphism h, ObjectClass h ~ OrtSiteX, n ~ (m + 1), t ~ 'Chain 'To,
Show2 h) =>
Any m
-> h x y
-> X (SomeNaturalApplication
h
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m)))
xdChainTo Any m
m h x y
h = Any m
-> Homomorphous OrtSiteX x y
-> h x y
-> X (SomeNaturalApplication
h
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m)))
forall (n :: N') (m :: N') (t :: DiagramType) (h :: * -> * -> *) x
y.
(n ~ (m + 1), t ~ 'Chain 'To, Show2 h) =>
Any m
-> Homomorphous OrtSiteX x y
-> h x y
-> X (SomeNaturalApplication
h
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m)))
xdChainToStruct Any m
m (h x y -> Homomorphous (ObjectClass h) x y
forall x y. h x y -> Homomorphous (ObjectClass h) x y
forall (m :: * -> * -> *) x y.
Morphism m =>
m x y -> Homomorphous (ObjectClass m) x y
homomorphous h x y
h) h x y
h
xsaChainTo ::(n ~ m+1, t ~ Chain To)
=> Any m
-> X (SomeNaturalApplication (HomTest OrtSiteX)
(SDualBi (DiagramG Diagram t n m)) (SDualBi (DiagramG Diagram t n m))
)
xsaChainTo :: forall (n :: N') (m :: N') (t :: DiagramType).
(n ~ (m + 1), t ~ 'Chain 'To) =>
Any m
-> X (SomeNaturalApplication
(HomTest OrtSiteX)
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m)))
xsaChainTo Any m
m = do
SomeMorphism HomTest OrtSiteX x y
h <- X (SomeMorphism (HomTest OrtSiteX))
xsOrtSiteXOp
Any m
-> HomTest OrtSiteX x y
-> X (SomeNaturalApplication
(HomTest OrtSiteX)
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m)))
forall (h :: * -> * -> *) (n :: N') (m :: N') (t :: DiagramType) x
y.
(Morphism h, ObjectClass h ~ OrtSiteX, n ~ (m + 1), t ~ 'Chain 'To,
Show2 h) =>
Any m
-> h x y
-> X (SomeNaturalApplication
h
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m)))
xdChainTo Any m
m HomTest OrtSiteX x y
h
xdSinkStruct :: (n ~ m+1, t ~ Star To, Show2 h)
=> Any m
-> Homomorphous OrtSiteX x y
-> h x y
-> X (SomeNaturalApplication h (SDualBi (DiagramG Diagram t n m)) (SDualBi (DiagramG Diagram t n m)))
xdSinkStruct :: forall (n :: N') (m :: N') (t :: DiagramType) (h :: * -> * -> *) x
y.
(n ~ (m + 1), t ~ 'Star 'To, Show2 h) =>
Any m
-> Homomorphous OrtSiteX x y
-> h x y
-> X (SomeNaturalApplication
h
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m)))
xdSinkStruct Any m
m (Struct OrtSiteX x
Struct :>: Struct OrtSiteX y
Struct) h x y
h = do
Bool
b <- X Bool
xBool
case Bool
b of
Bool
True -> do
Diagram ('Star 'To) n m x
d <- (Dual (Dual ('Star 'To)) :~: 'Star 'To)
-> XDiagram ('Star 'To) n m x -> X (Diagram ('Star 'To) n m x)
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)
xDiagram Dual (Dual ('Star 'To)) :~: 'Star 'To
'Star 'To :~: 'Star 'To
forall {k} (a :: k). a :~: a
Refl (Any m -> XOrtSite 'To x -> XDiagram ('Star 'To) (m + 1) m x
forall (m :: N') a.
Any m -> XOrtSite 'To a -> XDiagram ('Star 'To) (m + 1) m a
XDiagramSink Any m
m XOrtSite 'To x
forall (s :: Site) a. XStandardOrtSite s a => XOrtSite s a
xStandardOrtSite)
SomeNaturalApplication
h
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m))
-> X (SomeNaturalApplication
h
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m)))
forall a. a -> X a
forall (m :: * -> *) a. Monad m => a -> m a
return (h x y
-> SDualBi (DiagramG Diagram t n m) x
-> SomeNaturalApplication
h
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m))
forall (a :: * -> * -> *) (g :: * -> *) y (f :: * -> *) x.
(Show2 a, Eq (g y), Show (f x)) =>
a x y -> f x -> SomeNaturalApplication a f g
SomeNaturalApplication h x y
h (Either1 (Dual1 (DiagramG Diagram t n m)) (DiagramG Diagram t n m) x
-> SDualBi (DiagramG Diagram t n m) x
forall (d :: * -> *) x. Either1 (Dual1 d) d x -> SDualBi d x
SDualBi (DiagramG Diagram t n m x
-> Either1
(DiagramG Diagram ('Star 'From) ('S m) m)
(DiagramG Diagram t n m)
x
forall (g :: * -> *) x (f :: * -> *). g x -> Either1 f g x
Right1 (Diagram t n m x -> DiagramG Diagram t n m x
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
d t n m x -> DiagramG d t n m x
DiagramG Diagram t n m x
Diagram ('Star 'To) n m x
d))))
Bool
False -> do
Diagram ('Star 'From) ('S m) m x
d <- (Dual (Dual ('Star 'From)) :~: 'Star 'From)
-> XDiagram ('Star 'From) ('S m) m x
-> X (Diagram ('Star 'From) ('S m) m x)
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)
xDiagram Dual (Dual ('Star 'From)) :~: 'Star 'From
'Star 'From :~: 'Star 'From
forall {k} (a :: k). a :~: a
Refl (Any m -> XOrtSite 'From x -> XDiagram ('Star 'From) (m + 1) m x
forall (m :: N') a.
Any m -> XOrtSite 'From a -> XDiagram ('Star 'From) (m + 1) m a
XDiagramSource Any m
m XOrtSite 'From x
forall (s :: Site) a. XStandardOrtSite s a => XOrtSite s a
xStandardOrtSite)
SomeNaturalApplication
h
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m))
-> X (SomeNaturalApplication
h
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m)))
forall a. a -> X a
forall (m :: * -> *) a. Monad m => a -> m a
return (h x y
-> SDualBi (DiagramG Diagram t n m) x
-> SomeNaturalApplication
h
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m))
forall (a :: * -> * -> *) (g :: * -> *) y (f :: * -> *) x.
(Show2 a, Eq (g y), Show (f x)) =>
a x y -> f x -> SomeNaturalApplication a f g
SomeNaturalApplication h x y
h (Either1 (Dual1 (DiagramG Diagram t n m)) (DiagramG Diagram t n m) x
-> SDualBi (DiagramG Diagram t n m) x
forall (d :: * -> *) x. Either1 (Dual1 d) d x -> SDualBi d x
SDualBi (DiagramG Diagram ('Star 'From) ('S m) m x
-> Either1
(DiagramG Diagram ('Star 'From) ('S m) m)
(DiagramG Diagram t n m)
x
forall (f :: * -> *) x (g :: * -> *). f x -> Either1 f g x
Left1 (Diagram ('Star 'From) ('S m) m x
-> DiagramG Diagram ('Star 'From) ('S m) m x
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
d t n m x -> DiagramG d t n m x
DiagramG Diagram ('Star 'From) ('S m) m x
d))))
xdSink ::
( Morphism h
, ObjectClass h ~ OrtSiteX
, n ~ m+1, t ~ Star To, Show2 h
)
=> Any m
-> h x y
-> X (SomeNaturalApplication h
(SDualBi (DiagramG Diagram t n m)) (SDualBi (DiagramG Diagram t n m)))
xdSink :: forall (h :: * -> * -> *) (n :: N') (m :: N') (t :: DiagramType) x
y.
(Morphism h, ObjectClass h ~ OrtSiteX, n ~ (m + 1), t ~ 'Star 'To,
Show2 h) =>
Any m
-> h x y
-> X (SomeNaturalApplication
h
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m)))
xdSink Any m
m h x y
h = Any m
-> Homomorphous OrtSiteX x y
-> h x y
-> X (SomeNaturalApplication
h
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m)))
forall (n :: N') (m :: N') (t :: DiagramType) (h :: * -> * -> *) x
y.
(n ~ (m + 1), t ~ 'Star 'To, Show2 h) =>
Any m
-> Homomorphous OrtSiteX x y
-> h x y
-> X (SomeNaturalApplication
h
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m)))
xdSinkStruct Any m
m (h x y -> Homomorphous (ObjectClass h) x y
forall x y. h x y -> Homomorphous (ObjectClass h) x y
forall (m :: * -> * -> *) x y.
Morphism m =>
m x y -> Homomorphous (ObjectClass m) x y
homomorphous h x y
h) h x y
h
xsaSink ::(n ~ m+1, t ~ Star To)
=> Any m
-> X (SomeNaturalApplication (HomTest OrtSiteX)
(SDualBi (DiagramG Diagram t n m)) (SDualBi (DiagramG Diagram t n m)))
xsaSink :: forall (n :: N') (m :: N') (t :: DiagramType).
(n ~ (m + 1), t ~ 'Star 'To) =>
Any m
-> X (SomeNaturalApplication
(HomTest OrtSiteX)
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m)))
xsaSink Any m
m = do
SomeMorphism HomTest OrtSiteX x y
h <- X (SomeMorphism (HomTest OrtSiteX))
xsOrtSiteXOp
Any m
-> HomTest OrtSiteX x y
-> X (SomeNaturalApplication
(HomTest OrtSiteX)
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m)))
forall (h :: * -> * -> *) (n :: N') (m :: N') (t :: DiagramType) x
y.
(Morphism h, ObjectClass h ~ OrtSiteX, n ~ (m + 1), t ~ 'Star 'To,
Show2 h) =>
Any m
-> h x y
-> X (SomeNaturalApplication
h
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m)))
xdSink Any m
m HomTest OrtSiteX x y
h
isoHomTest :: TransformableGRefl Op s => HomTest s x y
-> Variant2 Contravariant (IsoHomDisj s Op (HomId s)) x (Op x)
isoHomTest :: forall s x y.
TransformableGRefl Op s =>
HomTest s x y
-> Variant2 'Contravariant (IsoHomDisj s Op (HomId s)) x (Op x)
isoHomTest = Struct s x
-> Variant2 'Contravariant (IsoHomDisj s Op (HomId s)) x (Op x)
forall (h :: * -> * -> *) (o :: * -> *) s x.
(Morphism h, TransformableGRefl o s) =>
Struct s x -> Variant2 'Contravariant (IsoHomDisj s o h) x (o x)
isoHomDisj (Struct s x
-> Variant2 'Contravariant (IsoHomDisj s Op (HomId s)) x (Op x))
-> (HomTest s x y -> Struct s x)
-> HomTest s x y
-> Variant2 'Contravariant (IsoHomDisj s Op (HomId s)) x (Op x)
forall y z x. (y -> z) -> (x -> y) -> x -> z
forall (c :: * -> * -> *) y z x.
Category c =>
c y z -> c x y -> c x z
. HomTest s x y -> Struct s x
HomTest s x y -> Struct (ObjectClass (HomDisj s Op (HomId s))) x
forall x y.
HomDisj s Op (HomId s) x y
-> Struct (ObjectClass (HomDisj s Op (HomId s))) x
forall (m :: * -> * -> *) x y.
Morphism m =>
m x y -> Struct (ObjectClass m) x
domain
snaDual ::
( TransformableOrt s
, TransformableType s
, TransformableOp s
, TransformableGRefl Op s
, t ~ Dual (Dual t)
)
=> SomeNaturalApplication (HomTest s)
(SDualBi (DiagramG Diagram t n m)) (SDualBi (DiagramG Diagram t n m))
-> SomeNaturalApplication (HomTest s)
(SDualBi (DiagramG Diagram (Dual t) n m)) (SDualBi (Diagram (Dual t) n m))
snaDual :: forall s (t :: DiagramType) (n :: N') (m :: N').
(TransformableOrt s, TransformableType s, TransformableOp s,
TransformableGRefl Op s, t ~ Dual (Dual t)) =>
SomeNaturalApplication
(HomTest s)
(SDualBi (DiagramG Diagram t n m))
(SDualBi (DiagramG Diagram t n m))
-> SomeNaturalApplication
(HomTest s)
(SDualBi (DiagramG Diagram (Dual t) n m))
(SDualBi (Diagram (Dual t) n m))
snaDual (SomeNaturalApplication HomTest s x y
h SDualBi (DiagramG Diagram t n m) x
sd) = case (Struct s x -> Struct Ort x
forall s x. Transformable s Ort => Struct s x -> Struct Ort x
tauOrt (HomTest s x y -> Struct (ObjectClass (HomTest s)) x
forall x y.
HomDisj s Op (HomId s) x y -> Struct (ObjectClass (HomTest s)) x
forall (m :: * -> * -> *) x y.
Morphism m =>
m x y -> Struct (ObjectClass m) x
domain HomTest s x y
h), Struct s y -> Struct Ort y
forall s x. Transformable s Ort => Struct s x -> Struct Ort x
tauOrt (HomTest s x y -> Struct (ObjectClass (HomTest s)) y
forall x y.
HomDisj s Op (HomId s) x y -> Struct (ObjectClass (HomTest s)) y
forall (m :: * -> * -> *) x y.
Morphism m =>
m x y -> Struct (ObjectClass m) y
range HomTest s x y
h)) of
(Struct Ort x
Struct,Struct Ort y
Struct) -> HomTest s (Op x) y
-> SDualBi (DiagramG Diagram (Dual t) n m) (Op x)
-> SomeNaturalApplication
(HomTest s)
(SDualBi (DiagramG Diagram (Dual t) n m))
(SDualBi (Diagram (Dual t) n m))
forall (a :: * -> * -> *) (g :: * -> *) y (f :: * -> *) x.
(Show2 a, Eq (g y), Show (f x)) =>
a x y -> f x -> SomeNaturalApplication a f g
SomeNaturalApplication (HomTest s x y
h HomTest s x y -> HomTest s (Op x) x -> HomTest s (Op x) y
forall y z x. HomTest s y z -> HomTest s x y -> HomTest s x z
forall (c :: * -> * -> *) y z x.
Category c =>
c y z -> c x y -> c x z
. HomTest s (Op x) x
f) SDualBi (DiagramG Diagram (Dual t) n m) (Op x)
sd' where
Contravariant2 (Inv2 HomDisj s Op (HomId s) x (Op x)
t HomTest s (Op x) x
f) = HomTest s x y
-> Variant2 'Contravariant (IsoHomDisj s Op (HomId s)) x (Op x)
forall s x y.
TransformableGRefl Op s =>
HomTest s x y
-> Variant2 'Contravariant (IsoHomDisj s Op (HomId s)) x (Op x)
isoHomTest HomTest s x y
h
sd' :: SDualBi (DiagramG Diagram (Dual t) n m) (Op x)
sd' = case HomDisj s Op (HomId s) x (Op x)
-> SDualBi (DiagramG Diagram t n m) x
-> SDualBi (DiagramG Diagram t n m) (Op x)
forall x y.
HomDisj s Op (HomId s) x y
-> SDualBi (DiagramG Diagram t n m) x
-> SDualBi (DiagramG Diagram t n m) y
forall (t :: * -> *) (a :: * -> * -> *) (b :: * -> * -> *) x y.
ApplicativeG t a b =>
a x y -> b (t x) (t y)
amapG HomDisj s Op (HomId s) x (Op x)
t SDualBi (DiagramG Diagram t n m) x
sd of
SDualBi (Right1 DiagramG Diagram t n m (Op x)
d) -> Either1
(Dual1 (DiagramG Diagram (Dual t) n m))
(DiagramG Diagram (Dual t) n m)
(Op x)
-> SDualBi (DiagramG Diagram (Dual t) n m) (Op x)
forall (d :: * -> *) x. Either1 (Dual1 d) d x -> SDualBi d x
SDualBi (DiagramG Diagram t n m (Op x)
-> Either1
(DiagramG Diagram t n m) (DiagramG Diagram (Dual t) n m) (Op x)
forall (f :: * -> *) x (g :: * -> *). f x -> Either1 f g x
Left1 DiagramG Diagram t n m (Op x)
d)
SDualBi (Left1 Dual1 (DiagramG Diagram t n m) (Op x)
d') -> Either1
(Dual1 (DiagramG Diagram (Dual t) n m))
(DiagramG Diagram (Dual t) n m)
(Op x)
-> SDualBi (DiagramG Diagram (Dual t) n m) (Op x)
forall (d :: * -> *) x. Either1 (Dual1 d) d x -> SDualBi d x
SDualBi (DiagramG Diagram (Dual t) n m (Op x)
-> Either1
(DiagramG Diagram t n m) (DiagramG Diagram (Dual t) n m) (Op x)
forall (g :: * -> *) x (f :: * -> *). g x -> Either1 f g x
Right1 Dual1 (DiagramG Diagram t n m) (Op x)
DiagramG Diagram (Dual t) n m (Op x)
d')