{-| Module : FiniteCategories
Description : Examples of Kan extensions.
Copyright : Guillaume Sabbagh 2023
License : GPL-3
Maintainer : guillaumesabbagh@protonmail.com
Stability : experimental
Portability : portable
Examples of Kan extensions.
-}
module Math.Functors.KanExtension.Examples
(
exampleLeftKanExtension,
exampleRightKanExtension,
)
where
import Math.FiniteCategory
import Math.FiniteCategories
import Math.Functors.KanExtension
import Data.Text (Text)
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
-- | An example of left Kan Extension which computes the sum (disjunction) of two booleans variables.
exampleLeftKanExtension :: Diagram (CompositionGraph Text Text) (CGMorphism Text Text) Text (CompositionGraph Text Text) (CGMorphism Text Text) Text
exampleLeftKanExtension = lk
where
a = unsafeReadCGString "A\nB\n"
b = unsafeReadCGString "A -q1-> C\nB -q2-> C\n"
c = unsafeReadCGString "0 -abs-> 1\n"
f = unsafeReadCGDString "\nA\nB\n\n\nA -q1-> C\nB -q2-> C\n\nA => A\nB => B\n"
x = unsafeReadCGDString "\nA\nB\n\n\n0 -abs-> 1\n\nA => 0\nB => 1"
Just (lk,lknat) = (leftKan f x)
-- | An example of right Kan Extension which computes the product (conjonction) of two booleans variables.
exampleRightKanExtension :: Diagram (CompositionGraph Text Text) (CGMorphism Text Text) Text (CompositionGraph Text Text) (CGMorphism Text Text) Text
exampleRightKanExtension = rk
where
a = unsafeReadCGString "A\nB\n"
b = unsafeReadCGString "C -p1-> A\nC -p2-> B\n"
c = unsafeReadCGString "0 -abs-> 1\n"
f = unsafeReadCGDString "\nA\nB\n\n\nC -p1-> A\nC -p2-> B\n\nA => A\nB => B\n"
x = unsafeReadCGDString "\nA\nB\n\n\n0 -abs-> 1\n\nA => 0\nB => 1"
Just (rk,rknat) = (rightKan f x)