{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances, FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE DataKinds #-}
module OAlg.Limes.Definition.Core
(
Limes, LimesG(..)
, universalCone, universalFactor, universalDiagram
, eligibleCone, eligibleFactor
, lmDiagramTypeRefl
, lmMltPrjOrnt, lmMltInjOrnt
) where
import Data.Typeable
import Data.List ((++))
import OAlg.Prelude
import OAlg.Category.SDuality
import OAlg.Data.Either
import OAlg.Data.Variant
import OAlg.Entity.Diagram
import OAlg.Entity.FinList hiding ((++))
import OAlg.Structure.Oriented
import OAlg.Structure.Multiplicative
import OAlg.Hom.Multiplicative
import OAlg.Hom.Distributive
import OAlg.Limes.Cone
data LimesG c s p d t n m x where
LimesProjective :: c s Projective d t n m x -> (Cone s Projective d t n m x -> x)
-> LimesG c s Projective d t n m x
LimesInjective :: c s Injective d t n m x -> (Cone s Injective d t n m x -> x)
-> LimesG c s Injective d t n m x
instance Show (c s p d t n m x) => Show (LimesG c s p d t n m x) where
show :: LimesG c s p d t n m x -> String
show (LimesProjective c s 'Projective d t n m x
l Cone s 'Projective d t n m x -> x
_) = String
"LimesProjective (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ c s 'Projective d t n m x -> String
forall a. Show a => a -> String
show c s 'Projective d t n m x
l String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
show (LimesInjective c s 'Injective d t n m x
l Cone s 'Injective d t n m x -> x
_) = String
"LimesInjective (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ c s 'Injective d t n m x -> String
forall a. Show a => a -> String
show c s 'Injective d t n m x
l String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
type Limes s p = LimesG Cone s p Diagram
universalCone :: LimesG c s p d t n m x -> c s p d t n m x
universalCone :: forall (c :: *
-> Perspective
-> (DiagramType -> N' -> N' -> * -> *)
-> DiagramType
-> N'
-> N'
-> *
-> *)
s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
(t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> c s p d t n m x
universalCone (LimesProjective c s 'Projective d t n m x
u Cone s 'Projective d t n m x -> x
_) = c s p d t n m x
c s 'Projective d t n m x
u
universalCone (LimesInjective c s 'Injective d t n m x
u Cone s 'Injective d t n m x -> x
_) = c s p d t n m x
c s 'Injective d t n m x
u
universalFactor :: LimesG c s p d t n m x -> Cone s p d t n m x -> x
universalFactor :: forall (c :: *
-> Perspective
-> (DiagramType -> N' -> N' -> * -> *)
-> DiagramType
-> N'
-> N'
-> *
-> *)
s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
(t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> Cone s p d t n m x -> x
universalFactor (LimesProjective c s 'Projective d t n m x
_ Cone s 'Projective d t n m x -> x
f) = Cone s p d t n m x -> x
Cone s 'Projective d t n m x -> x
f
universalFactor (LimesInjective c s 'Injective d t n m x
_ Cone s 'Injective d t n m x -> x
f) = Cone s p d t n m x -> x
Cone s 'Injective d t n m x -> x
f
universalDiagram :: Conic c => LimesG c s p d t n m x -> d t n m x
universalDiagram :: forall (c :: *
-> Perspective
-> (DiagramType -> N' -> N' -> * -> *)
-> DiagramType
-> N'
-> N'
-> *
-> *)
s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
(t :: DiagramType) (n :: N') (m :: N') x.
Conic c =>
LimesG c s p d t n m x -> d t n m x
universalDiagram = Cone s p d t n m x -> d t n m x
forall s (p :: Perspective)
(d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') a.
Cone s p d t n m a -> d t n m a
diagrammaticObject (Cone s p d t n m x -> d t n m x)
-> (LimesG c s p d t n m x -> Cone s p d t n m x)
-> LimesG c s p d t n m x
-> d t n m 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
. c s p d t n m x -> Cone s p d t n m x
forall s (p :: Perspective)
(d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
c s p d t n m x -> Cone s p d t n m x
forall (c :: *
-> Perspective
-> (DiagramType -> N' -> N' -> * -> *)
-> DiagramType
-> N'
-> N'
-> *
-> *)
s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
(t :: DiagramType) (n :: N') (m :: N') x.
Conic c =>
c s p d t n m x -> Cone s p d t n m x
cone (c s p d t n m x -> Cone s p d t n m x)
-> (LimesG c s p d t n m x -> c s p d t n m x)
-> LimesG c s p d t n m x
-> Cone s p d t n m 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
. LimesG c s p d t n m x -> c s p d t n m x
forall (c :: *
-> Perspective
-> (DiagramType -> N' -> N' -> * -> *)
-> DiagramType
-> N'
-> N'
-> *
-> *)
s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
(t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> c s p d t n m x
universalCone
eligibleCone :: (Conic c, Eq (d t n m x)) => LimesG c s p d t n m x -> Cone s p d t n m x -> Bool
eligibleCone :: forall (c :: *
-> Perspective
-> (DiagramType -> N' -> N' -> * -> *)
-> DiagramType
-> N'
-> N'
-> *
-> *)
(d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x s (p :: Perspective).
(Conic c, Eq (d t n m x)) =>
LimesG c s p d t n m x -> Cone s p d t n m x -> Bool
eligibleCone LimesG c s p d t n m x
l Cone s p d t n m x
c = LimesG c s p d t n m x -> d t n m x
forall (c :: *
-> Perspective
-> (DiagramType -> N' -> N' -> * -> *)
-> DiagramType
-> N'
-> N'
-> *
-> *)
s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
(t :: DiagramType) (n :: N') (m :: N') x.
Conic c =>
LimesG c s p d t n m x -> d t n m x
universalDiagram LimesG c s p d t n m x
l d t n m x -> d t n m x -> Bool
forall a. Eq a => a -> a -> Bool
== Cone s p d t n m x -> d t n m x
forall s (p :: Perspective)
(d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') a.
Cone s p d t n m a -> d t n m a
diagrammaticObject Cone s p d t n m x
c
cnEligibleFactorDgm :: Cone s p Diagram t n m x -> Cone s p Diagram t n m x -> x -> Bool
cnEligibleFactorDgm :: forall s (p :: Perspective) (t :: DiagramType) (n :: N') (m :: N')
x.
Cone s p Diagram t n m x -> Cone s p Diagram t n m x -> x -> Bool
cnEligibleFactorDgm (ConeProjective Diagram t n m x
_ Point x
a FinList n x
as) (ConeProjective Diagram t n m x
_ Point x
b FinList n x
bs) x
x
= x -> Orientation (Point x)
forall q. Oriented q => q -> Orientation (Point q)
orientation x
x Orientation (Point x) -> Orientation (Point x) -> Bool
forall a. Eq a => a -> a -> Bool
== Point x
bPoint x -> Point x -> Orientation (Point x)
forall p. p -> p -> Orientation p
:>Point x
a Bool -> Bool -> Bool
forall a. Logical a => a -> a -> a
&& x -> FinList n x -> FinList n x -> Bool
forall x (n :: N').
Multiplicative x =>
x -> FinList n x -> FinList n x -> Bool
comPrj x
x FinList n x
as FinList n x
bs where
comPrj :: Multiplicative x => x -> FinList n x -> FinList n x -> Bool
comPrj :: forall x (n :: N').
Multiplicative x =>
x -> FinList n x -> FinList n x -> Bool
comPrj x
_ FinList n x
Nil FinList n x
Nil = Bool
True
comPrj x
x (x
a:|FinList n1 x
as) (x
b:|FinList n1 x
bs) = x
ax -> x -> x
forall c. Multiplicative c => c -> c -> c
*x
x x -> x -> Bool
forall a. Eq a => a -> a -> Bool
== x
b Bool -> Bool -> Bool
forall a. Logical a => a -> a -> a
&& x -> FinList n1 x -> FinList n1 x -> Bool
forall x (n :: N').
Multiplicative x =>
x -> FinList n x -> FinList n x -> Bool
comPrj x
x FinList n1 x
as FinList n1 x
FinList n1 x
bs
cnEligibleFactorDgm a :: Cone s p Diagram t n m x
a@(ConeInjective Diagram t n m x
d Point x
_ FinList n x
_) Cone s p Diagram t n m x
b x
x = case Diagram t n m x -> Dual (Dual t) :~: t
forall (t :: DiagramType) (n :: N') (m :: N') a.
Diagram t n m a -> Dual (Dual t) :~: t
dgTypeRefl Diagram t n m x
d of
Dual (Dual t) :~: t
Refl -> Cone Mlt 'Projective Diagram (Dual t) n m (Op x)
-> Cone Mlt 'Projective Diagram (Dual t) n m (Op x) -> Op x -> Bool
forall s (p :: Perspective) (t :: DiagramType) (n :: N') (m :: N')
x.
Cone s p Diagram t n m x -> Cone s p Diagram t n m x -> x -> Bool
cnEligibleFactorDgm Dual1 (Cone s p Diagram t n m) (Op x)
Cone Mlt 'Projective Diagram (Dual t) n m (Op x)
a' Dual1 (Cone s p Diagram t n m) (Op x)
Cone Mlt 'Projective Diagram (Dual t) n m (Op x)
b' Op x
x' where
Contravariant2 (Inv2 HomDisjEmpty Mlt Op x (Op x)
t HomDisjEmpty Mlt Op (Op x) x
_) = Variant2 'Contravariant (IsoO Mlt Op) x (Op x)
forall x.
Multiplicative x =>
Variant2 'Contravariant (IsoO Mlt Op) x (Op x)
toDualOpMlt
SDualBi (Left1 Dual1 (Cone s p Diagram t n m) (Op x)
a') = HomDisjEmpty Mlt Op x (Op x)
-> SDualBi (Cone s p Diagram t n m) x
-> SDualBi (Cone s p Diagram t n m) (Op x)
forall s (h :: * -> * -> *)
(d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') (p :: Perspective) x y.
(HomD s h, NaturalDiagrammatic h d t n m,
NaturalDiagrammatic h d (Dual t) n m, p ~ Dual (Dual p)) =>
h x y
-> SDualBi (Cone s p d t n m) x -> SDualBi (Cone s p d t n m) y
cnMapS HomDisjEmpty Mlt Op x (Op x)
t (Either1 (Dual1 (Cone s p Diagram t n m)) (Cone s p Diagram t n m) x
-> SDualBi (Cone s p Diagram t n m) x
forall (d :: * -> *) x. Either1 (Dual1 d) d x -> SDualBi d x
SDualBi (Cone s p Diagram t n m x
-> Either1
(Cone Mlt 'Projective Diagram (Dual t) n m)
(Cone s p Diagram t n m)
x
forall (g :: * -> *) x (f :: * -> *). g x -> Either1 f g x
Right1 Cone s p Diagram t n m x
a))
SDualBi (Left1 Dual1 (Cone s p Diagram t n m) (Op x)
b') = HomDisjEmpty Mlt Op x (Op x)
-> SDualBi (Cone s p Diagram t n m) x
-> SDualBi (Cone s p Diagram t n m) (Op x)
forall s (h :: * -> * -> *)
(d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') (p :: Perspective) x y.
(HomD s h, NaturalDiagrammatic h d t n m,
NaturalDiagrammatic h d (Dual t) n m, p ~ Dual (Dual p)) =>
h x y
-> SDualBi (Cone s p d t n m) x -> SDualBi (Cone s p d t n m) y
cnMapS HomDisjEmpty Mlt Op x (Op x)
t (Either1 (Dual1 (Cone s p Diagram t n m)) (Cone s p Diagram t n m) x
-> SDualBi (Cone s p Diagram t n m) x
forall (d :: * -> *) x. Either1 (Dual1 d) d x -> SDualBi d x
SDualBi (Cone s p Diagram t n m x
-> Either1
(Cone Mlt 'Projective Diagram (Dual t) n m)
(Cone s p Diagram t n m)
x
forall (g :: * -> *) x (f :: * -> *). g x -> Either1 f g x
Right1 Cone s p Diagram t n m x
b))
x' :: Op x
x' = HomDisjEmpty Mlt Op x (Op x) -> x -> Op x
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
amap HomDisjEmpty Mlt Op x (Op x)
t x
x
cnEligibleFactorDgm (ConeKernel Diagram ('Parallel 'LeftToRight) ('S N1) m x
_ x
a) (ConeKernel Diagram ('Parallel 'LeftToRight) ('S N1) m x
_ x
b) x
x
= x -> Orientation (Point x)
forall q. Oriented q => q -> Orientation (Point q)
orientation x
x Orientation (Point x) -> Orientation (Point x) -> Bool
forall a. Eq a => a -> a -> Bool
== x -> Point x
forall q. Oriented q => q -> Point q
start x
b Point x -> Point x -> Orientation (Point x)
forall p. p -> p -> Orientation p
:> x -> Point x
forall q. Oriented q => q -> Point q
start x
a Bool -> Bool -> Bool
forall a. Logical a => a -> a -> a
&& x
ax -> x -> x
forall c. Multiplicative c => c -> c -> c
*x
x x -> x -> Bool
forall a. Eq a => a -> a -> Bool
== x
b
cnEligibleFactorDgm a :: Cone s p Diagram t n m x
a@(ConeCokernel Diagram ('Parallel 'RightToLeft) ('S N1) m x
d x
_) Cone s p Diagram t n m x
b x
x = case Diagram ('Parallel 'RightToLeft) ('S N1) m x
-> Dual (Dual ('Parallel 'RightToLeft)) :~: 'Parallel 'RightToLeft
forall (t :: DiagramType) (n :: N') (m :: N') a.
Diagram t n m a -> Dual (Dual t) :~: t
dgTypeRefl Diagram ('Parallel 'RightToLeft) ('S N1) m x
d of
Dual (Dual ('Parallel 'RightToLeft)) :~: 'Parallel 'RightToLeft
Refl -> Cone
Dst 'Projective Diagram ('Parallel 'LeftToRight) ('S N1) m (Op x)
-> Cone
Dst 'Projective Diagram ('Parallel 'LeftToRight) ('S N1) m (Op x)
-> Op x
-> Bool
forall s (p :: Perspective) (t :: DiagramType) (n :: N') (m :: N')
x.
Cone s p Diagram t n m x -> Cone s p Diagram t n m x -> x -> Bool
cnEligibleFactorDgm Dual1 (Cone s p Diagram t n m) (Op x)
Cone
Dst 'Projective Diagram ('Parallel 'LeftToRight) ('S N1) m (Op x)
a' Dual1 (Cone s p Diagram t n m) (Op x)
Cone
Dst 'Projective Diagram ('Parallel 'LeftToRight) ('S N1) m (Op x)
b' Op x
x' where
Contravariant2 (Inv2 HomDisjEmpty Dst Op x (Op x)
t HomDisjEmpty Dst Op (Op x) x
_) = Variant2 'Contravariant (IsoO Dst Op) x (Op x)
forall x.
Distributive x =>
Variant2 'Contravariant (IsoO Dst Op) x (Op x)
toDualOpDst
SDualBi (Left1 Dual1 (Cone s p Diagram t n m) (Op x)
a') = HomDisjEmpty Dst Op x (Op x)
-> SDualBi (Cone s p Diagram t n m) x
-> SDualBi (Cone s p Diagram t n m) (Op x)
forall s (h :: * -> * -> *)
(d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') (p :: Perspective) x y.
(HomD s h, NaturalDiagrammatic h d t n m,
NaturalDiagrammatic h d (Dual t) n m, p ~ Dual (Dual p)) =>
h x y
-> SDualBi (Cone s p d t n m) x -> SDualBi (Cone s p d t n m) y
cnMapS HomDisjEmpty Dst Op x (Op x)
t (Either1 (Dual1 (Cone s p Diagram t n m)) (Cone s p Diagram t n m) x
-> SDualBi (Cone s p Diagram t n m) x
forall (d :: * -> *) x. Either1 (Dual1 d) d x -> SDualBi d x
SDualBi (Cone s p Diagram t n m x
-> Either1
(Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) ('S N1) m)
(Cone s p Diagram t n m)
x
forall (g :: * -> *) x (f :: * -> *). g x -> Either1 f g x
Right1 Cone s p Diagram t n m x
a))
SDualBi (Left1 Dual1 (Cone s p Diagram t n m) (Op x)
b') = HomDisjEmpty Dst Op x (Op x)
-> SDualBi (Cone s p Diagram t n m) x
-> SDualBi (Cone s p Diagram t n m) (Op x)
forall s (h :: * -> * -> *)
(d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') (p :: Perspective) x y.
(HomD s h, NaturalDiagrammatic h d t n m,
NaturalDiagrammatic h d (Dual t) n m, p ~ Dual (Dual p)) =>
h x y
-> SDualBi (Cone s p d t n m) x -> SDualBi (Cone s p d t n m) y
cnMapS HomDisjEmpty Dst Op x (Op x)
t (Either1 (Dual1 (Cone s p Diagram t n m)) (Cone s p Diagram t n m) x
-> SDualBi (Cone s p Diagram t n m) x
forall (d :: * -> *) x. Either1 (Dual1 d) d x -> SDualBi d x
SDualBi (Cone s p Diagram t n m x
-> Either1
(Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) ('S N1) m)
(Cone s p Diagram t n m)
x
forall (g :: * -> *) x (f :: * -> *). g x -> Either1 f g x
Right1 Cone s p Diagram t n m x
b))
x' :: Op x
x' = HomDisjEmpty Dst Op x (Op x) -> x -> Op x
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
amap HomDisjEmpty Dst Op x (Op x)
t x
x
cnEligibleFactor :: Diagrammatic d
=> Cone s p d t n m x -> Cone s p d t n m x -> x -> Bool
cnEligibleFactor :: forall (d :: DiagramType -> N' -> N' -> * -> *) s
(p :: Perspective) (t :: DiagramType) (n :: N') (m :: N') x.
Diagrammatic d =>
Cone s p d t n m x -> Cone s p d t n m x -> x -> Bool
cnEligibleFactor Cone s p d t n m x
a Cone s p d t n m x
b = Cone s p Diagram t n m x -> Cone s p Diagram t n m x -> x -> Bool
forall s (p :: Perspective) (t :: DiagramType) (n :: N') (m :: N')
x.
Cone s p Diagram t n m x -> Cone s p Diagram t n m x -> x -> Bool
cnEligibleFactorDgm (Cone s p d t n m x -> Cone s p Diagram t n m x
forall (d :: DiagramType -> N' -> N' -> * -> *) s
(p :: Perspective) (t :: DiagramType) (n :: N') (m :: N') a.
Diagrammatic d =>
Cone s p d t n m a -> Cone s p Diagram t n m a
coneDiagram Cone s p d t n m x
a) (Cone s p d t n m x -> Cone s p Diagram t n m x
forall (d :: DiagramType -> N' -> N' -> * -> *) s
(p :: Perspective) (t :: DiagramType) (n :: N') (m :: N') a.
Diagrammatic d =>
Cone s p d t n m a -> Cone s p Diagram t n m a
coneDiagram Cone s p d t n m x
b)
eligibleFactor :: (Conic c, Diagrammatic d)
=> LimesG c s p d t n m x -> Cone s p d t n m x -> x -> Bool
eligibleFactor :: forall (c :: *
-> Perspective
-> (DiagramType -> N' -> N' -> * -> *)
-> DiagramType
-> N'
-> N'
-> *
-> *)
(d :: DiagramType -> N' -> N' -> * -> *) s (p :: Perspective)
(t :: DiagramType) (n :: N') (m :: N') x.
(Conic c, Diagrammatic d) =>
LimesG c s p d t n m x -> Cone s p d t n m x -> x -> Bool
eligibleFactor LimesG c s p d t n m x
l = Cone s p d t n m x -> Cone s p d t n m x -> x -> Bool
forall (d :: DiagramType -> N' -> N' -> * -> *) s
(p :: Perspective) (t :: DiagramType) (n :: N') (m :: N') x.
Diagrammatic d =>
Cone s p d t n m x -> Cone s p d t n m x -> x -> Bool
cnEligibleFactor (c s p d t n m x -> Cone s p d t n m x
forall s (p :: Perspective)
(d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
c s p d t n m x -> Cone s p d t n m x
forall (c :: *
-> Perspective
-> (DiagramType -> N' -> N' -> * -> *)
-> DiagramType
-> N'
-> N'
-> *
-> *)
s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
(t :: DiagramType) (n :: N') (m :: N') x.
Conic c =>
c s p d t n m x -> Cone s p d t n m x
cone (c s p d t n m x -> Cone s p d t n m x)
-> c s p d t n m x -> Cone s p d t n m x
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ LimesG c s p d t n m x -> c s p d t n m x
forall (c :: *
-> Perspective
-> (DiagramType -> N' -> N' -> * -> *)
-> DiagramType
-> N'
-> N'
-> *
-> *)
s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
(t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> c s p d t n m x
universalCone LimesG c s p d t n m x
l)
lmMltPrjOrnt :: (Entity p, x ~ Orientation p)
=> p -> Diagram t n m x -> Limes Mlt Projective t n m x
lmMltPrjOrnt :: forall p x (t :: DiagramType) (n :: N') (m :: N').
(Entity p, x ~ Orientation p) =>
p -> Diagram t n m x -> Limes Mlt 'Projective t n m x
lmMltPrjOrnt p
t Diagram t n m x
d = Cone Mlt 'Projective Diagram t n m x
-> (Cone Mlt 'Projective Diagram t n m x -> x)
-> LimesG Cone Mlt 'Projective Diagram t n m x
forall (c :: *
-> Perspective
-> (DiagramType -> N' -> N' -> * -> *)
-> DiagramType
-> N'
-> N'
-> *
-> *)
s (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
c s 'Projective d t n m x
-> (Cone s 'Projective d t n m x -> x)
-> LimesG c s 'Projective d t n m x
LimesProjective Cone Mlt 'Projective Diagram t n m x
Cone Mlt 'Projective Diagram t n m (Orientation p)
l Cone Mlt 'Projective Diagram t n m x -> x
u where
l :: Cone Mlt 'Projective Diagram t n m (Orientation p)
l = p
-> Diagram t n m (Orientation p)
-> Cone Mlt 'Projective Diagram t n m (Orientation p)
forall (d :: DiagramType -> N' -> N' -> * -> *) p
(t :: DiagramType) (n :: N') (m :: N').
(Diagrammatic d, Entity p) =>
p
-> d t n m (Orientation p)
-> Cone Mlt 'Projective d t n m (Orientation p)
cnPrjOrnt p
t Diagram t n m x
Diagram t n m (Orientation p)
d
u :: Cone Mlt 'Projective Diagram t n m x -> x
u (ConeProjective Diagram t n m x
_ Point x
x FinList n x
_) = p
Point x
xp -> p -> Orientation p
forall p. p -> p -> Orientation p
:>p
t
lmDiagramTypeRefl :: (Conic c, Diagrammatic d) => LimesG c s p d t n m x -> Dual (Dual t) :~: t
lmDiagramTypeRefl :: forall (c :: *
-> Perspective
-> (DiagramType -> N' -> N' -> * -> *)
-> DiagramType
-> N'
-> N'
-> *
-> *)
(d :: DiagramType -> N' -> N' -> * -> *) s (p :: Perspective)
(t :: DiagramType) (n :: N') (m :: N') x.
(Conic c, Diagrammatic d) =>
LimesG c s p d t n m x -> Dual (Dual t) :~: t
lmDiagramTypeRefl = Diagram t n m x -> Dual (Dual t) :~: t
forall (t :: DiagramType) (n :: N') (m :: N') a.
Diagram t n m a -> Dual (Dual t) :~: t
dgTypeRefl (Diagram t n m x -> Dual (Dual t) :~: t)
-> (LimesG c s p d t n m x -> Diagram t n m x)
-> LimesG c s p d t n m x
-> Dual (Dual t) :~: t
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
. 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 -> Diagram t n m x)
-> (LimesG c s p d t n m x -> d t n m x)
-> LimesG c s p d t n m x
-> Diagram t n m 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
. Cone s p d t n m x -> d t n m x
forall s (p :: Perspective)
(d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') a.
Cone s p d t n m a -> d t n m a
diagrammaticObject (Cone s p d t n m x -> d t n m x)
-> (LimesG c s p d t n m x -> Cone s p d t n m x)
-> LimesG c s p d t n m x
-> d t n m 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
. c s p d t n m x -> Cone s p d t n m x
forall s (p :: Perspective)
(d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
c s p d t n m x -> Cone s p d t n m x
forall (c :: *
-> Perspective
-> (DiagramType -> N' -> N' -> * -> *)
-> DiagramType
-> N'
-> N'
-> *
-> *)
s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
(t :: DiagramType) (n :: N') (m :: N') x.
Conic c =>
c s p d t n m x -> Cone s p d t n m x
cone (c s p d t n m x -> Cone s p d t n m x)
-> (LimesG c s p d t n m x -> c s p d t n m x)
-> LimesG c s p d t n m x
-> Cone s p d t n m 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
. LimesG c s p d t n m x -> c s p d t n m x
forall (c :: *
-> Perspective
-> (DiagramType -> N' -> N' -> * -> *)
-> DiagramType
-> N'
-> N'
-> *
-> *)
s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
(t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> c s p d t n m x
universalCone
lmMltInjOrnt :: (Entity p, x ~ Orientation p)
=> p -> Diagram t n m x -> Limes Mlt Injective t n m x
lmMltInjOrnt :: forall p x (t :: DiagramType) (n :: N') (m :: N').
(Entity p, x ~ Orientation p) =>
p -> Diagram t n m x -> Limes Mlt 'Injective t n m x
lmMltInjOrnt p
t Diagram t n m x
d = Cone Mlt 'Injective Diagram t n m x
-> (Cone Mlt 'Injective Diagram t n m x -> x)
-> LimesG Cone Mlt 'Injective Diagram t n m x
forall (c :: *
-> Perspective
-> (DiagramType -> N' -> N' -> * -> *)
-> DiagramType
-> N'
-> N'
-> *
-> *)
s (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
(n :: N') (m :: N') x.
c s 'Injective d t n m x
-> (Cone s 'Injective d t n m x -> x)
-> LimesG c s 'Injective d t n m x
LimesInjective Cone Mlt 'Injective Diagram t n m x
Cone Mlt 'Injective Diagram t n m (Orientation p)
l Cone Mlt 'Injective Diagram t n m x -> x
u where
l :: Cone Mlt 'Injective Diagram t n m (Orientation p)
l = p
-> Diagram t n m (Orientation p)
-> Cone Mlt 'Injective Diagram t n m (Orientation p)
forall (d :: DiagramType -> N' -> N' -> * -> *) p
(t :: DiagramType) (n :: N') (m :: N').
(Diagrammatic d, Entity p) =>
p
-> d t n m (Orientation p)
-> Cone Mlt 'Injective d t n m (Orientation p)
cnInjOrnt p
t Diagram t n m x
Diagram t n m (Orientation p)
d
u :: Cone Mlt 'Injective Diagram t n m x -> x
u (ConeInjective Diagram t n m x
_ Point x
x FinList n x
_) = p
tp -> p -> Orientation p
forall p. p -> p -> Orientation p
:>p
Point x
x