diff --git a/_chapters/02_category.md b/_chapters/02_category.md index 8b77e32..10e3e77 100644 --- a/_chapters/02_category.md +++ b/_chapters/02_category.md @@ -277,6 +277,8 @@ One remark before we go: in the last paragraphs I sound as if I'm *comparing* ca Defining Categories (again) === +> "...deal with all elements of a set by ignoring them and working with the set's definition." - Dijkstra + All category theory books (including this one) starts by talking about set theory. However looking back I really don't know why that is the case - most books that focus around a given subject don't usually start off by introducing an *entirely different subject* before even starting to talk about the main one, even if the two subjects are so related. Perhaps the set-first approach *is* the best way to introduce people to categories. Or perhaps using sets to introduce categories is just one of those things that people do because everyone else does it. But one thing is for certain - we don't need to study sets in order to understand categories. So now I would like to start over and talk about categories as a first concept. So pretend like it's a new book (I wonder if I can dedicate this to a different person.) diff --git a/_chapters/07_natural_transformations.md b/_chapters/07_natural_transformations.md index 110814f..4d22e65 100644 --- a/_chapters/07_natural_transformations.md +++ b/_chapters/07_natural_transformations.md @@ -3,7 +3,7 @@ layout: default title: Natural transformations --- -Natural transformations and advanced concepts +Natural transformations === In this chapter, we will introduce the central concept of category theory. It is the concept of a morphism between functors or *natural transformation*. Understanding natural transformations will enable us to define category equality and some other advanced concepts. @@ -16,26 +16,27 @@ Objects are overrated > The world is the collection of facts, not of things. > Ludwig Wittgenstein -Objects are all around us, both in mathematics and in real life - virtually everything that we see or imagine can be viewed as an object. Because of this, we might be inclined to think that the key to understanding the world is to understand what objects are. And this indeed is an idea shared between many people, you might even say that this is what set theory does - the main (some say only) concept of set theory is a concept of a set. When mathematicians say that "everything is a set", they are primarily saying that all objects can be represented by sets (although morphisms can be represented by sets as well.) +Objects are all around us, both in mathematics and in real life - virtually everything that we see or imagine can be viewed as an object. Because of this, we might be inclined to think that the key to understanding the world is to understand what objects are. And this indeed is a popular idea, you might even say that this is what set theory does - the main (we may say the only) atomic concept in set theory is a concept of a set. When mathematicians say that "everything is a set", they are primarily saying that all objects can be represented by sets (and morphisms can be represented by sets as well.) -However there is another way to look at things. Because, what is an object, when viewed by itself? Can we study an object in isolation? And is there anything left to study about it, once it is detached from its environment? When we think hard about everyday objects we realize that each of them has a specific *function* or functions without which, it would be just a piece of junk, and in many ways it won't be an object at all. And this is even more so for mathematical objects which you cannot even repurposed when they are no longer useful - functions, or relations, are key. So instead of thinking about objects which just happen to have some morphisms between them, we might take the opposite view and say that objects are only interesting as sources and targets of morphisms. +However, there is another way to look at things. What is an object, when viewed by itself? Can we study an object in isolation and will there anything left to study about it, once it is detached from its environment? When we think hard about everyday objects we realize that each of them has a specific *function* or functions without which, it would be just a piece of junk, and in many ways it won't be an object at all. And this is even more so for mathematical objects which you cannot even represent in isolation - functions, are key. -This view is best expressed by category theory and specifically by the notion of universal properties (limits) - as we said universal properties define an object *up to a unique isomorphism*. This means that if there are two or more objects that are isomorphic to one another and have exactly the same morphisms to all other objects in the category, then these objects are for all intends and purposes equivalent. +So instead of thinking about objects which just happen to have some morphisms between them, we might take the opposite view and say *that objects are only interesting as sources and targets of morphisms.* +This view is best expressed by category theory and specifically by the notion of *universal properties (limits)* - as we said universal properties define an object *up to a unique isomorphism*. This means that if there are two or more objects that are isomorphic to one another and have exactly the same morphisms to all other objects in the category, then these objects are for all intends and purposes equivalent. Equivalence of categories === -Are you ready to hear about natural transformations? Actually it is my opinion that you are not, so I would like to continue with something else. Let's ask ourselves the same question that we were poundering at the beginning of the previous chapter - what does it mean for two categories to be equal. This question is even more interesting in the context of the category of categories. We said that categorical isomorphism is somewhat too rigid to accurately capture the concept of equality. And the paragraph above can serve as a good summary as to why this is the case: in isomorphic categories, isomorphic *objects* aren't considered equal, for example the following two categories are not isomorphic. +Are you ready to hear about natural transformations? Actually it is my opinion that you are not, so I would like to continue with something else. Let's ask ourselves the same question that we were poundering at the beginning of the previous chapter - what does it mean for two categories to be equal. This question is even more interesting in the context of the category of categories. We said that categorical isomorphism is somewhat too rigid to accurately capture the concept of equality, as (though it may seem contradictory) in isomorphic categories, *isomorphic objects aren't considered equal*, and so this concept goes against the idea that functions (and not objects) are the primary concept. For example the following two categories are *not* isomorphic. ![Simple non-isomorphic categories](simple_non_isomorphic_categories.svg) -Being isomorphic means that two structures are completely the same. A map is isomorphic to an area only it represents the area completely, like if there is a arrow for each route and a point for each intersection. +So, being isomorphic means that two structures are completely the same. A map is isomorphic to an area only it represents the area completely, like if there is a arrow for each route and a point for each intersection. ![Isomorphic categories](isomorphic_categories.svg) -But that won't always be what we want. In category theory we specify most concepts by treating isomorphis objects as equal - this is valid for all definitions that are based on universal properties. Or to extend the map example, suppose, that there are two intersections that are positioned in such a way that for every road that goes to and from one of them, there is an identical road to the other one (maybe the one of these intercection was meant to replace the other one but it wasn't closed.) Then suppose that you have a map which displays these two intercections as one and the same intercection. +But, like we said, in category theory, we specify most concepts by treating isomorphis objects as equal - this is valid for all definitions that are based on universal properties. Or to extend the map example, suppose, that there are two intersections that are positioned in such a way that for every road that goes to and from one of them, there is an identical road to the other one (maybe the one of these intercection was meant to replace the other one but it wasn't closed.) Then suppose that you have a map which displays these two intercections as one and the same intercection. ![Non-isomorphic categories](non_isomorphic_categories.svg) @@ -61,7 +62,7 @@ And if we compose it in the other direction, we don't get the same object (which ![Equivalent categories, functor G F](equivalent_categories_g_f.svg) -The definition betwen the two concepts is small but crucial: categories are isomorphic if there exist an *invertable* functor between them. They are equivalent if they are connected by two *isomorphic functors. +The definition betwen the two concepts is small but crucial: categories are isomorphic if there exist an *invertable* functor between them. They are equivalent if they are connected by two *isomorphic functors.* **Task:** Verify that the categories in the previous example are also equivalent. @@ -74,52 +75,94 @@ The progression that we made so far (morphisms -> functors -> natural transforma But enough talking, let's draw some diagrams. -We know that natural transformations are morphisms between functors, so let's draw two functors (I am omitting the arrows between objects for brevity.) +We know that natural transformations are morphisms between functors, so let's draw two functors (I am omitting the arrows between the morphisms for brevity.) ![Two functors](natural_functors_objects.svg) Note that the functors are similar have the same signature - both their input and output categories are the same - this is a necessary (but not sufficient) condition for them to be connected by a natural transformation. -Object mapping mapping +Building the object mapping mapping --- A functor is comprised of two components - object mapping and morphism mapping, so a natural transformatiom, being a morphism between functors, should take those two mappings into account. -Let's first connect the object mappings of the two functors, creating what we called "object mapping mapping", but which is actually much simpler than it sounds - we only need to connect the functors' targets, because the sources would always be the same - both functors would include all object from the source category, and so mapping the two functors' object components involves nothing more than specifying a bunch of morphisms in the target category. +Let's first connect the object mappings of the two functors, creating what we called "object mapping mapping". It is simpler than it sounds when we realize that we only need to connect the object in functors' *target category*. The objects in the source category would just always be the same as both functors would include *all* object from the source category, (because that is what functions do, right?) + +In other words, mapping the two functors' object components involves nothing more than specifying a bunch of morphisms in the target category. ![Two functors](natural_transformation.svg) -Note that the mappings between these objects does not have the character of a function, since not all objects are mapped to other objects. +Note that the mappings between these objects do not (always) have the character of a functor, since not all objects are mapped to other objects. -Morphism mapping mapping +Building the morphism mapping mapping --- - -Next up, we should connect the morphism mappings of the two functors. Here things are even simpler: as with the "object mapping mapping" we have to only worry the morphisms in the target category, that is, we only need to connect all morphisms that are mapped by one functor to morphisms that are mapped by another, but furthermore when we try to establish such connections, we would realize that *there is only one natural way to do it* once the connections between the object mappings are already established. That way is to take each morphism in the source category and to connect the two images that this morphism has (generated by the two functors), in the target category. +Once the connections between the object mappings are already established, there is only one way to do the morphism mapping - take each morphism in the source category and connect the two images that this morphism has (generated by the two functors), in the target category. ![Two functors](natural_functors.svg) -In other words, connecting the morphism mappings of the two functors is redundant - if we have the object mapping, we don't need it (or alternatively, if we have it, we don't need the object mapping.) We draw it just to verify that the object mapping that we specified indeed gives rise to a natural transformation. In this case we have just one morphism, so it is easy to see that it does. - -Definition +Formal definition --- -Before we finish up this chapter, let's distill the definition of natural transformations: A natural transformation between two functors **F** and **G**with source category **C** and a target category **D** (both functors have to have the same signature) is a collection of morphisms between objects in **D** that maps all target objects of functor **F** (or the image of **F** in **D** as it is also called) to target objects of functor **G**. +Before we finish up this chapter, let's distill a rigorous definition of natural transformations: For any two functors $F$ and $G$ that both have the same type signature of source category $C$ and a target category $D$ (so $F : C \to D$ and $G : C \to D$), a natural transformation $\alpha : F \Rightarrow G$ is a collection of morphisms between objects in $D$ that maps all target objects of functor $F$ (or the image of $F$ in $D$ as it is also called) to target objects of functor $G$. -Furthermore, the mapping must be such that any morphism in **C** with a signature **X -> Y**, the object **F(X)** in **D** should always be mapped to **G(X)** and object **F(Y)** should be mapped to **G(Y)**. +Furthermore, the mapping must be such that any morphism in $C$ with a signature $X \to Y$, the object $F(X)$ in $D$ should always be mapped to $G(X)$ and object $F(Y)$ should be mapped to $G(Y)$. -Note that if the condition above (sometimes called the "naturality condition") is met, the below diagram would commute. This works the other way too - if the diagram commutes, the condition is met, so, in a very categorical fashion, natural transformations can be defined using this diagram. +Note that if the condition above (sometimes called the "naturality condition") is met, the below diagram would commute. This works the other way too - if the diagram commutes, the condition is met, so we can say that *the diagram and the definition are isomorphic*. And because the diagram is much simpler we may think of it as the real definition. ![Two functors](natural_transformation_formula.svg) -If you look just a little bit closely, you will see that the only difference between this diagram and our example is that here morphisms are displayed vertically, while in the exam they are horizontal. +If you look just a little bit closely, you will see that the only difference between this diagram and our example is that here morphisms are displayed vertically, while in the example they are horizontal. +Natural transformations again +=== -natural transformations from surjective functors are just regular morphisms. +I am sure that once you saw one definition of a natural transformation, you just cannot get enough of them. So let's work out one more. Let's start with our two functors. +![Two functors](natural_functors.svg) + +This diagram might prompt us into thinking of natural transformations as some kind of "double functors" that have not one but two arrows coming from each object. This notion, of course, cannot be defined (as we said several times, the whole point of functions is the that there is just one arrow for each object), but a related notion that can be defined is that of *product categories*. + +Product categories +--- + +We already saw products between *groups/monoids*, the product categories are similar: take any two categories (in practice it is good if one of them is a finite one, but any two would work). + +![Product category - components](product_components.svg) + +And then take the set of all possible pairs of the objects of these categories. + +![Product category - objects](product_set.svg) + +Is there a way to make a category from that set? Sure, we saw something similar in the chapter about group/monoid products - we just take all morphisms coming from any of the two categories and replicate them to all pairs that feature some objects from their type signature. + +![Product category](product_category.svg) + +This is the *product category* of the two categories. + +Natural transformations as functors of product categories +--- + +When looking into the last diagram, you might suspect that the categories we chose to demonstrate the notion of the product category is not arbitrary. And you would be right - we can already see the naturality square in it. + +![Product category](product_category_target_category.svg) + +That is because the category with two objects and one morphism (which, if you remember is called $2$) is the key to constructing a functor that is equivalent to a natural transformation - because it has two objects, it produces two copies of the source category and because the two objects are connected, the two copies are connected in the same way as the two "images" in the target category are connected. And so all that is left is to draw the two functors. + +![Product category](product_category_natural_transformation.svg) + +Formal definition +--- +Let's state formally what we saw in these diagrams. As you remember we call our two functors $F$ and $G$ and the our categoris $C$ and $D$ (so $F : C \to D$ and $G : C \to D$). + +Also, we call the category with two connected objects $2$ and the morphisms in it are $0$ and $1$. + +In this case, our natural transformation $\alpha : F \Rightarrow G$ is just a functor from the product category of $2$ to $C$ so $2 \times C \to G$, such that if we take the subcategory of $C$ comprised of just those objects that have the $0$ object, and the morphisms between them, then that functor is equivalent to $F$, and if we consider the subcategory that contains $1$, then the functor is equivalent to $G$ (we write $\alpha(-,0)=F$ and $\alpha(-,1)=G$.) Et voilĂ ! + +**Task:** See how the two definitions are equivalent. /* -https://www.math3ma.com/blog/what-is-a-natural-transformation +Natural transformations from surjective functors are just regular functors. Limits and colimits @@ -132,10 +175,6 @@ Isomorphism is not hard to construct - given two sets, containing three objects But most of these isomorphisms, are just random. In our studies we are only interested in structures that *make sense*. In category theory the abstract notion of making sense is captured by the naturality condition. - - - - Free objects === https://math.stackexchange.com/questions/131389/what-are-free-objects @@ -157,3 +196,13 @@ https://www.azimuthproject.org/azimuth/show/Applied+Category+Theory+Course#Cours https://eed3si9n.com/herding-cats/day1.html + + +https://topology.mitpress.mit.edu/ + + +https://www.math3ma.com/blog/what-is-a-natural-transformation + +https://graphicallinearalgebra.net/2015/04/23/makelele-and-linear-algebra/ + +*/ diff --git a/_chapters/07_natural_transformations/natural_functors.svg b/_chapters/07_natural_transformations/natural_functors.svg index b699fb8..c6445fe 100644 --- a/_chapters/07_natural_transformations/natural_functors.svg +++ b/_chapters/07_natural_transformations/natural_functors.svg @@ -1,17 +1,17 @@ + inkscape:version="1.2.2 (1:1.2.2+202212051552+b0a8486541)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> @@ -20,7 +20,7 @@ image/svg+xml - + @@ -35,213 +35,176 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="2560" - inkscape:window-height="1376" + inkscape:window-width="1920" + inkscape:window-height="1024" id="namedview15615" showgrid="false" inkscape:zoom="1.8505343" - inkscape:cx="192.83213" - inkscape:cy="107.6897" + inkscape:cx="280.99993" + inkscape:cy="83.759593" inkscape:window-x="0" - inkscape:window-y="27" + inkscape:window-y="0" inkscape:window-maximized="1" - inkscape:current-layer="svg15613" /> + inkscape:current-layer="svg15613" + inkscape:showpageshadow="2" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" /> - + transform="matrix(1.8508385,-0.13838212,0.13925716,1.7854521,-330.79913,135.83735)" /> + transform="matrix(1.8508385,-0.13838212,0.13925716,1.7854521,106.62482,108.72448)" /> + + style="fill:#e6e7e8;stroke:#bbbcbe;stroke-width:0;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" + id="circle15601-9-4-4-6" + cy="102.40331" + cx="154.05612" + transform="matrix(0.99687847,-0.0789514,0.07343263,0.99730018,0,0)" + rx="86.711418" + ry="88.568329" /> - - - + id="g42748-8-7" + transform="matrix(1.8508385,-0.13838212,0.13925716,1.7854521,14.517046,-77.279602)" /> + + style="display:inline;fill:#dddddd;stroke:#483737;stroke-width:6.389;stroke-miterlimit:10" + id="g1482-7-0-1-0-3-8-6" + transform="matrix(0.23583959,-0.00424406,0.0327569,0.33517836,379.6611,-19.087725)" + inkscape:transform-center-x="8.9079959" + inkscape:transform-center-y="-14.382634"> + style="display:inline;fill:#dddddd;stroke:#445500;stroke-width:6.389;stroke-miterlimit:10" + id="g1482-7-0-1-0-3-5-7-2-1-4-1" + transform="matrix(0.23880265,-0.01553765,0.04981943,0.32836014,374.73542,62.041768)" + inkscape:transform-center-x="9.3868545" + inkscape:transform-center-y="-14.629477"> + id="g16122-0" + transform="matrix(1.3814535,0,0,1.3814535,-257.13527,62.911732)"> + id="g16118-6" + transform="matrix(1.3814535,0,0,1.3814535,-221.76821,-13.628911)"> + id="g16130-2" + transform="matrix(1.3814535,0,0,1.3814535,-236.54846,-77.500759)"> + id="g16134-8" + transform="matrix(1.3814535,0,0,1.3814535,-179.85315,-45.877257)"> - - - - - + id="g16153-7" + transform="matrix(1.3814535,0,0,1.3814535,-75.845401,-39.658769)"> @@ -249,49 +212,87 @@ ry="11.748343" rx="12.175604" transform="matrix(-0.07418163,-0.99724475,0.99700153,-0.07738188,0,0)" - style="fill:#fce600;fill-opacity:1;stroke:#ffcc00;stroke-width:1.67664468;stroke-miterlimit:10;stroke-opacity:1" - id="circle15605" + style="fill:#fce600;fill-opacity:1;stroke:#ffcc00;stroke-width:1.67664;stroke-miterlimit:10;stroke-opacity:1" + id="circle15605-9" cy="186.48853" cx="-106.90229" /> + inkscape:transform-center-y="-17.127165" + inkscape:transform-center-x="6.9685135" + transform="matrix(0.1833558,-0.00736204,0.01366546,0.32804397,376.82505,-21.999207)" + id="g1482-7-0-1-0-3-9-5" + style="display:inline;opacity:0.954;fill:#dddddd;stroke:#626262;stroke-width:11.1053;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"> + + + + + + + + + + + + - - - - diff --git a/_chapters/07_natural_transformations/natural_functors_objects.svg b/_chapters/07_natural_transformations/natural_functors_objects.svg index 3e66e30..4214ce2 100644 --- a/_chapters/07_natural_transformations/natural_functors_objects.svg +++ b/_chapters/07_natural_transformations/natural_functors_objects.svg @@ -1,17 +1,17 @@ + inkscape:version="1.2.2 (1:1.2.2+202212051552+b0a8486541)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> @@ -20,7 +20,7 @@ image/svg+xml - + @@ -35,52 +35,56 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="2560" - inkscape:window-height="1376" + inkscape:window-width="960" + inkscape:window-height="1024" id="namedview15615" showgrid="false" - inkscape:zoom="5.2341015" - inkscape:cx="297.33908" - inkscape:cy="112.27502" - inkscape:window-x="0" - inkscape:window-y="27" - inkscape:window-maximized="1" - inkscape:current-layer="svg15613" /> + inkscape:zoom="1.3085254" + inkscape:cx="278.93994" + inkscape:cy="94.763159" + inkscape:window-x="12" + inkscape:window-y="10" + inkscape:window-maximized="0" + inkscape:current-layer="svg15613" + inkscape:showpageshadow="2" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" /> + transform="matrix(1.8527524,-0.13852522,0.13940116,1.7872984,-431.91195,-44.828737)" /> + cy="107.98672" + cx="155.13821" + transform="matrix(0.99687847,-0.0789514,0.07343263,0.99730018,0,0)" + rx="86.801086" + ry="88.659912" /> + transform="matrix(1.8527524,-0.13852522,0.13940116,1.7872984,5.964309,-71.96965)" /> + cy="128.78745" + cx="419.25089" + transform="matrix(0.99687847,-0.0789514,0.07343263,0.99730018,0,0)" + rx="86.801086" + ry="88.659912" /> + id="g16319" + transform="matrix(1.1275806,0,0,1.3863773,-42.154842,-22.086246)"> + style="fill:#dddddd;stroke:#626262;stroke-width:11.1053;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"> + transform="matrix(0.23608346,-0.00424845,0.03279077,0.33552496,371.48596,-13.717597)" + inkscape:transform-center-x="8.9172086" + inkscape:transform-center-y="-14.397507"> + transform="matrix(0.23904959,-0.01555372,0.04987094,0.32869969,366.55519,67.495787)" + inkscape:transform-center-x="9.3965584" + inkscape:transform-center-y="-14.644607"> + transform="matrix(1.382882,0,0,1.382882,-265.96892,68.366651)"> + transform="matrix(1.382882,0,0,1.382882,-230.56528,-8.2531392)"> + transform="matrix(1.382882,0,0,1.382882,-245.36082,-72.191036)"> + transform="matrix(1.382882,0,0,1.382882,-188.60688,-40.534833)"> - + style="fill:#dddddd;stroke:#626262;stroke-width:11.1053;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"> + transform="matrix(0.28095794,-0.01690546,-0.02851911,0.33187515,79.948427,21.209965)" + inkscape:transform-center-x="7.6969199" + inkscape:transform-center-y="-14.409772"> + transform="matrix(1.382882,0,0,1.382882,-84.491582,-34.309914)"> @@ -302,21 +298,21 @@ ry="11.748343" rx="12.175604" transform="matrix(-0.07418163,-0.99724475,0.99700153,-0.07738188,0,0)" - style="fill:#fce600;fill-opacity:1;stroke:#ffcc00;stroke-width:1.67664468;stroke-miterlimit:10;stroke-opacity:1" + style="fill:#fce600;fill-opacity:1;stroke:#ffcc00;stroke-width:1.67664;stroke-miterlimit:10;stroke-opacity:1" id="circle15605" cy="186.48853" cx="-106.90229" /> + transform="matrix(1.3778571,-0.11778196,0.11778196,1.3778571,-135.32747,27.49973)" + inkscape:transform-center-x="-0.76683714" + inkscape:transform-center-y="3.9361668"> @@ -324,7 +320,7 @@ ry="11.964526" rx="12.399649" transform="matrix(0.99721659,-0.07455915,0.0777593,0.99697216,0,0)" - style="fill:#e6e7e8;stroke:#bbbcbe;stroke-width:2.21405125;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" + style="fill:#e6e7e8;stroke:#bbbcbe;stroke-width:2.21405;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" id="circle15601-9-4" cy="73.518608" cx="172.10857" /> diff --git a/_chapters/07_natural_transformations/natural_transformation.svg b/_chapters/07_natural_transformations/natural_transformation.svg index 111ef20..69858bd 100644 --- a/_chapters/07_natural_transformations/natural_transformation.svg +++ b/_chapters/07_natural_transformations/natural_transformation.svg @@ -1,17 +1,17 @@ + inkscape:version="1.2.2 (1:1.2.2+202212051552+b0a8486541)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> @@ -35,52 +35,56 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="2560" - inkscape:window-height="1376" + inkscape:window-width="1080" + inkscape:window-height="1864" id="namedview15615" showgrid="false" - inkscape:zoom="3.1026363" - inkscape:cx="287.20657" - inkscape:cy="112.27502" + inkscape:zoom="1.5513182" + inkscape:cx="263.00214" + inkscape:cy="115.38574" inkscape:window-x="0" - inkscape:window-y="27" + inkscape:window-y="0" inkscape:window-maximized="1" - inkscape:current-layer="svg15613" /> + inkscape:current-layer="svg15613" + inkscape:showpageshadow="2" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" /> + transform="matrix(1.3397762,-0.10017139,0.10080481,1.2924446,-222.38952,-6.42367)" /> + cy="108.13276" + cx="162.27782" + transform="matrix(0.99687847,-0.0789514,0.07343263,0.99730018,0,0)" + rx="87.544991" + ry="89.419746" /> + transform="matrix(1.3397762,-0.10017139,0.10080481,1.2924446,94.250842,-26.050015)" /> + cy="130.83025" + cx="435.94601" + transform="matrix(0.99687847,-0.0789514,0.07343263,0.99730018,0,0)" + rx="87.544991" + ry="89.419746" /> + id="g16319" + transform="matrix(1.1372442,0,0,1.3982589,-36.781436,-23.511565)"> + style="fill:#dddddd;stroke:#626262;stroke-width:11.1053;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"> - - - - - - - - - - - - - - - - - - - - - - - - - + style="fill:#dddddd;stroke:#626262;stroke-width:11.1053;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"> + transform="matrix(0.28336582,-0.01705034,-0.02876352,0.3347194,86.368292,20.155705)" + inkscape:transform-center-x="7.762883" + inkscape:transform-center-y="-14.533267"> + transform="matrix(1.3947337,0,0,1.3947337,-79.48101,-35.839995)"> @@ -302,21 +178,21 @@ ry="11.748343" rx="12.175604" transform="matrix(-0.07418163,-0.99724475,0.99700153,-0.07738188,0,0)" - style="fill:#fce600;fill-opacity:1;stroke:#ffcc00;stroke-width:1.67664468;stroke-miterlimit:10;stroke-opacity:1" + style="fill:#fce600;fill-opacity:1;stroke:#ffcc00;stroke-width:1.67664;stroke-miterlimit:10;stroke-opacity:1" id="circle15605" cy="186.48853" cx="-106.90229" /> + transform="matrix(1.3896657,-0.11879138,0.11879138,1.3896657,-130.75259,26.49938)" + inkscape:transform-center-x="-0.77340527" + inkscape:transform-center-y="3.9699017"> @@ -324,49 +200,169 @@ ry="11.964526" rx="12.399649" transform="matrix(0.99721659,-0.07455915,0.0777593,0.99697216,0,0)" - style="fill:#e6e7e8;stroke:#bbbcbe;stroke-width:2.21405125;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" + style="fill:#e6e7e8;stroke:#bbbcbe;stroke-width:2.21405;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" id="circle15601-9-4" cy="73.518608" cx="172.10857" /> + style="display:inline;fill:#dddddd;stroke:#aa0000;stroke-width:6.389;stroke-miterlimit:10;stroke-opacity:1" + id="g1482-7-0-1-0-3-8-5" + transform="matrix(0.23810676,-0.00428486,0.0330718,0.33840049,384.25583,-13.420455)" + inkscape:transform-center-x="8.9936283" + inkscape:transform-center-y="-14.520899"> + + + + + + + + + + + + + + + + + + + + + + + + + style="display:inline;fill:#ff8080;stroke:#008000;stroke-width:6.389;stroke-miterlimit:10;stroke-opacity:1" + id="g1482-7-0-4-9-7" + transform="matrix(7.1624817e-4,0.15689333,-0.21898679,0.01208256,554.20134,58.029745)"> diff --git a/_chapters/07_natural_transformations/product_category.svg b/_chapters/07_natural_transformations/product_category.svg new file mode 100644 index 0000000..c8b56c7 --- /dev/null +++ b/_chapters/07_natural_transformations/product_category.svg @@ -0,0 +1,384 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_chapters/07_natural_transformations/product_category_natural_transformation.svg b/_chapters/07_natural_transformations/product_category_natural_transformation.svg new file mode 100644 index 0000000..32fdd85 --- /dev/null +++ b/_chapters/07_natural_transformations/product_category_natural_transformation.svg @@ -0,0 +1,620 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_chapters/07_natural_transformations/product_category_target_category.svg b/_chapters/07_natural_transformations/product_category_target_category.svg new file mode 100644 index 0000000..60b557c --- /dev/null +++ b/_chapters/07_natural_transformations/product_category_target_category.svg @@ -0,0 +1,559 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_chapters/07_natural_transformations/product_components.svg b/_chapters/07_natural_transformations/product_components.svg new file mode 100644 index 0000000..503eda4 --- /dev/null +++ b/_chapters/07_natural_transformations/product_components.svg @@ -0,0 +1,217 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_chapters/07_natural_transformations/product_set.svg b/_chapters/07_natural_transformations/product_set.svg new file mode 100644 index 0000000..2ec854e --- /dev/null +++ b/_chapters/07_natural_transformations/product_set.svg @@ -0,0 +1,304 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +