packages feed

FiniteCategories-0.2.0.0: src/Math/Functors/SetValued/Example.hs

{-| Module  : FiniteCategories
Description : Examples of Kan extensions of set-valued functors exported with GraphViz.
Copyright   : Guillaume Sabbagh 2023
License     : GPL-3
Maintainer  : guillaumesabbagh@protonmail.com
Stability   : experimental
Portability : portable

Examples of Kan extensions of set-valued functors exported with GraphViz.

Export extensions in the directory "OutputGraphViz\/Examples\/Functor\/SetValued".
-}
module Math.Functors.SetValued.Example
(
    main
)
where
    import              Math.FiniteCategory
    import              Math.FiniteCategories
    import              Math.Categories.FinSet
    import              Math.Functors.SetValued
    import              Math.IO.FiniteCategories.ExportGraphViz
    
    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                (pack)
    
    -- | Examples of Kan extensions of set-valued functors exported with GraphViz.
    main :: IO ()
    main = do
        putStrLn "Start of Math.Functors.SetValued.Example"
        let c1 = unsafeReadSCGString "2\nA -f-> B\n"
        catToPdf c1 "OutputGraphViz/Examples/Functors/SetValued/A"
        let c2 = unsafeReadSCGString "2\nA -f-> B -g-> A = <ID>\nB -g-> A -f-> B = <ID>\n"
        catToPdf c2 "OutputGraphViz/Examples/Functors/SetValued/B"
        let f = unsafeReadSCGDString "<SRC>\n2\nA -f-> B\n</SRC>\n<TGT>\n2\nA -f-> B -g-> A = <ID>\nB -g-> A -f-> B = <ID>\n</TGT>\nA -f-> B => A -f-> B\n"
        diagToPdf2 f "OutputGraphViz/Examples/Functors/SetValued/F"
        let x = completeDiagram Diagram{src=c1,tgt=FinSet,omap=weakMap [(pack "A",set [0,1 :: Int]),(pack "B", set [2,3,4])], mmap=weakMap [(anElement (genAr c1 (pack "A") (pack "B")),Function{function=weakMap [(0,2),(1,2)], codomain = set [2,3,4]})]}
        diagToPdf2 (fullDiagram2 x) "OutputGraphViz/Examples/Functors/SetValued/X"
        let (ran, epsilon) = rightKanSetValued f x
        diagToPdf (fullDiagram2 ran) "OutputGraphViz/Examples/Functors/SetValued/Ran2"
        diagToPdf2Format (fullDiagram2 ran) formatSetOfLimitObjects formatFunctionOfLimitObjects "OutputGraphViz/Examples/Functors/SetValued/Ran"
        natToPdfFormat (fullNaturalTransformation2 epsilon) formatSetOfLimitObjects formatFunctionOfLimitObjects "OutputGraphViz/Examples/Functors/SetValued/Epsilon"
        let (lan, eta) = leftKanSetValued f x
        diagToPdf (fullDiagram2 lan) "OutputGraphViz/Examples/Functors/SetValued/Lan2"
        diagToPdf2Format (fullDiagram2 lan) formatSetOfColimitObjects formatFunctionOfColimitObjects "OutputGraphViz/Examples/Functors/SetValued/Lan"
        natToPdfFormat (fullNaturalTransformation2 eta) formatSetOfColimitObjects formatFunctionOfColimitObjects "OutputGraphViz/Examples/Functors/SetValued/Eta"
        putStrLn "End of Math.Functors.SetValued.Example"