packages feed

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

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

Examples of Kan extensions exported with GraphViz.

Export extensions in the directory "OutputGraphViz\/Examples\/Functor\/KanExtension".
-}
module Math.Functors.KanExtension.Example
(
    main
)
where
    import              Math.FiniteCategory
    import              Math.FiniteCategories
    import              Math.Functors.KanExtension
    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
    
    -- | Examples of Kan extensions exported with GraphViz.
    main :: IO ()
    main = do
        putStrLn "Start of Math.Functors.KanExtension.Example"
        let d1 = (setToList $ ob (FunctorCategory (numberCategory 2) (numberCategory 4)))!! 3
        let d2 = (setToList $ ob (FunctorCategory (numberCategory 2) (numberCategory 3)))!! 2
        diagToPdf2 d1 "OutputGraphViz/Examples/Functors/KanExtension/F"
        diagToPdf2 d2 "OutputGraphViz/Examples/Functors/KanExtension/X"
        let Just (lk,lknat) = (leftKan d1 d2)
        diagToPdf2 lk "OutputGraphViz/Examples/Functors/KanExtension/Lan_F(X)"
        natToPdf lknat "OutputGraphViz/Examples/Functors/KanExtension/EtaLan_F(X)"
        let Just (rk,rknat) = (rightKan d1 d2)
        diagToPdf2 rk "OutputGraphViz/Examples/Functors/KanExtension/Ran_F(X)"
        natToPdf rknat "OutputGraphViz/Examples/Functors/KanExtension/RhoRan_F(X)"
        
        let a = unsafeReadSCGString "2\nA\n"
        catToPdf a "OutputGraphViz/Examples/Functors/KanExtension/NotPointwise/A"
        let b = unsafeReadSCGString "2\nA -f-> B\n"
        catToPdf b "OutputGraphViz/Examples/Functors/KanExtension/NotPointwise/B"
        let c = unsafeReadSCGString "2\nA -f-> B -g-> A = <ID>\nB -g-> A -f-> B = <ID>\n"
        catToPdf c "OutputGraphViz/Examples/Functors/KanExtension/NotPointwise/C"
        let f = unsafeReadSCGDString "<SRC>\n2\nA\n</SRC>\n<TGT>\n2\nA -f-> B -g-> A = <ID>\nB -g-> A -f-> B = <ID>\n</TGT>\nA => A"
        diagToPdf2 f "OutputGraphViz/Examples/Functors/KanExtension/NotPointwise/F"
        let g = unsafeReadSCGDString "<SRC>\n2\nA\n</SRC>\n<TGT>\n2\nA -f-> B\n</TGT>\nA => A"
        diagToPdf2 g "OutputGraphViz/Examples/Functors/KanExtension/NotPointwise/G"
        
        let Just (lk,lknat) = (leftKan f g)
        diagToPdf2 lk "OutputGraphViz/Examples/Functors/KanExtension/NotPointwise/Lan_F(G)"
        natToPdf lknat "OutputGraphViz/Examples/Functors/KanExtension/NotPointwise/EtaLan_F(G)"
        
        let Just (rk,rknat) = (rightKan f g)
        diagToPdf2 rk "OutputGraphViz/Examples/Functors/KanExtension/NotPointwise/Ran_F(G)"
        natToPdf rknat "OutputGraphViz/Examples/Functors/KanExtension/NotPointwise/EpsilonLan_F(G)"
        
        putStrLn "End of Math.Functors.KanExtension.Example"