{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MonadComprehensions #-}
{-# LANGUAGE MultiParamTypeClasses #-}

{-| Module  : FiniteCategories
Description : A 'Sketch' is a category equipped with distinguished cones, cocones and tripods.
Copyright   : Guillaume Sabbagh 2022
License     : GPL-3
Maintainer  : guillaumesabbagh@protonmail.com
Stability   : experimental
Portability : portable

A 'Sketch' is a category equipped with distinguished cones, cocones and tripods. (In litterature, a mixed sketch only distinguishes cones and cocones but we add exponential objects to model second-order logical structures.)

The category is represented by a composition graph.

-}

module Math.Categories.FinSketch
(
    -- * Types for Sketch
    CategorySketch(..),
    ArrowSketch(..),
    ObjectSketch(..),
    ConeSketch(..),
    CoconeSketch(..),
    TripodSketch(..),
    SketchError(..),
    constructTwoConeFromTripod,
    constructTwoConeFromTripodText,
    -- * Sketch
    Sketch,
    -- ** Getters
    underlyingCategory,
    supportSketch,
    distinguishedCones,
    distinguishedCocones,
    distinguishedTripods,
    -- ** Smart constructors
    unsafeSketch,
    sketch,
    sketchText,
    -- ** Helpers
    checkSketch,
    checkFiniteSketch,
    -- * Sketch morphism,
    SketchMorphism,
    SketchMorphismError(..),
    -- ** Getter
    underlyingFunctor,
    -- ** Smart constructors
    unsafeSketchMorphism,
    sketchMorphism,
    -- ** Other functions
    canFunctorBePromotedIntoSketchMorphism,
    
    -- * The category of finite sketches
    FinSketch(..),
    
    -- * Functions for shiny sketches
    -- Lantern(..),
    containsLantern,
    -- Spotlight(..),
    containsSpotlight,
    -- CrescentMoon(..),
    containsCrescentMoon,
    -- Colantern(..),
    containsColantern,
    -- Cospotlight(..),
    containsCospotlight,
    -- CocrescentMoon(..),
    containsCocrescentMoon,
    LightConstruction(..),
    containsLightConstruction,
    
    -- * Ehresmann realization
    -- factorsCone,
    -- factorsCocone,
    -- lonelyCones,
    -- lonelyCocones,
    -- crowdedCones,
    -- crowdedCocones,
    -- createLonelyConeCorrectionArrow,
    -- createLonelyCoconeCorrectionArrow,
    -- addLonelinessCorrectionArrows,
    -- quotientArrows,
    -- stepRealization,
    -- stepRealizationText,
)

where
    import              Data.WeakSet         (Set)
    import qualified    Data.WeakSet       as Set
    import              Data.WeakSet.Safe
    import              Data.WeakMap         (Map)
    import qualified    Data.WeakMap       as Map
    import              Data.WeakMap.Safe
    import              Data.Text            (Text, pack)
    import              Data.Simplifiable
    import              Data.Maybe           (isJust, isNothing, fromJust)
    import              Data.Either          (isLeft)

    import              Math.FiniteCategory
    import              Math.CocompleteCategory
    import              Math.CartesianClosedCategory
    import              Math.FiniteCategories.Parallel
    import              Math.FiniteCategories.CompositionGraph
    import              Math.FiniteCategories.ColimitCategory
    import              Math.FiniteCategories.DiscreteTwo
    import              Math.Categories.FunctorCategory
    import              Math.Categories.CommaCategory
    import              Math.Categories.ConeCategory
    import              Math.Categories.FinCat
    import              Math.Categories.FinGrph
    import              Math.FiniteCategoryError
    import              Math.IO.PrettyPrint
    
    import              GHC.Generics

    type CategorySketch n e = CompositionGraph n e
    type ArrowSketch n e = CGMorphism n e
    type ObjectSketch n e = n
     
    type ConeSketch n e = Cone (CategorySketch n e) (ArrowSketch n e) (ObjectSketch n e) (CategorySketch n e) (ArrowSketch n e) (ObjectSketch n e)
    type CoconeSketch n e = Cocone (CategorySketch n e) (ArrowSketch n e) (ObjectSketch n e) (CategorySketch n e) (ArrowSketch n e) (ObjectSketch n e)
    type TripodSketch n e = Tripod (CategorySketch n e) (ArrowSketch n e) (ObjectSketch n e)

    type FunctorSketch n e = FinFunctor (CategorySketch n e) (ArrowSketch n e) (ObjectSketch n e)
    
   
    -- | Construct a 2-cone selecting the power object and the internal domain of a 'Tripod'. This 2-cone can then be added to the distinguished cones of a 'Sketch'. The two first arguments are arbitrary distinct objects of type n (they will be the objects of the indexing category of the 2-cone).
    constructTwoConeFromTripod :: (Eq n, Eq e) => n -> n -> TripodSketch n e -> ConeSketch n e
    constructTwoConeFromTripod :: forall n e.
(Eq n, Eq e) =>
n -> n -> TripodSketch n e -> ConeSketch n e
constructTwoConeFromTripod n
a n
b TripodSketch n e
t
        | n
a n -> n -> Bool
forall a. Eq a => a -> a -> Bool
== n
b = [Char] -> ConeSketch n e
forall a. HasCallStack => [Char] -> a
error [Char]
"constructTwoConeFromTripod with two same indexing objects."
        | Bool
otherwise = n
-> NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> ConeSketch n e
forall o2 c1 m1 o1 c2 m2.
o2
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> Cone c1 m1 o1 c2 m2 o2
unsafeCone (Cone
  DiscreteTwo
  DiscreteTwoAr
  DiscreteTwoAr
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> n
forall c1 m1 o1 c2 m2 o2. Cone c1 m1 o1 c2 m2 o2 -> o2
apex (Cone
   DiscreteTwo
   DiscreteTwoAr
   DiscreteTwoAr
   (CategorySketch n e)
   (ArrowSketch n e)
   n
 -> n)
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> n
forall a b. (a -> b) -> a -> b
$ TripodSketch n e
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c m o.
Tripod c m o -> Cone DiscreteTwo DiscreteTwoAr DiscreteTwoAr c m o
twoCone (TripodSketch n e
 -> Cone
      DiscreteTwo
      DiscreteTwoAr
      DiscreteTwoAr
      (CategorySketch n e)
      (ArrowSketch n e)
      n)
-> TripodSketch n e
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall a b. (a -> b) -> a -> b
$ TripodSketch n e
t) NaturalTransformation
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
nat
        where
            indexingCategory :: CompositionGraph n b
indexingCategory = Graph n b -> CompositionLaw n b -> CompositionGraph n b
forall a b. Graph a b -> CompositionLaw a b -> CompositionGraph a b
unsafeCompositionGraph (Set n -> Set (Arrow n b) -> Graph n b
forall n e. Set n -> Set (Arrow n e) -> Graph n e
unsafeGraph ([n] -> Set n
forall a. [a] -> Set a
set [n
a,n
b]) ([Arrow n b] -> Set (Arrow n b)
forall a. [a] -> Set a
set [])) (AssociationList [Arrow n b] [Arrow n b] -> CompositionLaw n b
forall k v. AssociationList k v -> Map k v
weakMap [])
            srcDiag :: Diagram
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
srcDiag = CategorySketch n e
-> CategorySketch n e
-> n
-> Diagram
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Category c2 m2 o2,
 Morphism m2 o2) =>
c1 -> c2 -> o2 -> Diagram c1 m1 o1 c2 m2 o2
constantDiagram CategorySketch n e
forall {b}. CompositionGraph n b
indexingCategory (TripodSketch n e -> CategorySketch n e
forall c m o.
(Category c m o, Morphism m o, Eq c, Eq m, Eq o) =>
Tripod c m o -> c
universeCategoryTripod TripodSketch n e
t) (Cone
  DiscreteTwo
  DiscreteTwoAr
  DiscreteTwoAr
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> n
forall c1 m1 o1 c2 m2 o2. Cone c1 m1 o1 c2 m2 o2 -> o2
apex (Cone
   DiscreteTwo
   DiscreteTwoAr
   DiscreteTwoAr
   (CategorySketch n e)
   (ArrowSketch n e)
   n
 -> n)
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> n
forall a b. (a -> b) -> a -> b
$ TripodSketch n e
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c m o.
Tripod c m o -> Cone DiscreteTwo DiscreteTwoAr DiscreteTwoAr c m o
twoCone (TripodSketch n e
 -> Cone
      DiscreteTwo
      DiscreteTwoAr
      DiscreteTwoAr
      (CategorySketch n e)
      (ArrowSketch n e)
      n)
-> TripodSketch n e
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall a b. (a -> b) -> a -> b
$ TripodSketch n e
t)
            tgtDiag :: Diagram
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
tgtDiag = Diagram
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Diagram
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq m1, Eq o1,
 Category c2 m2 o2, Morphism m2 o2) =>
Diagram c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2
completeDiagram (Diagram
   (CategorySketch n e)
   (ArrowSketch n e)
   n
   (CategorySketch n e)
   (ArrowSketch n e)
   n
 -> Diagram
      (CategorySketch n e)
      (ArrowSketch n e)
      n
      (CategorySketch n e)
      (ArrowSketch n e)
      n)
-> Diagram
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> Diagram
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall a b. (a -> b) -> a -> b
$ Diagram{src :: CategorySketch n e
src = CategorySketch n e
forall {b}. CompositionGraph n b
indexingCategory, tgt :: CategorySketch n e
tgt = TripodSketch n e -> CategorySketch n e
forall c m o.
(Category c m o, Morphism m o, Eq c, Eq m, Eq o) =>
Tripod c m o -> c
universeCategoryTripod TripodSketch n e
t, omap :: Map n n
omap = AssociationList n n -> Map n n
forall k v. AssociationList k v -> Map k v
weakMap [(n
a, TripodSketch n e -> n
forall m o c. Morphism m o => Tripod c m o -> o
powerObject TripodSketch n e
t),(n
b, TripodSketch n e -> n
forall m o c. Morphism m o => Tripod c m o -> o
internalDomain TripodSketch n e
t)], mmap :: Map (ArrowSketch n e) (ArrowSketch n e)
mmap = AssociationList (ArrowSketch n e) (ArrowSketch n e)
-> Map (ArrowSketch n e) (ArrowSketch n e)
forall k v. AssociationList k v -> Map k v
weakMap []}
            nat :: NaturalTransformation
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
nat = Diagram
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Diagram
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> Map n (ArrowSketch n e)
-> NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2.
Diagram c1 m1 o1 c2 m2 o2
-> Diagram c1 m1 o1 c2 m2 o2
-> Map o1 m2
-> NaturalTransformation c1 m1 o1 c2 m2 o2
unsafeNaturalTransformation Diagram
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
srcDiag Diagram
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
tgtDiag (AssociationList n (ArrowSketch n e) -> Map n (ArrowSketch n e)
forall k v. AssociationList k v -> Map k v
weakMap [(n
a, (Cone
  DiscreteTwo
  DiscreteTwoAr
  DiscreteTwoAr
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> NaturalTransformation
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2.
Cone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCone (Cone
   DiscreteTwo
   DiscreteTwoAr
   DiscreteTwoAr
   (CategorySketch n e)
   (ArrowSketch n e)
   n
 -> NaturalTransformation
      DiscreteTwo
      DiscreteTwoAr
      DiscreteTwoAr
      (CategorySketch n e)
      (ArrowSketch n e)
      n)
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> NaturalTransformation
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall a b. (a -> b) -> a -> b
$ TripodSketch n e
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c m o.
Tripod c m o -> Cone DiscreteTwo DiscreteTwoAr DiscreteTwoAr c m o
twoCone TripodSketch n e
t) NaturalTransformation
  DiscreteTwo
  DiscreteTwoAr
  DiscreteTwoAr
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> DiscreteTwoAr -> ArrowSketch n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
NaturalTransformation c1 m1 o1 c2 m2 o2 -> o1 -> m2
=>$ DiscreteTwoAr
A),(n
b, (Cone
  DiscreteTwo
  DiscreteTwoAr
  DiscreteTwoAr
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> NaturalTransformation
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2.
Cone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCone (Cone
   DiscreteTwo
   DiscreteTwoAr
   DiscreteTwoAr
   (CategorySketch n e)
   (ArrowSketch n e)
   n
 -> NaturalTransformation
      DiscreteTwo
      DiscreteTwoAr
      DiscreteTwoAr
      (CategorySketch n e)
      (ArrowSketch n e)
      n)
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> NaturalTransformation
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall a b. (a -> b) -> a -> b
$ TripodSketch n e
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c m o.
Tripod c m o -> Cone DiscreteTwo DiscreteTwoAr DiscreteTwoAr c m o
twoCone TripodSketch n e
t) NaturalTransformation
  DiscreteTwo
  DiscreteTwoAr
  DiscreteTwoAr
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> DiscreteTwoAr -> ArrowSketch n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
NaturalTransformation c1 m1 o1 c2 m2 o2 -> o1 -> m2
=>$ DiscreteTwoAr
B)])
   
    -- | Specialized version of 'constructTwoConeFromTripod' for 'Sketch' of 'Text'.
    constructTwoConeFromTripodText :: TripodSketch Text Text -> ConeSketch Text Text
    constructTwoConeFromTripodText :: TripodSketch Text Text -> ConeSketch Text Text
constructTwoConeFromTripodText = Text -> Text -> TripodSketch Text Text -> ConeSketch Text Text
forall n e.
(Eq n, Eq e) =>
n -> n -> TripodSketch n e -> ConeSketch n e
constructTwoConeFromTripod ([Char] -> Text
pack [Char]
"A") ([Char] -> Text
pack [Char]
"B")
   

    -- | Sketch is private, use the smart constructor 'sketch' or 'unsafeSketch' to construct one. Note that for each distinguished 'Tripod', the 2-cone of the 'Tripod' should belong to the distinguished 'cones' (the 2-cone can be constructed with 'constructTwoConeFromTripod').
    data Sketch n e = Sketch {
        forall n e. Sketch n e -> CategorySketch n e
underlyingCategory :: CategorySketch n e,
        forall n e. Sketch n e -> Set (ConeSketch n e)
distinguishedCones :: Set (ConeSketch n e),
        forall n e. Sketch n e -> Set (CoconeSketch n e)
distinguishedCocones :: Set (CoconeSketch n e),
        forall n e. Sketch n e -> Set (TripodSketch n e)
distinguishedTripods :: Set (TripodSketch n e)
    } deriving (Sketch n e -> Sketch n e -> Bool
(Sketch n e -> Sketch n e -> Bool)
-> (Sketch n e -> Sketch n e -> Bool) -> Eq (Sketch n e)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall n e. (Eq n, Eq e) => Sketch n e -> Sketch n e -> Bool
$c== :: forall n e. (Eq n, Eq e) => Sketch n e -> Sketch n e -> Bool
== :: Sketch n e -> Sketch n e -> Bool
$c/= :: forall n e. (Eq n, Eq e) => Sketch n e -> Sketch n e -> Bool
/= :: Sketch n e -> Sketch n e -> Bool
Eq, Int -> Sketch n e -> ShowS
[Sketch n e] -> ShowS
Sketch n e -> [Char]
(Int -> Sketch n e -> ShowS)
-> (Sketch n e -> [Char])
-> ([Sketch n e] -> ShowS)
-> Show (Sketch n e)
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
forall n e. (Show n, Show e) => Int -> Sketch n e -> ShowS
forall n e. (Show n, Show e) => [Sketch n e] -> ShowS
forall n e. (Show n, Show e) => Sketch n e -> [Char]
$cshowsPrec :: forall n e. (Show n, Show e) => Int -> Sketch n e -> ShowS
showsPrec :: Int -> Sketch n e -> ShowS
$cshow :: forall n e. (Show n, Show e) => Sketch n e -> [Char]
show :: Sketch n e -> [Char]
$cshowList :: forall n e. (Show n, Show e) => [Sketch n e] -> ShowS
showList :: [Sketch n e] -> ShowS
Show, (forall x. Sketch n e -> Rep (Sketch n e) x)
-> (forall x. Rep (Sketch n e) x -> Sketch n e)
-> Generic (Sketch n e)
forall x. Rep (Sketch n e) x -> Sketch n e
forall x. Sketch n e -> Rep (Sketch n e) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall n e x. Rep (Sketch n e) x -> Sketch n e
forall n e x. Sketch n e -> Rep (Sketch n e) x
$cfrom :: forall n e x. Sketch n e -> Rep (Sketch n e) x
from :: forall x. Sketch n e -> Rep (Sketch n e) x
$cto :: forall n e x. Rep (Sketch n e) x -> Sketch n e
to :: forall x. Rep (Sketch n e) x -> Sketch n e
Generic, Sketch n e -> Sketch n e
(Sketch n e -> Sketch n e) -> Simplifiable (Sketch n e)
forall a. (a -> a) -> Simplifiable a
forall n e.
(Simplifiable n, Simplifiable e, Eq n, Eq e) =>
Sketch n e -> Sketch n e
$csimplify :: forall n e.
(Simplifiable n, Simplifiable e, Eq n, Eq e) =>
Sketch n e -> Sketch n e
simplify :: Sketch n e -> Sketch n e
Simplifiable, Int -> Int -> [Char] -> Sketch n e -> [Char]
Int -> Sketch n e -> [Char]
(Int -> Sketch n e -> [Char])
-> (Int -> Int -> [Char] -> Sketch n e -> [Char])
-> (Int -> Sketch n e -> [Char])
-> PrettyPrint (Sketch n e)
forall a.
(Int -> a -> [Char])
-> (Int -> Int -> [Char] -> a -> [Char])
-> (Int -> a -> [Char])
-> PrettyPrint a
forall n e.
(PrettyPrint n, PrettyPrint e, Eq n, Eq e) =>
Int -> Int -> [Char] -> Sketch n e -> [Char]
forall n e.
(PrettyPrint n, PrettyPrint e, Eq n, Eq e) =>
Int -> Sketch n e -> [Char]
$cpprint :: forall n e.
(PrettyPrint n, PrettyPrint e, Eq n, Eq e) =>
Int -> Sketch n e -> [Char]
pprint :: Int -> Sketch n e -> [Char]
$cpprintWithIndentations :: forall n e.
(PrettyPrint n, PrettyPrint e, Eq n, Eq e) =>
Int -> Int -> [Char] -> Sketch n e -> [Char]
pprintWithIndentations :: Int -> Int -> [Char] -> Sketch n e -> [Char]
$cpprintIndent :: forall n e.
(PrettyPrint n, PrettyPrint e, Eq n, Eq e) =>
Int -> Sketch n e -> [Char]
pprintIndent :: Int -> Sketch n e -> [Char]
PrettyPrint)
    
    -- | The support of a 'Sketch' is the multidigraph generating the underlying category of the 'Sketch'.
    supportSketch :: Sketch n e -> Graph n e
    supportSketch :: forall n e. Sketch n e -> Graph n e
supportSketch = CompositionGraph n e -> Graph n e
forall a b. CompositionGraph a b -> Graph a b
support(CompositionGraph n e -> Graph n e)
-> (Sketch n e -> CompositionGraph n e) -> Sketch n e -> Graph n e
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Sketch n e -> CompositionGraph n e
forall n e. Sketch n e -> CategorySketch n e
underlyingCategory
    
    -- | Unsafe constructor for a 'Sketch'. Use with caution, prefer 'sketch' which checks the structure of the 'Sketch.
    --
    --  Note that for each distinguished 'Tripod', the 2-cone of the 'Tripod' should belong to the distinguished 'cones'.
    unsafeSketch :: CategorySketch n e -> Set (ConeSketch n e) -> Set (CoconeSketch n e) -> Set (TripodSketch n e) -> Sketch n e
    unsafeSketch :: forall n e.
CategorySketch n e
-> Set (ConeSketch n e)
-> Set (CoconeSketch n e)
-> Set (TripodSketch n e)
-> Sketch n e
unsafeSketch CategorySketch n e
uc Set (ConeSketch n e)
c Set (CoconeSketch n e)
cc Set (TripodSketch n e)
t = Sketch{underlyingCategory :: CategorySketch n e
underlyingCategory = CategorySketch n e
uc, distinguishedCones :: Set (ConeSketch n e)
distinguishedCones = Set (ConeSketch n e)
c, distinguishedCocones :: Set (CoconeSketch n e)
distinguishedCocones = Set (CoconeSketch n e)
cc, distinguishedTripods :: Set (TripodSketch n e)
distinguishedTripods= Set (TripodSketch n e)
t }

    -- | A 'SketchError' could be a cone with a base outside the underlying category, a cocone with base outside the underlying category, a tripod with a base outside the underlying category, a tripod where the 2-cone does not belong to the distinguished cones of the sketch or an error in the underlying category.
    data SketchError n e = BaseOfConeIsNotInUnderlyingCategory (ConeSketch n e)
                     | BaseOfCoconeIsNotInUnderlyingCategory (CoconeSketch n e)
                     | BaseOfTripodIsNotInUnderlyingCategory (TripodSketch n e)
                     | TripodTwoConeDoesNotBelongToDistinguishedCones (TripodSketch n e)
                     | UnderlyingCategoryError (FiniteCategoryError (ArrowSketch n e) (ObjectSketch n e))
                     | TwoSameIndexingObjects n
        deriving (SketchError n e -> SketchError n e -> Bool
(SketchError n e -> SketchError n e -> Bool)
-> (SketchError n e -> SketchError n e -> Bool)
-> Eq (SketchError n e)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall n e.
(Eq e, Eq n) =>
SketchError n e -> SketchError n e -> Bool
$c== :: forall n e.
(Eq e, Eq n) =>
SketchError n e -> SketchError n e -> Bool
== :: SketchError n e -> SketchError n e -> Bool
$c/= :: forall n e.
(Eq e, Eq n) =>
SketchError n e -> SketchError n e -> Bool
/= :: SketchError n e -> SketchError n e -> Bool
Eq, Int -> SketchError n e -> ShowS
[SketchError n e] -> ShowS
SketchError n e -> [Char]
(Int -> SketchError n e -> ShowS)
-> (SketchError n e -> [Char])
-> ([SketchError n e] -> ShowS)
-> Show (SketchError n e)
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
forall n e. (Show e, Show n) => Int -> SketchError n e -> ShowS
forall n e. (Show e, Show n) => [SketchError n e] -> ShowS
forall n e. (Show e, Show n) => SketchError n e -> [Char]
$cshowsPrec :: forall n e. (Show e, Show n) => Int -> SketchError n e -> ShowS
showsPrec :: Int -> SketchError n e -> ShowS
$cshow :: forall n e. (Show e, Show n) => SketchError n e -> [Char]
show :: SketchError n e -> [Char]
$cshowList :: forall n e. (Show e, Show n) => [SketchError n e] -> ShowS
showList :: [SketchError n e] -> ShowS
Show, (forall x. SketchError n e -> Rep (SketchError n e) x)
-> (forall x. Rep (SketchError n e) x -> SketchError n e)
-> Generic (SketchError n e)
forall x. Rep (SketchError n e) x -> SketchError n e
forall x. SketchError n e -> Rep (SketchError n e) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall n e x. Rep (SketchError n e) x -> SketchError n e
forall n e x. SketchError n e -> Rep (SketchError n e) x
$cfrom :: forall n e x. SketchError n e -> Rep (SketchError n e) x
from :: forall x. SketchError n e -> Rep (SketchError n e) x
$cto :: forall n e x. Rep (SketchError n e) x -> SketchError n e
to :: forall x. Rep (SketchError n e) x -> SketchError n e
Generic, SketchError n e -> SketchError n e
(SketchError n e -> SketchError n e)
-> Simplifiable (SketchError n e)
forall a. (a -> a) -> Simplifiable a
forall n e.
(Simplifiable n, Simplifiable e, Eq e, Eq n) =>
SketchError n e -> SketchError n e
$csimplify :: forall n e.
(Simplifiable n, Simplifiable e, Eq e, Eq n) =>
SketchError n e -> SketchError n e
simplify :: SketchError n e -> SketchError n e
Simplifiable, Int -> Int -> [Char] -> SketchError n e -> [Char]
Int -> SketchError n e -> [Char]
(Int -> SketchError n e -> [Char])
-> (Int -> Int -> [Char] -> SketchError n e -> [Char])
-> (Int -> SketchError n e -> [Char])
-> PrettyPrint (SketchError n e)
forall a.
(Int -> a -> [Char])
-> (Int -> Int -> [Char] -> a -> [Char])
-> (Int -> a -> [Char])
-> PrettyPrint a
forall n e.
(PrettyPrint n, PrettyPrint e, Eq e, Eq n) =>
Int -> Int -> [Char] -> SketchError n e -> [Char]
forall n e.
(PrettyPrint n, PrettyPrint e, Eq e, Eq n) =>
Int -> SketchError n e -> [Char]
$cpprint :: forall n e.
(PrettyPrint n, PrettyPrint e, Eq e, Eq n) =>
Int -> SketchError n e -> [Char]
pprint :: Int -> SketchError n e -> [Char]
$cpprintWithIndentations :: forall n e.
(PrettyPrint n, PrettyPrint e, Eq e, Eq n) =>
Int -> Int -> [Char] -> SketchError n e -> [Char]
pprintWithIndentations :: Int -> Int -> [Char] -> SketchError n e -> [Char]
$cpprintIndent :: forall n e.
(PrettyPrint n, PrettyPrint e, Eq e, Eq n) =>
Int -> SketchError n e -> [Char]
pprintIndent :: Int -> SketchError n e -> [Char]
PrettyPrint)


    -- | Find the first occurence which evaluates to true.
    find :: (Eq a) => (a -> Bool) -> Set a -> Maybe a
    find :: forall a. Eq a => (a -> Bool) -> Set a -> Maybe a
find a -> Bool
p Set a
s = if Set a -> Bool
forall a. Set a -> Bool
Set.null Set a
filtered then Maybe a
forall a. Maybe a
Nothing else a -> Maybe a
forall a. a -> Maybe a
Just (Set a -> a
forall a. Set a -> a
anElement Set a
filtered)
        where
            filtered :: Set a
filtered = (a -> Bool) -> Set a -> Set a
forall a. (a -> Bool) -> Set a -> Set a
Set.filter a -> Bool
p Set a
s

    -- | Smart constructor for a finite 'Sketch'. Note that for each distinguished 'Tripod', the 2-cone of the 'Tripod' is added to the distinguished 'cones' of the sketch. The two first arguments are arbitrary distinct objects of type n which will be the indexing objects of the new 2-cones.
    sketch :: (Eq n, Eq e) => n -> n -> CategorySketch n e -> (Set (ConeSketch n e)) -> (Set (CoconeSketch n e)) -> (Set (TripodSketch n e)) -> Either (SketchError n e) (Sketch n e)
    sketch :: forall n e.
(Eq n, Eq e) =>
n
-> n
-> CategorySketch n e
-> Set (ConeSketch n e)
-> Set (CoconeSketch n e)
-> Set (TripodSketch n e)
-> Either (SketchError n e) (Sketch n e)
sketch n
a n
b CategorySketch n e
cat Set (ConeSketch n e)
c Set (CoconeSketch n e)
cc Set (TripodSketch n e)
t
        | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (FiniteCategoryError (CGMorphism n e) n) -> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Maybe (FiniteCategoryError (CGMorphism n e) n) -> Bool)
-> Maybe (FiniteCategoryError (CGMorphism n e) n) -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (FiniteCategoryError (CGMorphism n e) n)
errCat = SketchError n e -> Either (SketchError n e) (Sketch n e)
forall a b. a -> Either a b
Left (SketchError n e -> Either (SketchError n e) (Sketch n e))
-> SketchError n e -> Either (SketchError n e) (Sketch n e)
forall a b. (a -> b) -> a -> b
$ FiniteCategoryError (CGMorphism n e) n -> SketchError n e
forall n e.
FiniteCategoryError (ArrowSketch n e) n -> SketchError n e
UnderlyingCategoryError (FiniteCategoryError (CGMorphism n e) n -> SketchError n e)
-> FiniteCategoryError (CGMorphism n e) n -> SketchError n e
forall a b. (a -> b) -> a -> b
$ Maybe (FiniteCategoryError (CGMorphism n e) n)
-> FiniteCategoryError (CGMorphism n e) n
forall {a}. Maybe a -> a
fromJust Maybe (FiniteCategoryError (CGMorphism n e) n)
errCat
        | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (ConeSketch n e) -> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Maybe (ConeSketch n e) -> Bool) -> Maybe (ConeSketch n e) -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (ConeSketch n e)
faultyCone = SketchError n e -> Either (SketchError n e) (Sketch n e)
forall a b. a -> Either a b
Left (SketchError n e -> Either (SketchError n e) (Sketch n e))
-> SketchError n e -> Either (SketchError n e) (Sketch n e)
forall a b. (a -> b) -> a -> b
$ ConeSketch n e -> SketchError n e
forall n e. ConeSketch n e -> SketchError n e
BaseOfConeIsNotInUnderlyingCategory (Maybe (ConeSketch n e) -> ConeSketch n e
forall {a}. Maybe a -> a
fromJust Maybe (ConeSketch n e)
faultyCone) 
        | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (CoconeSketch n e) -> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Maybe (CoconeSketch n e) -> Bool)
-> Maybe (CoconeSketch n e) -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (CoconeSketch n e)
faultyCocone = SketchError n e -> Either (SketchError n e) (Sketch n e)
forall a b. a -> Either a b
Left (SketchError n e -> Either (SketchError n e) (Sketch n e))
-> SketchError n e -> Either (SketchError n e) (Sketch n e)
forall a b. (a -> b) -> a -> b
$ CoconeSketch n e -> SketchError n e
forall n e. CoconeSketch n e -> SketchError n e
BaseOfCoconeIsNotInUnderlyingCategory (Maybe (CoconeSketch n e) -> CoconeSketch n e
forall {a}. Maybe a -> a
fromJust Maybe (CoconeSketch n e)
faultyCocone)
        | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (TripodSketch n e) -> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Maybe (TripodSketch n e) -> Bool)
-> Maybe (TripodSketch n e) -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (TripodSketch n e)
faultyTripod = SketchError n e -> Either (SketchError n e) (Sketch n e)
forall a b. a -> Either a b
Left (SketchError n e -> Either (SketchError n e) (Sketch n e))
-> SketchError n e -> Either (SketchError n e) (Sketch n e)
forall a b. (a -> b) -> a -> b
$ TripodSketch n e -> SketchError n e
forall n e. TripodSketch n e -> SketchError n e
BaseOfTripodIsNotInUnderlyingCategory (Maybe (TripodSketch n e) -> TripodSketch n e
forall {a}. Maybe a -> a
fromJust Maybe (TripodSketch n e)
faultyTripod)
        | n
a n -> n -> Bool
forall a. Eq a => a -> a -> Bool
== n
b = SketchError n e -> Either (SketchError n e) (Sketch n e)
forall a b. a -> Either a b
Left (SketchError n e -> Either (SketchError n e) (Sketch n e))
-> SketchError n e -> Either (SketchError n e) (Sketch n e)
forall a b. (a -> b) -> a -> b
$ n -> SketchError n e
forall n e. n -> SketchError n e
TwoSameIndexingObjects n
a
        | Bool
otherwise = Sketch n e -> Either (SketchError n e) (Sketch n e)
forall a b. b -> Either a b
Right Sketch n e
s
        where   
            errCat :: Maybe (FiniteCategoryError (CGMorphism n e) n)
errCat = CategorySketch n e
-> Maybe (FiniteCategoryError (CGMorphism n e) n)
forall c m o.
(FiniteCategory c m o, Morphism m o, Eq m, Eq o) =>
c -> Maybe (FiniteCategoryError m o)
checkFiniteCategory CategorySketch n e
cat
            fromJust :: Maybe a -> a
fromJust (Just a
x) = a
x
            newCones :: Set (ConeSketch n e)
newCones = n -> n -> TripodSketch n e -> ConeSketch n e
forall n e.
(Eq n, Eq e) =>
n -> n -> TripodSketch n e -> ConeSketch n e
constructTwoConeFromTripod n
a n
b (TripodSketch n e -> ConeSketch n e)
-> Set (TripodSketch n e) -> Set (ConeSketch n e)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Set (TripodSketch n e)
t
            s :: Sketch n e
s = Sketch{underlyingCategory :: CategorySketch n e
underlyingCategory = CategorySketch n e
cat, distinguishedCones :: Set (ConeSketch n e)
distinguishedCones = Set (ConeSketch n e)
c Set (ConeSketch n e)
-> Set (ConeSketch n e) -> Set (ConeSketch n e)
forall a. Set a -> Set a -> Set a
||| Set (ConeSketch n e)
newCones, distinguishedCocones :: Set (CoconeSketch n e)
distinguishedCocones = Set (CoconeSketch n e)
cc, distinguishedTripods :: Set (TripodSketch n e)
distinguishedTripods = Set (TripodSketch n e)
t}
            faultyCone :: Maybe (ConeSketch n e)
faultyCone = (ConeSketch n e -> Bool)
-> Set (ConeSketch n e) -> Maybe (ConeSketch n e)
forall a. Eq a => (a -> Bool) -> Set a -> Maybe a
find (\ConeSketch n e
x -> ConeSketch n e -> CategorySketch n e
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Cone c1 m1 o1 c2 m2 o2 -> c2
universeCategoryCone ConeSketch n e
x CategorySketch n e -> CategorySketch n e -> Bool
forall a. Eq a => a -> a -> Bool
/= CategorySketch n e
cat) Set (ConeSketch n e)
c
            faultyCocone :: Maybe (CoconeSketch n e)
faultyCocone = (CoconeSketch n e -> Bool)
-> Set (CoconeSketch n e) -> Maybe (CoconeSketch n e)
forall a. Eq a => (a -> Bool) -> Set a -> Maybe a
find (\CoconeSketch n e
x -> CoconeSketch n e -> CategorySketch n e
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Cocone c1 m1 o1 c2 m2 o2 -> c2
universeCategoryCocone CoconeSketch n e
x CategorySketch n e -> CategorySketch n e -> Bool
forall a. Eq a => a -> a -> Bool
/= CategorySketch n e
cat) Set (CoconeSketch n e)
cc
            faultyTripod :: Maybe (TripodSketch n e)
faultyTripod = (TripodSketch n e -> Bool)
-> Set (TripodSketch n e) -> Maybe (TripodSketch n e)
forall a. Eq a => (a -> Bool) -> Set a -> Maybe a
find (\TripodSketch n e
x -> TripodSketch n e -> CategorySketch n e
forall c m o.
(Category c m o, Morphism m o, Eq c, Eq m, Eq o) =>
Tripod c m o -> c
universeCategoryTripod TripodSketch n e
x CategorySketch n e -> CategorySketch n e -> Bool
forall a. Eq a => a -> a -> Bool
/= CategorySketch n e
cat) Set (TripodSketch n e)
t
       
    -- | Specialized version of 'sketch' for sketches of 'Text'.
    sketchText :: CategorySketch Text Text -> (Set (ConeSketch Text Text)) -> (Set (CoconeSketch Text Text)) -> (Set (TripodSketch Text Text)) -> Either (SketchError Text Text) (Sketch Text Text)
    sketchText :: CategorySketch Text Text
-> Set (ConeSketch Text Text)
-> Set (CoconeSketch Text Text)
-> Set (TripodSketch Text Text)
-> Either (SketchError Text Text) (Sketch Text Text)
sketchText = Text
-> Text
-> CategorySketch Text Text
-> Set (ConeSketch Text Text)
-> Set (CoconeSketch Text Text)
-> Set (TripodSketch Text Text)
-> Either (SketchError Text Text) (Sketch Text Text)
forall n e.
(Eq n, Eq e) =>
n
-> n
-> CategorySketch n e
-> Set (ConeSketch n e)
-> Set (CoconeSketch n e)
-> Set (TripodSketch n e)
-> Either (SketchError n e) (Sketch n e)
sketch ([Char] -> Text
pack [Char]
"A") ([Char] -> Text
pack [Char]
"B")
       
    -- | Check wether a 'Sketch' is well formed or not, return a 'SketchError' if it is malformed, Nothing otherwise. Does not check the underlying 'CompositionGraph'.
    checkSketch :: (Eq n, Eq e) => Sketch n e -> Maybe (SketchError n e)
    checkSketch :: forall n e. (Eq n, Eq e) => Sketch n e -> Maybe (SketchError n e)
checkSketch Sketch{underlyingCategory :: forall n e. Sketch n e -> CategorySketch n e
underlyingCategory = CategorySketch n e
cat, distinguishedCones :: forall n e. Sketch n e -> Set (ConeSketch n e)
distinguishedCones = Set (ConeSketch n e)
c, distinguishedCocones :: forall n e. Sketch n e -> Set (CoconeSketch n e)
distinguishedCocones = Set (CoconeSketch n e)
cc, distinguishedTripods :: forall n e. Sketch n e -> Set (TripodSketch n e)
distinguishedTripods = Set (TripodSketch n e)
t}
        | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (ConeSketch n e) -> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Maybe (ConeSketch n e) -> Bool) -> Maybe (ConeSketch n e) -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (ConeSketch n e)
faultyCone = ConeSketch n e -> SketchError n e
forall n e. ConeSketch n e -> SketchError n e
BaseOfConeIsNotInUnderlyingCategory (ConeSketch n e -> SketchError n e)
-> Maybe (ConeSketch n e) -> Maybe (SketchError n e)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (ConeSketch n e)
faultyCone 
        | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (CoconeSketch n e) -> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Maybe (CoconeSketch n e) -> Bool)
-> Maybe (CoconeSketch n e) -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (CoconeSketch n e)
faultyCocone = CoconeSketch n e -> SketchError n e
forall n e. CoconeSketch n e -> SketchError n e
BaseOfCoconeIsNotInUnderlyingCategory (CoconeSketch n e -> SketchError n e)
-> Maybe (CoconeSketch n e) -> Maybe (SketchError n e)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (CoconeSketch n e)
faultyCocone
        | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (TripodSketch n e) -> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Maybe (TripodSketch n e) -> Bool)
-> Maybe (TripodSketch n e) -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (TripodSketch n e)
faultyTripod = TripodSketch n e -> SketchError n e
forall n e. TripodSketch n e -> SketchError n e
BaseOfTripodIsNotInUnderlyingCategory (TripodSketch n e -> SketchError n e)
-> Maybe (TripodSketch n e) -> Maybe (SketchError n e)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (TripodSketch n e)
faultyTripod
        | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (TripodSketch n e) -> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Maybe (TripodSketch n e) -> Bool)
-> Maybe (TripodSketch n e) -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (TripodSketch n e)
faultyTripod2 = TripodSketch n e -> SketchError n e
forall n e. TripodSketch n e -> SketchError n e
TripodTwoConeDoesNotBelongToDistinguishedCones (TripodSketch n e -> SketchError n e)
-> Maybe (TripodSketch n e) -> Maybe (SketchError n e)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (TripodSketch n e)
faultyTripod2
        | Bool
otherwise = Maybe (SketchError n e)
forall a. Maybe a
Nothing
        where
            faultyCone :: Maybe (ConeSketch n e)
faultyCone = (ConeSketch n e -> Bool)
-> Set (ConeSketch n e) -> Maybe (ConeSketch n e)
forall a. Eq a => (a -> Bool) -> Set a -> Maybe a
find (\ConeSketch n e
x -> ConeSketch n e -> CategorySketch n e
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Cone c1 m1 o1 c2 m2 o2 -> c2
universeCategoryCone ConeSketch n e
x CategorySketch n e -> CategorySketch n e -> Bool
forall a. Eq a => a -> a -> Bool
/= CategorySketch n e
cat) Set (ConeSketch n e)
c
            faultyCocone :: Maybe (CoconeSketch n e)
faultyCocone = (CoconeSketch n e -> Bool)
-> Set (CoconeSketch n e) -> Maybe (CoconeSketch n e)
forall a. Eq a => (a -> Bool) -> Set a -> Maybe a
find (\CoconeSketch n e
x -> CoconeSketch n e -> CategorySketch n e
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Cocone c1 m1 o1 c2 m2 o2 -> c2
universeCategoryCocone CoconeSketch n e
x CategorySketch n e -> CategorySketch n e -> Bool
forall a. Eq a => a -> a -> Bool
/= CategorySketch n e
cat) Set (CoconeSketch n e)
cc
            faultyTripod :: Maybe (TripodSketch n e)
faultyTripod = (TripodSketch n e -> Bool)
-> Set (TripodSketch n e) -> Maybe (TripodSketch n e)
forall a. Eq a => (a -> Bool) -> Set a -> Maybe a
find (\TripodSketch n e
x -> TripodSketch n e -> CategorySketch n e
forall c m o.
(Category c m o, Morphism m o, Eq c, Eq m, Eq o) =>
Tripod c m o -> c
universeCategoryTripod TripodSketch n e
x CategorySketch n e -> CategorySketch n e -> Bool
forall a. Eq a => a -> a -> Bool
/= CategorySketch n e
cat) Set (TripodSketch n e)
t
            faultyTripod2 :: Maybe (TripodSketch n e)
faultyTripod2 = (TripodSketch n e -> Bool)
-> Set (TripodSketch n e) -> Maybe (TripodSketch n e)
forall a. Eq a => (a -> Bool) -> Set a -> Maybe a
find (\TripodSketch n e
x -> Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Set Bool -> Bool
Set.or [ConeSketch n e -> n
forall c1 m1 o1 c2 m2 o2. Cone c1 m1 o1 c2 m2 o2 -> o2
apex ConeSketch n e
cone n -> n -> Bool
forall a. Eq a => a -> a -> Bool
== (Cone
  DiscreteTwo
  DiscreteTwoAr
  DiscreteTwoAr
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> n
forall c1 m1 o1 c2 m2 o2. Cone c1 m1 o1 c2 m2 o2 -> o2
apex (Cone
   DiscreteTwo
   DiscreteTwoAr
   DiscreteTwoAr
   (CategorySketch n e)
   (ArrowSketch n e)
   n
 -> n)
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> n
forall a b. (a -> b) -> a -> b
$ TripodSketch n e
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c m o.
Tripod c m o -> Cone DiscreteTwo DiscreteTwoAr DiscreteTwoAr c m o
twoCone TripodSketch n e
x) Bool -> Bool -> Bool
&& (Set n -> Int
forall a. Eq a => Set a -> Int
cardinal (Set n -> Int) -> Set n -> Int
forall a b. (a -> b) -> a -> b
$ CategorySketch n e -> Set n
forall c m o. FiniteCategory c m o => c -> Set o
ob (CategorySketch n e -> Set n) -> CategorySketch n e -> Set n
forall a b. (a -> b) -> a -> b
$ ConeSketch n e -> CategorySketch n e
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Cone c1 m1 o1 c2 m2 o2 -> c1
indexingCategoryCone ConeSketch n e
cone) Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
2 Bool -> Bool -> Bool
&& (Set (ArrowSketch n e) -> Int
forall a. Eq a => Set a -> Int
cardinal (Set (ArrowSketch n e) -> Int) -> Set (ArrowSketch n e) -> Int
forall a b. (a -> b) -> a -> b
$ CategorySketch n e -> Set (ArrowSketch n e)
forall c m o. (FiniteCategory c m o, Morphism m o) => c -> Set m
arrows (CategorySketch n e -> Set (ArrowSketch n e))
-> CategorySketch n e -> Set (ArrowSketch n e)
forall a b. (a -> b) -> a -> b
$ ConeSketch n e -> CategorySketch n e
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Cone c1 m1 o1 c2 m2 o2 -> c1
indexingCategoryCone ConeSketch n e
cone) Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
2 Bool -> Bool -> Bool
&& (ArrowSketch n e -> n
forall m o. Morphism m o => m -> o
target (ArrowSketch n e -> n) -> Set (ArrowSketch n e) -> Set n
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Map n (ArrowSketch n e) -> Set (ArrowSketch n e)
forall k a. Eq k => Map k a -> Set a
Map.values (NaturalTransformation
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Map n (ArrowSketch n e)
forall c1 m1 o1 c2 m2 o2.
NaturalTransformation c1 m1 o1 c2 m2 o2 -> Map o1 m2
components (NaturalTransformation
   (CategorySketch n e)
   (ArrowSketch n e)
   n
   (CategorySketch n e)
   (ArrowSketch n e)
   n
 -> Map n (ArrowSketch n e))
-> NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> Map n (ArrowSketch n e)
forall a b. (a -> b) -> a -> b
$ ConeSketch n e
-> NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2.
Cone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCone ConeSketch n e
cone)) Set n -> Set n -> Bool
forall a. Eq a => a -> a -> Bool
== [n] -> Set n
forall a. [a] -> Set a
set [TripodSketch n e -> n
forall m o c. Morphism m o => Tripod c m o -> o
powerObject TripodSketch n e
x, TripodSketch n e -> n
forall m o c. Morphism m o => Tripod c m o -> o
internalDomain TripodSketch n e
x] | ConeSketch n e
cone <- Set (ConeSketch n e)
c]) Set (TripodSketch n e)
t
       
    -- | Check wether a finite 'Sketch' is well formed or not, return a 'SketchError' if it is malformed, Nothing otherwise.
    checkFiniteSketch :: (Eq n, Eq e) => Sketch n e -> Maybe (SketchError n e)
    checkFiniteSketch :: forall n e. (Eq n, Eq e) => Sketch n e -> Maybe (SketchError n e)
checkFiniteSketch Sketch{underlyingCategory :: forall n e. Sketch n e -> CategorySketch n e
underlyingCategory = CategorySketch n e
cat, distinguishedCones :: forall n e. Sketch n e -> Set (ConeSketch n e)
distinguishedCones = Set (ConeSketch n e)
c, distinguishedCocones :: forall n e. Sketch n e -> Set (CoconeSketch n e)
distinguishedCocones = Set (CoconeSketch n e)
cc, distinguishedTripods :: forall n e. Sketch n e -> Set (TripodSketch n e)
distinguishedTripods = Set (TripodSketch n e)
t}
        | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (FiniteCategoryError (CGMorphism n e) n) -> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Maybe (FiniteCategoryError (CGMorphism n e) n) -> Bool)
-> Maybe (FiniteCategoryError (CGMorphism n e) n) -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (FiniteCategoryError (CGMorphism n e) n)
errCat = FiniteCategoryError (CGMorphism n e) n -> SketchError n e
forall n e.
FiniteCategoryError (ArrowSketch n e) n -> SketchError n e
UnderlyingCategoryError (FiniteCategoryError (CGMorphism n e) n -> SketchError n e)
-> Maybe (FiniteCategoryError (CGMorphism n e) n)
-> Maybe (SketchError n e)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (FiniteCategoryError (CGMorphism n e) n)
errCat
        | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (ConeSketch n e) -> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Maybe (ConeSketch n e) -> Bool) -> Maybe (ConeSketch n e) -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (ConeSketch n e)
faultyCone = ConeSketch n e -> SketchError n e
forall n e. ConeSketch n e -> SketchError n e
BaseOfConeIsNotInUnderlyingCategory (ConeSketch n e -> SketchError n e)
-> Maybe (ConeSketch n e) -> Maybe (SketchError n e)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (ConeSketch n e)
faultyCone 
        | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (CoconeSketch n e) -> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Maybe (CoconeSketch n e) -> Bool)
-> Maybe (CoconeSketch n e) -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (CoconeSketch n e)
faultyCocone = CoconeSketch n e -> SketchError n e
forall n e. CoconeSketch n e -> SketchError n e
BaseOfCoconeIsNotInUnderlyingCategory (CoconeSketch n e -> SketchError n e)
-> Maybe (CoconeSketch n e) -> Maybe (SketchError n e)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (CoconeSketch n e)
faultyCocone
        | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (TripodSketch n e) -> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Maybe (TripodSketch n e) -> Bool)
-> Maybe (TripodSketch n e) -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (TripodSketch n e)
faultyTripod = TripodSketch n e -> SketchError n e
forall n e. TripodSketch n e -> SketchError n e
BaseOfTripodIsNotInUnderlyingCategory (TripodSketch n e -> SketchError n e)
-> Maybe (TripodSketch n e) -> Maybe (SketchError n e)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (TripodSketch n e)
faultyTripod
        | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (TripodSketch n e) -> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Maybe (TripodSketch n e) -> Bool)
-> Maybe (TripodSketch n e) -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (TripodSketch n e)
faultyTripod2 = TripodSketch n e -> SketchError n e
forall n e. TripodSketch n e -> SketchError n e
TripodTwoConeDoesNotBelongToDistinguishedCones (TripodSketch n e -> SketchError n e)
-> Maybe (TripodSketch n e) -> Maybe (SketchError n e)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (TripodSketch n e)
faultyTripod2
        | Bool
otherwise = Maybe (SketchError n e)
forall a. Maybe a
Nothing
        where
            errCat :: Maybe (FiniteCategoryError (CGMorphism n e) n)
errCat = CategorySketch n e
-> Maybe (FiniteCategoryError (CGMorphism n e) n)
forall c m o.
(FiniteCategory c m o, Morphism m o, Eq m, Eq o) =>
c -> Maybe (FiniteCategoryError m o)
checkFiniteCategory CategorySketch n e
cat
            faultyCone :: Maybe (ConeSketch n e)
faultyCone = (ConeSketch n e -> Bool)
-> Set (ConeSketch n e) -> Maybe (ConeSketch n e)
forall a. Eq a => (a -> Bool) -> Set a -> Maybe a
find (\ConeSketch n e
x -> ConeSketch n e -> CategorySketch n e
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Cone c1 m1 o1 c2 m2 o2 -> c2
universeCategoryCone ConeSketch n e
x CategorySketch n e -> CategorySketch n e -> Bool
forall a. Eq a => a -> a -> Bool
/= CategorySketch n e
cat) Set (ConeSketch n e)
c
            faultyCocone :: Maybe (CoconeSketch n e)
faultyCocone = (CoconeSketch n e -> Bool)
-> Set (CoconeSketch n e) -> Maybe (CoconeSketch n e)
forall a. Eq a => (a -> Bool) -> Set a -> Maybe a
find (\CoconeSketch n e
x -> CoconeSketch n e -> CategorySketch n e
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Cocone c1 m1 o1 c2 m2 o2 -> c2
universeCategoryCocone CoconeSketch n e
x CategorySketch n e -> CategorySketch n e -> Bool
forall a. Eq a => a -> a -> Bool
/= CategorySketch n e
cat) Set (CoconeSketch n e)
cc
            faultyTripod :: Maybe (TripodSketch n e)
faultyTripod = (TripodSketch n e -> Bool)
-> Set (TripodSketch n e) -> Maybe (TripodSketch n e)
forall a. Eq a => (a -> Bool) -> Set a -> Maybe a
find (\TripodSketch n e
x -> TripodSketch n e -> CategorySketch n e
forall c m o.
(Category c m o, Morphism m o, Eq c, Eq m, Eq o) =>
Tripod c m o -> c
universeCategoryTripod TripodSketch n e
x CategorySketch n e -> CategorySketch n e -> Bool
forall a. Eq a => a -> a -> Bool
/= CategorySketch n e
cat) Set (TripodSketch n e)
t
            faultyTripod2 :: Maybe (TripodSketch n e)
faultyTripod2 = (TripodSketch n e -> Bool)
-> Set (TripodSketch n e) -> Maybe (TripodSketch n e)
forall a. Eq a => (a -> Bool) -> Set a -> Maybe a
find (\TripodSketch n e
x -> Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Set Bool -> Bool
Set.or [ConeSketch n e -> n
forall c1 m1 o1 c2 m2 o2. Cone c1 m1 o1 c2 m2 o2 -> o2
apex ConeSketch n e
cone n -> n -> Bool
forall a. Eq a => a -> a -> Bool
== (Cone
  DiscreteTwo
  DiscreteTwoAr
  DiscreteTwoAr
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> n
forall c1 m1 o1 c2 m2 o2. Cone c1 m1 o1 c2 m2 o2 -> o2
apex (Cone
   DiscreteTwo
   DiscreteTwoAr
   DiscreteTwoAr
   (CategorySketch n e)
   (CGMorphism n e)
   n
 -> n)
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (CGMorphism n e)
     n
-> n
forall a b. (a -> b) -> a -> b
$ TripodSketch n e
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (CGMorphism n e)
     n
forall c m o.
Tripod c m o -> Cone DiscreteTwo DiscreteTwoAr DiscreteTwoAr c m o
twoCone TripodSketch n e
x) Bool -> Bool -> Bool
&& (Set n -> Int
forall a. Eq a => Set a -> Int
cardinal (Set n -> Int) -> Set n -> Int
forall a b. (a -> b) -> a -> b
$ CategorySketch n e -> Set n
forall c m o. FiniteCategory c m o => c -> Set o
ob (CategorySketch n e -> Set n) -> CategorySketch n e -> Set n
forall a b. (a -> b) -> a -> b
$ ConeSketch n e -> CategorySketch n e
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Cone c1 m1 o1 c2 m2 o2 -> c1
indexingCategoryCone ConeSketch n e
cone) Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
2 Bool -> Bool -> Bool
&& (Set (CGMorphism n e) -> Int
forall a. Eq a => Set a -> Int
cardinal (Set (CGMorphism n e) -> Int) -> Set (CGMorphism n e) -> Int
forall a b. (a -> b) -> a -> b
$ CategorySketch n e -> Set (CGMorphism n e)
forall c m o. (FiniteCategory c m o, Morphism m o) => c -> Set m
arrows (CategorySketch n e -> Set (CGMorphism n e))
-> CategorySketch n e -> Set (CGMorphism n e)
forall a b. (a -> b) -> a -> b
$ ConeSketch n e -> CategorySketch n e
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Cone c1 m1 o1 c2 m2 o2 -> c1
indexingCategoryCone ConeSketch n e
cone) Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
2 Bool -> Bool -> Bool
&& (CGMorphism n e -> n
forall m o. Morphism m o => m -> o
target (CGMorphism n e -> n) -> Set (CGMorphism n e) -> Set n
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Map n (CGMorphism n e) -> Set (CGMorphism n e)
forall k a. Eq k => Map k a -> Set a
Map.values (NaturalTransformation
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> Map n (CGMorphism n e)
forall c1 m1 o1 c2 m2 o2.
NaturalTransformation c1 m1 o1 c2 m2 o2 -> Map o1 m2
components (NaturalTransformation
   (CategorySketch n e)
   (CGMorphism n e)
   n
   (CategorySketch n e)
   (CGMorphism n e)
   n
 -> Map n (CGMorphism n e))
-> NaturalTransformation
     (CategorySketch n e)
     (CGMorphism n e)
     n
     (CategorySketch n e)
     (CGMorphism n e)
     n
-> Map n (CGMorphism n e)
forall a b. (a -> b) -> a -> b
$ ConeSketch n e
-> NaturalTransformation
     (CategorySketch n e)
     (CGMorphism n e)
     n
     (CategorySketch n e)
     (CGMorphism n e)
     n
forall c1 m1 o1 c2 m2 o2.
Cone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCone ConeSketch n e
cone)) Set n -> Set n -> Bool
forall a. Eq a => a -> a -> Bool
== [n] -> Set n
forall a. [a] -> Set a
set [TripodSketch n e -> n
forall m o c. Morphism m o => Tripod c m o -> o
powerObject TripodSketch n e
x, TripodSketch n e -> n
forall m o c. Morphism m o => Tripod c m o -> o
internalDomain TripodSketch n e
x] | ConeSketch n e
cone <- Set (ConeSketch n e)
c]) Set (TripodSketch n e)
t
            

    -- | SketchMorphism is private, use the smart constructor 'sketchMorphism' or 'unsafeSketchMorphism' to construct one.
    data SketchMorphism n e = SketchMorphism {
                                forall n e. SketchMorphism n e -> FunctorSketch n e
underlyingFunctor :: FunctorSketch n e, -- ^ Underlying functor of a 'SketchMorphism'.
                                forall n e. SketchMorphism n e -> Sketch n e
sourceSketch :: Sketch n e, -- ^ The source of a 'SketchMorphism'. We have to store this to implement the source function of the 'Morphism' typeclass. This getter is not exported as you can get the source of the 'SketchMorphism' using the 'source' function.
                                forall n e. SketchMorphism n e -> Sketch n e
targetSketch :: Sketch n e -- ^ The target of a 'SketchMorphism'. See 'sourceSketch'.
                            } deriving (SketchMorphism n e -> SketchMorphism n e -> Bool
(SketchMorphism n e -> SketchMorphism n e -> Bool)
-> (SketchMorphism n e -> SketchMorphism n e -> Bool)
-> Eq (SketchMorphism n e)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall n e.
(Eq e, Eq n) =>
SketchMorphism n e -> SketchMorphism n e -> Bool
$c== :: forall n e.
(Eq e, Eq n) =>
SketchMorphism n e -> SketchMorphism n e -> Bool
== :: SketchMorphism n e -> SketchMorphism n e -> Bool
$c/= :: forall n e.
(Eq e, Eq n) =>
SketchMorphism n e -> SketchMorphism n e -> Bool
/= :: SketchMorphism n e -> SketchMorphism n e -> Bool
Eq, Int -> SketchMorphism n e -> ShowS
[SketchMorphism n e] -> ShowS
SketchMorphism n e -> [Char]
(Int -> SketchMorphism n e -> ShowS)
-> (SketchMorphism n e -> [Char])
-> ([SketchMorphism n e] -> ShowS)
-> Show (SketchMorphism n e)
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
forall n e. (Show e, Show n) => Int -> SketchMorphism n e -> ShowS
forall n e. (Show e, Show n) => [SketchMorphism n e] -> ShowS
forall n e. (Show e, Show n) => SketchMorphism n e -> [Char]
$cshowsPrec :: forall n e. (Show e, Show n) => Int -> SketchMorphism n e -> ShowS
showsPrec :: Int -> SketchMorphism n e -> ShowS
$cshow :: forall n e. (Show e, Show n) => SketchMorphism n e -> [Char]
show :: SketchMorphism n e -> [Char]
$cshowList :: forall n e. (Show e, Show n) => [SketchMorphism n e] -> ShowS
showList :: [SketchMorphism n e] -> ShowS
Show, (forall x. SketchMorphism n e -> Rep (SketchMorphism n e) x)
-> (forall x. Rep (SketchMorphism n e) x -> SketchMorphism n e)
-> Generic (SketchMorphism n e)
forall x. Rep (SketchMorphism n e) x -> SketchMorphism n e
forall x. SketchMorphism n e -> Rep (SketchMorphism n e) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall n e x. Rep (SketchMorphism n e) x -> SketchMorphism n e
forall n e x. SketchMorphism n e -> Rep (SketchMorphism n e) x
$cfrom :: forall n e x. SketchMorphism n e -> Rep (SketchMorphism n e) x
from :: forall x. SketchMorphism n e -> Rep (SketchMorphism n e) x
$cto :: forall n e x. Rep (SketchMorphism n e) x -> SketchMorphism n e
to :: forall x. Rep (SketchMorphism n e) x -> SketchMorphism n e
Generic, SketchMorphism n e -> SketchMorphism n e
(SketchMorphism n e -> SketchMorphism n e)
-> Simplifiable (SketchMorphism n e)
forall a. (a -> a) -> Simplifiable a
forall n e.
(Simplifiable e, Simplifiable n, Eq e, Eq n) =>
SketchMorphism n e -> SketchMorphism n e
$csimplify :: forall n e.
(Simplifiable e, Simplifiable n, Eq e, Eq n) =>
SketchMorphism n e -> SketchMorphism n e
simplify :: SketchMorphism n e -> SketchMorphism n e
Simplifiable, Int -> Int -> [Char] -> SketchMorphism n e -> [Char]
Int -> SketchMorphism n e -> [Char]
(Int -> SketchMorphism n e -> [Char])
-> (Int -> Int -> [Char] -> SketchMorphism n e -> [Char])
-> (Int -> SketchMorphism n e -> [Char])
-> PrettyPrint (SketchMorphism n e)
forall a.
(Int -> a -> [Char])
-> (Int -> Int -> [Char] -> a -> [Char])
-> (Int -> a -> [Char])
-> PrettyPrint a
forall n e.
(PrettyPrint e, PrettyPrint n, Eq e, Eq n) =>
Int -> Int -> [Char] -> SketchMorphism n e -> [Char]
forall n e.
(PrettyPrint e, PrettyPrint n, Eq e, Eq n) =>
Int -> SketchMorphism n e -> [Char]
$cpprint :: forall n e.
(PrettyPrint e, PrettyPrint n, Eq e, Eq n) =>
Int -> SketchMorphism n e -> [Char]
pprint :: Int -> SketchMorphism n e -> [Char]
$cpprintWithIndentations :: forall n e.
(PrettyPrint e, PrettyPrint n, Eq e, Eq n) =>
Int -> Int -> [Char] -> SketchMorphism n e -> [Char]
pprintWithIndentations :: Int -> Int -> [Char] -> SketchMorphism n e -> [Char]
$cpprintIndent :: forall n e.
(PrettyPrint e, PrettyPrint n, Eq e, Eq n) =>
Int -> SketchMorphism n e -> [Char]
pprintIndent :: Int -> SketchMorphism n e -> [Char]
PrettyPrint)
    
    -- | A 'SketchError' could be a cone not sent to a cone, a cocone not sent to a cocone or an error in the underlying functor.
    data SketchMorphismError n e = ConeNotSentToACone (ConeSketch n e)
                                 | CoconeNotSentToACocone (CoconeSketch n e)
                                 | TripodNotSentToATripod (TripodSketch n e)
                                 | UnderlyingFunctorError (DiagramError (CategorySketch n e) (ArrowSketch n e) (ObjectSketch n e) (CategorySketch n e) (ArrowSketch n e) (ObjectSketch n e))
                                 | WrongSource (CategorySketch n e) (CategorySketch n e)
                                 | WrongTarget (CategorySketch n e) (CategorySketch n e)
                                 deriving (SketchMorphismError n e -> SketchMorphismError n e -> Bool
(SketchMorphismError n e -> SketchMorphismError n e -> Bool)
-> (SketchMorphismError n e -> SketchMorphismError n e -> Bool)
-> Eq (SketchMorphismError n e)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall n e.
(Eq n, Eq e) =>
SketchMorphismError n e -> SketchMorphismError n e -> Bool
$c== :: forall n e.
(Eq n, Eq e) =>
SketchMorphismError n e -> SketchMorphismError n e -> Bool
== :: SketchMorphismError n e -> SketchMorphismError n e -> Bool
$c/= :: forall n e.
(Eq n, Eq e) =>
SketchMorphismError n e -> SketchMorphismError n e -> Bool
/= :: SketchMorphismError n e -> SketchMorphismError n e -> Bool
Eq, Int -> SketchMorphismError n e -> ShowS
[SketchMorphismError n e] -> ShowS
SketchMorphismError n e -> [Char]
(Int -> SketchMorphismError n e -> ShowS)
-> (SketchMorphismError n e -> [Char])
-> ([SketchMorphismError n e] -> ShowS)
-> Show (SketchMorphismError n e)
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
forall n e.
(Show n, Show e) =>
Int -> SketchMorphismError n e -> ShowS
forall n e. (Show n, Show e) => [SketchMorphismError n e] -> ShowS
forall n e. (Show n, Show e) => SketchMorphismError n e -> [Char]
$cshowsPrec :: forall n e.
(Show n, Show e) =>
Int -> SketchMorphismError n e -> ShowS
showsPrec :: Int -> SketchMorphismError n e -> ShowS
$cshow :: forall n e. (Show n, Show e) => SketchMorphismError n e -> [Char]
show :: SketchMorphismError n e -> [Char]
$cshowList :: forall n e. (Show n, Show e) => [SketchMorphismError n e] -> ShowS
showList :: [SketchMorphismError n e] -> ShowS
Show, (forall x.
 SketchMorphismError n e -> Rep (SketchMorphismError n e) x)
-> (forall x.
    Rep (SketchMorphismError n e) x -> SketchMorphismError n e)
-> Generic (SketchMorphismError n e)
forall x.
Rep (SketchMorphismError n e) x -> SketchMorphismError n e
forall x.
SketchMorphismError n e -> Rep (SketchMorphismError n e) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall n e x.
Rep (SketchMorphismError n e) x -> SketchMorphismError n e
forall n e x.
SketchMorphismError n e -> Rep (SketchMorphismError n e) x
$cfrom :: forall n e x.
SketchMorphismError n e -> Rep (SketchMorphismError n e) x
from :: forall x.
SketchMorphismError n e -> Rep (SketchMorphismError n e) x
$cto :: forall n e x.
Rep (SketchMorphismError n e) x -> SketchMorphismError n e
to :: forall x.
Rep (SketchMorphismError n e) x -> SketchMorphismError n e
Generic, SketchMorphismError n e -> SketchMorphismError n e
(SketchMorphismError n e -> SketchMorphismError n e)
-> Simplifiable (SketchMorphismError n e)
forall a. (a -> a) -> Simplifiable a
forall n e.
(Simplifiable n, Simplifiable e, Eq e, Eq n) =>
SketchMorphismError n e -> SketchMorphismError n e
$csimplify :: forall n e.
(Simplifiable n, Simplifiable e, Eq e, Eq n) =>
SketchMorphismError n e -> SketchMorphismError n e
simplify :: SketchMorphismError n e -> SketchMorphismError n e
Simplifiable, Int -> Int -> [Char] -> SketchMorphismError n e -> [Char]
Int -> SketchMorphismError n e -> [Char]
(Int -> SketchMorphismError n e -> [Char])
-> (Int -> Int -> [Char] -> SketchMorphismError n e -> [Char])
-> (Int -> SketchMorphismError n e -> [Char])
-> PrettyPrint (SketchMorphismError n e)
forall a.
(Int -> a -> [Char])
-> (Int -> Int -> [Char] -> a -> [Char])
-> (Int -> a -> [Char])
-> PrettyPrint a
forall n e.
(PrettyPrint n, PrettyPrint e, Eq e, Eq n) =>
Int -> Int -> [Char] -> SketchMorphismError n e -> [Char]
forall n e.
(PrettyPrint n, PrettyPrint e, Eq e, Eq n) =>
Int -> SketchMorphismError n e -> [Char]
$cpprint :: forall n e.
(PrettyPrint n, PrettyPrint e, Eq e, Eq n) =>
Int -> SketchMorphismError n e -> [Char]
pprint :: Int -> SketchMorphismError n e -> [Char]
$cpprintWithIndentations :: forall n e.
(PrettyPrint n, PrettyPrint e, Eq e, Eq n) =>
Int -> Int -> [Char] -> SketchMorphismError n e -> [Char]
pprintWithIndentations :: Int -> Int -> [Char] -> SketchMorphismError n e -> [Char]
$cpprintIndent :: forall n e.
(PrettyPrint n, PrettyPrint e, Eq e, Eq n) =>
Int -> SketchMorphismError n e -> [Char]
pprintIndent :: Int -> SketchMorphismError n e -> [Char]
PrettyPrint)
    
    -- | Unsafe constructor for a 'SketchMorphism'. Use with caution, prefer 'sketch' which checks the structure of the 'SketchMorphism'.
    unsafeSketchMorphism :: Sketch n e -> Sketch n e -> FunctorSketch n e -> SketchMorphism n e
    unsafeSketchMorphism :: forall n e.
Sketch n e -> Sketch n e -> FunctorSketch n e -> SketchMorphism n e
unsafeSketchMorphism Sketch n e
s Sketch n e
t FunctorSketch n e
f = SketchMorphism{underlyingFunctor :: FunctorSketch n e
underlyingFunctor = FunctorSketch n e
f, sourceSketch :: Sketch n e
sourceSketch = Sketch n e
s, targetSketch :: Sketch n e
targetSketch = Sketch n e
t}
    
    -- | Smart constructor for a 'SketchMorphism'. It checks wether cones are sent to cones and cocones are sent to cocones.
    sketchMorphism :: (Eq n, Eq e) => Sketch n e -> Sketch n e -> FunctorSketch n e -> Either (SketchMorphismError n e) (SketchMorphism n e)
    sketchMorphism :: forall n e.
(Eq n, Eq e) =>
Sketch n e
-> Sketch n e
-> FunctorSketch n e
-> Either (SketchMorphismError n e) (SketchMorphism n e)
sketchMorphism Sketch n e
s Sketch n e
t FunctorSketch n e
f
        | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe
  (DiagramError
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
-> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null Maybe
  (DiagramError
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
errFunct = SketchMorphismError n e
-> Either (SketchMorphismError n e) (SketchMorphism n e)
forall a b. a -> Either a b
Left (SketchMorphismError n e
 -> Either (SketchMorphismError n e) (SketchMorphism n e))
-> SketchMorphismError n e
-> Either (SketchMorphismError n e) (SketchMorphism n e)
forall a b. (a -> b) -> a -> b
$ DiagramError
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> SketchMorphismError n e
forall n e.
DiagramError
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> SketchMorphismError n e
UnderlyingFunctorError (DiagramError
   (CategorySketch n e)
   (ArrowSketch n e)
   n
   (CategorySketch n e)
   (ArrowSketch n e)
   n
 -> SketchMorphismError n e)
-> DiagramError
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> SketchMorphismError n e
forall a b. (a -> b) -> a -> b
$ Maybe
  (DiagramError
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
-> DiagramError
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall {a}. Maybe a -> a
fromJust (Maybe
   (DiagramError
      (CategorySketch n e)
      (ArrowSketch n e)
      n
      (CategorySketch n e)
      (ArrowSketch n e)
      n)
 -> DiagramError
      (CategorySketch n e)
      (ArrowSketch n e)
      n
      (CategorySketch n e)
      (ArrowSketch n e)
      n)
-> Maybe
     (DiagramError
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
-> DiagramError
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall a b. (a -> b) -> a -> b
$ Maybe
  (DiagramError
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
errFunct
        | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe
  (Cone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
-> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null Maybe
  (Cone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
faultyCone = SketchMorphismError n e
-> Either (SketchMorphismError n e) (SketchMorphism n e)
forall a b. a -> Either a b
Left (SketchMorphismError n e
 -> Either (SketchMorphismError n e) (SketchMorphism n e))
-> SketchMorphismError n e
-> Either (SketchMorphismError n e) (SketchMorphism n e)
forall a b. (a -> b) -> a -> b
$ Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> SketchMorphismError n e
forall n e. ConeSketch n e -> SketchMorphismError n e
ConeNotSentToACone (Maybe
  (Cone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
-> Cone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall {a}. Maybe a -> a
fromJust Maybe
  (Cone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
faultyCone) 
        | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe
  (Cocone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
-> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null Maybe
  (Cocone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
faultyCocone = SketchMorphismError n e
-> Either (SketchMorphismError n e) (SketchMorphism n e)
forall a b. a -> Either a b
Left (SketchMorphismError n e
 -> Either (SketchMorphismError n e) (SketchMorphism n e))
-> SketchMorphismError n e
-> Either (SketchMorphismError n e) (SketchMorphism n e)
forall a b. (a -> b) -> a -> b
$ Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> SketchMorphismError n e
forall n e. CoconeSketch n e -> SketchMorphismError n e
CoconeNotSentToACocone (Maybe
  (Cocone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
-> Cocone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall {a}. Maybe a -> a
fromJust Maybe
  (Cocone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
faultyCocone)
        | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (Tripod (CategorySketch n e) (ArrowSketch n e) n) -> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null Maybe (Tripod (CategorySketch n e) (ArrowSketch n e) n)
faultyTripod = SketchMorphismError n e
-> Either (SketchMorphismError n e) (SketchMorphism n e)
forall a b. a -> Either a b
Left (SketchMorphismError n e
 -> Either (SketchMorphismError n e) (SketchMorphism n e))
-> SketchMorphismError n e
-> Either (SketchMorphismError n e) (SketchMorphism n e)
forall a b. (a -> b) -> a -> b
$ Tripod (CategorySketch n e) (ArrowSketch n e) n
-> SketchMorphismError n e
forall n e. TripodSketch n e -> SketchMorphismError n e
TripodNotSentToATripod (Maybe (Tripod (CategorySketch n e) (ArrowSketch n e) n)
-> Tripod (CategorySketch n e) (ArrowSketch n e) n
forall {a}. Maybe a -> a
fromJust Maybe (Tripod (CategorySketch n e) (ArrowSketch n e) n)
faultyTripod)
        | FunctorSketch n e -> CategorySketch n e
forall c1 m1 o1 c2 m2 o2. Diagram c1 m1 o1 c2 m2 o2 -> c1
src FunctorSketch n e
f CategorySketch n e -> CategorySketch n e -> Bool
forall a. Eq a => a -> a -> Bool
/= Sketch n e -> CategorySketch n e
forall n e. Sketch n e -> CategorySketch n e
underlyingCategory Sketch n e
s = SketchMorphismError n e
-> Either (SketchMorphismError n e) (SketchMorphism n e)
forall a b. a -> Either a b
Left (SketchMorphismError n e
 -> Either (SketchMorphismError n e) (SketchMorphism n e))
-> SketchMorphismError n e
-> Either (SketchMorphismError n e) (SketchMorphism n e)
forall a b. (a -> b) -> a -> b
$ CategorySketch n e -> CategorySketch n e -> SketchMorphismError n e
forall n e.
CategorySketch n e -> CategorySketch n e -> SketchMorphismError n e
WrongSource (FunctorSketch n e -> CategorySketch n e
forall c1 m1 o1 c2 m2 o2. Diagram c1 m1 o1 c2 m2 o2 -> c1
src FunctorSketch n e
f) (Sketch n e -> CategorySketch n e
forall n e. Sketch n e -> CategorySketch n e
underlyingCategory Sketch n e
s)
        | FunctorSketch n e -> CategorySketch n e
forall c1 m1 o1 c2 m2 o2. Diagram c1 m1 o1 c2 m2 o2 -> c2
tgt FunctorSketch n e
f CategorySketch n e -> CategorySketch n e -> Bool
forall a. Eq a => a -> a -> Bool
/= Sketch n e -> CategorySketch n e
forall n e. Sketch n e -> CategorySketch n e
underlyingCategory Sketch n e
t = SketchMorphismError n e
-> Either (SketchMorphismError n e) (SketchMorphism n e)
forall a b. a -> Either a b
Left (SketchMorphismError n e
 -> Either (SketchMorphismError n e) (SketchMorphism n e))
-> SketchMorphismError n e
-> Either (SketchMorphismError n e) (SketchMorphism n e)
forall a b. (a -> b) -> a -> b
$ CategorySketch n e -> CategorySketch n e -> SketchMorphismError n e
forall n e.
CategorySketch n e -> CategorySketch n e -> SketchMorphismError n e
WrongTarget (FunctorSketch n e -> CategorySketch n e
forall c1 m1 o1 c2 m2 o2. Diagram c1 m1 o1 c2 m2 o2 -> c2
tgt FunctorSketch n e
f) (Sketch n e -> CategorySketch n e
forall n e. Sketch n e -> CategorySketch n e
underlyingCategory Sketch n e
t)
        | Bool
otherwise = SketchMorphism n e
-> Either (SketchMorphismError n e) (SketchMorphism n e)
forall a b. b -> Either a b
Right (SketchMorphism n e
 -> Either (SketchMorphismError n e) (SketchMorphism n e))
-> SketchMorphism n e
-> Either (SketchMorphismError n e) (SketchMorphism n e)
forall a b. (a -> b) -> a -> b
$ SketchMorphism{underlyingFunctor :: FunctorSketch n e
underlyingFunctor = FunctorSketch n e
f, sourceSketch :: Sketch n e
sourceSketch = Sketch n e
s, targetSketch :: Sketch n e
targetSketch = Sketch n e
t}
        where
            errFunct :: Maybe
  (DiagramError
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
errFunct = FunctorSketch n e
-> Maybe
     (DiagramError
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
forall c1 m1 o1 c2 m2 o2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq m1, Eq o1,
 Category c2 m2 o2, Morphism m2 o2, Eq m2, Eq o2) =>
Diagram c1 m1 o1 c2 m2 o2 -> Maybe (DiagramError c1 m1 o1 c2 m2 o2)
checkDiagram FunctorSketch n e
f
            fromJust :: Maybe a -> a
fromJust (Just a
x) = a
x
            faultyCone :: Maybe
  (Cone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
faultyCone = (Cone
   (CategorySketch n e)
   (ArrowSketch n e)
   n
   (CategorySketch n e)
   (ArrowSketch n e)
   n
 -> Bool)
-> Set
     (Cone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
-> Maybe
     (Cone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
forall a. Eq a => (a -> Bool) -> Set a -> Maybe a
find (\Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
cone_ -> Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ (n
-> NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> Cone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall o2 c1 m1 o1 c2 m2.
o2
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> Cone c1 m1 o1 c2 m2 o2
unsafeCone (FunctorSketch n e
f FunctorSketch n e -> n -> n
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ (Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> n
forall c1 m1 o1 c2 m2 o2. Cone c1 m1 o1 c2 m2 o2 -> o2
apex Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
cone_)) (FunctorSketch n e
f FunctorSketch n e
-> NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2 m3 o3 c3.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Category c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2,
 Morphism m3 o3) =>
Diagram c2 m2 o2 c3 m3 o3
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> NaturalTransformation c1 m1 o1 c3 m3 o3
<-@<= Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2.
Cone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCone Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
cone_)) Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Set
     (Cone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
-> Bool
forall a. Eq a => a -> Set a -> Bool
`Set.isIn` (Sketch n e
-> Set
     (Cone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
forall n e. Sketch n e -> Set (ConeSketch n e)
distinguishedCones Sketch n e
t)) (Sketch n e
-> Set
     (Cone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
forall n e. Sketch n e -> Set (ConeSketch n e)
distinguishedCones Sketch n e
s)
            faultyCocone :: Maybe
  (Cocone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
faultyCocone = (Cocone
   (CategorySketch n e)
   (ArrowSketch n e)
   n
   (CategorySketch n e)
   (ArrowSketch n e)
   n
 -> Bool)
-> Set
     (Cocone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
-> Maybe
     (Cocone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
forall a. Eq a => (a -> Bool) -> Set a -> Maybe a
find (\Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
cocone_ -> Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ (n
-> NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> Cocone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall o2 c1 m1 o1 c2 m2.
o2
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> Cocone c1 m1 o1 c2 m2 o2
unsafeCocone (FunctorSketch n e
f FunctorSketch n e -> n -> n
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ (Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> n
forall c1 m1 o1 c2 m2 o2. Cocone c1 m1 o1 c2 m2 o2 -> o2
nadir Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
cocone_)) (FunctorSketch n e
f FunctorSketch n e
-> NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2 m3 o3 c3.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Category c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2,
 Morphism m3 o3) =>
Diagram c2 m2 o2 c3 m3 o3
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> NaturalTransformation c1 m1 o1 c3 m3 o3
<-@<= Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2.
Cocone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCocone Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
cocone_)) Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Set
     (Cocone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
-> Bool
forall a. Eq a => a -> Set a -> Bool
`Set.isIn` (Sketch n e
-> Set
     (Cocone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
forall n e. Sketch n e -> Set (CoconeSketch n e)
distinguishedCocones Sketch n e
t)) (Sketch n e
-> Set
     (Cocone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
forall n e. Sketch n e -> Set (CoconeSketch n e)
distinguishedCocones Sketch n e
s)
            faultyTripod :: Maybe (Tripod (CategorySketch n e) (ArrowSketch n e) n)
faultyTripod = (Tripod (CategorySketch n e) (ArrowSketch n e) n -> Bool)
-> Set (Tripod (CategorySketch n e) (ArrowSketch n e) n)
-> Maybe (Tripod (CategorySketch n e) (ArrowSketch n e) n)
forall a. Eq a => (a -> Bool) -> Set a -> Maybe a
find (\Tripod (CategorySketch n e) (ArrowSketch n e) n
tripod_ -> Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ (Cone
  DiscreteTwo
  DiscreteTwoAr
  DiscreteTwoAr
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> ArrowSketch n e
-> Tripod (CategorySketch n e) (ArrowSketch n e) n
forall c m o.
Cone DiscreteTwo DiscreteTwoAr DiscreteTwoAr c m o
-> m -> Tripod c m o
unsafeTripod (n
-> NaturalTransformation
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall o2 c1 m1 o1 c2 m2.
o2
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> Cone c1 m1 o1 c2 m2 o2
unsafeCone (FunctorSketch n e
f FunctorSketch n e -> n -> n
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ (Cone
  DiscreteTwo
  DiscreteTwoAr
  DiscreteTwoAr
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> n
forall c1 m1 o1 c2 m2 o2. Cone c1 m1 o1 c2 m2 o2 -> o2
apex (Tripod (CategorySketch n e) (ArrowSketch n e) n
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c m o.
Tripod c m o -> Cone DiscreteTwo DiscreteTwoAr DiscreteTwoAr c m o
twoCone Tripod (CategorySketch n e) (ArrowSketch n e) n
tripod_))) (FunctorSketch n e
f FunctorSketch n e
-> NaturalTransformation
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> NaturalTransformation
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2 m3 o3 c3.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Category c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2,
 Morphism m3 o3) =>
Diagram c2 m2 o2 c3 m3 o3
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> NaturalTransformation c1 m1 o1 c3 m3 o3
<-@<= Cone
  DiscreteTwo
  DiscreteTwoAr
  DiscreteTwoAr
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> NaturalTransformation
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2.
Cone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCone (Tripod (CategorySketch n e) (ArrowSketch n e) n
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c m o.
Tripod c m o -> Cone DiscreteTwo DiscreteTwoAr DiscreteTwoAr c m o
twoCone Tripod (CategorySketch n e) (ArrowSketch n e) n
tripod_))) (FunctorSketch n e
f FunctorSketch n e -> ArrowSketch n e -> ArrowSketch n e
forall c1 m1 o1 m2 o2 c2.
(Category c1 m1 o1, Morphism m1 o1, Morphism m2 o2, Eq m1) =>
Diagram c1 m1 o1 c2 m2 o2 -> m1 -> m2
->£ (Tripod (CategorySketch n e) (ArrowSketch n e) n -> ArrowSketch n e
forall c m o. Tripod c m o -> m
evalMap Tripod (CategorySketch n e) (ArrowSketch n e) n
tripod_))) Tripod (CategorySketch n e) (ArrowSketch n e) n
-> Set (Tripod (CategorySketch n e) (ArrowSketch n e) n) -> Bool
forall a. Eq a => a -> Set a -> Bool
`Set.isIn` (Sketch n e -> Set (Tripod (CategorySketch n e) (ArrowSketch n e) n)
forall n e. Sketch n e -> Set (TripodSketch n e)
distinguishedTripods Sketch n e
t)) (Sketch n e -> Set (Tripod (CategorySketch n e) (ArrowSketch n e) n)
forall n e. Sketch n e -> Set (TripodSketch n e)
distinguishedTripods Sketch n e
s)
            

    -- | Return wether a 'Functor' can be promoted into a 'SketchMorphism'.
    canFunctorBePromotedIntoSketchMorphism :: (Eq e, Eq n) => Sketch n e -> Sketch n e -> (FunctorSketch n e) -> Bool
    canFunctorBePromotedIntoSketchMorphism :: forall e n.
(Eq e, Eq n) =>
Sketch n e -> Sketch n e -> FunctorSketch n e -> Bool
canFunctorBePromotedIntoSketchMorphism Sketch n e
s Sketch n e
t FunctorSketch n e
f = Maybe
  (Cone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
-> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null Maybe
  (Cone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
faultyCone Bool -> Bool -> Bool
&& Maybe
  (Cocone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
-> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null Maybe
  (Cocone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
faultyCocone Bool -> Bool -> Bool
&& Maybe (Tripod (CategorySketch n e) (ArrowSketch n e) n) -> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null Maybe (Tripod (CategorySketch n e) (ArrowSketch n e) n)
faultyTripod
        where
            faultyCone :: Maybe
  (Cone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
faultyCone = (Cone
   (CategorySketch n e)
   (ArrowSketch n e)
   n
   (CategorySketch n e)
   (ArrowSketch n e)
   n
 -> Bool)
-> Set
     (Cone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
-> Maybe
     (Cone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
forall a. Eq a => (a -> Bool) -> Set a -> Maybe a
find (\Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
cone_ -> Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ (n
-> NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> Cone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall o2 c1 m1 o1 c2 m2.
o2
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> Cone c1 m1 o1 c2 m2 o2
unsafeCone (FunctorSketch n e
f FunctorSketch n e -> n -> n
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ (Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> n
forall c1 m1 o1 c2 m2 o2. Cone c1 m1 o1 c2 m2 o2 -> o2
apex Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
cone_)) (FunctorSketch n e
f FunctorSketch n e
-> NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2 m3 o3 c3.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Category c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2,
 Morphism m3 o3) =>
Diagram c2 m2 o2 c3 m3 o3
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> NaturalTransformation c1 m1 o1 c3 m3 o3
<-@<= Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2.
Cone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCone Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
cone_)) Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Set
     (Cone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
-> Bool
forall a. Eq a => a -> Set a -> Bool
`Set.isIn` (Sketch n e
-> Set
     (Cone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
forall n e. Sketch n e -> Set (ConeSketch n e)
distinguishedCones Sketch n e
t)) (Sketch n e
-> Set
     (Cone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
forall n e. Sketch n e -> Set (ConeSketch n e)
distinguishedCones Sketch n e
s)
            faultyCocone :: Maybe
  (Cocone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
faultyCocone = (Cocone
   (CategorySketch n e)
   (ArrowSketch n e)
   n
   (CategorySketch n e)
   (ArrowSketch n e)
   n
 -> Bool)
-> Set
     (Cocone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
-> Maybe
     (Cocone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
forall a. Eq a => (a -> Bool) -> Set a -> Maybe a
find (\Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
cocone_ -> Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ (n
-> NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> Cocone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall o2 c1 m1 o1 c2 m2.
o2
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> Cocone c1 m1 o1 c2 m2 o2
unsafeCocone (FunctorSketch n e
f FunctorSketch n e -> n -> n
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ (Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> n
forall c1 m1 o1 c2 m2 o2. Cocone c1 m1 o1 c2 m2 o2 -> o2
nadir Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
cocone_)) (FunctorSketch n e
f FunctorSketch n e
-> NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2 m3 o3 c3.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Category c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2,
 Morphism m3 o3) =>
Diagram c2 m2 o2 c3 m3 o3
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> NaturalTransformation c1 m1 o1 c3 m3 o3
<-@<= Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2.
Cocone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCocone Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
cocone_)) Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Set
     (Cocone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
-> Bool
forall a. Eq a => a -> Set a -> Bool
`Set.isIn` (Sketch n e
-> Set
     (Cocone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
forall n e. Sketch n e -> Set (CoconeSketch n e)
distinguishedCocones Sketch n e
t)) (Sketch n e
-> Set
     (Cocone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
forall n e. Sketch n e -> Set (CoconeSketch n e)
distinguishedCocones Sketch n e
s)
            faultyTripod :: Maybe (Tripod (CategorySketch n e) (ArrowSketch n e) n)
faultyTripod = (Tripod (CategorySketch n e) (ArrowSketch n e) n -> Bool)
-> Set (Tripod (CategorySketch n e) (ArrowSketch n e) n)
-> Maybe (Tripod (CategorySketch n e) (ArrowSketch n e) n)
forall a. Eq a => (a -> Bool) -> Set a -> Maybe a
find (\Tripod (CategorySketch n e) (ArrowSketch n e) n
tripod_ -> Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ (Cone
  DiscreteTwo
  DiscreteTwoAr
  DiscreteTwoAr
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> ArrowSketch n e
-> Tripod (CategorySketch n e) (ArrowSketch n e) n
forall c m o.
Cone DiscreteTwo DiscreteTwoAr DiscreteTwoAr c m o
-> m -> Tripod c m o
unsafeTripod (n
-> NaturalTransformation
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall o2 c1 m1 o1 c2 m2.
o2
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> Cone c1 m1 o1 c2 m2 o2
unsafeCone (FunctorSketch n e
f FunctorSketch n e -> n -> n
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ (Cone
  DiscreteTwo
  DiscreteTwoAr
  DiscreteTwoAr
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> n
forall c1 m1 o1 c2 m2 o2. Cone c1 m1 o1 c2 m2 o2 -> o2
apex (Tripod (CategorySketch n e) (ArrowSketch n e) n
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c m o.
Tripod c m o -> Cone DiscreteTwo DiscreteTwoAr DiscreteTwoAr c m o
twoCone Tripod (CategorySketch n e) (ArrowSketch n e) n
tripod_))) (FunctorSketch n e
f FunctorSketch n e
-> NaturalTransformation
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> NaturalTransformation
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2 m3 o3 c3.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Category c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2,
 Morphism m3 o3) =>
Diagram c2 m2 o2 c3 m3 o3
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> NaturalTransformation c1 m1 o1 c3 m3 o3
<-@<= Cone
  DiscreteTwo
  DiscreteTwoAr
  DiscreteTwoAr
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> NaturalTransformation
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2.
Cone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCone (Tripod (CategorySketch n e) (ArrowSketch n e) n
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c m o.
Tripod c m o -> Cone DiscreteTwo DiscreteTwoAr DiscreteTwoAr c m o
twoCone Tripod (CategorySketch n e) (ArrowSketch n e) n
tripod_))) (FunctorSketch n e
f FunctorSketch n e -> ArrowSketch n e -> ArrowSketch n e
forall c1 m1 o1 m2 o2 c2.
(Category c1 m1 o1, Morphism m1 o1, Morphism m2 o2, Eq m1) =>
Diagram c1 m1 o1 c2 m2 o2 -> m1 -> m2
->£ (Tripod (CategorySketch n e) (ArrowSketch n e) n -> ArrowSketch n e
forall c m o. Tripod c m o -> m
evalMap Tripod (CategorySketch n e) (ArrowSketch n e) n
tripod_))) Tripod (CategorySketch n e) (ArrowSketch n e) n
-> Set (Tripod (CategorySketch n e) (ArrowSketch n e) n) -> Bool
forall a. Eq a => a -> Set a -> Bool
`Set.isIn` (Sketch n e -> Set (Tripod (CategorySketch n e) (ArrowSketch n e) n)
forall n e. Sketch n e -> Set (TripodSketch n e)
distinguishedTripods Sketch n e
t)) (Sketch n e -> Set (Tripod (CategorySketch n e) (ArrowSketch n e) n)
forall n e. Sketch n e -> Set (TripodSketch n e)
distinguishedTripods Sketch n e
s)


    instance (Eq e, Eq n) => Morphism (SketchMorphism n e) (Sketch n e) where
        source :: SketchMorphism n e -> Sketch n e
source = SketchMorphism n e -> Sketch n e
forall n e. SketchMorphism n e -> Sketch n e
sourceSketch
        target :: SketchMorphism n e -> Sketch n e
target = SketchMorphism n e -> Sketch n e
forall n e. SketchMorphism n e -> Sketch n e
targetSketch
        SketchMorphism n e
sm2 @ :: SketchMorphism n e -> SketchMorphism n e -> SketchMorphism n e
@ SketchMorphism n e
sm1 = SketchMorphism{underlyingFunctor :: FunctorSketch n e
underlyingFunctor = (SketchMorphism n e -> FunctorSketch n e
forall n e. SketchMorphism n e -> FunctorSketch n e
underlyingFunctor SketchMorphism n e
sm2) FunctorSketch n e -> FunctorSketch n e -> FunctorSketch n e
forall m o. Morphism m o => m -> m -> m
@ (SketchMorphism n e -> FunctorSketch n e
forall n e. SketchMorphism n e -> FunctorSketch n e
underlyingFunctor SketchMorphism n e
sm1), sourceSketch :: Sketch n e
sourceSketch = SketchMorphism n e -> Sketch n e
forall n e. SketchMorphism n e -> Sketch n e
sourceSketch SketchMorphism n e
sm1, targetSketch :: Sketch n e
targetSketch = SketchMorphism n e -> Sketch n e
forall n e. SketchMorphism n e -> Sketch n e
targetSketch SketchMorphism n e
sm2}


    data FinSketch n e = FinSketch deriving (FinSketch n e -> FinSketch n e -> Bool
(FinSketch n e -> FinSketch n e -> Bool)
-> (FinSketch n e -> FinSketch n e -> Bool) -> Eq (FinSketch n e)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall n e. FinSketch n e -> FinSketch n e -> Bool
$c== :: forall n e. FinSketch n e -> FinSketch n e -> Bool
== :: FinSketch n e -> FinSketch n e -> Bool
$c/= :: forall n e. FinSketch n e -> FinSketch n e -> Bool
/= :: FinSketch n e -> FinSketch n e -> Bool
Eq, Int -> FinSketch n e -> ShowS
[FinSketch n e] -> ShowS
FinSketch n e -> [Char]
(Int -> FinSketch n e -> ShowS)
-> (FinSketch n e -> [Char])
-> ([FinSketch n e] -> ShowS)
-> Show (FinSketch n e)
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
forall n e. Int -> FinSketch n e -> ShowS
forall n e. [FinSketch n e] -> ShowS
forall n e. FinSketch n e -> [Char]
$cshowsPrec :: forall n e. Int -> FinSketch n e -> ShowS
showsPrec :: Int -> FinSketch n e -> ShowS
$cshow :: forall n e. FinSketch n e -> [Char]
show :: FinSketch n e -> [Char]
$cshowList :: forall n e. [FinSketch n e] -> ShowS
showList :: [FinSketch n e] -> ShowS
Show, (forall x. FinSketch n e -> Rep (FinSketch n e) x)
-> (forall x. Rep (FinSketch n e) x -> FinSketch n e)
-> Generic (FinSketch n e)
forall x. Rep (FinSketch n e) x -> FinSketch n e
forall x. FinSketch n e -> Rep (FinSketch n e) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall n e x. Rep (FinSketch n e) x -> FinSketch n e
forall n e x. FinSketch n e -> Rep (FinSketch n e) x
$cfrom :: forall n e x. FinSketch n e -> Rep (FinSketch n e) x
from :: forall x. FinSketch n e -> Rep (FinSketch n e) x
$cto :: forall n e x. Rep (FinSketch n e) x -> FinSketch n e
to :: forall x. Rep (FinSketch n e) x -> FinSketch n e
Generic, Int -> Int -> [Char] -> FinSketch n e -> [Char]
Int -> FinSketch n e -> [Char]
(Int -> FinSketch n e -> [Char])
-> (Int -> Int -> [Char] -> FinSketch n e -> [Char])
-> (Int -> FinSketch n e -> [Char])
-> PrettyPrint (FinSketch n e)
forall a.
(Int -> a -> [Char])
-> (Int -> Int -> [Char] -> a -> [Char])
-> (Int -> a -> [Char])
-> PrettyPrint a
forall n e. Int -> Int -> [Char] -> FinSketch n e -> [Char]
forall n e. Int -> FinSketch n e -> [Char]
$cpprint :: forall n e. Int -> FinSketch n e -> [Char]
pprint :: Int -> FinSketch n e -> [Char]
$cpprintWithIndentations :: forall n e. Int -> Int -> [Char] -> FinSketch n e -> [Char]
pprintWithIndentations :: Int -> Int -> [Char] -> FinSketch n e -> [Char]
$cpprintIndent :: forall n e. Int -> FinSketch n e -> [Char]
pprintIndent :: Int -> FinSketch n e -> [Char]
PrettyPrint, FinSketch n e -> FinSketch n e
(FinSketch n e -> FinSketch n e) -> Simplifiable (FinSketch n e)
forall a. (a -> a) -> Simplifiable a
forall n e. FinSketch n e -> FinSketch n e
$csimplify :: forall n e. FinSketch n e -> FinSketch n e
simplify :: FinSketch n e -> FinSketch n e
Simplifiable)
    
    instance (Eq e, Eq n) => Category (FinSketch n e) (SketchMorphism n e) (Sketch n e) where
        identity :: Morphism (SketchMorphism n e) (Sketch n e) =>
FinSketch n e -> Sketch n e -> SketchMorphism n e
identity FinSketch n e
_ Sketch n e
s = SketchMorphism{underlyingFunctor :: FunctorSketch n e
underlyingFunctor = FinCat (CategorySketch n e) (ArrowSketch n e) n
-> CategorySketch n e -> FunctorSketch n e
forall c m o. (Category c m o, Morphism m o) => c -> o -> m
identity FinCat (CategorySketch n e) (ArrowSketch n e) n
forall c m o. FinCat c m o
FinCat (Sketch n e -> CategorySketch n e
forall n e. Sketch n e -> CategorySketch n e
underlyingCategory Sketch n e
s), sourceSketch :: Sketch n e
sourceSketch = Sketch n e
s, targetSketch :: Sketch n e
targetSketch = Sketch n e
s}
        
        ar :: Morphism (SketchMorphism n e) (Sketch n e) =>
FinSketch n e
-> Sketch n e -> Sketch n e -> Set (SketchMorphism n e)
ar FinSketch n e
_ Sketch n e
s Sketch n e
t = Sketch n e -> Sketch n e -> FunctorSketch n e -> SketchMorphism n e
forall n e.
Sketch n e -> Sketch n e -> FunctorSketch n e -> SketchMorphism n e
unsafeSketchMorphism Sketch n e
s Sketch n e
t (FunctorSketch n e -> SketchMorphism n e)
-> Set (FunctorSketch n e) -> Set (SketchMorphism n e)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (FunctorSketch n e -> Bool)
-> Set (FunctorSketch n e) -> Set (FunctorSketch n e)
forall a. (a -> Bool) -> Set a -> Set a
Set.filter (Sketch n e -> Sketch n e -> FunctorSketch n e -> Bool
forall e n.
(Eq e, Eq n) =>
Sketch n e -> Sketch n e -> FunctorSketch n e -> Bool
canFunctorBePromotedIntoSketchMorphism Sketch n e
s Sketch n e
t) (FinCat (CategorySketch n e) (ArrowSketch n e) n
-> CategorySketch n e
-> CategorySketch n e
-> Set (FunctorSketch n e)
forall c m o.
(Category c m o, Morphism m o) =>
c -> o -> o -> Set m
ar FinCat (CategorySketch n e) (ArrowSketch n e) n
forall c m o. FinCat c m o
FinCat (Sketch n e -> CategorySketch n e
forall n e. Sketch n e -> CategorySketch n e
underlyingCategory Sketch n e
s) (Sketch n e -> CategorySketch n e
forall n e. Sketch n e -> CategorySketch n e
underlyingCategory Sketch n e
t))
        
    instance (Eq e, Eq n) => 
        HasCoequalizers (FinSketch n e) (SketchMorphism n e) (Sketch n e) where
        coequalize :: Diagram
  Parallel
  ParallelAr
  ParallelOb
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
-> Cocone
     Parallel
     ParallelAr
     ParallelOb
     (FinSketch n e)
     (SketchMorphism n e)
     (Sketch n e)
coequalize Diagram
  Parallel
  ParallelAr
  ParallelOb
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
parallelDiag = Sketch n e
-> NaturalTransformation
     Parallel
     ParallelAr
     ParallelOb
     (FinSketch n e)
     (SketchMorphism n e)
     (Sketch n e)
-> Cocone
     Parallel
     ParallelAr
     ParallelOb
     (FinSketch n e)
     (SketchMorphism n e)
     (Sketch n e)
forall o2 c1 m1 o1 c2 m2.
o2
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> Cocone c1 m1 o1 c2 m2 o2
unsafeCocone Sketch n e
nadirSketch NaturalTransformation
  Parallel
  ParallelAr
  ParallelOb
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
legs
            where
                parallelDiagOfCg :: Diagram
  Parallel
  ParallelAr
  ParallelOb
  (FinCat c m o)
  (FunctorSketch n e)
  (CategorySketch n e)
parallelDiagOfCg = Diagram{src :: Parallel
src = Parallel
Parallel, tgt :: FinCat c m o
tgt = FinCat c m o
forall c m o. FinCat c m o
FinCat, omap :: Map ParallelOb (CategorySketch n e)
omap = Sketch n e -> CategorySketch n e
forall n e. Sketch n e -> CategorySketch n e
underlyingCategory (Sketch n e -> CategorySketch n e)
-> Map ParallelOb (Sketch n e)
-> Map ParallelOb (CategorySketch n e)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Diagram
  Parallel
  ParallelAr
  ParallelOb
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
-> Map ParallelOb (Sketch n e)
forall c1 m1 o1 c2 m2 o2. Diagram c1 m1 o1 c2 m2 o2 -> Map o1 o2
omap Diagram
  Parallel
  ParallelAr
  ParallelOb
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
parallelDiag, mmap :: Map ParallelAr (FunctorSketch n e)
mmap = SketchMorphism n e -> FunctorSketch n e
forall n e. SketchMorphism n e -> FunctorSketch n e
underlyingFunctor (SketchMorphism n e -> FunctorSketch n e)
-> Map ParallelAr (SketchMorphism n e)
-> Map ParallelAr (FunctorSketch n e)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Diagram
  Parallel
  ParallelAr
  ParallelOb
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
-> Map ParallelAr (SketchMorphism n e)
forall c1 m1 o1 c2 m2 o2. Diagram c1 m1 o1 c2 m2 o2 -> Map m1 m2
mmap Diagram
  Parallel
  ParallelAr
  ParallelOb
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
parallelDiag}
                coeqCg :: Cocone
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
coeqCg = Diagram
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
-> Cocone
     Parallel
     ParallelAr
     ParallelOb
     (FinCat (CategorySketch n e) (ArrowSketch n e) n)
     (FunctorSketch n e)
     (CategorySketch n e)
forall c m o.
HasCoequalizers c m o =>
Diagram Parallel ParallelAr ParallelOb c m o
-> Cocone Parallel ParallelAr ParallelOb c m o
coequalize Diagram
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
forall {c} {m} {o}.
Diagram
  Parallel
  ParallelAr
  ParallelOb
  (FinCat c m o)
  (FunctorSketch n e)
  (CategorySketch n e)
parallelDiagOfCg
                transformCone :: Cone c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
-> Cone c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
transformCone Cone c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
c = n
-> NaturalTransformation
     c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
-> Cone c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
forall o2 c1 m1 o1 c2 m2.
o2
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> Cone c1 m1 o1 c2 m2 o2
unsafeCone (((Cocone
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
-> NaturalTransformation
     Parallel
     ParallelAr
     ParallelOb
     (FinCat (CategorySketch n e) (ArrowSketch n e) n)
     (FunctorSketch n e)
     (CategorySketch n e)
forall c1 m1 o1 c2 m2 o2.
Cocone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCocone Cocone
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
coeqCg) NaturalTransformation
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
-> ParallelOb -> FunctorSketch n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
NaturalTransformation c1 m1 o1 c2 m2 o2 -> o1 -> m2
=>$ ParallelOb
ParallelB) FunctorSketch n e -> n -> n
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ (Cone c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n -> n
forall c1 m1 o1 c2 m2 o2. Cone c1 m1 o1 c2 m2 o2 -> o2
apex Cone c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
c)) (((Cocone
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
-> NaturalTransformation
     Parallel
     ParallelAr
     ParallelOb
     (FinCat (CategorySketch n e) (ArrowSketch n e) n)
     (FunctorSketch n e)
     (CategorySketch n e)
forall c1 m1 o1 c2 m2 o2.
Cocone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCocone Cocone
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
coeqCg) NaturalTransformation
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
-> ParallelOb -> FunctorSketch n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
NaturalTransformation c1 m1 o1 c2 m2 o2 -> o1 -> m2
=>$ ParallelOb
ParallelB) FunctorSketch n e
-> NaturalTransformation
     c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
-> NaturalTransformation
     c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
forall c1 m1 o1 c2 m2 o2 m3 o3 c3.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Category c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2,
 Morphism m3 o3) =>
Diagram c2 m2 o2 c3 m3 o3
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> NaturalTransformation c1 m1 o1 c3 m3 o3
<-@<= (Cone c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
-> NaturalTransformation
     c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
forall c1 m1 o1 c2 m2 o2.
Cone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCone Cone c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
c))
                transformCocone :: Cocone c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
-> Cocone c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
transformCocone Cocone c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
cc = n
-> NaturalTransformation
     c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
-> Cocone c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
forall o2 c1 m1 o1 c2 m2.
o2
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> Cocone c1 m1 o1 c2 m2 o2
unsafeCocone (((Cocone
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
-> NaturalTransformation
     Parallel
     ParallelAr
     ParallelOb
     (FinCat (CategorySketch n e) (ArrowSketch n e) n)
     (FunctorSketch n e)
     (CategorySketch n e)
forall c1 m1 o1 c2 m2 o2.
Cocone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCocone Cocone
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
coeqCg) NaturalTransformation
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
-> ParallelOb -> FunctorSketch n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
NaturalTransformation c1 m1 o1 c2 m2 o2 -> o1 -> m2
=>$ ParallelOb
ParallelB) FunctorSketch n e -> n -> n
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ (Cocone c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n -> n
forall c1 m1 o1 c2 m2 o2. Cocone c1 m1 o1 c2 m2 o2 -> o2
nadir Cocone c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
cc)) (((Cocone
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
-> NaturalTransformation
     Parallel
     ParallelAr
     ParallelOb
     (FinCat (CategorySketch n e) (ArrowSketch n e) n)
     (FunctorSketch n e)
     (CategorySketch n e)
forall c1 m1 o1 c2 m2 o2.
Cocone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCocone Cocone
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
coeqCg) NaturalTransformation
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
-> ParallelOb -> FunctorSketch n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
NaturalTransformation c1 m1 o1 c2 m2 o2 -> o1 -> m2
=>$ ParallelOb
ParallelB) FunctorSketch n e
-> NaturalTransformation
     c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
-> NaturalTransformation
     c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
forall c1 m1 o1 c2 m2 o2 m3 o3 c3.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Category c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2,
 Morphism m3 o3) =>
Diagram c2 m2 o2 c3 m3 o3
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> NaturalTransformation c1 m1 o1 c3 m3 o3
<-@<=(Cocone c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
-> NaturalTransformation
     c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
forall c1 m1 o1 c2 m2 o2.
Cocone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCocone Cocone c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
cc))
                transformTripod :: Tripod (CategorySketch n e) (ArrowSketch n e) n
-> Tripod (CategorySketch n e) (ArrowSketch n e) n
transformTripod Tripod (CategorySketch n e) (ArrowSketch n e) n
t = Cone
  DiscreteTwo
  DiscreteTwoAr
  DiscreteTwoAr
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> ArrowSketch n e
-> Tripod (CategorySketch n e) (ArrowSketch n e) n
forall c m o.
Cone DiscreteTwo DiscreteTwoAr DiscreteTwoAr c m o
-> m -> Tripod c m o
unsafeTripod (Cone
  DiscreteTwo
  DiscreteTwoAr
  DiscreteTwoAr
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall {c1} {m1} {o1}.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1) =>
Cone c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
-> Cone c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
transformCone (Tripod (CategorySketch n e) (ArrowSketch n e) n
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c m o.
Tripod c m o -> Cone DiscreteTwo DiscreteTwoAr DiscreteTwoAr c m o
twoCone Tripod (CategorySketch n e) (ArrowSketch n e) n
t)) (((Cocone
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
-> NaturalTransformation
     Parallel
     ParallelAr
     ParallelOb
     (FinCat (CategorySketch n e) (ArrowSketch n e) n)
     (FunctorSketch n e)
     (CategorySketch n e)
forall c1 m1 o1 c2 m2 o2.
Cocone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCocone Cocone
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
coeqCg) NaturalTransformation
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
-> ParallelOb -> FunctorSketch n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
NaturalTransformation c1 m1 o1 c2 m2 o2 -> o1 -> m2
=>$ ParallelOb
ParallelB) FunctorSketch n e -> ArrowSketch n e -> ArrowSketch n e
forall c1 m1 o1 m2 o2 c2.
(Category c1 m1 o1, Morphism m1 o1, Morphism m2 o2, Eq m1) =>
Diagram c1 m1 o1 c2 m2 o2 -> m1 -> m2
->£ (Tripod (CategorySketch n e) (ArrowSketch n e) n -> ArrowSketch n e
forall c m o. Tripod c m o -> m
evalMap Tripod (CategorySketch n e) (ArrowSketch n e) n
t))
                nadirSketch :: Sketch n e
nadirSketch = Sketch{underlyingCategory :: CategorySketch n e
underlyingCategory = Cocone
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
-> CategorySketch n e
forall c1 m1 o1 c2 m2 o2. Cocone c1 m1 o1 c2 m2 o2 -> o2
nadir Cocone
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
coeqCg, distinguishedCones :: Set (ConeSketch n e)
distinguishedCones = ConeSketch n e -> ConeSketch n e
forall {c1} {m1} {o1}.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1) =>
Cone c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
-> Cone c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
transformCone (ConeSketch n e -> ConeSketch n e)
-> Set (ConeSketch n e) -> Set (ConeSketch n e)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Sketch n e -> Set (ConeSketch n e)
forall n e. Sketch n e -> Set (ConeSketch n e)
distinguishedCones (Diagram
  Parallel
  ParallelAr
  ParallelOb
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
parallelDiag Diagram
  Parallel
  ParallelAr
  ParallelOb
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
-> ParallelOb -> Sketch n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ ParallelOb
ParallelB), distinguishedCocones :: Set (CoconeSketch n e)
distinguishedCocones = CoconeSketch n e -> CoconeSketch n e
forall {c1} {m1} {o1}.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1) =>
Cocone c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
-> Cocone c1 m1 o1 (CategorySketch n e) (ArrowSketch n e) n
transformCocone (CoconeSketch n e -> CoconeSketch n e)
-> Set (CoconeSketch n e) -> Set (CoconeSketch n e)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Sketch n e -> Set (CoconeSketch n e)
forall n e. Sketch n e -> Set (CoconeSketch n e)
distinguishedCocones (Diagram
  Parallel
  ParallelAr
  ParallelOb
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
parallelDiag Diagram
  Parallel
  ParallelAr
  ParallelOb
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
-> ParallelOb -> Sketch n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ ParallelOb
ParallelB), distinguishedTripods :: Set (Tripod (CategorySketch n e) (ArrowSketch n e) n)
distinguishedTripods = Tripod (CategorySketch n e) (ArrowSketch n e) n
-> Tripod (CategorySketch n e) (ArrowSketch n e) n
transformTripod (Tripod (CategorySketch n e) (ArrowSketch n e) n
 -> Tripod (CategorySketch n e) (ArrowSketch n e) n)
-> Set (Tripod (CategorySketch n e) (ArrowSketch n e) n)
-> Set (Tripod (CategorySketch n e) (ArrowSketch n e) n)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Sketch n e -> Set (Tripod (CategorySketch n e) (ArrowSketch n e) n)
forall n e. Sketch n e -> Set (TripodSketch n e)
distinguishedTripods (Diagram
  Parallel
  ParallelAr
  ParallelOb
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
parallelDiag Diagram
  Parallel
  ParallelAr
  ParallelOb
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
-> ParallelOb -> Sketch n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ ParallelOb
ParallelB)}
                leg1 :: SketchMorphism n e
leg1 = SketchMorphism{sourceSketch :: Sketch n e
sourceSketch = Diagram
  Parallel
  ParallelAr
  ParallelOb
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
parallelDiag Diagram
  Parallel
  ParallelAr
  ParallelOb
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
-> ParallelOb -> Sketch n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ ParallelOb
ParallelA, targetSketch :: Sketch n e
targetSketch = Sketch n e
nadirSketch, underlyingFunctor :: FunctorSketch n e
underlyingFunctor = (Cocone
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
-> NaturalTransformation
     Parallel
     ParallelAr
     ParallelOb
     (FinCat (CategorySketch n e) (ArrowSketch n e) n)
     (FunctorSketch n e)
     (CategorySketch n e)
forall c1 m1 o1 c2 m2 o2.
Cocone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCocone Cocone
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
coeqCg) NaturalTransformation
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
-> ParallelOb -> FunctorSketch n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
NaturalTransformation c1 m1 o1 c2 m2 o2 -> o1 -> m2
=>$ ParallelOb
ParallelA}
                leg2 :: SketchMorphism n e
leg2 = SketchMorphism{sourceSketch :: Sketch n e
sourceSketch = Diagram
  Parallel
  ParallelAr
  ParallelOb
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
parallelDiag Diagram
  Parallel
  ParallelAr
  ParallelOb
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
-> ParallelOb -> Sketch n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ ParallelOb
ParallelB, targetSketch :: Sketch n e
targetSketch = Sketch n e
nadirSketch, underlyingFunctor :: FunctorSketch n e
underlyingFunctor = (Cocone
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
-> NaturalTransformation
     Parallel
     ParallelAr
     ParallelOb
     (FinCat (CategorySketch n e) (ArrowSketch n e) n)
     (FunctorSketch n e)
     (CategorySketch n e)
forall c1 m1 o1 c2 m2 o2.
Cocone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCocone Cocone
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
coeqCg) NaturalTransformation
  Parallel
  ParallelAr
  ParallelOb
  (FinCat (CategorySketch n e) (ArrowSketch n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
-> ParallelOb -> FunctorSketch n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
NaturalTransformation c1 m1 o1 c2 m2 o2 -> o1 -> m2
=>$ ParallelOb
ParallelB}
                legs :: NaturalTransformation
  Parallel
  ParallelAr
  ParallelOb
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
legs = Diagram
  Parallel
  ParallelAr
  ParallelOb
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
-> Diagram
     Parallel
     ParallelAr
     ParallelOb
     (FinSketch n e)
     (SketchMorphism n e)
     (Sketch n e)
-> Map ParallelOb (SketchMorphism n e)
-> NaturalTransformation
     Parallel
     ParallelAr
     ParallelOb
     (FinSketch n e)
     (SketchMorphism n e)
     (Sketch n e)
forall c1 m1 o1 c2 m2 o2.
Diagram c1 m1 o1 c2 m2 o2
-> Diagram c1 m1 o1 c2 m2 o2
-> Map o1 m2
-> NaturalTransformation c1 m1 o1 c2 m2 o2
unsafeNaturalTransformation Diagram
  Parallel
  ParallelAr
  ParallelOb
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
parallelDiag (Parallel
-> FinSketch n e
-> Sketch n e
-> Diagram
     Parallel
     ParallelAr
     ParallelOb
     (FinSketch n e)
     (SketchMorphism n e)
     (Sketch n e)
forall c1 m1 o1 c2 m2 o2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Category c2 m2 o2,
 Morphism m2 o2) =>
c1 -> c2 -> o2 -> Diagram c1 m1 o1 c2 m2 o2
constantDiagram Parallel
Parallel FinSketch n e
forall n e. FinSketch n e
FinSketch Sketch n e
nadirSketch) (AssociationList ParallelOb (SketchMorphism n e)
-> Map ParallelOb (SketchMorphism n e)
forall k v. AssociationList k v -> Map k v
weakMap [(ParallelOb
ParallelA, SketchMorphism n e
leg1),(ParallelOb
ParallelB, SketchMorphism n e
leg2)])
                
        
    instance (Eq e, Eq n, Eq oIndex, Eq mIndex, Morphism mIndex oIndex, FiniteCategory cIndex mIndex oIndex) => CocompleteCategory (FinSketch n e) (SketchMorphism n e) (Sketch n e) (FinSketch (Colimit oIndex n) (Colimit oIndex e)) (SketchMorphism (Colimit oIndex n) (Colimit oIndex e)) (Sketch (Colimit oIndex n) (Colimit oIndex e)) cIndex mIndex oIndex where
        colimit :: (FiniteCategory cIndex mIndex oIndex, Morphism mIndex oIndex,
 Eq cIndex, Eq mIndex, Eq oIndex) =>
Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
-> Cocone
     cIndex
     mIndex
     oIndex
     (FinSketch (Colimit oIndex n) (Colimit oIndex e))
     (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Sketch (Colimit oIndex n) (Colimit oIndex e))
colimit Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
diagOfSketches = Sketch (Colimit oIndex n) (Colimit oIndex e)
-> NaturalTransformation
     cIndex
     mIndex
     oIndex
     (FinSketch (Colimit oIndex n) (Colimit oIndex e))
     (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Sketch (Colimit oIndex n) (Colimit oIndex e))
-> Cocone
     cIndex
     mIndex
     oIndex
     (FinSketch (Colimit oIndex n) (Colimit oIndex e))
     (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Sketch (Colimit oIndex n) (Colimit oIndex e))
forall o2 c1 m1 o1 c2 m2.
o2
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> Cocone c1 m1 o1 c2 m2 o2
unsafeCocone Sketch (Colimit oIndex n) (Colimit oIndex e)
nadirSketch NaturalTransformation
  cIndex
  mIndex
  oIndex
  (FinSketch (Colimit oIndex n) (Colimit oIndex e))
  (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Sketch (Colimit oIndex n) (Colimit oIndex e))
legs
            where
                indexingCategory :: cIndex
indexingCategory = Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
-> cIndex
forall c1 m1 o1 c2 m2 o2. Diagram c1 m1 o1 c2 m2 o2 -> c1
src Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
diagOfSketches
                diagOfCG :: Diagram
  cIndex
  mIndex
  oIndex
  (FinCat c m o)
  (FunctorSketch n e)
  (CategorySketch n e)
diagOfCG = Diagram{src :: cIndex
src = cIndex
indexingCategory, tgt :: FinCat c m o
tgt = FinCat c m o
forall c m o. FinCat c m o
FinCat, omap :: Map oIndex (CategorySketch n e)
omap = Set (oIndex, CategorySketch n e) -> Map oIndex (CategorySketch n e)
forall k v. Set (k, v) -> Map k v
Map.weakMapFromSet [(oIndex
i,Sketch n e -> CategorySketch n e
forall n e. Sketch n e -> CategorySketch n e
underlyingCategory (Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
diagOfSketches Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
-> oIndex -> Sketch n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ oIndex
i)) | oIndex
i <- cIndex -> Set oIndex
forall c m o. FiniteCategory c m o => c -> Set o
ob cIndex
indexingCategory], mmap :: Map mIndex (FunctorSketch n e)
mmap = Set (mIndex, FunctorSketch n e) -> Map mIndex (FunctorSketch n e)
forall k v. Set (k, v) -> Map k v
Map.weakMapFromSet [(mIndex
f,SketchMorphism n e -> FunctorSketch n e
forall n e. SketchMorphism n e -> FunctorSketch n e
underlyingFunctor (Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
diagOfSketches Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
-> mIndex -> SketchMorphism n e
forall c1 m1 o1 m2 o2 c2.
(Category c1 m1 o1, Morphism m1 o1, Morphism m2 o2, Eq m1) =>
Diagram c1 m1 o1 c2 m2 o2 -> m1 -> m2
->£ mIndex
f)) | mIndex
f <- cIndex -> Set mIndex
forall c m o. (FiniteCategory c m o, Morphism m o) => c -> Set m
genArrows cIndex
indexingCategory]}
                colimitCG :: Cocone
  cIndex
  mIndex
  oIndex
  (FinCat
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
colimitCG = Diagram
  cIndex
  mIndex
  oIndex
  (FinCat (CategorySketch n e) (CGMorphism n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
-> Cocone
     cIndex
     mIndex
     oIndex
     (FinCat
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
     (FinFunctor
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
forall cIndex mIndex oIndex n e.
(FiniteCategory cIndex mIndex oIndex, Morphism mIndex oIndex,
 Eq cIndex, Eq mIndex, Eq oIndex, Eq n, Eq e) =>
Diagram
  cIndex
  mIndex
  oIndex
  (FinCat (CompositionGraph n e) (CGMorphism n e) n)
  (FinFunctor (CompositionGraph n e) (CGMorphism n e) n)
  (CompositionGraph n e)
-> Cocone
     cIndex
     mIndex
     oIndex
     (FinCat
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
     (FinFunctor
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
colimitOfCompositionGraphs Diagram
  cIndex
  mIndex
  oIndex
  (FinCat (CategorySketch n e) (CGMorphism n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
forall {c} {m} {o}.
Diagram
  cIndex
  mIndex
  oIndex
  (FinCat c m o)
  (FunctorSketch n e)
  (CategorySketch n e)
diagOfCG
                coprojBase :: Diagram
  (FinCat (CategorySketch n e) (CGMorphism n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
  (FinCat
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
coprojBase = Diagram
  cIndex
  mIndex
  oIndex
  (FinCat (CategorySketch n e) (CGMorphism n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
-> Diagram
     (FinCat (CategorySketch n e) (CGMorphism n e) n)
     (FunctorSketch n e)
     (CategorySketch n e)
     (FinCat
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
     (FinFunctor
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
forall cIndex mIndex oIndex e n.
(FiniteCategory cIndex mIndex oIndex, Morphism mIndex oIndex,
 Eq mIndex, Eq oIndex, Eq e, Eq n) =>
Diagram
  cIndex
  mIndex
  oIndex
  (FinCat (CompositionGraph n e) (CGMorphism n e) n)
  (FinFunctor (CompositionGraph n e) (CGMorphism n e) n)
  (CompositionGraph n e)
-> Diagram
     (FinCat (CompositionGraph n e) (CGMorphism n e) n)
     (FinFunctor (CompositionGraph n e) (CGMorphism n e) n)
     (CompositionGraph n e)
     (FinCat
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
     (FinFunctor
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
coprojectBaseCompositionGraphs Diagram
  cIndex
  mIndex
  oIndex
  (FinCat (CategorySketch n e) (CGMorphism n e) n)
  (FunctorSketch n e)
  (CategorySketch n e)
forall {c} {m} {o}.
Diagram
  cIndex
  mIndex
  oIndex
  (FinCat c m o)
  (FunctorSketch n e)
  (CategorySketch n e)
diagOfCG
                transformCone :: oIndex
-> Cone
     c1
     m1
     o1
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
-> Cone
     c1
     m1
     o1
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
transformCone oIndex
i Cone
  c1
  m1
  o1
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
  (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Colimit oIndex n)
c = Colimit oIndex n
-> NaturalTransformation
     c1
     m1
     o1
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
-> Cone
     c1
     m1
     o1
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
forall o2 c1 m1 o1 c2 m2.
o2
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> Cone c1 m1 o1 c2 m2 o2
unsafeCone (((Cocone
  cIndex
  mIndex
  oIndex
  (FinCat
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
-> NaturalTransformation
     cIndex
     mIndex
     oIndex
     (FinCat
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
     (FinFunctor
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
forall c1 m1 o1 c2 m2 o2.
Cocone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCocone Cocone
  cIndex
  mIndex
  oIndex
  (FinCat
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
colimitCG) NaturalTransformation
  cIndex
  mIndex
  oIndex
  (FinCat
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
-> oIndex
-> FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
NaturalTransformation c1 m1 o1 c2 m2 o2 -> o1 -> m2
=>$ oIndex
i) FinFunctor
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
  (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Colimit oIndex n)
-> Colimit oIndex n -> Colimit oIndex n
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ (Cone
  c1
  m1
  o1
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
  (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Colimit oIndex n)
-> Colimit oIndex n
forall c1 m1 o1 c2 m2 o2. Cone c1 m1 o1 c2 m2 o2 -> o2
apex Cone
  c1
  m1
  o1
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
  (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Colimit oIndex n)
c)) (((Cocone
  cIndex
  mIndex
  oIndex
  (FinCat
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
-> NaturalTransformation
     cIndex
     mIndex
     oIndex
     (FinCat
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
     (FinFunctor
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
forall c1 m1 o1 c2 m2 o2.
Cocone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCocone Cocone
  cIndex
  mIndex
  oIndex
  (FinCat
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
colimitCG) NaturalTransformation
  cIndex
  mIndex
  oIndex
  (FinCat
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
-> oIndex
-> FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
NaturalTransformation c1 m1 o1 c2 m2 o2 -> o1 -> m2
=>$ oIndex
i) FinFunctor
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
  (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Colimit oIndex n)
-> NaturalTransformation
     c1
     m1
     o1
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
-> NaturalTransformation
     c1
     m1
     o1
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
forall c1 m1 o1 c2 m2 o2 m3 o3 c3.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Category c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2,
 Morphism m3 o3) =>
Diagram c2 m2 o2 c3 m3 o3
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> NaturalTransformation c1 m1 o1 c3 m3 o3
<-@<= (Cone
  c1
  m1
  o1
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
  (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Colimit oIndex n)
-> NaturalTransformation
     c1
     m1
     o1
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
forall c1 m1 o1 c2 m2 o2.
Cone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCone Cone
  c1
  m1
  o1
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
  (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Colimit oIndex n)
c))
                transformCocone :: oIndex
-> Cocone
     c1
     m1
     o1
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
-> Cocone
     c1
     m1
     o1
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
transformCocone oIndex
i Cocone
  c1
  m1
  o1
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
  (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Colimit oIndex n)
cc = Colimit oIndex n
-> NaturalTransformation
     c1
     m1
     o1
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
-> Cocone
     c1
     m1
     o1
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
forall o2 c1 m1 o1 c2 m2.
o2
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> Cocone c1 m1 o1 c2 m2 o2
unsafeCocone (((Cocone
  cIndex
  mIndex
  oIndex
  (FinCat
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
-> NaturalTransformation
     cIndex
     mIndex
     oIndex
     (FinCat
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
     (FinFunctor
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
forall c1 m1 o1 c2 m2 o2.
Cocone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCocone Cocone
  cIndex
  mIndex
  oIndex
  (FinCat
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
colimitCG) NaturalTransformation
  cIndex
  mIndex
  oIndex
  (FinCat
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
-> oIndex
-> FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
NaturalTransformation c1 m1 o1 c2 m2 o2 -> o1 -> m2
=>$ oIndex
i) FinFunctor
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
  (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Colimit oIndex n)
-> Colimit oIndex n -> Colimit oIndex n
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ (Cocone
  c1
  m1
  o1
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
  (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Colimit oIndex n)
-> Colimit oIndex n
forall c1 m1 o1 c2 m2 o2. Cocone c1 m1 o1 c2 m2 o2 -> o2
nadir Cocone
  c1
  m1
  o1
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
  (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Colimit oIndex n)
cc)) (((Cocone
  cIndex
  mIndex
  oIndex
  (FinCat
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
-> NaturalTransformation
     cIndex
     mIndex
     oIndex
     (FinCat
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
     (FinFunctor
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
forall c1 m1 o1 c2 m2 o2.
Cocone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCocone Cocone
  cIndex
  mIndex
  oIndex
  (FinCat
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
colimitCG) NaturalTransformation
  cIndex
  mIndex
  oIndex
  (FinCat
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
-> oIndex
-> FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
NaturalTransformation c1 m1 o1 c2 m2 o2 -> o1 -> m2
=>$ oIndex
i) FinFunctor
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
  (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Colimit oIndex n)
-> NaturalTransformation
     c1
     m1
     o1
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
-> NaturalTransformation
     c1
     m1
     o1
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
forall c1 m1 o1 c2 m2 o2 m3 o3 c3.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Category c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2,
 Morphism m3 o3) =>
Diagram c2 m2 o2 c3 m3 o3
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> NaturalTransformation c1 m1 o1 c3 m3 o3
<-@<=(Cocone
  c1
  m1
  o1
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
  (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Colimit oIndex n)
-> NaturalTransformation
     c1
     m1
     o1
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
forall c1 m1 o1 c2 m2 o2.
Cocone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCocone Cocone
  c1
  m1
  o1
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
  (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Colimit oIndex n)
cc))
                transformTripod :: oIndex
-> Tripod
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
-> Tripod
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
transformTripod oIndex
i Tripod
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
  (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Colimit oIndex n)
t = Cone
  DiscreteTwo
  DiscreteTwoAr
  DiscreteTwoAr
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
  (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Colimit oIndex n)
-> CGMorphism (Colimit oIndex n) (Colimit oIndex e)
-> Tripod
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
forall c m o.
Cone DiscreteTwo DiscreteTwoAr DiscreteTwoAr c m o
-> m -> Tripod c m o
unsafeTripod (oIndex
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
forall {c1} {m1} {o1}.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1) =>
oIndex
-> Cone
     c1
     m1
     o1
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
-> Cone
     c1
     m1
     o1
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
transformCone oIndex
i (Tripod
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
  (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Colimit oIndex n)
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
forall c m o.
Tripod c m o -> Cone DiscreteTwo DiscreteTwoAr DiscreteTwoAr c m o
twoCone Tripod
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
  (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Colimit oIndex n)
t)) (((Cocone
  cIndex
  mIndex
  oIndex
  (FinCat
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
-> NaturalTransformation
     cIndex
     mIndex
     oIndex
     (FinCat
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
     (FinFunctor
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
forall c1 m1 o1 c2 m2 o2.
Cocone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCocone Cocone
  cIndex
  mIndex
  oIndex
  (FinCat
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
colimitCG) NaturalTransformation
  cIndex
  mIndex
  oIndex
  (FinCat
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
-> oIndex
-> FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
NaturalTransformation c1 m1 o1 c2 m2 o2 -> o1 -> m2
=>$ oIndex
i) FinFunctor
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
  (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Colimit oIndex n)
-> CGMorphism (Colimit oIndex n) (Colimit oIndex e)
-> CGMorphism (Colimit oIndex n) (Colimit oIndex e)
forall c1 m1 o1 m2 o2 c2.
(Category c1 m1 o1, Morphism m1 o1, Morphism m2 o2, Eq m1) =>
Diagram c1 m1 o1 c2 m2 o2 -> m1 -> m2
->£ (Tripod
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
  (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Colimit oIndex n)
-> CGMorphism (Colimit oIndex n) (Colimit oIndex e)
forall c m o. Tripod c m o -> m
evalMap Tripod
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
  (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Colimit oIndex n)
t))
                nadirSketch :: Sketch (Colimit oIndex n) (Colimit oIndex e)
nadirSketch = Sketch{underlyingCategory :: CompositionGraph (Colimit oIndex n) (Colimit oIndex e)
underlyingCategory = (Cocone
  cIndex
  mIndex
  oIndex
  (FinCat
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
-> CompositionGraph (Colimit oIndex n) (Colimit oIndex e)
forall c1 m1 o1 c2 m2 o2. Cocone c1 m1 o1 c2 m2 o2 -> o2
nadir Cocone
  cIndex
  mIndex
  oIndex
  (FinCat
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
colimitCG), distinguishedCones :: Set (ConeSketch (Colimit oIndex n) (Colimit oIndex e))
distinguishedCones = [Set (ConeSketch (Colimit oIndex n) (Colimit oIndex e))]
-> Set (ConeSketch (Colimit oIndex n) (Colimit oIndex e))
forall (f :: * -> *) a. Foldable f => f (Set a) -> Set a
Set.unions [oIndex
-> ConeSketch (Colimit oIndex n) (Colimit oIndex e)
-> ConeSketch (Colimit oIndex n) (Colimit oIndex e)
forall {c1} {m1} {o1}.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1) =>
oIndex
-> Cone
     c1
     m1
     o1
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
-> Cone
     c1
     m1
     o1
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
transformCone oIndex
i (ConeSketch (Colimit oIndex n) (Colimit oIndex e)
 -> ConeSketch (Colimit oIndex n) (Colimit oIndex e))
-> Set (ConeSketch (Colimit oIndex n) (Colimit oIndex e))
-> Set (ConeSketch (Colimit oIndex n) (Colimit oIndex e))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Sketch (Colimit oIndex n) (Colimit oIndex e)
-> Set (ConeSketch (Colimit oIndex n) (Colimit oIndex e))
forall n e. Sketch n e -> Set (ConeSketch n e)
distinguishedCones (Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch (Colimit oIndex n) (Colimit oIndex e))
  (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Sketch (Colimit oIndex n) (Colimit oIndex e))
newBase Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch (Colimit oIndex n) (Colimit oIndex e))
  (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Sketch (Colimit oIndex n) (Colimit oIndex e))
-> oIndex -> Sketch (Colimit oIndex n) (Colimit oIndex e)
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ oIndex
i)| oIndex
i <- Set oIndex -> [oIndex]
forall a. Eq a => Set a -> [a]
Set.setToList (Set oIndex -> [oIndex]) -> Set oIndex -> [oIndex]
forall a b. (a -> b) -> a -> b
$ cIndex -> Set oIndex
forall c m o. FiniteCategory c m o => c -> Set o
ob (cIndex -> Set oIndex) -> cIndex -> Set oIndex
forall a b. (a -> b) -> a -> b
$ Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch (Colimit oIndex n) (Colimit oIndex e))
  (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Sketch (Colimit oIndex n) (Colimit oIndex e))
-> cIndex
forall c1 m1 o1 c2 m2 o2. Diagram c1 m1 o1 c2 m2 o2 -> c1
src Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch (Colimit oIndex n) (Colimit oIndex e))
  (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Sketch (Colimit oIndex n) (Colimit oIndex e))
newBase], distinguishedCocones :: Set (CoconeSketch (Colimit oIndex n) (Colimit oIndex e))
distinguishedCocones = [Set (CoconeSketch (Colimit oIndex n) (Colimit oIndex e))]
-> Set (CoconeSketch (Colimit oIndex n) (Colimit oIndex e))
forall (f :: * -> *) a. Foldable f => f (Set a) -> Set a
Set.unions [oIndex
-> CoconeSketch (Colimit oIndex n) (Colimit oIndex e)
-> CoconeSketch (Colimit oIndex n) (Colimit oIndex e)
forall {c1} {m1} {o1}.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1) =>
oIndex
-> Cocone
     c1
     m1
     o1
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
-> Cocone
     c1
     m1
     o1
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
transformCocone oIndex
i (CoconeSketch (Colimit oIndex n) (Colimit oIndex e)
 -> CoconeSketch (Colimit oIndex n) (Colimit oIndex e))
-> Set (CoconeSketch (Colimit oIndex n) (Colimit oIndex e))
-> Set (CoconeSketch (Colimit oIndex n) (Colimit oIndex e))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Sketch (Colimit oIndex n) (Colimit oIndex e)
-> Set (CoconeSketch (Colimit oIndex n) (Colimit oIndex e))
forall n e. Sketch n e -> Set (CoconeSketch n e)
distinguishedCocones (Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch (Colimit oIndex n) (Colimit oIndex e))
  (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Sketch (Colimit oIndex n) (Colimit oIndex e))
newBase Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch (Colimit oIndex n) (Colimit oIndex e))
  (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Sketch (Colimit oIndex n) (Colimit oIndex e))
-> oIndex -> Sketch (Colimit oIndex n) (Colimit oIndex e)
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ oIndex
i)| oIndex
i <- Set oIndex -> [oIndex]
forall a. Eq a => Set a -> [a]
Set.setToList (Set oIndex -> [oIndex]) -> Set oIndex -> [oIndex]
forall a b. (a -> b) -> a -> b
$ cIndex -> Set oIndex
forall c m o. FiniteCategory c m o => c -> Set o
ob (cIndex -> Set oIndex) -> cIndex -> Set oIndex
forall a b. (a -> b) -> a -> b
$ Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch (Colimit oIndex n) (Colimit oIndex e))
  (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Sketch (Colimit oIndex n) (Colimit oIndex e))
-> cIndex
forall c1 m1 o1 c2 m2 o2. Diagram c1 m1 o1 c2 m2 o2 -> c1
src Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch (Colimit oIndex n) (Colimit oIndex e))
  (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Sketch (Colimit oIndex n) (Colimit oIndex e))
newBase], distinguishedTripods :: Set
  (Tripod
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
distinguishedTripods = [Set
   (Tripod
      (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
      (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
      (Colimit oIndex n))]
-> Set
     (Tripod
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
forall (f :: * -> *) a. Foldable f => f (Set a) -> Set a
Set.unions [oIndex
-> Tripod
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
-> Tripod
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
transformTripod oIndex
i (Tripod
   (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
   (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
   (Colimit oIndex n)
 -> Tripod
      (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
      (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
      (Colimit oIndex n))
-> Set
     (Tripod
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
-> Set
     (Tripod
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Sketch (Colimit oIndex n) (Colimit oIndex e)
-> Set
     (Tripod
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
forall n e. Sketch n e -> Set (TripodSketch n e)
distinguishedTripods (Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch (Colimit oIndex n) (Colimit oIndex e))
  (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Sketch (Colimit oIndex n) (Colimit oIndex e))
newBase Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch (Colimit oIndex n) (Colimit oIndex e))
  (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Sketch (Colimit oIndex n) (Colimit oIndex e))
-> oIndex -> Sketch (Colimit oIndex n) (Colimit oIndex e)
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ oIndex
i)| oIndex
i <- Set oIndex -> [oIndex]
forall a. Eq a => Set a -> [a]
Set.setToList (Set oIndex -> [oIndex]) -> Set oIndex -> [oIndex]
forall a b. (a -> b) -> a -> b
$ cIndex -> Set oIndex
forall c m o. FiniteCategory c m o => c -> Set o
ob (cIndex -> Set oIndex) -> cIndex -> Set oIndex
forall a b. (a -> b) -> a -> b
$ Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch (Colimit oIndex n) (Colimit oIndex e))
  (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Sketch (Colimit oIndex n) (Colimit oIndex e))
-> cIndex
forall c1 m1 o1 c2 m2 o2. Diagram c1 m1 o1 c2 m2 o2 -> c1
src Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch (Colimit oIndex n) (Colimit oIndex e))
  (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Sketch (Colimit oIndex n) (Colimit oIndex e))
newBase]}
                newBase :: Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch (Colimit oIndex n) (Colimit oIndex e))
  (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Sketch (Colimit oIndex n) (Colimit oIndex e))
newBase = Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
-> Diagram
     (FinSketch n e)
     (SketchMorphism n e)
     (Sketch n e)
     (FinSketch (Colimit oIndex n) (Colimit oIndex e))
     (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Sketch (Colimit oIndex n) (Colimit oIndex e))
forall c m o cLim mLim oLim cIndex mIndex oIndex.
CocompleteCategory c m o cLim mLim oLim cIndex mIndex oIndex =>
Diagram cIndex mIndex oIndex c m o -> Diagram c m o cLim mLim oLim
coprojectBase Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
diagOfSketches Diagram
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
  (FinSketch (Colimit oIndex n) (Colimit oIndex e))
  (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Sketch (Colimit oIndex n) (Colimit oIndex e))
-> Diagram
     cIndex
     mIndex
     oIndex
     (FinSketch n e)
     (SketchMorphism n e)
     (Sketch n e)
-> Diagram
     cIndex
     mIndex
     oIndex
     (FinSketch (Colimit oIndex n) (Colimit oIndex e))
     (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Sketch (Colimit oIndex n) (Colimit oIndex e))
forall c1 m1 o1 c2 m2 o2 m3 o3 c3.
(Category c1 m1 o1, Morphism m1 o1, Eq m1, Category c2 m2 o2,
 Morphism m2 o2, Eq o2, Eq m2, Morphism m3 o3) =>
Diagram c2 m2 o2 c3 m3 o3
-> Diagram c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c3 m3 o3
<-@<- Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
diagOfSketches
                legs :: NaturalTransformation
  cIndex
  mIndex
  oIndex
  (FinSketch (Colimit oIndex n) (Colimit oIndex e))
  (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Sketch (Colimit oIndex n) (Colimit oIndex e))
legs = Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch (Colimit oIndex n) (Colimit oIndex e))
  (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Sketch (Colimit oIndex n) (Colimit oIndex e))
-> Diagram
     cIndex
     mIndex
     oIndex
     (FinSketch (Colimit oIndex n) (Colimit oIndex e))
     (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Sketch (Colimit oIndex n) (Colimit oIndex e))
-> Map
     oIndex (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
-> NaturalTransformation
     cIndex
     mIndex
     oIndex
     (FinSketch (Colimit oIndex n) (Colimit oIndex e))
     (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Sketch (Colimit oIndex n) (Colimit oIndex e))
forall c1 m1 o1 c2 m2 o2.
Diagram c1 m1 o1 c2 m2 o2
-> Diagram c1 m1 o1 c2 m2 o2
-> Map o1 m2
-> NaturalTransformation c1 m1 o1 c2 m2 o2
unsafeNaturalTransformation Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch (Colimit oIndex n) (Colimit oIndex e))
  (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Sketch (Colimit oIndex n) (Colimit oIndex e))
newBase (cIndex
-> FinSketch (Colimit oIndex n) (Colimit oIndex e)
-> Sketch (Colimit oIndex n) (Colimit oIndex e)
-> Diagram
     cIndex
     mIndex
     oIndex
     (FinSketch (Colimit oIndex n) (Colimit oIndex e))
     (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Sketch (Colimit oIndex n) (Colimit oIndex e))
forall c1 m1 o1 c2 m2 o2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Category c2 m2 o2,
 Morphism m2 o2) =>
c1 -> c2 -> o2 -> Diagram c1 m1 o1 c2 m2 o2
constantDiagram cIndex
indexingCategory FinSketch (Colimit oIndex n) (Colimit oIndex e)
forall n e. FinSketch n e
FinSketch Sketch (Colimit oIndex n) (Colimit oIndex e)
nadirSketch) (Set (oIndex, SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
-> Map
     oIndex (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
forall k v. Set (k, v) -> Map k v
Map.weakMapFromSet [(oIndex
i,SketchMorphism{sourceSketch :: Sketch (Colimit oIndex n) (Colimit oIndex e)
sourceSketch = Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch (Colimit oIndex n) (Colimit oIndex e))
  (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Sketch (Colimit oIndex n) (Colimit oIndex e))
newBase Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch (Colimit oIndex n) (Colimit oIndex e))
  (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Sketch (Colimit oIndex n) (Colimit oIndex e))
-> oIndex -> Sketch (Colimit oIndex n) (Colimit oIndex e)
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ oIndex
i, targetSketch :: Sketch (Colimit oIndex n) (Colimit oIndex e)
targetSketch = Sketch (Colimit oIndex n) (Colimit oIndex e)
nadirSketch, underlyingFunctor :: FinFunctor
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
  (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
  (Colimit oIndex n)
underlyingFunctor = (Cocone
  cIndex
  mIndex
  oIndex
  (FinCat
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
-> NaturalTransformation
     cIndex
     mIndex
     oIndex
     (FinCat
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
     (FinFunctor
        (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
        (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
        (Colimit oIndex n))
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
forall c1 m1 o1 c2 m2 o2.
Cocone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCocone Cocone
  cIndex
  mIndex
  oIndex
  (FinCat
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
colimitCG) NaturalTransformation
  cIndex
  mIndex
  oIndex
  (FinCat
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n))
  (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
-> oIndex
-> FinFunctor
     (CompositionGraph (Colimit oIndex n) (Colimit oIndex e))
     (CGMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Colimit oIndex n)
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
NaturalTransformation c1 m1 o1 c2 m2 o2 -> o1 -> m2
=>$ oIndex
i}) | oIndex
i <- cIndex -> Set oIndex
forall c m o. FiniteCategory c m o => c -> Set o
ob cIndex
indexingCategory])
                
        coprojectBase :: Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
-> Diagram
     (FinSketch n e)
     (SketchMorphism n e)
     (Sketch n e)
     (FinSketch (Colimit oIndex n) (Colimit oIndex e))
     (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
     (Sketch (Colimit oIndex n) (Colimit oIndex e))
coprojectBase Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
diag = Diagram{src :: FinSketch n e
src = FinSketch n e
forall n e. FinSketch n e
FinSketch, tgt :: FinSketch (Colimit oIndex n) (Colimit oIndex e)
tgt = FinSketch (Colimit oIndex n) (Colimit oIndex e)
forall n e. FinSketch n e
FinSketch, omap :: Map (Sketch n e) (Sketch (Colimit oIndex n) (Colimit oIndex e))
omap = Set (Sketch n e, Sketch (Colimit oIndex n) (Colimit oIndex e))
-> Map (Sketch n e) (Sketch (Colimit oIndex n) (Colimit oIndex e))
forall k v. Set (k, v) -> Map k v
Map.weakMapFromSet [(Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
diag Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
-> oIndex -> Sketch n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ oIndex
i,Sketch n e -> Sketch (Colimit oIndex n) (Colimit oIndex e)
forall {n} {t} {i} {i}.
(Eq n, Eq t) =>
Sketch n t -> Sketch (Colimit i n) (Colimit i t)
coprojectSketch (Sketch n e -> Sketch (Colimit oIndex n) (Colimit oIndex e))
-> Sketch n e -> Sketch (Colimit oIndex n) (Colimit oIndex e)
forall a b. (a -> b) -> a -> b
$  Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
diag Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
-> oIndex -> Sketch n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ oIndex
i) | oIndex
i <- cIndex -> Set oIndex
forall c m o. FiniteCategory c m o => c -> Set o
ob (cIndex -> Set oIndex) -> cIndex -> Set oIndex
forall a b. (a -> b) -> a -> b
$ Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
-> cIndex
forall c1 m1 o1 c2 m2 o2. Diagram c1 m1 o1 c2 m2 o2 -> c1
src Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
diag], mmap :: Map
  (SketchMorphism n e)
  (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
mmap = Set
  (SketchMorphism n e,
   SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
-> Map
     (SketchMorphism n e)
     (SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
forall k v. Set (k, v) -> Map k v
Map.weakMapFromSet [(Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
diag Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
-> mIndex -> SketchMorphism n e
forall c1 m1 o1 m2 o2 c2.
(Category c1 m1 o1, Morphism m1 o1, Morphism m2 o2, Eq m1) =>
Diagram c1 m1 o1 c2 m2 o2 -> m1 -> m2
->£ mIndex
f,SketchMorphism n e
-> SketchMorphism (Colimit oIndex n) (Colimit oIndex e)
forall {n} {t} {i} {i}.
(Eq n, Eq t) =>
SketchMorphism n t -> SketchMorphism (Colimit i n) (Colimit i t)
coprojectSketchMorphism (SketchMorphism n e
 -> SketchMorphism (Colimit oIndex n) (Colimit oIndex e))
-> SketchMorphism n e
-> SketchMorphism (Colimit oIndex n) (Colimit oIndex e)
forall a b. (a -> b) -> a -> b
$ Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
diag Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
-> mIndex -> SketchMorphism n e
forall c1 m1 o1 m2 o2 c2.
(Category c1 m1 o1, Morphism m1 o1, Morphism m2 o2, Eq m1) =>
Diagram c1 m1 o1 c2 m2 o2 -> m1 -> m2
->£ mIndex
f) | mIndex
f <- cIndex -> Set mIndex
forall c m o. (FiniteCategory c m o, Morphism m o) => c -> Set m
arrows (cIndex -> Set mIndex) -> cIndex -> Set mIndex
forall a b. (a -> b) -> a -> b
$ Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
-> cIndex
forall c1 m1 o1 c2 m2 o2. Diagram c1 m1 o1 c2 m2 o2 -> c1
src Diagram
  cIndex
  mIndex
  oIndex
  (FinSketch n e)
  (SketchMorphism n e)
  (Sketch n e)
diag]}
            where
                coprojectArrow :: Arrow n t -> Arrow (Colimit i n) (Colimit i t)
coprojectArrow Arrow n t
a = Arrow{sourceArrow :: Colimit i n
sourceArrow = n -> Colimit i n
forall i t. t -> Colimit i t
Coprojection (n -> Colimit i n) -> n -> Colimit i n
forall a b. (a -> b) -> a -> b
$ Arrow n t -> n
forall n e. Arrow n e -> n
sourceArrow Arrow n t
a, targetArrow :: Colimit i n
targetArrow = n -> Colimit i n
forall i t. t -> Colimit i t
Coprojection (n -> Colimit i n) -> n -> Colimit i n
forall a b. (a -> b) -> a -> b
$ Arrow n t -> n
forall n e. Arrow n e -> n
targetArrow Arrow n t
a, labelArrow :: Colimit i t
labelArrow = t -> Colimit i t
forall i t. t -> Colimit i t
Coprojection (t -> Colimit i t) -> t -> Colimit i t
forall a b. (a -> b) -> a -> b
$ Arrow n t -> t
forall n e. Arrow n e -> e
labelArrow Arrow n t
a}
                coprojectGraph :: Graph a t -> Graph (Colimit i a) (Colimit i t)
coprojectGraph Graph a t
g = Set (Colimit i a)
-> Set (Arrow (Colimit i a) (Colimit i t))
-> Graph (Colimit i a) (Colimit i t)
forall n e. Set n -> Set (Arrow n e) -> Graph n e
unsafeGraph ((a -> Colimit i a
forall i t. t -> Colimit i t
Coprojection) (a -> Colimit i a) -> Set a -> Set (Colimit i a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Graph a t -> Set a
forall n e. Graph n e -> Set n
nodes Graph a t
g) ((Arrow a t -> Arrow (Colimit i a) (Colimit i t)
forall {n} {t} {i} {i}.
Arrow n t -> Arrow (Colimit i n) (Colimit i t)
coprojectArrow) (Arrow a t -> Arrow (Colimit i a) (Colimit i t))
-> Set (Arrow a t) -> Set (Arrow (Colimit i a) (Colimit i t))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Graph a t -> Set (Arrow a t)
forall n e. Graph n e -> Set (Arrow n e)
edges Graph a t
g)
                coprojectLaw :: Map (f (Arrow n t)) (f (Arrow n t))
-> Map
     (f (Arrow (Colimit i n) (Colimit i t)))
     (f (Arrow (Colimit i n) (Colimit i t)))
coprojectLaw Map (f (Arrow n t)) (f (Arrow n t))
cl = Set
  (f (Arrow (Colimit i n) (Colimit i t)),
   f (Arrow (Colimit i n) (Colimit i t)))
-> Map
     (f (Arrow (Colimit i n) (Colimit i t)))
     (f (Arrow (Colimit i n) (Colimit i t)))
forall k v. Set (k, v) -> Map k v
Map.weakMapFromSet [(Arrow n t -> Arrow (Colimit i n) (Colimit i t)
forall {n} {t} {i} {i}.
Arrow n t -> Arrow (Colimit i n) (Colimit i t)
coprojectArrow (Arrow n t -> Arrow (Colimit i n) (Colimit i t))
-> f (Arrow n t) -> f (Arrow (Colimit i n) (Colimit i t))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (Arrow n t)
rp1, Arrow n t -> Arrow (Colimit i n) (Colimit i t)
forall {n} {t} {i} {i}.
Arrow n t -> Arrow (Colimit i n) (Colimit i t)
coprojectArrow (Arrow n t -> Arrow (Colimit i n) (Colimit i t))
-> f (Arrow n t) -> f (Arrow (Colimit i n) (Colimit i t))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (Arrow n t)
rp2) | (f (Arrow n t)
rp1,f (Arrow n t)
rp2) <- Map (f (Arrow n t)) (f (Arrow n t))
-> Set (f (Arrow n t), f (Arrow n t))
forall k v. Eq k => Map k v -> Set (k, v)
Map.mapToSet Map (f (Arrow n t)) (f (Arrow n t))
cl]
                coprojectCG :: CompositionGraph a t
-> CompositionGraph (Colimit i a) (Colimit i t)
coprojectCG CompositionGraph a t
cg = Graph (Colimit i a) (Colimit i t)
-> CompositionLaw (Colimit i a) (Colimit i t)
-> CompositionGraph (Colimit i a) (Colimit i t)
forall a b. Graph a b -> CompositionLaw a b -> CompositionGraph a b
unsafeCompositionGraph (Graph a t -> Graph (Colimit i a) (Colimit i t)
forall {a} {t} {i} {i}.
Graph a t -> Graph (Colimit i a) (Colimit i t)
coprojectGraph (Graph a t -> Graph (Colimit i a) (Colimit i t))
-> Graph a t -> Graph (Colimit i a) (Colimit i t)
forall a b. (a -> b) -> a -> b
$ CompositionGraph a t -> Graph a t
forall a b. CompositionGraph a b -> Graph a b
support CompositionGraph a t
cg) (Map [Arrow a t] [Arrow a t]
-> CompositionLaw (Colimit i a) (Colimit i t)
forall {f :: * -> *} {n} {t} {f :: * -> *} {n} {t} {i} {i} {i} {i}.
(Eq (f (Arrow n t)), Functor f, Functor f) =>
Map (f (Arrow n t)) (f (Arrow n t))
-> Map
     (f (Arrow (Colimit i n) (Colimit i t)))
     (f (Arrow (Colimit i n) (Colimit i t)))
coprojectLaw (Map [Arrow a t] [Arrow a t]
 -> CompositionLaw (Colimit i a) (Colimit i t))
-> Map [Arrow a t] [Arrow a t]
-> CompositionLaw (Colimit i a) (Colimit i t)
forall a b. (a -> b) -> a -> b
$ CompositionGraph a t -> Map [Arrow a t] [Arrow a t]
forall a b. CompositionGraph a b -> CompositionLaw a b
law CompositionGraph a t
cg)
                coprojectCGMorphism :: CGMorphism t t -> CGMorphism (Colimit i t) (Colimit i t)
coprojectCGMorphism CGMorphism{path :: forall a b. CGMorphism a b -> Path a b
path = (t
a, [Arrow t t]
rp),compositionLaw :: forall a b. CGMorphism a b -> CompositionLaw a b
compositionLaw = CompositionLaw t t
cl} = CGMorphism{path :: Path (Colimit i t) (Colimit i t)
path = (t -> Colimit i t
forall i t. t -> Colimit i t
Coprojection t
a, Arrow t t -> Arrow (Colimit i t) (Colimit i t)
forall {n} {t} {i} {i}.
Arrow n t -> Arrow (Colimit i n) (Colimit i t)
coprojectArrow (Arrow t t -> Arrow (Colimit i t) (Colimit i t))
-> [Arrow t t] -> [Arrow (Colimit i t) (Colimit i t)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Arrow t t]
rp), compositionLaw :: CompositionLaw (Colimit i t) (Colimit i t)
compositionLaw = CompositionLaw t t -> CompositionLaw (Colimit i t) (Colimit i t)
forall {f :: * -> *} {n} {t} {f :: * -> *} {n} {t} {i} {i} {i} {i}.
(Eq (f (Arrow n t)), Functor f, Functor f) =>
Map (f (Arrow n t)) (f (Arrow n t))
-> Map
     (f (Arrow (Colimit i n) (Colimit i t)))
     (f (Arrow (Colimit i n) (Colimit i t)))
coprojectLaw CompositionLaw t t
cl}
                coprojectDiag :: Diagram
  (CompositionGraph a t)
  (CGMorphism t t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  o2
-> Diagram
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i o1)
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i o2)
coprojectDiag Diagram
  (CompositionGraph a t)
  (CGMorphism t t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  o2
d = Diagram{src :: CompositionGraph (Colimit i a) (Colimit i t)
src = CompositionGraph a t
-> CompositionGraph (Colimit i a) (Colimit i t)
forall {a} {t} {i} {i}.
(Eq a, Eq t) =>
CompositionGraph a t
-> CompositionGraph (Colimit i a) (Colimit i t)
coprojectCG (CompositionGraph a t
 -> CompositionGraph (Colimit i a) (Colimit i t))
-> CompositionGraph a t
-> CompositionGraph (Colimit i a) (Colimit i t)
forall a b. (a -> b) -> a -> b
$ Diagram
  (CompositionGraph a t)
  (CGMorphism t t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  o2
-> CompositionGraph a t
forall c1 m1 o1 c2 m2 o2. Diagram c1 m1 o1 c2 m2 o2 -> c1
src Diagram
  (CompositionGraph a t)
  (CGMorphism t t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  o2
d, tgt :: CompositionGraph (Colimit i a) (Colimit i t)
tgt = CompositionGraph a t
-> CompositionGraph (Colimit i a) (Colimit i t)
forall {a} {t} {i} {i}.
(Eq a, Eq t) =>
CompositionGraph a t
-> CompositionGraph (Colimit i a) (Colimit i t)
coprojectCG (CompositionGraph a t
 -> CompositionGraph (Colimit i a) (Colimit i t))
-> CompositionGraph a t
-> CompositionGraph (Colimit i a) (Colimit i t)
forall a b. (a -> b) -> a -> b
$ Diagram
  (CompositionGraph a t)
  (CGMorphism t t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  o2
-> CompositionGraph a t
forall c1 m1 o1 c2 m2 o2. Diagram c1 m1 o1 c2 m2 o2 -> c2
tgt Diagram
  (CompositionGraph a t)
  (CGMorphism t t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  o2
d, omap :: Map (Colimit i o1) (Colimit i o2)
omap = (\(o1
x,o2
y) -> (o1 -> Colimit i o1
forall i t. t -> Colimit i t
Coprojection o1
x, o2 -> Colimit i o2
forall i t. t -> Colimit i t
Coprojection o2
y)) ((o1, o2) -> (Colimit i o1, Colimit i o2))
-> Map o1 o2 -> Map (Colimit i o1) (Colimit i o2)
forall k1 v1 k2 v2.
((k1, v1) -> (k2, v2)) -> Map k1 v1 -> Map k2 v2
<|$|> Diagram
  (CompositionGraph a t)
  (CGMorphism t t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  o2
-> Map o1 o2
forall c1 m1 o1 c2 m2 o2. Diagram c1 m1 o1 c2 m2 o2 -> Map o1 o2
omap Diagram
  (CompositionGraph a t)
  (CGMorphism t t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  o2
d, mmap :: Map
  (CGMorphism (Colimit i t) (Colimit i t))
  (CGMorphism (Colimit i t) (Colimit i t))
mmap = (\(CGMorphism t t
x,CGMorphism t t
y) -> (CGMorphism t t -> CGMorphism (Colimit i t) (Colimit i t)
forall {t} {t} {i} {i}.
(Eq t, Eq t) =>
CGMorphism t t -> CGMorphism (Colimit i t) (Colimit i t)
coprojectCGMorphism CGMorphism t t
x, CGMorphism t t -> CGMorphism (Colimit i t) (Colimit i t)
forall {t} {t} {i} {i}.
(Eq t, Eq t) =>
CGMorphism t t -> CGMorphism (Colimit i t) (Colimit i t)
coprojectCGMorphism CGMorphism t t
y)) ((CGMorphism t t, CGMorphism t t)
 -> (CGMorphism (Colimit i t) (Colimit i t),
     CGMorphism (Colimit i t) (Colimit i t)))
-> Map (CGMorphism t t) (CGMorphism t t)
-> Map
     (CGMorphism (Colimit i t) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
forall k1 v1 k2 v2.
((k1, v1) -> (k2, v2)) -> Map k1 v1 -> Map k2 v2
<|$|> Diagram
  (CompositionGraph a t)
  (CGMorphism t t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  o2
-> Map (CGMorphism t t) (CGMorphism t t)
forall c1 m1 o1 c2 m2 o2. Diagram c1 m1 o1 c2 m2 o2 -> Map m1 m2
mmap Diagram
  (CompositionGraph a t)
  (CGMorphism t t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  o2
d}              
                coprojectNat :: NaturalTransformation
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism o2 t)
  o2
-> NaturalTransformation
     (CompositionGraph (Colimit i o1) (Colimit i t))
     (CGMorphism (Colimit i o1) (Colimit i t))
     (Colimit i o1)
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i o2) (Colimit i t))
     (Colimit i o2)
coprojectNat NaturalTransformation
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism o2 t)
  o2
nat = Diagram
  (CompositionGraph (Colimit i o1) (Colimit i t))
  (CGMorphism (Colimit i o1) (Colimit i t))
  (Colimit i o1)
  (CompositionGraph (Colimit i a) (Colimit i t))
  (CGMorphism (Colimit i o2) (Colimit i t))
  (Colimit i o2)
-> Diagram
     (CompositionGraph (Colimit i o1) (Colimit i t))
     (CGMorphism (Colimit i o1) (Colimit i t))
     (Colimit i o1)
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i o2) (Colimit i t))
     (Colimit i o2)
-> Map (Colimit i o1) (CGMorphism (Colimit i o2) (Colimit i t))
-> NaturalTransformation
     (CompositionGraph (Colimit i o1) (Colimit i t))
     (CGMorphism (Colimit i o1) (Colimit i t))
     (Colimit i o1)
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i o2) (Colimit i t))
     (Colimit i o2)
forall c1 m1 o1 c2 m2 o2.
Diagram c1 m1 o1 c2 m2 o2
-> Diagram c1 m1 o1 c2 m2 o2
-> Map o1 m2
-> NaturalTransformation c1 m1 o1 c2 m2 o2
unsafeNaturalTransformation (Diagram
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism o2 t)
  o2
-> Diagram
     (CompositionGraph (Colimit i o1) (Colimit i t))
     (CGMorphism (Colimit i o1) (Colimit i t))
     (Colimit i o1)
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i o2) (Colimit i t))
     (Colimit i o2)
forall {a} {t} {a} {t} {t} {t} {t} {t} {o1} {o2} {i} {i} {i} {i}
       {i} {i} {i} {i} {i} {i}.
(Eq a, Eq t, Eq a, Eq t, Eq t, Eq t, Eq t, Eq t) =>
Diagram
  (CompositionGraph a t)
  (CGMorphism t t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  o2
-> Diagram
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i o1)
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i o2)
coprojectDiag (NaturalTransformation
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism o2 t)
  o2
-> Diagram
     (CompositionGraph o1 t)
     (CGMorphism o1 t)
     o1
     (CompositionGraph a t)
     (CGMorphism o2 t)
     o2
forall m o. Morphism m o => m -> o
source NaturalTransformation
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism o2 t)
  o2
nat)) (Diagram
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism o2 t)
  o2
-> Diagram
     (CompositionGraph (Colimit i o1) (Colimit i t))
     (CGMorphism (Colimit i o1) (Colimit i t))
     (Colimit i o1)
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i o2) (Colimit i t))
     (Colimit i o2)
forall {a} {t} {a} {t} {t} {t} {t} {t} {o1} {o2} {i} {i} {i} {i}
       {i} {i} {i} {i} {i} {i}.
(Eq a, Eq t, Eq a, Eq t, Eq t, Eq t, Eq t, Eq t) =>
Diagram
  (CompositionGraph a t)
  (CGMorphism t t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  o2
-> Diagram
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i o1)
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i o2)
coprojectDiag (NaturalTransformation
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism o2 t)
  o2
-> Diagram
     (CompositionGraph o1 t)
     (CGMorphism o1 t)
     o1
     (CompositionGraph a t)
     (CGMorphism o2 t)
     o2
forall m o. Morphism m o => m -> o
target NaturalTransformation
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism o2 t)
  o2
nat)) ((\(o1
x,CGMorphism o2 t
y) -> (o1 -> Colimit i o1
forall i t. t -> Colimit i t
Coprojection o1
x, CGMorphism o2 t -> CGMorphism (Colimit i o2) (Colimit i t)
forall {t} {t} {i} {i}.
(Eq t, Eq t) =>
CGMorphism t t -> CGMorphism (Colimit i t) (Colimit i t)
coprojectCGMorphism CGMorphism o2 t
y)) ((o1, CGMorphism o2 t)
 -> (Colimit i o1, CGMorphism (Colimit i o2) (Colimit i t)))
-> Map o1 (CGMorphism o2 t)
-> Map (Colimit i o1) (CGMorphism (Colimit i o2) (Colimit i t))
forall k1 v1 k2 v2.
((k1, v1) -> (k2, v2)) -> Map k1 v1 -> Map k2 v2
<|$|> NaturalTransformation
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism o2 t)
  o2
-> Map o1 (CGMorphism o2 t)
forall c1 m1 o1 c2 m2 o2.
NaturalTransformation c1 m1 o1 c2 m2 o2 -> Map o1 m2
components NaturalTransformation
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism o2 t)
  o2
nat)
                coprojectCone :: Cone
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  t
-> Cone
     (CompositionGraph (Colimit i o1) (Colimit i t))
     (CGMorphism (Colimit i o1) (Colimit i t))
     (Colimit i o1)
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i t)
coprojectCone Cone
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  t
cone = Colimit i t
-> NaturalTransformation
     (CompositionGraph (Colimit i o1) (Colimit i t))
     (CGMorphism (Colimit i o1) (Colimit i t))
     (Colimit i o1)
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i t)
-> Cone
     (CompositionGraph (Colimit i o1) (Colimit i t))
     (CGMorphism (Colimit i o1) (Colimit i t))
     (Colimit i o1)
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i t)
forall o2 c1 m1 o1 c2 m2.
o2
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> Cone c1 m1 o1 c2 m2 o2
unsafeCone (t -> Colimit i t
forall i t. t -> Colimit i t
Coprojection (t -> Colimit i t) -> t -> Colimit i t
forall a b. (a -> b) -> a -> b
$ Cone
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  t
-> t
forall c1 m1 o1 c2 m2 o2. Cone c1 m1 o1 c2 m2 o2 -> o2
apex Cone
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  t
cone) (NaturalTransformation
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  t
-> NaturalTransformation
     (CompositionGraph (Colimit i o1) (Colimit i t))
     (CGMorphism (Colimit i o1) (Colimit i t))
     (Colimit i o1)
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i t)
forall {o1} {t} {a} {t} {t} {o2} {i} {i} {i} {i} {i} {i} {i} {i}
       {i} {i}.
(Eq o1, Eq t, Eq a, Eq t, Eq t, Eq o2) =>
NaturalTransformation
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism o2 t)
  o2
-> NaturalTransformation
     (CompositionGraph (Colimit i o1) (Colimit i t))
     (CGMorphism (Colimit i o1) (Colimit i t))
     (Colimit i o1)
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i o2) (Colimit i t))
     (Colimit i o2)
coprojectNat (NaturalTransformation
   (CompositionGraph o1 t)
   (CGMorphism o1 t)
   o1
   (CompositionGraph a t)
   (CGMorphism t t)
   t
 -> NaturalTransformation
      (CompositionGraph (Colimit i o1) (Colimit i t))
      (CGMorphism (Colimit i o1) (Colimit i t))
      (Colimit i o1)
      (CompositionGraph (Colimit i a) (Colimit i t))
      (CGMorphism (Colimit i t) (Colimit i t))
      (Colimit i t))
-> NaturalTransformation
     (CompositionGraph o1 t)
     (CGMorphism o1 t)
     o1
     (CompositionGraph a t)
     (CGMorphism t t)
     t
-> NaturalTransformation
     (CompositionGraph (Colimit i o1) (Colimit i t))
     (CGMorphism (Colimit i o1) (Colimit i t))
     (Colimit i o1)
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i t)
forall a b. (a -> b) -> a -> b
$ Cone
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  t
-> NaturalTransformation
     (CompositionGraph o1 t)
     (CGMorphism o1 t)
     o1
     (CompositionGraph a t)
     (CGMorphism t t)
     t
forall c1 m1 o1 c2 m2 o2.
Cone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCone Cone
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  t
cone)
                coprojectCocone :: Cocone
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  t
-> Cocone
     (CompositionGraph (Colimit i o1) (Colimit i t))
     (CGMorphism (Colimit i o1) (Colimit i t))
     (Colimit i o1)
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i t)
coprojectCocone Cocone
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  t
cocone = Colimit i t
-> NaturalTransformation
     (CompositionGraph (Colimit i o1) (Colimit i t))
     (CGMorphism (Colimit i o1) (Colimit i t))
     (Colimit i o1)
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i t)
-> Cocone
     (CompositionGraph (Colimit i o1) (Colimit i t))
     (CGMorphism (Colimit i o1) (Colimit i t))
     (Colimit i o1)
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i t)
forall o2 c1 m1 o1 c2 m2.
o2
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> Cocone c1 m1 o1 c2 m2 o2
unsafeCocone (t -> Colimit i t
forall i t. t -> Colimit i t
Coprojection (t -> Colimit i t) -> t -> Colimit i t
forall a b. (a -> b) -> a -> b
$ Cocone
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  t
-> t
forall c1 m1 o1 c2 m2 o2. Cocone c1 m1 o1 c2 m2 o2 -> o2
nadir Cocone
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  t
cocone) (NaturalTransformation
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  t
-> NaturalTransformation
     (CompositionGraph (Colimit i o1) (Colimit i t))
     (CGMorphism (Colimit i o1) (Colimit i t))
     (Colimit i o1)
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i t)
forall {o1} {t} {a} {t} {t} {o2} {i} {i} {i} {i} {i} {i} {i} {i}
       {i} {i}.
(Eq o1, Eq t, Eq a, Eq t, Eq t, Eq o2) =>
NaturalTransformation
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism o2 t)
  o2
-> NaturalTransformation
     (CompositionGraph (Colimit i o1) (Colimit i t))
     (CGMorphism (Colimit i o1) (Colimit i t))
     (Colimit i o1)
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i o2) (Colimit i t))
     (Colimit i o2)
coprojectNat (NaturalTransformation
   (CompositionGraph o1 t)
   (CGMorphism o1 t)
   o1
   (CompositionGraph a t)
   (CGMorphism t t)
   t
 -> NaturalTransformation
      (CompositionGraph (Colimit i o1) (Colimit i t))
      (CGMorphism (Colimit i o1) (Colimit i t))
      (Colimit i o1)
      (CompositionGraph (Colimit i a) (Colimit i t))
      (CGMorphism (Colimit i t) (Colimit i t))
      (Colimit i t))
-> NaturalTransformation
     (CompositionGraph o1 t)
     (CGMorphism o1 t)
     o1
     (CompositionGraph a t)
     (CGMorphism t t)
     t
-> NaturalTransformation
     (CompositionGraph (Colimit i o1) (Colimit i t))
     (CGMorphism (Colimit i o1) (Colimit i t))
     (Colimit i o1)
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i t)
forall a b. (a -> b) -> a -> b
$ Cocone
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  t
-> NaturalTransformation
     (CompositionGraph o1 t)
     (CGMorphism o1 t)
     o1
     (CompositionGraph a t)
     (CGMorphism t t)
     t
forall c1 m1 o1 c2 m2 o2.
Cocone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCocone Cocone
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  t
cocone)
                coprojectDiag2 :: Diagram c1 m1 o1 (CompositionGraph a t) (CGMorphism t t) o2
-> Diagram
     c1
     m1
     o1
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i o2)
coprojectDiag2 Diagram c1 m1 o1 (CompositionGraph a t) (CGMorphism t t) o2
d = Diagram{src :: c1
src = Diagram c1 m1 o1 (CompositionGraph a t) (CGMorphism t t) o2 -> c1
forall c1 m1 o1 c2 m2 o2. Diagram c1 m1 o1 c2 m2 o2 -> c1
src Diagram c1 m1 o1 (CompositionGraph a t) (CGMorphism t t) o2
d, tgt :: CompositionGraph (Colimit i a) (Colimit i t)
tgt = CompositionGraph a t
-> CompositionGraph (Colimit i a) (Colimit i t)
forall {a} {t} {i} {i}.
(Eq a, Eq t) =>
CompositionGraph a t
-> CompositionGraph (Colimit i a) (Colimit i t)
coprojectCG (CompositionGraph a t
 -> CompositionGraph (Colimit i a) (Colimit i t))
-> CompositionGraph a t
-> CompositionGraph (Colimit i a) (Colimit i t)
forall a b. (a -> b) -> a -> b
$ Diagram c1 m1 o1 (CompositionGraph a t) (CGMorphism t t) o2
-> CompositionGraph a t
forall c1 m1 o1 c2 m2 o2. Diagram c1 m1 o1 c2 m2 o2 -> c2
tgt Diagram c1 m1 o1 (CompositionGraph a t) (CGMorphism t t) o2
d, omap :: Map o1 (Colimit i o2)
omap = o2 -> Colimit i o2
forall i t. t -> Colimit i t
Coprojection (o2 -> Colimit i o2) -> Map o1 o2 -> Map o1 (Colimit i o2)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Diagram c1 m1 o1 (CompositionGraph a t) (CGMorphism t t) o2
-> Map o1 o2
forall c1 m1 o1 c2 m2 o2. Diagram c1 m1 o1 c2 m2 o2 -> Map o1 o2
omap Diagram c1 m1 o1 (CompositionGraph a t) (CGMorphism t t) o2
d, mmap :: Map m1 (CGMorphism (Colimit i t) (Colimit i t))
mmap = CGMorphism t t -> CGMorphism (Colimit i t) (Colimit i t)
forall {t} {t} {i} {i}.
(Eq t, Eq t) =>
CGMorphism t t -> CGMorphism (Colimit i t) (Colimit i t)
coprojectCGMorphism (CGMorphism t t -> CGMorphism (Colimit i t) (Colimit i t))
-> Map m1 (CGMorphism t t)
-> Map m1 (CGMorphism (Colimit i t) (Colimit i t))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Diagram c1 m1 o1 (CompositionGraph a t) (CGMorphism t t) o2
-> Map m1 (CGMorphism t t)
forall c1 m1 o1 c2 m2 o2. Diagram c1 m1 o1 c2 m2 o2 -> Map m1 m2
mmap Diagram c1 m1 o1 (CompositionGraph a t) (CGMorphism t t) o2
d}    
                coprojectNat2 :: NaturalTransformation
  c1 m1 o1 (CompositionGraph a t) (CGMorphism o2 t) o2
-> NaturalTransformation
     c1
     m1
     o1
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i o2) (Colimit i t))
     (Colimit i o2)
coprojectNat2 NaturalTransformation
  c1 m1 o1 (CompositionGraph a t) (CGMorphism o2 t) o2
nat = Diagram
  c1
  m1
  o1
  (CompositionGraph (Colimit i a) (Colimit i t))
  (CGMorphism (Colimit i o2) (Colimit i t))
  (Colimit i o2)
-> Diagram
     c1
     m1
     o1
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i o2) (Colimit i t))
     (Colimit i o2)
-> Map o1 (CGMorphism (Colimit i o2) (Colimit i t))
-> NaturalTransformation
     c1
     m1
     o1
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i o2) (Colimit i t))
     (Colimit i o2)
forall c1 m1 o1 c2 m2 o2.
Diagram c1 m1 o1 c2 m2 o2
-> Diagram c1 m1 o1 c2 m2 o2
-> Map o1 m2
-> NaturalTransformation c1 m1 o1 c2 m2 o2
unsafeNaturalTransformation (Diagram c1 m1 o1 (CompositionGraph a t) (CGMorphism o2 t) o2
-> Diagram
     c1
     m1
     o1
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i o2) (Colimit i t))
     (Colimit i o2)
forall {a} {t} {t} {t} {c1} {m1} {o1} {o2} {i} {i} {i} {i} {i}.
(Eq a, Eq t, Eq t, Eq t) =>
Diagram c1 m1 o1 (CompositionGraph a t) (CGMorphism t t) o2
-> Diagram
     c1
     m1
     o1
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i o2)
coprojectDiag2 (NaturalTransformation
  c1 m1 o1 (CompositionGraph a t) (CGMorphism o2 t) o2
-> Diagram c1 m1 o1 (CompositionGraph a t) (CGMorphism o2 t) o2
forall m o. Morphism m o => m -> o
source NaturalTransformation
  c1 m1 o1 (CompositionGraph a t) (CGMorphism o2 t) o2
nat)) (Diagram c1 m1 o1 (CompositionGraph a t) (CGMorphism o2 t) o2
-> Diagram
     c1
     m1
     o1
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i o2) (Colimit i t))
     (Colimit i o2)
forall {a} {t} {t} {t} {c1} {m1} {o1} {o2} {i} {i} {i} {i} {i}.
(Eq a, Eq t, Eq t, Eq t) =>
Diagram c1 m1 o1 (CompositionGraph a t) (CGMorphism t t) o2
-> Diagram
     c1
     m1
     o1
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i o2)
coprojectDiag2 (NaturalTransformation
  c1 m1 o1 (CompositionGraph a t) (CGMorphism o2 t) o2
-> Diagram c1 m1 o1 (CompositionGraph a t) (CGMorphism o2 t) o2
forall m o. Morphism m o => m -> o
target NaturalTransformation
  c1 m1 o1 (CompositionGraph a t) (CGMorphism o2 t) o2
nat)) (CGMorphism o2 t -> CGMorphism (Colimit i o2) (Colimit i t)
forall {t} {t} {i} {i}.
(Eq t, Eq t) =>
CGMorphism t t -> CGMorphism (Colimit i t) (Colimit i t)
coprojectCGMorphism (CGMorphism o2 t -> CGMorphism (Colimit i o2) (Colimit i t))
-> Map o1 (CGMorphism o2 t)
-> Map o1 (CGMorphism (Colimit i o2) (Colimit i t))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> NaturalTransformation
  c1 m1 o1 (CompositionGraph a t) (CGMorphism o2 t) o2
-> Map o1 (CGMorphism o2 t)
forall c1 m1 o1 c2 m2 o2.
NaturalTransformation c1 m1 o1 c2 m2 o2 -> Map o1 m2
components NaturalTransformation
  c1 m1 o1 (CompositionGraph a t) (CGMorphism o2 t) o2
nat)
                coprojectCone2 :: Cone c1 m1 o1 (CompositionGraph a t) (CGMorphism t t) t
-> Cone
     c1
     m1
     o1
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i t)
coprojectCone2 Cone c1 m1 o1 (CompositionGraph a t) (CGMorphism t t) t
cone = Colimit i t
-> NaturalTransformation
     c1
     m1
     o1
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i t)
-> Cone
     c1
     m1
     o1
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i t)
forall o2 c1 m1 o1 c2 m2.
o2
-> NaturalTransformation c1 m1 o1 c2 m2 o2
-> Cone c1 m1 o1 c2 m2 o2
unsafeCone (t -> Colimit i t
forall i t. t -> Colimit i t
Coprojection (t -> Colimit i t) -> t -> Colimit i t
forall a b. (a -> b) -> a -> b
$ Cone c1 m1 o1 (CompositionGraph a t) (CGMorphism t t) t -> t
forall c1 m1 o1 c2 m2 o2. Cone c1 m1 o1 c2 m2 o2 -> o2
apex Cone c1 m1 o1 (CompositionGraph a t) (CGMorphism t t) t
cone) (NaturalTransformation
  c1 m1 o1 (CompositionGraph a t) (CGMorphism t t) t
-> NaturalTransformation
     c1
     m1
     o1
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i t)
forall {m1} {o1} {c1} {t} {t} {a} {o2} {i} {i} {i} {i} {i}.
(Morphism m1 o1, FiniteCategory c1 m1 o1, Eq o1, Eq m1, Eq c1,
 Eq t, Eq t, Eq a, Eq o2) =>
NaturalTransformation
  c1 m1 o1 (CompositionGraph a t) (CGMorphism o2 t) o2
-> NaturalTransformation
     c1
     m1
     o1
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i o2) (Colimit i t))
     (Colimit i o2)
coprojectNat2 (NaturalTransformation
   c1 m1 o1 (CompositionGraph a t) (CGMorphism t t) t
 -> NaturalTransformation
      c1
      m1
      o1
      (CompositionGraph (Colimit i a) (Colimit i t))
      (CGMorphism (Colimit i t) (Colimit i t))
      (Colimit i t))
-> NaturalTransformation
     c1 m1 o1 (CompositionGraph a t) (CGMorphism t t) t
-> NaturalTransformation
     c1
     m1
     o1
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i t)
forall a b. (a -> b) -> a -> b
$ Cone c1 m1 o1 (CompositionGraph a t) (CGMorphism t t) t
-> NaturalTransformation
     c1 m1 o1 (CompositionGraph a t) (CGMorphism t t) t
forall c1 m1 o1 c2 m2 o2.
Cone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCone Cone c1 m1 o1 (CompositionGraph a t) (CGMorphism t t) t
cone)
                coprojectTripod :: Tripod (CompositionGraph a t) (CGMorphism o t) o
-> Tripod
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i o) (Colimit i t))
     (Colimit i o)
coprojectTripod Tripod (CompositionGraph a t) (CGMorphism o t) o
tripod = Cone
  DiscreteTwo
  DiscreteTwoAr
  DiscreteTwoAr
  (CompositionGraph (Colimit i a) (Colimit i t))
  (CGMorphism (Colimit i o) (Colimit i t))
  (Colimit i o)
-> CGMorphism (Colimit i o) (Colimit i t)
-> Tripod
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i o) (Colimit i t))
     (Colimit i o)
forall c m o.
Cone DiscreteTwo DiscreteTwoAr DiscreteTwoAr c m o
-> m -> Tripod c m o
unsafeTripod (Cone
  DiscreteTwo
  DiscreteTwoAr
  DiscreteTwoAr
  (CompositionGraph a t)
  (CGMorphism o t)
  o
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i o) (Colimit i t))
     (Colimit i o)
forall {m1} {o1} {c1} {t} {t} {a} {t} {i} {i} {i} {i} {i}.
(Morphism m1 o1, FiniteCategory c1 m1 o1, Eq o1, Eq m1, Eq c1,
 Eq t, Eq t, Eq a, Eq t) =>
Cone c1 m1 o1 (CompositionGraph a t) (CGMorphism t t) t
-> Cone
     c1
     m1
     o1
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i t)
coprojectCone2 (Tripod (CompositionGraph a t) (CGMorphism o t) o
-> Cone
     DiscreteTwo
     DiscreteTwoAr
     DiscreteTwoAr
     (CompositionGraph a t)
     (CGMorphism o t)
     o
forall c m o.
Tripod c m o -> Cone DiscreteTwo DiscreteTwoAr DiscreteTwoAr c m o
twoCone Tripod (CompositionGraph a t) (CGMorphism o t) o
tripod)) (CGMorphism o t -> CGMorphism (Colimit i o) (Colimit i t)
forall {t} {t} {i} {i}.
(Eq t, Eq t) =>
CGMorphism t t -> CGMorphism (Colimit i t) (Colimit i t)
coprojectCGMorphism (Tripod (CompositionGraph a t) (CGMorphism o t) o -> CGMorphism o t
forall c m o. Tripod c m o -> m
evalMap Tripod (CompositionGraph a t) (CGMorphism o t) o
tripod))
                coprojectSketch :: Sketch n t -> Sketch (Colimit i n) (Colimit i t)
coprojectSketch Sketch n t
s = Sketch{underlyingCategory :: CategorySketch (Colimit i n) (Colimit i t)
underlyingCategory = CompositionGraph n t -> CategorySketch (Colimit i n) (Colimit i t)
forall {a} {t} {i} {i}.
(Eq a, Eq t) =>
CompositionGraph a t
-> CompositionGraph (Colimit i a) (Colimit i t)
coprojectCG (CompositionGraph n t
 -> CategorySketch (Colimit i n) (Colimit i t))
-> CompositionGraph n t
-> CategorySketch (Colimit i n) (Colimit i t)
forall a b. (a -> b) -> a -> b
$ Sketch n t -> CompositionGraph n t
forall n e. Sketch n e -> CategorySketch n e
underlyingCategory Sketch n t
s, distinguishedCocones :: Set (CoconeSketch (Colimit i n) (Colimit i t))
distinguishedCocones = Cocone
  (CompositionGraph n t)
  (CGMorphism n t)
  n
  (CompositionGraph n t)
  (CGMorphism n t)
  n
-> CoconeSketch (Colimit i n) (Colimit i t)
forall {o1} {t} {a} {t} {t} {t} {i} {i} {i} {i} {i} {i} {i} {i} {i}
       {i}.
(Eq o1, Eq t, Eq a, Eq t, Eq t, Eq t) =>
Cocone
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  t
-> Cocone
     (CompositionGraph (Colimit i o1) (Colimit i t))
     (CGMorphism (Colimit i o1) (Colimit i t))
     (Colimit i o1)
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i t)
coprojectCocone (Cocone
   (CompositionGraph n t)
   (CGMorphism n t)
   n
   (CompositionGraph n t)
   (CGMorphism n t)
   n
 -> CoconeSketch (Colimit i n) (Colimit i t))
-> Set
     (Cocone
        (CompositionGraph n t)
        (CGMorphism n t)
        n
        (CompositionGraph n t)
        (CGMorphism n t)
        n)
-> Set (CoconeSketch (Colimit i n) (Colimit i t))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Sketch n t
-> Set
     (Cocone
        (CompositionGraph n t)
        (CGMorphism n t)
        n
        (CompositionGraph n t)
        (CGMorphism n t)
        n)
forall n e. Sketch n e -> Set (CoconeSketch n e)
distinguishedCocones Sketch n t
s, distinguishedCones :: Set (ConeSketch (Colimit i n) (Colimit i t))
distinguishedCones = Cone
  (CompositionGraph n t)
  (CGMorphism n t)
  n
  (CompositionGraph n t)
  (CGMorphism n t)
  n
-> ConeSketch (Colimit i n) (Colimit i t)
forall {o1} {t} {a} {t} {t} {t} {i} {i} {i} {i} {i} {i} {i} {i} {i}
       {i}.
(Eq o1, Eq t, Eq a, Eq t, Eq t, Eq t) =>
Cone
  (CompositionGraph o1 t)
  (CGMorphism o1 t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  t
-> Cone
     (CompositionGraph (Colimit i o1) (Colimit i t))
     (CGMorphism (Colimit i o1) (Colimit i t))
     (Colimit i o1)
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i t)
coprojectCone (Cone
   (CompositionGraph n t)
   (CGMorphism n t)
   n
   (CompositionGraph n t)
   (CGMorphism n t)
   n
 -> ConeSketch (Colimit i n) (Colimit i t))
-> Set
     (Cone
        (CompositionGraph n t)
        (CGMorphism n t)
        n
        (CompositionGraph n t)
        (CGMorphism n t)
        n)
-> Set (ConeSketch (Colimit i n) (Colimit i t))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Sketch n t
-> Set
     (Cone
        (CompositionGraph n t)
        (CGMorphism n t)
        n
        (CompositionGraph n t)
        (CGMorphism n t)
        n)
forall n e. Sketch n e -> Set (ConeSketch n e)
distinguishedCones Sketch n t
s, distinguishedTripods :: Set (TripodSketch (Colimit i n) (Colimit i t))
distinguishedTripods = Tripod (CompositionGraph n t) (CGMorphism n t) n
-> TripodSketch (Colimit i n) (Colimit i t)
forall {t} {t} {a} {o} {i} {i} {i} {i} {i}.
(Eq t, Eq t, Eq a, Eq o) =>
Tripod (CompositionGraph a t) (CGMorphism o t) o
-> Tripod
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i o) (Colimit i t))
     (Colimit i o)
coprojectTripod (Tripod (CompositionGraph n t) (CGMorphism n t) n
 -> TripodSketch (Colimit i n) (Colimit i t))
-> Set (Tripod (CompositionGraph n t) (CGMorphism n t) n)
-> Set (TripodSketch (Colimit i n) (Colimit i t))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Sketch n t
-> Set (Tripod (CompositionGraph n t) (CGMorphism n t) n)
forall n e. Sketch n e -> Set (TripodSketch n e)
distinguishedTripods Sketch n t
s}
                coprojectSketchMorphism :: SketchMorphism n t -> SketchMorphism (Colimit i n) (Colimit i t)
coprojectSketchMorphism SketchMorphism n t
sm = SketchMorphism{sourceSketch :: Sketch (Colimit i n) (Colimit i t)
sourceSketch = Sketch n t -> Sketch (Colimit i n) (Colimit i t)
forall {n} {t} {i} {i}.
(Eq n, Eq t) =>
Sketch n t -> Sketch (Colimit i n) (Colimit i t)
coprojectSketch (Sketch n t -> Sketch (Colimit i n) (Colimit i t))
-> Sketch n t -> Sketch (Colimit i n) (Colimit i t)
forall a b. (a -> b) -> a -> b
$ SketchMorphism n t -> Sketch n t
forall n e. SketchMorphism n e -> Sketch n e
sourceSketch SketchMorphism n t
sm, targetSketch :: Sketch (Colimit i n) (Colimit i t)
targetSketch = Sketch n t -> Sketch (Colimit i n) (Colimit i t)
forall {n} {t} {i} {i}.
(Eq n, Eq t) =>
Sketch n t -> Sketch (Colimit i n) (Colimit i t)
coprojectSketch (Sketch n t -> Sketch (Colimit i n) (Colimit i t))
-> Sketch n t -> Sketch (Colimit i n) (Colimit i t)
forall a b. (a -> b) -> a -> b
$ SketchMorphism n t -> Sketch n t
forall n e. SketchMorphism n e -> Sketch n e
targetSketch SketchMorphism n t
sm, underlyingFunctor :: FunctorSketch (Colimit i n) (Colimit i t)
underlyingFunctor = Diagram
  (CompositionGraph n t)
  (CGMorphism n t)
  n
  (CompositionGraph n t)
  (CGMorphism n t)
  n
-> FunctorSketch (Colimit i n) (Colimit i t)
forall {a} {t} {a} {t} {t} {t} {t} {t} {o1} {o2} {i} {i} {i} {i}
       {i} {i} {i} {i} {i} {i}.
(Eq a, Eq t, Eq a, Eq t, Eq t, Eq t, Eq t, Eq t) =>
Diagram
  (CompositionGraph a t)
  (CGMorphism t t)
  o1
  (CompositionGraph a t)
  (CGMorphism t t)
  o2
-> Diagram
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i o1)
     (CompositionGraph (Colimit i a) (Colimit i t))
     (CGMorphism (Colimit i t) (Colimit i t))
     (Colimit i o2)
coprojectDiag (Diagram
   (CompositionGraph n t)
   (CGMorphism n t)
   n
   (CompositionGraph n t)
   (CGMorphism n t)
   n
 -> FunctorSketch (Colimit i n) (Colimit i t))
-> Diagram
     (CompositionGraph n t)
     (CGMorphism n t)
     n
     (CompositionGraph n t)
     (CGMorphism n t)
     n
-> FunctorSketch (Colimit i n) (Colimit i t)
forall a b. (a -> b) -> a -> b
$ SketchMorphism n t
-> Diagram
     (CompositionGraph n t)
     (CGMorphism n t)
     n
     (CompositionGraph n t)
     (CGMorphism n t)
     n
forall n e. SketchMorphism n e -> FunctorSketch n e
underlyingFunctor SketchMorphism n t
sm}


    
    -- | Returns a 'Lantern' found in a 'Sketch' if it can.
    containsLantern :: (Eq n, Eq e) => Sketch n e -> Maybe (LightConstruction n e)
    containsLantern :: forall n e.
(Eq n, Eq e) =>
Sketch n e -> Maybe (LightConstruction n e)
containsLantern Sketch n e
s = Set (LightConstruction n e) -> Maybe (LightConstruction n e)
forall a. Set a -> Maybe a
Set.setToMaybe Set (LightConstruction n e)
lanterns
        where
            lanterns :: Set (LightConstruction n e)
lanterns = [ConeSketch n e
-> ArrowSketch n e -> ArrowSketch n e -> LightConstruction n e
forall n e.
ConeSketch n e
-> CGMorphism n e -> CGMorphism n e -> LightConstruction n e
Lantern ConeSketch n e
dinstinguishedCone (CommaMorphism
  n
  One
  (ArrowSketch n e)
  One
  (NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
-> ArrowSketch n e
forall c1 m1 o1 c2 m2 o2. ConeMorphism c1 m1 o1 c2 m2 o2 -> m2
bindingMorphismCone CommaMorphism
  n
  One
  (ArrowSketch n e)
  One
  (NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
f) (CommaMorphism
  n
  One
  (ArrowSketch n e)
  One
  (NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
-> ArrowSketch n e
forall c1 m1 o1 c2 m2 o2. ConeMorphism c1 m1 o1 c2 m2 o2 -> m2
bindingMorphismCone CommaMorphism
  n
  One
  (ArrowSketch n e)
  One
  (NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
g) | ConeSketch n e
dinstinguishedCone <- Sketch n e -> Set (ConeSketch n e)
forall n e. Sketch n e -> Set (ConeSketch n e)
distinguishedCones Sketch n e
s, ConeSketch n e
cone <- ConeCategory
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Set (ConeSketch n e)
forall c m o. FiniteCategory c m o => c -> Set o
ob (Diagram
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> ConeCategory
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 FiniteCategory c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Diagram c1 m1 o1 c2 m2 o2 -> ConeCategory c1 m1 o1 c2 m2 o2
coneCategory (ConeSketch n e
-> Diagram
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2) =>
Cone c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2
baseCone ConeSketch n e
dinstinguishedCone)), CommaMorphism
  n
  One
  (ArrowSketch n e)
  One
  (NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
f <- ConeCategory
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> ConeSketch n e
-> ConeSketch n e
-> Set
     (CommaMorphism
        n
        One
        (ArrowSketch n e)
        One
        (NaturalTransformation
           (CategorySketch n e)
           (ArrowSketch n e)
           n
           (CategorySketch n e)
           (ArrowSketch n e)
           n))
forall c m o.
(Category c m o, Morphism m o) =>
c -> o -> o -> Set m
ar (Diagram
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> ConeCategory
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 FiniteCategory c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Diagram c1 m1 o1 c2 m2 o2 -> ConeCategory c1 m1 o1 c2 m2 o2
coneCategory (ConeSketch n e
-> Diagram
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2) =>
Cone c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2
baseCone ConeSketch n e
dinstinguishedCone)) ConeSketch n e
cone ConeSketch n e
dinstinguishedCone, CommaMorphism
  n
  One
  (ArrowSketch n e)
  One
  (NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
g <- ConeCategory
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> ConeSketch n e
-> ConeSketch n e
-> Set
     (CommaMorphism
        n
        One
        (ArrowSketch n e)
        One
        (NaturalTransformation
           (CategorySketch n e)
           (ArrowSketch n e)
           n
           (CategorySketch n e)
           (ArrowSketch n e)
           n))
forall c m o.
(Category c m o, Morphism m o) =>
c -> o -> o -> Set m
ar (Diagram
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> ConeCategory
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 FiniteCategory c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Diagram c1 m1 o1 c2 m2 o2 -> ConeCategory c1 m1 o1 c2 m2 o2
coneCategory (ConeSketch n e
-> Diagram
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2) =>
Cone c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2
baseCone ConeSketch n e
dinstinguishedCone)) ConeSketch n e
cone ConeSketch n e
dinstinguishedCone, CommaMorphism
  n
  One
  (ArrowSketch n e)
  One
  (NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
f CommaMorphism
  n
  One
  (ArrowSketch n e)
  One
  (NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
-> CommaMorphism
     n
     One
     (ArrowSketch n e)
     One
     (NaturalTransformation
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
-> Bool
forall a. Eq a => a -> a -> Bool
/= CommaMorphism
  n
  One
  (ArrowSketch n e)
  One
  (NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
g]
            
    
    -- | Returns a 'Spotlight' found in a 'Sketch' if it can.    
    containsSpotlight :: (Eq n, Eq e) => Sketch n e -> Maybe (LightConstruction n e)
    containsSpotlight :: forall n e.
(Eq n, Eq e) =>
Sketch n e -> Maybe (LightConstruction n e)
containsSpotlight Sketch n e
s = Set (LightConstruction n e) -> Maybe (LightConstruction n e)
forall a. Set a -> Maybe a
Set.setToMaybe Set (LightConstruction n e)
spotlights
        where
            spotlights :: Set (LightConstruction n e)
spotlights = [Cone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> n
-> n
-> Cone
     (CategorySketch n e)
     (CGMorphism n e)
     n
     (CategorySketch n e)
     (CGMorphism n e)
     n
-> LightConstruction n e
forall n e.
ConeSketch n e -> n -> n -> ConeSketch n e -> LightConstruction n e
Spotlight Cone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
dinstinguishedCone n
i n
j Cone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
cone | Cone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
dinstinguishedCone <- Sketch n e
-> Set
     (Cone
        (CategorySketch n e)
        (CGMorphism n e)
        n
        (CategorySketch n e)
        (CGMorphism n e)
        n)
forall n e. Sketch n e -> Set (ConeSketch n e)
distinguishedCones Sketch n e
s, n
i <- CategorySketch n e -> Set n
forall c m o. FiniteCategory c m o => c -> Set o
ob (Cone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> CategorySketch n e
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Cone c1 m1 o1 c2 m2 o2 -> c1
indexingCategoryCone Cone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
dinstinguishedCone), n
j <- CategorySketch n e -> Set n
forall c m o. FiniteCategory c m o => c -> Set o
ob (Cone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> CategorySketch n e
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Cone c1 m1 o1 c2 m2 o2 -> c1
indexingCategoryCone Cone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
dinstinguishedCone), n
i n -> n -> Bool
forall a. Eq a => a -> a -> Bool
/= n
j, (Cone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> NaturalTransformation
     (CategorySketch n e)
     (CGMorphism n e)
     n
     (CategorySketch n e)
     (CGMorphism n e)
     n
forall c1 m1 o1 c2 m2 o2.
Cone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCone Cone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
dinstinguishedCone) NaturalTransformation
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> n -> CGMorphism n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
NaturalTransformation c1 m1 o1 c2 m2 o2 -> o1 -> m2
=>$ n
i CGMorphism n e -> CGMorphism n e -> Bool
forall a. Eq a => a -> a -> Bool
== (Cone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> NaturalTransformation
     (CategorySketch n e)
     (CGMorphism n e)
     n
     (CategorySketch n e)
     (CGMorphism n e)
     n
forall c1 m1 o1 c2 m2 o2.
Cone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCone Cone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
dinstinguishedCone) NaturalTransformation
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> n -> CGMorphism n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
NaturalTransformation c1 m1 o1 c2 m2 o2 -> o1 -> m2
=>$ n
j, Cone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
cone <- ConeCategory
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> Set
     (Cone
        (CategorySketch n e)
        (CGMorphism n e)
        n
        (CategorySketch n e)
        (CGMorphism n e)
        n)
forall c m o. FiniteCategory c m o => c -> Set o
ob (Diagram
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> ConeCategory
     (CategorySketch n e)
     (CGMorphism n e)
     n
     (CategorySketch n e)
     (CGMorphism n e)
     n
forall c1 m1 o1 c2 m2 o2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 FiniteCategory c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Diagram c1 m1 o1 c2 m2 o2 -> ConeCategory c1 m1 o1 c2 m2 o2
coneCategory (Cone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> Diagram
     (CategorySketch n e)
     (CGMorphism n e)
     n
     (CategorySketch n e)
     (CGMorphism n e)
     n
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2) =>
Cone c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2
baseCone Cone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
dinstinguishedCone)), (Cone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> NaturalTransformation
     (CategorySketch n e)
     (CGMorphism n e)
     n
     (CategorySketch n e)
     (CGMorphism n e)
     n
forall c1 m1 o1 c2 m2 o2.
Cone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCone Cone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
cone) NaturalTransformation
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> n -> CGMorphism n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
NaturalTransformation c1 m1 o1 c2 m2 o2 -> o1 -> m2
=>$ n
i CGMorphism n e -> CGMorphism n e -> Bool
forall a. Eq a => a -> a -> Bool
/= (Cone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> NaturalTransformation
     (CategorySketch n e)
     (CGMorphism n e)
     n
     (CategorySketch n e)
     (CGMorphism n e)
     n
forall c1 m1 o1 c2 m2 o2.
Cone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCone Cone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
cone) NaturalTransformation
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> n -> CGMorphism n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
NaturalTransformation c1 m1 o1 c2 m2 o2 -> o1 -> m2
=>$ n
j]
    
    -- | Returns a 'CrescentMoon' found in a 'Sketch' if it can. 
    containsCrescentMoon :: (Eq n, Eq e) => Sketch n e -> Maybe (LightConstruction n e)
    containsCrescentMoon :: forall n e.
(Eq n, Eq e) =>
Sketch n e -> Maybe (LightConstruction n e)
containsCrescentMoon Sketch n e
s = Set (LightConstruction n e) -> Maybe (LightConstruction n e)
forall a. Set a -> Maybe a
Set.setToMaybe Set (LightConstruction n e)
crescentMoons
        where
            atLeastTwo :: Set a -> Bool
atLeastTwo Set a
x
                | Set a -> Bool
forall a. Set a -> Bool
Set.null Set a
x = Bool
False
                | Set a -> Bool
forall a. Set a -> Bool
Set.null ((a -> Bool) -> Set a -> Set a
forall a. (a -> Bool) -> Set a -> Set a
Set.filter (a -> a -> Bool
forall a. Eq a => a -> a -> Bool
/= (Set a -> a
forall a. Set a -> a
anElement Set a
x)) Set a
x) = Bool
False
                | Bool
otherwise = Bool
True
            crescentMoons :: Set (LightConstruction n e)
crescentMoons = [Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Cone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> Map n n
-> Cone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> n
-> LightConstruction n e
forall n e.
ConeSketch n e
-> ConeSketch n e
-> Map n n
-> ConeSketch n e
-> n
-> LightConstruction n e
CrescentMoon Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dc1 Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dc2 Map n n
inj Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
c n
x | Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dc1 <- Sketch n e
-> Set
     (Cone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
forall n e. Sketch n e -> Set (ConeSketch n e)
distinguishedCones Sketch n e
s, Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dc2 <- Sketch n e
-> Set
     (Cone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
forall n e. Sketch n e -> Set (ConeSketch n e)
distinguishedCones Sketch n e
s, Map n n
inj <- Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dc1 Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Cone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> Set (Map n n)
forall c1 m1 o1 c2 m2 o2 m3 o3 c3.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 FiniteCategory c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2,
 Morphism m3 o3, Eq c3, Eq m3, Eq o3) =>
Cone c1 m1 o1 c3 m3 o3 -> Cone c2 m2 o2 c3 m3 o3 -> Set (Map o1 o2)
`topInjectionsCone` Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dc2, Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
c <- ConeCategory
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Set
     (Cone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
forall c m o. FiniteCategory c m o => c -> Set o
ob (Diagram
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> ConeCategory
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 FiniteCategory c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Diagram c1 m1 o1 c2 m2 o2 -> ConeCategory c1 m1 o1 c2 m2 o2
coneCategory (Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Diagram
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2) =>
Cone c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2
baseCone Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dc1)), n
x <- CategorySketch n e -> Set n
forall c m o. FiniteCategory c m o => c -> Set o
ob (Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> CategorySketch n e
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Cone c1 m1 o1 c2 m2 o2 -> c1
indexingCategoryCone Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dc2), Bool -> Bool
not ((n -> Maybe n
forall a. a -> Maybe a
Just (n -> Maybe n) -> n -> Maybe n
forall a b. (a -> b) -> a -> b
$ (Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Diagram
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2) =>
Cone c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2
baseCone Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dc2) Diagram
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> n -> n
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ n
x) Maybe n -> Set (Maybe n) -> Bool
forall a. Eq a => a -> Set a -> Bool
`isIn` (((n -> n) -> Maybe n -> Maybe n
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Diagram
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2) =>
Cone c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2
baseCone Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dc2 Diagram
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> n -> n
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$)) (Maybe n -> Maybe n) -> Set (Maybe n) -> Set (Maybe n)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ((Map n n
inj Map n n -> n -> Maybe n
forall k v. Eq k => Map k v -> k -> Maybe v
|?|) (n -> Maybe n) -> Set n -> Set (Maybe n)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (CategorySketch n e -> Set n
forall c m o. FiniteCategory c m o => c -> Set o
ob (Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> CategorySketch n e
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Cone c1 m1 o1 c2 m2 o2 -> c1
indexingCategoryCone Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dc1))))), Set (ArrowSketch n e) -> Bool
forall {a}. Eq a => Set a -> Bool
atLeastTwo (Set (ArrowSketch n e) -> Bool) -> Set (ArrowSketch n e) -> Bool
forall a b. (a -> b) -> a -> b
$ CategorySketch n e -> n -> n -> Set (ArrowSketch n e)
forall c m o.
(Category c m o, Morphism m o) =>
c -> o -> o -> Set m
ar (Sketch n e -> CategorySketch n e
forall n e. Sketch n e -> CategorySketch n e
underlyingCategory Sketch n e
s) (Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> n
forall c1 m1 o1 c2 m2 o2. Cone c1 m1 o1 c2 m2 o2 -> o2
apex Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
c) (Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Diagram
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2) =>
Cone c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2
baseCone Cone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dc2 Diagram
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> n -> n
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ n
x)]
            

    -- | Returns a 'Colantern' found in a 'Sketch' if it can.
    containsColantern :: (Eq n, Eq e) => Sketch n e -> Maybe (LightConstruction n e)
    containsColantern :: forall n e.
(Eq n, Eq e) =>
Sketch n e -> Maybe (LightConstruction n e)
containsColantern Sketch n e
s = Set (LightConstruction n e) -> Maybe (LightConstruction n e)
forall a. Set a -> Maybe a
Set.setToMaybe Set (LightConstruction n e)
colanterns
        where
            colanterns :: Set (LightConstruction n e)
colanterns = [CoconeSketch n e
-> ArrowSketch n e -> ArrowSketch n e -> LightConstruction n e
forall n e.
CoconeSketch n e
-> CGMorphism n e -> CGMorphism n e -> LightConstruction n e
Colantern CoconeSketch n e
dinstinguishedCocone (CommaMorphism
  One
  n
  One
  (ArrowSketch n e)
  (NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
-> ArrowSketch n e
forall c1 m1 o1 c2 m2 o2. CoconeMorphism c1 m1 o1 c2 m2 o2 -> m2
bindingMorphismCocone CommaMorphism
  One
  n
  One
  (ArrowSketch n e)
  (NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
f) (CommaMorphism
  One
  n
  One
  (ArrowSketch n e)
  (NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
-> ArrowSketch n e
forall c1 m1 o1 c2 m2 o2. CoconeMorphism c1 m1 o1 c2 m2 o2 -> m2
bindingMorphismCocone CommaMorphism
  One
  n
  One
  (ArrowSketch n e)
  (NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
g) | CoconeSketch n e
dinstinguishedCocone <- Sketch n e -> Set (CoconeSketch n e)
forall n e. Sketch n e -> Set (CoconeSketch n e)
distinguishedCocones Sketch n e
s, CoconeSketch n e
cocone <- CoconeCategory
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Set (CoconeSketch n e)
forall c m o. FiniteCategory c m o => c -> Set o
ob (Diagram
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> CoconeCategory
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 FiniteCategory c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Diagram c1 m1 o1 c2 m2 o2 -> CoconeCategory c1 m1 o1 c2 m2 o2
coconeCategory (CoconeSketch n e
-> Diagram
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2) =>
Cocone c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2
baseCocone CoconeSketch n e
dinstinguishedCocone)), CommaMorphism
  One
  n
  One
  (ArrowSketch n e)
  (NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
f <- CoconeCategory
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> CoconeSketch n e
-> CoconeSketch n e
-> Set
     (CommaMorphism
        One
        n
        One
        (ArrowSketch n e)
        (NaturalTransformation
           (CategorySketch n e)
           (ArrowSketch n e)
           n
           (CategorySketch n e)
           (ArrowSketch n e)
           n))
forall c m o.
(Category c m o, Morphism m o) =>
c -> o -> o -> Set m
ar (Diagram
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> CoconeCategory
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 FiniteCategory c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Diagram c1 m1 o1 c2 m2 o2 -> CoconeCategory c1 m1 o1 c2 m2 o2
coconeCategory (CoconeSketch n e
-> Diagram
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2) =>
Cocone c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2
baseCocone CoconeSketch n e
dinstinguishedCocone)) CoconeSketch n e
dinstinguishedCocone CoconeSketch n e
cocone, CommaMorphism
  One
  n
  One
  (ArrowSketch n e)
  (NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
g <- CoconeCategory
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> CoconeSketch n e
-> CoconeSketch n e
-> Set
     (CommaMorphism
        One
        n
        One
        (ArrowSketch n e)
        (NaturalTransformation
           (CategorySketch n e)
           (ArrowSketch n e)
           n
           (CategorySketch n e)
           (ArrowSketch n e)
           n))
forall c m o.
(Category c m o, Morphism m o) =>
c -> o -> o -> Set m
ar (Diagram
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> CoconeCategory
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 FiniteCategory c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Diagram c1 m1 o1 c2 m2 o2 -> CoconeCategory c1 m1 o1 c2 m2 o2
coconeCategory (CoconeSketch n e
-> Diagram
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2) =>
Cocone c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2
baseCocone CoconeSketch n e
dinstinguishedCocone)) CoconeSketch n e
dinstinguishedCocone CoconeSketch n e
cocone, CommaMorphism
  One
  n
  One
  (ArrowSketch n e)
  (NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
f CommaMorphism
  One
  n
  One
  (ArrowSketch n e)
  (NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
-> CommaMorphism
     One
     n
     One
     (ArrowSketch n e)
     (NaturalTransformation
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
-> Bool
forall a. Eq a => a -> a -> Bool
/= CommaMorphism
  One
  n
  One
  (ArrowSketch n e)
  (NaturalTransformation
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n)
g]
            
    
    -- | Returns a 'Cospotlight' found in a 'Sketch' if it can.    
    containsCospotlight :: (Eq n, Eq e) => Sketch n e -> Maybe (LightConstruction n e)
    containsCospotlight :: forall n e.
(Eq n, Eq e) =>
Sketch n e -> Maybe (LightConstruction n e)
containsCospotlight Sketch n e
s = Set (LightConstruction n e) -> Maybe (LightConstruction n e)
forall a. Set a -> Maybe a
Set.setToMaybe Set (LightConstruction n e)
cospotlights
        where
            cospotlights :: Set (LightConstruction n e)
cospotlights = [Cocone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> n
-> n
-> Cocone
     (CategorySketch n e)
     (CGMorphism n e)
     n
     (CategorySketch n e)
     (CGMorphism n e)
     n
-> LightConstruction n e
forall n e.
CoconeSketch n e
-> n -> n -> CoconeSketch n e -> LightConstruction n e
Cospotlight Cocone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
dinstinguishedCocone n
i n
j Cocone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
cocone | Cocone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
dinstinguishedCocone <- Sketch n e
-> Set
     (Cocone
        (CategorySketch n e)
        (CGMorphism n e)
        n
        (CategorySketch n e)
        (CGMorphism n e)
        n)
forall n e. Sketch n e -> Set (CoconeSketch n e)
distinguishedCocones Sketch n e
s, n
i <- CategorySketch n e -> Set n
forall c m o. FiniteCategory c m o => c -> Set o
ob (Cocone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> CategorySketch n e
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Cocone c1 m1 o1 c2 m2 o2 -> c1
indexingCategoryCocone Cocone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
dinstinguishedCocone), n
j <- CategorySketch n e -> Set n
forall c m o. FiniteCategory c m o => c -> Set o
ob (Cocone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> CategorySketch n e
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Cocone c1 m1 o1 c2 m2 o2 -> c1
indexingCategoryCocone Cocone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
dinstinguishedCocone), n
i n -> n -> Bool
forall a. Eq a => a -> a -> Bool
/= n
j, (Cocone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> NaturalTransformation
     (CategorySketch n e)
     (CGMorphism n e)
     n
     (CategorySketch n e)
     (CGMorphism n e)
     n
forall c1 m1 o1 c2 m2 o2.
Cocone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCocone Cocone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
dinstinguishedCocone) NaturalTransformation
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> n -> CGMorphism n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
NaturalTransformation c1 m1 o1 c2 m2 o2 -> o1 -> m2
=>$ n
i CGMorphism n e -> CGMorphism n e -> Bool
forall a. Eq a => a -> a -> Bool
== (Cocone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> NaturalTransformation
     (CategorySketch n e)
     (CGMorphism n e)
     n
     (CategorySketch n e)
     (CGMorphism n e)
     n
forall c1 m1 o1 c2 m2 o2.
Cocone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCocone Cocone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
dinstinguishedCocone) NaturalTransformation
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> n -> CGMorphism n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
NaturalTransformation c1 m1 o1 c2 m2 o2 -> o1 -> m2
=>$ n
j, Cocone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
cocone <- CoconeCategory
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> Set
     (Cocone
        (CategorySketch n e)
        (CGMorphism n e)
        n
        (CategorySketch n e)
        (CGMorphism n e)
        n)
forall c m o. FiniteCategory c m o => c -> Set o
ob (Diagram
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> CoconeCategory
     (CategorySketch n e)
     (CGMorphism n e)
     n
     (CategorySketch n e)
     (CGMorphism n e)
     n
forall c1 m1 o1 c2 m2 o2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 FiniteCategory c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Diagram c1 m1 o1 c2 m2 o2 -> CoconeCategory c1 m1 o1 c2 m2 o2
coconeCategory (Cocone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> Diagram
     (CategorySketch n e)
     (CGMorphism n e)
     n
     (CategorySketch n e)
     (CGMorphism n e)
     n
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2) =>
Cocone c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2
baseCocone Cocone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
dinstinguishedCocone)), (Cocone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> NaturalTransformation
     (CategorySketch n e)
     (CGMorphism n e)
     n
     (CategorySketch n e)
     (CGMorphism n e)
     n
forall c1 m1 o1 c2 m2 o2.
Cocone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCocone Cocone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
cocone) NaturalTransformation
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> n -> CGMorphism n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
NaturalTransformation c1 m1 o1 c2 m2 o2 -> o1 -> m2
=>$ n
i CGMorphism n e -> CGMorphism n e -> Bool
forall a. Eq a => a -> a -> Bool
/= (Cocone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> NaturalTransformation
     (CategorySketch n e)
     (CGMorphism n e)
     n
     (CategorySketch n e)
     (CGMorphism n e)
     n
forall c1 m1 o1 c2 m2 o2.
Cocone c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2
legsCocone Cocone
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
cocone) NaturalTransformation
  (CategorySketch n e)
  (CGMorphism n e)
  n
  (CategorySketch n e)
  (CGMorphism n e)
  n
-> n -> CGMorphism n e
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
NaturalTransformation c1 m1 o1 c2 m2 o2 -> o1 -> m2
=>$ n
j]
    
    -- | Returns a 'CocrescentMoon' found in a 'Sketch' if it can. 
    containsCocrescentMoon :: (Eq n, Eq e) => Sketch n e -> Maybe (LightConstruction n e)
    containsCocrescentMoon :: forall n e.
(Eq n, Eq e) =>
Sketch n e -> Maybe (LightConstruction n e)
containsCocrescentMoon Sketch n e
s = Set (LightConstruction n e) -> Maybe (LightConstruction n e)
forall a. Set a -> Maybe a
Set.setToMaybe Set (LightConstruction n e)
cocrescentMoons
        where
            atLeastTwo :: Set a -> Bool
atLeastTwo Set a
x
                | Set a -> Bool
forall a. Set a -> Bool
Set.null Set a
x = Bool
False
                | Set a -> Bool
forall a. Set a -> Bool
Set.null ((a -> Bool) -> Set a -> Set a
forall a. (a -> Bool) -> Set a -> Set a
Set.filter (a -> a -> Bool
forall a. Eq a => a -> a -> Bool
/= (Set a -> a
forall a. Set a -> a
anElement Set a
x)) Set a
x) = Bool
False
                | Bool
otherwise = Bool
True
            cocrescentMoons :: Set (LightConstruction n e)
cocrescentMoons = [Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Cocone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> Map n n
-> Cocone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> n
-> LightConstruction n e
forall n e.
CoconeSketch n e
-> CoconeSketch n e
-> Map n n
-> CoconeSketch n e
-> n
-> LightConstruction n e
CocrescentMoon Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dcc1 Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dcc2 Map n n
inj Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
cc n
x | Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dcc1 <- Sketch n e
-> Set
     (Cocone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
forall n e. Sketch n e -> Set (CoconeSketch n e)
distinguishedCocones Sketch n e
s, Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dcc2 <- Sketch n e
-> Set
     (Cocone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
forall n e. Sketch n e -> Set (CoconeSketch n e)
distinguishedCocones Sketch n e
s, Map n n
inj <- Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dcc1 Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Cocone
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
-> Set (Map n n)
forall c1 m1 o1 c2 m2 o2 m3 o3 c3.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 FiniteCategory c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2,
 Morphism m3 o3, Eq c3, Eq m3, Eq o3) =>
Cocone c1 m1 o1 c3 m3 o3
-> Cocone c2 m2 o2 c3 m3 o3 -> Set (Map o1 o2)
`bottomInjectionsCocone` Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dcc2, Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
cc <- CoconeCategory
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Set
     (Cocone
        (CategorySketch n e)
        (ArrowSketch n e)
        n
        (CategorySketch n e)
        (ArrowSketch n e)
        n)
forall c m o. FiniteCategory c m o => c -> Set o
ob (Diagram
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> CoconeCategory
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 c2 m2 o2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 FiniteCategory c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Diagram c1 m1 o1 c2 m2 o2 -> CoconeCategory c1 m1 o1 c2 m2 o2
coconeCategory (Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Diagram
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2) =>
Cocone c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2
baseCocone Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dcc1)), n
x <- CategorySketch n e -> Set n
forall c m o. FiniteCategory c m o => c -> Set o
ob (Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> CategorySketch n e
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Cocone c1 m1 o1 c2 m2 o2 -> c1
indexingCategoryCocone Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dcc2), Bool -> Bool
not ((n -> Maybe n
forall a. a -> Maybe a
Just (n -> Maybe n) -> n -> Maybe n
forall a b. (a -> b) -> a -> b
$ (Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Diagram
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2) =>
Cocone c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2
baseCocone Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dcc2) Diagram
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> n -> n
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ n
x) Maybe n -> Set (Maybe n) -> Bool
forall a. Eq a => a -> Set a -> Bool
`isIn` (((n -> n) -> Maybe n -> Maybe n
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Diagram
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2) =>
Cocone c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2
baseCocone Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dcc2 Diagram
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> n -> n
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$)) (Maybe n -> Maybe n) -> Set (Maybe n) -> Set (Maybe n)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ((Map n n
inj Map n n -> n -> Maybe n
forall k v. Eq k => Map k v -> k -> Maybe v
|?|) (n -> Maybe n) -> Set n -> Set (Maybe n)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (CategorySketch n e -> Set n
forall c m o. FiniteCategory c m o => c -> Set o
ob (Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> CategorySketch n e
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2, Eq c2, Eq m2, Eq o2) =>
Cocone c1 m1 o1 c2 m2 o2 -> c1
indexingCategoryCocone Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dcc1))))), Set (ArrowSketch n e) -> Bool
forall {a}. Eq a => Set a -> Bool
atLeastTwo (Set (ArrowSketch n e) -> Bool) -> Set (ArrowSketch n e) -> Bool
forall a b. (a -> b) -> a -> b
$ CategorySketch n e -> n -> n -> Set (ArrowSketch n e)
forall c m o.
(Category c m o, Morphism m o) =>
c -> o -> o -> Set m
ar (Sketch n e -> CategorySketch n e
forall n e. Sketch n e -> CategorySketch n e
underlyingCategory Sketch n e
s) (Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> Diagram
     (CategorySketch n e)
     (ArrowSketch n e)
     n
     (CategorySketch n e)
     (ArrowSketch n e)
     n
forall c1 m1 o1 m2 o2 c2.
(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
 Morphism m2 o2) =>
Cocone c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2
baseCocone Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
dcc2 Diagram
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> n -> n
forall o1 c1 m1 c2 m2 o2.
Eq o1 =>
Diagram c1 m1 o1 c2 m2 o2 -> o1 -> o2
->$ n
x) (Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
-> n
forall c1 m1 o1 c2 m2 o2. Cocone c1 m1 o1 c2 m2 o2 -> o2
nadir Cocone
  (CategorySketch n e)
  (ArrowSketch n e)
  n
  (CategorySketch n e)
  (ArrowSketch n e)
  n
cc)]
            
    
    -- | A 'LightConstruction' is either a 'Lantern', a 'Spotlight', a 'CrescentMoon', a 'Colantern', a 'Cospotlight' or a 'CocrescentMoon'.
    --
    -- A 'Lantern' is a distinguished cone c1, and two different morphisms m1 m2 such that c1 precomposed with m1 and m2 yield the same cone.
    --
    -- A 'Spotlight' is a distinguished cone c1, two different indexing objects o1 o2 and a cone c2 such that the legs of c1 at index o1 and o2 are equal and the legs of c2 at index o1 and o2 are different.
    --
    -- A 'CrescentMoon' is a distinguished cone c1, a distinguished cone c2 such that c1 is contained in c2, a cone c with same base as c1, an indexing object x of the base of c2 not in the base of c1 such that there are at least two arrows from the apex of c to x. 
    --
    -- A 'Colantern' is a distinguished cocone c1, and two different morphisms m1 m2 such that c1 postcomposed with m1 and m2 yield the same cocone.
    --
    -- A 'Cospotlight' is a distinguished cocone c1, two different indexing objects o1 o2 and a cocone c2 such that the legs of c1 at index o1 and o2 are equal and the legs of c2 at index o1 and o2 are different.
    --
    -- A 'CocrescentMoon' is a distinguished cocone c1, a distinguished cocone c2 such that c1 is contained in c2, a cocone c with same base as c1, an indexing object x of the base of c2 not in the base of c1 such that there are at least two arrows from x to the nadir of c.
    data LightConstruction n e = 
        Lantern (ConeSketch n e) (CGMorphism n e) (CGMorphism n e) |
        Spotlight (ConeSketch n e) n n (ConeSketch n e) |
        CrescentMoon (ConeSketch n e) (ConeSketch n e) (Map n n) (ConeSketch n e) n |
        Colantern (CoconeSketch n e) (CGMorphism n e) (CGMorphism n e) |
        Cospotlight (CoconeSketch n e) n n (CoconeSketch n e) |
        CocrescentMoon (CoconeSketch n e) (CoconeSketch n e) (Map n n) (CoconeSketch n e) n
        deriving (LightConstruction n e -> LightConstruction n e -> Bool
(LightConstruction n e -> LightConstruction n e -> Bool)
-> (LightConstruction n e -> LightConstruction n e -> Bool)
-> Eq (LightConstruction n e)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall n e.
(Eq e, Eq n) =>
LightConstruction n e -> LightConstruction n e -> Bool
$c== :: forall n e.
(Eq e, Eq n) =>
LightConstruction n e -> LightConstruction n e -> Bool
== :: LightConstruction n e -> LightConstruction n e -> Bool
$c/= :: forall n e.
(Eq e, Eq n) =>
LightConstruction n e -> LightConstruction n e -> Bool
/= :: LightConstruction n e -> LightConstruction n e -> Bool
Eq, Int -> LightConstruction n e -> ShowS
[LightConstruction n e] -> ShowS
LightConstruction n e -> [Char]
(Int -> LightConstruction n e -> ShowS)
-> (LightConstruction n e -> [Char])
-> ([LightConstruction n e] -> ShowS)
-> Show (LightConstruction n e)
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
forall n e.
(Show e, Show n) =>
Int -> LightConstruction n e -> ShowS
forall n e. (Show e, Show n) => [LightConstruction n e] -> ShowS
forall n e. (Show e, Show n) => LightConstruction n e -> [Char]
$cshowsPrec :: forall n e.
(Show e, Show n) =>
Int -> LightConstruction n e -> ShowS
showsPrec :: Int -> LightConstruction n e -> ShowS
$cshow :: forall n e. (Show e, Show n) => LightConstruction n e -> [Char]
show :: LightConstruction n e -> [Char]
$cshowList :: forall n e. (Show e, Show n) => [LightConstruction n e] -> ShowS
showList :: [LightConstruction n e] -> ShowS
Show, (forall x. LightConstruction n e -> Rep (LightConstruction n e) x)
-> (forall x.
    Rep (LightConstruction n e) x -> LightConstruction n e)
-> Generic (LightConstruction n e)
forall x. Rep (LightConstruction n e) x -> LightConstruction n e
forall x. LightConstruction n e -> Rep (LightConstruction n e) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall n e x.
Rep (LightConstruction n e) x -> LightConstruction n e
forall n e x.
LightConstruction n e -> Rep (LightConstruction n e) x
$cfrom :: forall n e x.
LightConstruction n e -> Rep (LightConstruction n e) x
from :: forall x. LightConstruction n e -> Rep (LightConstruction n e) x
$cto :: forall n e x.
Rep (LightConstruction n e) x -> LightConstruction n e
to :: forall x. Rep (LightConstruction n e) x -> LightConstruction n e
Generic, Int -> Int -> [Char] -> LightConstruction n e -> [Char]
Int -> LightConstruction n e -> [Char]
(Int -> LightConstruction n e -> [Char])
-> (Int -> Int -> [Char] -> LightConstruction n e -> [Char])
-> (Int -> LightConstruction n e -> [Char])
-> PrettyPrint (LightConstruction n e)
forall a.
(Int -> a -> [Char])
-> (Int -> Int -> [Char] -> a -> [Char])
-> (Int -> a -> [Char])
-> PrettyPrint a
forall n e.
(PrettyPrint n, PrettyPrint e, Eq e, Eq n) =>
Int -> Int -> [Char] -> LightConstruction n e -> [Char]
forall n e.
(PrettyPrint n, PrettyPrint e, Eq e, Eq n) =>
Int -> LightConstruction n e -> [Char]
$cpprint :: forall n e.
(PrettyPrint n, PrettyPrint e, Eq e, Eq n) =>
Int -> LightConstruction n e -> [Char]
pprint :: Int -> LightConstruction n e -> [Char]
$cpprintWithIndentations :: forall n e.
(PrettyPrint n, PrettyPrint e, Eq e, Eq n) =>
Int -> Int -> [Char] -> LightConstruction n e -> [Char]
pprintWithIndentations :: Int -> Int -> [Char] -> LightConstruction n e -> [Char]
$cpprintIndent :: forall n e.
(PrettyPrint n, PrettyPrint e, Eq e, Eq n) =>
Int -> LightConstruction n e -> [Char]
pprintIndent :: Int -> LightConstruction n e -> [Char]
PrettyPrint, LightConstruction n e -> LightConstruction n e
(LightConstruction n e -> LightConstruction n e)
-> Simplifiable (LightConstruction n e)
forall a. (a -> a) -> Simplifiable a
forall n e.
(Simplifiable n, Simplifiable e, Eq e, Eq n) =>
LightConstruction n e -> LightConstruction n e
$csimplify :: forall n e.
(Simplifiable n, Simplifiable e, Eq e, Eq n) =>
LightConstruction n e -> LightConstruction n e
simplify :: LightConstruction n e -> LightConstruction n e
Simplifiable) 
    
    containsLightConstruction :: (Eq n, Eq e) => Sketch n e -> Maybe (LightConstruction n e)
    containsLightConstruction :: forall n e.
(Eq n, Eq e) =>
Sketch n e -> Maybe (LightConstruction n e)
containsLightConstruction Sketch n e
s
        | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (LightConstruction n e) -> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Maybe (LightConstruction n e) -> Bool)
-> Maybe (LightConstruction n e) -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (LightConstruction n e)
lant = Maybe (LightConstruction n e)
lant
        | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (LightConstruction n e) -> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Maybe (LightConstruction n e) -> Bool)
-> Maybe (LightConstruction n e) -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (LightConstruction n e)
spot = Maybe (LightConstruction n e)
spot
        | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (LightConstruction n e) -> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Maybe (LightConstruction n e) -> Bool)
-> Maybe (LightConstruction n e) -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (LightConstruction n e)
moon = Maybe (LightConstruction n e)
moon
        | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (LightConstruction n e) -> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Maybe (LightConstruction n e) -> Bool)
-> Maybe (LightConstruction n e) -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (LightConstruction n e)
colant = Maybe (LightConstruction n e)
colant
        | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (LightConstruction n e) -> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Maybe (LightConstruction n e) -> Bool)
-> Maybe (LightConstruction n e) -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (LightConstruction n e)
cospot = Maybe (LightConstruction n e)
cospot
        | Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (LightConstruction n e) -> Bool
forall a. Maybe a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Maybe (LightConstruction n e) -> Bool)
-> Maybe (LightConstruction n e) -> Bool
forall a b. (a -> b) -> a -> b
$ Maybe (LightConstruction n e)
comoon = Maybe (LightConstruction n e)
comoon
        | Bool
otherwise = Maybe (LightConstruction n e)
forall a. Maybe a
Nothing
        where
            lant :: Maybe (LightConstruction n e)
lant = Sketch n e -> Maybe (LightConstruction n e)
forall n e.
(Eq n, Eq e) =>
Sketch n e -> Maybe (LightConstruction n e)
containsLantern Sketch n e
s
            spot :: Maybe (LightConstruction n e)
spot = Sketch n e -> Maybe (LightConstruction n e)
forall n e.
(Eq n, Eq e) =>
Sketch n e -> Maybe (LightConstruction n e)
containsSpotlight Sketch n e
s
            moon :: Maybe (LightConstruction n e)
moon = Sketch n e -> Maybe (LightConstruction n e)
forall n e.
(Eq n, Eq e) =>
Sketch n e -> Maybe (LightConstruction n e)
containsCrescentMoon Sketch n e
s
            colant :: Maybe (LightConstruction n e)
colant = Sketch n e -> Maybe (LightConstruction n e)
forall n e.
(Eq n, Eq e) =>
Sketch n e -> Maybe (LightConstruction n e)
containsColantern Sketch n e
s
            cospot :: Maybe (LightConstruction n e)
cospot = Sketch n e -> Maybe (LightConstruction n e)
forall n e.
(Eq n, Eq e) =>
Sketch n e -> Maybe (LightConstruction n e)
containsCospotlight Sketch n e
s
            comoon :: Maybe (LightConstruction n e)
comoon = Sketch n e -> Maybe (LightConstruction n e)
forall n e.
(Eq n, Eq e) =>
Sketch n e -> Maybe (LightConstruction n e)
containsCocrescentMoon Sketch n e
s
            
            
    
    -- -- | Return all binding morphisms from a cone to another cone with same base. If the two cones have different base, return an empty set.
    -- factorsCone :: (FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
                    -- FiniteCategory c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2) => 
        -- Cone c1 m1 o1 c2 m2 o2 -> Cone c1 m1 o1 c2 m2 o2 -> Set m2
    -- factorsCone c1 c2
        -- | baseCone c1 /= baseCone c2 = set []
        -- | otherwise = [bindingMorphismCone f | f <- ar (coneCategory (baseCone c1)) c1 c2]
        
    -- -- | Return all binding morphisms from a cocone to another cocone with same base. If the two cocones have different base, return an empty set.
    -- factorsCocone :: (FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
                      -- FiniteCategory c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2) => 
        -- Cocone c1 m1 o1 c2 m2 o2 -> Cocone c1 m1 o1 c2 m2 o2 -> Set m2
    -- factorsCocone c1 c2
        -- | baseCocone c1 /= baseCocone c2 = set []
        -- | otherwise = [bindingMorphismCocone f | f <- ar (coconeCategory (baseCocone c1)) c1 c2]
        
    
    -- -- | Given a cone c1, return all cones c2 with same base as c1 with no factor from c1 to c2.
    -- lonelyCones :: (FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
                    -- FiniteCategory c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2) => 
        -- Cone c1 m1 o1 c2 m2 o2 -> Set (Cone c1 m1 o1 c2 m2 o2)
    -- lonelyCones c1 = [c2 | c2 <- ob (coneCategory (baseCone c1)), Set.null (factorsCone c2 c1)]
    
    -- -- | Given a cocone c1, return all cocones c2 with same base as c1 with no factor from c2 to c1.
    -- lonelyCocones :: (FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
                      -- FiniteCategory c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2) => 
        -- Cocone c1 m1 o1 c2 m2 o2 -> Set (Cocone c1 m1 o1 c2 m2 o2)
    -- lonelyCocones c1 = [c2 | c2 <- ob (coconeCategory (baseCocone c1)), Set.null (factorsCocone c1 c2)]
    
    -- -- | Return wether a set has at least two elements.
    -- atLeastTwoElement :: (Eq a) => Set a -> Bool
    -- atLeastTwoElement s = (not $ Set.null s) && (Set.or ((anElement s /=) <$> s))
    
    -- -- | Given a cone c1, return all cones c2 with same base as c1 with two or more factors from c1 to c2.
    -- crowdedCones :: (FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
                     -- FiniteCategory c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2) => 
        -- Cone c1 m1 o1 c2 m2 o2 -> Set (Cone c1 m1 o1 c2 m2 o2)
    -- crowdedCones c1 = [c2 | c2 <- ob (coneCategory (baseCone c1)), atLeastTwoElement (factorsCone c2 c1)]
    
    -- -- | Given a cocone c1, return all cocones c2 with same base as c1 with two or more factors from c2 to c1.
    -- crowdedCocones :: (FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1,
                       -- FiniteCategory c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2) => 
        -- Cocone c1 m1 o1 c2 m2 o2 -> Set (Cocone c1 m1 o1 c2 m2 o2)
    -- crowdedCocones c1 = [c2 | c2 <- ob (coconeCategory (baseCocone c1)), atLeastTwoElement (factorsCocone c1 c2)]
    
    -- createLonelyConeCorrectionArrow :: (ConeSketch n e -> ConeSketch n e -> e) -> ConeSketch n e -> ConeSketch n e -> Arrow n e
    -- createLonelyConeCorrectionArrow createEdge dc lc = Arrow{sourceArrow = apex lc, targetArrow = apex dc, labelArrow = createEdge dc lc}
    
    -- createLonelyCoconeCorrectionArrow :: (CoconeSketch n e -> CoconeSketch n e -> e) -> CoconeSketch n e -> CoconeSketch n e -> Arrow n e
    -- createLonelyCoconeCorrectionArrow createEdge dcc lcc = Arrow{sourceArrow = nadir dcc, targetArrow = nadir lcc, labelArrow = createEdge dcc lcc}
    
    -- -- | Add lonely cone and cocone correction arrows to a 'Sketch', return the insertion 'SketchMorphism' from the original 'Sketch' to the new 'Sketch'.
    -- addLonelinessCorrectionArrows :: (Eq n, Eq e) => (ConeSketch n e -> ConeSketch n e -> e) -> (CoconeSketch n e -> CoconeSketch n e -> e) -> Sketch n e -> SketchMorphism n e
    -- addLonelinessCorrectionArrows createEdgeCone createEdgeCocone s = SketchMorphism{sourceSketch = s, targetSketch = newSketch, underlyingFunctor = insertionFunctor}
        -- where
            -- originalCg = underlyingCategory s
            -- newCg = unsafeCompositionGraph (unsafeGraph (ob originalCg) ((edges (support originalCg)) ||| [createLonelyConeCorrectionArrow createEdgeCone dc lc | dc <- distinguishedCones s, lc <- lonelyCones dc] ||| [createLonelyCoconeCorrectionArrow createEdgeCocone dcc lcc | dcc <- distinguishedCocones s, lcc <- lonelyCocones dcc] )) (law originalCg)
            -- insertionFunctor = Diagram{src = originalCg, tgt = newCg, omap = memorizeFunction id (ob originalCg), mmap = memorizeFunction id (arrows originalCg)}
            -- newSketch = Sketch{underlyingCategory = newCg, distinguishedCones = distinguishedCones s, distinguishedCocones = distinguishedCocones s, distinguishedTripods = distinguishedTripods s}
            
    -- -- -- -- -- | Quotient arrows in the free category generated by the new graph. Return the quotient morphism.
    -- -- -- -- quotientArrows :: (Eq e, Eq n) => (ConeSketch n e -> ConeSketch n e -> e) -> (CoconeSketch n e -> CoconeSketch n e -> e) -> Sketch n e -> SketchMorphism n e
    -- -- -- -- quotientArrows createEdgeCone createEdgeCocone s = SketchMorphism{sourceSketch = s, targetSketch = newSketch, underlyingFunctor = quotientFunctor}
        -- -- -- -- where
            -- -- -- -- originalCg = underlyingCategory s
            -- -- -- -- rLonelyCones = Map.weakMapFromSet [((snd.path $ (legsCone dc) =>$ x)++[createLonelyConeCorrectionArrow createEdgeCone dc lc],(snd.path $ (legsCone lc) =>$ x)) | dc <- distinguishedCones s, lc <- lonelyCones dc, x <- ob (indexingCategoryCone dc)]
            -- -- -- -- rLonelyCocones = Map.weakMapFromSet [([createLonelyCoconeCorrectionArrow createEdgeCocone dcc lcc] ++ (snd.path $ (legsCocone dcc) =>$ x),(snd.path $ (legsCocone lcc) =>$ x)) | dcc <- distinguishedCocones s, lcc <- lonelyCocones dcc, x <- ob (indexingCategoryCocone dcc)]
            -- -- -- -- bestFactor factors = Set.minimumBy (\f g -> (length.snd.path $ f) `compare` (length.snd.path $ g)) factors
            -- -- -- -- rCrowdedCones = Map.weakMapFromSet [((snd.path $ f), (snd.path $ bestFactor (factorsCone cc dc)))| dc <- distinguishedCones s, cc <- crowdedCones dc, f <- factorsCone cc dc, f /= bestFactor (factorsCone cc dc)]
            -- -- -- -- rCrowdedCocones = Map.weakMapFromSet [((snd.path $ f), (snd.path $ bestFactor (factorsCocone dcc ccc)))| dcc <- distinguishedCocones s, ccc <- crowdedCocones dcc, f <- factorsCocone dcc ccc, f /= bestFactor (factorsCocone dcc ccc)]
            -- -- -- -- newLaw = rCrowdedCocones `Map.union` rCrowdedCones `Map.union` rLonelyCocones `Map.union` rLonelyCones -- `Map.union` (law originalCg)
            
            
            
            -- newCg = unsafeCompositionGraph (support originalCg) newLaw
            -- transformCGMorphism m
                -- | isIdentity originalCg m = identity newCg (source m)
                -- | otherwise = compose $ (unsafeArrowToCGMorphism newCg) <$> (snd $ path m) 
            -- quotientFunctor = Diagram{src = originalCg, tgt = newCg, omap = memorizeFunction id (ob originalCg), mmap = memorizeFunction transformCGMorphism (arrows originalCg)}
            -- transformDiagram d = Diagram{src = src d, tgt = newCg, omap = omap d, mmap = transformCGMorphism <$> mmap d}
            -- transformNat n = unsafeNaturalTransformation (transformDiagram $ source n) (transformDiagram $ target n) (transformCGMorphism <$> components n)
            -- transformCone c = unsafeCone (apex c) (transformNat (legsCone c))
            -- transformCocone cc = unsafeCocone (nadir cc) (transformNat (legsCocone cc))
            -- transformTripod t = unsafeTripod (transformCone (twoCone t)) (transformCGMorphism $ evalMap t)
            -- newSketch = Sketch{underlyingCategory = newCg, distinguishedCones = transformCone <$> distinguishedCones s, distinguishedCocones = transformCocone <$> distinguishedCocones s, distinguishedTripods = transformTripod <$> distinguishedTripods s}
            
            -- problème car on identifie deux flèches génératrices dans la loi de composition
            
    -- -- | A step of the Ehresmann realization algorithm.
    -- stepRealization :: (Eq e, Eq n) => (ConeSketch n e -> ConeSketch n e -> e) -> (CoconeSketch n e -> CoconeSketch n e -> e) -> Sketch n e -> SketchMorphism n e
    -- stepRealization createEdgeCone createEdgeCocone s = quotient @ addArr
        -- where
            -- addArr = addLonelinessCorrectionArrows createEdgeCone createEdgeCocone s
            -- quotient = quotientArrows createEdgeCone createEdgeCocone (target addArr)
    
    -- -- | Specialized version of 'stepRealization' for 'Text' sketches.
    -- stepRealizationText :: Sketch Text Text -> SketchMorphism Text Text
    -- stepRealizationText = stepRealization (curry (pack.show)) (curry (pack.show))