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"