Difference between revisions of "Category theory/Natural transformation"

From HaskellWiki
Jump to navigation Jump to search
m (Deleting empty environments, make more didactical order, typographic cirrectipons)
m (Better table-of-contents hierarchy)
Line 13: Line 13:
 
</haskell>
 
</haskell>
   
  +
In the followings, this example will be used to illustrate the notion of natural transformation.
=== Commutative diagram ===
 
  +
  +
== Definition ==
   
 
* Let <math>\mathcal C</math>, <math>\mathcal D</math> denote categories.
 
* Let <math>\mathcal C</math>, <math>\mathcal D</math> denote categories.
Line 137: Line 139:
 
* <hask>even</hask> has a more general type (<hask>Integral a => a -> Bool</hask>) than described here
 
* <hask>even</hask> has a more general type (<hask>Integral a => a -> Bool</hask>) than described here
 
* Words “side”, “horizontal”, “vertical”, “left”, “right” serve here only to point to the discussed parts of a diagram, thus, they are not part of the scientific terminology.
 
* Words “side”, “horizontal”, “vertical”, “left”, “right” serve here only to point to the discussed parts of a diagram, thus, they are not part of the scientific terminology.
* If You want to modifiy the [[#Commutative diagram]], see its [[Media:Natural_transformation.tex|source code]] (in LaTeX using <code>amscd</code>).
+
* If You want to modifiy the [[#Definition|commutative diagram]], see its [[Media:Natural_transformation.tex|source code]] (in LaTeX using <code>amscd</code>).
   
 
== Operations ==
 
== Operations ==
Line 183: Line 185:
 
:<math>\Lambda\eta : \Lambda\Phi \to \Lambda\Psi</math>
 
:<math>\Lambda\eta : \Lambda\Phi \to \Lambda\Psi</math>
 
:<math>(\Lambda\eta)_X = \Lambda(\eta_X)</math>
 
:<math>(\Lambda\eta)_X = \Lambda(\eta_X)</math>
=== External links ===
+
== External links ==
 
* [http://haskell.org/hawiki/CategoryTheory_2fNaturalTransformation?action=highlight&value=natural+transformation The corresponding HaWiki article] is not migrated here yet, so You can see it for more information.
 
* [http://haskell.org/hawiki/CategoryTheory_2fNaturalTransformation?action=highlight&value=natural+transformation The corresponding HaWiki article] is not migrated here yet, so You can see it for more information.
 
* Wikipedia's [http://en.wikipedia.org/wiki/Natural_transformation Natural transformation] article
 
* Wikipedia's [http://en.wikipedia.org/wiki/Natural_transformation Natural transformation] article

Revision as of 09:17, 4 October 2006

Example: maybeToList

 map even $ maybeToList $ Just 5

yields the same as

 maybeToList $ fmap even $ Just 5

yields: both yield

 [False]

In the followings, this example will be used to illustrate the notion of natural transformation.

Definition

  • Let , denote categories.
  • Let be functors.
  • Let . Let .

Let us define the natural transformation. It associates to each object of a morphism of in the following way (usually, not sets are discussed here, but proper classes, so I do not use term “function” for this mapping):

  • . We call the component of at A.

Thus, the following diagram commutes (in ):

Natural transformation.png

Vertical arrows: sides of objects

… showing how the natural transformation works.

maybeToList :: Maybe a -> [a]

Left: side of X object

maybeToList :: Maybe Int -> [Int]
Nothing []
Just 0 [0]
Just 1 [1]

Right: side of Y object

maybeToList :: Maybe Bool -> [Bool]
Nothing []
Just True [True]
Just False [False]

Horizontal arrows: sides of functors

 even :: Int -> Bool

Side of functor

fmap even:: Maybe Int -> Maybe Bool
Nothing Nothing
Just 0 Just True
Just 1 Just False

Side of functor

map even:: [Int] -> [Bool]
[] []
[0] [True]
[1] [False]

Commutativity of the diagram

both paths span between

Maybe Int -> [Bool]
map even . maybeToList maybeToList . fmap even
Nothing [] []
Just 0 [True] [True]
Just 1 [False] [False]

Remarks

  • even has a more general type (Integral a => a -> Bool) than described here
  • Words “side”, “horizontal”, “vertical”, “left”, “right” serve here only to point to the discussed parts of a diagram, thus, they are not part of the scientific terminology.
  • If You want to modifiy the commutative diagram, see its source code (in LaTeX using amscd).

Operations

Functor and natural transformation

Let us imagine a parser library, which contains functions for parsing a form. There are two kinds of cells:

  • containing data which are optional (e.g. name of spouse)
  • containing data which consist of an enumaration of items (e.g. names of acquired languages)
 spouse :: Parser (Maybe String)
 languages :: Parser [String]

Let us imagine we have any processing (storing, archiving etc.) function which processes lists (or any other reason which forces us to convert our results tu list fomrat instead of lists). (Maybe all this example is unparactical and exaggerated!)

We can convert Maybe to list with maybeToList But if we want to do something similar with a parser on Maybe's to achieve a parser on list, then maybeToList is not enough alone, we must fmap it. E.g. if we want to convert a parser like spouse to be of the same type as languages:

 fmap maybeToList spouse

Let us see the types: We start with

 spouse :: Parser (Maybe String)

or using notion of composing functors

We want to achieve

 fmap maybeToList spouse :: Parser [String]

thus we can infer

 fmap maybeToList :: Parser (Maybe [String]) -> Parser [String]

In fact, we have a new "datatype converter": converting not Maybe's to lists, but parser on Maybe to Parser on list. Let us notate the corresponding natural transformation with :

To each we associate

External links