{-| 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 = \nB -g-> A -f-> B = \n" catToPdf c2 "OutputGraphViz/Examples/Functors/SetValued/B" let f = unsafeReadSCGDString "\n2\nA -f-> B\n\n\n2\nA -f-> B -g-> A = \nB -g-> A -f-> B = \n\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"