This commit is contained in:
Boris Marinov 2023-02-18 12:58:53 +02:00
parent 987730a2fe
commit aeba1c1ab6
19 changed files with 3222 additions and 212 deletions

View File

@ -27,22 +27,33 @@ Some 5 years ago I found myself jobless for a few months and decided to publish
A few years after that some people found my notes and encouraged me write more. They were so nice that I forgot my imposter syndrome and got to work on the next several chapters.
Who is this book for AKA The value of category theory
On math
===
Ever since Newton's Principia, the discipline of mathematics was viewed in the somewhat demeaning position of "science and engineering's workhorse". According to this view, mathematics is only "useful" as a means for making it easier for scientists and engineers for making technological and and scientific advancements i.e. it is viewed as just a tool for solving "practical" problems. Which puts mathematicians in a weird and I'd say unique position of always having to defend what they do with respect to it's value for *other disciplines*. I again stress that this is something that would be considered absurd when it comes to any other discipline. Imagine for example, what would it look like if people were bashing *philosophical theories* for being too impractical in the way they are bashing mathematics, like, for example someone attacking Wittgenstein's picture theory of language by, saying:
Ever since Newton's Principia, the discipline of mathematics is viewed in the somewhat demeaning position of "science and engineering's workhorse" - only "useful" as a means for helping scientists and engineers to make technological and and scientific advancements i.e. it is viewed as just a tool for solving "practical" problems.
"All too well, but what can you do with that theory?"
Because of this, mathematics is in a weird and, I'd say, unique position of always having to defend what they do with respect to it's value for *other disciplines*. I again stress that this is something that would be considered absurd when it comes to any other discipline.
And at the other end of the line, some philosopher sweating:
People don't expect any return on investment from physical theories - noone bashed string theory for failing to make useful predictions.
And bashing philosophical theories for being impractical would be even more absurd, like bashing Wittgenstein:
"Well, I am told it does have its applications is programming language theory..."
> "All too well, but what can you do with the picture theory of language?"
> "Well, I am told it does have its applications is programming language theory..."
Or someone bashing David Hume's extreme scepticism:
Or someone being sceptical to David Hume's scepticism:
"That's all fine and dandy, but your theory leaves us at square one in terms of our knowledge. What the hell are we expected to do from there?"
> "That's all fine and dandy, but your theory leaves us at square one in terms of our knowledge. What the hell are we expected to do from there?"
So, who is this book for? If we rephrase this question as "Who *should* read this book", then the answer is nobody. Indeed, if you think in terms of "should" mathematics (or at least the type of mathematics that is reviewed here) won't help you much, although it is falsely advertised as solution to many problems.
Although many people don't necessarily subscribe to this view of mathematics as a workhorse, we can see it encoded inside the structure of most mathematics textbooks - each chapter starts with an explanation of a concept, followed by some examples and then ends with a list of problems that this concept solves.
There is nothing wrong with this approach, but mathematics is so much more than solving problems. It was a the basis of a religious cult in ancient Greece (the Pythagoreans), it was seen by philosophers as means to understanding the laws which govern the universe. It was (and still is) a language, which can allow for people with different cultural backgrounds understand each other. And it is also art and a means of entertainment.
Category theory embodies all these aspects of mathematics, so I think a very good grounds to writing a book where all of them shine - a book that is based not on solving of problems, but on exploration of concepts and on seeking connections between them. A book, that is, overall, pretty.
Who is this book for
====
So, who is this book for? If we rephrase this question as "Who *should* read this book", then the answer is nobody. Indeed, if you think in terms of "should", mathematics (or at least the type of mathematics that is reviewed here) won't help you much, although it is falsely advertised as solution to many problems.
Let's take an example - many people claim that, Einstein's theories of relativity are essential for GPS to work properly because due to relativistic effects the clocks on GPS satellites should tick faster than identical clocks on the ground.
@ -66,19 +77,10 @@ Although I am not an expert in special relativity, I suspect that the way this c
>
> Engineer 2: Just adjust it by X and see if it works. Oh, and tell that to some physicist, they might find it interesting.
With that I am not claiming that math is so insignificant, that it is not even good enough to serve as a tool for building stuff. Quite the contrary, I think that math is much more than just a simple tool. Thinking itself is mathematical. So going through any math texbook (and of course especially this one) would help you in ways that are much more vital than finding solutions to "complex" problems.
In other words, we can solve problems without any advanced math, or with no math at all, as evidenced by the fact that the agyptians were able to build the pyramids without even knowing Euclidian geometry. And with that I am not claiming that math is so insignificant, that it is not even good enough to serve as a tool for building stuff. Quite the contrary, I think that math is much more than just a simple tool. Thinking itself is mathematical. So going through any math texbook (and of course especially this one) would help you in ways that are much more vital than finding solutions to "complex" problems.
And so "Who is this book for" is not to be read as who should, but who *can* read it. Then the answer is "anyone with some time and dedication to learn category theory".
About this book
===
Although many people don't subscribe to this view of mathematics specifically, we can see it encoded inside the structure of most mathematics textbooks - each chapter starts with an explanation of a concept, followed by some examples and then ends with a list of problems that this concept solves.
There is nothing wrong with this approach, but mathematics is so much more than solving problems. It was a the basis of a religious cult in ancient Greece (the Pythagoreans), it was seen by philosophers as means to understanding the laws which govern the universe. It was (and still is) a language, which can allow for people with different cultural backgrounds understand each other. And it is also art and a means of entertainment.
Category theory embodies all these aspects of mathematics, so I think a very good grounds to writing a book where all of them shine - a book that is based not on solving of problems, but on exploration of concepts and on seeking connections between them. A book, that is, overall, pretty.
About category theory
===
@ -112,7 +114,7 @@ In chapter 7 we review another more interesting and more advanced categorical co
Acknowledgments
===
Thanks to my wife Dimitrina, who is taking after our daughter while I sit here and write my book.
Thanks to my wife Dimitrina, for all her support.
My daughter Daria, my "anti-author" who stayed seated on my knees when I was writing the second and third chapters and mercilessly deleted many sentences, most of them bad.

View File

@ -502,7 +502,7 @@ When you do that, it would be important to highlight that you are not refering t
![A set of two balls](number_two_sets.svg)
This is a good starting point, but the person may still be staring at the objects instead of the structure - they might ask if this or that set is $2$ as well. At this point you might give up, or, if the person whom you are explaining happens to know about isomorphisms as well (they might have lived in a cave with just this book with them), you can easily formulate your final definition, saying that the number $2$ is represented by those sets and all other sets that are isomorphic to them.
This is a good starting point, but the person may still be staring at the objects instead of the structure - they might ask if this or that set is $2$ as well. At this point you might give up, or, if the person whom you are explaining happens to know about isomorphisms as well (let's say they lived in a cave with nothing but this book with them), you can easily formulate your final definition, saying that the number $2$ is represented by those sets and all other sets that are isomorphic to them, or by the *equivalence class* of sets that have two elements, as the formal definition goes (don't worry, we will learn all about equivalence classes later.)
![A set of two balls](number_two_isomorphism.svg)

View File

@ -83,7 +83,7 @@ Note that there are languages, such as the ones from the ML family, where the *p
Defining products in terms of sets
---
When we said that the product is a set of *ordered* pairs (formally speaking $A \times B ≠ B \times A$). But we didn't define how ordered pairs formally. Note that the criteria for order prevents us from symbolizing the pair with just a set containing the two elements, as while some mathematical operations (such as addition) indeed don't care about order, others (such as subtraction) do. And in programming, we have the ability to assign names to each member of an object, which accomplishes the same purpose as ordering does for pairs.
When we said that the product is a set of *ordered* pairs (formally speaking $A \times B ≠ B \times A$). But we didn't define how ordered pairs formally. Note that the criteria for order prevents us from encoding the pair as just a set containing the two elements, as while some mathematical operations (such as addition) indeed don't care about order, others (such as subtraction) do. And in programming, we have the ability to assign names to each member of an object, which accomplishes the same purpose as ordering does for pairs.
![A pair](pair.svg)
@ -104,32 +104,34 @@ Defining products in terms of functions
In the product definitions presented in the previous section worked by *zooming in* into the individual elements of the product and seeing what they can be made of. I call this the *low-level* approach. This time we will try to do the opposite - be as oblivious to the contents of our sets as possible i.e. instead of zooming in we will *zoom out*, and try to define the product in terms of functions and functional composition. Effectively we will be working at a *higher level* of abstraction.
How can we define products in terms of functions? Let's begin with an external diagram, showing the definition of the product.
How can we define products in terms of functions? To do that, we must first think about *what functions* are there for a given product, and we have two of those - the functions for retrieving the the two elements of the pair (the "getters", so to say) - formally, if we have a set $G$ which is the product of sets $Y$ and $B$, then we should also have functions which give us back the elements of the product, so $G → Y$ and $G → B$.
![Product, external diagram](product_external.svg)
This diagram already contains the first piece of the puzzle: if we have a set $G$ which is the product of sets $Y$ and $B$, then we should also have functions which give us back the elements of the product, so $G → Y$ and $G → B$.
This definition is not complete, however, because the product of $G$ and $B$ is not the only set for which such functions can be defined. For example, a set of triples of $Y \times B \times R$ for any random element $R$ also qualifies. And if there is a function from $G$ to $B$ then the set $G$ itself meets our condition for being the product, because it is connected to $B$ and to itself. And there can be many other such objects.
This diagram already provides a definition, but not a complete definithon, because the product of $Y$ and $B$ is not the only set for which such functions can be defined. For example, a set of triples of $Y \times B \times R$ for any element $R$ also qualifies. And if there is a function from $G$ to $B$ then the set $G$ itself meets our condition for being the product, because it is connected to $B$ and to itself. And there can be many other such objects.
![Product, external diagram](product_candidates.svg)
So how do we set apart the true product from all those "impostor" products? Simple - by using the observation that *they all can be converted to it*, This observation is true, because. The pair is nothing more than the sum of its elements. And you can always have a function that converts a more complex structure, to a simpler one (we saw an example of this when we covered the functions that convert subsets to their supersets).
However, all such objects would be *more complex* than the pair objects. And for this reason, *they all can be converted to it by a function*, as you can always have a function that converts a more complex structure, to a simpler one (we saw an example of this when we covered the functions that convert subsets to their supersets).
This observation is true, because the pair is nothing more than the sum of its elements, and so all other objects that encode the pair also contain something else.
More formally, if we suppose that there is a set $I$ that can serve as an impostor product of sets $B$ and $Y$ i.e. that $I$ is such that there exist two functions, which we will call $b: I → B$ and $y: I → Y$ that allow us to derive elements $B$ and $Y$ from it, then there must also exist a function with the type signature $I → B \times Y$ that converts the impostor from the true product. We can be sure that this function exists because $I$ (being an impostor) would contain some extra information other than the information contained in the true pair. So given we have functions $b: I → B$ and $y: I → Y$ that function would be $(i) → b(i) \times y(i)$ for each element $i:I$.
Therefore, we can define the product of $B$ and $Y$ as a set that has functions for deriving $B$ and $Y$, but, more importantly, all other sets that have such functions can be converted to it. The second requirement would mean that
Therefore, we can define the product of $B$ and $Y$ as a set that has functions for deriving $B$ and $Y$, but, more importantly, all other sets that have such functions can be converted to it.
![Product, external diagram](products_morphisms.svg)
In category theory, this type of property that a given object might possess (participating in a structure such that all similar objects can be converted to/from it) is called a *universal property*. I don't want to go into more detail, as it is a bit early for that now (after all we haven't even defined what category theory is). One thing that I like to point out is that this definition (as, by the way, all the previous ones) does not rule out the sets which are isomorphic to the product - when we represents things using universal properties, an isomorphism is the same as equality.
In category theory, this type of property that a given object might possess (participating in a structure such that all similar objects can be converted to/from it) is called a *universal property*. I don't want to go into more detail, as it is a bit early for that now (after all we haven't even defined what category theory is).
One thing that I like to point out is that this definition (as, by the way, all the previous ones) does not rule out the sets which are isomorphic to the product - when we represents things using universal properties, an isomorphism is the same as equality.
Sums
===
We will now study a construct that is pretty similar to the product but at the same time is very different. Similar because, like the product, it is a relation between two sets which allows you to unite them into one, without erasing their structure. But different as it encodes a quite different type of relation - a product encodes an *and* relation between two sets, while the sum encodes an *or* relation.
A sum of two sets $B$ and $Y$, denoted $B + Y$ is a set that contains *all elements from the first set combined with all elements from the second one*.
The sum of two sets $B$ and $Y$, denoted $B + Y$ is a set that contains *all elements from the first set combined with all elements from the second one*.
![Sum or coproduct](coproduct.svg)
@ -312,21 +314,28 @@ One of the few or maybe even the only requirement for a structure to be called a
![Composition of morphisms](composition.svg)
Formally, this requirement says that there should exist an operation (denoted with the symbol $•$) such that for each two functions $g: A → B$ and $f: B → C$, there exists exactly one function $(f • g): A → C$. Again, note that this criteria is not met by just *any* morphism with this type signature. There is *exactly one* morphism that fits these criteria, and there may be some which don't.
Formally, this requirement says that there should exist an operation (denoted with the symbol $•$) such that for each two functions $g: A → B$ and $f: B → C$, there exists a function $(f • g): A → C$ (again, note that there can be many other morphisms with with the same type signature, but there must be *exactly one* morphism that fits these criteria).
![Composition of morphisms in the context of additional morphism](composition_arrows.svg)
**NB:** Note (if you haven't already) that functional composition is written from right to left. e.g. applying $g$ and then applying $f$ is written $f • g$ and not the other way around. (You can think of it as a shortcut to $f(g(a))$.)
Commuting diagrams
The law of identity
---
The diagram above, uses colors to illustrate the fact that the green morphism is equivalent to the other two (and not just some unrelated morphism), but in practice this notation is a little redundant - the only reason to draw diagrams in the first place is to represent paths that are equivalent to each other - all other paths just belong in different diagrams.
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.
![Composition of morphisms - a commuting diagram](composition_commuting_diagram.svg)
The zero of category theory is 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)
It's important to mark this morphism, because there can be (let's add the very important (and also very boring) reminder) many morphisms that go from one object to the same object, many of which actually do stuff. For example, mathematics deals with a multitude of functions that have the set of numbers as source and target, such as $negate$, $square$, $add one$, and are not at all the identity morphism.
A structure must have an identity morphism for each object in order for it to be called a category - this is known as the law of identity.
**Question:** What is the identity morphism in the category of sets?
Diagrams that are like that (ones in which any two paths between two objects are equivalent to one another) are called *commutative diagrams* (or diagrams that *commute*). All diagrams in this book (except the wrong ones) commute.
The law of associativity
---
@ -349,18 +358,17 @@ And it is not only about categories either, it is a property of many other opera
This approach (composing indefinitely many things) for building stuff is often used in programming. To see some examples, you don't need to look further than the way the pipe operator in Unix (`|`), which feeds the standard output of a program with the standard input of another program, is (ab)used. If you *want* to look further, note that there is a whole programming paradigm based on functional composition, called "concatenative programming".
Identity
Commuting diagrams
---
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.
The diagrams above, use colors to illustrate the fact that the green morphism is equivalent to the other two (and not just some unrelated morphism), but in practice this notation is a little redundant - the only reason to draw diagrams in the first place is to represent paths that are equivalent to each other - all other paths just belong in different diagrams.
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.
![Composition of morphisms - a commuting diagram](composition_commuting_diagram.svg)
![The identity morphism (but can also be any other morphism)](identity.svg)
Diagrams that are like that (ones in which any two paths between two objects are equivalent to one another) are called *commutative diagrams* (or diagrams that *commute*). All diagrams in this book (except the wrong ones) commute.
It's important to mark this morphism, because there can be (let's add the very important (and also very boring) reminder) many morphisms that go from one object to the same object, many of which actually do stuff. For example, mathematics deals with a multitude of functions that have the set of numbers as source and target, such as $negate$, $square$, $add one$, and are not at all the identity morphism.
**Question:** What is the identity morphism in the category of sets?
A summary
---
@ -373,16 +381,20 @@ A category is a collection of *objects* (we can think of them as *points*) and *
This is it.
{% if site.distribution == 'print'%}
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*.
*Why* are categories defined by those two laws and not some other two (or one, three, four etc.) laws? 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 at the same time category theory is an abstract theory, so everything about it is kinda arbitrary: you can remove a law - and you get another theory that looks similar to category theory (although it might actually turn out to be quite different in practice.) Or you add one more law and you get a yet another theory, so if 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}$.
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, we need the identity morphism 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.
@ -390,6 +402,7 @@ And here is the same thing expressed with a commuting diagram.
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
===
@ -432,3 +445,5 @@ 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.
{%endif%}

View File

@ -43,7 +43,7 @@ In the case of our color-mixing monoid the identity element is the white ball (o
![The identity element of the color-mixing monoid](balls_identity.svg)
As you probably remember from the last chapter, functional composition is also associative and it also contains an identity element, so you might start suspecting that it forms a monoid in some way. This is indeed the case, but with one caveat.
As you probably remember from the last chapter, functional composition is also associative and it also contains an identity element, so you might start suspecting that it forms a monoid in some way. This is indeed the case, but with one caveat, for which we will talk about later.
Basic monoids
===
@ -404,7 +404,7 @@ So, basically the functions that represent the elements of a monoid also form a
Cayley's theorem
---
We saw how using currying we can represent the elements of any group as permutations that, also form a monoid. Cayley's theorem tells us that those two groups are isomorphic:
Once we learn how to represent the elements of any monoid as permutations that also form a monoid, using currying, it isn't too surprising to learn that this constructed permutation monoid is isomorphic to the original one (the one from which it is constructed - this is a result known as the Cayley's theorem:
> Any group is isomorphic to a permutation group.
@ -412,7 +412,7 @@ Formally, if we use $Perm$ to denote the permutation group then $Perm(A) \cong A
![The group of rotations in a triangle - set notation and normal notation](symmetry_rotation_comparison.svg)
Or in other words, representing the elements of a group as permutations actually yields a representation of the monoid itself (sometimes called it's standard representation.)
Or in other words, representing the elements of a group as permutations actually yields a representation of the monoid itself (sometimes called it's *standard representation*.)
Cayley's theorem may not seem very impressive, but that only shows how influential it has been as a result.
@ -421,7 +421,7 @@ Cayley's theorem may not seem very impressive, but that only shows how influenti
Interlude: Symmetric groups
---
The most important thing that you have to know about the symmetric groups is that they are *not the same thing as symmetry groups*. Once we have that out of the way, we can understand what they actually are: given a natural number $n$, the symmetric group of $n$, denoted $\mathrm{S}_n$ (symmetric group of degree $n$) is the group of all possible permutations of a set with $n$ elements. The number of the elements of such groups is equal to are $1\times 2\times 3...\times n$ or $n!$ (n-factorial.)
The first thing that you have to know about the symmetric groups is that they are *not the same thing as symmetry groups*. Once we have that out of the way, we can understand what they actually are: given a natural number $n$, the symmetric group of $n$, denoted $\mathrm{S}_n$ (symmetric group of degree $n$) is the group of all possible permutations of a set with $n$ elements. The number of the elements of such groups is equal to are $1\times 2\times 3...\times n$ or $n!$ (n-factorial.)
So, for example the group $\mathrm{S}_1$ of permutations of the one-element set has just 1 element (because a 1-element set has no other functions to itself other than the identity function.

View File

@ -111,14 +111,14 @@ OK, I think I got it - isomorphisms are when you have two similar pictures and y
Pretty much.
-->
Functors
What are functors
===
The logician Rudolf Carnap invented the word "functor" as part of his project to devise a formal syntax for the natural languages that we use to do science and just talk. Originally he took it to mean a phrase whose meaning can be customized by combining it with numerical values, like the phrase "the temperature at x o'clock" which has a different meaning depending on the value of x i.e. a phrase that acts as a function, only not between sets, but between linguistic concepts (such as times and temperature.)
![Functor, as envisioned by Rudolf Carnap.](functor_carnap.svg)
Later, the co-inventor or category theory Sanders Mac Lane borrowed the word, to describe a function between *categories*. Here is how he defined it: a functor between two categories (let's call them $A$ and $B$) consists of a pair of mappings - a mapping that maps each *object* in $A$ to an object in $B$ and a mapping that maps each *morphism* between any objects in $A$ to a morphism between objects in $B$ in a way that *preserves the structure* of the category.
Later, the co-inventor or category theory Sanders Mac Lane borrowed the word, to describe a function between *categories*. Here is how he defined it: a functor between two categories (let's call them $A$ and $B$) consists of a pair of mappings - a mapping that maps each *object* in $A$ to an object in $B$ and a mapping that maps each *morphism* between any objects in $A$ to a morphism between objects in $B$, in a way that *preserves the structure* of the category.
![Functor](functor.svg)
@ -169,79 +169,89 @@ So this requirement translates to the following two laws, which are called the *
2. Functors should also *preserve composition* i.e. for any two morphisms $f$ and $g$, the morphism that corresponds to their composition $F(g•f)$ in the source category should be the same as the morphism that corresponds to the composition of their counterparts in the target directory, so $F(g•f) = F(g)•F(f)$.
![Functor](functor_laws_composition.svg)
And this is all there is to it about functors - a simple but, as we will see shortly, very powerful idea.
Diagrams
===
And this is all there is to it about functors - a simple but, as we will see shortly, very powerful idea. Now let's check some examples, to demonstrate *why* is it so powerful, starting with one that is very *meta*.
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.
Diagrams are functors
---
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.
> “A sign is something by knowing which we know something more.” — Charles Sanders Peirce
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
You might have noticed that diagrams play a special role in category theory - while in other disciplines they only serve complementary function i.e. they only show what is already defined in another way, here *the diagrams themselves serve as definitions*.
For example, in chapter 1 we presented the following definition of functional composition.
> The composition of two functions $f$ and $g$ is a third function $h$ defined in such a way that this diagram commutes.
![Functional composition - general definition](functions_compose_general.svg)
The key observation is that diagrams look as small finite categories, as, for example, the above definition looks like the category $3$, which we saw earlier (and the fact that the diagram commutes means just that the morphism in the finite category are sometimes composites of one another.)
![the finite category 3](finite_three.svg)
However, finite categories, by themselves, are only part of the story, as finite diagrams are just structures whereas diagrams are *signs* i.e. They are "something by knowing which we know something more.", as Peirce tells us (or "which can be used in order to lie", in the words of Umberto Eco.)
So, besides the finite categories diagrams include are ways for "interpreting" those categories in some other context i.e. they include *functors*.
![diagram as a functor](diagram_functor.svg)
This is how the concept of functors allows us to formalize the notion of diagrams: a diagram is comprised of a finite category called an *index category*) and functor from it to some other category (in semiotics terms, you may view the source and target categories as *signifier* and *signified*.)
This definition allows for diagrams in category theory can be *specified formally* i.e. they are categorical objects *per se*. You might even say that they are categorical objects *par excellance* (TODO: remove that last joke.)
Maps are functors
---
Functors are sometimes called "maps" for a good reason - maps , like all other diagrams are functors, because they are some kind of description of reality.
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 (i.e. mapping from the objects in the maps to real-world objects.)
![A map and a preorder of city pathways](preorder_map_functor.svg)
Formally a *diagram* is a finite category (called the *index category* or *schema category*), together with a functor from that category to any other category that provides the interpretation of the category.
Notice that in order to be a functor, a map does not have to list *all* roads that exist in real life, and *all* travelling options ("the map is not the territory"), the only requirement is that *the roads that it lists should be actual* - this is a characteristic shared by all many-to-one relationships (functions.)
Object mapping
---
We already have a pretty good intuition of how diagrams work, but let's try to describe it in detail. The first component of any functor in a diagram is the mapping from the objects in the diagram to real-world objects.
In the case of maps, this is done once by the people who create the map, but also by the user who, when seeing a given place in the map and the corresponding place in real-life, makes a mental connection between the two, based on the map labels.
Morphism mapping
---
The real value of most diagrams lies in the morphisms, and the fact that they correspond to morphisms between the objects they represent. Notice that in order to be a functor, the map does not have to represent *all* relations that these objects have, as for example a map does not have to list all roads that exist in real life, the only requirement is that *the roads that it lists should be actual* - this is a characteristic shared by all many-to-one relationships (functions.)
Functor laws
---
In diagrams, morphisms that are a result of composition are often not displayed, but we use them all the time
For maps, for example, they are called *routes*.
In maps, morphisms that are a result of composition are often not displayed, but we use them all the time - they are called *routes*.
![A map and a preorder of city pathways](preorder_map_functor_route.svg)
The law of preserving composition tells us that the route we create on a map corresponds to a real-world route.
The law of preserving composition tells us that the route we create on a map corresponds to a real-world route. This idea, of course, is a little more than a speculation, butI thought it was a good way to introduce functors, before we talk about some more robust matemathical examples.
Human perception is functorial
---
What are functors for
===
As you can see from the last two chapters, we, humans, make a good use of functors in our thinking (especially considering that most of us don't know anything about them.) In my [blog post about using logic to model real-life thinking](/logic-thought)) I argue that is because human perception, human thinking is itself functorial.
Before we think about what functors are in programming languages, let's try to answer the million-dollar question: "How are functors *useful*?" (sometimes formulated also as "Why are you wasting my/your time with this?") We just saw that *maps are functors* and we know that *maps are useful*, so let's start from there.
So why is a map (or any other kind of diagram) useful? Well, it obviously has to do with the fact that the points and arrows of the map corresponds to the cities and the roads in the place you are visiting in i.e. because of the very fact that it is a functor, but there is a second aspect as well: *maps are simpler to work with than actual thing they are representing i.e.* it is much easier to go through all routes between two given places by following a map than to actually drive through all these routes in real life.
![Perception is functorial](logic_thought.svg)
My thesis is that to perceive the world around us, we are creating a functor in our brain that connects the raw sensory data that we receive from our senses to a model of how the world works (one that tells us where are we in space, how many objects are we seeing etc.) Then we are connecting this model to another, more abstract model, which provides us with a higher-level view of the situation that we are in and so on, with each model having more and more connections between the individual objects.
You might say that if that were true, functors would be everywhere i.e. all mathematical objects would have functors and functors will play a significant role for them. As we will see in the next chapters, this is not far from the truth.
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 groups' underlying sets which preserves the group operation.
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.
If the time of the day right now is 00: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)
This function is interesting - it preserves the operation of (modular) addition. That is, 13 hours from now the time will be 1 o'clock and if 14 hours from now it will be 2 o'clock, then the time after (13 + 14) hours will be (1 + 2) o'clock.
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.
Or to put it formally, if we call it (the function) $F$, then we have the following equation - $F(a + b) = F(a) + F(b)$ (where $+$ in the right-hand side of the equation means modular addition) Because this equation holds, 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 (where you can replace 11 with any other number.)
![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 \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)$
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 to the *power of $n$,* so $n \to 2ⁿ$ (here, again, you can replace 2 with any other number.) 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 $mod2$ instead of $mod11$.
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 and revisit our first example and (to make the diagram simpler, use $mod2$ instead of $mod11$.)
![Group homomorphism as a functor](group_homomorphism_functor.svg)
When we view groups as one-object categories, a group homomorphism is just a functor between these categories).
Object mapping
---
@ -258,9 +268,9 @@ 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) \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)$.
$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)$.
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ᵃ⁺ᵇ$.
And 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ᵃ⁺ᵇ$.
**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.
@ -270,13 +280,13 @@ Ans many algebraic operations satisfy this equation, for example the functor law
Functors in orders
===
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)$.
And now let's talk about one concept that is completely unrelated to functors, nudge-nudge (hey, bad jokes are better than no jokes at all, right?) 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 traveled by some object is monotonic because the distance traveled increases (or stays the same) as time increases.
![A monotonic function](monotone_map.svg)
If we plot this or any other monotonic function on a line graph, we see that it goes just one direction.
If we plot this or any other monotonic function on a line graph, we see that it goes just one direction (i.e. just up or just down.)
![A monotonic function, represented as a line-graph](monotone_map_plot.svg)
@ -297,49 +307,94 @@ 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 \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)$
And the second law ($F(g•f) = F(g)•F(f)) also follows from the fact that there is only one morphism with a given signature.
If we compose the two morphisms in the target order, we get a morphism $F(g)•F(f) :: F(a) \to F(c)$.
Suppose that in the source order we have two morphisms with the following type signature:
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)$.
$f :: a \to b$ and $g :: b \to c$.
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.
Then, if we compose those two morphisms in the target order ($F(g)•F(f)$), we get a morphism from object $F(a)$ to object $F(c)$ ($F(g)•F(f) :: F(a) \to F(c)$.)
If we compose the two morphisms in the source order, and we use the functor to get the corresponding morphism in the target order ($F(g•f)$) we get another morphism from object $F(a)$ to object $F(c)$ ($F(g•f) :: F(a) \to F(c)$)
But because in orders there can be just one morphism between $F(a)$ and $F(c)$ so these two morphisms must be equal to one another.
Linear functions
===
In the previous two chapters, we examined functors between groups and orders in general. Now, we will concentrate on one specific group that we are already familiar with (and which can also be viewed as an order) - *the group of natural numbers under addition*.
Now let's talk about the "normal" functions - ones between numbers.
A functor between this group and itself is also known as a *linear function*.
In calculus, there is this concept of *linear functions* (also called "degree one polynomials") that are sometimes defined as functions of the form $f(x) = xa$ i.e. ones that contain no operations other than multiplying the argument by some constant (designated as $a$ in the example).
But if we start plotting some such functions we will realize that there is another way to describe them - their graphs are always straight lines.
![Linear functions](linear_functions.svg)
**Question:** Why is that?
An interesting property of these functions is that most of them *preserve* addition, that is for any $x$ and $y$, you have $f(x) + f(y) = f(x + y)$.
![Linear functions](linear_function_functor.svg)
And if you paid attention to the functor law formula, you would already know that linear functions are just *functors between the group of natural numbers under addition and itself.*
**Question:** Are the two formulas we presented to define linear functions completely equivalent?
<!--
Let
$f(x) = ax $
and
$f(y) = ay $
Then
$f(x) + f(y) = ax + ay $
This means that
$f(x) + f(y) = a(x + y)$
but $f(x) = ax$, so
$f(x) + f(y) = f(x + y)$
-->
Functors in programming
And if we view that natural numbers as an order, linear functions are also functors as well, as all functions that are plotted with straight lines are obviously monotonic.
The above definition has one caveat: not all functions that are straight lines preserve addition - functions of the form $f(x) = x * a + b$ in which $b$ is non-zero, are also straight lines (and are also called linear in some contexts,) but they don't preserve addition.
![Linear functions](linear_function_non_functor.svg)
For those, the above formula looks like this: $f(x) + b + f(y) + b = f(x + y) + b$.
<!--
The category of vector spaces
---
The category of topological spaces
---
The smoothness of the mapping means that paths may stretch or collapse but not break.
-->
Functors in programming. The list functor
===
Before we think about what functors are in programming languages, let's try to answer the million-dollar question: "How are functors *useful*?" (sometimes formulated also as "Why are you wasting my/your time with this?") We just saw that *maps are functors* and we know that *maps are useful*, so let's start from there.
If types in programming language form a category, then what are the functors that are related to that category?
So why is a map (or any other kind of diagram) useful? Well, it obviously has to do with the fact that the points and arrows of the map corresponds to the cities and the roads in the place you are visiting in i.e. because of the very fact that it is a functor, but there is a second aspect as well: *maps are simpler to work with than actual thing they are representing i.e.* it is much easier to go through all routes between two given places by following a map than to actually drive through all these routes in real life.
It the same point is valid also for programming: a functor from the realm of simple (primitive) types to the realm of more complex types allows you to work from the context of the simpler type while actually performing operations on the more complex one
If we think about the category of simple types (like `string`, `number`, `boolean` etc) there are numerous functions between those types, like, as we said before, there are a myriad functions that convert a number to boolean.
![Functions from array to boolean](set_arrows.svg)
For complex types, like `List`, there aren't that many functions. But there also doesn't need to be that many of them, as with `map` we can use every function that convert strings to numbers to convert string arrays to number arrays.
The short (but complex) answer to this question is that we can view functors between the category of types and itself as maps from the realm of simple (primitive) types and functions to the realm of more complex types and functions.
![A functor in programming](functor_programming.svg)
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?)
The long but simple answer - giving a definition of functor in programming context, is as simple as changing the terms we use, according to the table in chapter 2, and (more importantly) changing the font we use in our formulas from "modern" to "monospaced"
The list functor
===
> 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.
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 programmers - two very different communities, that are united by their appreciation of peculiar typefaces. And by the fact that they all use functors.
Type mapping
---
@ -350,6 +405,7 @@ A generic type is nothing but a function (sometimes called a *type-level functio
![A functor in programming - type mapping](functor_programming_objects.svg)
Function mapping
---
@ -376,6 +432,7 @@ class Array<A> {
}
```
Functor laws
---
@ -391,18 +448,48 @@ a.map(f).map(g) == a.map(compose(g, f))
**Task:** Use examples to verify that the laws are followed.
Special types of functors
What are functors for
===
Now, that we have seen some examples of functors, let's attempt to answer the million-dollar question: "How are functors *useful*?" (sometimes formulated also as "Why are you wasting my/your time with this (abstact) nonsense?") We just saw that *maps are functors* and we know that *maps are useful*, so let's start from there.
So why is a map (or any other kind of diagram) useful? Well, it obviously has to do with the fact that the points and arrows of the map corresponds to the cities and the roads in the place you are visiting in i.e. because of the very fact that it is a functor.
But there is a second aspect as well. Maps (or at least those of them that are useful) are *simpler to work with* than the actual things they represent.
For example, road maps are useful, because it is much easier to go through all routes between two given places by following a map, than to actually drive through all these routes in real life.
So why do programmers need functors? Because simple types like `string`, `number`, `boolean` etc are... well simple, there are numerous functions between those types, that are defined in all kinds of libraries e.g. there are a myriad functions that convert a number to boolean.
![Functions from array to boolean](set_arrows.svg)
Functors like `List`, allow you to take all such functions (ones that act on simple types) and derive their counterparts that work on list e.g. a function that converts strings to numbers can be used to convert string arrays to number arrays.
Note that not all functions that act on a list of strings can be derived from mere string functions, but some of them can (some are better than nothing, right?)
Functors
===
Constant functor
---
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)
This one that plays a part in some definitions that we will see later.
Endofunctors
---
Up until now we acted like different type families belong to different categories. However, that is not the case - they are actually one category. So all functors used in programming are *endofunctors* (ones in which the source and target category is one and the same). This doesn't make any difference when it comes to the above definitions (you can also think of the different type families as belonging to different categories if that's easier for you), but it does make a difference in other situations, for example, you can apply an endofunctor $F$ to a given value $a$ infinitely many times, adding more and more levels of nesting.
In the programming example, we acted like different type families belong to different categories. However, that is not the case - they are actually one and the same category - the category of types (which can be seen as similar to the category of sets.) So all functors used in programming are *endofunctors* i.e. ones in which the source and target category is one and the same. This doesn't make any difference when it comes to the above definitions (you can also think of the different type families as belonging to different categories if that's easier for you), but it does make a difference in other situations, for example, you can apply an endofunctor $F$ to a given value $a$ infinitely many times, adding more and more levels of nesting.
![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 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 e.g. 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 `map` the right number of times.)
Identity functors
---
@ -411,12 +498,14 @@ There is one particular endofuctor that will probably look familiar to you - it
![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.
Identity functors are defined for the same reason as identity morphisms - 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.
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 the diagram below commutes for all objects and functions.
![Pointed functor](pointed_functor.svg)
@ -436,15 +525,6 @@ And in programming context, the fact that the functor is pointed translates to t
[a].map(f) = [f(a)]
```
Constant functor
---
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)
This one that plays a part in some definitions that we will see later.
Homomorphism functors
---

View File

@ -0,0 +1,495 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="595.3"
height="200"
version="1.1"
id="svg9949"
sodipodi:docname="diagram_functor.svg"
inkscape:version="1.2.2 (1:1.2.2+202212051552+b0a8486541)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<metadata
id="metadata9955">
<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="defs9953" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1080"
inkscape:window-height="1864"
id="namedview9951"
showgrid="false"
inkscape:zoom="2.5740426"
inkscape:cx="276.6077"
inkscape:cy="123.15259"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g1482-7-0-1-0-3-9-5-0-8"
inkscape:document-rotation="0"
inkscape:showpageshadow="2"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1" />
<ellipse
style="fill:#e6e7e8;stroke:none;stroke-width:1.31858;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="circle15601-9-4-4-1-3"
cy="100.29456"
cx="112.35914"
transform="matrix(0.99741384,-0.07187233,0.07087171,0.99748544,0,0)"
rx="53.942131"
ry="54.54792" />
<g
id="g42748"
transform="matrix(1.3020319,-0.09382271,0.09355548,1.3167488,-111.48758,-303.89699)" />
<g
id="g42748-8"
transform="matrix(1.3020319,-0.09382271,0.09355548,1.3167488,196.21863,-321.94871)" />
<ellipse
style="fill:#e6e7e8;stroke:none;stroke-width:2.25014;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="circle15601-9-4-4-1"
cy="312.15799"
cx="-316.90912"
transform="matrix(-0.54337013,-0.83949324,0.84003792,-0.54252768,0,0)"
rx="92.051521"
ry="93.085289" />
<g
transform="matrix(-0.35061081,-0.54168495,0.54812368,-0.35399861,467.72277,272.6996)"
id="g6057-6"
style="stroke:#2e2758;stroke-opacity:1">
<g
style="display:inline;fill:#dddddd;stroke:#2e2758;stroke-width:6.389;stroke-miterlimit:10;stroke-opacity:1"
id="g1482-7-0-1-0-3-7-2"
transform="matrix(-0.25178541,0.08030447,0.09432672,0.35718792,229.19981,-57.88558)"
inkscape:transform-center-x="-2.4321523"
inkscape:transform-center-y="-11.759803">
<path
style="stroke:#2e2758;stroke-width:35.526;stroke-opacity:1"
inkscape:connector-curvature="0"
id="path1478-7-9-0-19-0-2-9"
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
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
style="fill:none;stroke:#2e2758;stroke-width:10.649;stroke-opacity:1;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-1-5-7-4-9"
d="M -46.693327,121.66387 C 71.619135,64.467921 198.37994,58.290754 317.498,86.173"
sodipodi:nodetypes="cc" />
</g>
</g>
<g
id="g10229-2"
transform="matrix(-0.35061081,-0.54168495,0.54812368,-0.35399861,468.36409,270.75539)">
<rect
style="opacity:0.23;fill:#3a3a3a;fill-opacity:1;stroke:#cccccc;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect24164-1-7"
width="33.724735"
height="35.524086"
x="199.11093"
y="95.115631" />
<rect
style="opacity:0.23;fill:#3a3a3a;fill-opacity:1;stroke:#cccccc;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect24164-1-7-5"
width="33.724735"
height="35.524086"
x="245.54747"
y="15.706263" />
<g
inkscape:transform-center-y="-0.73403693"
inkscape:transform-center-x="-12.157065"
transform="matrix(-0.13566577,0.22680277,-0.32622049,-0.17338087,363.1002,56.29762)"
id="g1482-7-0-1-0-3-8"
style="display:inline;fill:#dddddd;stroke:#483737;stroke-width:6.389;stroke-miterlimit:10">
<path
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"
transform="matrix(0.4768,-0.02932,0.03214,0.42867,147.58,197.367)"
id="path1478-7-9-0-19-0-50"
inkscape:connector-curvature="0"
style="stroke:#483737;stroke-width:35.526" />
<path
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
sodipodi:nodetypes="cc"
d="M 127.38575,78.377847 C 176.95734,66.301724 277.68509,72.076365 317.498,86.173"
id="path1480-1-3-1-5-7-96"
inkscape:connector-curvature="0"
style="fill:none;stroke:#483737;stroke-width:10.649;paint-order:markers fill stroke" />
</g>
<rect
style="opacity:0.23;fill:#3a3a3a;fill-opacity:1;stroke:#cccccc;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect24164-1"
width="33.724735"
height="35.524086"
x="122.30862"
y="50.340809" />
<rect
style="opacity:1;fill:#f58235;fill-opacity:1;stroke:#e76524;stroke-width:2.77772;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect24164"
width="33.724735"
height="35.524086"
x="130.32214"
y="44.519638" />
<g
inkscape:transform-center-y="-4.5768564"
inkscape:transform-center-x="-11.408259"
transform="matrix(-0.21605455,-0.15220095,-0.22774808,0.29088065,290.70694,52.449757)"
id="g1482-7-0-1-0-3-5-7-8"
style="display:inline;fill:#dddddd;stroke:#aa0000;stroke-width:6.389;stroke-miterlimit:10">
<path
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"
transform="matrix(0.4768,-0.02932,0.03214,0.42867,147.58,197.367)"
id="path1478-7-9-0-19-0-0-2-5"
inkscape:connector-curvature="0"
style="stroke:#aa0000;stroke-width:35.526" />
<path
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
sodipodi:nodetypes="cc"
d="M 127.38575,78.377847 C 176.95734,66.301724 277.68509,72.076365 317.498,86.173"
id="path1480-1-3-1-5-7-4-7-61"
inkscape:connector-curvature="0"
style="fill:none;fill-opacity:1;stroke:#aa0000;stroke-width:10.649;stroke-opacity:1;paint-order:markers fill stroke" />
</g>
<rect
style="opacity:0.23;fill:#3a3a3a;fill-opacity:1;stroke:#cccccc;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect24164-1-7-4-8"
width="33.724735"
height="35.524086"
x="277.39499"
y="144.35532" />
<g
inkscape:transform-center-y="-4.576857"
inkscape:transform-center-x="11.40825"
transform="matrix(0.21605455,-0.15220095,0.22774808,0.29088065,224.80816,99.377555)"
id="g1482-7-0-1-0-3-5-7-2-10"
style="display:inline;fill:#dddddd;stroke:#806600;stroke-width:6.389;stroke-miterlimit:10">
<path
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"
transform="matrix(0.4768,-0.02932,0.03214,0.42867,147.58,197.367)"
id="path1478-7-9-0-19-0-0-2-2-3"
inkscape:connector-curvature="0"
style="stroke:#806600;stroke-width:35.526" />
<path
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
sodipodi:nodetypes="cc"
d="M 127.38575,78.377847 C 176.95734,66.301724 277.68509,72.076365 317.498,86.173"
id="path1480-1-3-1-5-7-4-7-6-04"
inkscape:connector-curvature="0"
style="fill:none;stroke:#806600;stroke-width:10.649;paint-order:markers fill stroke" />
</g>
<rect
style="opacity:0.23;fill:#3a3a3a;fill-opacity:1;stroke:#cccccc;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect24164-1-7-4"
width="33.724735"
height="35.524086"
x="343.29846"
y="96.364792" />
<g
inkscape:transform-center-y="4.5768618"
inkscape:transform-center-x="-11.40825"
transform="matrix(-0.21605455,0.15220095,-0.22774808,-0.29088065,445.35391,166.4118)"
id="g1482-7-0-1-0-3-5-7-2-1-4"
style="display:inline;fill:#dddddd;stroke:#445500;stroke-width:6.389;stroke-miterlimit:10">
<path
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"
transform="matrix(0.4768,-0.02932,0.03214,0.42867,147.58,197.367)"
id="path1478-7-9-0-19-0-0-2-2-0-4"
inkscape:connector-curvature="0"
style="stroke:#445500;stroke-width:35.526" />
<path
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
sodipodi:nodetypes="cc"
d="M 127.38575,78.377847 C 176.95734,66.301724 277.68509,72.076365 317.498,86.173"
id="path1480-1-3-1-5-7-4-7-6-6-4"
inkscape:connector-curvature="0"
style="fill:none;stroke:#445500;stroke-width:10.649;paint-order:markers fill stroke" />
</g>
<g
inkscape:transform-center-y="-11.849154"
inkscape:transform-center-x="2.8428186"
transform="matrix(-0.17782756,0.19550462,0.26038086,0.26207354,229.88579,-37.284038)"
id="g1482-7-0-1-0-3-1-6"
style="display:inline;fill:#dddddd;stroke:#806600;stroke-width:6.389;stroke-miterlimit:10">
<path
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"
transform="matrix(0.4768,-0.02932,0.03214,0.42867,147.58,197.367)"
id="path1478-7-9-0-19-0-5-3"
inkscape:connector-curvature="0"
style="stroke:#806600;stroke-width:35.526" />
<path
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
sodipodi:nodetypes="cc"
d="M 127.38575,78.377847 C 176.95734,66.301724 277.68509,72.076365 317.498,86.173"
id="path1480-1-3-1-5-7-9-1"
inkscape:connector-curvature="0"
style="fill:none;stroke:#806600;stroke-width:10.649;paint-order:markers fill stroke" />
</g>
<g
inkscape:transform-center-y="-6.8316466"
inkscape:transform-center-x="10.541054"
transform="matrix(0.2383419,-0.11418335,0.17624638,0.32468131,229.00827,68.523691)"
id="g1482-7-0-1-0-3-5-7-2-4-7"
style="display:inline;fill:#dddddd;stroke:#000080;stroke-width:6.389;stroke-miterlimit:10">
<path
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"
transform="matrix(0.4768,-0.02932,0.03214,0.42867,147.58,197.367)"
id="path1478-7-9-0-19-0-0-2-2-9-5"
inkscape:connector-curvature="0"
style="stroke:#000080;stroke-width:35.526" />
<path
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
sodipodi:nodetypes="cc"
d="M 85.255937,126.08872 C 157.92012,89.606392 277.68509,72.076365 317.498,86.173"
id="path1480-1-3-1-5-7-4-7-6-0-9"
inkscape:connector-curvature="0"
style="fill:none;stroke:#000080;stroke-width:10.649;paint-order:markers fill stroke" />
</g>
<g
inkscape:transform-center-y="-12.167418"
inkscape:transform-center-x="0.5354074"
transform="matrix(0.22455705,0.13935147,-0.17868507,0.32334562,251.23249,27.461247)"
id="g1482-7-0-1-0-3-5-5"
style="display:inline;fill:#dddddd;stroke:#6c5353;stroke-width:6.389;stroke-miterlimit:10">
<path
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"
transform="matrix(0.4768,-0.02932,0.03214,0.42867,147.58,197.367)"
id="path1478-7-9-0-19-0-0-9"
inkscape:connector-curvature="0"
style="stroke:#6c5353;stroke-width:35.526" />
<path
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
sodipodi:nodetypes="cc"
d="M 127.38575,78.377847 C 176.95734,66.301724 277.68509,72.076365 317.498,86.173"
id="path1480-1-3-1-5-7-4-8"
inkscape:connector-curvature="0"
style="fill:none;stroke:#6c5353;stroke-width:10.649;paint-order:markers fill stroke" />
</g>
<rect
style="opacity:1;fill:#ab6510;fill-opacity:1;stroke:#81510b;stroke-width:2.77704;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect24164-8"
width="33.724735"
height="35.524086"
x="206.92822"
y="90.005348" />
<rect
style="opacity:1;fill:#e6e7e8;fill-opacity:1;stroke:#bbbcbe;stroke-width:2.77704;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect24164-8-7"
width="33.724735"
height="35.524086"
x="255.48833"
y="12.336374" />
<rect
style="opacity:1;fill:#fce600;fill-opacity:1;stroke:#ffdd00;stroke-width:2.77704;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect24164-8-1"
width="33.724735"
height="35.524086"
x="351.11584"
y="91.254501" />
<rect
style="opacity:1;fill:#39bced;fill-opacity:1;stroke:#008dd2;stroke-width:2.77704;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect24164-8-1-5"
width="33.724735"
height="35.524086"
x="286.26047"
y="139.24506" />
</g>
<g
id="g6746"
transform="matrix(1.1132465,0.1114023,-0.11378266,1.1256351,12.581314,-37.824821)"
style="stroke:#565352;stroke-width:1.45512;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1">
<g
id="g6757"
style="stroke-width:2;stroke-miterlimit:10;stroke-dasharray:none">
<g
inkscape:transform-center-y="-10.036944"
inkscape:transform-center-x="6.9305366"
transform="matrix(0.15507894,0.00101572,0.00984768,0.21286639,321.39384,42.276639)"
id="g1482-7-0-1-0-3-9-5-0-8"
style="display:inline;opacity:0.919;fill:#dddddd;stroke:#565352;stroke-width:11.0095;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1">
<path
d="m 286.94099,212.32737 c 4.68772,-0.23405 9.52263,-0.31901 14.4589,-0.32477 -3.22403,-2.43515 -6.68811,-4.845 -10.39252,-7.23034 -1.40446,2.64195 -2.28143,4.75887 -4.06638,7.55511 z"
id="path1478-7-9-0-19-0-7-4-2-5"
inkscape:connector-curvature="0"
style="stroke:#565352;stroke-width:11.0095;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
d="M -1457.2197,210.97948 C -856.25117,78.276839 -264.10102,70.01122 290.66479,211.16374"
id="path1480-1-3-1-5-7-5-05-1-0"
inkscape:connector-curvature="0"
style="fill:none;stroke:#565352;stroke-width:11.0095;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" />
</g>
<g
inkscape:transform-center-y="-9.7741985"
inkscape:transform-center-x="7.455478"
transform="matrix(0.16602295,7.0464196e-4,0.01224257,0.21287107,301.25785,73.182619)"
id="g1482-7-0-1-0-3-9-5-0-8-0"
style="display:inline;opacity:0.919;fill:#dddddd;stroke:#565352;stroke-width:10.64;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1">
<path
d="m 298.84692,219.75174 c 4.50048,-1.11094 9.19951,-2.10794 14.02668,-3.04881 -4.04495,-1.70563 -8.31549,-3.34171 -12.81219,-4.90893 -0.40756,2.77943 -0.49113,4.95944 -1.21449,7.95774 z"
id="path1478-7-9-0-19-0-7-4-2-5-8"
inkscape:connector-curvature="0"
style="stroke:#565352;stroke-width:10.64;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
d="M -1217.1681,191.60845 C -798.49009,136.17195 -34.287636,168.429 303.99415,216.71262"
id="path1480-1-3-1-5-7-5-05-1-0-1"
inkscape:connector-curvature="0"
style="fill:none;stroke:#565352;stroke-width:10.64;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" />
</g>
<g
inkscape:transform-center-y="-10.036938"
inkscape:transform-center-x="7.4202252"
transform="matrix(0.16601761,0.00150602,0.0112149,0.21292768,340.39871,63.831679)"
id="g1482-7-0-1-0-3-9-5-0-8-0-3"
style="display:inline;opacity:0.919;fill:#dddddd;stroke:#565352;stroke-width:10.64;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1">
<path
d="m 298.84692,219.75174 c 4.50048,-1.11094 9.19951,-2.10794 14.02668,-3.04881 -4.04495,-1.70563 -8.31549,-3.34171 -12.81219,-4.90893 -0.40756,2.77943 -0.49113,4.95944 -1.21449,7.95774 z"
id="path1478-7-9-0-19-0-7-4-2-5-8-1"
inkscape:connector-curvature="0"
style="stroke:#565352;stroke-width:10.64;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
d="M -1311.4854,192.32587 C -892.80739,136.88937 -34.287636,168.429 303.99415,216.71262"
id="path1480-1-3-1-5-7-5-05-1-0-1-1"
inkscape:connector-curvature="0"
style="fill:none;stroke:#565352;stroke-width:10.64;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" />
</g>
</g>
</g>
<g
inkscape:transform-center-y="-2.8616314"
inkscape:transform-center-x="-1.5362581"
transform="matrix(0.10639135,0.09915123,0.12860241,-0.15723866,62.989655,114.37964)"
id="g1482-7-0-7-0-1-17"
style="display:inline;fill:none;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10">
<path
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"
transform="matrix(0.4768,-0.02932,0.03214,0.42867,147.58,197.367)"
id="path1478-7-9-4-2-0-5"
inkscape:connector-curvature="0"
style="fill:none;stroke-width:35.526" />
<path
d="M 4.1253325,105.31435 C 88.747531,78.834382 249.12601,66.47288 317.498,86.173"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
id="path1480-1-3-3-4-6-9"
inkscape:connector-curvature="0"
style="fill:none;stroke-width:10.649;paint-order:markers fill stroke"
sodipodi:nodetypes="cc" />
</g>
<g
inkscape:transform-center-y="1.437739"
inkscape:transform-center-x="-0.095281084"
transform="matrix(-0.00224788,0.14541331,-0.20248068,-0.01625281,185.52818,59.266445)"
id="g1482-7-0-7-0-3-1"
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10">
<path
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"
transform="matrix(0.4768,-0.02932,0.03214,0.42867,147.58,197.367)"
id="path1478-7-9-4-2-6-8"
inkscape:connector-curvature="0"
style="stroke-width:35.526" />
<path
d="m 197.036,89.49 c 39.237,-9.724 89.303,-9.828 120.462,-3.317"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
id="path1480-1-3-3-4-7-5"
inkscape:connector-curvature="0"
style="stroke-width:10.649;paint-order:markers fill stroke" />
</g>
<g
transform="matrix(0.34233726,0.34929513,-0.34687818,0.33972526,151.5836,70.816573)"
style="fill:#cccccc;stroke:#666666"
id="g2749-7-7-9">
<circle
style="opacity:0.13;fill:#cccccc;stroke:#666666;stroke-width:6;stroke-miterlimit:10"
id="circle3369-7-4-7"
r="24.6"
cy="90.58149"
cx="55.440796" />
<circle
style="fill:#cccccc;stroke:#666666;stroke-width:6;stroke-miterlimit:10"
id="circle3383-4-5-5"
r="24.6"
cy="84.367409"
cx="51.507595" />
</g>
<g
inkscape:transform-center-y="-3.2876237"
inkscape:transform-center-x="2.8949313"
transform="matrix(0.14913141,0.00984005,-0.04022404,0.20130685,84.39534,22.074465)"
id="g1482-7-0-25-1-3-3-3"
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10">
<path
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"
transform="matrix(0.4768,-0.02932,0.03214,0.42867,147.58,197.367)"
id="path1478-7-9-8-5-1-6-8"
inkscape:connector-curvature="0"
style="stroke-width:35.526" />
<path
d="M 176.24968,93.604679 C 215.48668,83.880679 286.339,79.662 317.498,86.173"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
id="path1480-1-3-9-5-4-7-8"
inkscape:connector-curvature="0"
style="stroke-width:10.649;paint-order:markers fill stroke"
sodipodi:nodetypes="cc" />
</g>
<g
transform="matrix(0.00873037,0.48723052,-0.48728128,0.00517198,132.37339,44.898263)"
id="g2760-0-7-9-8">
<g
transform="rotate(-44.545114,52.727379,84.306425)"
style="fill:#cccccc;stroke:#666666"
id="g2749-6-8-8-5">
<circle
style="opacity:0.13;fill:#cccccc;stroke:#666666;stroke-width:6;stroke-miterlimit:10"
id="circle3369-33-3-6-4-7"
r="24.6"
cy="90.58149"
cx="55.440796" />
<circle
style="fill:#cccccc;stroke:#666666;stroke-width:6;stroke-miterlimit:10"
id="circle3383-85-2-8-8-4"
r="24.6"
cy="84.367409"
cx="51.507595" />
</g>
</g>
<g
transform="matrix(0.00873037,0.48723052,-0.48728128,0.00517198,202.15719,-8.6076207)"
id="g2760-9-8-7-6">
<g
transform="rotate(-37.328029,183.17645,-58.627543)"
style="fill:#cccccc;stroke:#666666"
id="g2749-4-6-2">
<circle
style="opacity:0.13;fill:#cccccc;stroke:#666666;stroke-width:6;stroke-miterlimit:10"
id="circle3369-5-5-1"
r="24.6"
cy="90.58149"
cx="55.440796" />
<circle
style="fill:#cccccc;stroke:#666666;stroke-width:6;stroke-miterlimit:10"
id="circle3383-6-6-7"
r="24.6"
cy="84.367409"
cx="51.507595" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -1,18 +1,18 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="595.3"
height="200"
version="1.1"
id="svg9949"
sodipodi:docname="finite_three.svg"
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
inkscape:version="1.2.2 (1:1.2.2+202212051552+b0a8486541)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<metadata
id="metadata9955">
<rdf:RDF>
@ -21,7 +21,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@ -36,36 +36,95 @@
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-width="1080"
inkscape:window-height="1864"
id="namedview9951"
showgrid="false"
inkscape:zoom="1.2870213"
inkscape:cx="278.47121"
inkscape:cy="64.664838"
inkscape:cx="278.55017"
inkscape:cy="64.489997"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg9949"
inkscape:document-rotation="0" />
inkscape:document-rotation="0"
inkscape:showpageshadow="2"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1" />
<g
inkscape:transform-center-y="-3.7866525"
inkscape:transform-center-x="57.783587"
transform="matrix(-0.18470797,-0.20959368,0.3088058,-0.23854396,257.60386,214.07837)"
inkscape:transform-center-y="-5.4971127"
inkscape:transform-center-x="-2.9511082"
transform="matrix(0.20437468,0.19046662,0.24704149,-0.30205089,200.0916,150.72094)"
id="g1482-7-0-7-0-1-17"
style="display:inline;fill:none;stroke:#838383;stroke-width:6.38899994;stroke-miterlimit:10">
style="display:inline;fill:none;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10">
<path
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"
transform="matrix(0.4768,-0.02932,0.03214,0.42867,147.58,197.367)"
id="path1478-7-9-4-2-0-5"
inkscape:connector-curvature="0"
style="fill:none;stroke-width:35.52600098" />
style="fill:none;stroke-width:35.526" />
<path
d="M 4.1253325,105.31435 C 88.747531,78.834382 249.12601,66.47288 317.498,86.173"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
id="path1480-1-3-3-4-6-9"
inkscape:connector-curvature="0"
style="fill:none;stroke-width:10.64900017;paint-order:markers fill stroke"
style="fill:none;stroke-width:10.649;paint-order:markers fill stroke"
sodipodi:nodetypes="cc" />
</g>
<g
inkscape:transform-center-y="2.7618581"
inkscape:transform-center-x="-0.18303836"
transform="matrix(-0.00431811,0.27933474,-0.38895949,-0.03122117,435.48454,44.850101)"
id="g1482-7-0-7-0-3-1"
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10">
<path
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"
transform="matrix(0.4768,-0.02932,0.03214,0.42867,147.58,197.367)"
id="path1478-7-9-4-2-6-8"
inkscape:connector-curvature="0"
style="stroke-width:35.526" />
<path
d="m 197.036,89.49 c 39.237,-9.724 89.303,-9.828 120.462,-3.317"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
id="path1480-1-3-3-4-7-5"
inkscape:connector-curvature="0"
style="stroke-width:10.649;paint-order:markers fill stroke" />
</g>
<g
transform="matrix(0.65761991,0.67098577,-0.66634288,0.65260232,370.27798,67.03756)"
style="fill:#cccccc;stroke:#666666"
id="g2749-7-7-9">
<circle
style="opacity:0.12999998;fill:#cccccc;stroke:#666666;stroke-width:6;stroke-miterlimit:10"
id="circle3369-7-4-7"
r="24.6"
cy="90.58149"
cx="55.440796" />
<circle
style="fill:#cccccc;stroke:#666666;stroke-width:6;stroke-miterlimit:10"
id="circle3383-4-5-5"
r="24.6"
cy="84.367409"
cx="51.507595" />
</g>
<g
inkscape:transform-center-y="-6.3154327"
inkscape:transform-center-x="5.5610775"
transform="matrix(0.28647709,0.01890244,-0.0772692,0.38670459,241.2113,-26.594609)"
id="g1482-7-0-25-1-3-3-3"
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10">
<path
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"
transform="matrix(0.4768,-0.02932,0.03214,0.42867,147.58,197.367)"
id="path1478-7-9-8-5-1-6-8"
inkscape:connector-curvature="0"
style="stroke-width:35.526" />
<path
d="M 176.24968,93.604679 C 215.48668,83.880679 286.339,79.662 317.498,86.173"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
id="path1480-1-3-9-5-4-7-8"
inkscape:connector-curvature="0"
style="stroke-width:10.649;paint-order:markers fill stroke"
sodipodi:nodetypes="cc" />
</g>
<g
@ -90,70 +149,14 @@
</g>
</g>
<g
inkscape:transform-center-y="-2.7618577"
inkscape:transform-center-x="-0.18303836"
transform="matrix(-0.00431811,-0.27933474,-0.38895949,0.03122117,437.48454,182.02372)"
id="g1482-7-0-7-0-3-1"
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.38899994;stroke-miterlimit:10">
<path
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"
transform="matrix(0.4768,-0.02932,0.03214,0.42867,147.58,197.367)"
id="path1478-7-9-4-2-6-8"
inkscape:connector-curvature="0"
style="stroke-width:35.52600098" />
<path
d="m 197.036,89.49 c 39.237,-9.724 89.303,-9.828 120.462,-3.317"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
id="path1480-1-3-3-4-7-5"
inkscape:connector-curvature="0"
style="stroke-width:10.64900017;paint-order:markers fill stroke" />
</g>
<g
transform="matrix(0.65761991,0.67098577,-0.66634288,0.65260232,370.27798,67.03756)"
style="fill:#cccccc;stroke:#666666"
id="g2749-7-7-9">
<circle
style="opacity:0.12999998;fill:#cccccc;stroke:#666666;stroke-width:6;stroke-miterlimit:10"
id="circle3369-7-4-7"
r="24.6"
cy="90.58149"
cx="55.440796" />
<circle
style="fill:#cccccc;stroke:#666666;stroke-width:6;stroke-miterlimit:10"
id="circle3383-4-5-5"
r="24.6"
cy="84.367409"
cx="51.507595" />
</g>
<g
inkscape:transform-center-y="-6.3154327"
inkscape:transform-center-x="-5.5610772"
transform="matrix(-0.28647709,0.01890244,0.0772692,0.38670459,357.86742,-26.260747)"
id="g1482-7-0-25-1-3-3-3"
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.38899994;stroke-miterlimit:10">
<path
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"
transform="matrix(0.4768,-0.02932,0.03214,0.42867,147.58,197.367)"
id="path1478-7-9-8-5-1-6-8"
inkscape:connector-curvature="0"
style="stroke-width:35.52600098" />
<path
d="M 176.24968,93.604679 C 215.48668,83.880679 286.339,79.662 317.498,86.173"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
id="path1480-1-3-9-5-4-7-8"
inkscape:connector-curvature="0"
style="stroke-width:10.64900017;paint-order:markers fill stroke"
sodipodi:nodetypes="cc" />
</g>
<g
transform="matrix(0.01677078,0.93595564,-0.93605315,0.00993522,465.42837,-85.534001)"
transform="matrix(0.01677078,0.93595564,-0.93605315,0.00993522,467.42837,-85.534001)"
id="g2760-9-8-7-6">
<g
transform="rotate(-37.328029,183.17645,-58.627543)"
style="fill:#cccccc;stroke:#666666"
id="g2749-4-6-2">
<circle
style="opacity:0.12999998;fill:#cccccc;stroke:#666666;stroke-width:6;stroke-miterlimit:10"
style="opacity:0.13;fill:#cccccc;stroke:#666666;stroke-width:6;stroke-miterlimit:10"
id="circle3369-5-5-1"
r="24.6"
cy="90.58149"

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

@ -0,0 +1,118 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 595.3 269.9"
version="1.1"
id="svg18807"
sodipodi:docname="functions_compose_general.svg"
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
<metadata
id="metadata18813">
<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="defs18811" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2560"
inkscape:window-height="1376"
id="namedview18809"
showgrid="false"
inkscape:zoom="4.0611686"
inkscape:cx="297.64999"
inkscape:cy="134.95"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="switch18805" />
<switch
id="switch18805">
<g
id="g18803">
<circle
opacity=".14"
stroke="#000"
stroke-width="6"
stroke-miterlimit="10"
cx="210"
cy="68.4"
r="39.1"
id="circle18785" />
<circle
fill="#FFF"
stroke="#808285"
stroke-width="6"
stroke-miterlimit="10"
cx="206.1"
cy="65.9"
r="39.1"
id="circle18787" />
<circle
opacity=".14"
stroke="#000"
stroke-width="6"
stroke-miterlimit="10"
cx="368.8"
cy="70.6"
r="38.8"
id="circle18789" />
<circle
fill="#FFF"
stroke="#808285"
stroke-width="6"
stroke-miterlimit="10"
cx="365"
cy="68.2"
r="38.8"
id="circle18791" />
<circle
opacity=".14"
stroke="#000"
stroke-width="6"
stroke-miterlimit="10"
cx="368.9"
cy="217.7"
r="37"
id="circle18793" />
<circle
fill="#FFF"
stroke="#808285"
stroke-width="6"
stroke-miterlimit="10"
cx="359.3"
cy="217.4"
r="37"
id="circle18795" />
<path
fill="#808082"
d="M246.4 64.4s.9-.1 2.4-.4c1.5-.2 3.7-.5 6.3-.8 5.2-.6 12.2-1.1 19.2-1.2 7-.1 14 .2 19.2.7 2.6.2 4.8.5 6.3.7.7.1 1.1.1 1.1.1L299.4 75c7.6-3.5 15.6-6.4 24-8.9-6.3-6.1-13.2-11.9-20.7-17.2l-1.5 11.5s-.4-.1-1.1-.1c-1.5-.2-3.8-.4-6.4-.7-5.3-.5-12.4-.8-19.5-.7-7.1.1-14.2.6-19.5 1.2-2.7.3-4.9.6-6.4.8-1.5.2-2.4.4-2.4.4l.5 3.1zM357.9 107.5s.2.7.6 2c.2.7.4 1.4.7 2.4.2.9.5 2 .8 3.1 1.2 4.5 2.4 10.7 3.2 16.9.7 6.2.9 12.5.8 17.1 0 2.3-.2 4.3-.2 5.7 0 .7-.1 1-.1 1l-11.5-.8c3.9 7.1 7.1 14.9 9.4 23.4 6.1-6.3 11.8-13.5 16.8-21.5l-11.5-.8s0-.4.1-1.1c.1-1.4.2-3.4.2-5.8.1-4.8-.1-11.2-.9-17.6-.7-6.4-2-12.6-3.2-17.3-.3-1.2-.6-2.2-.9-3.2-.3-.9-.5-1.7-.7-2.4-.4-1.3-.7-2.1-.7-2.1l-2.9 1zM219 102.4s1.3 1.5 3.7 4c1.2 1.2 2.6 2.7 4.2 4.4 1.5 1.8 3.3 3.8 5.2 6 7.6 8.8 17.8 20.5 28.8 31.4 5.5 5.5 11.2 10.8 16.8 15.5 2.8 2.4 5.6 4.6 8.2 6.6 2.7 2 5.2 3.9 7.6 5.6 4.8 3.3 8.9 6 11.7 7.8.7.4 1.1.7 1.1.7l-6.2 9.8c8.9.5 17.7.7 26.5.9-4.2-7.7-8.5-15.4-12.3-23l-6.2 9.8s-.4-.2-1.1-.7c-2.8-1.8-6.9-4.5-11.6-7.8-2.4-1.7-4.9-3.5-7.5-5.5-2.6-2-5.3-4.2-8.1-6.5-5.5-4.6-11.2-9.9-16.6-15.3-10.9-10.9-21.1-22.5-28.7-31.3-1.9-2.2-3.7-4.2-5.2-6-1.6-1.8-3-3.3-4.2-4.5-2.3-2.4-3.5-3.9-3.5-3.9l-2.6 2z"
id="path18797" />
<path
style="opacity:0.63999999"
inkscape:connector-curvature="0"
d="m 377.35616,129.96808 h -2.4 v -3.9 l 2.4,-0.2 v -1 c 0,-3.8 1.8,-6.8 6.6,-6.8 1.5,0 2.8,0.4 3.6,0.6 l -1,3.9 c -0.6,-0.2 -1.3,-0.4 -1.8,-0.4 -1.3,0 -2,0.7 -2,2.5 v 1.1 h 3.2 v 4.1 h -3.2 v 13.7 h -5.3 v -13.6 z M 265.19445,49.038404 c 0,-1.5 0.9,-2.7 2.5,-3.6 v -0.1 c -0.9,-0.6 -1.6,-1.5 -1.6,-3 0,-1.3 0.9,-2.5 2,-3.3 v -0.1 c -1.3,-0.9 -2.4,-2.5 -2.4,-4.6 0,-4.3 3.5,-6.4 7.4,-6.4 1,0 2,0.1 2.8,0.4 h 6.5 v 3.8 h -2.8 c 0.3,0.5 0.6,1.4 0.6,2.3 0,4.1 -3.1,6 -7,6 -0.6,0 -1.4,-0.1 -2.2,-0.4 -0.5,0.4 -0.6,0.7 -0.6,1.3 0,0.9 0.7,1.3 2.7,1.3 h 2.9 c 4.4,0 6.8,1.3 6.8,4.5 0,3.7 -3.8,6.4 -9.9,6.4 -4.4,0 -7.7,-1.3 -7.7,-4.5 z m 12.4,-0.9 c 0,-1.1 -1,-1.4 -2.7,-1.4 h -1.8 c -1.2,0 -1.9,-0.1 -2.5,-0.2 -0.6,0.6 -1,1.1 -1,1.8 0,1.3 1.6,2 3.9,2 2.4,-0.1 4.1,-1 4.1,-2.2 z m -2.1,-13.9 c 0,-1.9 -1,-2.9 -2.4,-2.9 -1.4,0 -2.4,1 -2.4,2.9 0,2 1,3 2.4,3 1.4,0 2.4,-1.1 2.4,-3 z M 245.2,147.6 h 5.3 v 6.2 l -0.3,3.2 c 1.3,-1.2 3.1,-2.4 5.5,-2.4 3.9,0 5.5,2.7 5.5,7.2 v 11 h -5.3 v -10.4 c 0,-2.6 -0.7,-3.4 -2.2,-3.4 -1.3,0 -2.2,0.6 -3.3,1.7 v 12 h -5.3 v -25.1 z"
id="path18799"
sodipodi:nodetypes="ccccssccssccccccccsccsccssccccsscssssssssscscssssssccccssccssccccc" />
</g>
</switch>
</svg>

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@ -0,0 +1,570 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 595.3 300"
version="1.1"
id="svg3397"
sodipodi:docname="linear_function_functor.svg"
inkscape:version="1.2.2 (1:1.2.2+202212051552+b0a8486541)"
width="595.29999"
height="300"
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="metadata3403">
<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="defs3401" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1080"
inkscape:window-height="1864"
id="namedview3399"
showgrid="false"
inkscape:zoom="1.1195592"
inkscape:cx="305.47737"
inkscape:cy="5.3592521"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg3397"
inkscape:document-rotation="0"
inkscape:showpageshadow="2"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1" />
<g
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-1-4-5"
transform="matrix(-0.1205422,-0.17523779,0.23613305,-0.18066634,67.75486,254.40581)">
<path
style="stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-7-3-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="stroke-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-0-1-7"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
d="m 197.036,89.49 c 39.237,-9.724 89.303,-9.828 120.462,-3.317" />
</g>
<g
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-1-4-5-6"
transform="matrix(0.10389926,-0.18559001,0.26643978,0.13194312,-9.701932,90.582505)">
<path
style="stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-7-3-8-1"
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-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-0-1-7-0"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
d="M -61.842416,198.31083 C 21.175676,135.49513 203.05975,68.21241 317.498,86.173"
sodipodi:nodetypes="cc" />
</g>
<g
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-1-4-5-0"
transform="matrix(-0.1205422,0.17523779,0.23613305,0.18066634,68.818133,41.425383)">
<path
style="stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-7-3-8-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="stroke-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-0-1-7-8"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
d="m 197.036,89.49 c 39.237,-9.724 89.303,-9.828 120.462,-3.317" />
</g>
<g
aria-label="+"
transform="matrix(1.0180072,0,0,0.98231132,18.727726,3.1523986)"
id="text28150"
style="font-size:27.5399px;line-height:1.25;word-spacing:0px;fill:#3b3b3b;fill-opacity:1;stroke-width:0.688496">
<path
d="m 58.695788,138.1829 v 7.04634 h 7.019447 v 3.17355 h -7.019447 v 7.04634 h -3.200437 v -7.04634 h -7.019447 v -3.17355 h 7.019447 v -7.04634 z"
style="font-weight:bold;-inkscape-font-specification:'sans-serif Bold';fill:#3b3b3b;fill-opacity:1"
id="path28152" />
</g>
<g
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-1-4-5-4"
transform="matrix(0.17523779,0.1205422,0.18066634,-0.23613305,188.80364,291.74112)">
<path
style="stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-7-3-8-2"
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-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-0-1-7-2"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
d="M 79.657404,72.823676 C 143.3051,61.720964 229.33147,64.393492 317.498,86.173"
sodipodi:nodetypes="cc" />
</g>
<g
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-1-4-5-6-2"
transform="matrix(0.18559001,-0.10389926,-0.13194312,-0.26643978,445.62532,358.95217)">
<path
style="stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-7-3-8-1-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-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-0-1-7-0-5"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
d="M -516.27394,352.83779 C -275.57412,237.12043 92.659408,109.96055 317.498,86.173"
sodipodi:nodetypes="cc" />
</g>
<g
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-1-4-5-0-5"
transform="matrix(-0.17523779,0.1205422,-0.18066634,-0.23613305,403.78407,292.67785)">
<path
style="stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-7-3-8-4-2"
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-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-0-1-7-8-9"
d="M 116.81952,81.356852 C 178.89531,66.033743 253.72562,71.621734 317.498,86.173"
sodipodi:nodetypes="cc"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)" />
</g>
<g
aria-label="+"
transform="matrix(0,-1.0180072,-0.98231132,0,440.05705,340.76826)"
id="text28150-0"
style="font-size:27.5399px;line-height:1.25;word-spacing:0px;fill:#3b3b3b;fill-opacity:1;stroke-width:0.688496">
<path
d="m 58.695788,138.1829 v 7.04634 h 7.019447 v 3.17355 h -7.019447 v 7.04634 h -3.200437 v -7.04634 h -7.019447 v -3.17355 h 7.019447 v -7.04634 z"
style="font-weight:bold;-inkscape-font-specification:'sans-serif Bold';fill:#3b3b3b;fill-opacity:1"
id="path28152-2" />
</g>
<path
style="fill:none;stroke:#ba87c5;stroke-width:11.2265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 108.29176,241.88992 516.38026,38.455194"
id="path74087-7-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<g
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-1-4"
transform="matrix(-0.01127812,-0.2123947,0.29572568,-0.03074842,42.921132,217.04002)">
<path
style="stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-7-3"
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="stroke-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-0-1"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
d="m 197.036,89.49 c 39.237,-9.724 89.303,-9.828 120.462,-3.317" />
</g>
<g
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-7-4-92"
transform="matrix(0.00272525,-0.21267643,0.29710822,-0.01121833,39.659159,148.16562)"
inkscape:transform-center-x="-1.7623975"
inkscape:transform-center-y="5.5409482">
<path
style="stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-4-0-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="stroke-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-3-8-6"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
d="m 197.036,89.49 c 39.237,-9.724 89.303,-9.828 120.462,-3.317" />
</g>
<g
transform="matrix(0.75832933,0,0,0.75832933,66.719739,117.50814)"
style="fill:#c6e9af;stroke:#666666"
id="g2749-48-4">
<path
inkscape:connector-curvature="0"
id="circle3369-0-8"
d="m 80.040796,90.58149 a 24.6,24.6 0 0 1 -24.6,24.6 24.6,24.6 0 0 1 -24.6,-24.6 24.6,24.6 0 0 1 24.6,-24.600001 24.6,24.6 0 0 1 24.6,24.600001 z"
style="opacity:0.13;fill:#c6e9af;stroke:#666666;stroke-width:6;stroke-miterlimit:10" />
<path
inkscape:connector-curvature="0"
id="circle3383-81-7"
d="m 76.107595,84.367409 a 24.6,24.6 0 0 1 -24.6,24.600001 24.6,24.6 0 0 1 -24.6,-24.600001 24.6,24.6 0 0 1 24.6,-24.600001 24.6,24.6 0 0 1 24.6,24.600001 z"
style="fill:#c6e9af;stroke:#666666;stroke-width:6;stroke-miterlimit:10" />
</g>
<g
id="text2753-0-1"
style="font-style:normal;font-weight:normal;font-size:28.543px;line-height:1.25;font-family:sans-serif;fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.713577"
transform="matrix(0.77522801,0,0,0.74179902,66.50322,117.28961)"
aria-label="1">
<path
inkscape:connector-curvature="0"
id="path130720-2-7"
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.713577"
d="m 44.272152,92.213257 h 4.738584 V 78.764041 l -4.864017,1.003465 v -3.651497 l 4.836143,-1.003465 h 5.100946 v 17.100713 h 4.738584 v 3.707245 h -14.55024 z" />
</g>
<g
transform="matrix(0.75832933,0,0,0.75832933,68.194914,54.23213)"
style="fill:#c6e9af;stroke:#666666"
id="g2749-4-9-27">
<path
inkscape:connector-curvature="0"
id="circle3369-5-7-2"
d="m 80.040796,90.58149 a 24.6,24.6 0 0 1 -24.6,24.6 24.6,24.6 0 0 1 -24.6,-24.6 24.6,24.6 0 0 1 24.6,-24.600001 24.6,24.6 0 0 1 24.6,24.600001 z"
style="opacity:0.13;fill:#c6e9af;stroke:#666666;stroke-width:6;stroke-miterlimit:10" />
<path
inkscape:connector-curvature="0"
id="circle3383-6-5-26"
d="m 76.107595,84.367409 a 24.6,24.6 0 0 1 -24.6,24.600001 24.6,24.6 0 0 1 -24.6,-24.600001 24.6,24.6 0 0 1 24.6,-24.600001 24.6,24.6 0 0 1 24.6,24.600001 z"
style="fill:#c6e9af;stroke:#666666;stroke-width:6;stroke-miterlimit:10" />
</g>
<g
id="text2753-2-6-1"
style="font-style:normal;font-weight:normal;font-size:28.543px;line-height:1.25;font-family:sans-serif;fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.713577"
transform="matrix(0.77522801,0,0,0.74179902,67.978395,54.013589)"
aria-label="2">
<path
inkscape:connector-curvature="0"
id="path130728-4-0"
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.713577"
d="m 49.150106,91.976327 h 9.156616 v 3.944175 H 43.185065 v -3.944175 l 7.595671,-6.703702 q 1.017402,-0.919843 1.505197,-1.797874 0.487796,-0.878032 0.487796,-1.825749 0,-1.463386 -0.989528,-2.355355 -0.975591,-0.891969 -2.606221,-0.891969 -1.254331,0 -2.745592,0.543544 -1.49126,0.529606 -3.191575,1.588819 v -4.57134 q 1.811811,-0.599291 3.581812,-0.905905 1.77,-0.320552 3.470316,-0.320552 3.735119,0 5.797796,1.644568 2.076615,1.644567 2.076615,4.585277 0,1.700315 -0.878032,3.177638 -0.878031,1.463386 -3.693308,3.930237 z" />
</g>
<g
transform="matrix(0.75832933,0,0,0.75832933,68.377717,-10.410288)"
style="fill:#c6e9af;stroke:#666666"
id="g2749-7-7-6">
<path
id="circle3369-7-9-1"
d="m 80.040796,90.58149 a 24.6,24.6 0 0 1 -24.6,24.6 24.6,24.6 0 0 1 -24.6,-24.6 24.6,24.6 0 0 1 24.6,-24.600001 24.6,24.6 0 0 1 24.6,24.600001 z"
style="opacity:0.13;fill:#c6e9af;stroke:#666666;stroke-width:6;stroke-miterlimit:10"
inkscape:connector-curvature="0" />
<path
id="circle3383-4-7-5"
d="m 76.107595,84.367409 a 24.6,24.6 0 0 1 -24.6,24.600001 24.6,24.6 0 0 1 -24.6,-24.600001 24.6,24.6 0 0 1 24.6,-24.600001 24.6,24.6 0 0 1 24.6,24.600001 z"
style="fill:#c6e9af;stroke:#666666;stroke-width:6;stroke-miterlimit:10"
inkscape:connector-curvature="0" />
</g>
<g
id="text2753-1-4-9"
style="font-style:normal;font-weight:normal;font-size:28.543px;line-height:1.25;font-family:sans-serif;fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.713577"
transform="matrix(0.77522801,0,0,0.74179902,68.161198,-10.628797)"
aria-label="3">
<path
id="path130733-9-4"
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.713577"
d="m 54.223178,84.701208 q 2.104489,0.543543 3.191575,1.895433 1.101024,1.337953 1.101024,3.414568 0,3.094016 -2.369292,4.71071 -2.369292,1.602756 -6.912757,1.602756 -1.602757,0 -3.21945,-0.264803 -1.602756,-0.250866 -3.177638,-0.766536 v -4.139292 q 1.505197,0.752598 2.98252,1.142835 1.49126,0.376299 2.926772,0.376299 2.132363,0 3.261261,-0.738662 1.142835,-0.738661 1.142835,-2.118425 0,-1.421575 -1.170709,-2.1463 -1.156772,-0.738662 -3.428505,-0.738662 h -2.1463 v -3.456378 h 2.257796 q 2.020867,0 3.010395,-0.627166 0.989528,-0.641102 0.989528,-1.937245 0,-1.198583 -0.961654,-1.853622 -0.961654,-0.65504 -2.717717,-0.65504 -1.296143,0 -2.620159,0.292678 -1.324016,0.292677 -2.634095,0.864094 v -3.930237 q 1.58882,-0.445984 3.149765,-0.668976 1.560945,-0.222993 3.066142,-0.222993 4.055671,0 6.0626,1.337954 2.020867,1.324016 2.020867,3.999922 0,1.825748 -0.961654,2.996457 -0.961654,1.156772 -2.84315,1.630631 z"
inkscape:connector-curvature="0" />
</g>
<g
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-1-2-1"
transform="matrix(-0.01127812,-0.2123947,0.29572568,-0.03074842,41.548924,279.90822)">
<path
style="stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-7-2-1"
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="stroke-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-0-2-5"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
d="m 197.036,89.49 c 39.237,-9.724 89.303,-9.828 120.462,-3.317" />
</g>
<g
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-9"
transform="matrix(0.20895303,-0.00389196,0.02019357,0.29144257,135.03663,177.68658)">
<path
style="stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-77"
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="stroke-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-6"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
d="m 197.036,89.49 c 39.237,-9.724 89.303,-9.828 120.462,-3.317" />
</g>
<g
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-7-7"
transform="matrix(0.20895303,-0.00389196,0.02019357,0.29144257,200.89912,178.73977)"
inkscape:transform-center-x="92.065714"
inkscape:transform-center-y="15.626225">
<path
style="stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-4-3"
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="stroke-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-3-65"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
d="m 197.036,89.49 c 39.237,-9.724 89.303,-9.828 120.462,-3.317" />
</g>
<g
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-5-6"
transform="matrix(0.20895303,-0.00389196,0.02019357,0.29144257,264.50359,178.79555)">
<path
style="stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-6-3"
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="stroke-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-1-9"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
d="m 197.036,89.49 c 39.237,-9.724 89.303,-9.828 120.462,-3.317" />
</g>
<path
style="opacity:0.13;fill:#cccccc;stroke:#666666;stroke-width:4.47074;stroke-miterlimit:10"
d="M 185.30822,247.827 A 18.329978,18.329978 0 0 1 166.97824,266.15699 18.329978,18.329978 0 0 1 148.64827,247.827 18.329978,18.329978 0 0 1 166.97824,229.49706 18.329978,18.329978 0 0 1 185.30822,247.827 Z"
id="circle3369-48"
inkscape:connector-curvature="0" />
<path
style="fill:#ffe6d5;stroke:#666666;stroke-width:4.47074;stroke-miterlimit:10"
d="m 182.37753,243.19675 a 18.329978,18.329978 0 0 1 -18.32999,18.32999 18.329978,18.329978 0 0 1 -18.32999,-18.32999 18.329978,18.329978 0 0 1 18.32999,-18.32994 18.329978,18.329978 0 0 1 18.32999,18.32994 z"
id="circle3383-1"
inkscape:connector-curvature="0" />
<path
d="m 159.1786,247.33038 h 3.60952 v -9.80283 l -3.70504,0.73143 v -2.66151 l 3.6838,-0.73141 h 3.88553 v 12.46432 h 3.60948 v 2.70217 H 159.1786 Z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:28.543px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.531703"
id="path130720-29"
inkscape:connector-curvature="0" />
<path
style="opacity:0.13;fill:#cccccc;stroke:#666666;stroke-width:4.47074;stroke-miterlimit:10"
d="m 251.17071,248.88019 a 18.329978,18.329978 0 0 1 -18.32998,18.33 18.329978,18.329978 0 0 1 -18.32998,-18.33 18.329978,18.329978 0 0 1 18.32998,-18.32994 18.329978,18.329978 0 0 1 18.32998,18.32994 z"
id="circle3369-5-3"
inkscape:connector-curvature="0" />
<path
style="fill:#ffe6d5;stroke:#666666;stroke-width:4.47074;stroke-miterlimit:10"
d="m 248.23998,244.24995 a 18.329978,18.329978 0 0 1 -18.32995,18.33 18.329978,18.329978 0 0 1 -18.32998,-18.33 18.329978,18.329978 0 0 1 18.32998,-18.32995 18.329978,18.329978 0 0 1 18.32995,18.32995 z"
id="circle3383-6-9"
inkscape:connector-curvature="0" />
<path
d="m 228.75678,248.21089 h 6.97483 v 2.87485 h -11.51857 v -2.87485 l 5.78583,-4.88618 q 0.77498,-0.67046 1.14656,-1.31042 0.37153,-0.63996 0.37153,-1.33076 0,-1.06663 -0.75373,-1.71675 -0.74314,-0.65012 -1.98521,-0.65012 -0.95549,0 -2.09142,0.39614 -1.1359,0.38604 -2.43106,1.15806 v -3.33193 q 1.38008,-0.4368 2.72832,-0.66032 1.34826,-0.23367 2.64346,-0.23367 2.84513,0 4.41633,1.19865 1.58176,1.1987 1.58176,3.34212 0,1.23934 -0.66877,2.31613 -0.66882,1.06664 -2.81331,2.86467 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:28.543px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.531703"
id="path130728-0"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
style="opacity:0.13;fill:#cccccc;stroke:#666666;stroke-width:4.47074;stroke-miterlimit:10"
d="m 316.80421,248.93601 a 18.329978,18.329978 0 0 1 -18.32998,18.33 18.329978,18.329978 0 0 1 -18.32995,-18.33 18.329978,18.329978 0 0 1 18.32995,-18.32998 18.329978,18.329978 0 0 1 18.32998,18.32998 z"
id="circle3369-7-8" />
<path
inkscape:connector-curvature="0"
style="fill:#ffe6d5;stroke:#666666;stroke-width:4.47074;stroke-miterlimit:10"
d="m 313.87353,244.30578 a 18.329978,18.329978 0 0 1 -18.33,18.32998 18.329978,18.329978 0 0 1 -18.32999,-18.32998 18.329978,18.329978 0 0 1 18.32999,-18.33 18.329978,18.329978 0 0 1 18.33,18.33 z"
id="circle3383-4-8" />
<g
id="text2753-1-5"
style="font-style:normal;font-weight:normal;font-size:28.543px;line-height:1.25;font-family:sans-serif;fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.713577"
transform="matrix(0.76172535,0,0,0.72887861,256.95141,181.22716)"
aria-label="3">
<path
id="path130733-0"
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.713577"
d="m 54.223178,84.701208 q 2.104489,0.543543 3.191575,1.895433 1.101024,1.337953 1.101024,3.414568 0,3.094016 -2.369292,4.71071 -2.369292,1.602756 -6.912757,1.602756 -1.602757,0 -3.21945,-0.264803 -1.602756,-0.250866 -3.177638,-0.766536 v -4.139292 q 1.505197,0.752598 2.98252,1.142835 1.49126,0.376299 2.926772,0.376299 2.132363,0 3.261261,-0.738662 1.142835,-0.738661 1.142835,-2.118425 0,-1.421575 -1.170709,-2.1463 -1.156772,-0.738662 -3.428505,-0.738662 h -2.1463 v -3.456378 h 2.257796 q 2.020867,0 3.010395,-0.627166 0.989528,-0.641102 0.989528,-1.937245 0,-1.198583 -0.961654,-1.853622 -0.961654,-0.65504 -2.717717,-0.65504 -1.296143,0 -2.620159,0.292678 -1.324016,0.292677 -2.634095,0.864094 v -3.930237 q 1.58882,-0.445984 3.149765,-0.668976 1.560945,-0.222993 3.066142,-0.222993 4.055671,0 6.0626,1.337954 2.020867,1.324016 2.020867,3.999922 0,1.825748 -0.961654,2.996457 -0.961654,1.156772 -2.84315,1.630631 z"
inkscape:connector-curvature="0" />
</g>
<path
inkscape:connector-curvature="0"
style="opacity:0.13;fill:#cccccc;stroke:#666666;stroke-width:4.47074;stroke-miterlimit:10"
d="m 379.52042,249.42851 a 18.329978,18.329978 0 0 1 -18.33001,18.32998 18.329978,18.329978 0 0 1 -18.32998,-18.32998 18.329978,18.329978 0 0 1 18.32998,-18.32994 18.329978,18.329978 0 0 1 18.33001,18.32994 z"
id="circle3369-74-9" />
<path
inkscape:connector-curvature="0"
style="fill:#ffe6d5;stroke:#666666;stroke-width:4.47074;stroke-miterlimit:10"
d="M 376.58968,244.7983 A 18.329978,18.329978 0 0 1 358.2597,263.12826 18.329978,18.329978 0 0 1 339.92976,244.7983 18.329978,18.329978 0 0 1 358.2597,226.46831 18.329978,18.329978 0 0 1 376.58968,244.7983 Z"
id="circle3383-9-6" />
<g
id="text2753-3-3"
style="font-style:normal;font-weight:normal;font-size:28.543px;line-height:1.25;font-family:sans-serif;fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.713577"
transform="matrix(0.76172535,0,0,0.72887861,319.66759,181.71964)"
aria-label="4">
<path
id="path130738-8"
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.713577"
d="m 51.435776,79.530576 -5.881419,8.710632 h 5.881419 z m -0.891969,-4.418032 h 5.965041 v 13.128664 h 2.968583 v 3.888427 h -2.968583 v 3.790867 h -5.073072 v -3.790867 h -9.226302 v -4.599214 z"
inkscape:connector-curvature="0" />
</g>
<g
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-7-7-6"
transform="matrix(0.20895303,-0.00389196,0.02019357,0.29144257,333.31278,180.65568)"
inkscape:transform-center-x="92.065714"
inkscape:transform-center-y="15.626225">
<path
style="stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-4-3-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="stroke-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-3-65-2"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
d="m 197.036,89.49 c 39.237,-9.724 89.303,-9.828 120.462,-3.317" />
</g>
<g
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-5-6-7"
transform="matrix(0.20895303,-0.00389196,0.02019357,0.29144257,396.91725,180.71146)">
<path
style="stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-6-3-6"
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="stroke-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-1-9-1"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
d="m 197.036,89.49 c 39.237,-9.724 89.303,-9.828 120.462,-3.317" />
</g>
<path
inkscape:connector-curvature="0"
style="opacity:0.13;fill:#cccccc;stroke:#666666;stroke-width:4.47074;stroke-miterlimit:10"
d="m 449.21787,250.85192 a 18.329978,18.329978 0 0 1 -18.32998,18.33 18.329978,18.329978 0 0 1 -18.32995,-18.33 18.329978,18.329978 0 0 1 18.32995,-18.32998 18.329978,18.329978 0 0 1 18.32998,18.32998 z"
id="circle3369-7-8-3" />
<path
inkscape:connector-curvature="0"
style="fill:#ffe6d5;stroke:#666666;stroke-width:4.47074;stroke-miterlimit:10"
d="m 446.28719,246.22169 a 18.329978,18.329978 0 0 1 -18.33,18.32998 18.329978,18.329978 0 0 1 -18.32999,-18.32998 18.329978,18.329978 0 0 1 18.32999,-18.33 18.329978,18.329978 0 0 1 18.33,18.33 z"
id="circle3383-4-8-2" />
<path
inkscape:connector-curvature="0"
style="opacity:0.13;fill:#cccccc;stroke:#666666;stroke-width:4.47074;stroke-miterlimit:10"
d="m 511.93408,251.34442 a 18.329978,18.329978 0 0 1 -18.33001,18.32998 18.329978,18.329978 0 0 1 -18.32998,-18.32998 18.329978,18.329978 0 0 1 18.32998,-18.32994 18.329978,18.329978 0 0 1 18.33001,18.32994 z"
id="circle3369-74-9-9" />
<path
inkscape:connector-curvature="0"
style="fill:#ffe6d5;stroke:#666666;stroke-width:4.47074;stroke-miterlimit:10"
d="m 509.00334,246.71421 a 18.329978,18.329978 0 0 1 -18.32998,18.32996 18.329978,18.329978 0 0 1 -18.32994,-18.32996 18.329978,18.329978 0 0 1 18.32994,-18.32999 18.329978,18.329978 0 0 1 18.32998,18.32999 z"
id="circle3383-9-6-9" />
<g
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-70-56"
transform="matrix(0.20895303,-0.00389196,0.02019357,0.29144257,69.524102,179.16429)">
<path
style="stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-3-1"
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="stroke-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-4-1"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
d="m 197.036,89.49 c 39.237,-9.724 89.303,-9.828 120.462,-3.317" />
</g>
<g
id="g2760-5-5"
transform="matrix(0.74512102,0,0,0.74512102,67.572108,186.94719)">
<g
id="g2749-5-9"
style="fill:#ececec;stroke:#666666"
transform="translate(-3.3630029,-9.4412283)">
<path
style="opacity:0.13;fill:#ececec;stroke:#666666;stroke-width:6;stroke-miterlimit:10"
d="m 80.040796,90.58149 a 24.6,24.6 0 0 1 -24.6,24.6 24.6,24.6 0 0 1 -24.6,-24.6 24.6,24.6 0 0 1 24.6,-24.600001 24.6,24.6 0 0 1 24.6,24.600001 z"
id="circle3369-4-8"
inkscape:connector-curvature="0" />
<path
style="fill:#ececec;stroke:#666666;stroke-width:6;stroke-miterlimit:10"
d="m 76.107595,84.367409 a 24.6,24.6 0 0 1 -24.6,24.600001 24.6,24.6 0 0 1 -24.6,-24.600001 24.6,24.6 0 0 1 24.6,-24.600001 24.6,24.6 0 0 1 24.6,24.600001 z"
id="circle3383-98-4"
inkscape:connector-curvature="0" />
</g>
<text
id="text73945-8"
y="86.54644"
x="36.733299"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.4631px;line-height:1.25;font-family:'HVD Comic Serif Pro';-inkscape-font-specification:'HVD Comic Serif Pro';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.36158"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:32.6778px;line-height:0;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:1.36158"
y="86.54644"
x="36.733299"
id="tspan73943-1"
sodipodi:role="line">0</tspan></text>
</g>
<path
style="fill:none;stroke:#696969;stroke-width:1.87107px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 126.47351,181.24217 H 231.7908 v 43.79431"
id="path7708" />
<path
style="fill:none;stroke:#696969;stroke-width:1.85672px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 124.14822,116.8351 H 357.72575 V 226.3257"
id="path7710" />
<path
style="fill:none;stroke:#696969;stroke-width:2.96254px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 125.84655,49.353965 H 489.27557 V 228.50713"
id="path7710-9" />
<g
aria-label="f(x) = 2x "
id="text7265-4-4-5"
style="font-size:24.059px;line-height:1.25;word-spacing:0px;fill:#474747;fill-opacity:1;stroke:none;stroke-width:0.601475;stroke-opacity:1"
transform="translate(222.2562,9.7371754)" />
<path
d="m 422.81686,237.01809 h 10.89092 v 3.22062 h -7.39718 v 2.62884 q 0.50073,-0.13656 1.00146,-0.20485 0.51212,-0.0797 1.05837,-0.0797 3.10682,0 4.83662,1.5591 1.7298,1.54772 1.7298,4.3245 0,2.75403 -1.88913,4.31313 -1.87774,1.55909 -5.22354,1.55909 -1.4453,0 -2.86783,-0.2845 -1.41116,-0.27313 -2.81093,-0.84214 v -3.44823 q 1.38839,0.79662 2.62884,1.19493 1.25183,0.39831 2.35572,0.39831 1.59324,0 2.50366,-0.77386 0.9218,-0.78523 0.9218,-2.11673 0,-1.34287 -0.9218,-2.11673 -0.91042,-0.77386 -2.50366,-0.77386 -0.94456,0 -2.01431,0.25037 -1.06974,0.23899 -2.29881,0.7511 z"
style="font-weight:bold;font-size:23.3068px;line-height:1.25;-inkscape-font-specification:'sans-serif Bold';word-spacing:0px;fill:#4d4d4d;stroke-width:0.582669"
id="path28114" />
<path
d="m 491.49444,246.41185 q -1.14941,0 -1.7298,0.7511 -0.56901,0.73972 -0.56901,2.23054 0,1.49081 0.56901,2.24191 0.58039,0.73972 1.7298,0.73972 1.16079,0 1.7298,-0.73972 0.5804,-0.7511 0.5804,-2.24191 0,-1.49082 -0.5804,-2.23054 -0.56901,-0.7511 -1.7298,-0.7511 z m 5.41701,-8.15966 v 3.14096 q -1.08113,-0.51211 -2.03707,-0.75109 -0.95594,-0.25037 -1.86636,-0.25037 -1.95741,0 -3.04992,1.09251 -1.0925,1.08112 -1.27459,3.22061 0.7511,-0.55763 1.62738,-0.83076 0.87628,-0.2845 1.91189,-0.2845 2.60608,0 4.19932,1.52495 1.60462,1.52496 1.60462,3.99448 0,2.73127 -1.78671,4.38141 -1.7867,1.63875 -4.79109,1.63875 -3.31166,0 -5.1325,-2.23053 -1.80947,-2.24191 -1.80947,-6.35019 0,-4.2107 2.11673,-6.61194 2.12811,-2.41262 5.8267,-2.41262 1.17217,0 2.27606,0.18208 1.10388,0.18209 2.18501,0.54625 z"
style="font-weight:bold;font-size:23.3068px;line-height:1.25;-inkscape-font-specification:'sans-serif Bold';word-spacing:0px;fill:#4d4d4d;stroke-width:0.582669"
id="path28116" />
</svg>

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -0,0 +1,376 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 595.3 300"
version="1.1"
id="svg3397"
sodipodi:docname="linear_function_non_functor.svg"
inkscape:version="1.2.2 (1:1.2.2+202212051552+b0a8486541)"
width="595.29999"
height="300"
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="metadata3403">
<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="defs3401" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1080"
inkscape:window-height="1864"
id="namedview3399"
showgrid="false"
inkscape:zoom="1.1195592"
inkscape:cx="317.08908"
inkscape:cy="179.53495"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg3397"
inkscape:document-rotation="0"
inkscape:showpageshadow="2"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:lockguides="true" />
<path
style="fill:none;stroke:#ba87c5;stroke-width:12.4729;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 239.37081,245.35371 454.655,40.201767"
id="path74087-7"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<g
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-1-3"
transform="matrix(-0.01253032,-0.23597686,0.32856008,-0.03416242,99.06021,223.61716)">
<path
style="stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-7-5"
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="stroke-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-0-6"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
d="m 197.036,89.49 c 39.237,-9.724 89.303,-9.828 120.462,-3.317" />
</g>
<g
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-7-4-9"
transform="matrix(0.00302784,-0.23628987,0.33009611,-0.0124639,95.43607,147.09563)"
inkscape:transform-center-x="-1.9580818"
inkscape:transform-center-y="6.1561486">
<path
style="stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-4-0-1"
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="stroke-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-3-8-2"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
d="m 197.036,89.49 c 39.237,-9.724 89.303,-9.828 120.462,-3.317" />
</g>
<g
transform="matrix(0.84252655,0,0,0.84252655,125.50118,113.03428)"
style="fill:#c6e9af;stroke:#666666"
id="g2749-48-6">
<path
inkscape:connector-curvature="0"
id="circle3369-0-1"
d="m 80.040796,90.58149 a 24.6,24.6 0 0 1 -24.6,24.6 24.6,24.6 0 0 1 -24.6,-24.6 24.6,24.6 0 0 1 24.6,-24.600001 24.6,24.6 0 0 1 24.6,24.600001 z"
style="opacity:0.13;fill:#c6e9af;stroke:#666666;stroke-width:6;stroke-miterlimit:10" />
<path
inkscape:connector-curvature="0"
id="circle3383-81-8"
d="m 76.107595,84.367409 a 24.6,24.6 0 0 1 -24.6,24.600001 24.6,24.6 0 0 1 -24.6,-24.600001 24.6,24.6 0 0 1 24.6,-24.600001 24.6,24.6 0 0 1 24.6,24.600001 z"
style="fill:#c6e9af;stroke:#666666;stroke-width:6;stroke-miterlimit:10" />
</g>
<g
id="text2753-0-7"
style="font-style:normal;font-weight:normal;font-size:28.543px;line-height:1.25;font-family:sans-serif;fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.713577"
transform="matrix(0.86130148,0,0,0.82416088,125.26061,112.79145)"
aria-label="1">
<path
inkscape:connector-curvature="0"
id="path130720-2-9"
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.713577"
d="m 44.272152,92.213257 h 4.738584 V 78.764041 l -4.864017,1.003465 v -3.651497 l 4.836143,-1.003465 h 5.100946 v 17.100713 h 4.738584 v 3.707245 h -14.55024 z" />
</g>
<g
transform="matrix(0.84252655,0,0,0.84252655,127.14014,42.73271)"
style="fill:#c6e9af;stroke:#666666"
id="g2749-4-9-2">
<path
inkscape:connector-curvature="0"
id="circle3369-5-7-0"
d="m 80.040796,90.58149 a 24.6,24.6 0 0 1 -24.6,24.6 24.6,24.6 0 0 1 -24.6,-24.6 24.6,24.6 0 0 1 24.6,-24.600001 24.6,24.6 0 0 1 24.6,24.600001 z"
style="opacity:0.13;fill:#c6e9af;stroke:#666666;stroke-width:6;stroke-miterlimit:10" />
<path
inkscape:connector-curvature="0"
id="circle3383-6-5-2"
d="m 76.107595,84.367409 a 24.6,24.6 0 0 1 -24.6,24.600001 24.6,24.6 0 0 1 -24.6,-24.600001 24.6,24.6 0 0 1 24.6,-24.600001 24.6,24.6 0 0 1 24.6,24.600001 z"
style="fill:#c6e9af;stroke:#666666;stroke-width:6;stroke-miterlimit:10" />
</g>
<g
id="text2753-2-6-3"
style="font-style:normal;font-weight:normal;font-size:28.543px;line-height:1.25;font-family:sans-serif;fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.713577"
transform="matrix(0.86130148,0,0,0.82416088,126.89957,42.489896)"
aria-label="2">
<path
inkscape:connector-curvature="0"
id="path130728-4-7"
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.713577"
d="m 49.150106,91.976327 h 9.156616 v 3.944175 H 43.185065 v -3.944175 l 7.595671,-6.703702 q 1.017402,-0.919843 1.505197,-1.797874 0.487796,-0.878032 0.487796,-1.825749 0,-1.463386 -0.989528,-2.355355 -0.975591,-0.891969 -2.606221,-0.891969 -1.254331,0 -2.745592,0.543544 -1.49126,0.529606 -3.191575,1.588819 v -4.57134 q 1.811811,-0.599291 3.581812,-0.905905 1.77,-0.320552 3.470316,-0.320552 3.735119,0 5.797796,1.644568 2.076615,1.644567 2.076615,4.585277 0,1.700315 -0.878032,3.177638 -0.878031,1.463386 -3.693308,3.930237 z" />
</g>
<g
transform="matrix(0.84252655,0,0,0.84252655,127.34324,-29.086936)"
style="fill:#c6e9af;stroke:#666666"
id="g2749-7-7-5">
<path
id="circle3369-7-9-9"
d="m 80.040796,90.58149 a 24.6,24.6 0 0 1 -24.6,24.6 24.6,24.6 0 0 1 -24.6,-24.6 24.6,24.6 0 0 1 24.6,-24.600001 24.6,24.6 0 0 1 24.6,24.600001 z"
style="opacity:0.13;fill:#c6e9af;stroke:#666666;stroke-width:6;stroke-miterlimit:10"
inkscape:connector-curvature="0" />
<path
id="circle3383-4-7-2"
d="m 76.107595,84.367409 a 24.6,24.6 0 0 1 -24.6,24.600001 24.6,24.6 0 0 1 -24.6,-24.600001 24.6,24.6 0 0 1 24.6,-24.600001 24.6,24.6 0 0 1 24.6,24.600001 z"
style="fill:#c6e9af;stroke:#666666;stroke-width:6;stroke-miterlimit:10"
inkscape:connector-curvature="0" />
</g>
<g
id="text2753-1-4-2"
style="font-style:normal;font-weight:normal;font-size:28.543px;line-height:1.25;font-family:sans-serif;fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.713577"
transform="matrix(0.86130148,0,0,0.82416088,127.10268,-29.32972)"
aria-label="3">
<path
id="path130733-9-8"
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.713577"
d="m 54.223178,84.701208 q 2.104489,0.543543 3.191575,1.895433 1.101024,1.337953 1.101024,3.414568 0,3.094016 -2.369292,4.71071 -2.369292,1.602756 -6.912757,1.602756 -1.602757,0 -3.21945,-0.264803 -1.602756,-0.250866 -3.177638,-0.766536 v -4.139292 q 1.505197,0.752598 2.98252,1.142835 1.49126,0.376299 2.926772,0.376299 2.132363,0 3.261261,-0.738662 1.142835,-0.738661 1.142835,-2.118425 0,-1.421575 -1.170709,-2.1463 -1.156772,-0.738662 -3.428505,-0.738662 h -2.1463 v -3.456378 h 2.257796 q 2.020867,0 3.010395,-0.627166 0.989528,-0.641102 0.989528,-1.937245 0,-1.198583 -0.961654,-1.853622 -0.961654,-0.65504 -2.717717,-0.65504 -1.296143,0 -2.620159,0.292678 -1.324016,0.292677 -2.634095,0.864094 v -3.930237 q 1.58882,-0.445984 3.149765,-0.668976 1.560945,-0.222993 3.066142,-0.222993 4.055671,0 6.0626,1.337954 2.020867,1.324016 2.020867,3.999922 0,1.825748 -0.961654,2.996457 -0.961654,1.156772 -2.84315,1.630631 z"
inkscape:connector-curvature="0" />
</g>
<g
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-1-2-2"
transform="matrix(-0.01253032,-0.23597686,0.32856008,-0.03416242,97.53565,293.4656)">
<path
style="stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-7-2-9"
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="stroke-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-0-2-3"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
d="m 197.036,89.49 c 39.237,-9.724 89.303,-9.828 120.462,-3.317" />
</g>
<g
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-19"
transform="matrix(0.23215306,-0.00432408,0.02243566,0.32380141,201.40328,179.8943)">
<path
style="stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-47"
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="stroke-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-8"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
d="m 197.036,89.49 c 39.237,-9.724 89.303,-9.828 120.462,-3.317" />
</g>
<g
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-7-45"
transform="matrix(0.23215306,-0.00432408,0.02243566,0.32380141,274.57849,181.06444)"
inkscape:transform-center-x="102.28775"
inkscape:transform-center-y="17.36121">
<path
style="stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-4-03"
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="stroke-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-3-6"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
d="m 197.036,89.49 c 39.237,-9.724 89.303,-9.828 120.462,-3.317" />
</g>
<g
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-5-1"
transform="matrix(0.23215306,-0.00432408,0.02243566,0.32380141,345.24494,181.12641)">
<path
style="stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-6-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="stroke-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-1-63"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
d="m 197.036,89.49 c 39.237,-9.724 89.303,-9.828 120.462,-3.317" />
</g>
<path
style="opacity:0.13;fill:#cccccc;stroke:#666666;stroke-width:4.96713;stroke-miterlimit:10"
d="m 257.25653,257.8224 a 20.365153,20.365153 0 0 1 -20.36517,20.36518 20.365153,20.365153 0 0 1 -20.36513,-20.36518 20.365153,20.365153 0 0 1 20.36513,-20.36512 20.365153,20.365153 0 0 1 20.36517,20.36512 z"
id="circle3369-2"
inkscape:connector-curvature="0" />
<path
style="fill:#ffe6d5;stroke:#666666;stroke-width:4.96713;stroke-miterlimit:10"
d="m 254.00044,252.67808 a 20.365153,20.365153 0 0 1 -20.36517,20.36515 20.365153,20.365153 0 0 1 -20.36515,-20.36515 20.365153,20.365153 0 0 1 20.36515,-20.36515 20.365153,20.365153 0 0 1 20.36517,20.36515 z"
id="circle3383-0"
inkscape:connector-curvature="0" />
<path
d="m 228.22573,257.27066 h 4.01029 v -10.89125 l -4.11641,0.81264 v -2.95701 l 4.09281,-0.81264 h 4.31694 v 13.84826 h 4.01026 v 3.00216 h -12.31389 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:28.543px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.590737"
id="path130720-6"
inkscape:connector-curvature="0" />
<path
style="opacity:0.13;fill:#cccccc;stroke:#666666;stroke-width:4.96713;stroke-miterlimit:10"
d="m 330.43173,258.99255 a 20.365153,20.365153 0 0 1 -20.36516,20.36518 20.365153,20.365153 0 0 1 -20.36518,-20.36518 20.365153,20.365153 0 0 1 20.36518,-20.36512 20.365153,20.365153 0 0 1 20.36516,20.36512 z"
id="circle3369-5-1"
inkscape:connector-curvature="0" />
<path
style="fill:#ffe6d5;stroke:#666666;stroke-width:4.96713;stroke-miterlimit:10"
d="m 327.17559,253.8482 a 20.365153,20.365153 0 0 1 -20.36512,20.36518 20.365153,20.365153 0 0 1 -20.36515,-20.36518 20.365153,20.365153 0 0 1 20.36515,-20.36512 20.365153,20.365153 0 0 1 20.36512,20.36512 z"
id="circle3383-6-55"
inkscape:connector-curvature="0" />
<path
d="m 305.52918,258.24894 h 7.74924 v 3.19403 h -12.79746 v -3.19403 l 6.42821,-5.4287 q 0.86102,-0.7449 1.27386,-1.45592 0.4128,-0.71102 0.4128,-1.47852 0,-1.18504 -0.83743,-1.90735 -0.82565,-0.72233 -2.20564,-0.72233 -1.06156,0 -2.32361,0.44014 -1.26203,0.42891 -2.70098,1.28665 v -3.70188 q 1.5333,-0.48531 3.03124,-0.73363 1.49796,-0.25965 2.93695,-0.25965 3.16103,0 4.90667,1.33176 1.7574,1.33179 1.7574,3.71317 0,1.37696 -0.74302,2.57329 -0.74309,1.18507 -3.12568,3.18273 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:28.543px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.590737"
id="path130728-47"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
style="opacity:0.13;fill:#cccccc;stroke:#666666;stroke-width:4.96713;stroke-miterlimit:10"
d="m 403.35251,259.05456 a 20.365153,20.365153 0 0 1 -20.36517,20.36517 20.365153,20.365153 0 0 1 -20.36512,-20.36517 20.365153,20.365153 0 0 1 20.36512,-20.36517 20.365153,20.365153 0 0 1 20.36517,20.36517 z"
id="circle3369-7-6" />
<path
inkscape:connector-curvature="0"
style="fill:#ffe6d5;stroke:#666666;stroke-width:4.96713;stroke-miterlimit:10"
d="m 400.09643,253.91023 a 20.365153,20.365153 0 0 1 -20.36518,20.36515 20.365153,20.365153 0 0 1 -20.36517,-20.36515 20.365153,20.365153 0 0 1 20.36517,-20.36519 20.365153,20.365153 0 0 1 20.36518,20.36519 z"
id="circle3383-4-5" />
<g
id="text2753-1-6"
style="font-style:normal;font-weight:normal;font-size:28.543px;line-height:1.25;font-family:sans-serif;fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.713577"
transform="matrix(0.84629962,0,0,0.80980591,336.85426,183.82798)"
aria-label="3">
<path
id="path130733-93"
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.713577"
d="m 54.223178,84.701208 q 2.104489,0.543543 3.191575,1.895433 1.101024,1.337953 1.101024,3.414568 0,3.094016 -2.369292,4.71071 -2.369292,1.602756 -6.912757,1.602756 -1.602757,0 -3.21945,-0.264803 -1.602756,-0.250866 -3.177638,-0.766536 v -4.139292 q 1.505197,0.752598 2.98252,1.142835 1.49126,0.376299 2.926772,0.376299 2.132363,0 3.261261,-0.738662 1.142835,-0.738661 1.142835,-2.118425 0,-1.421575 -1.170709,-2.1463 -1.156772,-0.738662 -3.428505,-0.738662 h -2.1463 v -3.456378 h 2.257796 q 2.020867,0 3.010395,-0.627166 0.989528,-0.641102 0.989528,-1.937245 0,-1.198583 -0.961654,-1.853622 -0.961654,-0.65504 -2.717717,-0.65504 -1.296143,0 -2.620159,0.292678 -1.324016,0.292677 -2.634095,0.864094 v -3.930237 q 1.58882,-0.445984 3.149765,-0.668976 1.560945,-0.222993 3.066142,-0.222993 4.055671,0 6.0626,1.337954 2.020867,1.324016 2.020867,3.999922 0,1.825748 -0.961654,2.996457 -0.961654,1.156772 -2.84315,1.630631 z"
inkscape:connector-curvature="0" />
</g>
<path
inkscape:connector-curvature="0"
style="opacity:0.13;fill:#cccccc;stroke:#666666;stroke-width:4.96713;stroke-miterlimit:10"
d="m 473.03208,259.60174 a 20.365153,20.365153 0 0 1 -20.36518,20.36517 20.365153,20.365153 0 0 1 -20.36516,-20.36517 20.365153,20.365153 0 0 1 20.36516,-20.36514 20.365153,20.365153 0 0 1 20.36518,20.36514 z"
id="circle3369-74-7" />
<path
inkscape:connector-curvature="0"
style="fill:#ffe6d5;stroke:#666666;stroke-width:4.96713;stroke-miterlimit:10"
d="m 469.77595,254.45743 a 20.365153,20.365153 0 0 1 -20.36517,20.36515 20.365153,20.365153 0 0 1 -20.36511,-20.36515 20.365153,20.365153 0 0 1 20.36511,-20.36516 20.365153,20.365153 0 0 1 20.36517,20.36516 z"
id="circle3383-9-4" />
<g
id="text2753-3-5"
style="font-style:normal;font-weight:normal;font-size:28.543px;line-height:1.25;font-family:sans-serif;fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.713577"
transform="matrix(0.84629962,0,0,0.80980591,406.53379,184.37517)"
aria-label="4">
<path
id="path130738-2"
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.713577"
d="m 51.435776,79.530576 -5.881419,8.710632 h 5.881419 z m -0.891969,-4.418032 h 5.965041 v 13.128664 h 2.968583 v 3.888427 h -2.968583 v 3.790867 h -5.073072 v -3.790867 h -9.226302 v -4.599214 z"
inkscape:connector-curvature="0" />
</g>
<g
style="display:inline;fill:#dddddd;stroke:#838383;stroke-width:6.389;stroke-miterlimit:10"
id="g1482-7-0-70-5"
transform="matrix(0.23215306,-0.00432408,0.02243566,0.32380141,128.6169,181.53608)">
<path
style="stroke-width:35.526"
inkscape:connector-curvature="0"
id="path1478-7-9-3-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="stroke-width:10.649;paint-order:markers fill stroke"
inkscape:connector-curvature="0"
id="path1480-1-3-4-7"
transform="matrix(0.89574,0,0,0.81736,18.384,154.236)"
d="m 197.036,89.49 c 39.237,-9.724 89.303,-9.828 120.462,-3.317" />
</g>
<g
id="g2760-5-4"
transform="matrix(0.82785172,0,0,0.82785172,126.44818,190.18313)">
<g
id="g2749-5-4"
style="fill:#ececec;stroke:#666666"
transform="translate(-3.3630029,-9.4412283)">
<path
style="opacity:0.13;fill:#ececec;stroke:#666666;stroke-width:6;stroke-miterlimit:10"
d="m 80.040796,90.58149 a 24.6,24.6 0 0 1 -24.6,24.6 24.6,24.6 0 0 1 -24.6,-24.6 24.6,24.6 0 0 1 24.6,-24.600001 24.6,24.6 0 0 1 24.6,24.600001 z"
id="circle3369-4-3"
inkscape:connector-curvature="0" />
<path
style="fill:#ececec;stroke:#666666;stroke-width:6;stroke-miterlimit:10"
d="m 76.107595,84.367409 a 24.6,24.6 0 0 1 -24.6,24.600001 24.6,24.6 0 0 1 -24.6,-24.600001 24.6,24.6 0 0 1 24.6,-24.600001 24.6,24.6 0 0 1 24.6,24.600001 z"
id="circle3383-98-0"
inkscape:connector-curvature="0" />
</g>
<text
id="text73945-7"
y="86.54644"
x="36.733299"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.4631px;line-height:1.25;font-family:'HVD Comic Serif Pro';-inkscape-font-specification:'HVD Comic Serif Pro';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.36158"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:32.6778px;line-height:0;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:1.36158"
y="86.54644"
x="36.733299"
id="tspan73943-8"
sodipodi:role="line">0</tspan></text>
</g>
<path
style="fill:none;stroke:#696969;stroke-width:2.07882px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 307.04619,231.52142 V 182.37377 H 192.35866"
id="path7694" />
<path
style="fill:none;stroke:#696969;stroke-width:2.07882px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 378.31609,233.98025 V 111.92708 H 192.35866"
id="path7696" />
<path
style="fill:none;stroke:#696969;stroke-width:2.07882px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 449.58598,231.52142 V 44.755262 H 193.99787"
id="path7698" />
</svg>

After

Width:  |  Height:  |  Size: 22 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 79 KiB

View File

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="30.786 16.849 300 160" width="300px" height="180px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<symbol id="symbol-1" viewBox="0 0 75.9891 137.2121">
<circle style="fill: rgb(216, 216, 216); stroke-width: 5px; stroke: rgb(102, 102, 102);" cx="243.248" cy="327.315" r="21.703" transform="matrix(0.8386710286140442, -0.544638991355896, 0.544638991355896, 0.8386710286140442, -336.30639595590213, -34.83714732185037)"/>
<circle style="fill: rgb(216, 216, 216); stroke-width: 5px; stroke: rgb(102, 102, 102);" cx="271.904" cy="253.912" r="21.703" transform="matrix(0.8386710286140442, -0.544638991355896, 0.544638991355896, 0.8386710286140442, -336.30639595590213, -34.83714732185037)"/>
<line style="stroke-width: 5px; marker-start: url(#marker-0); stroke: rgb(102, 102, 102);" x1="260.613" y1="282.91" x2="251.477" y2="305.225" transform="matrix(0.8386710286140442, -0.544638991355896, 0.544638991355896, 0.8386710286140442, -336.30639595590213, -34.83714732185037)"/>
</symbol>
<marker id="marker-0" viewBox="0 0 12.641 9.03" overflow="visible" orient="auto" refX="6.32" refY="4.51">
<polyline style="fill: none; stroke-miterlimit: 2; stroke-width: 5px; stroke: rgb(105, 105, 105);" points="2 3.775 10.625 0 14.641 9.03" transform="matrix(-0.390731, -0.920505, 0.920505, -0.390731, 7.415497, 13.938211)"/>
</marker>
<symbol id="symbol-2" viewBox="0 0 75.9891 137.2121">
<circle style="stroke-width: 5px; stroke: rgb(102, 102, 102); fill: rgb(255, 255, 255);" cx="243.248" cy="327.315" r="21.703" transform="matrix(0.8386710286140442, -0.544638991355896, 0.544638991355896, 0.8386710286140442, -336.3063959559022, -34.83714732185041)"/>
<circle style="stroke-width: 5px; stroke: rgb(102, 102, 102); fill: rgb(255, 255, 255);" cx="271.904" cy="253.912" r="21.703" transform="matrix(0.8386710286140442, -0.544638991355896, 0.544638991355896, 0.8386710286140442, -336.3063959559022, -34.83714732185041)"/>
<line style="stroke-width: 5px; marker-start: url(#marker-0); stroke: rgb(102, 102, 102); fill: rgb(255, 255, 255);" x1="222.038" y1="264.931" x2="212.902" y2="287.246" transform="matrix(0.8386710286140442, -0.544638991355896, 0.544638991355896, 0.8386710286140442, -294.1620401819764, -40.768025007397284)"/>
</symbol>
</defs>
<circle cx="107.834" cy="62.213" r="39.87" style="fill: rgb(250, 250, 250); stroke: rgb(182, 182, 182);" transform="matrix(1, 0.000025, -0.000025, 1, 32.513767, 0.559578)"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.161147, -0.096058, 0.096058, 0.161147, 109.146599, 58.058945)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.182472, 0.043584, -0.043584, 0.182472, 113.089752, 38.304802)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(-0.158651, 0.09457, 0.096058, 0.161147, 157.997452, 65.001953)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(-0.129759, 0.133427, 0.131441, 0.13188, 147.868652, 52.445053)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.040265, -0.183233, 0.183233, 0.040265, 120.220375, 75.240005)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(-0.186057, 0.004801, 0.0019, 0.186187, 156.050827, 40.154751)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.019731, 0.185071, 0.185433, -0.016848, 135.427399, 66.025665)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.165951, -0.087496, 0.087496, 0.165951, 127.208763, 81.55249)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.062125, 0.17702, -0.17702, 0.062125, 132.85556, 45.265236)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.179743, -0.053736, 0.053736, 0.179743, 106.689964, 67.401657)" xlink:href="#symbol-2"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(-0.181503, 0.026738, 0.027342, 0.185602, 175.638474, 42.894062)" xlink:href="#symbol-2"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.179743, -0.053736, 0.053736, 0.179743, 99.644699, 54.253616)" xlink:href="#symbol-2"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(-0.181503, 0.026738, 0.027342, 0.185602, 164.088318, 30.31813)" xlink:href="#symbol-2"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.053698, -0.179755, 0.179755, 0.053698, 122.406693, 97.849648)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(-0.169026, -0.074459, -0.075631, 0.171684, 176.769287, 71.56118)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(-0.129759, 0.133427, 0.131441, 0.13188, 161.179016, 54.146397)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.018237, -0.186717, 0.186717, 0.018237, 121.376991, 45.880287)" xlink:href="#symbol-2"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.12524, -0.139678, 0.139678, 0.12524, 121.633347, 32.215042)" xlink:href="#symbol-2"/>
<circle cx="109.141" cy="144.507" r="39.334" style="fill: rgb(250, 250, 250); stroke: rgb(182, 182, 182);" transform="matrix(1, 0.000025, -0.000025, 1, 74.467796, -11.715346)"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(-0.158651, 0.09457, 0.096058, 0.161147, 202.044189, 124.053802)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(-0.186109, -0.001841, -0.004748, 0.186136, 209.218262, 111.87204)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.174353, -0.069255, 0.069255, 0.174353, 180.593628, 139.297226)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.040265, -0.183233, 0.183233, 0.040265, 166.093018, 146.629623)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(-0.074323, 0.170635, 0.169526, 0.077007, 188.695038, 101.193939)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.050959, 0.179007, 0.179855, -0.04818, 178.416061, 128.353912)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.123242, -0.141447, 0.141447, 0.123242, 165.466553, 154.411789)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(-0.014725, -0.187025, 0.187025, -0.014725, 166.863571, 171.344208)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<line style="marker-start: url(#marker-0); fill: rgb(255, 246, 246); stroke: rgb(176, 173, 173);" x1="163.17" y1="101.225" x2="146.075" y2="126.552" transform="matrix(0.441529, -0.897247, 0.897247, 0.441529, -15.833926, 202.338005)"/>
<line style="marker-start: url(#marker-0); fill: rgb(255, 246, 246); stroke: rgb(176, 173, 173);" x1="167.575" y1="88.842" x2="149.251" y2="109.281" transform="matrix(0.441529, -0.897247, 0.897247, 0.441529, -0.413558, 197.458573)"/>
<line style="marker-start: url(#marker-0); fill: rgb(255, 246, 246); stroke: rgb(176, 173, 173);" x1="179.177" y1="94.166" x2="160.275" y2="116.881" transform="matrix(0.441529, -0.897247, 0.897247, 0.441529, 0.106414, 211.217964)"/>
<line style="marker-start: url(#marker-0); stroke: rgb(102, 102, 102); fill: rgb(255, 255, 255);" x1="150.409" y1="88.799" x2="144.014" y2="88.986" transform="matrix(0.441529, -0.897247, 0.897247, 0.441529, 2.454832, 181.728969)"/>
<circle cx="100.739" cy="128.052" r="14.872" style="fill: none; stroke: rgb(182, 182, 182);" transform="matrix(0.858973, -0.512021, 0.512021, 0.858973, 15.865332, 64.549316)"/>
<line style="marker-start: url(#marker-0); stroke: rgb(102, 102, 102);" x1="169.987" y1="134.777" x2="167.611" y2="139.228" transform="matrix(0.441529, -0.897247, 0.897247, 0.441529, -28.655725, 227.966322)"/>
<circle style="stroke: rgb(102, 102, 102); fill: rgb(139, 139, 139); stroke-width: 1.5px;" cx="44.664" cy="60.1" r="3.985" transform="matrix(0.441529, -0.897247, 0.897247, 0.441529, 112.40551, 174.71904)"/>
<circle style="stroke: rgb(102, 102, 102); fill: rgb(139, 139, 139); stroke-width: 1.5px;" cx="44.664" cy="60.1" r="3.985" transform="matrix(0.578379, -0.815768, 0.815768, 0.578379, 121.073044, 156.334702)"/>
<circle style="stroke: rgb(102, 102, 102); fill: rgb(139, 139, 139); stroke-width: 1.5px;" cx="44.664" cy="60.1" r="3.985" transform="matrix(0.441529, -0.897247, 0.897247, 0.441529, 131.286575, 159.012436)"/>
<circle style="stroke: rgb(102, 102, 102); fill: rgb(139, 139, 139); stroke-width: 1.5px;" cx="44.664" cy="60.1" r="3.985" transform="matrix(0.441529, -0.897247, 0.897247, 0.441529, 70.462975, 108.767998)"/>
<circle style="stroke: rgb(102, 102, 102); fill: rgb(139, 139, 139); stroke-width: 1.5px;" cx="44.664" cy="60.1" r="3.985" transform="matrix(0.441529, -0.897247, 0.897247, 0.441529, 77.388779, 94.189949)"/>
<circle style="stroke: rgb(102, 102, 102); fill: rgb(139, 139, 139); stroke-width: 1.5px;" cx="44.664" cy="60.1" r="3.985" transform="matrix(0.441529, -0.897247, 0.897247, 0.441529, 87.245209, 100.200706)"/>
<line style="marker-start: url(#marker-0); stroke: rgb(102, 102, 102); fill: rgb(255, 255, 255);" x1="155.625" y1="94.617" x2="148.379" y2="89.049" transform="matrix(0.441529, -0.897247, 0.897247, 0.441529, 2.491833, 187.669412)"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.18368, 0.038168, -0.038168, 0.18368, 210.582764, 123.732544)" xlink:href="#symbol-2"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.182472, 0.043584, -0.043584, 0.182472, 160.710556, 108.652382)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.062125, 0.17702, -0.17702, 0.062125, 180.476364, 115.612823)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.173826, 0.070573, -0.070573, 0.173826, 139.106201, 31.882347)" xlink:href="#symbol-2"/>
<circle cx="107.834" cy="62.213" r="39.87" style="fill: rgb(250, 250, 250); stroke: rgb(182, 182, 182);" transform="matrix(1, 0.00008, -0.00008, 1, 114.949066, -1.890053)"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.165883, 0.087625, -0.087625, 0.165883, 210.570374, 31.23468)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.057734, 0.1785, -0.1785, 0.057734, 229.491165, 24.322517)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(-0.163314, -0.086268, -0.087625, 0.165883, 230.061798, 76.563454)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(-0.181461, -0.041376, -0.04422, 0.180869, 235.513992, 61.379837)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.177423, -0.060964, 0.060964, 0.177423, 201.661148, 49.631512)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(-0.100917, -0.156384, -0.158005, 0.098508, 250.266922, 61.971474)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(-0.147772, 0.113153, 0.110881, 0.149582, 217.442902, 57.822601)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.116652, 0.146927, -0.146927, 0.116652, 207.125092, 61.14183)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.13942, 0.125528, -0.125528, 0.13942, 201.313873, 33.998497)" xlink:href="#symbol-2"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.13942, 0.125528, -0.125528, 0.13942, 208.875412, 21.140434)" xlink:href="#symbol-2"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(-0.11728, -0.14108, -0.144265, 0.119929, 262.849243, 63.71637)" xlink:href="#symbol-2"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.186582, 0.019561, -0.019561, 0.186582, 190.328979, 59.541336)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.168935, -0.081588, 0.081588, 0.168935, 227.334534, 35.341373)" xlink:href="#symbol-2"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.184448, 0.034264, -0.034264, 0.184448, 239.137283, 28.449348)" xlink:href="#symbol-2"/>
<circle style="stroke: rgb(102, 102, 102); fill: rgb(139, 139, 139); stroke-width: 1.5px;" cx="44.664" cy="60.1" r="3.985" transform="matrix(0.995955, -0.089857, 0.089857, 0.995955, 147.138062, 24.588373)"/>
<circle style="stroke: rgb(102, 102, 102); fill: rgb(139, 139, 139); stroke-width: 1.5px;" cx="44.664" cy="60.1" r="3.985" transform="matrix(0.995955, -0.089857, 0.089857, 0.995955, 163.186951, 34.461315)"/>
<line style="marker-start: url(#marker-0); stroke: rgb(102, 102, 102); fill: rgb(255, 255, 255);" x1="209.688" y1="88.868" x2="202.443" y2="83.3" transform="matrix(-0.997433, 0.071603, -0.071603, -0.997433, 417.765946, 157.192123)"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.030188, 0.185161, -0.185161, 0.030188, 248.513672, 43.197048)" xlink:href="#symbol-2"/>
<line style="marker-start: url(#marker-0); fill: rgb(255, 246, 246); stroke: rgb(176, 173, 173);" x1="195.459" y1="86.246" x2="192.242" y2="104.058" transform="matrix(0.999978, -0.006681, 0.006681, 0.999978, -0.631384, 1.297239)"/>
<line style="marker-start: url(#marker-0); fill: rgb(255, 246, 246); stroke: rgb(176, 173, 173);" x1="211.045" y1="95.625" x2="204.956" y2="112.972" transform="matrix(0.999978, -0.006681, 0.006681, 0.999978, -0.692176, 1.391979)"/>
<circle cx="100.739" cy="128.052" r="14.872" style="fill: none; stroke: rgb(182, 182, 182);" transform="matrix(0.858973, -0.512021, 0.512021, 0.858973, 44.673439, 53.862164)"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.146041, -0.117761, 0.117761, 0.146041, 224.182266, 74.421364)" xlink:href="#symbol-2"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.186609, 0.019295, -0.019295, 0.186609, 237.15097, 63.660873)" xlink:href="#symbol-2"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.045006, 0.182127, -0.182127, 0.045006, 247.684875, 77.605347)" xlink:href="#symbol-2"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.171384, 0.076307, -0.076307, 0.171384, 216.745651, 43.730705)" style="stroke-width: 23.94px; stroke: rgb(166, 172, 148);" xlink:href="#symbol-1"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.178268, -0.05845, 0.05845, 0.178268, 146.733658, 141.496155)" xlink:href="#symbol-2"/>
<use width="75.98909759521484" height="137.21209716796875" transform="matrix(0.17827, 0.058438, -0.058438, 0.17827, 159.346558, 136.231277)" xlink:href="#symbol-2"/>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -1,3 +1,7 @@
---
layout: default
title: Adjunctions
---
Adjunctions
===

4
_chapters/09_yoneda.md Normal file
View File

@ -0,0 +1,4 @@
Yoneda lemma
===
When thinking about some mathematical objects such as a groups, orders or categories, we often feel a need to get to the souce. We start asking ourselves what is "groupness" or "orderness". Like, given some (or any) set of objects, what is the ultimate group that we can create out of these objects - a group that includes all other groups, group such that all other groups are just a special case of it. Or the ultimate order? The ultimate category?

View File

@ -15,3 +15,5 @@ Reading list
[The functions of functors](https://www.lifeoflevi.com/)
[Pierce - What is a sign](https://www.marxists.org/reference/subject/philosophy/works/us/peirce1.htm)

Binary file not shown.

BIN
category_theory_notes.pdf Normal file

Binary file not shown.

View File

@ -3,14 +3,18 @@ layout: default
title: index
---
[![cover.svg](cover.svg)](00_about)
Category Theory Illustrated is a primer in category theory and various related concepts in "higher" mathematics that is *really* accessible to people with no prior exposure to the subject without being dumbed down, by utilizing visual explanations.
The book serves as chapter 0 going through the gist of the material covered by other similar introductory books, but doing so in a way that would enable non-mathematicians to swift through with ease.
Reading it would enable my readers to effortlessly go through any academic introduction to category theory, as well as to start tackling resources that use category theory as a tool to treat other subjects.
Reading it would enable you to go through any academic introduction to category theory, as well as to start tackling resources that use category theory as a tool to treat other subjects.
[![cover.svg](cover.svg)](00_about)
Praise
===
> "The range of applications for category theory is immense, and visually conveying meaning through illustration is an indispensable skill for organizational and technical work. Unfortunately, the foundations of category theory, despite much of their utility and simplicity being on par with Venn Diagrams, are locked behind resources that assume far too much academic background.
>
@ -22,3 +26,8 @@ Reading it would enable my readers to effortlessly go through any academic intro
> "The clarity, consistency and elegance of diagrams in 'Category Theory Illustrated' has helped us demystify and explain in simple terms a topic often feared."
[Gonzalo Casas](https://gnz.io/), Software developer and lecturer for Introduction to Computational Methods for Digital Fabrication in Architecture at ETH Zurich
Support the project
===

View File

@ -239,7 +239,7 @@ Quotes
> "The clarity, consistency and elegance of diagrams in 'Category Theory Illustrated' has helped us demystify and explain in simple terms a topic often feared."
[Gonzalo Casas](https://gnz.io/), Software developer, leading courses at digital/robotic fabrication for PHD students at ETH Zurich
[Gonzalo Casas](https://gnz.io/), Software developer and lecturer for Introduction to Computational Methods for Digital Fabrication in Architecture at ETH Zurich
Comments