This commit is contained in:
Boris Marinov 2022-09-11 08:56:25 +03:00
parent ecb567bc4a
commit 6f92703b7e
11 changed files with 2068 additions and 155 deletions

View File

@ -1,2 +1,4 @@
source 'https://rubygems.org'
gem 'github-pages', group: :jekyll_plugins
gem "webrick", "~> 1.7"

View File

@ -1,7 +1,7 @@
GEM
remote: https://rubygems.org/
specs:
activesupport (6.0.4.6)
activesupport (6.0.5)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
minitest (~> 5.1)
@ -14,9 +14,8 @@ GEM
execjs
coffee-script-source (1.11.1)
colorator (1.1.0)
commonmarker (0.17.13)
ruby-enum (~> 0.5)
concurrent-ruby (1.1.9)
commonmarker (0.23.5)
concurrent-ruby (1.1.10)
dnsruby (1.61.9)
simpleidn (~> 0.1)
em-websocket (0.5.3)
@ -26,38 +25,19 @@ GEM
ffi (>= 1.15.0)
eventmachine (1.2.7)
execjs (2.8.1)
faraday (1.10.0)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
faraday-httpclient (~> 1.0)
faraday-multipart (~> 1.0)
faraday-net_http (~> 1.0)
faraday-net_http_persistent (~> 1.0)
faraday-patron (~> 1.0)
faraday-rack (~> 1.0)
faraday-retry (~> 1.0)
faraday (2.3.0)
faraday-net_http (~> 2.0)
ruby2_keywords (>= 0.0.4)
faraday-em_http (1.0.0)
faraday-em_synchrony (1.0.0)
faraday-excon (1.1.0)
faraday-httpclient (1.0.1)
faraday-multipart (1.0.3)
multipart-post (>= 1.2, < 3)
faraday-net_http (1.0.1)
faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0)
faraday-rack (1.0.0)
faraday-retry (1.0.3)
faraday-net_http (2.0.3)
ffi (1.15.5)
forwardable-extended (2.6.0)
gemoji (3.0.1)
github-pages (223)
github-pages (226)
github-pages-health-check (= 1.17.9)
jekyll (= 3.9.0)
jekyll (= 3.9.2)
jekyll-avatar (= 0.7.0)
jekyll-coffeescript (= 1.1.1)
jekyll-commonmark-ghpages (= 0.1.6)
jekyll-commonmark-ghpages (= 0.2.0)
jekyll-default-layout (= 0.1.4)
jekyll-feed (= 0.15.1)
jekyll-gist (= 1.5.0)
@ -71,7 +51,7 @@ GEM
jekyll-relative-links (= 0.6.1)
jekyll-remote-theme (= 0.4.3)
jekyll-sass-converter (= 1.5.2)
jekyll-seo-tag (= 2.7.1)
jekyll-seo-tag (= 2.8.0)
jekyll-sitemap (= 1.4.0)
jekyll-swiss (= 1.0.0)
jekyll-theme-architect (= 0.2.0)
@ -89,12 +69,12 @@ GEM
jekyll-theme-time-machine (= 0.2.0)
jekyll-titles-from-headings (= 0.5.3)
jemoji (= 0.12.0)
kramdown (= 2.3.1)
kramdown (= 2.3.2)
kramdown-parser-gfm (= 1.1.0)
liquid (= 4.0.3)
mercenary (~> 0.3)
minima (= 2.5.1)
nokogiri (>= 1.12.5, < 2.0)
nokogiri (>= 1.13.4, < 2.0)
rouge (= 3.26.0)
terminal-table (~> 1.4)
github-pages-health-check (1.17.9)
@ -103,13 +83,13 @@ GEM
octokit (~> 4.0)
public_suffix (>= 3.0, < 5.0)
typhoeus (~> 1.3)
html-pipeline (2.14.0)
html-pipeline (2.14.2)
activesupport (>= 2)
nokogiri (>= 1.4)
http_parser.rb (0.8.0)
i18n (0.9.5)
concurrent-ruby (~> 1.0)
jekyll (3.9.0)
jekyll (3.9.2)
addressable (~> 2.4)
colorator (~> 1.0)
em-websocket (~> 0.5)
@ -127,12 +107,12 @@ GEM
jekyll-coffeescript (1.1.1)
coffee-script (~> 2.2)
coffee-script-source (~> 1.11.1)
jekyll-commonmark (1.3.1)
commonmarker (~> 0.14)
jekyll (>= 3.7, < 5.0)
jekyll-commonmark-ghpages (0.1.6)
commonmarker (~> 0.17.6)
jekyll-commonmark (~> 1.2)
jekyll-commonmark (1.4.0)
commonmarker (~> 0.22)
jekyll-commonmark-ghpages (0.2.0)
commonmarker (~> 0.23.4)
jekyll (~> 3.9.0)
jekyll-commonmark (~> 1.4.0)
rouge (>= 2.0, < 4.0)
jekyll-default-layout (0.1.4)
jekyll (~> 3.0)
@ -164,7 +144,7 @@ GEM
rubyzip (>= 1.3.0, < 3.0)
jekyll-sass-converter (1.5.2)
sass (~> 3.4)
jekyll-seo-tag (2.7.1)
jekyll-seo-tag (2.8.0)
jekyll (>= 3.8, < 5.0)
jekyll-sitemap (1.4.0)
jekyll (>= 3.7, < 5.0)
@ -217,7 +197,7 @@ GEM
gemoji (~> 3.0)
html-pipeline (~> 2.2)
jekyll (>= 3.0, < 5.0)
kramdown (2.3.1)
kramdown (2.3.2)
rexml
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
@ -226,37 +206,33 @@ GEM
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.3.6)
mini_portile2 (2.8.0)
minima (2.5.1)
jekyll (>= 3.5, < 5.0)
jekyll-feed (~> 0.9)
jekyll-seo-tag (~> 2.1)
minitest (5.15.0)
multipart-post (2.1.1)
nokogiri (1.13.3)
mini_portile2 (~> 2.8.0)
minitest (5.16.0)
nokogiri (1.13.6-x86_64-linux)
racc (~> 1.4)
octokit (4.22.0)
faraday (>= 0.9)
sawyer (~> 0.8.0, >= 0.5.3)
octokit (4.25.0)
faraday (>= 1, < 3)
sawyer (~> 0.9)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
public_suffix (4.0.6)
public_suffix (4.0.7)
racc (1.6.0)
rb-fsevent (0.11.1)
rb-inotify (0.10.1)
ffi (~> 1.0)
rexml (3.2.5)
rouge (3.26.0)
ruby-enum (0.9.0)
i18n
ruby2_keywords (0.0.5)
rubyzip (2.3.2)
safe_yaml (1.0.5)
sass (3.7.4)
sawyer (0.8.2)
listen (~> 3.0)
sawyer (0.9.2)
addressable (>= 2.3.5)
faraday (> 0.8, < 2.0)
faraday (>= 0.17.3, < 3)
simpleidn (0.2.1)
unf (~> 0.1.4)
terminal-table (1.8.0)
@ -268,15 +244,17 @@ GEM
thread_safe (~> 0.1)
unf (0.1.4)
unf_ext
unf_ext (0.0.8)
unf_ext (0.0.8.2)
unicode-display_width (1.8.0)
zeitwerk (2.5.4)
webrick (1.7.0)
zeitwerk (2.6.0)
PLATFORMS
ruby
x86_64-linux
DEPENDENCIES
github-pages
webrick (~> 1.7)
BUNDLED WITH
2.1.4
2.3.5

View File

@ -333,7 +333,7 @@ Functional composition is special not only because you can take any two morphism
![Composition of morphisms with many objects](composition_n_objects.svg)
But let's get back to the math. If we carefully review the definition above, we can see that it can be reduced to multiple applications of the following formula: given 4 objects and 3 morphisms between them $f$ $g$ $h$, combining $h$ and $g$ and then combining the end result with $f$ should be the same as combining $h$ to the result of $g$ and $f$ (or simply $(h • g) • f = h • (g • f)$).
But let's get back to the math. If we carefully review the definition above, we can see that it can be reduced to multiple applications of the following formula: given 3 objects and 2 morphisms between them $f$ $g$ $h$, combining $h$ and $g$ and then combining the end result with $f$ should be the same as combining $h$ to the result of $g$ and $f$ (or simply $(h • g) • f = h • (g • f)$).
This formula can be expressed using the following diagram, which would only commute if the formula is true (given that all our category-theoretic diagrams commute, we can say, in such cases, that the formula and the diagram are equivalent.)
@ -350,7 +350,9 @@ This approach (composing indefinitely many things) for building stuff is often u
Identity
---
Before the standard Arabic numerals that we use today, there were Roman numbers. They were no good, for the simple reason that they lacked the concept of *zero* - a number that indicated the absence of number. Any number system that lacks this simple concept is extremely limited. It is the same in programming, where we have multiple values that indicate the absence of a value and it is the same in category theory - in order to be able to define more stuff using morphisms in category theory, we too would want to define zero, or what we call the "identity morphism" for each object. In short, this is a morphism, that doesn't do anything.
Before the standard Arabic numerals that we use today, there were Roman numbers. Roman numerals weren't any good, because they lacked the concept of *zero* - a number that indicated the absence of quantity and any number system that lacks this simple concept is bound to remain extremely limited. It is the same in programming, where we have multiple values that indicate the absence of a value.
In order to be able to define more stuff using morphisms in category theory, we too would want to define zero, or what we call the "identity morphism" for each object. In short, this is a morphism, that doesn't do anything.
![The identity morphism (but can also be any other morphism)](identity.svg)
@ -358,17 +360,6 @@ It's important to mark this morphism, because there can be (let's add the very i
**Question:** What is the identity morphism in the category of sets?
Isomorphism
---
Why do we need to define a morphism that does nothing? It's because morphisms are the basic building blocks of our language, and we need this one to be able to speak properly. For example, once we have the concept of identity morphism defined, we can have a category-theoretic definition of an *isomorphism* (which is important, because the concept of an isomorphism is very important for category theory). Like we said in the previous chapter, an isomorphism between two objects ($A$ and $B$) consists of two morphisms - ($A → B$. and $B → A$) such that their compositions are equivalent to the identity functions of the respective objects. Formally, objects $A$ and $B$ are isomorphic if there exist morphisms $f: A → B$ and $g: B → A$ such that $f \bullet g = id_{B}$ and $g \bullet f = id_{A}$.
And here is the same thing expressed with a commuting diagram.
![Isomorphism](isomorphism.svg)
Like the example with the law of associativity, the diagram expresses the same (simple) fact as the formula, namely that going from the one of objects ($A$ and $B$) to the other one and then back again is the same as applying the identity morphism i.e. doing nothing.
A summary
---
@ -379,3 +370,63 @@ A category is a collection of *objects* (we can think of them as *points*) and *
2. There should be a way to compose two morphisms with an appropriate type signature into a third one in a way that is *associative*.
This is it.
Addendum: Why are categories like that?
===
All texts on category theory explain *what* categories are, but few make an attempt to explain *why* are they like that. From one standpoint, the answer to that seems obvious - we study categories because they *work*, I mean, look at how many applications are there. But if we take a deeper view, it (the answer) is far from obvious: category theory is an abstract theory, so everything about it is kinda arbitrary: you can remove a law - and you get another theory that is similar to category theory you add one more law and you get a yet another one. So if these specific laws and this specific theory i.e. this specific set of laws works better than any other, then this fact demands an explanation. Not a *mathematical* explanation (e.g. we cannot prove that this theory is better than some other one), but an explanation nevertheless. What follows is *my attempt* to provide such an explanation, regarding the laws of *identity* and *associativity*.
Identity and isomorphisms
===
The reason the identity law is required is by far the more obvious one. We need to have a morphism that does nothing? It's because morphisms are the basic building blocks of our language, and we need this one to be able to speak properly. For example, once we have the concept of identity morphism defined, we can have a category-theoretic definition of an *isomorphism* (which is important, because the concept of an isomorphism is very important for category theory). Like we said in the previous chapter, an isomorphism between two objects ($A$ and $B$) consists of two morphisms - ($A → B$. and $B → A$) such that their compositions are equivalent to the identity functions of the respective objects. Formally, objects $A$ and $B$ are isomorphic if there exist morphisms $f: A → B$ and $g: B → A$ such that $f \bullet g = id_{B}$ and $g \bullet f = id_{A}$.
And here is the same thing expressed with a commuting diagram.
![Isomorphism](isomorphism.svg)
Like the previous one, the diagram expresses the same (simple) fact as the formula, namely that going from the one of objects ($A$ and $B$) to the other one and then back again is the same as applying the identity morphism i.e. doing nothing.
Associativity and reductionism
===
Associativity - what it means and why is it there? In order to tackle this question, we must first talk about another concept - the concept of *reductionism*:
Reductionism is a name for the idea that the behaviour of some more complex phenomenon can be explained in terms of a number of simpler and more fundamental phenomena. Whether the reductionist view is *universally valid*, i.e. whether it is possible to expain everything with a simpler things (and devise a *theory of everything* that reduces the whole universe to a few very simple laws), is a question that we can argue about until the that universe's inevitable collapse. But what is certain is that reductionism underpins all our understanding, especially when it comes to science and mathematics - each scientific discipline has a set of fundaments using which it tries to explain a given set of more complex phenomena, e.g. particle physics tries to explain the behaviour of atoms in terms of a given set of elementary particles, chemistry tries to explain the behaviour of various chemical substances in terms of a the chemical elements that they are composed of etc. A behaviour that cannot be reduced to the fundamentals of a given scientific discipline is simply outside of the scope of this discipline (and so a new discipline has to be created to tackle it.)
Commutativity
---
One way to state the principle of reductionism is to say that *each thing is nothing but a sum of its parts*. Let's try to formalize that: the *things* that we are thinking about would be colorful balls and let's dub the *sum* with a circle operator. Then, it would mean that a set of objects when combined in whichever way, will always result in the same object.
![Commutativity](commutativity_long.svg)
And because of the wonders of maths we can get all these equalities if we specify the law for just two objects.
![Commutativity](commutativity.svg)
Incidentally this is the definition of a mathematicall law called *commutativity*.
**Task:** if our objects are sets, which set operation is our sum?
Associativity
---
Commutativity is the law abided in contexts in which any object can be represented as the sum of its parts *when combined in whichever order*. But there are also many cases in which an object is to be represented by the sum of it's parts, but when *combined in one specific way*.
In such contexts, commutativity would not hold, because the fact that A can be combined with B to get C would not automatically mean that B can be combined with A to get the same result (in the case of functions, they may not be able to be combined at all.)
But a weaker version of the law of reductionism would hold, namely that if we take a bunch of objects, combined in a certain order, it would be true that *any pair of those objects could, at any time, be replaced by the object we get by combining them*, i.e. if we have.
(A, B) = D
(B, C) = X
(A, B, C) = D C = A X
or simply
(A B) C = A (B C)
The essence of associativity (and of reductionism) is this ability to study complex phenomenon by zooming in into a part that you want to examine in a given moment, and looking at it in isolation.

View File

@ -6,46 +6,51 @@ title: Functors
Functors
===
From this chapter on, we will change the tactic a bit (as I am sure you are a bit tired of jumping through different subjects) and, we will dive at full throtle into the world of categories, using the structures that we examined so far as context. This will allow us to generalize some of the concepts that we saw in these structures so they are valid for all categories.
From this chapter on, we will change the tactic a bit (as I am sure you are a bit tired of jumping through different subjects) and we will dive at full throttle into the world of categories, using the structures that we saw so far as context. This will allow us to generalize some of the concepts that we saw in these structures so they are valid for all categories.
Categories we saw so far
===
So far, we saw many different categories and category types. Let's review them before we dive in to functors.
So far, we saw many different categories and category types. Let's review them once more:
The category of sets
---
We began by reviewing the mother of all categories - *the category of sets* which is not only the archetype of a category, but it contains within itself many other categories, such as the category of types in a programming languages.
We began by reviewing the mother of all categories - *the category of sets* - which is not only the archetype of a category, but it contains within itself many other categories, such as the category of types in programming languages.
![The category of sets](category_sets.svg)
Special types of categories
---
We also learned about some special types of categories that have some special properties like categories that have just one *object* (monoids, groups) and categories that have only one *morphism* between any two objects (preorders, partial orders.)
We also learned about some special types of categories each of which has some distinct properties, like categories that have just one *object* (monoids, groups) and categories that have only one *morphism* between any two objects (preorders, partial orders.)
![Types of categories](category_types.svg)
Other categories
---
We also defined a lot of *categories based on different things*, like the ones based on logics/programming languages, but also less "serious ones", as for example the color-mixing one.
We also defined a lot of *categories based on different things*, like the ones based on logics/programming languages, but also some "less-serious ones", as for example the color-mixing partial order/category.
![Category of colors](category_color_mixing.svg)
Finite categories
---
And most importantly, we saw some categories that are *completely made up and have no value whatsoever*, such as my made-up soccer hierarchy. We call those *finite categories*. Although they are not useful by themselves, the idea of finite categories is important - we can draw any combination of points and arrows and call it a category, in the same way that we can construct a set out of every combination of objects.
And most importantly, we saw some categories that are *completely made up*, such as my soccer hierarchy. Those are formally called *finite categories* and, although they are not useful by themselves, the idea of finite categories is important - we can draw any combination of points and arrows and call it a category, in the same way that we can construct a set out of every combination of objects.
![Finite categories](finite_categories.svg)
For future reference, let's see some examples of finite categories. The simplest category is $0$ (enjoy the minimalism of this diagram.)
Examining some finite categories
---
For future reference, let's see some examples of finite categories.
The simplest category is $0$ (enjoy the minimalism of this diagram.)
![The finite category 0](finite_zero.svg)
The next simplest category is $1$ - it is comprised of one object no morphism besides its identity morphism (as usual, we don't draw or in general take note of the identity morphisms unless they are rellevant.)
The next simplest category is $1$ - it is comprised of one object no morphism besides its identity morphism (which we we don't draw, as usual)
![the finite category 1](finite_one.svg)
@ -62,30 +67,41 @@ And finally the category $3$ has 3 objects and also 3 morphisms (one of which is
Isomorphisms
===
Many of the categories we saw have similarities between one another, as for example both the color-mixing order and categories that represent logic have greatest and least objects. To pinpoint such similarities and understand what they mean, we specify formal ways to connect categories with one another.
Many of the categories we saw have similarities between one another, as for example both the color-mixing order and categories that represent logic have greatest and least objects. To pinpoint such similarities and understand what they mean, it is useful to have formal ways to connect categories with one another.
In chapter 1 we talked about set isomorphisms, which establish an equivalence between sets, if you remember, a set isomorphism is a *two-way function* between two sets, which can alternatively be viewed as two "twin" functions each of which equals identity when composed with the other.
Set isomorphisms
---
In chapter 1 we talked about *set isomorphisms*, which establish an equivalence between two sets. In case you have forgotten, a set isomorphism is a *two-way function* between two sets, which can alternatively be viewed as two "twin" functions each of which equals identity when composed with the other.
![Set isomorphism](set_isomorphism.svg)
Then, in chapter 4, we mentioned order isomorphisms and saw that they are the same thing as set isomorphisms, but with one extra condition - aside from being there, the functions that define the isomorphism have to preserve the order of the elements i.e. all elements have to have the same arrows pointing to and from them. Or more formally put, for any $a$ and $b$ if we have $a ≤ b$ we should also have $F(a) ≤ F(b)$ (and vise versa.)
Order isomorphisms
---
Then, in chapter 4, we encountered *order isomorphisms* and we saw that they are the same thing as set isomorphisms, but with one extra condition - aside from just being there, the functions that define the isomorphism have to preserve the order of the elements i.e. all elements have to have the same arrows pointing to and from them. Or more formally put, for any $a$ and $b$ if we have $a ≤ b$ we should also have $F(a) ≤ F(b)$ (and vise versa.)
![Order isomorphism](order_isomorphism.svg)
We can extend this definition to work for categories that have more than one morphism between two objects. The definition is a little more complex, but not a lot. It is the following: given two categories, an isomorphism between them is an invertible function between the underlying sets of objects, *and* an invertible function between the morphisms that connect them, which maps each morphism to a morphism with the same signature (or the same source and target)
Categorical isomorphisms
---
Now we will extend the definition of order isomorphisms, so it applies to categories that have more than one morphism between two objects. This will make the definition a little more complex, but not a lot.
The definition of categorical isomorphism is the following: given two categories, an isomorphism between them is an invertible function between the underlying sets of objects, *and* an invertible function between the morphisms that connect them, which maps each morphism from one category to a morphism *with the same signature*.
![Category isomorphism](category_isomorphism.svg)
If we examine it closely we will see that, although a little bit more complex, this definition is equivalent to the one we have for orders - it is just that when we can have more than one morphism between two given objects we need to explicitly specify which morphism corresponds to which in the other category.
![Category isomorphism](category_order_isomorphism.svg)
And when the categories that we connect with one another can potentially have just one morphism, we only need to connect the objects and to verify that the corresponding morphism actually exist in the other category (this is guaranteed by the *order-preserving* condition.)
If we examine it closely we will see that, although a little bit more complex, this definition is equivalent to the one we have for orders. It is just that when categories can potentially have just one morphism, we only need to to verify that the corresponding morphism actually exist in the other category (which is guaranteed by the *order-preserving* condition.)
![Order isomorphism](category_order_isomorphism_2.svg)
As you see, categorical isomorphisms are not hard to define, however they are very *hard to find* in practice - the only one that comes to mind to me is the Curry-Howard-Lambek isomorphism from the last chapter. And the reason they are so rare is simple - if two categories are isomorphic, they basically contain the same data and it would be more accurate to refer to them as different *representations* of the same category than as separate categories.
And when we can have more than one morphism between two given objects we need to make sure that each morphism in one category has a corresponding morphism in the other one.
![Category isomorphism](category_order_isomorphism.svg)
As you see, categorical isomorphisms are not hard to define, however there is another issue with them, namely that they are very rare in practice - the only one that comes to mind to me is the Curry-Howard-Lambek isomorphism from the last chapter. And the reason they are so rare is simple - if two categories are isomorphic, they basically contain the same data and it would be more accurate to refer to them as different *representations* of the same category than as separate categories.
<!--
comics:
@ -94,10 +110,10 @@ OK, I think I got it - isomorphisms are when you have two similar pictures and y
Pretty much.
-->
What are functors
Functors
===
Much more abundant than isomorphisms, which are two-way connections between categories, are the one-way connections, which we will examine next. As you can guess, those are called *functors*. They are much like normal functions e.g. just like every set isomorphism is also a function, every categorical isomorphism is also a functor (but not the other way around). So it's quite appropriata to think of functors as *functions between categories.*
Much more abundant than isomorphisms, which are *two-way connections* between categories, are the *one-way connections*, i.e. *functors*. Functors are like functions between categories - just like every set isomorphism is a function, every categorical isomorphism is also a functor, but not the other way around.
![Functor](functor.svg)
@ -112,7 +128,7 @@ Let's go through each component of this definition. Firstly, we have a mappings
![Functor for objects](functor_objects.svg)
Formally, we can define the object mapping of of the functor as a function between the categories' *underlying sets*.
Formally, we can define the object mapping of the functor as a function between the categories' *underlying sets*, and underlying set of a category being the set of its objects.
Morphism mapping
---
@ -125,7 +141,7 @@ A more rigorous definition of a morphism function involves the concept of the *h
![Functor for morphisms](functor_morphisms_formal.svg)
Note how the concepts of "homomorphism set" and of "underlying set" allowed us to "escape" to set theory when defining categorical concepts. We will talk more about this later.
Note how the concepts of *homomorphism set* and of *underlying set* allowed us to "escape" to set theory when defining categorical concepts.
Functor laws
---
@ -151,9 +167,9 @@ And this is all there is to it about functors - a simple but, as we will see sho
Diagrams
===
Let's start with one that is very meta. Consider a diagram, any diagram from this book. By definition diagrams are, or aim to be, some kind of description of reality, so in order to understand them we have to relate them to some structure, be it a real-world or mathematical. For this, we have to associate each object from the diagram with an object from the external world, and also each morphism from the diagram with some kind of relationship between the corresponding real-world objects.
Now we will see some examples of functors. Let's start with one that is very meta - consider a diagram, any diagram from this book. By definition diagrams are, or aim to be, some kind of description of reality, so in order to understand them we have to relate them to some structure, be it a real-world or mathematical. For this, we have to associate each object from the diagram with an object from the external world, and also each morphism from the diagram with some kind of relationship between the corresponding real-world objects.
So diagrams can be seen as a finite categories. But that is only a part of the story. They are finite categories plus ways of interpreting those categories in the context of other categories i.e. functors - when we are perceiving a diagram, we are actually creating a functor in our heads from the category that we see, to some other category. We might even argue (as I did in my blog post about using logic to model real-life thinking) that perception itself is functorial.
So diagrams can be seen as a finite categories. But that is only a part of the story. They are finite categories plus ways of interpreting those categories in the context of other categories i.e. functors. When we are perceiving a diagram, we are actually creating a functor in our heads from the category that we see, to some other category. We might even argue (as I did in my [blog post about using logic to model real-life thinking](/logic-thought)) that perception itself is functorial.
For example, if we consider the preorder representing different cities and the roads in a given region, then a diagram that represents that order is actually just a map of the region where the cities are located, together with it's connection to the region it represents
@ -186,7 +202,7 @@ The law of preserving composition tells us that the route we create on a map cor
Constant functor
---
When we think about diagram functors (and even functors in general), our intuition is to think of every object in the souce category being mapped to a *different* object in the target. But that is not always the case. An interesting functor that doesn't follow that rule is the *constant functor* - one that maps *all* objects of the source category to a single object in the target (and all morphisms go to the identity morphism.
When we think about diagram functors (and even functors in general), our intuition is to think of every object in the source category being mapped to a *different* object in the target. But that is not always the case. An interesting functor that doesn't follow that rule is the *constant functor* - one that maps *all* objects of the source category to a single object in the target (and all morphisms go to the identity morphism.
![Constant functor](constant_functor.svg)
@ -211,12 +227,15 @@ For complex types, like `List`, there aren't that many functions. But there also
Because they are simpler, maps don't include *all* roads and *all* traveling options. And the same is true for functors in programming - having a functor doesn't allow you to do define *all* operations using only the simple type, only some of them (some are better than nothing, right?)
This would give you some notion for understanding what functors are in abstract terms, to formalize it, let's revisit the general functor definition in the context of programming, by just changing the terms we used, according to the table in chapter 2 and also (last but not least) change the font we use in our formulas from modern to monospaced.
The list functor
===
Let's formalize some of the concepts from the previous section by revisiting the general functor definition in the context of programming in the context of the list functor.
We do that by just changing the terms we use, according to the table in chapter 2 and also (last but not least) changing the font we use in our formulas from modern to monospaced (mathematicians and programmers are two very different communities, that are united by their appreciation of peculiar typefaces.)
> A functor between two categories (let's call them `A` and `B`) consists of a mapping that maps each *type* in `A` to a type in `B` and a mapping that maps each *function* between types in `A` to a function between types in `B` in a way that preserves the structure of the category.
(Mathematicians and programmmers are two communities, divided by their common appreciation of peculiar typefaces.)
Type mapping
---
@ -226,7 +245,6 @@ A generic type is nothing but a function (sometimes called a *type-level functio
![A functor in programming - type mapping](functor_programming_objects.svg)
Here is the time to make the important note that the existence of type-level function does not require that you also define a normal, value-level function, of type `A => Array<A>`. Functors in which such functions exist (which are most of them) are called *pointed functors*.
Function mapping
---
@ -237,9 +255,9 @@ So the type mapping of a functor is simply a generic type in a programming langu
In programming languages, this mapping is represented by a higher-order function called `map` with a signature (using Haskell notation), `(a ➞ b) ➞ (Fa ➞ Fb)`, where `F` represents the composite type.
Any function with that type signature gives rise to a functor, but not all such functors are useful. In practice, usually, there is only one of them that makes sense for a given generic type. For example, in the case of arrays and similar structures, `map` is a function that applies the original function (the one that converts simple types) to all elements of the structure.
Any function with that type signature that follows the laws gives rise to a functor, but not all such functors are useful. In practice, usually, there is only one of them that makes sense for a given generic type. For example, in the case of list and similar structures, `map` is a function that applies the original function (the one that converts simple types) to all elements of the list.
Because only one `map` function per generic type works (and also for simple convenience) you might sometimes see `map` defined directly in the datatype as a method. Here is how it might look in TypeScript, where it is implemented in the way that I described above:
Because only one `map` function per generic type is useful (and also for simple convenience) you might sometimes see `map` defined directly in the generic datatype, as a method. For example, Here is how the list functor might look in TypeScript, implemented in the way that I described above:
```
class Array<A> {
@ -274,25 +292,48 @@ Up until now we acted like different type families belong to different categorie
![A functor in programming as endofunctor](endofunctor_programming.svg)
This might look weird, but it does not lead to any type of paradox - there is nothing wrong about a list that contains other lists, and (though rarely useful in practice) you can have a list of lists of lists, or a list of lists of lists of lists etc (and the functor laws would still hold, provided that you called `map` the right number of times.)
This might look weird, but it does not lead to any type of paradox - there is nothing wrong about a list that contains other lists, and you can have a list of lists of lists, or a list of lists of lists of lists etc (and the functor laws would still hold, provided that you called `map` the right number of times.)
Identity functor
Identity functors
---
There is one particular endofuctor that will probably look familiar to you - it is the *identity funcor*, the one that maps each object and morphism to itself.
There is one particular endofuctor that will probably look familiar to you - it is the *identity functor* of each category, the one that maps each object and morphism to itself.
![Identity functor](identity_functor.svg)
The reason this functor is defined is the same reason as the identity morphisms are defined - they allow us to talk about value-related stuff without actually involving values.
Pointed functors
---
An interesting "species" of the endofunctors that we can define using the identity functor are the so-called *pointed* functors. This is a name for the functors that are *isomorphic to the identity functor*. We still haven't said when two functors are isomorphic, but for now it suffices to say that they are isomorphic when below diagram commutes for all objects and functions.
![Pointed functor](pointed_functor.svg)
If we concentrate on the category of sets (or the category of types, if you will), then this would mean that there is a function that translates each value of what we called the "simple types" to a value of the functor's generic type, in a way that this diagram commutes (again, the function should make the diagram commute for all types (and not just **string** and **num**) for all functions that exist, not only the four we outlined here.)
![Pointed functor in Set](pointed_functor_set.svg)
The list functor is pointed, because such a function exist for the list functor - it is the function that puts every value in a "singleton" list.
![Pointed functor in Set](pointed_functor_set_internal.svg)
You can see that the definition of a pointed functor looks like an "upgrade" of the definition of a functor - we again have the relationship between a bunch of objects and a bunch of morphisms, such that there is a symmetry between them. The only difference is that with pointed functors we are working in one and the same category, and so the description of the laws is much simpler - the relationship is
And in programming context, the fact that the functor is pointed translates to the following:
```
[a].map(f) = [f(a)]
```
Homomorphism functors
===
Given any category, we can generate the set of the sets of all morphisms that have a specific type signature with respect to a given object from that category. This is called the *Homomorphism set*, denoted $Hom(B,_)$, $B$ being the object that you picked (for example, let's take the brown ball.)
Given any category, we can generate the set of the sets of all morphisms that have a specific type signature with respect to a given object from that category. This is called the *Homomorphism set*, denoted $Hom(B, - )$, $B$ being the object that you picked (for example, let's pick the brown ball.)
![Homomorphism set](hom_set.svg)
This set forms a category where the morphism-sets are the objects (again *morphism-sets are objects*.) and the morphisms are the same as in the original category. And between those two categories (the original and the weird morphism-based one) there is a functor, called the homomorphism functor.
This set forms a category where the morphism sets are the objects (again morphism sets are *objects*) and the morphisms are the same as in the original category. And between those two categories (the original and the weird morphism-based one) there is a functor, called the homomorphism functor.
![Homomorphism set](hom_functor.svg)
@ -303,9 +344,9 @@ With the homomorphism functors, we can *represent* any category in the category
Functors in monoids
===
In group theory, there is this cool thing called *group homomorphism* (or *monoid homomorphism* when we are talking about monoids) - it is a function between the groupss' underlying sets which preserves the group operation.
In group theory, there is this cool thing called *group homomorphism* (or *monoid homomorphism* when we are talking about monoids) - it is a function between the groups' underlying sets which preserves the group operation.
If the time of the day right now is $00:00$ then what would the time be after $n$ hours? The answer to this question can be expressed as a function from and to the set of integers.
If the time of the day right now is 00 o'clock (or 12 PM) then what would the time be after $n$ hours? The answer to this question can be expressed as a function from and to the set of integers.
![Group homomorphism as a function](group_homomorphism_function.svg)
@ -313,16 +354,15 @@ This function is interesting - it preserves the operation of (modular) addition.
Or to put it formally, if we call it (the function) $F$, then we have the following equation - $F(a + b) = F(a) m+ F(b)$ (where $m+$ means modular addition) Because this equation works, the $F$ function is a *group homomorphism* between the group of integers under addition and the group of modulo arithmetic with base 11 under modular addition.
![Group homomorphism](group_homomorphism.svg)
The groups don't have to be so similar for there to be a homomorphism between them. Take, for example, the function that maps any number $n$ to 2 (or any other number) to the *power of $n$,* so $n ➞ 2ⁿ$. This function gives a rise to a group homomorphism between the group of integets under addition and the integers under multiplication, or $F(a + b) = F(a) * F(b)$
The groups don't have to be so similar for there to be a homomorphism between them. Take, for example, the function that maps any number $n$ to 2 (or any other number) to the *power of $n$,* so $n \to 2ⁿ$. This function gives a rise to a group homomorphism between the group of integers under addition and the integers under multiplication, or $F(a + b) = F(a) * F(b)$
![Group homomorphism between different groups](group_homomorphism_addition_multiplication.svg)
Wait, what were we talking about again? Oh yeah - group homomorphisms are functors. To see why, we switch to the category-theoretic representation of groups. Let's revisit our first example and, to make the diagram simpler, use mod 2 instead of mod 11.
Wait, what were we talking about again? Oh yeah - group homomorphisms are functors. To see why, we switch to the category-theoretic representation of groups.
Let's revisit our first example and, to make the diagram simpler, use $mod2$ instead of $mod11$.
![Group homomorphism as a functor](group_homomorphism_functor.svg)
@ -334,7 +374,7 @@ Groups/monoids have just one object when viewed as categories, so there is also
Morphism mapping
---
Because of the above, the morphism mapping is the only rellevant component of the group homomorphism. In the category-theoretic perspective group objects are morphisms and so the morphism mapping is just mapping between the group's objects, as we can see in the diagram.
Because of the above, the morphism mapping is the only relevant component of the group homomorphism. In the category-theoretic perspective group objects are morphisms and so the morphism mapping is just mapping between the group's objects, as we can see in the diagram.
Functor laws
---
@ -342,15 +382,11 @@ Functor laws
The first functor law trivial, it just says that the one and only identity object of the source group (which corresponds to the identity morphism of its one and only object) should be mapped to the one and only identity object of the target group. And we can see that this is the case - in our first example, $0$, the identity of the addition operation, is mapped to $0$. And in the second one $0$ is mapped to $1$ - the identity object of the multiplication operation.
As we said, in order for a function to be a group homomorphism, it must satisfy the equation
$F(a + b) = F(a) * F(b)$. And if you remember that, when interpreted categorically, group objects (like $1$ and $2$ $3$ etc.) correspond to morphisms (like $+1$, $+2$ $+3$ etc.) and the monoid operation of combining two objects corresponds to *functional composition*, you would see that this equation is actually a just a formulation of the second functor law $F(g•f) = F(g)•F(f)$.
$F(a + b) = F(a) \times F(b)$ (where the $+$ and $\times$ operators are arbitrary.) And if you remember that, when interpreted categorically, group objects (like $1$ and $2$ $3$ etc.) correspond to morphisms (like $+1$, $+2$ $+3$ etc.) and the monoid operation of combining two objects corresponds to *functional composition*, you would see that this equation is actually a just a formulation of the second functor law $F(g•f) = F(g)•F(f)$.
$Task:$ Figure out how the functor law looks for the other group homorphism that we reviewed.
Ans many algebraic operations satisfy this equation, for example the functor law for the group homomorphism between $n \to 2ⁿ$ is just the famous algebraic rule, stating that $gᵃ gᵇ= gᵃ⁺ᵇ$.
<!--
$gᵃ gᵇ= gᵃ⁺ᵇ$
-->
$Task:$ Although it's trivial, we didn't prove that the first functor law (the one about the preservation of identities always holds. Interestingly enough, for groups/monoids it actually follows from the second law. Try to prove that. Start with the definition of the identity function.
**Task:** Although it's trivial, we didn't prove that the first functor law (the one about the preservation of identities always holds. Interestingly enough, for groups/monoids it actually follows from the second law. Try to prove that. Start with the definition of the identity function.
<!-- TODO show isomorphism theorems -->
@ -358,9 +394,9 @@ $Task:$ Although it's trivial, we didn't prove that the first functor law (the o
Functors in orders
===
And now let's talk about one concept that is completely unrelated to functors, nudge-nudge (I know you are probably tired of this but hey, bad jokes are better than no jokes at all.) In the theory of orders, we have functions between orders (which is unsurprising, as orders, like monoids/groups, are based on sets.) And one very interesting type of such function, which has applications in calculus and analysis, is a *monotonic function* (also called *monotone map*). This is a function between two orders that *preserves the order* of the elements. So a function $F$ is monotonic when for every $a$ and $b$ in the source order, if $a ≤ b$ then $F(a) ≤ F(b)$.
And now let's talk about one concept that is completely unrelated to functors, nudge-nudge (bad jokes are better than no jokes at all.) In the theory of orders, we have functions between orders (which is unsurprising, as orders, like monoids/groups, are based on sets.) And one very interesting type of such function, which has applications in calculus and analysis, is a *monotonic function* (also called *monotone map*). This is a function between two orders that *preserves the order* of the elements. So a function $F$ is monotonic when for every $a$ and $b$ in the source order, if $a ≤ b$ then $F(a) ≤ F(b)$.
For example, the function that maps the current time to the distance travelled by some object is monotonoc because the distance travelled increases (or stays the same) as time increases.
For example, the function that maps the current time to the distance traveled by some object is monotonic because the distance traveled increases (or stays the same) as time increases.
![A monotonic function](monotone_map.svg)
@ -373,30 +409,30 @@ Now we are about to prove that monotonic functions are functors too, ready?
Object mapping
---
The object mapping component of functors between monoids is trivial. Here it is the reverse - the object mapping is the central component of the functor.
Like with categories, the object mapping of an order is represented by a function between the orders' underlying sets.
Morphism mapping
---
In orders, there can be just one morphism between given two objects, and so morphism-mapping component of functors between them is trivial. Given two objects from the source order, if there is a morphism between them we map that morphism to the morphism between their corresponding objects in the target order. The fact that the monotonic function respects the order of the elements, ensures that the latter morphism exists.
With monoids, the object mapping component of functors was trivial. Here is the reverse - the morphism mapping is trivial - given a morphism between two objects from the source order, we map that morphism to the morphism between their corresponding objects in the target order. The fact that the monotonic function respects the order of the elements, ensures that the latter morphism exists.
Functor laws
---
It is not hard to see that monotone maps obey the first functor law - identities are the only morphisms that go between a given object and itself.
And the second law also follows from the fact that there is only one morphism with a given signature. Suppose we have a monotone map. Suppose that in the source order we have two morphisms $f :: a ➞ b$ and $g :: b ➞ c$. Then, in the target order would contain morphisms that correspond to those two: $F(f): F(a) ➞ F(b)$ $F(g): F(b) ➞ F(c)$
And the second law also follows from the fact that there is only one morphism with a given signature. Suppose we have a monotone map. Suppose that in the source order we have two morphisms $f :: a \to b$ and $g :: b \to c$. Then, in the target order would contain morphisms that correspond to those two: $F(f): F(a) \to F(b)$ $F(g): F(b) \to F(c)$
If we compose the two morphisms in the target order, we get a morphism $F(g)•F(f) :: F(a) F(c)$.
If we compose the two morphisms in the target order, we get a morphism $F(g)•F(f) :: F(a) \to F(c)$.
If we compose the two morphisms in the source order, we get a morphism $g•f :: a ➞ c$. And from it, we can get the corresponding morphism in the target category - $F(g•f) :: F(a) ➞ F(c)$.
If we compose the two morphisms in the source order, we get a morphism $g•f :: a \to c$. And from it, we can get the corresponding morphism in the target category - $F(g•f) :: F(a) \to F(c)$.
But both morphisms $F(g•f)$ and $F(g)•F(f)$ have the signature $F(a) F(c)$ and so they must be equal to one another.
But both morphisms $F(g•f)$ and $F(g)•F(f)$ have the signature $F(a) \to F(c)$ and so they must be equal to one another.
The category of small categories
===
Ha, I got you this time (or at least I hope I did) - you probably thought that I won't introduce another category in this chapter, but this is exactly what I am going to do. And another surprise is that the new category won't be the category of functors (don't worry, we will introduce that in the next chapter.) Instead, we will examine the category of (small) categories, that has all the categories that we saw so far as objects and functors as its morphisms, like $Set$ - the category of sets, $Mon,$ the category of monoids, $Ord,$ the category of orders etc.
Ha, I got you this time (or at least I hope I did) - you probably thought that I won't introduce another category in this chapter. But this is exactly what I am going to do. And (surprise again) the new category won't be the category of functors (don't worry, we will introduce that in the next chapter.) Instead, we will examine the category of (small) categories, that has all the categories that we saw so far as objects and functors as its morphisms, like $Set$ - the category of sets, $Mon,$ the category of monoids, $Ord,$ the category of orders etc.
![The category of categories](category_of_categories.svg)
@ -407,17 +443,15 @@ Ha, I got you this time (or at least I hope I did) - you probably thought that I
Categories all the way down
---
The recursive nature of category theory might leave some of you confused: we started by saying that categories are *composed of objects and morphisms*, but now we are saying that there are morphisms between categories (functors) and a category where *the objects are categories themselves*. Does that mean that categories are an example of... categories? Yes. Sounds a bit weird on intuitive level (as for example biscuits don't contain other biscuits and houses don't use houses as building material) but it is perfectly legitimate.
The recursive nature of category theory might leave some of you confused: we started by saying that categories are *composed of objects and morphisms*, but now we are saying that there are *morphisms between categories* (functors). And on top of that, there is a category where *the objects are categories themselves*. Does that mean that categories are an example of... categories? Sounds a bit weird on intuitive level (as for example biscuits don't contain other biscuits and houses don't use houses as building material) but it is actually the case.
Category theory does *categorize* (see what I did there) everything, so from a category-theoretic standpoint all of maths is categories all the way down and whether you would threat a given category as a universe, or as a point depends solemly on your viewpoint.
Category theory does *categorize* everything, so from a category-theoretic standpoint all of maths is categories all the way down and whether you would threat a given category as a universe, or as a point depends solemnly on your viewpoint.
Like for example, every monoid is a category with one just object. But at the same time, monoids can be seen as belonging to one category - the category of monoids - with monoid homomorphisms acting as objects.
Like, for example, every monoid is a category with one just object, but at the same time, monoids can be seen as belonging to one category - the category of monoids - with monoid homomorphisms acting as objects.
At the same time we have the category of groups, for example, which contains the category of monoids as a subcategory, as all monoids are groups.
There may be many more levels of categories from categories. However that does not mean that we have to cover all of them and think about them at all. It is like the concept of a derivative in calculus - the first derivative of a position of the object gives its *speed*, which is useful, the derivative of speed is also useful - it is *velocity*, but the derivative of velocity and those after it leave us indifferent.
We can use the same tactict with our little journey in category theory - stick on the level that make sense for us and not be obsessed with forming picture of the whole thing Because there is no *whole thing* - category theory is an *abstract* theory. That is, it does not seek to represent an actual state of affairs, but to provide a language that you can use to express many different ideas, actual or purely imaginary. So view the category of categories not as a structure, but as a space, where all these concepts live.
There may be many more levels of categories from categories. However that does not mean that we have to cover all of them and think about them at all - it is like the concept of a derivative in calculus - the first derivative of a position of the object gives its *speed*, which is useful, the derivative of speed is also useful - it is *velocity*, but the derivative of velocity and those after it leave us indifferent. We can use the same tactic with our little journey in category theory - stick on the level that make sense for us and not be obsessed with forming picture of the whole thing, because there is no *whole thing* - category theory is an *abstract* theory. That is, it does not seek to represent an actual state of affairs, but to provide a language that you can use to express many different ideas, actual or purely imaginary. So view the category of categories not as a structure, but as a space, where all these concepts live.
{% if site.distribution == 'print' %}
@ -447,19 +481,19 @@ Let's take the forgetful functor between the category of sets $Set$ and the cate
![Forgetful functor - object mapping](forgetful_functor_objects.svg)
This same type of functor exists for any two categories that are based on each other. Or equally correct two categories are based on each other only if such a functor exist.
This same type of functor exists for any two categories that are based on each other. And two categories are based on each other only if such a functor exists.
Morphism mapping
---
In order for the forgetful functor to really be a functor it also must map morphisms between the two categories i.e. to map every *monoid homomorphism* between two monoids to a function between their underlying sets.
This is not hard - we said that monoid homomorphisms are function between the monoids' underlying sets which preserves the group operation. Which means that they are functions already functions between the monoids' underlying sets. So all we need to do is to forget about the extra conditions.
This is not hard - we said that monoid homomorphisms are function between the monoids' underlying sets which preserves the group operation. Which means that they are *functions between the monoids' underlying sets*. So all we need to do is to forget about the extra conditions.
Functor laws
---
In this case the functor laws are obviously followed - we basically copied the structure of one category into the other one.
Since we basically copied the structure of one category into the other one, the functor laws are obviously followed.
Free functors
===
@ -475,15 +509,15 @@ But, although we cannot create a functor that is the reverse of the forgetful fu
Object mapping
---
The object mapping of the free functor is the procedure for generating free objects. For any given object $o$ from the simpler category the free object of $o$, $F(o)$ is an object of the more complex category that adds the minimum structure needed for the $o$ to become an object of the more complex category.
The object mapping of the free functor is the procedure for generating *free objects*. For any given object $o$ from the simpler category the free object of $o$, $F(o)$ is an object of the more complex category that adds the minimum structure needed for the $o$ to become an object of the more complex category.
When we reviewed free monoids we said that the free monoid of a given set of is just the monoid that "does nothing" i.e. the one that has no laws. What does that mean?
This concept is complex, so let's take the free monoids as an example. When we reviewed them (in chapter 3) we said that the free monoid of a given set of is just the monoid that "does nothing" i.e. the one that has no laws.
As we said in chapter 3 each monoid can be represented by a set of basic elements, called generators, (such as the 60 degree rotation of a right triangle)
What does that mean? We said that each monoid can be represented by a set of basic elements, called generators, (such as the 60 degree rotation of a right triangle)
![Generator of the monoid of rotations](generator_rotations.svg)
And a bunch of rules or equations describing how sequences of these generators collapse to a single eleement (e.g. the fact that rotating the triangle three times gets you to its initial position.)
And a bunch of rules or equations describing how sequences of these generators collapse to a single element (e.g. the fact that rotating the triangle three times gets you to its initial position.)
![Rule of the monoid of rotations](rule_rotations.svg)
@ -503,29 +537,46 @@ Once we established that the free functor for set $A$ is just the list functor w
Adjoint functors
===
If the concept of a free object and the corresponding free functor seemed somewhat arbitrary to you, don't worry, it will seem clearer once we pinpoint the relationship it has with the (arguably more straightforward) concept of forgetful functor.
If the concept of a free object and the corresponding free functor seemed somewhat arbitrary to you, don't worry, it will seem clearer once we pinpoint the relationship it has with the (arguably more straightforward) concept of forgetful functor.
Given a free object *in the richer category* (i.e. free monoid) from a given set of generators, there exists a monoid homomorphism from it, to any other monoid with the same set of generators.
The relationship is a little bit complex - explaining it involves three steps.
Step one: Given a free object, in our case a free monoid from a given set of generators, there exists a monoid homomorphism from it, to any other monoid that is composed of the same set of generators. The homomorphism consists of just applying the monoid laws and, by doing that, converting each elements of the free monoid to an element of the other one.
So for example, by applying the color-mixing rule we can convert any element of the free monoid generated by the set of the red blue and yellow balls to an element of the color-mixing monoid.
![Adjunction](adjunction_1.svg)
The homomorphism consists of just applying the monoid laws and by doing that collapsing the infinite lists of elements of the free monoid into (possibly finite) elements in the other one.
Then, given a set in the more basic category, there exist a morphism from it to the underlying set of any monoid that is generated by the elements of that set as generators.
Step two: there exist a morphism from any set to the underlying set of any monoid that is generated by the elements of that set as generators.
![Adjunction](adjunction_2.svg)
Finally, any two such functions are actually the same function.
Finally, there is a isomorphism between these two sets of functions, which in turn translates to a relationship between the free and forgetful functor that looks like this (the free fuctor is in green and the forgetful one is in red).
![Adjunction](adjunction_3.svg)
This relationship, called an *adjunction* defines what the free functor is in terms of the forgetful one.
You see that This relationship is called an *adjunction* and it defines what the free functor is in terms of the forgetful one, or vice versa.
Let's take another example. The free monoid with just one generator can be mapped to all cyclic monoids like $Z_{1}$, $Z_{2}$, $Z_{3}$ etc. as well as to the monoid of natural numbers under addition. And because of that in the category of sets, the singleton set can be mapped to the underlying sets of all these monoids.
Unit and counit
---
Another example
---
Let's take another example. The free monoid comprised of just one generator object (which for our purposes we identify with $1$) can be mapped to all cyclic monoids like $Z_{1}$, $Z_{2}$, $Z_{3}$ etc. as well as to the monoid of natural numbers under addition, pictured below
![Adjunction](adjunction_numbers_1.svg)
And in the category of sets, there exist a function between a singleton set and any other set that features its element.
![Adjunction](adjunction_numbers_2.svg)
The equivalence of those two functions is actually another instance of the adjunction between monoids and sets, created by the free and forgetful functor.
![Adjunction](adjunction_numbers.svg)
There definitely is more to be said about free and forgetful functors, as well as for adjunctions (which are not only of free/forgetful type), but as always, I will leave things at the most interesting moment in order to revisit them from a different perspective later.
There definitely is more to be said about free and forgetful functors, as well as for adjunctions, but as always, I will leave things at the most interesting moment in order to revisit them from a different perspective later.
{%endif%}

View File

@ -0,0 +1,382 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 595.3 400"
version="1.1"
id="svg15613"
sodipodi:docname="adjunction_numbers_1.svg"
inkscape:version="1.1.2 (1:1.1+202205011109+08b2f3d93c)"
width="595.29999"
height="400"
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/">
<metadata
id="metadata15619">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs15617" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1024"
id="namedview15615"
showgrid="false"
inkscape:zoom="1"
inkscape:cx="737"
inkscape:cy="151"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg15613"
inkscape:pagecheckerboard="0"
showguides="false" />
<g
id="g42748"
transform="matrix(1.6278077,0,0,1.6278077,-73.097688,-139.89067)" />
<g
id="g42748-8"
transform="matrix(1.6278077,0,0,1.6278077,311.23416,-134.82185)" />
<g
id="g2801-7-0-5"
transform="matrix(7.1804749,0,0,8.4711409,-1755.4546,-2961.8733)">
<path
inkscape:connector-curvature="0"
id="circle15601-9-4-5-4-5-8-7"
d="m 305.51733,373.43228 a 20.416225,20.416225 0 0 1 -20.41621,20.41621 20.416225,20.416225 0 0 1 -20.41623,-20.41621 20.416225,20.416225 0 0 1 20.41623,-20.41623 20.416225,20.416225 0 0 1 20.41621,20.41623 z"
style="fill:#e6e7e8;stroke:#bbbcbe;stroke-width:0;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
transform="matrix(1.1772283,0,0,1.1772283,73.130432,217.38176)"
id="text17012-7"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.19543px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.229886"
aria-label="Mon">
<path
inkscape:connector-curvature="0"
id="path17542"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#4d4d4d;stroke-width:0.229886"
d="m 172.07272,120.92641 h 2.20008 l 1.52658,3.58748 1.53557,-3.58748 h 2.19559 v 6.70351 h -1.63434 v -4.90303 l -1.54455,3.61441 h -1.09555 l -1.54455,-3.61441 v 4.90303 h -1.63883 z" />
<path
inkscape:connector-curvature="0"
id="path17544"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#4d4d4d;stroke-width:0.229886"
d="m 183.54456,123.62937 q -0.5343,0 -0.81717,0.38613 -0.27838,0.38165 -0.27838,1.10453 0,0.72289 0.27838,1.10902 0.28287,0.38165 0.81717,0.38165 0.52533,0 0.8037,-0.38165 0.27838,-0.38613 0.27838,-1.10902 0,-0.72288 -0.27838,-1.10453 -0.27837,-0.38613 -0.8037,-0.38613 z m 0,-1.14943 q 1.2976,0 2.02497,0.70043 0.73187,0.70044 0.73187,1.93966 0,1.23923 -0.73187,1.93967 -0.72737,0.70043 -2.02497,0.70043 -1.30209,0 -2.03844,-0.70043 -0.73186,-0.70044 -0.73186,-1.93967 0,-1.23922 0.73186,-1.93966 0.73635,-0.70043 2.03844,-0.70043 z" />
<path
inkscape:connector-curvature="0"
id="path17546"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#4d4d4d;stroke-width:0.229886"
d="m 192.52448,124.56777 v 3.06215 h -1.61639 v -0.49838 -1.84538 q 0,-0.65104 -0.0314,-0.89799 -0.0269,-0.24695 -0.0988,-0.36369 -0.0943,-0.15714 -0.25593,-0.24245 -0.16164,-0.0898 -0.36818,-0.0898 -0.50287,0 -0.79023,0.39062 -0.28736,0.38614 -0.28736,1.0731 v 2.47397 h -1.6074 v -5.02875 h 1.6074 v 0.73635 q 0.36369,-0.44002 0.77227,-0.64655 0.40859,-0.21103 0.90249,-0.21103 0.87105,0 1.32004,0.5343 0.45349,0.53431 0.45349,1.55353 z" />
</g>
<g
id="g42748-4"
transform="matrix(1.3827459,0,0,1.3827459,122.31946,-282.3223)" />
<g
id="g42748-8-6"
transform="matrix(1.3827459,0,0,1.3827459,448.79127,-278.01659)" />
<circle
id="circle13552"
r="72.23513"
cy="110.09554"
cx="293.66559"
stroke-miterlimit="10"
style="fill:#ffccaa;stroke:#808285;stroke-width:3.77207;stroke-miterlimit:10" />
<g
id="g42748-5"
transform="matrix(1.6278077,0,0,1.6278077,-60.550228,-628.54954)" />
<g
id="g42748-8-8"
transform="matrix(1.6278077,0,0,1.6278077,323.78162,-623.48072)" />
<g
id="g42748-4-2"
transform="matrix(1.3827459,0,0,1.3827459,134.86692,-770.98117)" />
<g
id="g42748-8-6-2"
transform="matrix(1.3827459,0,0,1.3827459,461.33873,-766.67546)" />
<circle
id="circle13552-0"
r="72.23513"
cy="281.15417"
cx="291.30923"
stroke-miterlimit="10"
style="fill:#ffccaa;stroke:#808285;stroke-width:3.77207;stroke-miterlimit:10" />
<g
id="g15703"
transform="translate(115.17074,279.05371)">
<path
inkscape:connector-curvature="0"
id="path15699"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:32.296px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#f9f9f9;fill-opacity:1;stroke:none;stroke-width:1.1003"
d="m 177.39454,41.876438 v 11.260863 h 11.21788 v 5.071686 h -11.21788 v 11.260862 h -5.11467 V 58.208987 h -11.21788 v -5.071686 h 11.21788 V 41.876438 Z" />
<path
inkscape:connector-curvature="0"
id="path15701"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:32.296px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#aa4400;fill-opacity:1;stroke:none;stroke-width:0.8074"
d="m 176.77453,45.44913 v 8.263239 h 8.2317 v 3.721611 h -8.2317 v 8.263239 h -3.75315 V 57.43398 h -8.2317 v -3.721611 h 8.2317 V 45.44913 Z" />
</g>
<circle
id="circle13580"
r="15.465485"
cy="282.8678"
cx="339.0813"
stroke-miterlimit="10"
style="fill:#ffffff;stroke:#939598;stroke-width:3.77207;stroke-miterlimit:10" />
<circle
id="circle13592"
r="15.465485"
cy="242.50601"
cx="261.5199"
stroke-miterlimit="10"
style="fill:#ffffff;stroke:#939598;stroke-width:3.77207;stroke-miterlimit:10" />
<path
id="path13594"
d="m 267.30372,242.12882 c 0,2.57759 -0.44007,4.46361 -1.32022,5.72097 -0.88015,1.19448 -2.20038,1.82316 -3.96068,1.82316 -1.7603,0 -3.08052,-0.62868 -3.96067,-1.88603 -0.88015,-1.25736 -1.32022,-3.14339 -1.32022,-5.59523 0,-2.57758 0.44007,-4.52648 1.32022,-5.72097 0.88015,-1.1945 2.20037,-1.82318 3.96067,-1.82318 1.7603,0 3.08053,0.62868 3.96068,1.88605 0.88015,1.19448 1.32022,3.08053 1.32022,5.59523 z m -6.66399,0 c 0,1.63456 0.12573,2.82905 0.31434,3.39486 0.1886,0.62868 0.56581,0.94301 1.06875,0.94301 0.50294,0 0.81728,-0.31433 1.06875,-0.94301 0.1886,-0.62868 0.31434,-1.7603 0.31434,-3.39486 0,-1.63455 -0.12574,-2.76617 -0.31434,-3.39487 -0.1886,-0.62868 -0.56581,-1.00588 -1.06875,-1.00588 -0.50294,0 -0.81728,0.31433 -1.06875,0.94301 -0.18861,0.62869 -0.31434,1.82319 -0.31434,3.45774 z"
inkscape:connector-curvature="0"
style="fill:#808285;stroke-width:0.628678" />
<circle
id="circle13586-3-2"
r="15.465485"
cy="231.92056"
cx="306.50659"
stroke-miterlimit="10"
style="fill:#ffffff;stroke:#939598;stroke-width:3.77207;stroke-miterlimit:10" />
<path
id="path13564-1"
d="m 308.99331,238.78394 h -4.02354 v -7.73274 c 0,-0.94302 0,-1.82318 0.0629,-2.57759 -0.25147,0.31434 -0.56581,0.62868 -0.94302,0.94303 l -1.63456,1.38309 -2.07464,-2.51472 5.02943,-4.08641 h 3.58346 z"
inkscape:connector-curvature="0"
style="fill:#808285;stroke-width:0.628678" />
<circle
id="circle13598"
r="15.465485"
cy="308.72348"
cx="264.81482"
stroke-miterlimit="10"
style="fill:#ffffff;stroke:#939598;stroke-width:3.77207;stroke-miterlimit:10" />
<path
id="path13572-8"
d="m 271.46341,305.13714 c 0,0.88015 -0.25147,1.69743 -0.81728,2.32612 -0.56581,0.62868 -1.38309,1.13162 -2.38897,1.44596 v 0.0629 c 2.45184,0.31435 3.64633,1.44597 3.64633,3.45774 0,1.38309 -0.56581,2.45184 -1.63456,3.20625 -1.06876,0.75442 -2.57758,1.19449 -4.52648,1.19449 -0.81728,0 -1.50883,-0.0629 -2.20039,-0.18861 -0.69154,-0.12574 -1.38309,-0.31434 -2.20037,-0.62867 v -3.26912 c 0.62868,0.31433 1.32023,0.56581 1.9489,0.75441 0.62868,0.1886 1.25737,0.25147 1.82318,0.25147 0.88015,0 1.50883,-0.12574 1.88603,-0.37721 0.37721,-0.25147 0.56581,-0.62867 0.56581,-1.13162 0,-0.3772 -0.12573,-0.69154 -0.31434,-0.94301 -0.1886,-0.25147 -0.56581,-0.37721 -1.00588,-0.50295 -0.44008,-0.12573 -1.06875,-0.1886 -1.82317,-0.1886 h -0.88016 v -2.95479 h 0.94303 c 2.01177,0 3.01765,-0.50295 3.01765,-1.57171 0,-0.37721 -0.12573,-0.69153 -0.44007,-0.88015 -0.31434,-0.1886 -0.69155,-0.25147 -1.19449,-0.25147 -0.94301,0 -1.88604,0.31435 -2.89193,0.94302 l -1.63456,-2.64045 c 0.75442,-0.56581 1.5717,-0.94301 2.38898,-1.13162 0.81729,-0.25146 1.76031,-0.31434 2.76619,-0.31434 1.50883,0 2.70331,0.31434 3.58346,0.88015 0.94302,0.56581 1.38309,1.38309 1.38309,2.45185 z"
inkscape:connector-curvature="0"
style="fill:#808285;stroke-width:0.628678" />
<path
id="path13568-7"
d="m 344.1311,288.4934 h -10.62467 v -2.57757 l 3.58347,-3.64634 c 1.00588,-1.06876 1.69743,-1.82317 2.01177,-2.20038 0.31433,-0.37719 0.50294,-0.75441 0.62867,-1.00587 0.12574,-0.25147 0.18861,-0.56581 0.18861,-0.88015 0,-0.37721 -0.12574,-0.69155 -0.37721,-0.88015 -0.25147,-0.25147 -0.56581,-0.31434 -1.06875,-0.31434 -0.44008,0 -0.94302,0.12574 -1.38309,0.37721 -0.44008,0.25147 -1.00589,0.62868 -1.5717,1.19449 l -2.20037,-2.57758 c 0.75441,-0.69155 1.38309,-1.13162 1.88603,-1.44596 0.50295,-0.31434 1.06876,-0.50294 1.69743,-0.69155 0.62868,-0.1886 1.25736,-0.25147 2.01177,-0.25147 0.94302,0 1.82317,0.1886 2.51471,0.50293 0.69155,0.31435 1.32023,0.81729 1.76031,1.44597 0.44008,0.62868 0.62868,1.32023 0.62868,2.07464 0,0.5658 -0.0629,1.13162 -0.1886,1.57169 -0.12574,0.50294 -0.37721,0.94301 -0.69156,1.44595 -0.31434,0.50295 -0.69155,0.94302 -1.19449,1.50883 -0.50294,0.50295 -1.57169,1.50883 -3.20625,2.95479 v 0.12574 h 5.53237 v 3.26912 z"
inkscape:connector-curvature="0"
style="fill:#808285;stroke-width:0.628678" />
<g
style="display:inline;fill:#333333;fill-opacity:0;stroke:#333333;stroke-width:6.389;stroke-miterlimit:10;stroke-opacity:1"
id="g1482-7-0-1-0-3-5-5-52-1"
transform="matrix(-0.03148083,0.17119115,-0.23535929,-0.03819411,408.53894,212.57394)"
inkscape:transform-center-x="-11.110558"
inkscape:transform-center-y="-3.634907">
<path
sodipodi:nodetypes="cccc"
style="fill:#333333;fill-opacity:0;stroke:#333333;stroke-width:26.3298;stroke-opacity:1"
inkscape:connector-curvature="0"
id="path1478-7-9-0-19-0-0-9-9-4"
d="m 311.7448,240.45647 c 8.11294,-3.41141 16.57046,-6.46929 25.25179,-9.35287 -7.07057,-5.29796 -14.54894,-10.38208 -22.43606,-15.25441 -0.95382,8.59475 -1.28108,15.33726 -2.81573,24.60728 z" />
<path
style="fill:#333333;fill-opacity:0;stroke:#333333;stroke-width:9.11185;stroke-opacity:1;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-1-5-7-4-8-0-6"
d="M -513.61939,368.71244 C -234.93384,268.49902 13.971543,223.10963 309.369,229.13243"
sodipodi:nodetypes="cc" />
</g>
<g
style="display:inline;fill:#333333;fill-opacity:0;stroke:#333333;stroke-width:6.389;stroke-miterlimit:10;stroke-opacity:1"
id="g1482-7-0-1-0-3-5-5-52-1-2"
transform="matrix(-0.03148083,0.17119115,-0.23535929,-0.03819411,379.06532,162.57964)"
inkscape:transform-center-x="-11.110558"
inkscape:transform-center-y="-3.634907">
<path
sodipodi:nodetypes="cccc"
style="fill:#333333;fill-opacity:0;stroke:#333333;stroke-width:26.3298;stroke-opacity:1"
inkscape:connector-curvature="0"
id="path1478-7-9-0-19-0-0-9-9-4-6"
d="m 311.7448,240.45647 c 8.11294,-3.41141 16.57046,-6.46929 25.25179,-9.35287 -7.07057,-5.29796 -14.54894,-10.38208 -22.43606,-15.25441 -0.95382,8.59475 -1.28108,15.33726 -2.81573,24.60728 z" />
<path
style="fill:#333333;fill-opacity:0;stroke:#333333;stroke-width:9.11185;stroke-opacity:1;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-1-5-7-4-8-0-6-4"
d="M -513.61939,368.71244 C -234.93384,268.49902 13.971543,223.10963 309.369,229.13243"
sodipodi:nodetypes="cc" />
</g>
<g
id="g76552"
transform="translate(139.10156,24.609375)">
<g
transform="matrix(0.66940259,0,0,0.66940259,30.01643,218.9425)"
id="g60465">
<circle
style="opacity:1;fill:#f2f2f2;fill-opacity:1;stroke:#333333;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
id="path60354-9"
cx="213.25"
cy="-270.5"
r="29.954245" />
<circle
id="circle13586-3-0-67"
r="13.237224"
cy="-270.48148"
cx="212.4792"
stroke-miterlimit="10"
style="fill:#ffffff;stroke:#939598;stroke-width:3.22859;stroke-miterlimit:10" />
</g>
<path
style="fill:#808285;stroke-width:0.37061"
inkscape:connector-curvature="0"
d="m 174.43034,42.149722 h -2.3719 v -4.55851 c 0,-0.55591 0,-1.07476 0.0371,-1.5195 -0.14825,0.18531 -0.33355,0.37061 -0.55591,0.55592 l -0.96359,0.81534 -1.22301,-1.48244 2.96487,-2.40897 h 2.11248 z"
id="path13588-8-2" />
</g>
<g
transform="translate(113.31908,22.937802)"
id="g76265">
<g
transform="matrix(0.66940259,0,0,0.66940259,61.823259,216.20106)"
id="g60461">
<circle
style="opacity:1;fill:#f2f2f2;fill-opacity:1;stroke:#333333;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
id="path60354"
cx="241.375"
cy="-193.125"
r="29.954245" />
<circle
id="circle13586-3-0-4-5"
r="13.237224"
cy="-192.98146"
cx="226.47919"
stroke-miterlimit="10"
style="fill:#ffffff;stroke:#939598;stroke-width:3.22859;stroke-miterlimit:10" />
<circle
id="circle13586-3-0-6-6"
r="13.237224"
cy="-192.98146"
cx="256.72919"
stroke-miterlimit="10"
style="fill:#ffffff;stroke:#939598;stroke-width:3.22859;stroke-miterlimit:10" />
</g>
<path
style="fill:#808285;stroke-width:0.37061"
inkscape:connector-curvature="0"
d="m 214.51047,90.724026 h -2.3719 v -4.55851 c 0,-0.55591 0,-1.07476 0.0371,-1.5195 -0.14825,0.18531 -0.33355,0.37061 -0.55591,0.55592 l -0.96359,0.81534 -1.22301,-1.48244 2.96487,-2.40897 h 2.11248 z"
id="path13588-8-91" />
<path
style="fill:#808285;stroke-width:0.37061"
inkscape:connector-curvature="0"
d="m 235.76047,90.349026 h -2.3719 v -4.55851 c 0,-0.55591 0,-1.07476 0.0371,-1.5195 -0.14825,0.18531 -0.33355,0.37061 -0.55591,0.55592 l -0.96359,0.81534 -1.22301,-1.48244 2.96487,-2.40897 h 2.11248 z"
id="path13588-8-4" />
</g>
<g
style="display:inline;fill:#333333;fill-opacity:0;stroke:#333333;stroke-width:6.389;stroke-miterlimit:10;stroke-opacity:1"
id="g1482-7-0-1-0-3-5-5-52-1-1"
transform="matrix(-0.04016541,0.16936408,-0.23310665,-0.05014057,327.12096,176.557)"
inkscape:transform-center-x="-11.449798"
inkscape:transform-center-y="-3.262315">
<path
sodipodi:nodetypes="cccc"
style="fill:#333333;fill-opacity:0;stroke:#333333;stroke-width:26.3298;stroke-opacity:1"
inkscape:connector-curvature="0"
id="path1478-7-9-0-19-0-0-9-9-4-2"
d="m 311.7448,240.45647 c 8.11294,-3.41141 16.57046,-6.46929 25.25179,-9.35287 -7.07057,-5.29796 -14.54894,-10.38208 -22.43606,-15.25441 -0.95382,8.59475 -1.28108,15.33726 -2.81573,24.60728 z" />
<path
style="fill:#333333;fill-opacity:0;stroke:#333333;stroke-width:9.11185;stroke-opacity:1;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-1-5-7-4-8-0-6-8"
d="M -513.61939,368.71244 C -234.93384,268.49902 13.971543,223.10963 309.369,229.13243"
sodipodi:nodetypes="cc" />
</g>
<g
id="g60465-3"
transform="matrix(0.66940259,0,0,0.66940259,131.60451,261.93061)">
<circle
r="29.954245"
cy="-277.96936"
cx="199.05824"
id="path60354-9-8"
style="opacity:1;fill:#f2f2f2;fill-opacity:1;stroke:#333333;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" />
</g>
<g
style="display:inline;fill:#333333;fill-opacity:0;stroke:#333333;stroke-width:6.389;stroke-miterlimit:10;stroke-opacity:1"
id="g1482-7-0-1-0-3-5-5-52-1-8"
transform="matrix(-0.04610586,0.16784428,-0.23119594,-0.05831999,344.15519,245.88022)"
inkscape:transform-center-x="-10.418085"
inkscape:transform-center-y="-2.999883">
<path
sodipodi:nodetypes="cccc"
style="fill:#333333;fill-opacity:0;stroke:#333333;stroke-width:26.3298;stroke-opacity:1"
inkscape:connector-curvature="0"
id="path1478-7-9-0-19-0-0-9-9-4-9"
d="m 311.7448,240.45647 c 8.11294,-3.41141 16.57046,-6.46929 25.25179,-9.35287 -7.07057,-5.29796 -14.54894,-10.38208 -22.43606,-15.25441 -0.95382,8.59475 -1.28108,15.33726 -2.81573,24.60728 z" />
<path
style="fill:#333333;fill-opacity:0;stroke:#333333;stroke-width:9.11185;stroke-opacity:1;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-1-5-7-4-8-0-6-2"
d="M -513.61939,368.71244 C -234.93384,268.49902 13.971543,223.10963 309.369,229.13243"
sodipodi:nodetypes="cc" />
</g>
<g
transform="translate(112.61197,54.404054)"
id="g76257">
<g
transform="matrix(0.66940259,0,0,0.66940259,48.544668,329.47105)"
id="g60471">
<path
style="fill:#f2f2f2;stroke:#333333;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 148.39035,-393.71124 c -18.81413,0 -30.44699,11.83721 -30.44699,30.27408 0,18.43688 12.44665,31.1484 29.47301,31.1484 h 31.56755 c 14.94525,0 31.07273,-9.84893 31.07273,-29.63549 0,-21.82258 -15.95387,-31.11444 -30.98827,-31.11444 -15.03441,0 -30.67803,-0.67255 -30.67803,-0.67255 z"
id="path60307-29"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csssssc" />
<circle
id="circle13586-3-0-9"
r="13.237224"
cy="-363.11014"
cx="133.84695"
stroke-miterlimit="10"
style="fill:#ffffff;stroke:#939598;stroke-width:3.22859;stroke-miterlimit:10" />
<circle
id="circle13586-3-0-4-6"
r="13.237224"
cy="-362.86014"
cx="163.59695"
stroke-miterlimit="10"
style="fill:#ffffff;stroke:#939598;stroke-width:3.22859;stroke-miterlimit:10" />
<circle
id="circle13586-3-0-6-0"
r="13.237224"
cy="-362.86014"
cx="193.84695"
stroke-miterlimit="10"
style="fill:#ffffff;stroke:#939598;stroke-width:3.22859;stroke-miterlimit:10" />
</g>
<path
style="fill:#808285;stroke-width:0.37061"
inkscape:connector-curvature="0"
d="m 140.13547,90.724026 h -2.3719 v -4.55851 c 0,-0.55591 0,-1.07476 0.0371,-1.5195 -0.14825,0.18531 -0.33355,0.37061 -0.55591,0.55592 l -0.96359,0.81534 -1.22301,-1.48244 2.96487,-2.40897 h 2.11248 z"
id="path13588-8-1" />
<path
style="fill:#808285;stroke-width:0.37061"
inkscape:connector-curvature="0"
d="m 160.13547,90.474026 h -2.3719 v -4.55851 c 0,-0.55591 0,-1.07476 0.0371,-1.5195 -0.14825,0.18531 -0.33355,0.37061 -0.55591,0.55592 l -0.96359,0.81534 -1.22301,-1.48244 2.96487,-2.40897 h 2.11248 z"
id="path13588-8-5" />
<path
style="fill:#808285;stroke-width:0.37061"
inkscape:connector-curvature="0"
d="m 180.26047,90.599026 h -2.3719 v -4.55851 c 0,-0.55591 0,-1.07476 0.0371,-1.5195 -0.14825,0.18531 -0.33355,0.37061 -0.55591,0.55592 l -0.96359,0.81534 -1.22301,-1.48244 2.96487,-2.40897 h 2.11248 z"
id="path13588-8-9" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 21 KiB

View File

@ -0,0 +1,211 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 595.3 400"
version="1.1"
id="svg15613"
sodipodi:docname="adjunction_numbers_2.svg"
inkscape:version="1.1.2 (1:1.1+202205011109+08b2f3d93c)"
width="595.29999"
height="400"
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/">
<metadata
id="metadata15619">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs15617" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1024"
id="namedview15615"
showgrid="false"
inkscape:zoom="1"
inkscape:cx="354"
inkscape:cy="172"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg15613"
inkscape:pagecheckerboard="0"
showguides="false" />
<g
id="g42748"
transform="matrix(1.6278077,0,0,1.6278077,-497.08987,-59.289108)" />
<g
id="g42748-8"
transform="matrix(1.6278077,0,0,1.6278077,-112.75802,-54.220288)" />
<g
id="g42748-4"
transform="matrix(1.3827459,0,0,1.3827459,-301.67272,-201.72074)" />
<g
id="g42748-8-6"
transform="matrix(1.3827459,0,0,1.3827459,24.799082,-197.41503)" />
<g
id="g42748-5"
transform="matrix(1.6278077,0,0,1.6278077,-484.54241,-547.94798)" />
<g
id="g42748-8-8"
transform="matrix(1.6278077,0,0,1.6278077,-100.21056,-542.87916)" />
<g
id="g42748-4-2"
transform="matrix(1.3827459,0,0,1.3827459,-289.12526,-690.37961)" />
<g
id="g42748-8-6-2"
transform="matrix(1.3827459,0,0,1.3827459,37.346542,-686.0739)" />
<g
id="g2801-7-0-5-9"
transform="matrix(7.1804749,0,0,8.4711409,-1744.2121,-2961.1708)">
<path
inkscape:connector-curvature="0"
id="circle15601-9-4-5-4-5-8-7-7"
d="m 305.51733,373.43228 a 20.416225,20.416225 0 0 1 -20.41621,20.41621 20.416225,20.416225 0 0 1 -20.41623,-20.41621 20.416225,20.416225 0 0 1 20.41623,-20.41623 20.416225,20.416225 0 0 1 20.41621,20.41623 z"
style="fill:#e6e7e8;stroke:#bbbcbe;stroke-width:0;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
id="g17649"
transform="matrix(1.1772283,0,0,1.1772283,-125.92673,343.36232)">
<g
id="text17012-7-3-0-9-3"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.19543px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.229886"
aria-label="Set"
transform="translate(123.5954,-18.263237)">
<path
id="path17513"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#4d4d4d;stroke-width:0.229886"
d="m 245.05503,34.52635 v 1.418826 q -0.55226,-0.246947 -1.07759,-0.372666 -0.52532,-0.125719 -0.99228,-0.125719 -0.61961,0 -0.91595,0.170619 -0.29634,0.170618 -0.29634,0.529815 0,0.269397 0.19756,0.422056 0.20205,0.148168 0.72737,0.255927 l 0.73636,0.148169 q 1.118,0.224498 1.58944,0.682474 0.47145,0.457975 0.47145,1.302087 0,1.10902 -0.66003,1.652305 -0.65553,0.538795 -2.00701,0.538795 -0.63757,0 -1.27964,-0.121229 -0.64206,-0.121229 -1.28412,-0.359196 v -1.459237 q 0.64206,0.341237 1.23922,0.516345 0.60166,0.170619 1.15841,0.170619 0.56574,0 0.86657,-0.188578 0.30082,-0.188579 0.30082,-0.538795 0,-0.314298 -0.20654,-0.484916 -0.20204,-0.170618 -0.81268,-0.305317 l -0.669,-0.148169 q -1.00575,-0.215518 -1.47271,-0.686963 -0.46246,-0.471446 -0.46246,-1.270659 0,-1.00126 0.64655,-1.540055 0.64655,-0.538795 1.85884,-0.538795 0.55227,0 1.13596,0.08531 0.5837,0.08082 1.2078,0.246948 z"
inkscape:connector-curvature="0" />
<path
id="path17515"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#4d4d4d;stroke-width:0.229886"
d="m 251.96059,38.490983 v 0.457976 h -3.7581 q 0.0584,0.565734 0.40859,0.848602 0.35022,0.282867 0.97881,0.282867 0.50736,0 1.03718,-0.148169 0.5343,-0.152658 1.09555,-0.457975 v 1.239228 q -0.57023,0.215518 -1.14045,0.323277 -0.57022,0.112249 -1.14045,0.112249 -1.36495,0 -2.12375,-0.691453 -0.75431,-0.695944 -0.75431,-1.948642 0,-1.230249 0.74084,-1.935172 0.74533,-0.704924 2.04742,-0.704924 1.18535,0 1.89476,0.713904 0.71391,0.713903 0.71391,1.908232 z m -1.65231,-0.534305 q 0,-0.457976 -0.2694,-0.736353 -0.2649,-0.282868 -0.69594,-0.282868 -0.46695,0 -0.7588,0.264908 -0.29185,0.260417 -0.36369,0.754313 z"
inkscape:connector-curvature="0" />
<path
id="path17517"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#4d4d4d;stroke-width:0.229886"
d="m 254.93294,34.562269 v 1.427807 h 1.65679 v 1.149429 h -1.65679 v 2.132731 q 0,0.350216 0.13919,0.475935 0.13919,0.121229 0.55226,0.121229 h 0.82616 v 1.149429 h -1.37842 q -0.95187,0 -1.35148,-0.395116 -0.39512,-0.399606 -0.39512,-1.351477 v -2.132731 h -0.79921 v -1.149429 h 0.79921 v -1.427807 z"
inkscape:connector-curvature="0" />
</g>
</g>
<circle
id="circle13556"
r="72.23513"
cy="113.03088"
cx="305.57733"
stroke-miterlimit="10"
style="fill:#dddddd;fill-opacity:1;stroke:#808285;stroke-width:3.77207;stroke-miterlimit:10" />
<g
id="g76336"
transform="translate(-25.247458,-170.12178)">
<circle
style="fill:#cccccc;stroke:#808285;stroke-width:3.77207;stroke-miterlimit:10"
stroke-miterlimit="10"
cx="332.97937"
cy="450.10019"
r="72.23513"
id="circle13552-0-9" />
<circle
style="fill:#ffffff;stroke:#939598;stroke-width:3.77207;stroke-miterlimit:10"
stroke-miterlimit="10"
cx="382.5192"
cy="453.93515"
r="15.465485"
id="circle13580-6" />
<circle
style="fill:#ffffff;stroke:#939598;stroke-width:3.77207;stroke-miterlimit:10"
stroke-miterlimit="10"
cx="304.95779"
cy="411.8056"
r="15.465485"
id="circle13592-2" />
<path
style="fill:#808285;stroke-width:0.628678"
inkscape:connector-curvature="0"
d="m 310.74162,411.42843 c 0,2.57758 -0.44007,4.46361 -1.32022,5.72097 -0.88015,1.19448 -2.20038,1.82316 -3.96068,1.82316 -1.7603,0 -3.08052,-0.62868 -3.96067,-1.88603 -0.88015,-1.25736 -1.32022,-3.14339 -1.32022,-5.59523 0,-2.57758 0.44007,-4.52649 1.32022,-5.72098 0.88015,-1.19449 2.20037,-1.82317 3.96067,-1.82317 1.7603,0 3.08053,0.62868 3.96068,1.88604 0.88015,1.19448 1.32022,3.08053 1.32022,5.59524 z m -6.66399,0 c 0,1.63456 0.12573,2.82905 0.31434,3.39486 0.1886,0.62868 0.56581,0.94301 1.06875,0.94301 0.50294,0 0.81728,-0.31433 1.06875,-0.94301 0.1886,-0.62868 0.31434,-1.7603 0.31434,-3.39486 0,-1.63456 -0.12574,-2.76618 -0.31434,-3.39487 -0.1886,-0.62868 -0.56581,-1.00589 -1.06875,-1.00589 -0.50294,0 -0.81728,0.31434 -1.06875,0.94302 -0.18861,0.62869 -0.31434,1.82318 -0.31434,3.45774 z"
id="path13594-5" />
<circle
style="fill:#ffffff;stroke:#939598;stroke-width:3.77207;stroke-miterlimit:10"
stroke-miterlimit="10"
cx="349.94449"
cy="402.98792"
r="15.465485"
id="circle13586-3-2-4" />
<circle
style="fill:#ffffff;stroke:#939598;stroke-width:3.77207;stroke-miterlimit:10"
stroke-miterlimit="10"
cx="308.25275"
cy="479.79086"
r="15.465485"
id="circle13598-4" />
<path
style="fill:#808285;stroke-width:0.628678"
inkscape:connector-curvature="0"
d="m 314.90131,476.20451 c 0,0.88015 -0.25147,1.69743 -0.81728,2.32612 -0.56581,0.62868 -1.38309,1.13162 -2.38897,1.44596 v 0.0629 c 2.45184,0.31434 3.64633,1.44596 3.64633,3.45773 0,1.38309 -0.56581,2.45184 -1.63456,3.20625 -1.06876,0.75442 -2.57758,1.19449 -4.52648,1.19449 -0.81728,0 -1.50883,-0.0629 -2.20039,-0.1886 -0.69154,-0.12574 -1.38309,-0.31434 -2.20037,-0.62868 v -3.26912 c 0.62868,0.31433 1.32023,0.56581 1.9489,0.75441 0.62868,0.1886 1.25737,0.25147 1.82318,0.25147 0.88015,0 1.50883,-0.12574 1.88603,-0.37721 0.37721,-0.25147 0.56581,-0.62867 0.56581,-1.13162 0,-0.3772 -0.12573,-0.69154 -0.31434,-0.94301 -0.1886,-0.25147 -0.56581,-0.37721 -1.00588,-0.50295 -0.44008,-0.12573 -1.06875,-0.1886 -1.82317,-0.1886 h -0.88016 v -2.95478 h 0.94303 c 2.01177,0 3.01765,-0.50295 3.01765,-1.57171 0,-0.37721 -0.12573,-0.69154 -0.44007,-0.88015 -0.31434,-0.1886 -0.69155,-0.25147 -1.19449,-0.25147 -0.94301,0 -1.88604,0.31434 -2.89193,0.94302 l -1.63456,-2.64044 c 0.75442,-0.56581 1.5717,-0.94302 2.38898,-1.13162 0.81729,-0.25147 1.76031,-0.31434 2.76619,-0.31434 1.50883,0 2.70331,0.31434 3.58346,0.88015 0.94302,0.56581 1.38309,1.38309 1.38309,2.45183 z"
id="path13572-8-9" />
<path
style="fill:#808285;stroke-width:0.628678"
inkscape:connector-curvature="0"
d="m 352.43121,409.85132 h -4.02354 v -7.73274 c 0,-0.94302 0,-1.82318 0.0629,-2.57759 -0.25147,0.31434 -0.56581,0.62868 -0.94302,0.94303 l -1.63456,1.38309 -2.07464,-2.51472 5.02943,-4.08641 h 3.58346 z"
id="path13564-1-0" />
<path
style="fill:#808285;stroke-width:0.628678"
inkscape:connector-curvature="0"
d="m 387.56899,459.56077 h -10.62467 v -2.57757 l 3.58347,-3.64634 c 1.00588,-1.06875 1.69743,-1.82316 2.01177,-2.20037 0.31433,-0.3772 0.50294,-0.75441 0.62867,-1.00588 0.12574,-0.25147 0.18861,-0.56581 0.18861,-0.88015 0,-0.37721 -0.12574,-0.69155 -0.37721,-0.88015 -0.25147,-0.25147 -0.56581,-0.31434 -1.06875,-0.31434 -0.44008,0 -0.94302,0.12574 -1.38309,0.37721 -0.44008,0.25147 -1.00589,0.62868 -1.5717,1.19449 l -2.20037,-2.57758 c 0.75441,-0.69155 1.38309,-1.13162 1.88603,-1.44596 0.50295,-0.31434 1.06876,-0.50294 1.69743,-0.69155 0.62868,-0.1886 1.25736,-0.25147 2.01177,-0.25147 0.94302,0 1.82317,0.1886 2.51471,0.50294 0.69155,0.31434 1.32023,0.81728 1.76031,1.44596 0.44008,0.62868 0.62868,1.32023 0.62868,2.07464 0,0.56581 -0.0629,1.13162 -0.1886,1.57169 -0.12574,0.50295 -0.37721,0.94302 -0.69156,1.44596 -0.31434,0.50294 -0.69155,0.94302 -1.19449,1.50883 -0.50294,0.50294 -1.57169,1.50883 -3.20625,2.95478 v 0.12574 h 5.53237 v 3.26912 z"
id="path13568-7-5" />
</g>
<g
style="display:inline;fill:#333333;fill-opacity:0;stroke:#333333;stroke-width:6.389;stroke-miterlimit:10;stroke-opacity:1"
id="g1482-7-0-1-0-3-5-5-52-1-88"
transform="matrix(0.00615367,0.17395282,-0.23805984,0.01342751,378.63431,149.79906)"
inkscape:transform-center-x="-8.0110811"
inkscape:transform-center-y="-5.1049561">
<path
sodipodi:nodetypes="cccc"
style="fill:#333333;fill-opacity:0;stroke:#333333;stroke-width:26.3298;stroke-opacity:1"
inkscape:connector-curvature="0"
id="path1478-7-9-0-19-0-0-9-9-4-8"
d="m 311.7448,240.45647 c 8.11294,-3.41141 16.57046,-6.46929 25.25179,-9.35287 -7.07057,-5.29796 -14.54894,-10.38208 -22.43606,-15.25441 -0.95382,8.59475 -1.28108,15.33726 -2.81573,24.60728 z" />
<path
style="fill:#333333;fill-opacity:0;stroke:#333333;stroke-width:9.11185;stroke-opacity:1;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-1-5-7-4-8-0-6-6"
d="M -289.74193,314.53413 C -142.70582,234.68 122.85072,208.10234 309.369,229.13243"
sodipodi:nodetypes="cc" />
</g>
<g
id="g71407"
transform="matrix(1.6509818,0,0,1.6509818,-441.83105,-43.803868)">
<circle
style="fill:#ffffff;stroke:#939598;stroke-width:2.18424;stroke-miterlimit:10"
stroke-miterlimit="10"
cx="450.78494"
cy="91.411919"
r="8.9553776"
id="circle13586-3" />
<path
style="fill:#808285;stroke-width:0.37061"
inkscape:connector-curvature="0"
d="m 452.8573,95.373306 h -2.3719 v -4.5585 c 0,-0.55591 0,-1.07477 0.0371,-1.5195 -0.14825,0.1853 -0.33355,0.37061 -0.55591,0.55591 l -0.96359,0.81535 -1.22301,-1.48244 2.96487,-2.40897 h 2.11248 z"
id="path13588-8" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1,319 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 595.3 250"
version="1.1"
id="svg15613"
sodipodi:docname="pointed_functor.svg"
inkscape:version="1.1.2 (1:1.1+202205011109+08b2f3d93c)"
width="595.29999"
height="250"
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/">
<metadata
id="metadata15619">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs15617" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1024"
id="namedview15615"
showgrid="false"
inkscape:zoom="2.5774748"
inkscape:cx="260.13833"
inkscape:cy="134.23992"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg15613"
inkscape:pagecheckerboard="0"
inkscape:lockguides="true" />
<g
id="g42748"
transform="matrix(1.3397762,-0.10017139,0.10080481,1.2924446,-230.61269,19.240589)" />
<ellipse
style="fill:#e6e7e8;stroke:none;stroke-width:2.00003381;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="circle15601-9-4-4"
cy="148.49461"
cx="317.72464"
transform="matrix(0.99739366,-0.07215181,0.08035144,0.9967666,0,0)"
rx="130.45184"
ry="121.83504" />
<g
id="g42748-8"
transform="matrix(1.3397762,-0.10017139,0.10080481,1.2924446,86.027682,-0.38575652)" />
<g
transform="matrix(0.09868208,-0.01209243,0.01652198,0.23495793,326.78911,30.66157)"
id="g16254"
style="fill:#dddddd;stroke:#626262;stroke-width:11.1053;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1">
<path
style="stroke:#626262;stroke-width:11.1053;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
id="path1478-7-9-0-19-0-7-4"
d="m 298.19814,219.10584 c 4.66998,-0.36993 9.49727,-0.59529 14.4313,-0.74453 -3.38888,-2.33752 -7.01599,-4.64281 -10.88167,-6.91665 -1.22376,2.67854 -1.95604,4.81755 -3.54963,7.66118 z" />
<path
style="fill:none;stroke:#626262;stroke-width:10.9085;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-1-5-7-5-05"
d="M -1179.189,294.35837 C -917.46382,100.39401 -104.67048,54.838004 303.99415,216.71262"
sodipodi:nodetypes="cc" />
</g>
<g
transform="matrix(0.09868208,-0.01209243,0.01652198,0.23495793,385.02492,31.314095)"
style="display:inline;opacity:0.910116;fill:#dddddd;stroke:#626262;stroke-width:11.1053;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="g16254-4">
<path
style="stroke:#626262;stroke-width:11.1053;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
id="path1478-7-9-0-19-0-7-4-6"
d="m 298.19814,219.10584 c 4.66998,-0.36993 9.49727,-0.59529 14.4313,-0.74453 -3.38888,-2.33752 -7.01599,-4.64281 -10.88167,-6.91665 -1.22376,2.67854 -1.95604,4.81755 -3.54963,7.66118 z" />
<path
style="fill:none;stroke:#626262;stroke-width:10.9085;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-1-5-7-5-05-2"
d="M -1176.1744,302.64497 C -914.44921,108.68061 -104.67048,54.838004 303.99415,216.71262"
sodipodi:nodetypes="cc" />
</g>
<g
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"
transform="matrix(0.17286333,-0.01124732,0.03606305,0.23769178,346.78084,100.46554)"
inkscape:transform-center-x="6.7949115"
inkscape:transform-center-y="-10.589917">
<path
style="stroke:#445500;stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-0-19-0-0-2-2-0-4"
transform="matrix(0.4768,-0.02932,0.03214,0.42867,147.58,197.367)"
d="m 315.1,101.79 c 10.682,-4.135 21.77,-7.738 33.127,-11.074 -8.518,-8.139 -17.577,-16.01 -27.178,-23.616 -2.04,12.119 -3.103,21.663 -5.949,34.69 z" />
<path
style="fill:none;stroke:#445500;stroke-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-1-5-7-4-7-6-6-4"
d="M 127.38575,78.377847 C 176.95734,66.301724 277.68509,72.076365 317.498,86.173"
sodipodi:nodetypes="cc"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)" />
</g>
<g
id="g16122"
transform="translate(-110.61471,101.09528)"
style="fill:#ffffac;fill-opacity:1;stroke:#bbbcbe;stroke-opacity:1">
<rect
transform="matrix(0.99721659,-0.07455915,0.0777593,0.99697216,0,0)"
style="opacity:1;fill:#d9d98d;fill-opacity:1;stroke:#878578;stroke-width:1.81156;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect24164-8"
width="22.396215"
height="22.763296"
x="459.48129"
y="71.800171" />
</g>
<g
id="g16134"
transform="translate(-54.672103,22.345626)">
<rect
transform="matrix(0.99721659,-0.07455915,0.0777593,0.99697216,0,0)"
style="opacity:1;fill:#a6d3e4;fill-opacity:1;stroke:#9bc0bf;stroke-width:1.81156;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect24164-8-1-5"
width="22.396"
height="22.763296"
x="457.04639"
y="151.73814" />
</g>
<g
transform="matrix(0.09868208,0.01209243,0.01652198,-0.23495793,328.12905,211.46556)"
id="g16254-2"
style="fill:#dddddd;stroke:#626262;stroke-width:11.1053;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1">
<path
style="stroke:#626262;stroke-width:11.1053;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
id="path1478-7-9-0-19-0-7-4-4"
d="m 298.19814,219.10584 c 4.66998,-0.36993 9.49727,-0.59529 14.4313,-0.74453 -3.38888,-2.33752 -7.01599,-4.64281 -10.88167,-6.91665 -1.22376,2.67854 -1.95604,4.81755 -3.54963,7.66118 z" />
<path
style="fill:none;stroke:#626262;stroke-width:10.9085;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-1-5-7-5-05-0"
d="M -1179.189,294.35837 C -917.46382,100.39401 -104.67048,54.838004 303.99415,216.71262"
sodipodi:nodetypes="cc" />
</g>
<g
transform="matrix(0.09868208,0.01209243,0.01652198,-0.23495793,385.20798,214.10613)"
style="display:inline;opacity:0.910116;fill:#dddddd;stroke:#626262;stroke-width:11.1053;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="g16254-4-6">
<path
style="stroke:#626262;stroke-width:11.1053;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
id="path1478-7-9-0-19-0-7-4-6-2"
d="m 298.19814,219.10584 c 4.66998,-0.36993 9.49727,-0.59529 14.4313,-0.74453 -3.38888,-2.33752 -7.01599,-4.64281 -10.88167,-6.91665 -1.22376,2.67854 -1.95604,4.81755 -3.54963,7.66118 z" />
<path
style="fill:none;stroke:#626262;stroke-width:10.9085;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-1-5-7-5-05-2-9"
d="M -1176.1744,302.64497 C -914.44921,108.68061 -104.67048,54.838004 303.99415,216.71262"
sodipodi:nodetypes="cc" />
</g>
<g
id="g3179"
transform="translate(78.458542,36.340738)">
<g
style="display:inline;fill:#dddddd;stroke:#483737;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-1-0-3"
transform="matrix(0.20316841,-0.0122248,-0.02062295,0.23998804,122.09075,34.938896)"
inkscape:transform-center-x="5.5658533"
inkscape:transform-center-y="-10.420102">
<path
style="stroke:#483737;stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-0-19-0"
transform="matrix(0.4768,-0.02932,0.03214,0.42867,147.58,197.367)"
d="m 315.1,101.79 c 10.682,-4.135 21.77,-7.738 33.127,-11.074 -8.518,-8.139 -17.577,-16.01 -27.178,-23.616 -2.04,12.119 -3.103,21.663 -5.949,34.69 z" />
<path
style="fill:none;stroke:#483737;stroke-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-1-5-7"
d="M 127.38575,78.377847 C 176.95734,66.301724 277.68509,72.076365 317.498,86.173"
sodipodi:nodetypes="cc"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)" />
</g>
<g
id="g16153"
transform="translate(3.1796673,-5.2090552)"
style="fill:#a6d3e4;fill-opacity:1">
<ellipse
ry="11.748343"
rx="12.175604"
transform="matrix(-0.07418163,-0.99724475,0.99700153,-0.07738188,0,0)"
style="fill:#a6d3e4;fill-opacity:1;stroke:#9bc0bf;stroke-width:1.67664;stroke-miterlimit:10;stroke-opacity:1"
id="circle15605"
cy="186.48853"
cx="-106.90229" />
</g>
<g
id="g16126"
transform="rotate(-4.8858794,434.75877,519.89396)"
inkscape:transform-center-x="-0.55451459"
inkscape:transform-center-y="2.8463494"
style="fill:#d9d98d;fill-opacity:1;stroke:#878578;stroke-opacity:1">
<ellipse
ry="11.964526"
rx="12.399649"
transform="matrix(0.99721659,-0.07455915,0.0777593,0.99697216,0,0)"
style="fill:#d9d98d;stroke:#878578;stroke-width:2.21405;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
id="circle15601-9-4"
cy="73.518608"
cx="172.10857" />
</g>
</g>
<g
style="display:inline;fill:#ff8080;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-4"
transform="matrix(3.9844548e-4,0.10764464,-0.12182132,0.00828986,403.89079,93.655219)">
<path
style="fill:#ff8080;stroke-width:36.8983"
inkscape:connector-curvature="0"
id="path1478-7-9-9"
d="m 300.11147,308.89056 c 11.45734,-5.05862 23.31627,-9.60141 35.44547,-13.89029 -8.57402,-7.71646 -17.73121,-15.11655 -27.47244,-22.20324 -2.74504,12.60642 -4.33418,22.49306 -7.97303,36.09353 z" />
<path
style="fill:#ff8080;stroke-width:14.2769;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-7"
d="m 130.20492,307.63343 c 55.06889,-12.45337 125.33622,-12.58656 169.06769,-4.24803" />
<path
style="display:inline;fill:#ff8080;stroke:#838383;stroke-width:14.2769;stroke-miterlimit:10;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-7-9"
d="M 130.14688,279.92717 C 185.21577,267.47379 255.4831,267.3406 299.21457,275.67914" />
</g>
<g
style="display:inline;fill:#ff8080;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-4-6"
transform="matrix(3.9844548e-4,0.10764464,-0.12182132,0.00828986,462.37062,94.280312)">
<path
style="fill:#ff8080;stroke-width:36.8983"
inkscape:connector-curvature="0"
id="path1478-7-9-9-1"
d="m 300.11147,308.89056 c 11.45734,-5.05862 23.31627,-9.60141 35.44547,-13.89029 -8.57402,-7.71646 -17.73121,-15.11655 -27.47244,-22.20324 -2.74504,12.60642 -4.33418,22.49306 -7.97303,36.09353 z" />
<path
style="fill:#ff8080;stroke-width:14.2769;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-7-93"
d="m 130.20492,307.63343 c 55.06889,-12.45337 125.33622,-12.58656 169.06769,-4.24803" />
<path
style="display:inline;fill:#ff8080;stroke:#838383;stroke-width:14.2769;stroke-miterlimit:10;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-7-9-1"
d="M 130.14688,279.92717 C 185.21577,267.47379 255.4831,267.3406 299.21457,275.67914" />
</g>
<g
id="g3179-3"
transform="rotate(-2.3304549,457.57673,-5495.896)">
<g
style="display:inline;fill:#dddddd;stroke:#483737;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-1-0-3-1"
transform="matrix(0.20316841,-0.0122248,-0.02062295,0.23998804,122.09075,34.938896)"
inkscape:transform-center-x="5.5658533"
inkscape:transform-center-y="-10.420102">
<path
style="stroke:#483737;stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-0-19-0-8"
transform="matrix(0.4768,-0.02932,0.03214,0.42867,147.58,197.367)"
d="m 315.1,101.79 c 10.682,-4.135 21.77,-7.738 33.127,-11.074 -8.518,-8.139 -17.577,-16.01 -27.178,-23.616 -2.04,12.119 -3.103,21.663 -5.949,34.69 z" />
<path
style="fill:none;stroke:#483737;stroke-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-1-5-7-9"
d="M 127.38575,78.377847 C 176.95734,66.301724 277.68509,72.076365 317.498,86.173"
sodipodi:nodetypes="cc"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)" />
</g>
<g
id="g16153-6"
transform="translate(3.1796673,-5.2090552)"
style="fill:#a6d3e4;fill-opacity:1">
<ellipse
ry="11.748343"
rx="12.175604"
transform="matrix(-0.07418163,-0.99724475,0.99700153,-0.07738188,0,0)"
style="fill:#a6d3e4;fill-opacity:1;stroke:#9bc0bf;stroke-width:1.67664;stroke-miterlimit:10;stroke-opacity:1"
id="circle15605-4"
cy="186.48853"
cx="-106.90229" />
</g>
<g
id="g16126-3"
transform="rotate(-4.8858794,434.75877,519.89396)"
inkscape:transform-center-x="-0.55451459"
inkscape:transform-center-y="2.8463494"
style="fill:#d9d98d;fill-opacity:1;stroke:#878578;stroke-opacity:1">
<ellipse
ry="11.964526"
rx="12.399649"
transform="matrix(0.99721659,-0.07455915,0.0777593,0.99697216,0,0)"
style="fill:#d9d98d;fill-opacity:1;stroke:#878578;stroke-width:2.21405;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="circle15601-9-4-3"
cy="73.518608"
cx="172.10857" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,250 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 600 250"
version="1.1"
id="svg15613"
sodipodi:docname="pointed_functor_set.svg"
inkscape:version="1.1.2 (1:1.1+202205011109+08b2f3d93c)"
width="600"
height="250"
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/">
<metadata
id="metadata15619">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs15617" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1024"
id="namedview15615"
showgrid="false"
inkscape:zoom="2.8284271"
inkscape:cx="401.10632"
inkscape:cy="153.79573"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg15613"
inkscape:pagecheckerboard="0"
showguides="false"
units="px"
inkscape:document-units="in" />
<g
id="g42748"
transform="matrix(1.5638628,0,0,1.5638628,-134.36205,313.85009)" />
<g
id="g42748-8"
transform="matrix(1.5638628,0,0,1.5638628,234.87216,318.71979)" />
<g
id="g42748-4"
transform="matrix(1.3284277,0,0,1.3284277,53.37858,177.01355)" />
<g
id="g42748-8-6"
transform="matrix(1.3284277,0,0,1.3284277,367.02564,181.15013)" />
<g
id="g42748-0"
transform="matrix(0.54962262,-0.02886054,0.02954973,0.53024345,152.03065,189.55388)" />
<g
id="g42748-8-9"
transform="matrix(0.54962262,-0.02886054,0.02954973,0.53024345,281.89075,184.39092)" />
<ellipse
style="fill:#e6e7e8;stroke:none;stroke-width:3.01109;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="circle15601-9-4-4"
cy="141.54626"
cx="304.82495"
transform="matrix(0.99862421,-0.05243749,0.05564228,0.99845077,0,0)"
rx="126.11223"
ry="121.68675" />
<g
id="g12411"
transform="matrix(0.90181829,0,0,0.90181829,149.51312,-135.09415)">
<g
transform="matrix(1.3930441,0,0,1.3930441,-13.087451,-516.67291)"
id="g12398">
<path
inkscape:connector-curvature="0"
style="opacity:0.13;stroke:#000000;stroke-width:5.35911;stroke-miterlimit:10"
d="m 202.73415,608.54435 a 21.972353,21.972353 0 0 1 4.57033,30.73565 21.972353,21.972353 0 0 1 -30.73566,4.57034 21.972353,21.972353 0 0 1 -4.57033,-30.73566 21.972353,21.972353 0 0 1 30.73566,-4.57033 z"
id="circle268-6-9" />
<path
inkscape:connector-curvature="0"
style="fill:#a6d3e4;stroke:#9bc0bf;stroke-width:2.77828;stroke-miterlimit:10;fill-opacity:1;stroke-opacity:1"
d="m 206.64962,610.13577 a 23.616208,23.616208 0 0 1 -7.93163,32.44288 23.616208,23.616208 0 0 1 -32.44288,-7.93164 23.616208,23.616208 0 0 1 7.93164,-32.44287 23.616208,23.616208 0 0 1 32.44287,7.93163 z"
id="circle2818-6" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:10.1245px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#666666;fill-opacity:1;stroke:none;stroke-width:0.253112"
x="184.12337"
y="620.03595"
id="text11431-9"
transform="rotate(1.2700671)"><tspan
sodipodi:role="line"
x="184.12337"
y="620.03595"
style="fill:#666666;stroke-width:0.253112"
id="tspan11815">[num]</tspan></text>
</g>
</g>
<g
id="g20080-4"
transform="matrix(0.25991577,0,0,0.25991577,102.45041,76.468595)">
<g
id="g20028-4"
transform="translate(105.47492,125.44516)">
<path
id="path2810-6-5-4"
d="m 562.81991,226.41346 c 0,0 2.93096,-0.77849 8.00305,-1.97723 2.66725,-0.65905 5.59825,-1.43761 9.20365,-2.24757 3.60652,-0.80995 7.47572,-1.73835 12.02148,-2.69925 17.50535,-3.80916 41.24549,-7.69437 65.09601,-9.97542 23.84935,-2.28303 48.22433,-2.87592 66.43644,-2.32556 8.97531,0.33412 16.71052,0.40409 21.89291,0.80658 l 3.26672,0.17109 3.12179,-27.5687 c 23.75367,12.07655 45.55269,25.31473 64.71922,39.74706 -25.35786,5.99466 -49.36654,13.85525 -71.38762,23.01627 l 2.85921,-27.45025 -3.26668,-0.16926 c -5.18239,-0.40344 -12.65506,-0.59304 -21.47996,-0.7206 -17.8003,-0.46151 -41.49745,0.10001 -64.93494,2.46991 -23.58677,2.1636 -46.65147,6.01638 -63.89415,9.70702 -4.28214,0.84047 -8.15125,1.7699 -11.75895,2.57993 -3.6054,0.80897 -6.5364,1.58742 -8.93998,2.12707 -5.07209,1.19973 -7.73826,1.85882 -7.73826,1.85882 z"
style="fill:#9d539f;stroke-width:0.315602"
inkscape:connector-curvature="0" />
<path
id="path2812-2-6-4"
d="m 542.53223,265.22483 c 0,0 3.13436,-0.74266 8.55723,-1.88846 2.85199,-0.62948 5.9864,-1.37115 9.84201,-2.14561 3.85684,-0.77449 7.99374,-1.66211 12.85425,-2.58158 18.71634,-3.6441 44.09239,-7.382 69.57834,-9.61326 25.48595,-2.2313 51.52212,-2.87654 70.9715,-2.42456 9.58462,0.2821 17.84746,0.32094 23.38023,0.68092 l 3.4884,0.14875 3.47313,-25.93461 c 25.30939,11.27186 48.52633,23.64158 68.92596,37.14306 -27.11555,5.72703 -52.79916,13.20476 -76.36544,21.89714 l 3.19197,-25.82046 -3.4884,-0.14874 c -5.53168,-0.35977 -13.51332,-0.51199 -22.93883,-0.59959 -19.00915,-0.37061 -44.32272,0.2418 -69.36853,2.55447 -25.20362,2.11912 -49.8571,5.82419 -68.29342,9.35612 -4.57822,0.80625 -8.71512,1.69289 -12.57196,2.46742 -3.85571,0.77445 -6.99003,1.51711 -9.56086,2.03342 a 911.87652,767.83221 0 0 0 -8.2749,1.7743 z"
style="fill:#e90909;stroke-width:0.315602"
inkscape:connector-curvature="0" />
<path
id="path2814-5-9-7"
d="m 536.16495,332.53191 c 0,0 3.42453,0.62172 9.33861,1.54364 3.11274,0.5136 6.53732,1.13532 10.73914,1.74686 4.20173,0.61061 8.71517,1.32839 14.00594,2.03592 20.3834,2.84056 47.90967,5.36121 75.41828,6.21524 27.50852,0.85407 55.46275,-0.0777 76.26218,-1.8039 10.244,-0.91572 19.09318,-1.4804 24.98842,-2.22606 l 3.72431,-0.38439 6.06332,28.39416 c 26.10143,-14.03231 49.85911,-29.14634 70.49826,-45.33001 -29.57021,-4.60771 -57.76344,-11.23596 -83.79878,-19.33963 l 5.75171,28.28693 -3.72431,0.38442 c -5.89625,0.74566 -14.4339,1.41655 -24.52378,2.10875 -20.33498,1.6079 -47.51305,2.52956 -74.55597,1.55906 -27.19687,-0.74687 -53.9482,-3.27961 -74.01994,-6.01294 -4.97803,-0.60043 -9.49142,-1.31817 -13.69202,-1.92883 -4.20295,-0.6115 -7.62744,-1.23226 -10.42861,-1.63962 -5.91408,-0.92192 -9.02691,-1.43552 -9.02691,-1.43552 z"
style="fill:#0e2db8;stroke-width:0.315602"
inkscape:connector-curvature="0" />
</g>
<path
id="path2816-8-8-6"
d="m 671.21125,429.74672 c 0,0 2.96847,0.37274 8.07411,0.86524 2.69096,0.28869 5.65825,0.66158 9.28022,0.96771 3.62202,0.30701 7.52027,0.69726 12.07217,1.02377 17.5526,1.36569 41.0859,1.91095 64.38633,0.80431 23.29939,-1.10656 46.74328,-4.01183 64.05201,-7.19534 8.51554,-1.63427 15.90177,-2.82056 20.77359,-3.97797 l 3.08998,-0.64385 8.81354,27.68352 c 20.17225,-15.74484 38.22786,-32.3943 53.5158,-49.88295 -25.52811,-2.46456 -50.1584,-7.0281 -73.16158,-13.20476 l 8.53721,27.59944 -3.09007,0.64483 c -4.87173,1.15742 -11.98171,2.42676 -20.39754,3.82733 -16.93142,3.03481 -39.72175,5.87541 -62.64504,6.83238 -23.02307,1.1897 -45.90385,0.57981 -63.18026,-0.7029 -4.27435,-0.24143 -8.17265,-0.6326 -11.79458,-0.93877 -3.62088,-0.30701 -6.58817,-0.67898 -9.00281,-0.8837 -5.10568,-0.4935 -7.7966,-0.78128 -7.7966,-0.78128 z"
style="fill:#04bd3d;stroke-width:0.315602"
inkscape:connector-curvature="0" />
</g>
<g
id="g12404"
transform="matrix(0.90181829,0,0,0.90181829,26.80286,-36.492551)">
<path
id="circle268-7-0"
d="m 271.90352,225.26701 a 30.608457,30.608457 0 0 1 6.36669,42.81611 30.608457,30.608457 0 0 1 -42.81612,6.36669 30.608457,30.608457 0 0 1 -6.36668,-42.81612 30.608457,30.608457 0 0 1 42.81611,-6.36668 z"
style="opacity:0.13;stroke:#000000;stroke-width:7.46547;stroke-miterlimit:10"
inkscape:connector-curvature="0" />
<path
id="circle2836-7-0"
d="m 276.49466,226.66956 a 32.898419,32.898419 0 0 1 -11.04911,45.19435 32.898419,32.898419 0 0 1 -45.19435,-11.04911 32.898419,32.898419 0 0 1 11.04914,-45.19435 32.898419,32.898419 0 0 1 45.19432,11.04911 z"
style="fill:#d9d98d;stroke:#878578;stroke-width:3.87027;stroke-miterlimit:10"
inkscape:connector-curvature="0" />
<text
transform="rotate(1.2700671)"
id="text11431-5-2-4"
y="241.60732"
x="223.73181"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:14.1039px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#666666;fill-opacity:1;stroke:none;stroke-width:0.352597"
xml:space="preserve"><tspan
style="fill:#666666;stroke-width:0.352597"
y="241.60732"
x="223.73181"
id="tspan11429-9-2-6"
sodipodi:role="line">[string]</tspan></text>
</g>
<g
id="g20028"
transform="matrix(0.25991577,0,0,0.25991577,126.36834,-1.4373898)">
<path
id="path2810-6-5"
d="m 562.81991,226.41346 c 0,0 2.93096,-0.77849 8.00305,-1.97723 2.66725,-0.65905 5.59825,-1.43761 9.20365,-2.24757 3.60652,-0.80995 7.47572,-1.73835 12.02148,-2.69925 17.50535,-3.80916 41.24549,-7.69437 65.09601,-9.97542 23.84935,-2.28303 48.22433,-2.87592 66.43644,-2.32556 8.97531,0.33412 16.71052,0.40409 21.89291,0.80658 l 3.26672,0.17109 3.12179,-27.5687 c 23.75367,12.07655 45.55269,25.31473 64.71922,39.74706 -25.35786,5.99466 -49.36654,13.85525 -71.38762,23.01627 l 2.85921,-27.45025 -3.26668,-0.16926 c -5.18239,-0.40344 -12.65506,-0.59304 -21.47996,-0.7206 -17.8003,-0.46151 -41.49745,0.10001 -64.93494,2.46991 -23.58677,2.1636 -46.65147,6.01638 -63.89415,9.70702 -4.28214,0.84047 -8.15125,1.7699 -11.75895,2.57993 -3.6054,0.80897 -6.5364,1.58742 -8.93998,2.12707 -5.07209,1.19973 -7.73826,1.85882 -7.73826,1.85882 z"
style="fill:#9d539f;stroke-width:0.315602"
inkscape:connector-curvature="0" />
<path
id="path2812-2-6"
d="m 542.53223,265.22483 c 0,0 3.13436,-0.74266 8.55723,-1.88846 2.85199,-0.62948 5.9864,-1.37115 9.84201,-2.14561 3.85684,-0.77449 7.99374,-1.66211 12.85425,-2.58158 18.71634,-3.6441 44.09239,-7.382 69.57834,-9.61326 25.48595,-2.2313 51.52212,-2.87654 70.9715,-2.42456 9.58462,0.2821 17.84746,0.32094 23.38023,0.68092 l 3.4884,0.14875 3.47313,-25.93461 c 25.30939,11.27186 48.52633,23.64158 68.92596,37.14306 -27.11555,5.72703 -52.79916,13.20476 -76.36544,21.89714 l 3.19197,-25.82046 -3.4884,-0.14874 c -5.53168,-0.35977 -13.51332,-0.51199 -22.93883,-0.59959 -19.00915,-0.37061 -44.32272,0.2418 -69.36853,2.55447 -25.20362,2.11912 -49.8571,5.82419 -68.29342,9.35612 -4.57822,0.80625 -8.71512,1.69289 -12.57196,2.46742 -3.85571,0.77445 -6.99003,1.51711 -9.56086,2.03342 a 911.87652,767.83221 0 0 0 -8.2749,1.7743 z"
style="fill:#e90909;stroke-width:0.315602"
inkscape:connector-curvature="0" />
<path
id="path2814-5-9"
d="m 536.16495,332.53191 c 0,0 3.42453,0.62172 9.33861,1.54364 3.11274,0.5136 6.53732,1.13532 10.73914,1.74686 4.20173,0.61061 8.71517,1.32839 14.00594,2.03592 20.3834,2.84056 47.90967,5.36121 75.41828,6.21524 27.50852,0.85407 55.46275,-0.0777 76.26218,-1.8039 10.244,-0.91572 19.09318,-1.4804 24.98842,-2.22606 l 3.72431,-0.38439 6.06332,28.39416 c 26.10143,-14.03231 49.85911,-29.14634 70.49826,-45.33001 -29.57021,-4.60771 -57.76344,-11.23596 -83.79878,-19.33963 l 5.75171,28.28693 -3.72431,0.38442 c -5.89625,0.74566 -14.4339,1.41655 -24.52378,2.10875 -20.33498,1.6079 -47.51305,2.52956 -74.55597,1.55906 -27.19687,-0.74687 -53.9482,-3.27961 -74.01994,-6.01294 -4.97803,-0.60043 -9.49142,-1.31817 -13.69202,-1.92883 -4.20295,-0.6115 -7.62744,-1.23226 -10.42861,-1.63962 -5.91408,-0.92192 -9.02691,-1.43552 -9.02691,-1.43552 z"
style="fill:#0e2db8;stroke-width:0.315602"
inkscape:connector-curvature="0" />
<path
id="path2816-8-8"
d="m 561.67622,311.53987 c 0,0 2.96847,0.37274 8.07411,0.86524 2.69096,0.28869 5.65825,0.66158 9.28022,0.96771 3.62202,0.30701 7.52027,0.69726 12.07217,1.02377 17.5526,1.36569 41.0859,1.91095 64.38633,0.80431 23.29939,-1.10656 46.74328,-4.01183 64.05201,-7.19534 8.51554,-1.63427 15.90177,-2.82056 20.77359,-3.97797 l 3.08998,-0.64385 8.81354,27.68352 c 20.17225,-15.74484 38.22786,-32.3943 53.5158,-49.88295 -25.52811,-2.46456 -50.1584,-7.0281 -73.16158,-13.20476 l 8.53721,27.59944 -3.09007,0.64483 c -4.87173,1.15742 -11.98171,2.42676 -20.39754,3.82733 -16.93142,3.03481 -39.72175,5.87541 -62.64504,6.83238 -23.02307,1.1897 -45.90385,0.57981 -63.18026,-0.7029 -4.27435,-0.24143 -8.17265,-0.6326 -11.79458,-0.93877 -3.62088,-0.30701 -6.58817,-0.67898 -9.00281,-0.8837 -5.10568,-0.4935 -7.7966,-0.78128 -7.7966,-0.78128 z"
style="fill:#04bd3d;stroke-width:0.315602"
inkscape:connector-curvature="0" />
</g>
<path
id="path2816-8-8-3"
d="m 244.9431,88.932911 c 0,0 -0.12952,0.766752 -0.31357,2.087178 -0.10453,0.695618 -0.23408,1.462062 -0.35346,2.399259 -0.11961,0.937198 -0.26385,1.945213 -0.39874,3.123662 -0.54787,4.54306 -0.94852,10.64824 -0.91764,16.71115 0.031,6.06263 0.52725,12.18256 1.16342,16.71241 0.33064,2.2293 0.55739,4.16043 0.80432,5.43831 l 0.13315,0.80949 -7.28596,1.98399 c 3.86659,5.41169 7.99142,10.28369 12.36463,14.44625 0.92101,-6.60208 2.37723,-12.9479 4.23442,-18.85343 l -7.26108,1.91314 -0.13342,-0.80954 c -0.24693,-1.27785 -0.4983,-3.13816 -0.76936,-5.33901 -0.60169,-4.4302 -1.08848,-10.37972 -1.08464,-16.34303 -0.0555,-5.99179 0.35476,-11.92682 0.87803,-16.399074 0.1097,-1.107314 0.25424,-2.115329 0.37363,-3.052517 0.11961,-0.936899 0.24884,-1.703356 0.32857,-2.328143 0.18436,-1.320426 0.28871,-2.016038 0.28871,-2.016038 z"
style="fill:#4d4d4d;stroke-width:0.08203"
inkscape:connector-curvature="0" />
<path
id="path2816-8-8-3-1"
d="m 366.62727,85.023289 c 0,0 -0.12952,0.766754 -0.31357,2.087178 -0.10454,0.695618 -0.23408,1.462072 -0.35346,2.399263 -0.11961,0.937192 -0.26384,1.945208 -0.39875,3.123659 -0.54786,4.543063 -0.94851,10.648251 -0.91764,16.711151 0.0309,6.06264 0.52725,12.18257 1.16343,16.7124 0.33064,2.22932 0.55739,4.16044 0.80431,5.43834 l 0.13315,0.80947 -7.28595,1.984 c 3.86661,5.41168 7.99141,10.28369 12.36461,14.44623 0.92103,-6.60207 2.37724,-12.9479 4.23443,-18.85342 l -7.26107,1.91314 -0.13343,-0.80955 c -0.24693,-1.27784 -0.49827,-3.13815 -0.76935,-5.33901 -0.60169,-4.43019 -1.08846,-10.3797 -1.08464,-16.34302 -0.0555,-5.99179 0.35476,-11.926811 0.87804,-16.399076 0.1097,-1.107314 0.25424,-2.11533 0.37361,-3.052511 0.11961,-0.936898 0.24885,-1.703357 0.32858,-2.328144 0.18436,-1.320425 0.28871,-2.016044 0.28871,-2.016044 z"
style="fill:#4d4d4d;stroke-width:0.08203"
inkscape:connector-curvature="0" />
<g
id="g12386"
transform="matrix(1.2562726,0,0,1.2562726,302.03989,-313.71353)">
<path
id="circle268-6-9-7"
d="m 70.348346,289.1314 a 21.972353,21.972353 0 0 1 4.57033,30.73565 21.972353,21.972353 0 0 1 -30.73566,4.57034 21.972353,21.972353 0 0 1 -4.57033,-30.73566 21.972353,21.972353 0 0 1 30.73566,-4.57033 z"
style="opacity:0.13;stroke:#000000;stroke-width:5.35911;stroke-miterlimit:10"
inkscape:connector-curvature="0" />
<path
id="circle2818-6-2"
d="m 74.263816,290.72282 a 23.616208,23.616208 0 0 1 -7.93163,32.44288 23.616208,23.616208 0 0 1 -32.44288,-7.93164 23.616208,23.616208 0 0 1 7.93164,-32.44287 23.616208,23.616208 0 0 1 32.44287,7.93163 z"
style="fill:#a6d3e4;stroke:#9bc0bf;stroke-width:2.77828;stroke-miterlimit:10;fill-opacity:1;stroke-opacity:1"
inkscape:connector-curvature="0" />
<text
transform="rotate(1.2700671)"
id="text11431-9-8"
y="304.47513"
x="48.886883"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:10.1245px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#666666;fill-opacity:1;stroke:none;stroke-width:0.253112"
xml:space="preserve"><tspan
id="tspan11815-2"
style="fill:#666666;stroke-width:0.253112"
y="304.47513"
x="48.886883"
sodipodi:role="line">num</tspan></text>
</g>
<g
id="g12392"
transform="matrix(1.2562726,0,0,1.2562726,151.56395,-250.15527)">
<path
id="circle268-7-0-7"
d="m 93.273694,239.96336 a 21.972353,21.972353 0 0 1 4.57034,30.73565 21.972353,21.972353 0 0 1 -30.73565,4.57034 21.972353,21.972353 0 0 1 -4.570341,-30.73565 21.972353,21.972353 0 0 1 30.735651,-4.57034 z"
style="opacity:0.13;stroke:#000000;stroke-width:5.35911;stroke-miterlimit:10"
inkscape:connector-curvature="0" />
<path
id="circle2836-7-0-6"
d="m 96.569454,240.97019 a 23.616208,23.616208 0 0 1 -7.93163,32.44287 23.616208,23.616208 0 0 1 -32.44287,-7.93163 23.616208,23.616208 0 0 1 7.93165,-32.44287 23.616208,23.616208 0 0 1 32.44285,7.93163 z"
style="fill:#d9d98d;stroke:#878578;stroke-width:2.77828;stroke-miterlimit:10"
inkscape:connector-curvature="0" />
<text
transform="rotate(1.2700671)"
id="text11431-5-2-4-1"
y="253.09364"
x="64.649704"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:10.1245px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#666666;fill-opacity:1;stroke:none;stroke-width:0.253112"
xml:space="preserve"><tspan
style="fill:#666666;stroke-width:0.253112"
y="253.09364"
x="64.649704"
id="tspan11429-9-2-6-3"
sodipodi:role="line">string</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -0,0 +1,640 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 1632 1056"
version="1.1"
id="svg15613"
sodipodi:docname="pointed_functor_set_internal.svg"
inkscape:version="1.1.2 (1:1.1+202205011109+08b2f3d93c)"
width="17in"
height="11in"
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/">
<metadata
id="metadata15619">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs15617" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1024"
id="namedview15615"
showgrid="false"
inkscape:zoom="0.5"
inkscape:cx="875"
inkscape:cy="422"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg15613"
inkscape:pagecheckerboard="0"
showguides="false"
units="in"
inkscape:document-units="in" />
<g
id="g42748"
transform="matrix(4.3287022,0,0,4.3287022,-528.41306,203.98648)" />
<g
id="g42748-8"
transform="matrix(4.3287022,0,0,4.3287022,493.61069,217.46559)" />
<g
id="g42748-4"
transform="matrix(3.6770285,0,0,3.6770285,-8.7554376,-174.77086)" />
<g
id="g42748-8-6"
transform="matrix(3.6770285,0,0,3.6770285,859.4056,-163.321)" />
<circle
id="circle13556-6"
r="156.19077"
cy="441.58691"
cx="-187.87657"
stroke-miterlimit="10"
style="fill:#dddddd;fill-opacity:1;stroke:#808285;stroke-width:8.15618;stroke-miterlimit:10"
transform="rotate(-91.238865)" />
<circle
id="circle13552-4"
r="156.19077"
cy="443.59256"
cx="-827.98517"
stroke-miterlimit="10"
style="fill:#cccccc;stroke:#808285;stroke-width:8.15618;stroke-miterlimit:10"
transform="rotate(-91.238865)" />
<g
id="g60465-7"
transform="matrix(-0.03129404,-1.4470808,1.4470808,-0.03129404,757.208,1150.3787)">
<circle
r="29.954245"
cy="-270.5"
cx="213.25"
id="path60354-9-4"
style="opacity:1;fill:#f2f2f2;fill-opacity:1;stroke:#333333;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" />
</g>
<circle
style="opacity:1;fill:#f2f2f2;fill-opacity:1;stroke:#333333;stroke-width:7.2371;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
id="path60354-8"
cx="512.96051"
cy="914.96979"
r="43.356346"
transform="rotate(-0.37080303)" />
<g
id="g60465-3"
transform="matrix(-0.03129404,-1.4470808,1.4470808,-0.03129404,833.70632,1199.5784)">
<circle
r="29.954245"
cy="-277.96936"
cx="199.05824"
id="path60354-9-8"
style="opacity:1;fill:#f2f2f2;fill-opacity:1;stroke:#333333;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" />
</g>
<g
id="g66262"
transform="matrix(1.8689169,-0.01209529,0.01209529,1.8689169,110.13361,1072.6852)">
<circle
style="opacity:0.13;stroke:#000000;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3367"
r="10.394309"
cy="-81.908195"
cx="209.90921" />
<circle
style="fill:#39bced;stroke:#008dd2;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3381"
r="10.394309"
cy="-85.372963"
cx="207.88106" />
</g>
<g
id="g66242-3"
transform="matrix(-0.04040794,-1.8685192,1.8685192,-0.04040794,532.07017,1087.0559)">
<circle
style="opacity:0.13;stroke:#000000;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3365-7"
r="10.394309"
cy="-87.105354"
cx="130.30402" />
<circle
style="fill:#fce600;stroke:#ffdd00;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3379-7"
r="10.394309"
cy="-90.570122"
cx="128.27586" />
</g>
<g
id="g60465-3-6-2"
transform="matrix(-0.03129404,-1.4470808,1.4470808,-0.03129404,854.09825,1067.2156)">
<circle
r="29.954245"
cy="-277.96936"
cx="199.05824"
id="path60354-9-8-5-6"
style="opacity:1;fill:#f2f2f2;fill-opacity:1;stroke:#333333;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" />
</g>
<g
id="g66262-5"
transform="matrix(0.03004979,-1.8687145,1.8687145,0.03004979,595.62454,1179.6589)">
<circle
style="opacity:0.13;stroke:#000000;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3367-8"
r="10.394309"
cy="-81.908195"
cx="209.90921" />
<circle
style="fill:#39bced;stroke:#008dd2;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3381-7"
r="10.394309"
cy="-85.372963"
cx="207.88106" />
</g>
<g
style="display:inline;fill:#ffff00;fill-opacity:0;stroke:#60ff41;stroke-width:6.389;stroke-miterlimit:10;stroke-opacity:1"
id="g1482-7-0-1-0-3-5-5-2"
transform="matrix(0.03920627,0.37431801,0.51377325,-0.04293615,207.92534,704.50856)"
inkscape:transform-center-x="-19.762777"
inkscape:transform-center-y="-234.5245">
<path
sodipodi:nodetypes="cccc"
style="fill:#ffff00;fill-opacity:0;stroke:#60ff41;stroke-width:19.8692;stroke-opacity:1"
inkscape:connector-curvature="0"
id="path1478-7-9-0-19-0-0-9-4"
d="m 311.94158,238.23518 c 7.97334,-1.83558 16.30428,-3.46468 24.8654,-4.99124 -7.26349,-3.12038 -14.92614,-6.12431 -22.98899,-9.01298 -0.62577,4.89175 -0.69619,8.73507 -1.87641,14.00422 z" />
<path
style="fill:#ffff00;fill-opacity:0;stroke:#60ff41;stroke-width:9.11185;stroke-opacity:1;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-1-5-7-4-8-7"
d="M -1295.4233,381.77263 C -866.96413,172.93484 -222.14313,139.02443 309.369,229.13243"
sodipodi:nodetypes="cc" />
</g>
<g
style="display:inline;fill:#ffff00;fill-opacity:0;stroke:#60ff41;stroke-width:6.389;stroke-miterlimit:10;stroke-opacity:1"
id="g1482-7-0-1-0-3-5-5-5"
transform="matrix(0.01366702,0.3761174,0.51550358,-0.0079072,306.84499,631.34277)"
inkscape:transform-center-x="-43.79603"
inkscape:transform-center-y="-231.01374">
<path
sodipodi:nodetypes="cccc"
style="fill:#ffff00;fill-opacity:0;stroke:#60ff41;stroke-width:19.8692;stroke-opacity:1"
inkscape:connector-curvature="0"
id="path1478-7-9-0-19-0-0-9-8"
d="m 311.94158,238.23518 c 7.97334,-1.83558 16.30428,-3.46468 24.8654,-4.99124 -7.26349,-3.12038 -14.92614,-6.12431 -22.98899,-9.01298 -0.62577,4.89175 -0.69619,8.73507 -1.87641,14.00422 z" />
<path
style="fill:#ffff00;fill-opacity:0;stroke:#60ff41;stroke-width:9.11185;stroke-opacity:1;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-1-5-7-4-8-2"
d="M -1240.8012,298.81344 C -664.36687,126.94112 -222.14313,139.02443 309.369,229.13243"
sodipodi:nodetypes="cc" />
</g>
<g
id="g60465-3-6"
transform="matrix(-0.03129404,-1.4470808,1.4470808,-0.03129404,957.6696,1106.0682)">
<circle
r="29.954245"
cy="-277.96936"
cx="199.05824"
id="path60354-9-8-5"
style="opacity:1;fill:#f2f2f2;fill-opacity:1;stroke:#333333;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" />
</g>
<g
id="g66242-0"
transform="matrix(1.8689169,-0.01209529,0.01209529,1.8689169,303.52016,1080.3141)">
<circle
style="opacity:0.13;stroke:#000000;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3365-4"
r="10.394309"
cy="-87.105354"
cx="130.30402" />
<circle
style="fill:#fce600;stroke:#ffdd00;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3379-76"
r="10.394309"
cy="-90.570122"
cx="128.27586" />
</g>
<g
id="g66246-7-4-2-7"
transform="matrix(-0.04222911,-1.9527334,1.9527334,-0.04222911,676.52579,1032.7545)">
<circle
style="opacity:0.13;stroke:#000000;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3369-3-8-6-0"
r="10.394309"
cy="-60.034081"
cx="108.4418" />
<circle
r="10.394309"
style="fill:#d71920;stroke:#be1e2d;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3383-1-5-4-86"
cy="-63.541103"
cx="106.41364" />
</g>
<g
style="display:inline;fill:#ffff00;fill-opacity:0;stroke:#60ff41;stroke-width:6.389;stroke-miterlimit:10;stroke-opacity:1"
id="g1482-7-0-1-0-3-5-5-9"
transform="matrix(0.04120076,0.37410373,0.51353711,-0.04567387,401.5033,679.93001)"
inkscape:transform-center-x="-23.639451"
inkscape:transform-center-y="-234.9271">
<path
sodipodi:nodetypes="cccc"
style="fill:#ffff00;fill-opacity:0;stroke:#60ff41;stroke-width:19.8692;stroke-opacity:1"
inkscape:connector-curvature="0"
id="path1478-7-9-0-19-0-0-9-3"
d="m 311.94158,238.23518 c 7.97334,-1.83558 16.30428,-3.46468 24.8654,-4.99124 -7.26349,-3.12038 -14.92614,-6.12431 -22.98899,-9.01298 -0.62577,4.89175 -0.69619,8.73507 -1.87641,14.00422 z" />
<path
style="fill:#ffff00;fill-opacity:0;stroke:#60ff41;stroke-width:9.11185;stroke-opacity:1;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-1-5-7-4-8-9"
d="M -1252.2314,337.35963 C -774.58839,186.35002 -222.14313,139.02443 309.369,229.13243"
sodipodi:nodetypes="cc" />
</g>
<circle
style="opacity:1;fill:#f2f2f2;fill-opacity:1;stroke:#333333;stroke-width:7.2371;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
id="path60354-90"
cx="505.83301"
cy="720.65851"
r="43.356346"
transform="rotate(-0.21200656)" />
<g
id="g66246-7-4-2-6"
transform="matrix(1.8689433,-0.00691552,0.00691552,1.8689433,332.37363,837.78093)">
<circle
style="opacity:0.13;stroke:#000000;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3369-3-8-6-8"
r="10.394309"
cy="-60.034081"
cx="108.4418" />
<circle
r="10.394309"
style="fill:#d71920;stroke:#be1e2d;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3383-1-5-4-7"
cy="-63.541103"
cx="106.41364" />
</g>
<g
id="g66262-3"
transform="matrix(1.8689433,-0.00691552,0.00691552,1.8689433,98.775188,879.24522)">
<circle
style="opacity:0.13;stroke:#000000;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3367-3"
r="10.394309"
cy="-81.908195"
cx="209.90921" />
<circle
style="fill:#39bced;stroke:#008dd2;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3381-3"
r="10.394309"
cy="-85.372963"
cx="207.88106" />
</g>
<g
id="g66242"
transform="matrix(2.9656815,-0.56652584,0.56652584,2.9656815,25.298212,535.03016)">
<circle
style="opacity:0.13;stroke:#000000;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3365"
r="10.394309"
cy="-87.105354"
cx="130.30402" />
<circle
style="fill:#fce600;stroke:#ffdd00;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3379"
r="10.394309"
cy="-90.570122"
cx="128.27586" />
</g>
<g
id="g66262-9"
transform="matrix(2.9820575,-0.47281325,0.47281325,2.9820575,-130.30164,491.90604)">
<circle
style="opacity:0.13;stroke:#000000;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3367-0"
r="10.394309"
cy="-81.908195"
cx="209.90921" />
<circle
style="fill:#39bced;stroke:#008dd2;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3381-2"
r="10.394309"
cy="-85.372963"
cx="207.88106" />
</g>
<g
id="g66246-7-4-2"
transform="matrix(3.0121392,-0.20793266,0.20793266,3.0121392,219.33308,374.90141)">
<circle
style="opacity:0.13;stroke:#000000;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3369-3-8-6"
r="10.394309"
cy="-60.034081"
cx="108.4418" />
<circle
r="10.394309"
style="fill:#d71920;stroke:#be1e2d;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3383-1-5-4"
cy="-63.541103"
cx="106.41364" />
</g>
<circle
id="circle13556-6-6"
r="156.19077"
cy="1130.2581"
cx="-211.26421"
stroke-miterlimit="10"
style="fill:#ffff00;fill-opacity:1;stroke:#808285;stroke-width:8.15618;stroke-miterlimit:10"
transform="rotate(-91.238865)" />
<circle
id="circle13552-4-4"
r="156.19077"
cy="1132.2637"
cx="-851.3728"
stroke-miterlimit="10"
style="fill:#ffff00;stroke:#808285;stroke-width:8.15618;stroke-miterlimit:10"
transform="rotate(-91.238865)" />
<g
id="g60465-7-9"
transform="matrix(-0.03129404,-1.4470808,1.4470808,-0.03129404,1446.2238,1158.8714)">
<circle
r="29.954245"
cy="-270.5"
cx="213.25"
id="path60354-9-4-5"
style="opacity:1;fill:#f2f2f2;fill-opacity:1;stroke:#333333;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" />
</g>
<circle
style="fill:#f2f2f2;fill-opacity:1;stroke:#333333;stroke-width:7.2371;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
id="path60354-8-0"
cx="1201.907"
cy="927.92145"
r="43.356346"
transform="rotate(-0.37080303)" />
<g
id="g60465-3-4"
transform="matrix(-0.03129404,-1.4470808,1.4470808,-0.03129404,1522.7222,1208.0711)">
<circle
r="29.954245"
cy="-277.96936"
cx="199.05824"
id="path60354-9-8-8"
style="opacity:1;fill:#f2f2f2;fill-opacity:1;stroke:#333333;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" />
</g>
<g
id="g66262-7"
transform="matrix(1.8689169,-0.01209529,0.01209529,1.8689169,799.14941,1081.1779)">
<circle
style="opacity:0.13;stroke:#000000;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3367-1"
r="10.394309"
cy="-81.908195"
cx="209.90921" />
<circle
style="fill:#39bced;stroke:#008dd2;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3381-72"
r="10.394309"
cy="-85.372963"
cx="207.88106" />
</g>
<g
id="g66242-3-7"
transform="matrix(-0.04040794,-1.8685192,1.8685192,-0.04040794,1221.086,1095.5486)">
<circle
style="opacity:0.13;stroke:#000000;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3365-7-2"
r="10.394309"
cy="-87.105354"
cx="130.30402" />
<circle
style="fill:#fce600;stroke:#ffdd00;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3379-7-2"
r="10.394309"
cy="-90.570122"
cx="128.27586" />
</g>
<g
id="g60465-3-6-2-6"
transform="matrix(-0.03129404,-1.4470808,1.4470808,-0.03129404,1543.1141,1075.7083)">
<circle
r="29.954245"
cy="-277.96936"
cx="199.05824"
id="path60354-9-8-5-6-1"
style="opacity:1;fill:#f2f2f2;fill-opacity:1;stroke:#333333;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" />
</g>
<g
id="g66262-5-0"
transform="matrix(0.03004979,-1.8687145,1.8687145,0.03004979,1284.6404,1188.1516)">
<circle
style="opacity:0.13;stroke:#000000;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3367-8-6"
r="10.394309"
cy="-81.908195"
cx="209.90921" />
<circle
style="fill:#39bced;stroke:#008dd2;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3381-7-1"
r="10.394309"
cy="-85.372963"
cx="207.88106" />
</g>
<g
style="display:inline;fill:#ffff00;fill-opacity:0;stroke:#60ff41;stroke-width:6.389;stroke-miterlimit:10;stroke-opacity:1"
id="g1482-7-0-1-0-3-5-5-2-5"
transform="matrix(0.03920627,0.37431801,0.51377325,-0.04293615,896.94113,713.00126)"
inkscape:transform-center-x="-19.762774"
inkscape:transform-center-y="-234.52451">
<path
sodipodi:nodetypes="cccc"
style="fill:#ffff00;fill-opacity:0;stroke:#60ff41;stroke-width:19.8692;stroke-opacity:1"
inkscape:connector-curvature="0"
id="path1478-7-9-0-19-0-0-9-4-9"
d="m 311.94158,238.23518 c 7.97334,-1.83558 16.30428,-3.46468 24.8654,-4.99124 -7.26349,-3.12038 -14.92614,-6.12431 -22.98899,-9.01298 -0.62577,4.89175 -0.69619,8.73507 -1.87641,14.00422 z" />
<path
style="fill:#ffff00;fill-opacity:0;stroke:#60ff41;stroke-width:9.11185;stroke-opacity:1;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-1-5-7-4-8-7-4"
d="M -1295.4233,381.77263 C -866.96413,172.93484 -222.14313,139.02443 309.369,229.13243"
sodipodi:nodetypes="cc" />
</g>
<g
style="display:inline;fill:#ffff00;fill-opacity:0;stroke:#60ff41;stroke-width:6.389;stroke-miterlimit:10;stroke-opacity:1"
id="g1482-7-0-1-0-3-5-5-5-9"
transform="matrix(0.01366702,0.3761174,0.51550358,-0.0079072,995.86079,639.83548)"
inkscape:transform-center-x="-43.796028"
inkscape:transform-center-y="-231.01374">
<path
sodipodi:nodetypes="cccc"
style="fill:#ffff00;fill-opacity:0;stroke:#60ff41;stroke-width:19.8692;stroke-opacity:1"
inkscape:connector-curvature="0"
id="path1478-7-9-0-19-0-0-9-8-0"
d="m 311.94158,238.23518 c 7.97334,-1.83558 16.30428,-3.46468 24.8654,-4.99124 -7.26349,-3.12038 -14.92614,-6.12431 -22.98899,-9.01298 -0.62577,4.89175 -0.69619,8.73507 -1.87641,14.00422 z" />
<path
style="fill:#ffff00;fill-opacity:0;stroke:#60ff41;stroke-width:9.11185;stroke-opacity:1;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-1-5-7-4-8-2-9"
d="M -1240.8012,298.81344 C -664.36687,126.94112 -222.14313,139.02443 309.369,229.13243"
sodipodi:nodetypes="cc" />
</g>
<g
id="g60465-3-6-1"
transform="matrix(-0.03129404,-1.4470808,1.4470808,-0.03129404,1646.6854,1114.5609)">
<circle
r="29.954245"
cy="-277.96936"
cx="199.05824"
id="path60354-9-8-5-7"
style="opacity:1;fill:#f2f2f2;fill-opacity:1;stroke:#333333;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" />
</g>
<g
id="g66242-0-7"
transform="matrix(1.8689169,-0.01209529,0.01209529,1.8689169,992.53597,1088.8068)">
<circle
style="opacity:0.13;stroke:#000000;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3365-4-1"
r="10.394309"
cy="-87.105354"
cx="130.30402" />
<circle
style="fill:#fce600;stroke:#ffdd00;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3379-76-1"
r="10.394309"
cy="-90.570122"
cx="128.27586" />
</g>
<g
id="g66246-7-4-2-7-5"
transform="matrix(-0.04222911,-1.9527334,1.9527334,-0.04222911,1365.5416,1041.2472)">
<circle
style="opacity:0.13;stroke:#000000;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3369-3-8-6-0-9"
r="10.394309"
cy="-60.034081"
cx="108.4418" />
<circle
r="10.394309"
style="fill:#d71920;stroke:#be1e2d;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3383-1-5-4-86-7"
cy="-63.541103"
cx="106.41364" />
</g>
<g
style="display:inline;fill:#ffff00;fill-opacity:0;stroke:#60ff41;stroke-width:6.389;stroke-miterlimit:10;stroke-opacity:1"
id="g1482-7-0-1-0-3-5-5-9-7"
transform="matrix(0.04120076,0.37410373,0.51353711,-0.04567387,1090.5191,688.42271)"
inkscape:transform-center-x="-23.639449"
inkscape:transform-center-y="-234.9271">
<path
sodipodi:nodetypes="cccc"
style="fill:#ffff00;fill-opacity:0;stroke:#60ff41;stroke-width:19.8692;stroke-opacity:1"
inkscape:connector-curvature="0"
id="path1478-7-9-0-19-0-0-9-3-6"
d="m 311.94158,238.23518 c 7.97334,-1.83558 16.30428,-3.46468 24.8654,-4.99124 -7.26349,-3.12038 -14.92614,-6.12431 -22.98899,-9.01298 -0.62577,4.89175 -0.69619,8.73507 -1.87641,14.00422 z" />
<path
style="fill:#ffff00;fill-opacity:0;stroke:#60ff41;stroke-width:9.11185;stroke-opacity:1;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-1-5-7-4-8-9-7"
d="M -1252.2314,337.35963 C -774.58839,186.35002 -222.14313,139.02443 309.369,229.13243"
sodipodi:nodetypes="cc" />
</g>
<circle
style="fill:#f2f2f2;fill-opacity:1;stroke:#333333;stroke-width:7.2371;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
id="path60354-90-3"
cx="1194.8126"
cy="731.70062"
r="43.356346"
transform="rotate(-0.21200656)" />
<g
id="g66246-7-4-2-6-6"
transform="matrix(1.8689433,-0.00691552,0.00691552,1.8689433,1021.3894,846.27363)">
<circle
style="opacity:0.13;stroke:#000000;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3369-3-8-6-8-5"
r="10.394309"
cy="-60.034081"
cx="108.4418" />
<circle
r="10.394309"
style="fill:#d71920;stroke:#be1e2d;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3383-1-5-4-7-6"
cy="-63.541103"
cx="106.41364" />
</g>
<g
id="g66262-3-3"
transform="matrix(1.8689433,-0.00691552,0.00691552,1.8689433,787.791,887.73792)">
<circle
style="opacity:0.13;stroke:#000000;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3367-3-9"
r="10.394309"
cy="-81.908195"
cx="209.90921" />
<circle
style="fill:#39bced;stroke:#008dd2;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3381-3-4"
r="10.394309"
cy="-85.372963"
cx="207.88106" />
</g>
<g
id="g66242-8"
transform="matrix(2.9656815,-0.56652584,0.56652584,2.9656815,714.314,543.52287)">
<circle
style="opacity:0.13;stroke:#000000;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3365-1"
r="10.394309"
cy="-87.105354"
cx="130.30402" />
<circle
style="fill:#fce600;stroke:#ffdd00;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3379-2"
r="10.394309"
cy="-90.570122"
cx="128.27586" />
</g>
<g
id="g66262-9-9"
transform="matrix(2.9820575,-0.47281325,0.47281325,2.9820575,558.71417,500.39874)">
<circle
style="opacity:0.13;stroke:#000000;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3367-0-3"
r="10.394309"
cy="-81.908195"
cx="209.90921" />
<circle
style="fill:#39bced;stroke:#008dd2;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3381-2-9"
r="10.394309"
cy="-85.372963"
cx="207.88106" />
</g>
<g
id="g66246-7-4-2-0"
transform="matrix(3.0121392,-0.20793266,0.20793266,3.0121392,908.34888,383.39411)">
<circle
style="opacity:0.13;stroke:#000000;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3369-3-8-6-88"
r="10.394309"
cy="-60.034081"
cx="108.4418" />
<circle
r="10.394309"
style="fill:#d71920;stroke:#be1e2d;stroke-width:2.5352;stroke-miterlimit:10"
id="circle3383-1-5-4-5"
cy="-63.541103"
cx="106.41364" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -1,3 +1,8 @@
---
layout: default
title: Natural transformations
---
Natural transformations and advanced concepts
===
@ -18,6 +23,7 @@ However there is another way to look at things. Because, what is an object, when
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
===
@ -107,6 +113,12 @@ Note that if the condition above (sometimes called the "naturality condition") i
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.
natural transformations from surjective functors are just regular morphisms.
/*
https://www.math3ma.com/blog/what-is-a-natural-transformation
@ -123,6 +135,7 @@ But most of these isomorphisms, are just random. In our studies we are only inte
Free objects
===
https://math.stackexchange.com/questions/131389/what-are-free-objects

View File

@ -146,3 +146,19 @@ Lehrer
Pythagoreans
Dimitrina
Georgieva
functorial
monospaced
endofunctor
Endofunctor
Homomorphism
Hom
representable
Ord
maths
featureful
Adjunction
adjunctions
homorphism
homorphisms
morphisms.
Adjoint