# Category theory/Natural transformation

### From HaskellWiki

EndreyMark (Talk | contribs) (→Operations: Complete formal definitions) |
EndreyMark (Talk | contribs) (+ - →Mixed: Mentioning how mixed operations will be used in definition of “monad” in category theory. Rephrasings) |
||

Line 143: | Line 143: | ||

== Operations == |
== Operations == |
||

− | === Functor and natural transformation === |
+ | === Mixed === |

+ | |||

+ | The “mixed” operations described below will be important also in understanding the definition of “monad” concept in category theory. |
||

+ | |||

+ | ==== Functor and natural transformation ==== |
||

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

Line 196: | Line 196: | ||

:<math>(\Lambda\eta)_X = \Lambda(\eta_X)</math> |
:<math>(\Lambda\eta)_X = \Lambda(\eta_X)</math> |
||

− | === Natural transformation and functor === |
+ | ==== Natural transformation and functor ==== |

+ | |||

:Let <math>\mathcal C, \mathcal D, \mathcal E</math> be categories |
:Let <math>\mathcal C, \mathcal D, \mathcal E</math> be categories |
||

:<math>\Delta : \mathcal C \to \mathcal D</math> functor |
:<math>\Delta : \mathcal C \to \mathcal D</math> functor |
||

Line 205: | Line 205: | ||

:<math>(\eta\Delta)_X = \eta_{\Delta(X)}</math> |
:<math>(\eta\Delta)_X = \eta_{\Delta(X)}</math> |
||

− | It can be illustrated by Haskell examples, too. Understanding it is made harder (easier?) by the fact that Haskell's type inference “dissolves” the main point, thus there is no “materialized” manifestation of it. |
+ | It can be illustrated by Haskell examples, too. Understanding it is made harder (easier?) by the fact that Haskell's type inference “(dis)solves” the main point, thus there is no “materialized” manifestation of it. |

== External links == |
== External links == |

## Revision as of 10:01, 4 October 2006

## Contents |

## 1 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. If the examples are exaggerated and/or the definitions are incomprehendable, try #External links.

## 2 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 η
_{A}the component of η at*A*.

Thus, the following diagram commutes (in ):

### 2.1 Vertical arrows: sides of objects

… showing how the natural transformation works.

maybeToList :: Maybe a -> [a]

#### 2.1.1 Left: side of *X* object

maybeToList :: Maybe Int -> [Int] | |

Nothing |
[] |

Just 0 |
[0] |

Just 1 |
[1] |

#### 2.1.2 Right: side of *Y* object

maybeToList :: Maybe Bool -> [Bool] | |

Nothing |
[] |

Just True |
[True] |

Just False |
[False] |

### 2.2 Horizontal arrows: sides of functors

even :: Int -> Bool

#### 2.2.1 Side of Φ functor

fmap even:: Maybe Int -> Maybe Bool | |

Nothing |
Nothing |

Just 0 |
Just True |

Just 1 |
Just False |

#### 2.2.2 Side of Ψ functor

map even:: [Int] -> [Bool] | |

[] |
[] |

[0] |
[True] |

[1] |
[False] |

### 2.3 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] |

### 2.4 Remarks

- has a more general type (even) than described hereIntegral a => a -> Bool
- 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`

).

## 3 Operations

### 3.1 Mixed

The “mixed” operations described below will be important also in understanding the definition of “monad” concept in category theory.

#### 3.1.1 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 to list format and exclude any Maybe's). (Perhaps, all this example is unparactical and exaggerated, because in real life we should solve the whole thing in other ways.)

We can convert*parser*on Maybe's to achieve a

*parser*on list, then

` fmap maybeToList spouse`

Let us see the types: We start with

spouse :: Parser (Maybe String)

- Λ(Φ(
*X*))

or using notion of composing functors

- (ΛΦ)(
*X*)

We want to achieve

fmap maybeToList spouse :: Parser [String]

- Λ(Ψ(
*X*)) - (ΛΨ)(
*X*)

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
- (Λη)
_{X}= Λ(η_{X})

Summary:

- Let be categories
- functors
- functor
- natural transformation

Then let us define a new natural transformation:

- (Λη)
_{X}= Λ(η_{X})

#### 3.1.2 Natural transformation and functor

- Let be categories
- functor
- functors
- natural transformation

Then let us define a new natural transformation:

- (ηΔ)
_{X}= η_{Δ(X)}

It can be illustrated by Haskell examples, too. Understanding it is made harder (easier?) by the fact that Haskell's type inference “(dis)solves” the main point, thus there is no “materialized” manifestation of it.

## 4 External links

- The corresponding HaWiki article is not migrated here yet, so You can see it for more information.
- Wikipedia's Natural transformation article