{"id":443372,"date":"2024-12-26T07:57:58","date_gmt":"2024-12-26T07:57:58","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=443372"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=443372","title":{"rendered":"<span>\u0420\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b. \u0427\u0430\u0441\u0442\u044c 5\/5. \u0417\u0430\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u0442\u0430\u043d<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4eb\/797\/782\/4eb7977828d46d04de2d034c280ac32a.png\" alt=\"\u041c\u0430\u0441\u0442\u0435\u0440\u0430 \u0423\u0433\u0432\u044d\u044f \u043d\u0438\u0447\u0443\u0442\u044c \u043d\u0435 \u0443\u0434\u0438\u0432\u043b\u044f\u043b\u043e, \u0447\u0442\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0442\u0438\u043f\u0430\u043c\u0438 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0442 \u0448\u043a\u043e\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0443.\" title=\"\u041c\u0430\u0441\u0442\u0435\u0440\u0430 \u0423\u0433\u0432\u044d\u044f \u043d\u0438\u0447\u0443\u0442\u044c \u043d\u0435 \u0443\u0434\u0438\u0432\u043b\u044f\u043b\u043e, \u0447\u0442\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0442\u0438\u043f\u0430\u043c\u0438 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0442 \u0448\u043a\u043e\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0443.\" width=\"819\" height=\"616\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4eb\/797\/782\/4eb7977828d46d04de2d034c280ac32a.png\"\/><\/p>\n<div><figcaption>\u041c\u0430\u0441\u0442\u0435\u0440\u0430 \u0423\u0433\u0432\u044d\u044f \u043d\u0438\u0447\u0443\u0442\u044c \u043d\u0435 \u0443\u0434\u0438\u0432\u043b\u044f\u043b\u043e, \u0447\u0442\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0442\u0438\u043f\u0430\u043c\u0438 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0442 \u0448\u043a\u043e\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0443.<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u043f\u044f\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438:<\/p>\n<ul>\n<li>\n<p><a href=\"#nat_numbers\" rel=\"noopener noreferrer nofollow\">\u041d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#row_decompose\" rel=\"noopener noreferrer nofollow\">\u0420\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0440\u044f\u0434<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#type-derivatives\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435 \u043e\u0442 \u0442\u0438\u043f\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#exp_derivatives\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435 \u043e\u0442 \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#rec_derivatives\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435 \u043e\u0442 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#bibliography\" rel=\"noopener noreferrer nofollow\">\u0421\u043f\u0438\u0441\u043e\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#conclusion\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043e\u0431\u0437\u043e\u0440\u0443<\/a><\/p>\n<\/li>\n<\/ul>\n<details class=\"spoiler\">\n<summary>\u0414\u0440\u0443\u0433\u0438\u0435 \u0447\u0430\u0441\u0442\u0438 \u043e\u0431\u0437\u043e\u0440\u0430<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/article\/863304\/\" rel=\"noopener noreferrer nofollow\">\u0427\u0430\u0441\u0442\u044c 1. \u0420\u0435\u043a\u0443\u0440\u0441\u0438\u044f<\/a>.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/863324\/\" rel=\"noopener noreferrer nofollow\">\u0427\u0430\u0441\u0442\u044c 2. \u041d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432 \u0442\u0438\u043f\u043e\u0432<\/a>.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/863334\/\" rel=\"noopener noreferrer nofollow\">\u0427\u0430\u0441\u0442\u044c 3. \u0421\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b<\/a>.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/863362\/\" rel=\"noopener noreferrer nofollow\">\u0427\u0430\u0441\u0442\u044c 4. \u0421\u0445\u0435\u043c\u044b \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438<\/a>.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/863376\/\" rel=\"noopener noreferrer nofollow\">\u0427\u0430\u0441\u0442\u044c 5. \u0417\u0430\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u0442\u0430\u043d<\/a>\u00a0(\u043c\u044b \u0437\u0434\u0435\u0441\u044c).<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<p><a class=\"anchor\" name=\"nat_numbers\" id=\"nat_numbers\"><\/a><\/p>\n<h2>\u041d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430<\/h2>\n<p>\u0412 \u0441\u0432\u043e\u0451 \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0441\u0442\u0430\u043b \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435\u043c \u0442\u043e\u0442 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u0442\u0438\u043f \u043d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0442\u0430\u043a\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u043c:<\/p>\n<pre><code class=\"scala\">type Nat = \u03bc[Option]<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u043e. \u0421\u043f\u0435\u0440\u0432\u0430 \u0432\u0432\u0435\u0434\u0451\u043c \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b:<\/p>\n<pre><code class=\"scala\">\/\/ \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 val zero:          Nat = inFix[\u03bc, Option](None   ) def succ(n:Nat):   Nat = inFix[\u03bc, Option](Some(n)) \/\/ \u0432\u0441\u043f\u043e\u043c\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 val one:           Nat = succ(zero) def toNat(i: Int): Nat = (1 to i).foldRight(zero)((_, acc) =&gt; succ(acc)) \/\/ \u043d\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 i, \u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u043e \u043d\u0435 \u0432\u0430\u0436\u043d\u043e<\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u0443\u044e <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%90%D0%BA%D1%81%D0%B8%D0%BE%D0%BC%D1%8B_%D0%9F%D0%B5%D0%B0%D0%BD%D0%BE\" rel=\"noopener noreferrer nofollow\">\u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0443 \u043f\u043e \u041f\u0435\u0430\u043d\u043e<\/a>:<\/p>\n<pre><code class=\"scala\">extension (nat: Nat)   def +     = foldFix[\u03bc]((_: Option[Nat]).fold(nat )(succ   ))   def *     = foldFix[\u03bc]((_: Option[Nat]).fold(zero)(_ + nat))   def **    = foldFix[\u03bc]((_: Option[Nat]).fold(one )(_ * nat))     def toInt = foldFix[\u03bc]((_: Option[Int]).fold(0   )(_ + 1  ))(nat)<\/code><\/pre>\n<p>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f <code>Nat<\/code>, \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0435 \u044d\u0442\u0438\u043c, \u0431\u0443\u0434\u0443\u0442 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c\u0438. \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0442\u0438\u043f\u044b, \u0437\u0430\u043c\u043a\u043d\u0443\u0442\u044b\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 (\u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u0441\u0442\u0430\u043b\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c\u0438) \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043d\u0430\u0441 \u043a \u0446\u0435\u043b\u044b\u043c, \u0440\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0438 \u043f\u0440\u043e\u0447\u0438\u043c \u0447\u0438\u0441\u043b\u0430\u043c. \u041d\u043e \u043e\u0442\u043b\u043e\u0436\u0438\u043c \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0430\u0437, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u0442\u0438\u043f\u044b, \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438, \u0431\u0443\u0434\u0443\u0442 \u043d\u0435\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u043c\u0438 (\u0445\u043e\u0442\u044f \u0438 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0430 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u043c <code>Nat<\/code>).<\/p>\n<p>\u0410 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u0448\u0430 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"scala\">val two   = succ(one) val three = succ(two) val six   = toNat(6)  val theAnswer = (two * three) ** two + six theAnswer.toInt \/\/ 42<\/code><\/pre>\n<p>\u0412\u0430\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b <code>Nat<\/code> \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0447\u0435\u0440\u0435\u0437 <code>inFix<\/code>, \u0430 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u0434\u0435\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0432 <code>Int<\/code> \u2013 \u0447\u0435\u0440\u0435\u0437 <code>foldFix<\/code>. \u041f\u0430\u0440\u0430 \u044d\u0442\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043a\u0430\u043a \u0440\u0430\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 <strong>\u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438<\/strong> \u0434\u043b\u044f <strong>\u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u0439 \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438<\/strong> <code>\u03bc<\/code>, \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0439 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438. \u0412\u043e\u043e\u0431\u0449\u0435, \u0432\u0441\u0451 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0442\u044c \u0442\u0438\u043f <code>Nat<\/code>, \u0432\u044b\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0441\u0432\u0451\u0440\u0442\u043a\u0443 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430! \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b \u2013 \u044d\u0442\u043e \u0441\u0432\u0451\u0440\u0442\u043a\u0430 <code>Nat<\/code> \u0432 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 <code>Nat<\/code>:<\/p>\n<pre><code class=\"scala\">def factorial: Nat =&gt; Nat =   foldFix[\u03bc][Option][(Nat, Nat)]{     _.fold((one, one))((n, fact) =&gt; succ(n) -&gt; fact * n)   } andThen {_._2}  factorial(toNat(5)).toInt \/\/ 120<\/code><\/pre>\n<p>\u041d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0438\u0433\u0440\u0430\u044e\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u0443\u044e \u0440\u043e\u043b\u044c \u0432 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435 \u0432 \u0446\u0435\u043b\u043e\u043c \u0438 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438. \u041e\u043d\u0438 \u043e\u043b\u0438\u0446\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0442 \u0438\u0434\u0435\u044e <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%B8%D0%BD%D0%B4%D1%83%D0%BA%D1%86%D0%B8%D1%8F\" rel=\"noopener noreferrer nofollow\">\u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u0434\u0443\u043a\u0446\u0438\u0438<\/a> \u2013 <em>\u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0433\u043e<\/em> \u0432\u044b\u0432\u043e\u0434\u0430 \u043d\u043e\u0432\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0438\u0437 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445. \u0412\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0438\u043c\u0435\u044e\u0442 \u0434\u0435\u043b\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b, \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u044b. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0441\u0435 \u0442\u0438\u043f\u044b \u044d\u0442\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441\u0447\u0451\u0442\u043d\u044b \u2013 \u043e\u043d\u0438 \u0432\u0441\u0435 <em>\u0438\u0437\u043e\u043c\u043e\u0440\u0444\u043d\u044b \u043d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u0430\u043c<\/em>!<\/p>\n<details class=\"spoiler\">\n<summary>\u00ab\u041d\u0435\u0441\u0447\u0451\u0442\u043d\u044b\u0435\u00bb \u0442\u0438\u043f\u044b<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438, \u043c\u043e\u0436\u043d\u043e \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u00ab\u043d\u0435\u0441\u0447\u0451\u0442\u043d\u044b\u0435\u00bb \u0442\u0438\u043f\u044b, \u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0445 \u0441\u0447\u0451\u0442\u043d\u044b\u0445 \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u0432. \u0420\u0430\u0431\u043e\u0442\u0430\u044f \u0441 \u0442\u0435\u0440\u043c\u0430\u043c\u0438 \u00ab\u043d\u0435\u0441\u0447\u0451\u0442\u043d\u044b\u0445\u00bb \u0442\u0438\u043f\u043e\u0432 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u0439\u0434\u0451\u0442\u0441\u044f \u0441\u043f\u043e\u0441\u043e\u0431 \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u044c \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0438\u0445 \u043a \u0441\u0447\u0451\u0442\u043d\u044b\u043c \u043f\u043e\u0434\u0442\u0438\u043f\u0430\u043c.<\/p>\n<\/div>\n<\/details>\n<p><a class=\"anchor\" name=\"row_decompose\" id=\"row_decompose\"><\/a><\/p>\n<h2>\u0420\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0440\u044f\u0434<\/h2>\n<p>\u0420\u0430\u043d\u0435\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u044b\u043b \u0432\u044b\u0440\u0430\u0436\u0435\u043d \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443  \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u0442\u0438\u043f\u043e\u0432 <code>OptCell<\/code>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\begin{align}OptCell[A][X] &amp;\\cong 1 + A \\times X,\\\\List[A] &amp;= \\mu[OptCell[A]]\\\\\\end{align}\" alt=\"\\begin{align}OptCell[A][X] &amp;\\cong 1 + A \\times X,\\\\List[A] &amp;= \\mu[OptCell[A]]\\\\\\end{align}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/605\/138\/fc3\/605138fc32d74b56da2cbf012b349fa8.svg\" width=\"265\" height=\"49\"\/><\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c <code>\u03bc<\/code> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b\u0441\u044f \u0432 \u0441\u0442\u0438\u043b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0439, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0440\u044b\u0442\u044c \u00ab\u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0441\u0435\u0431\u044f\u00bb. \u041d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"List[A] = 1 + A \\times List[A]\\\\\" alt=\"List[A] = 1 + A \\times List[A]\\\\\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/832\/75e\/9e6\/83275e9e661a92fdd0f53590d2b0599c.svg\" width=\"698\" height=\"41\"\/><\/p>\n<p>\u042d\u0442\u043e \u043d\u0435 \u0447\u0442\u043e \u0438\u043d\u043e\u0435, \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u00ab\u0444\u0443\u043d\u043a\u0446\u0438\u0438\u00bb <code>List[A]<\/code>. \u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u043f\u0440\u0430\u0432\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c, \u0448\u0430\u0433 \u0437\u0430 \u0448\u0430\u0433\u043e\u043c \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0432\u043c\u0435\u0441\u0442\u043e <code>List[A]<\/code> \u0432\u0441\u0451 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u0423 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u0442\u0430\u043a\u0430\u044f \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"List[A] = 1 + A + A \\times A + A \\times A \\times A + \\ldots = \\sum_{n=0}^\\infty A^n\\\\\" alt=\"List[A] = 1 + A + A \\times A + A \\times A \\times A + \\ldots = \\sum_{n=0}^\\infty A^n\\\\\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/873\/57c\/eb3\/87357ceb3abec25e1071faca91ed1a49.svg\" width=\"698\" height=\"65\"\/><\/p>\n<p>\u0422\u0440\u0430\u043a\u0442\u0443\u0435\u0442\u0441\u044f \u044d\u0442\u0430 \u0441\u0443\u043c\u043c\u0430 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e: \u0441\u043f\u0438\u0441\u043e\u043a \u2013 \u044d\u0442\u043e \u043b\u0438\u0431\u043e \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u043b\u0438\u0431\u043e \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u043b\u0438\u0431\u043e \u0438\u0445 \u043f\u0430\u0440\u0430, \u0442\u0440\u043e\u0439\u043a\u0430 \u0438 \u0442.\u0434. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442, \u043a\u0430\u043a \u0441\u0443\u043c\u043c\u0430 \u0447\u043b\u0435\u043d\u043e\u0432 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0438\u0438, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0443\u044e \u0444\u043e\u0440\u043c\u0443\u043b\u0443:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"List[A] = \\frac1{1 - A}\\\\\" alt=\"List[A] = \\frac1{1 - A}\\\\\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c6e\/752\/9b6\/c6e7529b68b36876e3110c32e9736043.svg\" width=\"698\" height=\"52\"\/><\/p>\n<p>\u0422\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0440\u0435\u0448\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435. \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0442\u0438\u043f\u044b \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0430\u0442\u044c \u043d\u043e \u0438 \u0434\u0435\u043b\u0438\u0442\u044c \u0438 \u0432\u044b\u0447\u0438\u0442\u0430\u0442\u044c!<\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0438 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0432\u0435\u0434\u044c \u0441\u0430\u043c\u043e \u043f\u043e\u043d\u044f\u0442\u0438\u0435 \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u0442 <em>\u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443<\/em> \u2013 \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044e \u043d\u0430\u0439\u0442\u0438 \u0442\u0430\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044e \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0435\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432 \u0442\u0438\u043f\u043e\u0432 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0441\u0443\u043c\u043c\u044b, \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438 \u0432\u043e\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432 \u0441\u0442\u0435\u043f\u0435\u043d\u044c.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u0442\u0430\u043a\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u0430\u0442\u044c \u0441\u043a\u043e\u0440\u0435\u0435 \u043a\u0430\u043a <em>\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/em> \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0440\u044f\u0434. \u042d\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u0451\u043c \u0432 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435. \u0422\u0430\u043a\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c \u0438 \u0434\u0430\u0436\u0435 \u0443\u043f\u0440\u043e\u0449\u0430\u0442\u044c, \u043f\u043e\u043b\u0443\u0447\u0430\u044f \u0432 \u0438\u0442\u043e\u0433\u0435 \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u043d\u043e\u0432\u044b\u0435 \u0440\u044f\u0434\u044b.<\/p>\n<p>\u0418 \u0442\u0430\u043a\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435\u043c:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"Tree[A] = 1 + A \\times Tree[A] \\times Tree[A]\\\\\" alt=\"Tree[A] = 1 + A \\times Tree[A] \\times Tree[A]\\\\\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/059\/6d6\/af7\/0596d6af774fab64d68145e0bc6634eb.svg\" width=\"698\" height=\"41\"\/><\/p>\n<p>\u0415\u0433\u043e \u00ab\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c\u00bb \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0439 \u0440\u044f\u0434:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"Tree[A] = 1 + A + 2 A^2 + 5 A^3 + 14 A^4 + \\ldots\\\\\" alt=\"Tree[A] = 1 + A + 2 A^2 + 5 A^3 + 14 A^4 + \\ldots\\\\\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/840\/e7a\/cd5\/840e7acd536029116a861ffd1f758303.svg\" width=\"698\" height=\"44\"\/><\/p>\n<p>\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u043f\u0435\u0440\u0435\u0434 <img decoding=\"async\" class=\"formula inline\" source=\"A^n\" alt=\"A^n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/df\/df3\/df307b6040f0f035f0655c545646ce55.svg\" width=\"auto\" height=\"auto\"\/> \u2013 \u044d\u0442\u043e \u0442\u0438\u043f\u044b \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u041e\u043d\u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u00ab\u0444\u043e\u0440\u043c\u00bb \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 <img decoding=\"async\" class=\"formula inline\" source=\"n\" alt=\"n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7b\/7b8\/7b8b965ad4bca0e41ab51de7b31363a1.svg\" width=\"auto\" height=\"auto\"\/> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 <img decoding=\"async\" class=\"formula inline\" source=\"A\" alt=\"A\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7f\/7fc\/7fc56270e7a70fa81a5935b72eacbe29.svg\" width=\"auto\" height=\"auto\"\/>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0432\u0443\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043e\u0434\u0438\u043d \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u0440\u043d\u0435 (\u0438\u043b\u0438 \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0435, \u0441\u043c\u043e\u0442\u0440\u044f \u043a\u0430\u043a \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c)), \u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043b\u0435\u0432\u0430 \u0438\u043b\u0438 \u0441\u043f\u0440\u0430\u0432\u0430 \u2013 \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430. \u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u043e\u0440\u043c \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432 \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430\u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0446\u0435\u043b\u044b\u0445 \u0447\u0435\u0442\u044b\u0440\u043d\u0430\u0434\u0446\u0430\u0442\u044c.<\/p>\n<p><em>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0449\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f<\/em> \u044d\u0442\u043e\u0433\u043e \u0440\u044f\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0440\u0430\u0434\u0438\u043a\u0430\u043b:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"Tree[A] = \\frac{1-\\sqrt{1-4A}}{2A}\\\\\" alt=\"Tree[A] = \\frac{1-\\sqrt{1-4A}}{2A}\\\\\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/87d\/79c\/a9d\/87d79ca9da96512cc6ccf2379816a41c.svg\" width=\"698\" height=\"57\"\/><\/p>\n<details class=\"spoiler\">\n<summary>\u0412\u0442\u043e\u0440\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412\u0442\u043e\u0440\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0441\u043e \u0437\u043d\u0430\u043a\u043e\u043c <img decoding=\"async\" class=\"formula inline\" source=\"+\" alt=\"+\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/26\/26b\/26b17225b626fb9238849fd60eabdf60.svg\" width=\"auto\" height=\"auto\"\/> \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u0440\u043d\u0435\u043c \u0438\u0437 \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u043d\u0442\u0430 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u044b\u043c. \u0420\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u00ab\u043c\u0430\u043b\u043e\u0441\u0442\u044c\u00bb <img decoding=\"async\" class=\"formula inline\" source=\"A\" alt=\"A\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7f\/7fc\/7fc56270e7a70fa81a5935b72eacbe29.svg\" width=\"auto\" height=\"auto\"\/>, \u043d\u043e \u043f\u0440\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"A \\rightarrow 0\" alt=\"A \\rightarrow 0\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e4\/e4a\/e4a4e78a5b74e4bcee9da1ed7949865e.svg\" width=\"auto\" height=\"auto\"\/> \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u0435\u043c\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u00ab\u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u044c\u00bb, \u0438 \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0439 \u0440\u044f\u0434: <img decoding=\"async\" class=\"formula inline\" source=\"1\/A - 1 - A - 2 A^2 - 5 A^3 + \\ldots\" alt=\"1\/A - 1 - A - 2 A^2 - 5 A^3 + \\ldots\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/d8\/d88\/d8811f87906585acb04ce7b19bb52910.svg\" width=\"auto\" height=\"auto\"\/><\/p>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0435\u0440\u0435\u0432\u043e \u0441 \u043f\u044f\u0442\u044c\u044e \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0432\u0435\u0442\u0432\u044f\u043c\u0438 \u0432 \u0443\u0437\u043b\u0435, \u0442\u043e \u0442\u043e\u0447\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%90%D0%B1%D0%B5%D0%BB%D1%8F_%D0%BE_%D0%BD%D0%B5%D1%80%D0%B0%D0%B7%D1%80%D0%B5%D1%88%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B2_%D1%80%D0%B0%D0%B4%D0%B8%D0%BA%D0%B0%D0%BB%D0%B0%D1%85\" rel=\"noopener noreferrer nofollow\">\u043d\u0435 \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c<\/a>. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0440\u044f\u0434 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e, \u043a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430.<\/p>\n<p>\u0418 \u0432\u0441\u0451 \u0436\u0435, \u043d\u0435 \u0432\u0441\u0435 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c \u0432 \u0440\u044f\u0434. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0430\u043a\u043e\u0439 \u0442\u0438\u043f:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\begin{eqnarray}UMagma[A] &amp;=&amp; A + 1 + UMagma[A] \\times UMagma[A]\\\\UMagma[A] &amp;=&amp; \\frac12 \\left(1 \\pm \\sqrt{-4 A - 3}\\right)\\\\\\end{eqnarray}\" alt=\"\\begin{eqnarray}UMagma[A] &amp;=&amp; A + 1 + UMagma[A] \\times UMagma[A]\\\\UMagma[A] &amp;=&amp; \\frac12 \\left(1 \\pm \\sqrt{-4 A - 3}\\right)\\\\\\end{eqnarray}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d51\/c21\/143\/d51c21143c471299ab86a34cf589ab37.svg\" width=\"447\" height=\"68\"\/><\/p>\n<p>\u041f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f <img decoding=\"async\" class=\"formula inline\" source=\"UMagma[A]\" alt=\"UMagma[A]\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/87\/872\/8724ff56f91ec6744e71cfc1526b94dc.svg\" width=\"auto\" height=\"auto\"\/> \u0432 \u0440\u044f\u0434 \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0435 \u0435\u0433\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b! \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u043f\u0435\u0440\u0451\u0434 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 <img decoding=\"async\" class=\"formula inline\" source=\"A\" alt=\"A\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7f\/7fc\/7fc56270e7a70fa81a5935b72eacbe29.svg\" width=\"auto\" height=\"auto\"\/> \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0444\u043e\u0440\u043c \u0434\u0435\u0440\u0435\u0432\u0430 \u0442\u0430\u043a\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u041f\u0440\u0438\u0447\u0451\u043c, \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u0442\u0438\u043f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0438 \u043d\u0435 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439:<\/p>\n<pre><code class=\"scala\">final case class UMagma[A](value: A `Either` Option[(UMagma[A], UMagma[A])])  def leaf[A](a: A) = UMagma(Left(a)) def twig[A] = UMagma[A](Right(None)) def node[A](left: UMagma[A], right: UMagma[A]) = UMagma(Right(Some(left, right)))  val someTree = node( \/\/     \/\\   leaf(42),          \/\/   42  \\   twig               \/\/        \u2205 )  val sameTree = node( \/\/     \/\\   leaf(42),          \/\/   42  \\   node(              \/\/       \/\\    \/\/ \u2205 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e.     twig,            \/\/      \u2205  \\   \/\/ \u0432\u043e\u0442 \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442     twig             \/\/          \u2205  \/\/ \u0432\u0441\u0435 \u044d\u0442\u0438 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u044b    )                                 \/\/ \u0434\u043b\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 A )<\/code><\/pre>\n<p>\u041d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u043b\u044e\u0431\u044b\u0445 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432 \u0442\u0438\u043f\u043e\u0432 (\u00ab\u0430\u043b\u0433\u0435\u0431\u0440\u0430\u0438\u0447\u0435\u0441\u043a\u0438\u0435\u00bb \u0442\u0438\u043f\u044b, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0438\u0437 \u0441\u0443\u043c\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439) \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0434\u0435\u0440\u0435\u0432\u044c\u044f. \u0412\u044b\u0440\u043e\u0436\u0434\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u043b\u0443\u0447\u0430\u044f\u043c\u0438 \u0442\u0430\u043a\u0438\u0445 \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438 \u0441\u043f\u0438\u0441\u043a\u0438 (\u0434\u0435\u0440\u0435\u0432\u043e \u0441 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0442\u043a\u043e\u0439), \u0438 \u0434\u0430\u0436\u0435 \u043d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"Nat \\cong List[Unit]\" alt=\"Nat \\cong List[Unit]\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/735\/7a3\/092\/7357a309280e7c5a7892ba0697e9429a.svg\" width=\"147\" height=\"22\"\/><\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u043e\u0441\u0442\u043e<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"Nat = 1 + Nat\" alt=\"Nat = 1 + Nat\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/21b\/e29\/f21\/21be29f2167a3a15b8523c0bf72127f7.svg\" width=\"127\" height=\"18\"\/><\/p>\n<p>\u0422\u0438\u043f \u043d\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d, \u0438 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u2013 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u044c)).<\/p>\n<p>\u0427\u0442\u043e \u0436\u0435 \u0434\u043e \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432 \u0442\u0438\u043f\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044b (\u0442\u0438\u043f\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439), \u0442\u043e \u0442\u0443\u0442 \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0442\u0430\u043a\u0430\u044f. \u0415\u0441\u043b\u0438 \u0442\u0438\u043f-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0445\u043e\u0442\u044f \u0431\u044b \u0440\u0430\u0437 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0442\u043e, \u043a\u0430\u043a \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u0440\u0430\u043d\u0435\u0435 (\u0441\u043c. \u0432 \u043a\u043e\u043d\u0446\u0435 <a href=\"https:\/\/habr.com\/ru\/articles\/863324\/#type_fixed_point\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430<\/a>), \u0442\u0430\u043a\u0430\u044f \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u0430 \u0442\u043e\u0447\u043a\u0430 \u043d\u0435\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u0430 \u0438 \u0441 \u0435\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0412 \u043f\u0440\u043e\u0447\u0438\u0445 \u0436\u0435 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u0442\u0438\u043f-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <img decoding=\"async\" class=\"formula inline\" source=\"A^{Int}\" alt=\"A^{Int}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/3f\/3f5\/3f5fb5bc43c36c9009e905f2ad791443.svg\" width=\"auto\" height=\"auto\"\/> (\u00ab\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e\u0439\u00bb \u0442\u0438\u043f), \u0442\u043e \u0442\u0438\u043f \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u0440\u0430\u043d\u0435\u0435, \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u0447\u0451\u0442\u043d\u044b\u043c, \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u043d\u044b\u043c <code>Nat<\/code>. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u0432\u0441\u0435 \u0441\u0442\u0435\u043f\u0435\u043d\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a <em>\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f<\/em> \u0442\u0438\u043f\u0430-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0441 \u0441\u0430\u043c\u0438\u043c \u0441\u043e\u0431\u043e\u0439. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u0442\u0430\u043a\u0438\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0435 \u0434\u0435\u0440\u0435\u0432\u044c\u044f, \u043f\u0440\u043e\u0441\u0442\u043e \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0432\u0435\u0442\u0432\u0435\u0439 \u0432 \u0443\u0437\u043b\u0430\u0445.<\/p>\n<p><a class=\"anchor\" name=\"type-derivatives\" id=\"type-derivatives\"><\/a><\/p>\n<h2>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435 \u043e\u0442 \u0442\u0438\u043f\u043e\u0432<\/h2>\n<p>\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u044b\u0435 \u0442\u0438\u043f\u044b <code>F[+_]<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0434\u043b\u044f \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 (\u0441\u043c. <a href=\"https:\/\/habr.com\/ru\/articles\/807495\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e<\/a> \u0446\u0438\u043a\u043b\u0430). \u0422\u0430\u043a\u0438\u0435 \u0442\u0438\u043f\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u043d\u0435\u043a\u0438\u0439 <em>\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439<\/em>, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0449\u0438\u0445\u0441\u044f \u043d\u0430\u0434 \u00ab\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0432\u043d\u0443\u0442\u0440\u0438\u00bb \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u041d\u043e \u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u00ab\u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430\u00bb <code>F[A] =&gt; B<\/code>. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0432\u0430\u0436\u043d\u043e \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u00ab\u0445\u0440\u0430\u043d\u0438\u043c\u043e\u0433\u043e\u00bb \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>F[A] =&gt; A<\/code>. \u042d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u0435\u0439\u0447\u0430\u0441 \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435.<\/p>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043b\u0438 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u00ab\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f\u00bb \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 <code>F[A]<\/code> \u0432 \u0432\u0438\u0434\u0435 \u043d\u0435\u043a\u043e\u0433\u043e \u0442\u0438\u043f\u0430 <code>\u2202[F][A]<\/code>. \u0422\u043e\u0433\u0434\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u043a \u043f\u0430\u0440\u0443 <code>(\u2202[F][A], A)<\/code>. \u041c\u044b \u043a\u0430\u043a \u0431\u044b \u00ab\u0432\u044b\u043a\u0430\u043b\u044b\u0432\u0430\u0435\u043c\u00bb \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>A<\/code> \u0438\u0437 <code>F[A]<\/code>.<\/p>\n<p>\u0412 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e:<\/p>\n<pre><code class=\"scala\">type Const[X] = SomeType type Id   [X] = X  summon[\u2202[Const][X] =:= Nothing] \/\/ 0    (Nothing, A) \u2245 Nothing summon[\u2202[Id   ][X] =:= Unit   ] \/\/ 1    (Unit, A) \u2245 A = F[A]<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 <code>Id<\/code> \u0438\u043c\u0435\u0435\u043c \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u2013 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043d\u0435 \u043d\u0435\u0441\u0451\u0442 \u043d\u0438\u0447\u0435\u0433\u043e, \u043a\u0440\u043e\u043c\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u0444\u0430\u043a\u0442\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 <code>A<\/code>. \u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0442\u0438\u043f <code>Const[X]<\/code> \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432 \u0442\u0435\u043b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>X<\/code>, \u0437\u043d\u0430\u0447\u0438\u0442 \u043e\u043d \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0438\u043a\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0442\u043e \u0434\u043b\u044f \u0441\u0443\u043c\u043c\u044b \u0442\u0438\u043f\u043e\u0432 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432\u044b\u0431\u043e\u0440, \u0438\u0437 \u043a\u0430\u043a\u043e\u0433\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0451\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"scala\">infix type  +[A,    B   ] = A `Either` B infix type ++[F[_], G[_]] = [X] =&gt;&gt; F[X] + G[X]  summon[\u2202[F ++ G][X] =:= \u2202[F][X] + \u2202[G][X]]  summon[\u2202[Id ++ (Const ++ Id)][X] =:= Unit + Unit] \/\/    \u2202\u2093[X  + (SomeType + X)]    =:=   1  +  1   \u2245 Boolean  - \u0442\u0438\u043f \u0441 \u0434\u0432\u0443\u043c\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438, \u043c\u0435\u0441\u0442\u043e\u043c \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f X<\/code><\/pre>\n<p>\u0421 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0442\u0438\u043f\u043e\u0432 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043f\u043e\u0445\u043e\u0436\u0430\u044f \u2013 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u0432\u044b\u0431\u043e\u0440, \u0438\u0437 \u043a\u0430\u043a\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044f \u0434\u043e\u0441\u0442\u0430\u0451\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u0443\u043c\u043c\u0430 \u0442\u0438\u043f\u043e\u0432. \u041f\u0440\u0438\u0447\u0451\u043c, \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0433\u043e, \u043f\u043e\u043c\u0438\u043c\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044f, \u0431\u0443\u0434\u0435\u0442 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044c, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u043b\u0438 (\u0432\u0435\u0434\u044c \u044d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430):<\/p>\n<pre><code class=\"scala\">infix type  \u00d7[A,    B   ] = (A, B) infix type \u00d7\u00d7[F[_], G[_]] = [X] =&gt;&gt; F[X] \u00d7 G[X]  summon[\u2202[F \u00d7\u00d7 G]][X] =:= \u2202[F][X] \u00d7 G[X] + F[X] \u00d7 \u2202[G][X]]  summon[\u2202[Id \u00d7\u00d7 (Const ++ Id) ][X] =:= SomeType + X + X] summon[\u2202[Id \u00d7\u00d7 Id \u00d7\u00d7 Id \u00d7\u00d7 Id][X] =:= (X \u00d7 X \u00d7 X) + X \u00d7 (X \u00d7 X + X \u00d7 (X + X))] \/\/     \u2202[ X  \u00d7  X  \u00d7  X  \u00d7  X]     \u2245  4 \u00d7 X \u00d7 X \u00d7 X<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u00ab\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f\u00bb \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>X<\/code> \u0432 \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u043c\u0435\u0441\u0442\u043d\u043e\u043c \u043a\u043e\u0440\u0442\u0435\u0436\u0435 <code>(X, X, X, X)<\/code> \u2013 \u044d\u0442\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>(X, X, X)<\/code> \u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0435\u0449\u0451 \u0438 \u0442\u0438\u043f <code>4<\/code>, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0432 \u043a\u0430\u043a\u043e\u0439 \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0440\u0442\u0435\u0436\u0430 \u043b\u0435\u0436\u0430\u043b <em>\u043d\u0430\u0448<\/em> <code>X<\/code>.<\/p>\n<p>Deja vu\u2026 \u041d\u043e \u0438 \u044d\u0442\u043e \u0435\u0449\u0451 \u043d\u0435 \u0432\u0441\u0451. \u0422\u0430\u043a \u0436\u0435 \u0438\u0437 \u043e\u0431\u0449\u0438\u0445 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u043e\u0438\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c\u043e\u0433\u043e \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438 \u00ab\u0446\u0435\u043f\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e\u00bb \u0434\u043b\u044f \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432. \u041f\u0440\u0438 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0443 \u043d\u0430\u0441 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u044b \u043e\u0442 \u043e\u0431\u043e\u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432:<\/p>\n<pre><code class=\"scala\">summon[\u2202[F \u2218 G]][X] =:= \u2202[F][G[X]] \u00d7 \u2202[G][X]]  type Prod1[X] = X \u00d7 X type Prod2[X] = X \u00d7 SomeType  summon[\u2202[Prod1 \u2218 Prod2][X]  =:= (X \u00d7 SomeType + X \u00d7 SomeType) \u00d7 SomeType]<\/code><\/pre>\n<p>\u0412\u044b\u043f\u0438\u0448\u0435\u043c \u044d\u0442\u0438 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0432 \u0432\u0438\u0434\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u043e\u0440\u043c\u0443\u043b:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\begin{eqnarray}\\partial_A Const &amp;=&amp; 0 \\hspace{2cm} \\text{\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 $Const$ \u043d\u0435 \u0441\u043e\u0434\u0440\u0435\u0436\u0438\u0442 \u0442\u0438\u043f\u043e\u0432\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 $A$}\\\\\\partial_A A &amp;=&amp; 1\\\\\\partial_A \\left(F[A] + G[A]\\right) &amp;=&amp; \\partial_A F[A] + \\partial_A G[A]\\\\\\partial_A \\left(F[A] \\times G[A]\\right) &amp;=&amp; G[A] \\times \\partial_A F[A] + F[A] \\times \\partial_A G[A]\\\\\\partial_A \\left(F[G[A]]\\right) &amp;=&amp; \\partial_X F[X]_{{}_{X = G[A]}} \\times \\partial_A G[A]\\\\\\end{eqnarray}\" alt=\"\\begin{eqnarray}\\partial_A Const &amp;=&amp; 0 \\hspace{2cm} \\text{\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 $Const$ \u043d\u0435 \u0441\u043e\u0434\u0440\u0435\u0436\u0438\u0442 \u0442\u0438\u043f\u043e\u0432\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 $A$}\\\\\\partial_A A &amp;=&amp; 1\\\\\\partial_A \\left(F[A] + G[A]\\right) &amp;=&amp; \\partial_A F[A] + \\partial_A G[A]\\\\\\partial_A \\left(F[A] \\times G[A]\\right) &amp;=&amp; G[A] \\times \\partial_A F[A] + F[A] \\times \\partial_A G[A]\\\\\\partial_A \\left(F[G[A]]\\right) &amp;=&amp; \\partial_X F[X]_{{}_{X = G[A]}} \\times \\partial_A G[A]\\\\\\end{eqnarray}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/aec\/225\/e8f\/aec225e8f85e84f3991f64ea5c9f9566.svg\" width=\"655\" height=\"128\"\/><\/p>\n<p>\u0427\u0438\u0441\u043b\u0430 (<code>0<\/code>, <code>1<\/code>, <code>2<\/code> \u0438 \u0434\u0440\u0443\u0433\u0438\u0435) \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u0442\u0438\u043f\u044b \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u00ab\u043e\u0431\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439\u00bb (<code>Nothing<\/code>, <code>Unit<\/code>, <code>Boolean<\/code> \u0438 \u0442.\u0434.). \u0415\u0449\u0451 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043d\u0430\u043c \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u043e\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0438\u0437 \u0442\u0435\u0445 \u0436\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0439:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\partial_A\\; F[G[A],\\; H[A]] =\\left.\\partial_G\\; F[G,\\; H[A]]\\right._{{}_{G=G[A]}} \\times \\partial_A G[A] +\\left.\\partial_H\\; F[G[A],\\; H]\\right._{{}_{H=H[A]}} \\times \\partial_A H[A]\" alt=\"\\partial_A\\; F[G[A],\\; H[A]] =\\left.\\partial_G\\; F[G,\\; H[A]]\\right._{{}_{G=G[A]}} \\times \\partial_A G[A] +\\left.\\partial_H\\; F[G[A],\\; H]\\right._{{}_{H=H[A]}} \\times \\partial_A H[A]\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0e4\/c20\/71a\/0e4c2071a2e387ec2f217e60a333695a.svg\" width=\"703\" height=\"28\"\/><\/p>\n<p>\u0412\u0441\u0435 \u044d\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0442 \u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u044b \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 <em>\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u043c\u0438 \u043e\u0442 \u0442\u0438\u043f\u043e\u0432<\/em>.<\/p>\n<p>\u041d\u043e \u043d\u0430 \u044d\u0442\u0443 \u043a\u0430\u0440\u0442\u0438\u043d\u0443 \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0438 \u043f\u043e-\u0438\u043d\u043e\u043c\u0443. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 \u0432\u043c\u0435\u0441\u0442\u0435 \u043d\u0435\u0441\u0443\u0442 <em>\u0432\u0441\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e<\/em> \u0434\u043b\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f, \u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0443\u0447\u0435\u0441\u0442\u044c, \u0447\u0442\u043e \u0434\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 <code>F[_]<\/code> \u043c\u043e\u0433\u0443\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>F[A]<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>A<\/code> (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f <code>Option[A]<\/code> \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 <code>None: Option[Nothing]<\/code>). \u0421 \u0443\u0447\u0451\u0442\u043e\u043c \u0432\u044b\u0448\u0435\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e, \u0434\u043b\u044f <em>\u043b\u044e\u0431\u044b\u0445<\/em> (\u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e) <code>F[_]<\/code> \u0438 <code>A<\/code> \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u0438\u0437\u043c:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"F[A] \\cong \\partial_A F[A] \\times A + F[0] \\tag{DiffIso} \\label{DiffIso}\" alt=\"F[A] \\cong \\partial_A F[A] \\times A + F[0] \\tag{DiffIso} \\label{DiffIso}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/949\/1f0\/ae6\/9491f0ae64b5ad98edac4c19d7ccc459.svg\" width=\"698\" height=\"23\"\/><\/p>\n<p>\u0418\u0437\u0432\u043b\u0435\u043a\u0430\u044f \u043a\u0430\u043a\u0438\u043c-\u043b\u0438\u0431\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0438\u0437 <code>F[A]<\/code> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>A<\/code> \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u043c, <em>\u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/em>! \u0422\u0430\u043a \u0447\u0442\u043e \u043d\u0430 \u044d\u0442\u043e\u0442 \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u0438\u0437\u043c \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u043a \u043d\u0430 \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 <code>\u2202[F][A]<\/code>) \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 <code>F[A]<\/code>), \u043d\u043e \u0438 \u043a\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e <em>\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441 \u043e\u0441\u0442\u0430\u0442\u043a\u043e\u043c<\/em>.<\/p>\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c <img decoding=\"async\" class=\"formula inline\" source=\"18\" alt=\"18\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/6f\/6f4\/6f4922f45568161a8cdf4ad2299f6d23.svg\" width=\"auto\" height=\"auto\"\/> \u043d\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"5\" alt=\"5\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e4\/e4d\/e4da3b7fbbce2345d7772b0674a318d5.svg\" width=\"auto\" height=\"auto\"\/>. \u0414\u0435\u043b\u0438\u043c\u043e\u0435 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u0438: <img decoding=\"async\" class=\"formula inline\" source=\"18=2\\times3\\times3\" alt=\"18=2\\times3\\times3\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/34\/34f\/34f56bc8fd25c95491df6c5a583ce9cc.svg\" width=\"auto\" height=\"auto\"\/>. \u0412 \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0447\u0438\u0441\u043b\u043e <img decoding=\"async\" class=\"formula inline\" source=\"5\" alt=\"5\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e4\/e4d\/e4da3b7fbbce2345d7772b0674a318d5.svg\" width=\"auto\" height=\"auto\"\/>, \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0435\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 <img decoding=\"async\" class=\"formula inline\" source=\"18\" alt=\"18\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/6f\/6f4\/6f4922f45568161a8cdf4ad2299f6d23.svg\" width=\"auto\" height=\"auto\"\/> \u0440\u0430\u0432\u0435\u043d <img decoding=\"async\" class=\"formula inline\" source=\"0\" alt=\"0\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/cf\/cfc\/cfcd208495d565ef66e7dff9f98764da.svg\" width=\"auto\" height=\"auto\"\/>. \u0412 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, <img decoding=\"async\" class=\"formula inline\" source=\"18\" alt=\"18\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/6f\/6f4\/6f4922f45568161a8cdf4ad2299f6d23.svg\" width=\"auto\" height=\"auto\"\/> \u0431\u0435\u0437 <img decoding=\"async\" class=\"formula inline\" source=\"5\" alt=\"5\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e4\/e4d\/e4da3b7fbbce2345d7772b0674a318d5.svg\" width=\"auto\" height=\"auto\"\/> \u2013 \u044d\u0442\u043e \u0442\u0435 \u0436\u0435 <img decoding=\"async\" class=\"formula inline\" source=\"18_{5=0}=18\" alt=\"18_{5=0}=18\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/94\/948\/948146b3246135c85d7b8e5856e28b8a.svg\" width=\"auto\" height=\"auto\"\/>. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, <img decoding=\"async\" class=\"formula inline\" source=\"18 = 0 \\times 5 + 18\" alt=\"18 = 0 \\times 5 + 18\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9e\/9e3\/9e3336ddee4874555930308a1c1fecb5.svg\" width=\"auto\" height=\"auto\"\/>. \u0414\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 \u0442\u0438\u043f\u0430\u043c\u0438 \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u043d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b, \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u0442\u0443 \u0447\u0430\u0441\u0442\u044c \u0434\u0435\u043b\u0438\u043c\u043e\u0433\u043e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442-\u0442\u0430\u043a\u0438 \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043d\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"5\" alt=\"5\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e4\/e4d\/e4da3b7fbbce2345d7772b0674a318d5.svg\" width=\"auto\" height=\"auto\"\/>. \u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u043e \u0442\u0435\u043c \u0436\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c \u043f\u043e\u0434\u0435\u043b\u0438\u043c \u043d\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"3\" alt=\"3\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/ec\/ecc\/eccbc87e4b5ce2fe28308fd9f2a7baf3.svg\" width=\"auto\" height=\"auto\"\/>, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 <img decoding=\"async\" class=\"formula inline\" source=\"(2\\times3\\times3) \/ 3 = 2\\times3 = 6\" alt=\"(2\\times3\\times3) \/ 3 = 2\\times3 = 6\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/df\/df8\/df8ed415c04df9cb9f87ff958be5caec.svg\" width=\"auto\" height=\"auto\"\/>, \u0430 \u043e\u0441\u0442\u0430\u0442\u043e\u043a <img decoding=\"async\" class=\"formula inline\" source=\"18_{3=0} = 2\\times0\\times3 = 0\" alt=\"18_{3=0} = 2\\times0\\times3 = 0\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/04\/04d\/04d0613eb908ee87940744df63b16cd8.svg\" width=\"auto\" height=\"auto\"\/>, \u0442\u043e \u0435\u0441\u0442\u044c <img decoding=\"async\" class=\"formula inline\" source=\"18=6\\times3+0\" alt=\"18=6\\times3+0\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/32\/329\/329d88a4869fa9e1e4005d38ec8f7423.svg\" width=\"auto\" height=\"auto\"\/>. \u0417\u0434\u0435\u0441\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0432\u0441\u0451 \u0442\u0435 \u0436\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430, \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u0440\u0430\u043d\u0435\u0435 \u0434\u043b\u044f \u0442\u0438\u043f\u043e\u0432. \u041f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0436\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430, \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e, \u0441\u043b\u043e\u0436\u043d\u0435\u0435! \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u043d\u0438\u0445 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 <em>\u043a\u043e\u043c\u043c\u0443\u0442\u0430\u0442\u0438\u0432\u043d\u043e<\/em>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u0442 \u0440\u0430\u0437\u043d\u0438\u0446\u044b, \u0433\u0434\u0435 \u0432 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"3\\times3\" alt=\"3\\times3\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/03\/035\/0354d96c50c762db44e348bf0fe7f48b.svg\" width=\"auto\" height=\"auto\"\/> \u0441\u0442\u043e\u0438\u0442 \u043d\u0443\u0436\u043d\u0430\u044f <img decoding=\"async\" class=\"formula inline\" source=\"3\" alt=\"3\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/ec\/ecc\/eccbc87e4b5ce2fe28308fd9f2a7baf3.svg\" width=\"auto\" height=\"auto\"\/>. \u041c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u043c\u044b \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 <img decoding=\"async\" class=\"formula inline\" source=\"2\\times3\" alt=\"2\\times3\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/de\/def\/defed444a5fef18f19aadf6a9cd0427f.svg\" width=\"auto\" height=\"auto\"\/>, \u043d\u043e \u0434\u0432\u043e\u0439\u043a\u0430 <em>\u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0438\u0437-\u0437\u0430 \u043d\u0435\u0440\u0430\u0437\u043b\u0438\u0447\u0438\u043c\u043e\u0441\u0442\u0438<\/em> <img decoding=\"async\" class=\"formula inline\" source=\"\\_ \\times 3\" alt=\"\\_ \\times 3\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/d3\/d35\/d35b9db4fe66ac9d6ba45f00721af12a.svg\" width=\"auto\" height=\"auto\"\/> \u0438 <img decoding=\"async\" class=\"formula inline\" source=\"3 \\times \\_\" alt=\"3 \\times \\_\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/ed\/edc\/edc8da54eb42dd001b405f8e1d4b91db.svg\" width=\"auto\" height=\"auto\"\/>. \u0412 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0434\u043b\u044f \u0442\u0438\u043f\u043e\u0432 \u044d\u0442\u043e\u0442 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043d\u0435 \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0438 \u0438\u0433\u0440\u0430\u0435\u0442 \u0432\u0430\u0436\u043d\u0443\u044e \u0440\u043e\u043b\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u00ab\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441 \u043e\u0441\u0442\u0430\u0442\u043a\u043e\u043c\u00bb \u0434\u043b\u044f \u0442\u0438\u043f\u043e\u0432 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0445.<\/p>\n<p>\u0412 Scala 3 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/docs.scala-lang.org\/scala3\/reference\/new-types\/match-types.html\" rel=\"noopener noreferrer nofollow\">\u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432<\/a>. \u042d\u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b \u0442\u0438\u043f\u043e\u0432, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u0446\u0435\u043b\u044b\u0435 <em>\u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 \u0442\u0438\u043f\u043e\u0432<\/em>. \u0418, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u043e\u0432 \u0442\u0438\u043f\u043e\u0432, \u0437\u0434\u0435\u0441\u044c \u0432 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0439 \u0442\u0438\u043f, \u043e\u0431\u0440\u0430\u0437\u0443\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e.<\/p>\n<p>\u0414\u043b\u044f \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0438\u043f\u043e\u0432.  \u0421\u043f\u0435\u0440\u0432\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043c\u0435\u0442\u0438\u0442 \u0432\u0441\u0435 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440. \u042d\u0442\u043e\u0442 \u0444\u0430\u043d\u0442\u043e\u043c\u043d\u044b\u0439 \u0442\u0438\u043f <code>Hole<\/code> \u043f\u043e-\u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439\u2026 \u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0435\u0433\u043e \u0445\u043e\u0442\u044f \u0431\u044b \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0434\u043b\u044f \u043d\u0438\u0445)). \u041d\u0443\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e \u0442\u0438\u043f\u043e\u0432 <code>DiffHolled<\/code> \u0441 \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f (\u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c) \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438 \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0438\u0437 \u044d\u0442\u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0442\u0438\u043f, \u043d\u043e, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, <code>Nothing<\/code> \u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432 \u0437\u0430\u0432\u044f\u0437\u0430\u043d \u043d\u0430 \u043f\u043e\u0434\u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044e. \u041b\u0443\u0447\u0448\u0435 \u0437\u0430\u0432\u0435\u0434\u0451\u043c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0444\u0430\u043d\u0442\u043e\u043c\u043d\u044b\u0439 \u0442\u0438\u043f <code>Zero<\/code>. \u041f\u0440\u043e\u0441\u0442\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u043a\u0443\u0447\u0435\u0440\u044f\u0432\u044b\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c, \u0441\u043e \u0436\u0443\u0442\u043a\u0438\u043c\u0438 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0438 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u043e\u0432. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0435 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 \u0442\u0438\u043f\u043e\u0432 <code>Simplify<\/code>, \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0449\u0435\u0433\u043e \u0430\u043b\u0433\u0435\u0431\u0440\u0430\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 (\u0438 \u0432 \u043f\u043e\u043c\u043e\u0449\u044c \u0435\u043c\u0443 \u0435\u0449\u0451 \u043f\u0430\u0440\u0430 \u043d\u0435\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0445 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432 \u0442\u0438\u043f\u043e\u0432). \u0418 \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0438\u043f-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>X<\/code> \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u044b\u0440\u043e\u043a <code>Hole<\/code> \u2013 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 \u0442\u0438\u043f\u043e\u0432 <code>SubstHole<\/code>.<\/p>\n<pre><code class=\"scala\">private object zero opaque type Zero = zero.type \/\/ Nothing \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 ((  private object hole opaque type Hole = hole.type \/\/ \u0442\u0438\u043f \u0434\u044b\u0440\u043a\u0438 \u0432 \u0438\u0434\u0435\u0430\u043b\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c  type SimplifiedSum[a, b] = a match   case Zero   =&gt; b   case _      =&gt; b match     case Zero =&gt; a     case _    =&gt; a + b  type SimplifiedProd[a, b] = a match   case Zero   =&gt; Zero   case Unit   =&gt; b   case _      =&gt; b match     case Zero =&gt; Zero     case Unit =&gt; a     case _    =&gt; a \u00d7 b  type Simplify[T] = T match \/\/ \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0435 \u0430\u043b\u0433\u0435\u0431\u0440\u0430\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f   case a + b  =&gt; SimplifiedSum [Simplify[a], Simplify[b]] \/\/ \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f!   case a \u00d7 b  =&gt; SimplifiedProd[Simplify[a], Simplify[b]] \/\/ \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f!   case _      =&gt; T  type DiffHolled[T] = T match \/\/ \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f   case Hole   =&gt; Unit   case a + b  =&gt; Simplify[DiffHolled[a]     +     DiffHolled[b]]  \/\/ \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f!   case a \u00d7 b  =&gt; Simplify[DiffHolled[a] \u00d7 b + a \u00d7 DiffHolled[b]]  \/\/ \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f!   case _      =&gt; Zero  type SubstHole[T, X] = T match \/\/ \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 X \u0432 \u00ab\u0434\u044b\u0440\u043a\u0443\u00bb   case Hole   =&gt; X   case a + b  =&gt; SubstHole[a, X] + SubstHole[b, X]  \/\/ \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f!   case a \u00d7 b  =&gt; SubstHole[a, X] \u00d7 SubstHole[b, X]  \/\/ \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f!   case _      =&gt; T  type \u2202[F[_]] = [X] =&gt;&gt; SubstHole[DiffHolled[F[Hole]], X] \/\/ \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/code><\/pre>\n<p>\u041b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c: \u0442\u0438\u043f\u044b <code>Simplify<\/code>, <code>DiffHolled<\/code>, <code>SubstHole<\/code> \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u043c\u0438, \u0438 \u0438\u0445 \u0434\u0430\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438, \u0432\u0440\u043e\u0434\u0435 \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0439 \u0432 <a href=\"https:\/\/habr.com\/ru\/articles\/863324\/#type_fixed_point\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438<\/a> <code>FixF<\/code> (\u0447\u0442\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0438\u0432\u0435\u043b\u043e \u0431\u044b \u043a \u043f\u0435\u0440\u0435\u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u044e). \u0412\u0435\u0434\u044c \u0434\u0430\u0436\u0435 \u00ab\u043f\u0440\u043e\u0441\u0442\u044b\u0435\u00bb \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 <em>\u0434\u0435\u0440\u0435\u0432\u044c\u044f \u0430\u043b\u0433\u0435\u0431\u0440\u0430\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/em>, \u0442\u043e \u0435\u0441\u0442\u044c \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 <em>\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438<\/em>!<\/p>\n<p>\u042d\u0442\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0434\u043b\u044f \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439 (\u043f\u0430\u0440) \u0438 <code>Either<\/code>. \u0418\u0445 \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432 \u0442\u0438\u043f\u043e\u0432. \u041d\u043e <em>\u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439<\/em> \u0442\u0438\u043f <code>\u2202[_[_]][_]<\/code> \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 <em>\u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0445<\/em> \u043c\u0435\u0442\u043e\u0434\u0430\u0445. \u041a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u0438\u0437\u043c (<strong>DiffIso<\/strong>). \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441 \u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430\u043c\u0438, \u0438 \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0432 \u044d\u0442\u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u044b \u0443\u0436\u0435, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0434\u0440\u0443\u0433\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"scala\">def decompose[F[_], X]: F[X]        =&gt; Seq[X \u00d7 \u2202[F][X]] def integrate[F[_], X]: X \u00d7 \u2202[F][X] =&gt; F[X]<\/code><\/pre>\n<p>\u041c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u0438 \u0431\u043e\u043b\u0435\u0435 \u0438\u0437\u043e\u0449\u0440\u0451\u043d\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0435\u0439 \u043f\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430\u043c \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435\u2026 \u041d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0430\u043a\u0438\u0445 <em>\u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0445<\/em> \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0437\u0430\u0434\u0430\u0447\u0430 \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 \u0442\u0438\u043f\u043e\u0432, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432, \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a <a href=\"https:\/\/docs.scala-lang.org\/scala3\/reference\/new-types\/match-types.html#dependent-typing-1\" rel=\"noopener noreferrer nofollow\">\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c<\/a>, \u0430 \u044d\u0442\u043e <em>\u0431\u0443\u0434\u0435\u0442<\/em> \u0443\u0436\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0434\u0440\u0443\u0433\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f)).<\/p>\n<p>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435 \u043e\u0442 \u0442\u0438\u043f\u043e\u0432 \u0441\u0430\u043c\u0438 \u043f\u043e \u0441\u0435\u0431\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438, \u0438 \u0438\u0445 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u00ab\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0435\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u00bb. \u0417\u043d\u0430\u0447\u0438\u0442 \u0434\u043b\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"F \\cong \\partial_X (\\partial_X F) \\times X \\times X + \\partial_X F|_{{}_{X = 0}} \\times X + F|_{{}_{X = 0}}\" alt=\"F \\cong \\partial_X (\\partial_X F) \\times X \\times X + \\partial_X F|_{{}_{X = 0}} \\times X + F|_{{}_{X = 0}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5cb\/fad\/41a\/5cbfad41abc2520a905ebc011f5fb2d3.svg\" width=\"395\" height=\"25\"\/><\/p>\n<p>\u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u0436\u0435 \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0443\u0442 \u043a \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u043c\u0443 \u0440\u044f\u0434\u0443 \u0422\u0435\u0439\u043b\u043e\u0440\u0430, \u0441 \u0444\u0430\u043a\u0442\u043e\u0440\u0430\u043c\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"1\/n!\" alt=\"1\/n!\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/c3\/c3a\/c3a130ac78bbcb8898cee85821c57f03.svg\" width=\"auto\" height=\"auto\"\/> \u0432\u0432\u0438\u0434\u0443, \u043e\u043f\u044f\u0442\u044c \u0436\u0435, \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u043d\u0435 \u043a\u043e\u043c\u043c\u0443\u0442\u0438\u0440\u0443\u0435\u0442 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044f \u0438\u0437 <img decoding=\"async\" class=\"formula inline\" source=\"X \\times \\ldots \\times X\" alt=\"X \\times \\ldots \\times X\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/75\/755\/755176e286af30098a9abd32b706c89c.svg\" width=\"auto\" height=\"auto\"\/> \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u0441\u0432\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442.<\/p>\n<p><a class=\"anchor\" name=\"exp_derivatives\" id=\"exp_derivatives\"><\/a><\/p>\n<h2>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435 \u043e\u0442 \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u043e\u0432<\/h2>\n<p>\u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0443\u043c\u043c \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u0442\u0438\u043f\u043e\u0432. \u041d\u043e \u043a\u0430\u043a \u0431\u044b\u0442\u044c \u0441 <a href=\"https:\/\/habr.com\/ru\/articles\/758542\/#types:~:text=%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B8%20%D0%BA%D0%B0%D0%BA%20%D1%82%D0%B0%D0%BA%D0%BE%D0%B2%D0%BE%D0%B9!-,%D0%AD%D0%BA%D1%81%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%86%D0%B8%D0%B0%D0%BB,-%D1%82%D0%B8%D0%BF%D0%BE%D0%B2\" rel=\"noopener noreferrer nofollow\">\u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u0430\u043c\u0438<\/a> (\u0442\u0438\u043f\u0430\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439)? \u0414\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>F[X] = Boolean =&gt; X<\/code> \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043e\u0447\u0435\u0432\u0438\u0434\u0435\u043d: <img decoding=\"async\" class=\"formula inline\" source=\"\\partial_X\\; X^2 \\cong \\partial_X\\; (X \\times X) = 2 \\times X^1\" alt=\"\\partial_X\\; X^2 \\cong \\partial_X\\; (X \\times X) = 2 \\times X^1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/bb\/bb5\/bb5ea942a1f6677914f361df6f5ace0c.svg\" width=\"auto\" height=\"auto\"\/>. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0441 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u043c\u0438: \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e <code>enum NCases<\/code> \u0441 N \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 <code>enum NMinusOneCases<\/code>, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430 \u043e\u0434\u0438\u043d \u043c\u0435\u043d\u044c\u0448\u0435. \u0414\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0443\u043b\u0430<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\partial_X\\; X^n = n \\times X^{n-1}\" alt=\"\\partial_X\\; X^n = n \\times X^{n-1}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f22\/faa\/7bf\/f22faa7bf69b532b0561709d5dcfce45.svg\" width=\"161\" height=\"23\"\/><\/p>\n<p>\u0421\u0435\u043a\u0440\u0435\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f <em>\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432<\/em> \u0432 \u0432\u0438\u0434\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f. \u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f, \u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 <code>Nat<\/code> (<img decoding=\"async\" class=\"formula inline\" source=\"\\mathbb{N}\" alt=\"\\mathbb{N}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9b\/9b3\/9b3ecd4f5f0cc174717f19cec0743fcd.svg\" width=\"auto\" height=\"auto\"\/>), <strong>\u0432\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0433\u043e \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u044d\u0442\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438<\/strong>, \u0434\u0430\u0441\u0442 \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0435\u0433\u043e \u0436\u0435, \u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u0438\u043c:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\partial_X\\; X^{\\mathbb{N}} = \\mathbb{N} \\times X^{\\mathbb{N}}\" alt=\"\\partial_X\\; X^{\\mathbb{N}} = \\mathbb{N} \\times X^{\\mathbb{N}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/819\/7ce\/1bd\/8197ce1bda670d17e0fcbf0745283ea5.svg\" width=\"149\" height=\"23\"\/><\/p>\n<p>\u0412\u044b\u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0439 \u0442\u0438\u043f \u0438\u0437 <code>Int<\/code>, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434\u043e\u0432 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u0437\u0430\u0434\u0430\u0447\u0430 \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u0430\u044f, \u0445\u043e\u0442\u044f \u0438 \u0440\u0435\u0448\u0430\u0435\u043c\u0430\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/Iltotore\/iron\" rel=\"noopener noreferrer nofollow\">iron<\/a>). \u041f\u043e\u043b\u0435\u0437\u043d\u043e\u0441\u0442\u044c \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0435\u043f\u0435\u043d\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u043a\u043e\u0439 \u00ab\u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u044f \u0435\u0434\u0438\u043d\u0438\u0446\u044b\u00bb \u0438\u0437 \u0442\u0438\u043f\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>\u0410 \u0432\u043e\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435. \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u043e\u043d\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u0430\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u044b\u043c\u0438, \u043d\u043e \u0434\u0430\u0436\u0435 \u0438\u0445 \u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0438\u043f<\/p>\n<pre><code class=\"scala\">type Class[X] = X =&gt; Boolean<\/code><\/pre>\n<p>\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0442\u0438\u043f\u0430 <code>X<\/code> \u2013 \u043e\u043d\u0438 \u043b\u0438\u0431\u043e \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0442 \u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u0443, \u043b\u0438\u0431\u043e \u043d\u0435\u0442. \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u043c \u0442\u0430\u043a\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043b\u044e\u0431\u043e\u0435 \u03bb-\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 (\u0438\u043b\u0438 \u03b7-\u043a\u043e\u043d\u0432\u0435\u0440\u0441\u0438\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430). \u0418 \u0442\u0443\u0442 \u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0437\u0430\u0433\u0432\u043e\u0437\u0434\u043a\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0442\u044c\u0441\u044f, \u0438\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u0440\u0435\u0440\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c, \u0430 \u0435\u0449\u0451 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0447\u0438\u0441\u0442\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0437\u0430\u0432\u0438\u0441\u044f\u0449\u0430\u044f \u043e\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439&#8230; \u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438, \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BB%D0%B0%D1%81%D1%81_(%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)\" rel=\"noopener noreferrer nofollow\">\u043a\u043b\u0430\u0441\u0441 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a <em>\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c<\/em>, \u0442\u0430\u043a \u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e, \u0435\u0441\u043b\u0438 \u043e\u043d \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0442\u043e\u0442\u0430\u043b\u044c\u043d\u044b\u043c (\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439).<\/p>\n<p>\u0414\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e, \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b:<\/p>\n<pre><code class=\"scala\">opaque type Set[X] &lt;: X =&gt; Boolean = X =&gt; Boolean object Set:   def empty[X]    : Set[X] = _ =&gt; false   def one[X](x: X): Set[X] = _ == x    extension[X](set: Set[X])     infix def ||(set2: Set[X]): Set[X] = x =&gt; set(x) || set2(x)     infix def &amp;&amp;(set2: Set[X]): Set[X] = x =&gt; set(x) &amp;&amp; set2(x)<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0438\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a <em>\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b<\/em> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 <code>X<\/code> \u2013 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c <code>true<\/code> \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u0435\u0445 <code>x: X<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0441\u0442\u044c \u0432 \u044d\u0442\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435. \u041c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"n\" alt=\"n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7b\/7b8\/7b8b965ad4bca0e41ab51de7b31363a1.svg\" width=\"auto\" height=\"auto\"\/>  \u2013 \u044d\u0442\u043e <em>\u043b\u044e\u0431\u043e\u0439<\/em> \u0438\u0437 \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 <code>n<\/code>-\u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439. \u0422\u0430\u043a \u043a\u0430\u043a \u0434\u043b\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043d\u0435 \u0432\u0430\u0436\u043d\u043e, \u0432 \u043a\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043e\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u043e\u0441\u044c, \u0432\u0441\u0435 \u043a\u043e\u0440\u0442\u0435\u0436\u0438 \u0441 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0431\u0443\u0434\u0443\u0442 <em>\u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b<\/em>.  \u00ab\u041c\u043e\u0449\u043d\u043e\u0441\u0442\u044c\u00bb \u0442\u0430\u043a\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u0430 \u00ab\u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438\u00bb \u043a\u043e\u0440\u0442\u0435\u0436\u0430, <em>\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a<\/em> (\u0432 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b!). \u0421\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u044e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432 \u0432\u0441\u0435\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0431\u0443\u0434\u0435\u0442:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"Set[X] = \\sum_{n=0}^{\\infty} \\frac{X^n}{n!} \\tag{Set} \\label{Set}\" alt=\"Set[X] = \\sum_{n=0}^{\\infty} \\frac{X^n}{n!} \\tag{Set} \\label{Set}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cab\/dff\/737\/cabdff73743afab9b84b2468e5e20e68.svg\" width=\"698\" height=\"56\"\/><\/p>\n<p>\u041d\u0435\u0441\u043b\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043f\u0440\u0438 \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0432\u0435\u0434\u0451\u0442 \u0441\u0435\u0431\u044f \u043a\u0430\u043a \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0442\u0430!<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\partial_X Set[X] = Set[X]\" alt=\"\\partial_X Set[X] = Set[X]\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/10f\/548\/13c\/10f54813c3cd1068f9c7eb67cc3fc917.svg\" width=\"161\" height=\"22\"\/><\/p>\n<p>\u0421\u0435\u043a\u0440\u0435\u0442 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u0430\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 <code>X =&gt; Boolean<\/code> \u0432 \u043a\u043e\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e, \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b, \u043c\u044b \u043f\u043e \u0441\u0443\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u0435\u0433\u043e \u0442\u0438\u043f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439:<\/p>\n<pre><code class=\"scala\">type Set[X] = \u03bc[SetBase[X]] type SetBase[X] = [Self] =&gt;&gt; Unit + X + Self \u00d7 Self + Self \u00d7 Self \/\/                          empty  one       ||            &amp;&amp;<\/code><\/pre>\n<p>\u041d\u0430\u0438\u0432\u043d\u043e\u0435 \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0432 \u0440\u044f\u0434 \u043f\u0443\u0442\u0451\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a \u0434\u0430\u0441\u0442 \u0447\u043b\u0435\u043d\u044b \u0441 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0440\u0430\u0441\u0442\u0443\u0449\u0438\u043c\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u043c\u0438. \u041e\u0434\u043d\u0430\u043a\u043e <em>\u0437\u0430\u043a\u043e\u043d\u044b<\/em> \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 (\u0432\u0448\u0438\u0442\u044b\u0435 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432) \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0442 \u0432\u0441\u0435 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0438, \u0438 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0440\u044f\u0434 (<strong>Set<\/strong>).<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0430\u043a\u043e\u0439 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440:<\/p>\n<pre><code class=\"scala\">type Bag[X] = X =&gt; Nat<\/code><\/pre>\n<p>\u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u043d\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u00ab\u0445\u0440\u0430\u043d\u0438\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u00bb \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 (\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442). \u041a\u0441\u0442\u0430\u0442\u0438, \u0434\u043b\u044f <code>Bag<\/code> \u0430\u043a\u0442\u0443\u0430\u043b\u0435\u043d \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432, \u0447\u0442\u043e \u0438 \u0434\u043b\u044f <code>Set<\/code>, \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0431\u0443\u0434\u0435\u0442 \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0442\u0430\u043a\u0438\u043c \u0436\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043a\u0430\u043a \u0447\u0435\u0441\u0442\u043d\u043e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c <code>Bag<\/code> \u0432 \u0432\u0438\u0434\u0435 \u0440\u044f\u0434\u0430. \u041d\u0435 \u0432\u0438\u0434\u043d\u043e, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b\u0435 \u043a\u043e\u0440\u0442\u0435\u0436\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0432\u0435\u0434\u044c <em>\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043d\u0438\u0445 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c\u0441\u044f<\/em>. \u0410 \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u044b \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435. \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u0430\u043a\u0438\u0435 \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0438\u043f\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043a\u0430\u043a \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b, \u043d\u043e \u043d\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043a\u0430\u043a \u0438\u0445 \u0447\u0435\u0441\u0442\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u044b \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0445\u0441\u044f \u0442\u0430\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p><a class=\"anchor\" name=\"rec_derivatives\" id=\"rec_derivatives\"><\/a><\/p>\n<h2>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435 \u043e\u0442 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432<\/h2>\n<p>\u041a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u00ab\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u00bb \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043a \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u043c \u0442\u0438\u043f\u0430\u043c. \u041f\u0440\u0430\u0432\u0438\u043b \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"T[A] = \\mu X. Base[A, X]\" alt=\"T[A] = \\mu X. Base[A, X]\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/d9\/d96\/d96529f431cbef9bd250a4fb5a2698c2.svg\" width=\"auto\" height=\"auto\"\/>.<\/p>\n<p>\u0421\u043f\u0435\u0440\u0432\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>outFix<\/code> \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0451\u043c <img decoding=\"async\" class=\"formula inline\" source=\"T[A] \\rightarrow Base[A, T[A]]\" alt=\"T[A] \\rightarrow Base[A, T[A]]\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/be\/be1\/be1d5c8a994453d8a9455b5839459043.svg\" width=\"auto\" height=\"auto\"\/>, \u0438 \u0440\u0430\u0441\u043a\u0440\u043e\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u0443\u044e. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0435 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f <img decoding=\"async\" class=\"formula inline\" source=\"\\partial_A\\; T[A]\" alt=\"\\partial_A\\; T[A]\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/5b\/5b6\/5b6173c0eda0dfe9f32188276dff2a15.svg\" width=\"auto\" height=\"auto\"\/> \u0432\u044b\u0440\u0430\u0437\u0438\u043c \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 <img decoding=\"async\" class=\"formula inline\" source=\"\\mu\" alt=\"\\mu\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/c9\/c9f\/c9faf6ead2cd2c2187bd943488de1d0a.svg\" width=\"auto\" height=\"auto\"\/>. \u041f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0430\u044f\u0441\u044f \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0441\u043f\u0438\u0441\u043e\u043a, \u0442\u043e\u043b\u044c\u043a\u043e \u00ab\u043f\u0443\u0441\u0442\u043e\u0439\u00bb \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043e\u0442\u043b\u0438\u0447\u0435\u043d \u043e\u0442 <img decoding=\"async\" class=\"formula inline\" source=\"1\" alt=\"1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/c4\/c4c\/c4ca4238a0b923820dcc509a6f75849b.svg\" width=\"auto\" height=\"auto\"\/>. \u0415\u0433\u043e \u0441\u043c\u0435\u043b\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u043d\u0430\u0440\u0443\u0436\u0443 \u043a\u0430\u043a \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044c (\u043f\u0440\u0438 \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0432 \u0440\u044f\u0434 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0447\u043b\u0435\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442), \u0438 \u0442\u043e\u0433\u0434\u0430 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u043d\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u0430\u044f \u043e\u0442 <img decoding=\"async\" class=\"formula inline\" source=\"Base\" alt=\"Base\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/09\/095\/095a1b43effec73955e31e790438de49.svg\" width=\"auto\" height=\"auto\"\/> \u043f\u043e \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0443 \u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0445 \u043f\u043e \u0432\u0442\u043e\u0440\u043e\u043c\u0443:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\begin{eqnarray} \\tag{DiffRec}\\label{DiffRec} \\partial_AT[A] &amp;=&amp; \\partial_A Base[A, T[A]] \\\\ &amp;=&amp; \\left.\\partial_X Base[X, T[A]]\\right._{{}_{X=A}} + \\left.\\partial_X Base[A,X]\\right._{{}_{X=T[A]}} \\times \\underline{\\partial_A T[A]}\\\\ &amp;=&amp; \\mu Y. \\left( \\left. \\partial_X Base[X, T[A]]\\right._{{}_{X=A}} + \\left.\\partial_X Base[A,X]\\right._{{}_{X=T[A]}} \\times Y \\right)\\\\ &amp;=&amp; \\left. \\partial_X Base[X, T[A]]\\right._{{}_{X=A}} \\times \\mu Y. \\left( 1 + \\left.\\partial_X Base[A,X]\\right._{{}_{X=T[A]}} \\times Y \\right)\\\\ &amp;=&amp; \\left. \\partial_X Base[X, T[A]]\\right._{{}_{X=A}} \\times\\, List \\left[\\left.\\partial_X Base[A,X]\\right._{{}_{X=T[A]}}\\right]\\\\ \\end{eqnarray}\" alt=\"\\begin{eqnarray} \\tag{DiffRec}\\label{DiffRec} \\partial_AT[A] &amp;=&amp; \\partial_A Base[A, T[A]] \\\\ &amp;=&amp; \\left.\\partial_X Base[X, T[A]]\\right._{{}_{X=A}} + \\left.\\partial_X Base[A,X]\\right._{{}_{X=T[A]}} \\times \\underline{\\partial_A T[A]}\\\\ &amp;=&amp; \\mu Y. \\left( \\left. \\partial_X Base[X, T[A]]\\right._{{}_{X=A}} + \\left.\\partial_X Base[A,X]\\right._{{}_{X=T[A]}} \\times Y \\right)\\\\ &amp;=&amp; \\left. \\partial_X Base[X, T[A]]\\right._{{}_{X=A}} \\times \\mu Y. \\left( 1 + \\left.\\partial_X Base[A,X]\\right._{{}_{X=T[A]}} \\times Y \\right)\\\\ &amp;=&amp; \\left. \\partial_X Base[X, T[A]]\\right._{{}_{X=A}} \\times\\, List \\left[\\left.\\partial_X Base[A,X]\\right._{{}_{X=T[A]}}\\right]\\\\ \\end{eqnarray}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b19\/7cb\/a24\/b197cba240521ed55b180a91ecf31016.svg\" width=\"698\" height=\"176\"\/><\/p>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, Scala \u0432\u0435\u0440\u0441\u0438\u0438 3.5.2 \u043f\u0440\u0438 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0442\u0438\u043f\u043e\u0432 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0442\u0438\u043f, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0439 \u0434\u0432\u0443\u0445\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0431\u0430\u0437\u0443 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438:<\/p>\n<pre><code class=\"scala\">type diff\u03bc[Base[_, _]] = [A] =&gt;&gt;   List[\u2202[[X] =&gt;&gt; Base[A, X]][\u03bc[[T] =&gt;&gt; Base[A, T]]]] \u00d7          \u2202[[X] =&gt;&gt; Base[X, \u03bc[[T] =&gt;&gt; Base[A, T]]]][A]<\/code><\/pre>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u0442\u0435\u0440\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430:<\/p>\n<pre><code class=\"scala\">type Base3[A, T] = Unit + A \u00d7 (T \u00d7 T \u00d7 T) \/\/ 1 + A \u00d7 T \u00d7 T \u00d7 T   type Tree3[A] = \u03bc[[T] =&gt;&gt; Base3[A, T]]  type Tree3Context[A] = diff\u03bc[Base3][A]      type T = Tree3[Int]   summon[Tree3Context[Int] =:= List[Int \u00d7 ((T + T) \u00d7 T + T \u00d7 T)] \u00d7 (T \u00d7 T \u00d7 T)] \/\/                           List[Int \u00d7 3 \u00d7 T \u00d7 T]             \u00d7  T \u00d7 T \u00d7 T<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fe5\/dbc\/c2c\/fe5dbcc2cf2070084635544a2c2ef098.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u0442\u0438\u043f\u0430 Tree3. \u041a\u0440\u0435\u0441\u0442\u0438\u043a\u0430\u043c\u0438 \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u044b \u043f\u0443\u0441\u0442\u044b\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u044c\u044f, \u043a\u0440\u0443\u0436\u043a\u0430\u043c\u0438 - \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 A. \u041d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0443\u0437\u043b\u0435 \u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430.\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u0442\u0438\u043f\u0430 Tree3. \u041a\u0440\u0435\u0441\u0442\u0438\u043a\u0430\u043c\u0438 \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u044b \u043f\u0443\u0441\u0442\u044b\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u044c\u044f, \u043a\u0440\u0443\u0436\u043a\u0430\u043c\u0438 - \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 A. \u041d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0443\u0437\u043b\u0435 \u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430.\" width=\"652\" height=\"595\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fe5\/dbc\/c2c\/fe5dbcc2cf2070084635544a2c2ef098.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u0442\u0438\u043f\u0430 Tree3. \u041a\u0440\u0435\u0441\u0442\u0438\u043a\u0430\u043c\u0438 \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u044b \u043f\u0443\u0441\u0442\u044b\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u044c\u044f, \u043a\u0440\u0443\u0436\u043a\u0430\u043c\u0438 &#8212; \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 A. \u041d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0443\u0437\u043b\u0435 \u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430.<\/figcaption><\/div>\n<\/figure>\n<p>\u0417\u0434\u0435\u0441\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0442\u0435\u0440\u043d\u0430\u043d\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u0442\u0438\u043f\u0430 <code>Tree3[A]<\/code>. \u0421\u0444\u043e\u043a\u0443\u0441\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 <code>A<\/code> \u0432 &lt;font color=&#187;red&#187;&gt;\u043a\u0440\u0430\u0441\u043d\u043e\u043c&lt;\/font&gt; \u0443\u0437\u043b\u0435. \u041f\u0443\u0442\u044c \u043a \u043d\u0435\u043c\u0443 \u043e\u0442\u043c\u0435\u0447\u0435\u043d <strong>\u0447\u0451\u0440\u043d\u044b\u043c\u0438<\/strong> \u0441\u0442\u0440\u0435\u043b\u043a\u0430\u043c\u0438. \u041f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u043c\u0438\u043c\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u044c\u044f \u043e\u043a\u0440\u0430\u0448\u0435\u043d\u044b \u0432 \u0440\u0430\u0437\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430. \u041e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0437\u0430 \u043d\u0430\u0448\u0438\u043c \u0444\u043e\u043a\u0443\u0441\u043e\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u044c\u044f \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u044b &lt;font color=&#187;red&#187;&gt;\u0444\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u043c&lt;\/font&gt;. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u043c\u044b \u043a\u0430\u043a \u0431\u044b \u00ab\u043f\u043e\u0434\u043d\u044f\u043b\u0438\u00bb \u044d\u0442\u043e \u0434\u0435\u0440\u0435\u0432\u043e, \u0432\u0437\u044f\u0432\u0448\u0438\u0441\u044c \u0437\u0430 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0438 \u0444\u043e\u043a\u0443\u0441\u043d\u044b\u0439 \u0443\u0437\u043b\u044b, \u00ab\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u00bb \u0435\u0433\u043e \u0432\u0434\u043e\u043b\u044c \u0442\u043e\u0439 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0442\u043a\u0438, \u0447\u0442\u043e \u0432\u0435\u0434\u0451\u0442 \u043a \u043d\u0443\u0436\u043d\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3ad\/615\/478\/3ad615478e497f12826ef70f9e611e0c.png\" alt=\"\u0422\u043e \u0436\u0435 \u0434\u0435\u0440\u0435\u0432\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u0430\u043b\u0438 \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u2013 \u0432\u044b\u0442\u044f\u043d\u0443\u043b\u0438 \u0435\u0433\u043e \u0432\u0434\u043e\u043b\u044c \u0432\u0435\u0442\u0432\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0444\u043e\u043a\u0443\u0441\u043d\u044b\u0439 \u0443\u0437\u0435\u043b.\" title=\"\u0422\u043e \u0436\u0435 \u0434\u0435\u0440\u0435\u0432\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u0430\u043b\u0438 \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u2013 \u0432\u044b\u0442\u044f\u043d\u0443\u043b\u0438 \u0435\u0433\u043e \u0432\u0434\u043e\u043b\u044c \u0432\u0435\u0442\u0432\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0444\u043e\u043a\u0443\u0441\u043d\u044b\u0439 \u0443\u0437\u0435\u043b.\" width=\"1111\" height=\"483\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3ad\/615\/478\/3ad615478e497f12826ef70f9e611e0c.png\"\/><\/p>\n<div><figcaption>\u0422\u043e \u0436\u0435 \u0434\u0435\u0440\u0435\u0432\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u0430\u043b\u0438 \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u2013 \u0432\u044b\u0442\u044f\u043d\u0443\u043b\u0438 \u0435\u0433\u043e \u0432\u0434\u043e\u043b\u044c \u0432\u0435\u0442\u0432\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0444\u043e\u043a\u0443\u0441\u043d\u044b\u0439 \u0443\u0437\u0435\u043b.<\/figcaption><\/div>\n<\/figure>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u043d\u0443\u0436\u043d\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 <em>\u0442\u0440\u0451\u0445<\/em> \u0440\u0430\u0437\u0432\u0438\u043b\u043e\u043a \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u0432 <em>\u043a\u0430\u0436\u0434\u043e\u043c \u0443\u0437\u043b\u0435 \u043d\u0430 \u043f\u0443\u0442\u0438<\/em> \u043a \u0444\u043e\u043a\u0443\u0441\u043d\u043e\u043c\u0443: \u043b\u0435\u0432\u0430\u044f, \u0441\u0440\u0435\u0434\u043d\u044f\u044f, \u0438\u043b\u0438 \u043f\u0440\u0430\u0432\u0430\u044f.<\/p>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0435\u0440\u0435\u0442\u044c \u0432\u0441\u0435 \u0441\u0442\u0440\u0435\u043b\u043a\u0438, \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u0444\u043e\u043a\u0443\u0441\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u0434\u0435\u0440\u0435\u0432\u043e\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/200\/44b\/9e8\/20044b9e861006d68748ddab0051bdef.png\" alt=\"\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 Tree3 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 A \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u043c \u0435\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u0434\u0435\u0440\u0435\u0432\u0435 \u2013 \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432 \u043d\u0430 \u043f\u0443\u0442\u0438 \u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u044c\u044f\u043c\u0438, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u043e\u0441\u043b\u0435 A.\" title=\"\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 Tree3 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 A \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u043c \u0435\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u0434\u0435\u0440\u0435\u0432\u0435 \u2013 \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432 \u043d\u0430 \u043f\u0443\u0442\u0438 \u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u044c\u044f\u043c\u0438, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u043e\u0441\u043b\u0435 A.\" width=\"1449\" height=\"602\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/200\/44b\/9e8\/20044b9e861006d68748ddab0051bdef.png\"\/><\/p>\n<div><figcaption>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 Tree3 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 A \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u043c \u0435\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u0434\u0435\u0440\u0435\u0432\u0435 \u2013 \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432 \u043d\u0430 \u043f\u0443\u0442\u0438 \u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u044c\u044f\u043c\u0438, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 <em>\u043f\u043e\u0441\u043b\u0435<\/em> A.<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043c\u044b\u0441\u043b \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u043e\u0439 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u0421\u043f\u0438\u0441\u043e\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u0443\u0442\u044c \u043a \u0444\u043e\u043a\u0443\u0441\u043d\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u0441 \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u043e\u0437\u0430\u0434\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u044c\u044f\u043c\u0438 \u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c, \u043a\u0443\u0434\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u043f\u0443\u0442\u044c \u043d\u0430 <strong>\u0440\u0430\u0437\u0432\u0438\u043b\u043a\u0430\u0445<\/strong> (\u0442\u0438\u043f \u0441 <em>\u0442\u0440\u0435\u043c\u044f<\/em> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 <code>Tree3<\/code>). \u0418 \u0435\u0449\u0451 \u0442\u0443\u0442 \u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u044c\u044f, \u0434\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u043d\u0435 \u0434\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c.<\/p>\n<p>\u0412 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0445 \u043f\u0440\u043e \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 (\u0441\u0441\u044b\u043b\u043a\u0438 \u0441\u043c. \u0432 \u043a\u043e\u043d\u0446\u0435) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0435\u0449\u0451 \u0434\u0432\u0430 \u043f\u043e\u043d\u044f\u0442\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0440\u0430\u043d\u044c\u0448\u0435:<\/p>\n<ul>\n<li>\n<p>\u00ab\u043e\u0434\u043d\u043e\u0434\u044b\u0440\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u00bb \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0434\u0435\u0440\u0435\u0432\u0435 \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e \u0435\u0433\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u0430 (\u0430 \u043d\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f);<\/p>\n<\/li>\n<li>\n<p>\u00ab\u0437\u0430\u0441\u0442\u0451\u0436\u043a\u0430\u00bb (zipper) \u2013 \u044d\u0442\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e \u0432 \u0441\u0432\u043e\u0451\u043c \u043e\u0434\u043d\u043e\u0434\u044b\u0440\u043e\u0447\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435.<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"scala\">type OneHoleContext[Base[_, _]] = [A] =&gt;&gt; List[\u2202[[X] =&gt;&gt; Base[A, X]][\u03bc[[T] =&gt;&gt; Base[A, T]]]] type Zipper        [Base[_, _]] = [A] =&gt;&gt; OneHoleContext[Base][A] \u00d7  \u03bc[[T] =&gt;&gt; Base[A, T]] \/\/   Zipper[Base] = OneHoleContext[Base] \u00d7 \u03bc[Base] \u2245 \u03bc[Base]         \u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191 - \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e \u03bc[Base]<\/code><\/pre>\n<p>\u0417\u0430\u0441\u0442\u0451\u0436\u043a\u0430 \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443 (<em>\u043d\u0435\u043f\u0443\u0441\u0442\u043e\u043c\u0443<\/em> \u0438 \u0441 \u0444\u043e\u043a\u0443\u0441\u043e\u043c \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u0435 \u0432 \u043d\u0451\u043c) \u0432\u0432\u0438\u0434\u0443 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"T \\equiv \\mu X. Base[A, X]\" alt=\"T \\equiv \\mu X. Base[A, X]\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/79\/792\/79268474ed7890ea4dbbf019cf6b4af3.svg\" width=\"auto\" height=\"auto\"\/> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u0438\u0437\u043c<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"A \\times \\partial_A Base[A, T] \\cong T\" alt=\"A \\times \\partial_A Base[A, T] \\cong T\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/696\/c49\/7a8\/696c497a8dce20b53a88cda84f0d0190.svg\" width=\"190\" height=\"22\"\/><\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044c <img decoding=\"async\" class=\"formula inline\" source=\"A\" alt=\"A\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7f\/7fc\/7fc56270e7a70fa81a5935b72eacbe29.svg\" width=\"auto\" height=\"auto\"\/> \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0433\u043e\u043b\u043e\u0432\u043d\u043e\u0439 (\u043a\u043e\u0440\u0435\u043d\u043d\u043e\u0439?) \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0430 <img decoding=\"async\" class=\"formula inline\" source=\"\\partial_A Base[A, T]\" alt=\"\\partial_A Base[A, T]\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/5f\/5f9\/5f992cb11124336d8c661246cf6c2779.svg\" width=\"auto\" height=\"auto\"\/> \u2013 \u0435\u0433\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u044c\u044f. \u042d\u0442\u043e\u0442 \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u0438\u0437\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0438\u0437 (<strong>DiffIso<\/strong>) \u0438 (<strong>DiffRec<\/strong>) \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u044f, \u043a\u043e\u0433\u0434\u0430 \u043f\u0443\u0442\u044c \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u0435\u043d, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0434\u043d\u043e\u0434\u044b\u0440\u043e\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u043f\u0443\u0441\u0442\u043e\u0439.<\/p>\n<p>\u042d\u0442\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0451 \u0447\u0442\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043e\u0431\u0437\u043e\u0440\u0435 \u043f\u0440\u043e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0432 \u0432\u0438\u0434\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0434\u0430\u0451\u0442 \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\begin{align}\\partial_X List[X] &amp;= \\partial_X \\left(\\frac1{1-X}\\right)=\\\\&amp;=\\frac1{(1-X)^2}=\\\\&amp;=\\frac1{1-X}\\times\\frac1{1-X}=\\\\\\\\&amp;=List[X] \\times List[X]\\end{align}\" alt=\"\\begin{align}\\partial_X List[X] &amp;= \\partial_X \\left(\\frac1{1-X}\\right)=\\\\&amp;=\\frac1{(1-X)^2}=\\\\&amp;=\\frac1{1-X}\\times\\frac1{1-X}=\\\\\\\\&amp;=List[X] \\times List[X]\\end{align}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/712\/f2b\/48a\/712f2b48a3a3f7ea4264733779e4e9c6.svg\" width=\"276\" height=\"198\"\/><\/p>\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u2013 \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435. \u0414\u043b\u044f \u0434\u0435\u0440\u0435\u0432\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u0443\u044e \u0447\u0435\u0440\u0435\u0437 \u0442\u0438\u043f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435 (\u0438 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0447\u0435\u0441\u0442\u044c, \u0447\u0442\u043e <img decoding=\"async\" class=\"formula inline\" source=\"1\/(1-2 \\times X \\times Tree[X]) = List[2 \\times X \\times Tree[X]]\" alt=\"1\/(1-2 \\times X \\times Tree[X]) = List[2 \\times X \\times Tree[X]]\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/62\/627\/62752fdd6eb69f666814b2378ab218f3.svg\" width=\"auto\" height=\"auto\"\/>).<\/p>\n<p><a class=\"anchor\" name=\"bibliography\" id=\"bibliography\"><\/a><\/p>\n<h2>\u0421\u043f\u0438\u0441\u043e\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b<\/h2>\n<ul>\n<li>\n<p><a href=\"https:\/\/stackoverflow.com\/questions\/9190352\/abusing-the-algebra-of-algebraic-data-types-why-does-this-work\" rel=\"noopener noreferrer nofollow\">Abusing the algebra of algebraic data types &#8212; why does this work?<\/a> \u2013 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043d\u0430 StackOverflow \u043e \u0442\u0435\u0441\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u0438 \u0442\u0435\u043e\u0440\u0438\u0438 \u0442\u0438\u043f\u043e\u0432 \u0441 \u0430\u043b\u0433\u0435\u0431\u0440\u043e\u0439 \u0438 \u043c\u0430\u0442\u0430\u043d\u0430\u043b\u0438\u0437\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/byorgey.wordpress.com\/2012\/08\/24\/unordered-tuples-and-type-algebra\/\" rel=\"noopener noreferrer nofollow\">Unordered tuples and type\u00a0algebra<\/a> \u2013 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u043e \u043f\u043e\u0434\u0441\u0447\u0451\u0442 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a \u0432 \u043a\u043e\u0440\u0442\u0435\u0436\u0430\u0445 (\u0432 \u0442\u0435\u043c\u0443 \u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"Set[A]=2^A\" alt=\"Set[A]=2^A\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/ea\/ea3\/ea36ed463ab8359d04475177c166e3d4.svg\" width=\"auto\" height=\"auto\"\/> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430).<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432: <\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/en.m.wikibooks.org\/wiki\/Haskell\/Zippers#Mechanical_Differentiation\" rel=\"noopener noreferrer nofollow\">Haskell\/Zippers<\/a>. \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0438\u0434\u0451\u0442 \u0437\u0430\u0431\u0430\u0432\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u043a\u0430\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0410\u0440\u0438\u0430\u0434\u043d\u0430 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0422\u0435\u0441\u0435\u044e \u043d\u0430\u0439\u0442\u0438 \u043f\u0443\u0442\u0435\u0432\u043e\u0434\u043d\u0443\u044e \u043d\u0438\u0442\u044c \u0434\u043b\u044f \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u043e\u0433\u043e \u043b\u0430\u0431\u0438\u0440\u0438\u043d\u0442\u0430 \u041c\u0438\u043d\u043e\u0442\u0430\u0432\u0440\u0430)).<\/p>\n<\/li>\n<li>\n<p><a href=\"http:\/\/strictlypositive.org\/diff.pdf\" rel=\"noopener noreferrer nofollow\">The Derivative of a Regular Type is its Type of One-Hole Contexts<\/a> (pdf). \u0422\u0443\u0442 \u0441\u0442\u0440\u043e\u0433\u0438\u0439 \u0432\u044b\u0432\u043e\u0434 \u043f\u0440\u0430\u0432\u0438\u043b \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432. \u0415\u0441\u0442\u044c \u0438 \u0431\u043e\u043b\u0435\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u0432\u0440\u043e\u0434\u0435 <a href=\"https:\/\/www.cs.le.ac.uk\/people\/ma139\/docs\/derivative.pdf\" rel=\"noopener noreferrer nofollow\">Derivatives of Containers<\/a>, \u043d\u043e \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0445 \u043d\u0430\u0439\u0442\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"conclusion\" id=\"conclusion\"><\/a><\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043e\u0431\u0437\u043e\u0440\u0443<\/h2>\n<p>\u0417\u0434\u0435\u0441\u044c \u0431\u044b\u043b\u0438 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u0435\u043c\u044b:<\/p>\n<ul>\n<li>\n<p><em>\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f<\/em> \u0438 <em>\u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438<\/em> \u0444\u0443\u043d\u043a\u0446\u0438\u0439;<\/p>\n<\/li>\n<li>\n<p>\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u2013 \u044d\u0442\u043e <em>\u0441\u043f\u043e\u0441\u043e\u0431 \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/em> \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432; <\/p>\n<ul>\n<li>\n<p><em>\u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432 \u0442\u0438\u043f\u043e\u0432<\/em>, \u043a\u0430\u043a \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043b\u044e\u0431\u044b\u0445 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p>\u0432\u0441\u0435 \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u043d\u044b, \u043d\u043e \u0441\u0440\u0435\u0434\u0438 \u043d\u0438\u0445 \u0432\u044b\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u0435 \u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u2013 <em>\u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0430\u044f<\/em> \u0438 <em>\u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0430\u044f<\/em>;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0430\u044f \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 <code>(\u0441\u0432\u0451\u0440\u0442\u043a\u0430, \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440)<\/code>, \u0433\u0434\u0435 \u0441\u0432\u0451\u0440\u0442\u043a\u0430 \u2013 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u0430\u044f;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 <code>(\u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0430, \u0434\u0435\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440)<\/code>, \u0433\u0434\u0435 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0430 \u2013 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u0430\u044f;<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><em>\u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b<\/em> \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442 \u043b\u044e\u0431\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b, \u043e\u0431\u043e\u0433\u0430\u0449\u0430\u044f \u0438\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 <em>\u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439<\/em> \u0432\u0438\u0434\u0430 <code>A =&gt; F[B]<\/code>, \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432; <\/p>\n<ul>\n<li>\n<p>\u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 <em>\u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0442\u0435\u043a<\/em> \u0432 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u0445;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432;<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><em>\u0441\u0445\u0435\u043c\u044b \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438<\/em> \u2013 \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441\u0432\u0451\u0440\u0442\u043a\u0438\/\u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0438 \u0434\u043b\u044f \u0442\u0438\u043f\u043e\u0432\u044b\u0445 \u0437\u0430\u0434\u0430\u0447; <\/p>\n<ul>\n<li>\n<p>\u0432\u0441\u0435 \u0441\u0445\u0435\u043c\u044b \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438 \u0432\u044b\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <em>\u0434\u0432\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/em> \u0441\u0432\u0451\u0440\u0442\u043a\u0438 \u0438 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p>\u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u00ab<em>\u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0442\u044c \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0435<\/em>\u00bb \u0438 \u0440\u0435\u0448\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f;<\/p>\n<\/li>\n<li>\n<p><em>\u043a\u043e-\u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b<\/em> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u00ab<em>\u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0442\u044c \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u0435<\/em>\u00bb \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043a\u0438 \u0432 \u0434\u0435\u0440\u0435\u0432\u044c\u044f;<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u0441\u043d\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u043e\u0439 (<u>\u0432\u044b\u0432\u043e\u0434\u044b \u043f\u043e \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u044f\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043e\u0431\u0437\u043e\u0440\u0430<\/u>); <\/p>\n<ul>\n<li>\n<p><em>\u043d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430<\/em> \u2013 \u044d\u0442\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u0442\u0438\u043f, \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u044e\u0449\u0438\u0439 \u0432 \u0441\u0435\u0431\u0435 \u0440\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438\u0434\u0435\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0438\u043c\u0435\u044e\u0442 \u0434\u0435\u043b\u043e \u0441 \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u044b\u043c\u0438 \u0442\u043e\u0447\u043a\u0430\u043c\u0438 \u00ab<em>\u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0438\u0430\u043b\u044c\u043d\u044b\u0445<\/em>\u00bb \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432 \u0442\u0438\u043f\u043e\u0432 (\u0442\u0430\u043a\u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445, \u043a\u0430\u043a \u00ab\u0430\u043b\u0433\u0435\u0431\u0440\u0430\u0438\u0447\u0435\u0441\u043a\u0438\u0445\u00bb, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u0443\u043c\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u0442\u0438\u043f\u043e\u0432);<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 <em>\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u044b\u0445 \u0440\u044f\u0434\u043e\u0432<\/em>, \u0447\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0438\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0437\u0440\u0435\u043d\u0438\u044f \u043d\u0430 \u0438\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443;<\/p>\n<\/li>\n<li>\n<p>\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u0438\u043d\u043e\u0433\u0434\u0430 <em>\u0443\u0434\u0430\u0451\u0442\u0441\u044f \u0440\u0435\u0448\u0438\u0442\u044c \u044f\u0432\u043d\u043e<\/em> \u2013 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f (\u0441 \u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u044f\u043c\u0438, \u0434\u0435\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u0440\u0430\u0434\u0438\u043a\u0430\u043b\u0430\u043c\u0438) \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0441\u0442\u0435\u043f\u0435\u043d\u043d\u044b\u0445 \u0440\u044f\u0434\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p>\u043c\u043d\u043e\u0433\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0442 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u043e\u0439 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <em>\u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0435\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435<\/em>, \u0438 \u044d\u0442\u043e\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u043d\u0435\u0433\u043e \u0442\u0438\u043f\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0434\u0430\u0436\u0435 \u043a\u043e\u043d\u0442\u0440\u0430\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b \u0442\u0438\u043f\u043e\u0432 \u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u0430\u0442\u044c, \u043a\u0430\u043a \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u043a\u043e\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b;<\/p>\n<\/li>\n<li>\n<p>\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u00ab\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441 \u043e\u0441\u0442\u0430\u0442\u043a\u043e\u043c\u00bb, \u043d\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c <em>\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u043e\u0439<\/em>;<\/p>\n<\/li>\n<li>\n<p>\u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0445 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 (\u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432).<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u041a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 <em>\u0435\u0434\u0438\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e<\/em> \u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432. \u042d\u0442\u043e \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u00ab\u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0438\u0442\u044c\u00bb \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0446\u0438\u043a\u043b\u044b, \u0438\u043b\u0438 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e. \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432 \u0442\u0438\u043f\u043e\u0432 \u2013 \u0434\u043b\u044f \u043d\u0438\u0445, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0443\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0432\u0441\u0435 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b, \u0438 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0437\u0430\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0442\u0438\u043f\u0430\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<p>\u0412 \u043e\u0431\u0437\u043e\u0440\u0435 \u043d\u0435 \u0440\u0430\u0437 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u043e\u0442\u0441\u044b\u043b\u043a\u0438 \u043a \u0434\u0440\u0443\u0433\u0438\u043c \u0432\u0430\u0436\u043d\u044b\u043c \u0438 \u043e\u0431\u044a\u0451\u043c\u043d\u044b\u043c \u0442\u0435\u043c\u0430\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u044b \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438 \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 <strong>\u0442\u0435\u043e\u0440\u0438\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439<\/strong>. \u0410 \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0442\u0438\u043f\u043e\u0432 \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u0435 \u00ab<strong>\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u0442\u0438\u043f\u044b<\/strong>\u00bb. \u042d\u0442\u0438 \u0442\u0435\u043c\u044b \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u043e \u043a\u0430\u043a-\u043d\u0438\u0431\u0443\u0434\u044c \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0430\u0437)).<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/863376\/\"> https:\/\/habr.com\/ru\/articles\/863376\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\">\n<div><figcaption>\u041c\u0430\u0441\u0442\u0435\u0440\u0430 \u0423\u0433\u0432\u044d\u044f \u043d\u0438\u0447\u0443\u0442\u044c \u043d\u0435 \u0443\u0434\u0438\u0432\u043b\u044f\u043b\u043e, \u0447\u0442\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0442\u0438\u043f\u0430\u043c\u0438 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0442 \u0448\u043a\u043e\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0443.<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u043f\u044f\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438:<\/p>\n<ul>\n<li>\n<p><a href=\"#nat_numbers\" rel=\"noopener noreferrer nofollow\">\u041d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#row_decompose\" rel=\"noopener noreferrer nofollow\">\u0420\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0440\u044f\u0434<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#type-derivatives\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435 \u043e\u0442 \u0442\u0438\u043f\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#exp_derivatives\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435 \u043e\u0442 \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#rec_derivatives\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435 \u043e\u0442 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#bibliography\" rel=\"noopener noreferrer nofollow\">\u0421\u043f\u0438\u0441\u043e\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#conclusion\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043e\u0431\u0437\u043e\u0440\u0443<\/a><\/p>\n<\/li>\n<\/ul>\n<details class=\"spoiler\">\n<summary>\u0414\u0440\u0443\u0433\u0438\u0435 \u0447\u0430\u0441\u0442\u0438 \u043e\u0431\u0437\u043e\u0440\u0430<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/article\/863304\/\" rel=\"noopener noreferrer nofollow\">\u0427\u0430\u0441\u0442\u044c 1. \u0420\u0435\u043a\u0443\u0440\u0441\u0438\u044f<\/a>.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/863324\/\" rel=\"noopener noreferrer nofollow\">\u0427\u0430\u0441\u0442\u044c 2. \u041d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432 \u0442\u0438\u043f\u043e\u0432<\/a>.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/863334\/\" rel=\"noopener noreferrer nofollow\">\u0427\u0430\u0441\u0442\u044c 3. \u0421\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b<\/a>.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/863362\/\" rel=\"noopener noreferrer nofollow\">\u0427\u0430\u0441\u0442\u044c 4. \u0421\u0445\u0435\u043c\u044b \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438<\/a>.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/863376\/\" rel=\"noopener noreferrer nofollow\">\u0427\u0430\u0441\u0442\u044c 5. \u0417\u0430\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u0442\u0430\u043d<\/a>\u00a0(\u043c\u044b \u0437\u0434\u0435\u0441\u044c).<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<p><a class=\"anchor\" name=\"nat_numbers\" id=\"nat_numbers\"><\/a><\/p>\n<h2>\u041d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430<\/h2>\n<p>\u0412 \u0441\u0432\u043e\u0451 \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0441\u0442\u0430\u043b \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435\u043c \u0442\u043e\u0442 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u0442\u0438\u043f \u043d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0442\u0430\u043a\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u043c:<\/p>\n<pre><code class=\"scala\">type Nat = \u03bc[Option]<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u043e. \u0421\u043f\u0435\u0440\u0432\u0430 \u0432\u0432\u0435\u0434\u0451\u043c \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b:<\/p>\n<pre><code class=\"scala\">\/\/ \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 val zero:          Nat = inFix[\u03bc, Option](None   ) def succ(n:Nat):   Nat = inFix[\u03bc, Option](Some(n)) \/\/ \u0432\u0441\u043f\u043e\u043c\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 val one:           Nat = succ(zero) def toNat(i: Int): Nat = (1 to i).foldRight(zero)((_, acc) =&gt; succ(acc)) \/\/ \u043d\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 i, \u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u043e \u043d\u0435 \u0432\u0430\u0436\u043d\u043e<\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u0443\u044e <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%90%D0%BA%D1%81%D0%B8%D0%BE%D0%BC%D1%8B_%D0%9F%D0%B5%D0%B0%D0%BD%D0%BE\" rel=\"noopener noreferrer nofollow\">\u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0443 \u043f\u043e \u041f\u0435\u0430\u043d\u043e<\/a>:<\/p>\n<pre><code class=\"scala\">extension (nat: Nat)   def +     = foldFix[\u03bc]((_: Option[Nat]).fold(nat )(succ   ))   def *     = foldFix[\u03bc]((_: Option[Nat]).fold(zero)(_ + nat))   def **    = foldFix[\u03bc]((_: Option[Nat]).fold(one )(_ * nat))     def toInt = foldFix[\u03bc]((_: Option[Int]).fold(0   )(_ + 1  ))(nat)<\/code><\/pre>\n<p>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f <code>Nat<\/code>, \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0435 \u044d\u0442\u0438\u043c, \u0431\u0443\u0434\u0443\u0442 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c\u0438. \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0442\u0438\u043f\u044b, \u0437\u0430\u043c\u043a\u043d\u0443\u0442\u044b\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 (\u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u0441\u0442\u0430\u043b\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c\u0438) \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043d\u0430\u0441 \u043a \u0446\u0435\u043b\u044b\u043c, \u0440\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0438 \u043f\u0440\u043e\u0447\u0438\u043c \u0447\u0438\u0441\u043b\u0430\u043c. \u041d\u043e \u043e\u0442\u043b\u043e\u0436\u0438\u043c \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0430\u0437, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u0442\u0438\u043f\u044b, \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438, \u0431\u0443\u0434\u0443\u0442 \u043d\u0435\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u043c\u0438 (\u0445\u043e\u0442\u044f \u0438 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0430 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u043c <code>Nat<\/code>).<\/p>\n<p>\u0410 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u0448\u0430 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"scala\">val two   = succ(one) val three = succ(two) val six   = toNat(6)  val theAnswer = (two * three) ** two + six theAnswer.toInt \/\/ 42<\/code><\/pre>\n<p>\u0412\u0430\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b <code>Nat<\/code> \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0447\u0435\u0440\u0435\u0437 <code>inFix<\/code>, \u0430 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u0434\u0435\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0432 <code>Int<\/code> \u2013 \u0447\u0435\u0440\u0435\u0437 <code>foldFix<\/code>. \u041f\u0430\u0440\u0430 \u044d\u0442\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043a\u0430\u043a \u0440\u0430\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 <strong>\u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438<\/strong> \u0434\u043b\u044f <strong>\u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u0439 \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438<\/strong> <code>\u03bc<\/code>, \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0439 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438. \u0412\u043e\u043e\u0431\u0449\u0435, \u0432\u0441\u0451 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0442\u044c \u0442\u0438\u043f <code>Nat<\/code>, \u0432\u044b\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0441\u0432\u0451\u0440\u0442\u043a\u0443 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430! \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b \u2013 \u044d\u0442\u043e \u0441\u0432\u0451\u0440\u0442\u043a\u0430 <code>Nat<\/code> \u0432 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 <code>Nat<\/code>:<\/p>\n<pre><code class=\"scala\">def factorial: Nat =&gt; Nat =   foldFix[\u03bc][Option][(Nat, Nat)]{     _.fold((one, one))((n, fact) =&gt; succ(n) -&gt; fact * n)   } andThen {_._2}  factorial(toNat(5)).toInt \/\/ 120<\/code><\/pre>\n<p>\u041d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0438\u0433\u0440\u0430\u044e\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u0443\u044e \u0440\u043e\u043b\u044c \u0432 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435 \u0432 \u0446\u0435\u043b\u043e\u043c \u0438 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438. \u041e\u043d\u0438 \u043e\u043b\u0438\u0446\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0442 \u0438\u0434\u0435\u044e <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%B8%D0%BD%D0%B4%D1%83%D0%BA%D1%86%D0%B8%D1%8F\" rel=\"noopener noreferrer nofollow\">\u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u0434\u0443\u043a\u0446\u0438\u0438<\/a> \u2013 <em>\u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0433\u043e<\/em> \u0432\u044b\u0432\u043e\u0434\u0430 \u043d\u043e\u0432\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0438\u0437 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445. \u0412\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0438\u043c\u0435\u044e\u0442 \u0434\u0435\u043b\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b, \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u044b. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0441\u0435 \u0442\u0438\u043f\u044b \u044d\u0442\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441\u0447\u0451\u0442\u043d\u044b \u2013 \u043e\u043d\u0438 \u0432\u0441\u0435 <em>\u0438\u0437\u043e\u043c\u043e\u0440\u0444\u043d\u044b \u043d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u0430\u043c<\/em>!<\/p>\n<details class=\"spoiler\">\n<summary>\u00ab\u041d\u0435\u0441\u0447\u0451\u0442\u043d\u044b\u0435\u00bb \u0442\u0438\u043f\u044b<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438, \u043c\u043e\u0436\u043d\u043e \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u00ab\u043d\u0435\u0441\u0447\u0451\u0442\u043d\u044b\u0435\u00bb \u0442\u0438\u043f\u044b, \u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0445 \u0441\u0447\u0451\u0442\u043d\u044b\u0445 \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u0432. \u0420\u0430\u0431\u043e\u0442\u0430\u044f \u0441 \u0442\u0435\u0440\u043c\u0430\u043c\u0438 \u00ab\u043d\u0435\u0441\u0447\u0451\u0442\u043d\u044b\u0445\u00bb \u0442\u0438\u043f\u043e\u0432 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u0439\u0434\u0451\u0442\u0441\u044f \u0441\u043f\u043e\u0441\u043e\u0431 \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u044c \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0438\u0445 \u043a \u0441\u0447\u0451\u0442\u043d\u044b\u043c \u043f\u043e\u0434\u0442\u0438\u043f\u0430\u043c.<\/p>\n<\/div>\n<\/details>\n<p><a class=\"anchor\" name=\"row_decompose\" id=\"row_decompose\"><\/a><\/p>\n<h2>\u0420\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0440\u044f\u0434<\/h2>\n<p>\u0420\u0430\u043d\u0435\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u044b\u043b \u0432\u044b\u0440\u0430\u0436\u0435\u043d \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443  \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u0442\u0438\u043f\u043e\u0432 <code>OptCell<\/code>:<\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c <code>\u03bc<\/code> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b\u0441\u044f \u0432 \u0441\u0442\u0438\u043b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0439, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0440\u044b\u0442\u044c \u00ab\u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0441\u0435\u0431\u044f\u00bb. \u041d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430:<\/p>\n<p>\u042d\u0442\u043e \u043d\u0435 \u0447\u0442\u043e \u0438\u043d\u043e\u0435, \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u00ab\u0444\u0443\u043d\u043a\u0446\u0438\u0438\u00bb <code>List[A]<\/code>. \u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u043f\u0440\u0430\u0432\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c, \u0448\u0430\u0433 \u0437\u0430 \u0448\u0430\u0433\u043e\u043c \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0432\u043c\u0435\u0441\u0442\u043e <code>List[A]<\/code> \u0432\u0441\u0451 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u0423 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u0442\u0430\u043a\u0430\u044f \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430:<\/p>\n<p>\u0422\u0440\u0430\u043a\u0442\u0443\u0435\u0442\u0441\u044f \u044d\u0442\u0430 \u0441\u0443\u043c\u043c\u0430 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e: \u0441\u043f\u0438\u0441\u043e\u043a \u2013 \u044d\u0442\u043e \u043b\u0438\u0431\u043e \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u043b\u0438\u0431\u043e \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u043b\u0438\u0431\u043e \u0438\u0445 \u043f\u0430\u0440\u0430, \u0442\u0440\u043e\u0439\u043a\u0430 \u0438 \u0442.\u0434. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442, \u043a\u0430\u043a \u0441\u0443\u043c\u043c\u0430 \u0447\u043b\u0435\u043d\u043e\u0432 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0438\u0438, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0443\u044e \u0444\u043e\u0440\u043c\u0443\u043b\u0443:<\/p>\n<p>\u0422\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0440\u0435\u0448\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435. \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0442\u0438\u043f\u044b \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0430\u0442\u044c \u043d\u043e \u0438 \u0434\u0435\u043b\u0438\u0442\u044c \u0438 \u0432\u044b\u0447\u0438\u0442\u0430\u0442\u044c!<\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0438 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0432\u0435\u0434\u044c \u0441\u0430\u043c\u043e \u043f\u043e\u043d\u044f\u0442\u0438\u0435 \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u0442 <em>\u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443<\/em> \u2013 \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044e \u043d\u0430\u0439\u0442\u0438 \u0442\u0430\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044e \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0435\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432 \u0442\u0438\u043f\u043e\u0432 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0441\u0443\u043c\u043c\u044b, \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438 \u0432\u043e\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432 \u0441\u0442\u0435\u043f\u0435\u043d\u044c.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u0442\u0430\u043a\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u0430\u0442\u044c \u0441\u043a\u043e\u0440\u0435\u0435 \u043a\u0430\u043a <em>\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/em> \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0440\u044f\u0434. \u042d\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u0451\u043c \u0432 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435. \u0422\u0430\u043a\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c \u0438 \u0434\u0430\u0436\u0435 \u0443\u043f\u0440\u043e\u0449\u0430\u0442\u044c, \u043f\u043e\u043b\u0443\u0447\u0430\u044f \u0432 \u0438\u0442\u043e\u0433\u0435 \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u043d\u043e\u0432\u044b\u0435 \u0440\u044f\u0434\u044b.<\/p>\n<p>\u0418 \u0442\u0430\u043a\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435\u043c:<\/p>\n<p>\u0415\u0433\u043e \u00ab\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c\u00bb \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0439 \u0440\u044f\u0434:<\/p>\n<p>\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u043f\u0435\u0440\u0435\u0434  \u2013 \u044d\u0442\u043e \u0442\u0438\u043f\u044b \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u041e\u043d\u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u00ab\u0444\u043e\u0440\u043c\u00bb \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445  \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 . \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0432\u0443\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043e\u0434\u0438\u043d \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u0440\u043d\u0435 (\u0438\u043b\u0438 \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0435, \u0441\u043c\u043e\u0442\u0440\u044f \u043a\u0430\u043a \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c)), \u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043b\u0435\u0432\u0430 \u0438\u043b\u0438 \u0441\u043f\u0440\u0430\u0432\u0430 \u2013 \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430. \u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u043e\u0440\u043c \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432 \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430\u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0446\u0435\u043b\u044b\u0445 \u0447\u0435\u0442\u044b\u0440\u043d\u0430\u0434\u0446\u0430\u0442\u044c.<\/p>\n<p><em>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0449\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f<\/em> \u044d\u0442\u043e\u0433\u043e \u0440\u044f\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0440\u0430\u0434\u0438\u043a\u0430\u043b:<\/p>\n<details class=\"spoiler\">\n<summary>\u0412\u0442\u043e\u0440\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412\u0442\u043e\u0440\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0441\u043e \u0437\u043d\u0430\u043a\u043e\u043c  \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u0440\u043d\u0435\u043c \u0438\u0437 \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u043d\u0442\u0430 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u044b\u043c. \u0420\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u00ab\u043c\u0430\u043b\u043e\u0441\u0442\u044c\u00bb , \u043d\u043e \u043f\u0440\u0438  \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u0435\u043c\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u00ab\u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u044c\u00bb, \u0438 \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0439 \u0440\u044f\u0434: <\/p>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0435\u0440\u0435\u0432\u043e \u0441 \u043f\u044f\u0442\u044c\u044e \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0432\u0435\u0442\u0432\u044f\u043c\u0438 \u0432 \u0443\u0437\u043b\u0435, \u0442\u043e \u0442\u043e\u0447\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%90%D0%B1%D0%B5%D0%BB%D1%8F_%D0%BE_%D0%BD%D0%B5%D1%80%D0%B0%D0%B7%D1%80%D0%B5%D1%88%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B2_%D1%80%D0%B0%D0%B4%D0%B8%D0%BA%D0%B0%D0%BB%D0%B0%D1%85\" rel=\"noopener noreferrer nofollow\">\u043d\u0435 \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c<\/a>. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0440\u044f\u0434 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e, \u043a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430.<\/p>\n<p>\u0418 \u0432\u0441\u0451 \u0436\u0435, \u043d\u0435 \u0432\u0441\u0435 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c \u0432 \u0440\u044f\u0434. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0430\u043a\u043e\u0439 \u0442\u0438\u043f:<\/p>\n<p>\u041f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f  \u0432 \u0440\u044f\u0434 \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0435 \u0435\u0433\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b! \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u043f\u0435\u0440\u0451\u0434 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432  \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0444\u043e\u0440\u043c \u0434\u0435\u0440\u0435\u0432\u0430 \u0442\u0430\u043a\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u041f\u0440\u0438\u0447\u0451\u043c, \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u0442\u0438\u043f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0438 \u043d\u0435 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439:<\/p>\n<pre><code class=\"scala\">final case class UMagma[A](value: A `Either` Option[(UMagma[A], UMagma[A])])  def leaf[A](a: A) = UMagma(Left(a)) def twig[A] = UMagma[A](Right(None)) def node[A](left: UMagma[A], right: UMagma[A]) = UMagma(Right(Some(left, right)))  val someTree = node( \/\/     \/\\   leaf(42),          \/\/   42  \\   twig               \/\/        \u2205 )  val sameTree = node( \/\/     \/\\   leaf(42),          \/\/   42  \\   node(              \/\/       \/\\    \/\/ \u2205 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e.     twig,            \/\/      \u2205  \\   \/\/ \u0432\u043e\u0442 \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442     twig             \/\/          \u2205  \/\/ \u0432\u0441\u0435 \u044d\u0442\u0438 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u044b    )                                 \/\/ \u0434\u043b\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 A )<\/code><\/pre>\n<p>\u041d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u043b\u044e\u0431\u044b\u0445 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432 \u0442\u0438\u043f\u043e\u0432 (\u00ab\u0430\u043b\u0433\u0435\u0431\u0440\u0430\u0438\u0447\u0435\u0441\u043a\u0438\u0435\u00bb \u0442\u0438\u043f\u044b, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0438\u0437 \u0441\u0443\u043c\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439) \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0434\u0435\u0440\u0435\u0432\u044c\u044f. \u0412\u044b\u0440\u043e\u0436\u0434\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u043b\u0443\u0447\u0430\u044f\u043c\u0438 \u0442\u0430\u043a\u0438\u0445 \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438 \u0441\u043f\u0438\u0441\u043a\u0438 (\u0434\u0435\u0440\u0435\u0432\u043e \u0441 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0442\u043a\u043e\u0439), \u0438 \u0434\u0430\u0436\u0435 \u043d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430:<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u043e\u0441\u0442\u043e<\/p>\n<p>\u0422\u0438\u043f \u043d\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d, \u0438 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u2013 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u044c)).<\/p>\n<p>\u0427\u0442\u043e \u0436\u0435 \u0434\u043e \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432 \u0442\u0438\u043f\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044b (\u0442\u0438\u043f\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439), \u0442\u043e \u0442\u0443\u0442 \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0442\u0430\u043a\u0430\u044f. \u0415\u0441\u043b\u0438 \u0442\u0438\u043f-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0445\u043e\u0442\u044f \u0431\u044b \u0440\u0430\u0437 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0442\u043e, \u043a\u0430\u043a \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u0440\u0430\u043d\u0435\u0435 (\u0441\u043c. \u0432 \u043a\u043e\u043d\u0446\u0435 <a href=\"https:\/\/habr.com\/ru\/articles\/863324\/#type_fixed_point\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430<\/a>), \u0442\u0430\u043a\u0430\u044f \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u0430 \u0442\u043e\u0447\u043a\u0430 \u043d\u0435\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u0430 \u0438 \u0441 \u0435\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0412 \u043f\u0440\u043e\u0447\u0438\u0445 \u0436\u0435 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u0442\u0438\u043f-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440  (\u00ab\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e\u0439\u00bb \u0442\u0438\u043f), \u0442\u043e \u0442\u0438\u043f \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u0440\u0430\u043d\u0435\u0435, \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u0447\u0451\u0442\u043d\u044b\u043c, \u0438\u0437\u043e\u043c\u043e\u0440\u0444\u043d\u044b\u043c <code>Nat<\/code>. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u0432\u0441\u0435 \u0441\u0442\u0435\u043f\u0435\u043d\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a <em>\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f<\/em> \u0442\u0438\u043f\u0430-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0441 \u0441\u0430\u043c\u0438\u043c \u0441\u043e\u0431\u043e\u0439. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0435\u043f\u043e\u0434\u0432\u0438\u0436\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u0442\u0430\u043a\u0438\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0435 \u0434\u0435\u0440\u0435\u0432\u044c\u044f, \u043f\u0440\u043e\u0441\u0442\u043e \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0432\u0435\u0442\u0432\u0435\u0439 \u0432 \u0443\u0437\u043b\u0430\u0445.<\/p>\n<p><a class=\"anchor\" name=\"type-derivatives\" id=\"type-derivatives\"><\/a><\/p>\n<h2>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435 \u043e\u0442 \u0442\u0438\u043f\u043e\u0432<\/h2>\n<p>\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u044b\u0435 \u0442\u0438\u043f\u044b <code>F[+_]<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0434\u043b\u044f \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 (\u0441\u043c. <a href=\"https:\/\/habr.com\/ru\/articles\/807495\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e<\/a> \u0446\u0438\u043a\u043b\u0430). \u0422\u0430\u043a\u0438\u0435 \u0442\u0438\u043f\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u043d\u0435\u043a\u0438\u0439 <em>\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439<\/em>, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0449\u0438\u0445\u0441\u044f \u043d\u0430\u0434 \u00ab\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0432\u043d\u0443\u0442\u0440\u0438\u00bb \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u041d\u043e \u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u00ab\u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430\u00bb <code>F[A] =&gt; B<\/code>. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0432\u0430\u0436\u043d\u043e \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u00ab\u0445\u0440\u0430\u043d\u0438\u043c\u043e\u0433\u043e\u00bb \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>F[A] =&gt; A<\/code>. \u042d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u0435\u0439\u0447\u0430\u0441 \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435.<\/p>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043b\u0438 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u00ab\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f\u00bb \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 <code>F[A]<\/code> \u0432 \u0432\u0438\u0434\u0435 \u043d\u0435\u043a\u043e\u0433\u043e \u0442\u0438\u043f\u0430 <code>\u2202[F][A]<\/code>. \u0422\u043e\u0433\u0434\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u043a \u043f\u0430\u0440\u0443 <code>(\u2202[F][A], A)<\/code>. \u041c\u044b \u043a\u0430\u043a \u0431\u044b \u00ab\u0432\u044b\u043a\u0430\u043b\u044b\u0432\u0430\u0435\u043c\u00bb \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>A<\/code> \u0438\u0437 <code>F[A]<\/code>.<\/p>\n<p>\u0412 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e:<\/p>\n<pre><code class=\"scala\">type Const[X] = SomeType type Id   [X] = X  summon[\u2202[Const][X] =:= Nothing] \/\/ 0    (Nothing, A) \u2245 Nothing summon[\u2202[Id   ][X] =:= Unit   ] \/\/ 1    (Unit, A) \u2245 A = F[A]<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 <code>Id<\/code> \u0438\u043c\u0435\u0435\u043c \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u2013 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043d\u0435 \u043d\u0435\u0441\u0451\u0442 \u043d\u0438\u0447\u0435\u0433\u043e, \u043a\u0440\u043e\u043c\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u0444\u0430\u043a\u0442\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 <code>A<\/code>. \u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0442\u0438\u043f <code>Const[X]<\/code> \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432 \u0442\u0435\u043b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>X<\/code>, \u0437\u043d\u0430\u0447\u0438\u0442 \u043e\u043d \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0438\u043a\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0442\u043e \u0434\u043b\u044f \u0441\u0443\u043c\u043c\u044b \u0442\u0438\u043f\u043e\u0432 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432\u044b\u0431\u043e\u0440, \u0438\u0437 \u043a\u0430\u043a\u043e\u0433\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0451\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"scala\">infix type  +[A,    B   ] = A `Either` B infix type ++[F[_], G[_]] = [X] =&gt;&gt; F[X] + G[X]  summon[\u2202[F ++ G][X] =:= \u2202[F][X] + \u2202[G][X]]  summon[\u2202[Id ++ (Const ++ Id)][X] =:= Unit + Unit] \/\/    \u2202\u2093[X  + (SomeType + X)]    =:=   1  +  1   \u2245 Boolean  - \u0442\u0438\u043f \u0441 \u0434\u0432\u0443\u043c\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438, \u043c\u0435\u0441\u0442\u043e\u043c \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f X<\/code><\/pre>\n<p>\u0421 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0442\u0438\u043f\u043e\u0432 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043f\u043e\u0445\u043e\u0436\u0430\u044f \u2013 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u0432\u044b\u0431\u043e\u0440, \u0438\u0437 \u043a\u0430\u043a\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044f \u0434\u043e\u0441\u0442\u0430\u0451\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u0443\u043c\u043c\u0430 \u0442\u0438\u043f\u043e\u0432. \u041f\u0440\u0438\u0447\u0451\u043c, \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0433\u043e, \u043f\u043e\u043c\u0438\u043c\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044f, \u0431\u0443\u0434\u0435\u0442 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044c, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u043b\u0438 (\u0432\u0435\u0434\u044c \u044d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430):<\/p>\n<pre><code class=\"scala\">infix type  \u00d7[A,    B   ] = (A, B) infix type \u00d7\u00d7[F[_], G[_]] = [X] =&gt;&gt; F[X] \u00d7 G[X]  summon[\u2202[F \u00d7\u00d7 G]][X] =:= \u2202[F][X] \u00d7 G[X] + F[X] \u00d7 \u2202[G][X]]  summon[\u2202[Id \u00d7\u00d7 (Const ++ Id) ][X] =:= SomeType + X + X] summon[\u2202[Id \u00d7\u00d7 Id \u00d7\u00d7 Id \u00d7\u00d7 Id][X] =:= (X <\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-443372","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/443372","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=443372"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/443372\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=443372"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=443372"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=443372"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}