packages feed

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

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

Examples of Kan extensions pretty printed.


-}
module Math.Functors.KanExtension.Example
(
    main
)
where
    import              Math.FiniteCategory
    import              Math.FiniteCategories
    import              Math.Functors.KanExtension
    import              Math.IO.PrettyPrint
    import              Math.FiniteCategory

    
    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 pretty printed.
    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
        putStrLn $ pprint d1 
        putStrLn $ pprint d2 
        let Just (lk,lknat) = (leftKan d1 d2)
        putStrLn $ pprint lk 
        putStrLn $ pprint lknat 
        let Just (rk,rknat) = (rightKan d1 d2)
        putStrLn $ pprint rk 
        putStrLn $ pprint rknat 
        
        let a = unsafeReadSCGString "2\nA\n"
        putStrLn $ pprintFiniteCategory a 
        let b = unsafeReadSCGString "2\nA -f-> B\n"
        putStrLn $ pprintFiniteCategory b 
        let c = unsafeReadSCGString "2\nA -f-> B -g-> A = <ID>\nB -g-> A -f-> B = <ID>\n"
        putStrLn $ pprintFiniteCategory 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"
        putStrLn $ pprint f 
        let g = unsafeReadSCGDString "<SRC>\n2\nA\n</SRC>\n<TGT>\n2\nA -f-> B\n</TGT>\nA => A"
        putStrLn $ pprint g 
        
        let Just (lk,lknat) = (leftKan f g)
        putStrLn $ pprint lk 
        putStrLn $ pprint lknat 
        
        let Just (rk,rknat) = (rightKan f g)
        putStrLn $ pprint rk 
        putStrLn $ pprint rknat 
        
        
        let a = unsafeReadSCGString "2\nA\nB\n"
        putStrLn $ pprintFiniteCategory a 
        let b = unsafeReadSCGString "2\nC -p1-> A\nC -p2-> B\n"
        putStrLn $ pprintFiniteCategory b 
        let c = unsafeReadSCGString "2\n0 -abs-> 1\n"
        putStrLn $ pprintFiniteCategory c 
        let f = unsafeReadSCGDString "<SRC>\n2\nA\nB\n</SRC>\n<TGT>\n2\nC -p1-> A\nC -p2-> B\n</TGT>\nA => A\nB => B\n"
        putStrLn $ pprint f 
        let x = unsafeReadSCGDString "<SRC>\n2\nA\nB\n</SRC>\n<TGT>\n2\n0 -abs-> 1\n</TGT>\nA => 1\nB => 1"
        putStrLn $ pprint x 
        
        -- let Just (lk,lknat) = (leftKan f x)
        -- putStrLn $ pprint lk 
        -- putStrLn $ pprint lknat 
        
        let Just (rk,rknat) = (rightKan f x)
        putStrLn $ pprint rk 
        putStrLn $ pprint rknat 
        
        
        let a = unsafeReadSCGString "2\nA\nB\n"
        putStrLn $ pprintFiniteCategory a 
        let b = unsafeReadSCGString "2\nA -q1-> C\nB -q2-> C\n"
        putStrLn $ pprintFiniteCategory b 
        let c = unsafeReadSCGString "2\n0 -abs-> 1\n"
        putStrLn $ pprintFiniteCategory c 
        let f = unsafeReadSCGDString "<SRC>\n2\nA\nB\n</SRC>\n<TGT>\n2\nA -q1-> C\nB -q2-> C\n</TGT>\nA => A\nB => B\n"
        putStrLn $ pprint f 
        let x = unsafeReadSCGDString "<SRC>\n2\nA\nB\n</SRC>\n<TGT>\n2\n0 -abs-> 1\n</TGT>\nA => 1\nB => 1"
        putStrLn $ pprint x 
        
        let Just (lk,lknat) = (leftKan f x)
        putStrLn $ pprint lk 
        putStrLn $ pprint lknat 
        
        -- let Just (rk,rknat) = (rightKan f x)
        -- putStrLn $ pprint rk 
        -- putStrLn $ pprint rknat 
        
        
        let a = unsafeReadSCGString "2\nA\nB\n"
        putStrLn $ pprintFiniteCategory a 
        let b = unsafeReadSCGString "2\nA -f-> C\nB -g-> C\n"
        putStrLn $ pprintFiniteCategory b 
        let c = unsafeReadSCGString "2\n0 -f-> 1\n1 -g-> 2\n"
        putStrLn $ pprintFiniteCategory c 
        let f = unsafeReadSCGDString "<SRC>\n2\nA\nB\n</SRC>\n<TGT>\n2\nA -f-> C\nB -g-> C\n</TGT>\nA => A\nB => B\n"
        putStrLn $ pprint f 
        let x = unsafeReadSCGDString "<SRC>\n2\nA\nB\n</SRC>\n<TGT>\n2\n0 -f-> 1\n1 -g-> 2\n</TGT>\nA => 1\nB => 1"
        putStrLn $ pprint x 
        
        let Just (lk,lknat) = (leftKan f x)
        putStrLn $ pprint lk 
        putStrLn $ pprint lknat 
        
        let Just (rk,rknat) = (rightKan f x)
        putStrLn $ pprint rk 
        putStrLn $ pprint rknat 
        
        -- let a = unsafeReadSCGString "2\nA\nB\n"
        -- putStrLn $ pprintFiniteCategory a 
        -- let b = unsafeReadSCGString "2\nA -q1-> C\nB -q2-> C\n"
        -- putStrLn $ pprintFiniteCategory b 
        -- let c = unsafeReadSCGString "2\n0 -abs-> 1\n"
        -- putStrLn $ pprintFiniteCategory c 
        -- let f = unsafeReadSCGDString "<SRC>\n2\nA\nB\n</SRC>\n<TGT>\n2\nA -q1-> C\nB -q2-> C\n</TGT>\nA => A\nB => B\n"
        -- putStrLn $ pprint f 
        -- let x = unsafeReadSCGDString "<SRC>\n2\nA\nB\n</SRC>\n<TGT>\n2\n0 -abs-> 1\n</TGT>\nA => 0\nB => 1"
        -- putStrLn $ pprint x 
        
        -- let Just (lk,lknat) = (leftKan f x)
        -- putStrLn $ pprint lk 
        -- putStrLn $ pprint lknat 
        
        -- let Just (rk,rknat) = (rightKan f x)
        -- putStrLn $ pprint rk 
        -- putStrLn $ pprint rknat 
        
        putStrLn "End of Math.Functors.KanExtension.Example"