FiniteCategories-0.6.4.0: Finite categories and usual categorical constructions on them.
CopyrightGuillaume Sabbagh 2022
LicenseGPL-3
Maintainerguillaumesabbagh@protonmail.com
Stabilityexperimental
Portabilityportable
Safe HaskellSafe-Inferred
LanguageHaskell2010

Math.Category

Description

A Morphism is composable, it has a source and a target.

A Category allows to enumerate all arrows between two objects and allows to construct the identity of an object. It is mathematically a locally finite category, we name it Category for simplicity.

See FiniteCategory for the ability to enumerate the objects of a category.

We don't reify the Category concept because we want to be able to equate categories (functions are not equatable).

A GeneratedCategory is a Category where some morphisms are selected as generators. Any Category has a trivial set of generators: the set of all of its arrows. You can override the default definition of generators when creating your Category by instantiating GeneratedCategory.

Synopsis

Morphism

class Morphism m o | m -> o where Source #

A Morphism can be composed with the (@?) operator, it has a source and a target.

The (@?) operator should not be confused with the as-pattern. When using the composition operator, surround the @? symbol with spaces.

Morphism is a multiparametrized typeclass where m is the type of the morphism and o the type of the source and target objects.

Source and target are the same type of objects, we distinguish objects not by their type but instead by their values.

Minimal complete definition

(@), source, target

Methods

(@) :: m -> m -> m Source #

Unsafe version of (@?).

The composition g '' f may throw an error if source g /= target f@ although it is not garanteed that it will! This is a fast function as it is not supposed to check any compatibility of morphisms.

Composition is associative :

f @ (g @ h) = (f @ g) @ h

(@?) :: Eq o => m -> m -> Maybe m Source #

The composition g '?' f should return Nothing if source g /= target f@. This is a consequence of loosing type check at compilation time, we defer the exception handling to execution time.

Composition is associative :

(fmap (f @?)) (g @? h) = fmap (@? h) (f @? g)

source :: m -> o Source #

Return the source object of the morphism.

target :: m -> o Source #

Return the target object of the morphism.

Instances

Instances details
Morphism DiscreteTwoOb DiscreteTwoOb Source # 
Instance details

Defined in Math.FiniteCategories.DiscreteTwo

Morphism HatAr HatOb Source # 
Instance details

Defined in Math.FiniteCategories.Hat

Morphism One One Source # 
Instance details

Defined in Math.FiniteCategories.One

Methods

(@) :: One -> One -> One Source #

(@?) :: One -> One -> Maybe One Source #

source :: One -> One Source #

target :: One -> One Source #

Morphism ParallelAr ParallelOb Source # 
Instance details

Defined in Math.FiniteCategories.Parallel

Morphism SquareAr SquareOb Source # 
Instance details

Defined in Math.FiniteCategories.Square

Morphism VAr VOb Source # 
Instance details

Defined in Math.FiniteCategories.V

Methods

(@) :: VAr -> VAr -> VAr Source #

(@?) :: VAr -> VAr -> Maybe VAr Source #

source :: VAr -> VOb Source #

target :: VAr -> VOb Source #

Morphism (StarIdentity a) a Source # 
Instance details

Defined in Math.Categories.Galaxy

Morphism m o => Morphism (OpMorphism m) o Source # 
Instance details

Defined in Math.Categories.Opposite

Eq a => Morphism (IsSmallerThan a) a Source # 
Instance details

Defined in Math.Categories.TotalOrder

Eq a => Morphism (Function a) (Set a) Source # 
Instance details

Defined in Math.Categories.FinSet

Methods

(@) :: Function a -> Function a -> Function a Source #

(@?) :: Function a -> Function a -> Maybe (Function a) Source #

source :: Function a -> Set a Source #

target :: Function a -> Set a Source #

(Eq a, Eq b) => Morphism (CGMorphism a b) a Source # 
Instance details

Defined in Math.FiniteCategories.CompositionGraph

Methods

(@) :: CGMorphism a b -> CGMorphism a b -> CGMorphism a b Source #

(@?) :: CGMorphism a b -> CGMorphism a b -> Maybe (CGMorphism a b) Source #

source :: CGMorphism a b -> a Source #

target :: CGMorphism a b -> a Source #

(Eq a, Eq b) => Morphism (SCGMorphism a b) a Source # 
Instance details

Defined in Math.FiniteCategories.SafeCompositionGraph

Methods

(@) :: SCGMorphism a b -> SCGMorphism a b -> SCGMorphism a b Source #

(@?) :: SCGMorphism a b -> SCGMorphism a b -> Maybe (SCGMorphism a b) Source #

source :: SCGMorphism a b -> a Source #

target :: SCGMorphism a b -> a Source #

(Eq n, Eq e) => Morphism (GraphHomomorphism n e) (Graph n e) Source # 
Instance details

Defined in Math.Categories.FinGrph

(Eq e, Eq n) => Morphism (SketchMorphism n e) (Sketch n e) Source # 
Instance details

Defined in Math.Categories.FinSketch

(Morphism m o, Eq m, Eq oIndex) => Morphism (Limit oIndex m) (Limit oIndex o) Source # 
Instance details

Defined in Math.FiniteCategories.LimitCategory

Methods

(@) :: Limit oIndex m -> Limit oIndex m -> Limit oIndex m Source #

(@?) :: Limit oIndex m -> Limit oIndex m -> Maybe (Limit oIndex m) Source #

source :: Limit oIndex m -> Limit oIndex o Source #

target :: Limit oIndex m -> Limit oIndex o Source #

(Category c m o, Morphism m o, Eq m, Eq o) => Morphism (FinFunctor c m o) c Source # 
Instance details

Defined in Math.Categories.FinCat

Methods

(@) :: FinFunctor c m o -> FinFunctor c m o -> FinFunctor c m o Source #

(@?) :: FinFunctor c m o -> FinFunctor c m o -> Maybe (FinFunctor c m o) Source #

source :: FinFunctor c m o -> c Source #

target :: FinFunctor c m o -> c Source #

Morphism m o => Morphism (CandidateExponentialObjectMorphism c m o) (CandidateExponentialObject c m o) Source # 
Instance details

Defined in Math.CartesianClosedCategory

(FiniteCategory c m o, Morphism m o, Eq c, Eq m, Eq o) => Morphism (ExponentialCategoryMorphism c m o) (ExponentialCategoryObject c m o) Source # 
Instance details

Defined in Math.FiniteCategories.ExponentialCategory

(Morphism m1 o1, Morphism m2 o2, Eq o1, Eq o2, Eq m3) => Morphism (CommaMorphism o1 o2 m1 m2 m3) (CommaObject o1 o2 m3) Source # 
Instance details

Defined in Math.Categories.CommaCategory

Methods

(@) :: CommaMorphism o1 o2 m1 m2 m3 -> CommaMorphism o1 o2 m1 m2 m3 -> CommaMorphism o1 o2 m1 m2 m3 Source #

(@?) :: CommaMorphism o1 o2 m1 m2 m3 -> CommaMorphism o1 o2 m1 m2 m3 -> Maybe (CommaMorphism o1 o2 m1 m2 m3) Source #

source :: CommaMorphism o1 o2 m1 m2 m3 -> CommaObject o1 o2 m3 Source #

target :: CommaMorphism o1 o2 m1 m2 m3 -> CommaObject o1 o2 m3 Source #

(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1, Morphism m2 o2) => Morphism (NaturalTransformation c1 m1 o1 c2 m2 o2) (Diagram c1 m1 o1 c2 m2 o2) Source # 
Instance details

Defined in Math.Categories.FunctorCategory

Methods

(@) :: NaturalTransformation c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2 Source #

(@?) :: NaturalTransformation c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2 -> Maybe (NaturalTransformation c1 m1 o1 c2 m2 o2) Source #

source :: NaturalTransformation c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2 Source #

target :: NaturalTransformation c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2 Source #

Morphism related functions

compose :: Morphism m o => [m] -> m Source #

Return the composition of a list of morphisms.

For example : compose [f,g,h] = f @ g @ h

Return an error if the list is empty : we would have to return an identity but we don't know which one.

Category

class Category c m o | c -> m, m -> o where Source #

A Category allows to enumerate all arrows between two objects and allows to construct the identity of an object.

A Category is multiparametrized by the type of its morphisms and the type of its objects.

This typeclass does not assume the category is finite, the number of objects in the category may be infinite.

A category is a set of objects and a set of morphisms which follows the category axioms.

A category also has sets of generating morphisms. A set of generating morphisms is a set of morphism such that every morphism of the category can be constructed by composing generators. Note that we consider identities should be generators even though they can be constructed as the composition of zero morphism because compose can't compose zero morphism.

Some algorithms are simplified because they only need to deal with generators, the rest of the properties are deduced by composition.

Every Category has at least one set of generators : the set of all of its morphisms.

You can override genAr and decompose to define a more interesting set of generating morphisms for a given Category.

Minimal complete definition

identity, ar

Methods

identity :: Morphism m o => c -> o -> m Source #

identity should return the identity associated to the object o in the category c.

The identity morphism is a morphism such that the two following properties are verified :

f '@' 'identity' c ('source' f) = f
'identity' c ('target' g) '@' g = g

ar Source #

Arguments

:: Morphism m o 
=> c

The category

-> o

The source of the morphisms

-> o

The target of the morphisms

-> Set m

The set of morphisms in the category c between source and target

ar should return the set of all arrows between a source and a target.

Arrows with different source or target should not be equal.

genAr :: Morphism m o => c -> o -> o -> Set m Source #

# MINIMAL identity, ar #

Same as ar but only returns the generators.

@('genAr' c s t) `isIncludedIn` ('ar' c s t)@.

The default implementation is ar because the set of all arrows generates trivially the category.

decompose :: Morphism m o => c -> m -> [m] Source #

decompose decomposes a morphism into a list of generators (according to composition) :

m = compose (decompose c m)

An identity should be decomposed into a list containing itself.

The default implementation returns the morphism in a list as all arrows are generators.

Instances

Instances details
Category DiscreteTwo DiscreteTwoOb DiscreteTwoOb Source # 
Instance details

Defined in Math.FiniteCategories.DiscreteTwo

Category Hat HatAr HatOb Source # 
Instance details

Defined in Math.FiniteCategories.Hat

Category One One One Source # 
Instance details

Defined in Math.FiniteCategories.One

Methods

identity :: One -> One -> One Source #

ar :: One -> One -> One -> Set One Source #

genAr :: One -> One -> One -> Set One Source #

decompose :: One -> One -> [One] Source #

Category Parallel ParallelAr ParallelOb Source # 
Instance details

Defined in Math.FiniteCategories.Parallel

Category Square SquareAr SquareOb Source # 
Instance details

Defined in Math.FiniteCategories.Square

Category V VAr VOb Source # 
Instance details

Defined in Math.FiniteCategories.V

Methods

identity :: V -> VOb -> VAr Source #

ar :: V -> VOb -> VOb -> Set VAr Source #

genAr :: V -> VOb -> VOb -> Set VAr Source #

decompose :: V -> VAr -> [VAr] Source #

Eq a => Category (Galaxy a) (StarIdentity a) a Source # 
Instance details

Defined in Math.Categories.Galaxy

Methods

identity :: Galaxy a -> a -> StarIdentity a Source #

ar :: Galaxy a -> a -> a -> Set (StarIdentity a) Source #

genAr :: Galaxy a -> a -> a -> Set (StarIdentity a) Source #

decompose :: Galaxy a -> StarIdentity a -> [StarIdentity a] Source #

(Category c m o, Morphism m o) => Category (Op c) (OpMorphism m) o Source # 
Instance details

Defined in Math.Categories.Opposite

Methods

identity :: Op c -> o -> OpMorphism m Source #

ar :: Op c -> o -> o -> Set (OpMorphism m) Source #

genAr :: Op c -> o -> o -> Set (OpMorphism m) Source #

decompose :: Op c -> OpMorphism m -> [OpMorphism m] Source #

(Enum a, Ord a) => Category (OrdinalCategory a) (IsSmallerThan a) a Source # 
Instance details

Defined in Math.Categories.OrdinalCategory

(Eq a, Ord a) => Category (TotalOrder a) (IsSmallerThan a) a Source # 
Instance details

Defined in Math.Categories.TotalOrder

Eq a => Category (FinSet a) (Function a) (Set a) Source # 
Instance details

Defined in Math.Categories.FinSet

Methods

identity :: FinSet a -> Set a -> Function a Source #

ar :: FinSet a -> Set a -> Set a -> Set (Function a) Source #

genAr :: FinSet a -> Set a -> Set a -> Set (Function a) Source #

decompose :: FinSet a -> Function a -> [Function a] Source #

(Eq a, Eq b) => Category (CompositionGraph a b) (CGMorphism a b) a Source # 
Instance details

Defined in Math.FiniteCategories.CompositionGraph

Methods

identity :: CompositionGraph a b -> a -> CGMorphism a b Source #

ar :: CompositionGraph a b -> a -> a -> Set (CGMorphism a b) Source #

genAr :: CompositionGraph a b -> a -> a -> Set (CGMorphism a b) Source #

decompose :: CompositionGraph a b -> CGMorphism a b -> [CGMorphism a b] Source #

(Eq a, Eq b) => Category (SafeCompositionGraph a b) (SCGMorphism a b) a Source # 
Instance details

Defined in Math.FiniteCategories.SafeCompositionGraph

(Eq n, Eq e) => Category (FinGrph n e) (GraphHomomorphism n e) (Graph n e) Source # 
Instance details

Defined in Math.Categories.FinGrph

Methods

identity :: FinGrph n e -> Graph n e -> GraphHomomorphism n e Source #

ar :: FinGrph n e -> Graph n e -> Graph n e -> Set (GraphHomomorphism n e) Source #

genAr :: FinGrph n e -> Graph n e -> Graph n e -> Set (GraphHomomorphism n e) Source #

decompose :: FinGrph n e -> GraphHomomorphism n e -> [GraphHomomorphism n e] Source #

(Eq e, Eq n) => Category (FinSketch n e) (SketchMorphism n e) (Sketch n e) Source # 
Instance details

Defined in Math.Categories.FinSketch

Methods

identity :: FinSketch n e -> Sketch n e -> SketchMorphism n e Source #

ar :: FinSketch n e -> Sketch n e -> Sketch n e -> Set (SketchMorphism n e) Source #

genAr :: FinSketch n e -> Sketch n e -> Sketch n e -> Set (SketchMorphism n e) Source #

decompose :: FinSketch n e -> SketchMorphism n e -> [SketchMorphism n e] Source #

(Category c m o, Eq o) => Category (FullSubcategory c m o) m o Source # 
Instance details

Defined in Math.FiniteCategories.FullSubcategory

Methods

identity :: FullSubcategory c m o -> o -> m Source #

ar :: FullSubcategory c m o -> o -> o -> Set m Source #

genAr :: FullSubcategory c m o -> o -> o -> Set m Source #

decompose :: FullSubcategory c m o -> m -> [m] Source #

(Category c m o, Eq o) => Category (InheritedFullSubcategory c m o) m o Source # 
Instance details

Defined in Math.FiniteCategories.FullSubcategory

Methods

identity :: InheritedFullSubcategory c m o -> o -> m Source #

ar :: InheritedFullSubcategory c m o -> o -> o -> Set m Source #

genAr :: InheritedFullSubcategory c m o -> o -> o -> Set m Source #

decompose :: InheritedFullSubcategory c m o -> m -> [m] Source #

(Category c m o, Eq o, Eq m) => Category (InheritedSubcategory c m o) m o Source # 
Instance details

Defined in Math.FiniteCategories.Subcategory

Methods

identity :: InheritedSubcategory c m o -> o -> m Source #

ar :: InheritedSubcategory c m o -> o -> o -> Set m Source #

genAr :: InheritedSubcategory c m o -> o -> o -> Set m Source #

decompose :: InheritedSubcategory c m o -> m -> [m] Source #

(Category c m o, Eq o, Eq m) => Category (Subcategory c m o) m o Source # 
Instance details

Defined in Math.FiniteCategories.Subcategory

Methods

identity :: Subcategory c m o -> o -> m Source #

ar :: Subcategory c m o -> o -> o -> Set m Source #

genAr :: Subcategory c m o -> o -> o -> Set m Source #

decompose :: Subcategory c m o -> m -> [m] Source #

(FiniteCategory c m o, Morphism m o, Eq c, Eq m, Eq o) => Category (FinCat c m o) (FinFunctor c m o) c Source # 
Instance details

Defined in Math.Categories.FinCat

Methods

identity :: FinCat c m o -> c -> FinFunctor c m o Source #

ar :: FinCat c m o -> c -> c -> Set (FinFunctor c m o) Source #

genAr :: FinCat c m o -> c -> c -> Set (FinFunctor c m o) Source #

decompose :: FinCat c m o -> FinFunctor c m o -> [FinFunctor c m o] Source #

(Category c m o, Morphism m o, Eq c, Eq m, Eq o) => Category (CandidateExponentialObjectCategory c m o) (CandidateExponentialObjectMorphism c m o) (CandidateExponentialObject c m o) Source # 
Instance details

Defined in Math.CartesianClosedCategory

(FiniteCategory c m o, Morphism m o, Eq c, Eq m, Eq o) => Category (ExponentialCategory c m o) (ExponentialCategoryMorphism c m o) (ExponentialCategoryObject c m o) Source # 
Instance details

Defined in Math.FiniteCategories.ExponentialCategory

(FiniteCategory cIndex mIndex oIndex, Morphism mIndex oIndex, Eq mIndex, Eq oIndex, Category c m o, Morphism m o, Eq m, Eq o) => Category (LimitCategory cIndex mIndex oIndex c m o) (Limit oIndex m) (Limit oIndex o) Source # 
Instance details

Defined in Math.FiniteCategories.LimitCategory

Methods

identity :: LimitCategory cIndex mIndex oIndex c m o -> Limit oIndex o -> Limit oIndex m Source #

ar :: LimitCategory cIndex mIndex oIndex c m o -> Limit oIndex o -> Limit oIndex o -> Set (Limit oIndex m) Source #

genAr :: LimitCategory cIndex mIndex oIndex c m o -> Limit oIndex o -> Limit oIndex o -> Set (Limit oIndex m) Source #

decompose :: LimitCategory cIndex mIndex oIndex c m o -> Limit oIndex m -> [Limit oIndex m] Source #

(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1, Category c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2) => Category (FunctorCategory c1 m1 o1 c2 m2 o2) (NaturalTransformation c1 m1 o1 c2 m2 o2) (Diagram c1 m1 o1 c2 m2 o2) Source # 
Instance details

Defined in Math.Categories.FunctorCategory

Methods

identity :: FunctorCategory c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2 Source #

ar :: FunctorCategory c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2 -> Set (NaturalTransformation c1 m1 o1 c2 m2 o2) Source #

genAr :: FunctorCategory c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2 -> Diagram c1 m1 o1 c2 m2 o2 -> Set (NaturalTransformation c1 m1 o1 c2 m2 o2) Source #

decompose :: FunctorCategory c1 m1 o1 c2 m2 o2 -> NaturalTransformation c1 m1 o1 c2 m2 o2 -> [NaturalTransformation c1 m1 o1 c2 m2 o2] Source #

(Category c1 m1 o1, Morphism m1 o1, Eq m1, Eq o1, Category c2 m2 o2, Morphism m2 o2, Eq m2, Eq o2, Category c3 m3 o3, Morphism m3 o3, Eq m3, Eq o3) => Category (CommaCategory c1 m1 o1 c2 m2 o2 c3 m3 o3) (CommaMorphism o1 o2 m1 m2 m3) (CommaObject o1 o2 m3) Source # 
Instance details

Defined in Math.Categories.CommaCategory

Methods

identity :: CommaCategory c1 m1 o1 c2 m2 o2 c3 m3 o3 -> CommaObject o1 o2 m3 -> CommaMorphism o1 o2 m1 m2 m3 Source #

ar :: CommaCategory c1 m1 o1 c2 m2 o2 c3 m3 o3 -> CommaObject o1 o2 m3 -> CommaObject o1 o2 m3 -> Set (CommaMorphism o1 o2 m1 m2 m3) Source #

genAr :: CommaCategory c1 m1 o1 c2 m2 o2 c3 m3 o3 -> CommaObject o1 o2 m3 -> CommaObject o1 o2 m3 -> Set (CommaMorphism o1 o2 m1 m2 m3) Source #

decompose :: CommaCategory c1 m1 o1 c2 m2 o2 c3 m3 o3 -> CommaMorphism o1 o2 m1 m2 m3 -> [CommaMorphism o1 o2 m1 m2 m3] Source #

(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1, Category c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2, Category c3 m3 o3, Morphism m3 o3, Eq c3, Eq m3, Eq o3) => Category (PostcomposedFunctorCategory c1 m1 o1 c2 m2 o2 c3 m3 o3) (NaturalTransformation c1 m1 o1 c3 m3 o3) (Diagram c1 m1 o1 c3 m3 o3) Source # 
Instance details

Defined in Math.Categories.FunctorCategory

Methods

identity :: PostcomposedFunctorCategory c1 m1 o1 c2 m2 o2 c3 m3 o3 -> Diagram c1 m1 o1 c3 m3 o3 -> NaturalTransformation c1 m1 o1 c3 m3 o3 Source #

ar :: PostcomposedFunctorCategory c1 m1 o1 c2 m2 o2 c3 m3 o3 -> Diagram c1 m1 o1 c3 m3 o3 -> Diagram c1 m1 o1 c3 m3 o3 -> Set (NaturalTransformation c1 m1 o1 c3 m3 o3) Source #

genAr :: PostcomposedFunctorCategory c1 m1 o1 c2 m2 o2 c3 m3 o3 -> Diagram c1 m1 o1 c3 m3 o3 -> Diagram c1 m1 o1 c3 m3 o3 -> Set (NaturalTransformation c1 m1 o1 c3 m3 o3) Source #

decompose :: PostcomposedFunctorCategory c1 m1 o1 c2 m2 o2 c3 m3 o3 -> NaturalTransformation c1 m1 o1 c3 m3 o3 -> [NaturalTransformation c1 m1 o1 c3 m3 o3] Source #

(FiniteCategory c1 m1 o1, Morphism m1 o1, Eq c1, Eq m1, Eq o1, FiniteCategory c2 m2 o2, Morphism m2 o2, Eq c2, Eq m2, Eq o2, Category c3 m3 o3, Morphism m3 o3, Eq c3, Eq m3, Eq o3) => Category (PrecomposedFunctorCategory c1 m1 o1 c2 m2 o2 c3 m3 o3) (NaturalTransformation c1 m1 o1 c3 m3 o3) (Diagram c1 m1 o1 c3 m3 o3) Source # 
Instance details

Defined in Math.Categories.FunctorCategory

Methods

identity :: PrecomposedFunctorCategory c1 m1 o1 c2 m2 o2 c3 m3 o3 -> Diagram c1 m1 o1 c3 m3 o3 -> NaturalTransformation c1 m1 o1 c3 m3 o3 Source #

ar :: PrecomposedFunctorCategory c1 m1 o1 c2 m2 o2 c3 m3 o3 -> Diagram c1 m1 o1 c3 m3 o3 -> Diagram c1 m1 o1 c3 m3 o3 -> Set (NaturalTransformation c1 m1 o1 c3 m3 o3) Source #

genAr :: PrecomposedFunctorCategory c1 m1 o1 c2 m2 o2 c3 m3 o3 -> Diagram c1 m1 o1 c3 m3 o3 -> Diagram c1 m1 o1 c3 m3 o3 -> Set (NaturalTransformation c1 m1 o1 c3 m3 o3) Source #

decompose :: PrecomposedFunctorCategory c1 m1 o1 c2 m2 o2 c3 m3 o3 -> NaturalTransformation c1 m1 o1 c3 m3 o3 -> [NaturalTransformation c1 m1 o1 c3 m3 o3] Source #

arWithoutId :: (Category c m o, Morphism m o, Eq m, Eq o) => c -> o -> o -> Set m Source #

Return the arrows between two objects without the identities.

Morphism predicates

isIdentity :: (Category c m o, Morphism m o, Eq m, Eq o) => c -> m -> Bool Source #

Return wether a morphism is an identity in a category.

isNotIdentity :: (Category c m o, Morphism m o, Eq m, Eq o) => c -> m -> Bool Source #

Return wether a morphism is not an identity.

isIso :: (Category c m o, Morphism m o, Eq m, Eq o) => c -> m -> Bool Source #

Return if a morphism is an isomorphism

isSection :: (Category c m o, Morphism m o, Eq m, Eq o) => c -> m -> Bool Source #

Return wether a morphism is a section.

isRetraction :: (Category c m o, Morphism m o, Eq m, Eq o) => c -> m -> Bool Source #

Return wether a morphism is a retraction.

areIsomorphic :: (Category c m o, Morphism m o, Eq m, Eq o) => c -> o -> o -> Bool Source #

Return wether two objects are isomorphic or not.

Generator predicates

genArWithoutId :: (Category c m o, Morphism m o, Eq m, Eq o) => c -> o -> o -> Set m Source #

Return the generators between two objects without the identities.

isGenerator :: (Category c m o, Morphism m o, Eq m) => c -> m -> Bool Source #

Return if a morphism is a generating morphism.

isComposite :: (Category c m o, Morphism m o, Eq m) => c -> m -> Bool Source #

Opposite of isGenerator, i.e. returns if the morphism is composite.

Find special morphisms

findInverse :: (Category c m o, Morphism m o, Eq m, Eq o) => c -> m -> Maybe m Source #

Return Just an inverse of a morphism if possible, Nothing otherwise

findIsomorphism :: (Category c m o, Morphism m o, Eq m, Eq o) => c -> o -> o -> Maybe m Source #

Return Just an isomorphism from an object to another if possible, Nothing otherwise.

findRightInverses :: (Category c m o, Morphism m o, Eq m, Eq o) => c -> m -> Set m Source #

Find all right inverses.

findLeftInverses :: (Category c m o, Morphism m o, Eq m, Eq o) => c -> m -> Set m Source #

Find a left inverse if it can, returns Nothing otherwise.