<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[yNotebook]]></title><description><![CDATA[Life and science notes]]></description><link>https://yakovlev.me/</link><image><url>https://yakovlev.me/favicon.png</url><title>yNotebook</title><link>https://yakovlev.me/</link></image><generator>Ghost 5.87</generator><lastBuildDate>Fri, 20 Mar 2026 18:49:55 GMT</lastBuildDate><atom:link href="https://yakovlev.me/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Сборка Hello World под Flipper Zero в 2023]]></title><description><![CDATA[С момента публикации предыдущего поста, описывающего мои первые изыскания с Flipper Zero прошло полгода. Как ни странно, он продолжает быть актуальным и популярным в сообществе, однако за это время тулинг для разработки под Flipper шагнул вперед.]]></description><link>https://yakovlev.me/hello-flipper-zero-2023/</link><guid isPermaLink="false">64da0eb290ae5b000182799b</guid><category><![CDATA[tutorial]]></category><dc:creator><![CDATA[Pavel Yakovlev]]></dc:creator><pubDate>Mon, 14 Aug 2023 12:30:00 GMT</pubDate><media:content url="https://yakovlev.me/content/images/2023/08/fpz_up.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://yakovlev.me/content/images/2023/08/fpz_up.jpg" alt="&#x421;&#x431;&#x43E;&#x440;&#x43A;&#x430; Hello World &#x43F;&#x43E;&#x434; Flipper Zero &#x432; 2023"><p>&#x421; &#x43C;&#x43E;&#x43C;&#x435;&#x43D;&#x442;&#x430; &#x43F;&#x443;&#x431;&#x43B;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438; <a href="https://yakovlev.me/hello-flipper-zero/">&#x43F;&#x440;&#x435;&#x434;&#x44B;&#x434;&#x443;&#x449;&#x435;&#x433;&#x43E; &#x43F;&#x43E;&#x441;&#x442;&#x430;</a>, &#x43E;&#x43F;&#x438;&#x441;&#x44B;&#x432;&#x430;&#x44E;&#x449;&#x435;&#x433;&#x43E; &#x43C;&#x43E;&#x438; &#x43F;&#x435;&#x440;&#x432;&#x44B;&#x435; &#x438;&#x437;&#x44B;&#x441;&#x43A;&#x430;&#x43D;&#x438;&#x44F; &#x441; Flipper Zero &#x43F;&#x440;&#x43E;&#x448;&#x43B;&#x43E; &#x43F;&#x43E;&#x43B;&#x433;&#x43E;&#x434;&#x430;. &#x41A;&#x430;&#x43A; &#x43D;&#x438; &#x441;&#x442;&#x440;&#x430;&#x43D;&#x43D;&#x43E;, &#x43E;&#x43D; &#x43F;&#x440;&#x43E;&#x434;&#x43E;&#x43B;&#x436;&#x430;&#x435;&#x442; &#x431;&#x44B;&#x442;&#x44C; &#x430;&#x43A;&#x442;&#x443;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x43C; &#x438; &#x43F;&#x43E;&#x43F;&#x443;&#x43B;&#x44F;&#x440;&#x43D;&#x44B;&#x43C; &#x432; &#x441;&#x43E;&#x43E;&#x431;&#x449;&#x435;&#x441;&#x442;&#x432;&#x435;, &#x43E;&#x434;&#x43D;&#x430;&#x43A;&#x43E; &#x437;&#x430; &#x44D;&#x442;&#x43E; &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x442;&#x443;&#x43B;&#x438;&#x43D;&#x433; &#x434;&#x43B;&#x44F; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x438; &#x43F;&#x43E;&#x434; Flipper &#x448;&#x430;&#x433;&#x43D;&#x443;&#x43B; &#x432;&#x43F;&#x435;&#x440;&#x435;&#x434;, &#x438; &#x43A;&#x430;&#x436;&#x434;&#x44B;&#x439; &#x440;&#x430;&#x437;, &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x43B;&#x44E;&#x434;&#x438; &#x43F;&#x438;&#x448;&#x443;&#x442;, &#x447;&#x442;&#x43E; &#x438;&#x43C; &#x43F;&#x43E;&#x43C;&#x43E;&#x433;&#x43B;&#x430; &#x43C;&#x43E;&#x44F; &#x441;&#x442;&#x430;&#x442;&#x44C;&#x44F;, &#x43C;&#x43E;&#x434;&#x435;&#x440;&#x430;&#x442;&#x43E;&#x440;&#x44B; &#x442;&#x43E;&#x43F;&#x438;&#x43A;&#x430; Development SW &amp; HW &#x432; <a href="https://t.me/flipperzero?ref=yakovlev.me">&#x447;&#x430;&#x442;&#x435;</a> &#x43F;&#x438;&#x448;&#x443;&#x442;, &#x447;&#x442;&#x43E; &#x441;&#x442;&#x43E;&#x438;&#x442; &#x43F;&#x435;&#x440;&#x435;&#x441;&#x442;&#x430;&#x442;&#x44C; &#x43B;&#x435;&#x437;&#x442;&#x44C; &#x432; &#x438;&#x441;&#x445;&#x43E;&#x434;&#x43D;&#x438;&#x43A;&#x438; &#x43F;&#x440;&#x43E;&#x448;&#x438;&#x432;&#x43A;&#x438;, &#x430; &#x43D;&#x430;&#x447;&#x430;&#x442;&#x44C; &#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; <code>ufbt</code> (micro Flipper Build Tool). &#x420;&#x430;&#x437; &#x443;&#x436; &#x43B;&#x44E;&#x434;&#x438; &#x434;&#x43E; &#x441;&#x438;&#x445; &#x43F;&#x43E;&#x440; &#x441;&#x44E;&#x434;&#x430; &#x437;&#x430;&#x431;&#x440;&#x435;&#x434;&#x430;&#x44E;&#x442;, &#x43D;&#x430;&#x43F;&#x438;&#x448;&#x443; &#x43A;&#x440;&#x430;&#x442;&#x43A;&#x443;&#x44E; &#x441;&#x43F;&#x440;&#x430;&#x432;&#x43A;&#x443;, &#x43A;&#x430;&#x43A; &#x44D;&#x442;&#x43E; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2023/08/image.png" class="kg-image" alt="&#x421;&#x431;&#x43E;&#x440;&#x43A;&#x430; Hello World &#x43F;&#x43E;&#x434; Flipper Zero &#x432; 2023" loading="lazy" width="780" height="484" srcset="https://yakovlev.me/content/images/size/w600/2023/08/image.png 600w, https://yakovlev.me/content/images/2023/08/image.png 780w" sizes="(min-width: 720px) 720px"><figcaption>&#x410;&#x432;&#x433;&#x443;&#x441;&#x442; 2023</figcaption></figure><h3 id="%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D1%82%D1%83%D0%BB%D0%B8%D0%BD%D0%B3%D0%B0">&#x423;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x43A;&#x430; &#x442;&#x443;&#x43B;&#x438;&#x43D;&#x433;&#x430;</h3><p>&#x427;&#x442;&#x43E; &#x436;, &#x43F;&#x43E;&#x440;&#x442;&#x438;&#x440;&#x443;&#x435;&#x43C; &#x43D;&#x430;&#x448; Hello World &#x43D;&#x430; &#x43D;&#x43E;&#x432;&#x443;&#x44E; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x443; &#x441;&#x431;&#x43E;&#x440;&#x43A;&#x438;. <code>ufbt</code> &#x441;&#x442;&#x430;&#x432;&#x438;&#x442;&#x441;&#x44F; &#x43A;&#x430;&#x43A; Python &#x43F;&#x430;&#x43A;&#x435;&#x442;, &#x434;&#x43B;&#x44F; &#x447;&#x438;&#x441;&#x442;&#x43E;&#x442;&#x44B; &#x44F; &#x440;&#x435;&#x43A;&#x43E;&#x43C;&#x435;&#x43D;&#x434;&#x443;&#x44E; &#x437;&#x430;&#x432;&#x435;&#x441;&#x442;&#x438; &#x43E;&#x442;&#x434;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; virtualenv &#x438;&#x43B;&#x438; conda environment &#x434;&#x43B;&#x44F; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x44B; &#x441; &#x43D;&#x438;&#x43C;. &#x414;&#x43B;&#x44F; &#x442;&#x435;&#x445;, &#x43A;&#x442;&#x43E; &#x43F;&#x43E;&#x434;&#x437;&#x430;&#x431;&#x44B;&#x43B;, &#x43A;&#x430;&#x43A; &#x44D;&#x442;&#x43E; &#x434;&#x435;&#x43B;&#x430;&#x435;&#x442;&#x441;&#x44F; (&#x432;&#x43E;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x439;&#x442;&#x435;&#x441;&#x44C; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43E;&#x434;&#x43D;&#x438;&#x43C; &#x438;&#x437; &#x434;&#x432;&#x443;&#x445; &#x432;&#x430;&#x440;&#x438;&#x430;&#x43D;&#x442;&#x43E;&#x432;, &#x430; &#x43D;&#x435; &#x43E;&#x431;&#x43E;&#x438;&#x43C;&#x438; &#x441;&#x440;&#x430;&#x437;&#x443;):</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">$ python -m pip install virtualenv
$ virtualenv flipper
$ source ./flipper/bin/activate</code></pre><figcaption>&#x417;&#x430;&#x432;&#x43E;&#x434;&#x438;&#x43C; virtualenv &#x441; &#x438;&#x43C;&#x435;&#x43D;&#x435;&#x43C; flipper</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-bash">$ conda create -n flipper python=3.10
$ conda activate flipper</code></pre><figcaption>&#x417;&#x430;&#x432;&#x43E;&#x434;&#x438;&#x43C; conda environment</figcaption></figure><p>&#x414;&#x430;&#x43B;&#x44C;&#x43D;&#x435;&#x439;&#x448;&#x430;&#x44F; &#x443;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x43A;&#x430; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x430; &#x438; &#x43E;&#x434;&#x438;&#x43D;&#x430;&#x43A;&#x43E;&#x432;&#x430; &#x434;&#x43B;&#x44F; &#x43E;&#x431;&#x43E;&#x438;&#x445; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435;&#x432;:</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">$ python -m pip install --upgrade ufbt
$ ufbt update
14:37:02.986 [I] Deploying SDK for f7
14:37:02.987 [I] Fetching version info for UpdateChannel.RELEASE from https://update.flipperzero.one/firmware/directory.json
14:37:03.630 [I] Using version: 0.88.0
14:37:03.630 [I] uFBT SDK dir: /Users/pavel/.ufbt/current
14:37:05.275 [I] Deploying SDK
14:37:05.475 [I] SDK deployed.</code></pre><figcaption>&#x41F;&#x435;&#x440;&#x432;&#x430;&#x44F; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x430; &#x441;&#x43A;&#x430;&#x447;&#x430;&#x435;&#x442; uFBT, &#x432;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x441;&#x43A;&#x430;&#x447;&#x430;&#x435;&#x442; &#x442;&#x435;&#x43A;&#x443;&#x449;&#x443;&#x44E; &#x432;&#x435;&#x440;&#x441;&#x438;&#x44E; SDK</figcaption></figure><p>&#x41F;&#x440;&#x438; &#x44D;&#x442;&#x43E;&#x43C; toolchain, &#x432;&#x43A;&#x43B;&#x44E;&#x447;&#x430;&#x44E;&#x449;&#x438;&#x439; &#x432; &#x441;&#x435;&#x431;&#x44F; &#x43A;&#x43E;&#x43C;&#x43F;&#x438;&#x43B;&#x44F;&#x442;&#x43E;&#x440; &#x438; &#x441;&#x442;&#x430;&#x43D;&#x434;&#x430;&#x440;&#x442;&#x43D;&#x44B;&#x435; &#x431;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x438;, &#x44D;&#x442;&#x43E;&#x439; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x43E;&#x439; &#x43D;&#x435; &#x441;&#x43A;&#x430;&#x447;&#x430;&#x435;&#x442;&#x441;&#x44F;. &#x41F;&#x440;&#x43E;&#x441;&#x442;&#x43E;&#x439; &#x441;&#x43F;&#x43E;&#x441;&#x43E;&#x431; &#x435;&#x433;&#x43E; &#x441;&#x43A;&#x430;&#x447;&#x430;&#x442;&#x44C; &#x2014; &#x44D;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x442;&#x438;&#x442;&#x44C; <code>ufbt</code>. &#x41E;&#x43D;&#x43E; &#x432; &#x43A;&#x43E;&#x43D;&#x446;&#x435; &#x43A;&#x438;&#x43D;&#x435;&#x442; &#x43E;&#x448;&#x438;&#x431;&#x43A;&#x443;, &#x43D;&#x43E; &#x432;&#x441;&#x435; &#x43D;&#x435;&#x43E;&#x431;&#x445;&#x43E;&#x434;&#x438;&#x43C;&#x43E;&#x435; &#x441;&#x43A;&#x430;&#x447;&#x430;&#x435;&#x442;. &#x41C;&#x43E;&#x436;&#x43D;&#x43E; &#x43D;&#x435; &#x43F;&#x440;&#x43E;&#x445;&#x43E;&#x434;&#x438;&#x442;&#x44C; &#x44D;&#x442;&#x43E;&#x442; &#x448;&#x430;&#x433;, &#x442;&#x43E;&#x433;&#x434;&#x430; toolchain &#x431;&#x443;&#x434;&#x435;&#x442; &#x441;&#x43A;&#x430;&#x447;&#x430;&#x43D; &#x43F;&#x440;&#x438; &#x43F;&#x435;&#x440;&#x432;&#x43E;&#x439; &#x43F;&#x43E;&#x43F;&#x44B;&#x442;&#x43A;&#x435; &#x441;&#x431;&#x43E;&#x440;&#x43A;&#x438; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x430;.</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">$ ufbt
Checking for tar..yes
Checking if downloaded toolchain tgz exists..no
Checking curl..yes
Downloading toolchain:
######################################################################### 100.0%
done
Removing old toolchain..done
Unpacking toolchain to &apos;/Users/pavel/.ufbt/toolchain&apos;:
##################################################################### 100.0%
done
Cleaning up..done
scons: Entering directory `/Users/pavel/.ufbt/current/scripts/ufbt&apos;

fbt: warning: Folder app: manifest application.fam is missing
LoadAppManifest, line 33, in file &quot;/Users/pavel/.ufbt/current/scripts/fbt_tools/fbt_apps.py&quot;
scons: *** No targets specified and no Default() targets found.  Stop.
Found nothing to build</code></pre><figcaption>&#x421;&#x43A;&#x430;&#x447;&#x430;&#x43B;&#x438; toolchain</figcaption></figure><p>&#x41D;&#x430; M1 Mac &#x43F;&#x43E;-&#x43F;&#x440;&#x435;&#x436;&#x43D;&#x435;&#x43C;&#x443; &#x43A;&#x430;&#x447;&#x430;&#x435;&#x442;&#x441;&#x44F; x64_86 &#x432;&#x435;&#x440;&#x441;&#x438;&#x44F; toolchain. &#x42D;&#x442;&#x43E; &#x437;&#x430; &#x43F;&#x43E;&#x43B;&#x433;&#x43E;&#x434;&#x430; &#x43D;&#x435; &#x43F;&#x43E;&#x43C;&#x435;&#x43D;&#x44F;&#x43B;&#x43E;&#x441;&#x44C;.</p><pre><code class="language-bash">$ ls ~/.ufbt/toolchain 
x86_64-darwin</code></pre><p>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x430; &#x43F;&#x43E;&#x43B;&#x43D;&#x43E;&#x441;&#x442;&#x44C;&#x44E; &#x43D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x435;&#x43D;&#x430;, &#x438; &#x43C;&#x44B; &#x433;&#x43E;&#x442;&#x43E;&#x432;&#x44B; &#x43A; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x435;.</p><h3 id="%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0">&#x421;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x438;&#x435; &#x43D;&#x43E;&#x432;&#x43E;&#x433;&#x43E; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x430;</h3><p>&#x421;&#x43E;&#x437;&#x434;&#x430;&#x442;&#x44C; &#x43D;&#x43E;&#x432;&#x44B;&#x439; &#x448;&#x430;&#x431;&#x43B;&#x43E;&#x43D;&#x43D;&#x44B;&#x439; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442; &#x432; &#x434;&#x438;&#x440;&#x435;&#x43A;&#x442;&#x43E;&#x440;&#x438;&#x438; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;&#x439; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x43E;&#x439; <code>ufbt create</code>. &#x412;&#x430;&#x436;&#x43D;&#x43E;, &#x447;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x432; &#x442;&#x435;&#x43A;&#x443;&#x449;&#x435;&#x439; &#x434;&#x438;&#x440;&#x435;&#x43A;&#x442;&#x43E;&#x440;&#x438;&#x438;, &#x442;&#x430;&#x43A; &#x447;&#x442;&#x43E; &#x43D;&#x435; &#x437;&#x430;&#x431;&#x443;&#x434;&#x44C;&#x442;&#x435; &#x441;&#x43D;&#x430;&#x447;&#x430;&#x43B;&#x430; &#x441;&#x43E;&#x437;&#x430;&#x434;&#x442;&#x44C; &#x43D;&#x43E;&#x432;&#x443;&#x44E; &#x434;&#x438;&#x440;&#x435;&#x43A;&#x442;&#x43E;&#x440;&#x438;&#x44E; &#x43F;&#x43E;&#x434; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442; &#x438; &#x43F;&#x435;&#x440;&#x435;&#x439;&#x442;&#x438; &#x432; &#x43D;&#x435;&#x435;.</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">$ mkdir hello_world
$ cd hello_world
$ ufbt create
scons: Entering directory `/Users/pavel/.ufbt/current/scripts/ufbt&apos;

fbt: warning: Folder app: manifest application.fam is missing
LoadAppManifest, line 33, in file &quot;/Users/pavel/.ufbt/current/scripts/fbt_tools/fbt_apps.py&quot;
Creating &apos;/Users/pavel/DEV/mcu/flipperzero/tutorial/hello_ufbt/template.c&apos;
	INSTALL	/Users/pavel/DEV/mcu/flipperzero/tutorial/hello_ufbt/template.png
Creating &apos;/Users/pavel/DEV/mcu/flipperzero/tutorial/hello_ufbt/application.fam&apos;
Mkdir(&quot;/Users/pavel/DEV/mcu/flipperzero/tutorial/hello_ufbt/images&quot;)
Touch(&quot;/Users/pavel/DEV/mcu/flipperzero/tutorial/hello_ufbt/images/.gitkeep&quot;)
Copy(&quot;/Users/pavel/DEV/mcu/flipperzero/tutorial/hello_ufbt/.github&quot;, &quot;project_template/app_template/.github&quot;)</code></pre><figcaption>&#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x43D;&#x43E;&#x432;&#x44B;&#x439; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;</figcaption></figure><p>&#x41A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x430; &#x441; &#x445;&#x43E;&#x434;&#x443; &#x432;&#x44B;&#x434;&#x430;&#x435;&#x442; &#x43E;&#x448;&#x438;&#x431;&#x43A;&#x443;, &#x447;&#x442;&#x43E; &#x43D;&#x435; &#x432;&#x438;&#x434;&#x438;&#x442; <code>application.fam</code>, &#x447;&#x442;&#x43E; &#x434;&#x43E;&#x432;&#x43E;&#x43B;&#x44C;&#x43D;&#x43E; &#x441;&#x442;&#x440;&#x430;&#x43D;&#x43D;&#x43E;, &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x443; &#x447;&#x442;&#x43E; &#x43E;&#x43D;&#x430; &#x441;&#x430;&#x43C;&#x430; &#x436;&#x435; &#x435;&#x433;&#x43E; &#x438; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x442;. &#x41D;&#x443;, &#x434;&#x430; &#x43B;&#x430;&#x434;&#x43D;&#x43E;, &#x44D;&#x442;&#x43E; &#x43C;&#x435;&#x43B;&#x43E;&#x447;&#x44C;, &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43A;&#x430;&#x43A; &#x438; &#x440;&#x430;&#x43D;&#x44C;&#x448;&#x435; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x442;&#x44C; &#x442;&#x440;&#x438; &#x43C;&#x438;&#x43D;&#x438;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E; &#x43D;&#x435;&#x43E;&#x431;&#x445;&#x43E;&#x434;&#x438;&#x43C;&#x44B;&#x445; &#x444;&#x430;&#x439;&#x43B;&#x430; &#x432;&#x440;&#x443;&#x447;&#x43D;&#x443;&#x44E; (<code>application.fam</code>, <code>hello_world.c</code>, <code>hello_world.png</code>), &#x43A;&#x430;&#x43A; &#x431;&#x44B;&#x43B;&#x43E; &#x43E;&#x43F;&#x438;&#x441;&#x430;&#x43D;&#x43E; <a href="https://yakovlev.me/hello-flipper-zero/">&#x432; &#x43F;&#x440;&#x43E;&#x448;&#x43B;&#x43E;&#x43C; &#x43F;&#x43E;&#x441;&#x442;&#x435;</a> &#x2014; &#x43C;&#x43D;&#x435; &#x442;&#x430;&#x43A;&#x43E;&#x439; &#x432;&#x430;&#x440;&#x438;&#x430;&#x43D;&#x442; &#x43D;&#x440;&#x430;&#x432;&#x438;&#x442;&#x441;&#x44F; &#x434;&#x430;&#x436;&#x435; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435;. &#x41D;&#x43E;, &#x433;&#x43B;&#x430;&#x432;&#x43D;&#x43E;&#x435;, &#x434;&#x430;&#x436;&#x435; &#x43F;&#x440;&#x438; &#x430;&#x432;&#x442;&#x43E;&#x43C;&#x430;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x43E;&#x439; &#x433;&#x435;&#x43D;&#x435;&#x440;&#x430;&#x446;&#x438;&#x438; &#x444;&#x430;&#x439;&#x43B;&#x43E;&#x432; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x430; &#x432;&#x441;&#x435; &#x437;&#x430;&#x442;&#x435;&#x43C; &#x443;&#x441;&#x43F;&#x435;&#x448;&#x43D;&#x43E; &#x441;&#x43E;&#x431;&#x438;&#x440;&#x430;&#x435;&#x442;&#x441;&#x44F;:</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">$ ufbt build
scons: Entering directory `/Users/pavel/.ufbt/current/scripts/ufbt&apos;
	ICONS	/Users/pavel/.ufbt/build/template/template_icons.c
	INSTALL	/Users/pavel/DEV/mcu/flipperzero/tutorial/hello_ufbt/template.png
	CC	/Users/pavel/.ufbt/build/template/template_icons.c
	APPCHK	/Users/pavel/.ufbt/build/template.fap
		Target: 7, API: 34.3</code></pre><figcaption>&#x421;&#x431;&#x43E;&#x440;&#x43A;&#x430; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x430;</figcaption></figure><p>&#x41C;&#x43E;&#x43C;&#x435;&#x43D;&#x442;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x432;&#x44B;&#x437;&#x432;&#x430;&#x43B; &#x443; &#x43C;&#x435;&#x43D;&#x44F; &#x432;&#x43E;&#x43F;&#x440;&#x43E;&#x441;&#x44B;: &#x441;&#x431;&#x43E;&#x440;&#x43A;&#x430; &#x43F;&#x440;&#x43E;&#x438;&#x441;&#x445;&#x43E;&#x434;&#x438;&#x442; &#x43D;&#x435; &#x432; &#x434;&#x438;&#x440;&#x435;&#x43A;&#x442;&#x43E;&#x440;&#x438;&#x438; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x430;, &#x430; &#x432; &#x434;&#x438;&#x440;&#x435;&#x43A;&#x442;&#x43E;&#x440;&#x438;&#x438; <code>ufbt</code> (&#x43F;&#x43E; &#x443;&#x43C;&#x43E;&#x43B;&#x447;&#x430;&#x43D;&#x438;&#x44E; &#x44D;&#x442;&#x43E; <code>$HOME/.ufbt/build</code>). &#x41D;&#x435; &#x441;&#x43E;&#x432;&#x441;&#x435;&#x43C; &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x43D;&#x43E;, &#x43F;&#x43E;&#x447;&#x435;&#x43C;&#x443; &#x432;&#x44B;&#x431;&#x440;&#x430;&#x43D;&#x43E; &#x442;&#x430;&#x43A;&#x43E;&#x435; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x435;. &#x41F;&#x440;&#x438; &#x44D;&#x442;&#x43E;&#x43C; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x430; build &#x43D;&#x435; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x442; &#x43D;&#x438;&#x43A;&#x430;&#x43A;&#x438;&#x445; &#x431;&#x438;&#x43D;&#x430;&#x440;&#x43D;&#x438;&#x43A;&#x43E;&#x432; &#x432; &#x434;&#x438;&#x440;&#x435;&#x43A;&#x442;&#x43E;&#x440;&#x438;&#x438; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x430;. &#x41E;&#x434;&#x43D;&#x430;&#x43A;&#x43E; &#x435;&#x441;&#x43B;&#x438; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x43A;&#x430;&#x442;&#x44C; &#x43D;&#x435; <code>ufbt build</code>, &#x430; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; <code>ufbt</code>, &#x442;&#x43E; &#x432; &#x43A;&#x43E;&#x43D;&#x446;&#x435; &#x43F;&#x440;&#x43E;&#x438;&#x437;&#x432;&#x43E;&#x434;&#x438;&#x442;&#x441;&#x44F; &#x434;&#x43E;&#x43F;&#x43E;&#x43B;&#x43D;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x435; &#x43A;&#x43E;&#x43F;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x431;&#x438;&#x43D;&#x430;&#x440;&#x43D;&#x438;&#x43A;&#x430; &#x432; &#x434;&#x438;&#x440;&#x435;&#x43A;&#x442;&#x43E;&#x440;&#x438;&#x44E; <code>./dist</code>:</p><pre><code class="language-bash">$ ufbt
scons: Entering directory `/Users/pavel/.ufbt/current/scripts/ufbt&apos;
	CC	/Users/pavel/.ufbt/build/template/template_icons.c
	INSTALL	/Users/pavel/DEV/mcu/flipperzero/tutorial/hello_ufbt/template.png
	CDB	/Users/pavel/DEV/mcu/flipperzero/tutorial/hello_ufbt/.vscode/compile_commands.json
	INSTALL	/Users/pavel/DEV/mcu/flipperzero/tutorial/hello_ufbt/dist/debug/template_d.elf
	INSTALL	/Users/pavel/DEV/mcu/flipperzero/tutorial/hello_ufbt/dist/template.fap
	APPCHK	/Users/pavel/.ufbt/build/template.fap
		Target: 7, API: 34.3
$ ls
application.fam dist            images          template.c      template.png</code></pre><p>&#x41A;&#x430;&#x43A; &#x438; &#x440;&#x430;&#x43D;&#x44C;&#x448;&#x435;, &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x43D;&#x44B;&#x439; FAP &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x432;&#x440;&#x443;&#x447;&#x43D;&#x443;&#x44E; &#x441;&#x43A;&#x43E;&#x43F;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x444;&#x430;&#x439;&#x43B;, &#x43B;&#x438;&#x431;&#x43E; &#x436;&#x435; &#x437;&#x430;&#x43B;&#x438;&#x442;&#x44C; &#x435;&#x433;&#x43E; &#x43D;&#x430; &#x43F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x43D;&#x44B;&#x439; &#x43F;&#x43E; USB-&#x43A;&#x430;&#x431;&#x435;&#x43B;&#x44E; Flipper Zero &#x441; &#x43F;&#x43E;&#x43C;&#x43E;&#x449;&#x44C;&#x44E; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x44B; <code>ufbt flash_usb</code>.</p><h3 id="%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-vs-code">&#x420;&#x430;&#x431;&#x43E;&#x442;&#x430; &#x441; VS Code</h3><p>&#x41A;&#x430;&#x43A; &#x438; &#x440;&#x430;&#x43D;&#x44C;&#x448;&#x435;, &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x441;&#x433;&#x435;&#x43D;&#x435;&#x440;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442; &#x434;&#x43B;&#x44F; VS Code, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x431;&#x443;&#x434;&#x435;&#x442; &#x441;&#x43E;&#x434;&#x435;&#x440;&#x436;&#x430;&#x442;&#x44C; &#x432;&#x441;&#x435; &#x43D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x435;&#x43D;&#x43D;&#x44B;&#x435; &#x437;&#x430;&#x434;&#x430;&#x447;&#x438; &#x434;&#x43B;&#x44F; &#x441;&#x431;&#x43E;&#x440;&#x43A;&#x438;, &#x434;&#x435;&#x431;&#x430;&#x433;&#x430; &#x438; &#x43F;&#x440;&#x43E;&#x447;&#x435;&#x433;&#x43E;. &#x414;&#x435;&#x43B;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x44D;&#x442;&#x43E; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x43E;&#x439; <code>ufbt vscode_dist</code>:</p><pre><code class="language-bash">$ ufbt vscode_dist
scons: Entering directory `/Users/pavel/.ufbt/current/scripts/ufbt&apos;
Creating &apos;/Users/pavel/DEV/mcu/flipperzero/tutorial/hello_ufbt/.vscode/c_cpp_properties.json&apos;
Creating &apos;/Users/pavel/DEV/mcu/flipperzero/tutorial/hello_ufbt/.vscode/extensions.json&apos;
Creating &apos;/Users/pavel/DEV/mcu/flipperzero/tutorial/hello_ufbt/.vscode/launch.json&apos;
Creating &apos;/Users/pavel/DEV/mcu/flipperzero/tutorial/hello_ufbt/.vscode/settings.json&apos;
Creating &apos;/Users/pavel/DEV/mcu/flipperzero/tutorial/hello_ufbt/.vscode/tasks.json&apos;
	INSTALL	/Users/pavel/DEV/mcu/flipperzero/tutorial/hello_ufbt/.clang-format
	INSTALL	/Users/pavel/DEV/mcu/flipperzero/tutorial/hello_ufbt/.editorconfig
	INSTALL	/Users/pavel/DEV/mcu/flipperzero/tutorial/hello_ufbt/.gitignore</code></pre><p>&#x417;&#x430;&#x442;&#x435;&#x43C; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; &#x43E;&#x442;&#x43A;&#x440;&#x44B;&#x442;&#x44C; &#x434;&#x438;&#x440;&#x435;&#x43A;&#x442;&#x43E;&#x440;&#x438;&#x44E; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x430; &#x432; VS Code, &#x438; &#x432;&#x441;&#x435; &#x431;&#x443;&#x434;&#x435;&#x442; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x442;&#x44C; &#x43A;&#x430;&#x43A; &#x43D;&#x430;&#x434;&#x43E;:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2023/08/image-1.png" class="kg-image" alt="&#x421;&#x431;&#x43E;&#x440;&#x43A;&#x430; Hello World &#x43F;&#x43E;&#x434; Flipper Zero &#x432; 2023" loading="lazy" width="2000" height="1300" srcset="https://yakovlev.me/content/images/size/w600/2023/08/image-1.png 600w, https://yakovlev.me/content/images/size/w1000/2023/08/image-1.png 1000w, https://yakovlev.me/content/images/size/w1600/2023/08/image-1.png 1600w, https://yakovlev.me/content/images/size/w2400/2023/08/image-1.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>&#x41D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x435;&#x43D;&#x43D;&#x44B;&#x439; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442; &#x432; VS Code</figcaption></figure><p>&#x412;&#x43E;&#x442;, &#x441;&#x43E;&#x431;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x43E;, &#x438; &#x432;&#x441;&#x435;. &#x41A;&#x430;&#x43A; &#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43D;&#x430;&#x439;&#x442;&#x438; &#x432; &#x43F;&#x440;&#x435;&#x434;&#x44B;&#x434;&#x443;&#x449;&#x435;&#x43C; &#x43F;&#x43E;&#x441;&#x442;&#x435;, &#x43E;&#x43D; &#x432;&#x441;&#x435; &#x435;&#x449;&#x435; &#x430;&#x43A;&#x442;&#x443;&#x430;&#x43B;&#x435;&#x43D;.</p>]]></content:encoded></item><item><title><![CDATA[Сборка Hello World под Flipper Zero]]></title><description><![CDATA[<blockquote>&#x41F;&#x43E;&#x448;&#x430;&#x433;&#x43E;&#x432;&#x430;&#x44F; &#x440;&#x430;&#x441;&#x43A;&#x43B;&#x430;&#x434;&#x43A;&#x430; &#x44D;&#x442;&#x430;&#x43F;&#x43E;&#x432; &#x440;&#x430;&#x437;&#x432;&#x438;&#x442;&#x438;&#x44F; &#x43A;&#x43E;&#x434;&#x430; &#x438;&#x437; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43F;&#x43E;&#x441;&#x442;&#x430; &#x434;&#x43E;</blockquote>]]></description><link>https://yakovlev.me/hello-flipper-zero/</link><guid isPermaLink="false">6356a408a489c60001f8215e</guid><dc:creator><![CDATA[Pavel Yakovlev]]></dc:creator><pubDate>Mon, 24 Oct 2022 21:23:56 GMT</pubDate><media:content url="https://yakovlev.me/content/images/2022/10/flipper_hello.jpg" medium="image"/><content:encoded><![CDATA[<blockquote>&#x41F;&#x43E;&#x448;&#x430;&#x433;&#x43E;&#x432;&#x430;&#x44F; &#x440;&#x430;&#x441;&#x43A;&#x43B;&#x430;&#x434;&#x43A;&#x430; &#x44D;&#x442;&#x430;&#x43F;&#x43E;&#x432; &#x440;&#x430;&#x437;&#x432;&#x438;&#x442;&#x438;&#x44F; &#x43A;&#x43E;&#x434;&#x430; &#x438;&#x437; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43F;&#x43E;&#x441;&#x442;&#x430; &#x434;&#x43E;&#x441;&#x442;&#x443;&#x43F;&#x43D;&#x430; &#x43D;&#x430; <a href="https://github.com/zmactep/flipperzero-hello-world?ref=yakovlev.me">GitHub</a>.</blockquote><img src="https://yakovlev.me/content/images/2022/10/flipper_hello.jpg" alt="&#x421;&#x431;&#x43E;&#x440;&#x43A;&#x430; Hello World &#x43F;&#x43E;&#x434; Flipper Zero"><p>&#x41D;&#x430; &#x43F;&#x440;&#x43E;&#x448;&#x435;&#x434;&#x448;&#x438;&#x445; &#x432;&#x44B;&#x445;&#x43E;&#x434;&#x43D;&#x44B;&#x445; &#x43C;&#x43D;&#x435;, &#x43D;&#x430;&#x43A;&#x43E;&#x43D;&#x435;&#x446;, &#x43F;&#x440;&#x438;&#x448;&#x435;&#x43B; &#x43C;&#x43E;&#x439; &#x445;&#x430;&#x43A;&#x435;&#x440;&#x441;&#x43A;&#x438;&#x439; &#x442;&#x430;&#x43C;&#x430;&#x433;&#x43E;&#x447;&#x438; Flipper Zero, &#x43F;&#x43E;&#x434;&#x434;&#x435;&#x440;&#x436;&#x430;&#x43D;&#x43D;&#x44B;&#x439; &#x43D;&#x430; Kickstarter &#x435;&#x449;&#x435; &#x432; &#x430;&#x432;&#x433;&#x443;&#x441;&#x442;&#x435; 2020 &#x433;&#x43E;&#x434;&#x430;. &#x41F;&#x43E;&#x441;&#x43B;&#x435; &#x43A;&#x43E;&#x43F;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x432;&#x441;&#x435;&#x445; &#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x439;, &#x43F;&#x440;&#x43E;&#x43F;&#x443;&#x441;&#x43A;&#x43E;&#x432; &#x43D;&#x430; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x443;, &#x43F;&#x430;&#x440;&#x43A;&#x43E;&#x432;&#x43A;&#x443;, &#x430; &#x442;&#x430;&#x43A;&#x436;&#x435; &#x432;&#x44B;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x43F;&#x430;&#x440;&#x44B; &#x442;&#x435;&#x43B;&#x435;&#x432;&#x438;&#x437;&#x43E;&#x440;&#x43E;&#x432; &#x438; &#x43A;&#x43E;&#x43D;&#x434;&#x438;&#x446;&#x438;&#x43E;&#x43D;&#x435;&#x440;&#x43E;&#x432;, &#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;, &#x437;&#x430;&#x445;&#x43E;&#x442;&#x435;&#x43B;&#x43E;&#x441;&#x44C; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435;&#x433;&#x43E;. &#x421;&#x440;&#x435;&#x434;&#x438; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435;&#x433;&#x43E; &#x431;&#x44B;&#x43B;&#x430; &#x43F;&#x440;&#x43E;&#x431;&#x430; &#x440;&#x430;&#x437;&#x43D;&#x44B;&#x445; &#x430;&#x43B;&#x44C;&#x442;&#x435;&#x440;&#x43D;&#x430;&#x442;&#x438;&#x432;&#x43D;&#x44B;&#x445; &#x43F;&#x440;&#x43E;&#x448;&#x438;&#x432;&#x43E;&#x43A; &#x438;, &#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;, &#x43F;&#x43E;&#x43F;&#x44B;&#x442;&#x43A;&#x430; &#x43D;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x43A;&#x430;&#x43A;&#x43E;&#x439;-&#x442;&#x43E; &#x43A;&#x43E;&#x434; &#x43F;&#x43E;&#x434; Flipper &#x441;&#x430;&#x43C;&#x43E;&#x441;&#x442;&#x43E;&#x44F;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2022/10/image-2.png" class="kg-image" alt="&#x421;&#x431;&#x43E;&#x440;&#x43A;&#x430; Hello World &#x43F;&#x43E;&#x434; Flipper Zero" loading="lazy" width="1626" height="1398" srcset="https://yakovlev.me/content/images/size/w600/2022/10/image-2.png 600w, https://yakovlev.me/content/images/size/w1000/2022/10/image-2.png 1000w, https://yakovlev.me/content/images/size/w1600/2022/10/image-2.png 1600w, https://yakovlev.me/content/images/2022/10/image-2.png 1626w" sizes="(min-width: 720px) 720px"><figcaption><a href="https://docs.flipperzero.one/development/firmware?ref=yakovlev.me">&#x421;&#x442;&#x440;&#x430;&#x43D;&#x438;&#x446;&#x430; &#x441; &#x434;&#x43E;&#x43A;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x446;&#x438;&#x435;&#x439;</a> &#x43D;&#x430; &#x43E;&#x444;&#x438;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x43C; &#x441;&#x430;&#x439;&#x442;&#x435;</figcaption></figure><p>&#x41A; &#x441;&#x43E;&#x436;&#x430;&#x43B;&#x435;&#x43D;&#x438;&#x44E;, &#x431;&#x44B;&#x441;&#x442;&#x440;&#x43E; &#x43E;&#x43A;&#x430;&#x437;&#x430;&#x43B;&#x43E;&#x441;&#x44C;, &#x447;&#x442;&#x43E; &#x434;&#x43E;&#x43A;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x446;&#x438;&#x438; &#x43F;&#x43E; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x438;&#x44E; &#x441;&#x43E;&#x431;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x44B;&#x445; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x439; &#x43D;&#x435;&#x442; &#x43D;&#x438;&#x43A;&#x430;&#x43A;&#x43E;&#x439;, API &#x43D;&#x435; &#x43E;&#x43F;&#x438;&#x441;&#x430;&#x43D;&#x43E;, &#x430; &#x435;&#x434;&#x438;&#x43D;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x44B;&#x439; &#x43D;&#x430; github <a href="https://github.com/DroomOne/Flipper-Plugin-Tutorial?ref=yakovlev.me">&#x442;&#x443;&#x442;&#x43E;&#x440;&#x438;&#x430;&#x43B;</a> &#x43D;&#x435; &#x43A;&#x43E;&#x43C;&#x43F;&#x438;&#x43B;&#x438;&#x440;&#x443;&#x435;&#x442;&#x441;&#x44F;, &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x443; &#x447;&#x442;&#x43E; &#x437;&#x430; 6 &#x43C;&#x435;&#x441;&#x44F;&#x446;&#x435;&#x432; &#x441; &#x435;&#x433;&#x43E; &#x43E;&#x43F;&#x443;&#x431;&#x43B;&#x438;&#x43A;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; API &#x43F;&#x43E;&#x43C;&#x435;&#x43D;&#x44F;&#x43B;&#x43E;&#x441;&#x44C; &#x43A;&#x430;&#x440;&#x434;&#x438;&#x43D;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;. &#x41F;&#x440;&#x438;&#x448;&#x43B;&#x43E;&#x441;&#x44C; &#x447;&#x438;&#x442;&#x430;&#x442;&#x44C; &#x43A;&#x43E;&#x434; &#x434;&#x440;&#x443;&#x433;&#x438;&#x445; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x439; &#x438; &#x43F;&#x43E; &#x43D;&#x430;&#x438;&#x442;&#x438;&#x44E; &#x43F;&#x44B;&#x442;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x44C;, &#x447;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x438;&#x441;&#x445;&#x43E;&#x434;&#x438;&#x442;. &#x41D;&#x430; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x435; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x447;&#x442;&#x435;&#x43D;&#x438;&#x44F; &#x438; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x43B;&#x441;&#x44F; &#x44D;&#x442;&#x43E;&#x442; &#x442;&#x443;&#x442;&#x43E;&#x440;&#x438;&#x430;&#x43B;. &#x418;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x43E;, &#x437;&#x430; &#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x443;&#x441;&#x442;&#x430;&#x440;&#x435;&#x435;&#x442; &#x43E;&#x43D;? &#x1F914;</p><blockquote><strong>UPDATE.</strong> &#x420;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x447;&#x438;&#x43A;&#x438; Flipper &#x433;&#x43E;&#x432;&#x43E;&#x440;&#x44F;&#x442;, &#x447;&#x442;&#x43E; &#x434;&#x43E;&#x43A;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x446;&#x438;&#x44F; &#x43F;&#x43E;&#x44F;&#x432;&#x438;&#x442;&#x441;&#x44F;, &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x441;&#x442;&#x430;&#x431;&#x438;&#x43B;&#x438;&#x437;&#x438;&#x440;&#x443;&#x435;&#x442;&#x441;&#x44F; API. &#x421;&#x43E; &#x441;&#x432;&#x43E;&#x435;&#x439; &#x441;&#x442;&#x43E;&#x440;&#x43E;&#x43D;&#x44B; &#x43F;&#x43E;&#x434;&#x442;&#x432;&#x435;&#x440;&#x436;&#x434;&#x430;&#x44E;, &#x447;&#x442;&#x43E; &#x43C;&#x435;&#x43D;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x43E;&#x43D;&#x43E; &#x447;&#x430;&#x441;&#x442;&#x43E;, &#x430; &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x443; &#x441;&#x435;&#x439;&#x447;&#x430;&#x441; &#x447;&#x442;&#x43E;-&#x442;&#x43E; &#x43E;&#x442;&#x43B;&#x438;&#x432;&#x430;&#x442;&#x44C; &#x432; &#x446;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x435;, &#x43D;&#x430;&#x432;&#x435;&#x440;&#x43D;&#x43E;&#x435;, &#x434;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x43F;&#x440;&#x435;&#x436;&#x434;&#x435;&#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x43E;.</blockquote><h2 id="%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B0-%D0%BF%D1%80%D0%BE%D1%88%D0%B8%D0%B2%D0%BA%D0%B8">&#x421;&#x431;&#x43E;&#x440;&#x43A;&#x430; &#x43F;&#x440;&#x43E;&#x448;&#x438;&#x432;&#x43A;&#x438;</h2><p>&#x412;&#x43D;&#x435;&#x437;&#x430;&#x43F;&#x43D;&#x43E;, &#x43D;&#x43E; &#x434;&#x43B;&#x44F; &#x43D;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x43D;&#x438;&#x44F; &#x441;&#x432;&#x43E;&#x435;&#x433;&#x43E; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F; &#x432; &#x43F;&#x435;&#x440;&#x432;&#x443;&#x44E; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x43F;&#x43E;&#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x43D;&#x430;&#x443;&#x447;&#x438;&#x442;&#x44C;&#x441;&#x44F; &#x441;&#x43E;&#x431;&#x438;&#x440;&#x430;&#x442;&#x44C; &#x43F;&#x440;&#x43E;&#x448;&#x438;&#x432;&#x43A;&#x443;. &#x414;&#x43B;&#x44F; &#x43E;&#x444;&#x438;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x438; &#x43C;&#x43E;&#x434;&#x438;&#x444;&#x438;&#x446;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x43E;&#x439; &#x43F;&#x43E;&#x440;&#x44F;&#x434;&#x43E;&#x43A; &#x434;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x439; &#x43D;&#x435; &#x43C;&#x435;&#x43D;&#x44F;&#x435;&#x442;&#x441;&#x44F;, &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x443; &#x43F;&#x43E;&#x43A;&#x430; &#x438;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x44F; &#x43F;&#x43E;&#x434;&#x445;&#x43E;&#x434;&#x438;&#x442; &#x434;&#x43B;&#x44F; &#x43B;&#x44E;&#x431;&#x43E;&#x433;&#x43E; &#x432;&#x430;&#x440;&#x438;&#x430;&#x43D;&#x442;&#x430;. </p><p>&#x418;&#x437;&#x443;&#x447;&#x430;&#x44F; &#x440;&#x435;&#x43F;&#x43E;&#x437;&#x438;&#x442;&#x43E;&#x440;&#x438;&#x439; &#x43F;&#x440;&#x43E;&#x448;&#x438;&#x432;&#x43A;&#x438; &#x44F; &#x43D;&#x430;&#x442;&#x43A;&#x43D;&#x443;&#x43B;&#x441;&#x44F; &#x43D;&#x430; <code>Brewfile</code> &#x441; &#x437;&#x430;&#x432;&#x438;&#x441;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x44F;&#x43C;&#x438; &#x434;&#x43B;&#x44F; macOS. &#x412;&#x43E;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x438;&#x43C; &#x43D;&#x435; &#x443;&#x434;&#x430;&#x43B;&#x43E;&#x441;&#x44C;, &#x43F;&#x43E;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x443;, &#x43D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, &#x443;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x43D;&#x44B;&#x439; <code>gdb</code> &#x43D;&#x435; &#x43F;&#x43E;&#x441;&#x442;&#x430;&#x432;&#x438;&#x442;&#x44C; &#x438;&#x437; Homebrew &#x43D;&#x430; M1. &#x422;&#x430;&#x43A; &#x447;&#x442;&#x43E; &#x44F; &#x43F;&#x43E;&#x441;&#x442;&#x430;&#x432;&#x438;&#x43B; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43F;&#x430;&#x43A;&#x435;&#x442;&#x43E;&#x432; &#x432;&#x440;&#x443;&#x447;&#x43D;&#x443;&#x44E;:</p><pre><code class="language-bash">$ brew install protobuf protobuf-c dfu-util gcc-arm-embedded</code></pre><blockquote><strong>UPDATE</strong>. &#x41A;&#x430;&#x43A; &#x432;&#x44B;&#x44F;&#x441;&#x43D;&#x438;&#x43B;&#x43E;&#x441;&#x44C;, &#x438; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x431;&#x44B;&#x43B;&#x43E; &#x43D;&#x435; &#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C;. &#x412;&#x441;&#x435;, &#x447;&#x442;&#x43E; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x2014; &#x44D;&#x442;&#x43E; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; git. &#x410; &#x43F;&#x440;&#x438;&#x441;&#x443;&#x442;&#x441;&#x442;&#x432;&#x443;&#x44E;&#x449;&#x438;&#x439; &#x432; &#x440;&#x435;&#x43F;&#x43E;&#x437;&#x438;&#x442;&#x43E;&#x440;&#x438;&#x438; Flipper Build Tool (aka <code>fbt</code> &#x2014; &#x447;&#x438;&#x442;&#x430;&#x439; &#x434;&#x430;&#x43B;&#x435;&#x435;) &#x441;&#x430;&#x43C; &#x440;&#x430;&#x437;&#x431;&#x435;&#x440;&#x435;&#x442;&#x441;&#x44F; &#x441;&#x43E; &#x432;&#x441;&#x435;&#x43C;&#x438; &#x437;&#x430;&#x432;&#x438;&#x441;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x44F;&#x43C;&#x438;.</blockquote><p>&#x421;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x43C; &#x448;&#x430;&#x433;&#x43E;&#x43C; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x441;&#x43A;&#x43B;&#x43E;&#x43D;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x440;&#x435;&#x43F;&#x43E;&#x437;&#x438;&#x442;&#x43E;&#x440;&#x438;&#x439; &#x441;&#x43E; &#x432;&#x441;&#x435;&#x43C;&#x438; &#x441;&#x430;&#x431;&#x43C;&#x43E;&#x434;&#x443;&#x43B;&#x44F;&#x43C;&#x438;.</p><pre><code class="language-bash">$ git clone --recursive https://github.com/flipperdevices/flipperzero-firmware.git</code></pre><blockquote><strong>UPDATE</strong>. &#x41A;&#x43E;&#x433;&#x434;&#x430; &#x44F; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x440;&#x430;&#x437;&#x431;&#x438;&#x440;&#x430;&#x43B;&#x441;&#x44F; &#x441; &#x43F;&#x440;&#x43E;&#x448;&#x438;&#x432;&#x43A;&#x43E;&#x439; &#x438; &#x447;&#x438;&#x442;&#x430;&#x43B; &#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x43B;&#x435;&#x44C;&#x441;&#x43A;&#x438;&#x435; &#x447;&#x430;&#x442;&#x44B;, &#x442;&#x43E; &#x43F;&#x43E;&#x447;&#x442;&#x438; &#x43D;&#x430; &#x43A;&#x430;&#x436;&#x434;&#x44B;&#x439; &#x432;&#x43E;&#x43F;&#x440;&#x43E;&#x441; &quot;&#x43F;&#x43E;&#x447;&#x435;&#x43C;&#x443; &#x447;&#x442;&#x43E;-&#x442;&#x43E; &#x43D;&#x435; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442;&quot; &#xA0;&#x432;&#x441;&#x442;&#x440;&#x435;&#x447;&#x430;&#x43B; &#x43E;&#x442;&#x432;&#x435;&#x442;, &#x447;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x43F;&#x443;&#x441;&#x43A; &#x444;&#x43B;&#x430;&#x433;&#x430; <code>--recursive</code> &#x2014; &#x433;&#x43B;&#x430;&#x432;&#x43D;&#x430;&#x44F; &#x43E;&#x448;&#x438;&#x431;&#x43A;&#x430; &#x43D;&#x43E;&#x432;&#x438;&#x447;&#x43A;&#x430;, &#x438; &#x43D;&#x430;&#x434;&#x43E; &#x43E;&#x431;&#x44F;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x435;&#x433;&#x43E; &#x443;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x442;&#x44C;. &#x41D;&#x43E;, &#x43A;&#x430;&#x43A; &#x43E;&#x43A;&#x430;&#x437;&#x430;&#x43B;&#x43E;&#x441;&#x44C;, &#x44D;&#x442;&#x43E; &#x43D;&#x435; &#x442;&#x430;&#x43A; &#x438; <code>fbt</code> (&#x432;&#x43E;&#x442; &#x431;&#x443;&#x43A;&#x432;&#x430;&#x43B;&#x44C;&#x43D;&#x43E; &#x447;&#x435;&#x440;&#x435;&#x437; &#x43E;&#x434;&#x438;&#x43D; &#x430;&#x431;&#x437;&#x430;&#x446; &#x443;&#x436;&#x435;!) &#x441;&#x43A;&#x430;&#x447;&#x430;&#x435;&#x442; &#x432;&#x441;&#x435; &#x441;&#x430;&#x43C;, &#x43A;&#x430;&#x43A; &#x431;&#x44B; &#x432;&#x44B; &#x43D;&#x438; &#x43A;&#x43B;&#x43E;&#x43D;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43B;&#x438; &#x440;&#x435;&#x43F;&#x43E;&#x437;&#x438;&#x442;&#x43E;&#x440;&#x438;&#x439;.</blockquote><p>&#x41F;&#x440;&#x438; &#x43A;&#x43B;&#x43E;&#x43D;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x438; &#x441; &#x441;&#x430;&#x431;&#x43C;&#x43E;&#x434;&#x443;&#x43B;&#x44F;&#x43C;&#x438; &#x431;&#x443;&#x434;&#x435;&#x442; &#x441;&#x43A;&#x430;&#x447;&#x430;&#x43D; &#x446;&#x435;&#x43B;&#x44B;&#x439; &#x433;&#x438;&#x433;&#x430;&#x431;&#x430;&#x439;&#x442; &#x432;&#x441;&#x44F;&#x43A;&#x43E;&#x439; &#x432;&#x441;&#x44F;&#x447;&#x438;&#x43D;&#x44B;. </p><pre><code class="language-bash">$ du -sh flipperzero-firmware 
1,0G	flipperzero-firmware</code></pre><p>&#x41D;&#x430;&#x448; &#x433;&#x43B;&#x430;&#x432;&#x43D;&#x44B;&#x439; &#x434;&#x440;&#x443;&#x433; &#x441;&#x440;&#x435;&#x434;&#x438; &#x432;&#x441;&#x435;&#x433;&#x43E; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x2014; &#x443;&#x442;&#x438;&#x43B;&#x438;&#x442;&#x430; <code>fbt</code> (Flipper Build Tool) &#x447;&#x435;&#x440;&#x435;&#x437; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x443;&#x44E; &#x43C;&#x44B; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x441;&#x43E;&#x431;&#x438;&#x440;&#x430;&#x442;&#x44C; &#x43F;&#x440;&#x43E;&#x448;&#x438;&#x432;&#x43A;&#x443; &#x438; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F;. &#x41F;&#x440;&#x438; &#x435;&#x451; &#x43F;&#x435;&#x440;&#x432;&#x43E;&#x43C; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x43A;&#x435; &#x431;&#x435;&#x437; &#x43F;&#x430;&#x440;&#x430;&#x43C;&#x435;&#x442;&#x440;&#x43E;&#x432; &#x431;&#x443;&#x434;&#x435;&#x442; &#x441;&#x43A;&#x430;&#x447;&#x430;&#x43D; toolchain &#x441; <code>gcc-arm</code>, &#x447;&#x442;&#x43E; &#x43D;&#x430;&#x43C;&#x435;&#x43A;&#x430;&#x435;&#x442;, &#x447;&#x442;&#x43E; <code>gcc-arm-embedded</code> &#x438;&#x437; Homebrew &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x431;&#x44B;&#x43B;&#x43E; &#x438; &#x43D;&#x435; &#x441;&#x442;&#x430;&#x432;&#x438;&#x442;&#x44C;. &#x41D;&#x435;&#x43F;&#x440;&#x438;&#x44F;&#x442;&#x43D;&#x43E;, &#x447;&#x442;&#x43E; &#x434;&#x430;&#x436;&#x435; &#x43D;&#x430; &#x43C;&#x43E;&#x439; M1 &#x43C;&#x430;&#x43A; &#x43A;&#x430;&#x447;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x432;&#x435;&#x440;&#x441;&#x438;&#x44F; x86_64, &#x445;&#x43E;&#x442;&#x44F; aarm64 &#x441;&#x431;&#x43E;&#x440;&#x43A;&#x430; &#x442;&#x43E;&#x436;&#x435; &#x441;&#x443;&#x449;&#x435;&#x441;&#x442;&#x432;&#x443;&#x435;&#x442;. &#x41D;&#x43E; &#x43F;&#x43E;&#x43A;&#x430; Apple &#x43D;&#x435; &#x43E;&#x442;&#x43A;&#x43B;&#x44E;&#x447;&#x438;&#x43B; Rosetta 2 &#x44D;&#x442;&#x43E; &#x432;&#x43B;&#x438;&#x44F;&#x435;&#x442; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43D;&#x430; &#x44D;&#x441;&#x442;&#x435;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x443;&#x44E; &#x441;&#x43E;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x44F;&#x44E;&#x449;&#x443;&#x44E;.</p><pre><code class="language-bash">$ ./fbt
Checking tar..yes
Checking downloaded toolchain tgz..no
Checking curl..yes
Downloading toolchain:
######################################################################### 100,0%
done
Removing old toolchain..done
Unpacking toolchain:
####################################################### 100.0%
done
Clearing..done</code></pre><p>&#x414;&#x430;&#x43B;&#x44C;&#x448;&#x435; &#x43D;&#x430;&#x447;&#x43D;&#x435;&#x442;&#x441;&#x44F; &#x441;&#x431;&#x43E;&#x440;&#x43A;&#x430; &#x43F;&#x440;&#x43E;&#x448;&#x438;&#x432;&#x43A;&#x438; &#x432; debug-&#x440;&#x435;&#x436;&#x438;&#x43C;&#x435; &#x2014; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x44D;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x438;&#x441;&#x445;&#x43E;&#x434;&#x438;&#x442; &#x43F;&#x440;&#x438; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x43A;&#x435; <code>fbt</code> &#x431;&#x435;&#x437; &#x43F;&#x430;&#x440;&#x430;&#x43C;&#x435;&#x442;&#x440;&#x43E;&#x432;. &#x423; &#x43C;&#x435;&#x43D;&#x44F; &#x43E;&#x43D;&#x430; &#x43F;&#x440;&#x438;&#x432;&#x435;&#x43B;&#x430; &#x43A; &#x43E;&#x448;&#x438;&#x431;&#x43A;&#x435;:</p><pre><code>	APPS	build/f7-firmware-D/applications/applications.c
	ICONS	build/f7-firmware-D/assets/compiled/assets_icons.c
	CC	applications/main/archive/scenes/archive_scene.c
	CC	applications/main/bad_usb/scenes/bad_usb_scene.c
	PREGEN	build/f7-firmware-D/sdk_origin.i
	SDKSRC	build/f7-firmware-D/sdk_origin.i
	CC	applications/main/gpio/scenes/gpio_scene.c
	CC	applications/main/gpio/gpio_item.c
	CC	applications/main/gpio/usb_uart_bridge.c
	CC	applications/main/ibutton/scenes/ibutton_scene.c
	CC	applications/main/ibutton/ibutton_cli.c
	CC	applications/main/infrared/scenes/infrared_scene.c
In file included from applications/services/gui/canvas.h:9,
                 from ./applications/services/dialogs/dialogs.h:3,
                 from build/f7-firmware-D/sdk_origin.i.c:124:
applications/services/gui/icon_animation.h:10:10: fatal error: assets_icons.h: No such file or directory
   10 | #include &lt;assets_icons.h&gt;
      |          ^~~~~~~~~~~~~~~~
compilation terminated.
scons: *** [build/f7-firmware-D/sdk_origin.i] Error 1
********** ERRORS **********
Failed building build/f7-firmware-D/sdk_origin.i: Error 1</code></pre><p>&#x41D;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x43D;&#x438;&#x435; <a href="https://github.com/flipperdevices/flipperzero-firmware/issues/1918?ref=yakovlev.me">issue</a> &#x43D;&#x430; github &#x440;&#x435;&#x43F;&#x43E;&#x437;&#x438;&#x442;&#x43E;&#x440;&#x438;&#x438; &#x43E;&#x444;&#x438;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x43F;&#x440;&#x43E;&#x448;&#x438;&#x432;&#x43A;&#x438; &#x43F;&#x440;&#x438;&#x432;&#x435;&#x43B;&#x43E; &#x43A; &#x43E;&#x442;&#x432;&#x435;&#x442;&#x443; &#x447;&#x435;&#x440;&#x435;&#x437; 12 &#x43C;&#x438;&#x43D;&#x443;&#x442;:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2022/10/image.png" class="kg-image" alt="&#x421;&#x431;&#x43E;&#x440;&#x43A;&#x430; Hello World &#x43F;&#x43E;&#x434; Flipper Zero" loading="lazy" width="1824" height="476" srcset="https://yakovlev.me/content/images/size/w600/2022/10/image.png 600w, https://yakovlev.me/content/images/size/w1000/2022/10/image.png 1000w, https://yakovlev.me/content/images/size/w1600/2022/10/image.png 1600w, https://yakovlev.me/content/images/2022/10/image.png 1824w" sizes="(min-width: 720px) 720px"><figcaption>&#x411;&#x44B;&#x441;&#x442;&#x440;&#x43E;&#x435; &#x438; &#x43E;&#x442;&#x437;&#x44B;&#x432;&#x447;&#x438;&#x432;&#x43E;&#x435; &#x43A;&#x43E;&#x43C;&#x43C;&#x44C;&#x44E;&#x43D;&#x438;&#x442;&#x438;!</figcaption></figure><p>&#x414;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;, &#x43F;&#x435;&#x440;&#x435;&#x437;&#x430;&#x43F;&#x443;&#x441;&#x43A; <code>fbt</code> &#x440;&#x435;&#x448;&#x430;&#x435;&#x442; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x443;:</p><pre><code class="language-bash">$ ./fbt
... &#x43F;&#x435;&#x440;&#x435;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x432;&#x441;&#x435;&#x445; &#x43A;&#x43E;&#x43C;&#x43F;&#x438;&#x43B;&#x438;&#x440;&#x443;&#x435;&#x43C;&#x44B;&#x445; &#x444;&#x430;&#x439;&#x43B;&#x43E;&#x432; ...
	INFO	
Loaded 74 app definitions.
Firmware modules configuration:
Service:
	 bt, cli, dialogs, dolphin, desktop, gui, input, loader, notification, power, storage
System:
	 updater_app, storage_move_to_sd
App:
	 subghz, lfrfid, nfc, infrared, gpio, ibutton, bad_usb, u2f, fap_loader
Archive:
	 archive
Settings:
	 bt_settings, notification_settings, storage_settings, power_settings, desktop_settings, passport, system_settings, about
StartupHook:
	 crypto_start, rpc_start, infrared_start, nfc_start, subghz_start, lfrfid_start, ibutton_start, bt_start, power_start, storage_start, updater_start, storage_move_to_sd_start
Package:
	 basic_services, main_apps, settings_apps, system_apps
Firmware size
.text         598400 (584.38 K)
.rodata       157768 (154.07 K)
.data           1444 (  1.41 K)
.bss            8432 (  8.23 K)
.free_flash   290628 (283.82 K)
	HEX	build/f7-firmware-D/firmware.hex
	BIN	build/f7-firmware-D/firmware.bin
Setting build/f7-firmware-D as latest built dir (./build/latest/)
firmware.bin:  186 flash pages (last page 4.59% full)
	DFU	build/f7-firmware-D/firmware.dfu
2022-10-24 18:12:46,569 [INFO] Firmware binaries can be found at:
	dist/f7-D</code></pre><p>&#x417;&#x430;&#x43B;&#x438;&#x432;&#x430;&#x442;&#x44C; &#x44D;&#x442;&#x443; &#x43F;&#x440;&#x43E;&#x448;&#x438;&#x432;&#x43A;&#x443; &#x43D;&#x430; Flipper &#x43C;&#x44B; &#x43D;&#x435; &#x431;&#x443;&#x434;&#x435;&#x43C;, &#x432;&#x43C;&#x435;&#x441;&#x442;&#x43E; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43F;&#x43E;&#x439;&#x434;&#x435;&#x43C; &#x434;&#x430;&#x43B;&#x44C;&#x448;&#x435; &#x43A; &#x43D;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x43D;&#x438;&#x44E; &#x441;&#x432;&#x43E;&#x435;&#x433;&#x43E; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F;.</p><p>&#x41F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x438;&#x439; &#x438; &#x432;&#x435;&#x441;&#x44C;&#x43C;&#x430; &#x43E;&#x43F;&#x446;&#x438;&#x43E;&#x43D;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x43F;&#x443;&#x43D;&#x43A;&#x442; &#x437;&#x434;&#x435;&#x441;&#x44C; &#x2014; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x442;&#x44C; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442; &#x434;&#x43B;&#x44F; Visual Studio Code. &#x41C;&#x43D;&#x435; &#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x432; &#x43D;&#x435;&#x439; &#x443;&#x434;&#x43E;&#x431;&#x43D;&#x435;&#x435;, &#x442;&#x430;&#x43A; &#x447;&#x442;&#x43E;&#x44F; &#x43D;&#x430;&#x448;&#x435;&#x43B; &#x442;&#x430;&#x43A;&#x443;&#x44E; &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x432;&#x435;&#x441;&#x44C;&#x43C;&#x430; &#x43F;&#x440;&#x438;&#x44F;&#x442;&#x43D;&#x43E;&#x439;. &#x422;&#x435;&#x43C; &#x431;&#x43E;&#x43B;&#x435;&#x435;, &#x447;&#x442;&#x43E; &#x434;&#x435;&#x43B;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x44D;&#x442;&#x43E; &#x432; &#x43E;&#x434;&#x43D;&#x443; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x443; &#x432;&#x441;&#x435; &#x442;&#x43E;&#x433;&#x43E; &#x436;&#x435; <code>fbt</code>:</p><pre><code>$ ./fbt vscode_dist    
	INSTALL	.vscode/c_cpp_properties.json
	INSTALL	.vscode/launch.json
	INSTALL	.vscode/settings.json
	INSTALL	.vscode/tasks.json</code></pre><h2 id="%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F">&#x421;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x438;&#x435; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F;</h2><p>&#x41A;&#x430;&#x43D;&#x43E;&#x43D;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x439; &#x441;&#x43F;&#x43E;&#x441;&#x43E;&#x431; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x438;&#x44F; &#x43D;&#x43E;&#x432;&#x44B;&#x445; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x439; &#x2014; &#x44D;&#x442;&#x43E; &#x440;&#x430;&#x437;&#x43C;&#x435;&#x449;&#x435;&#x43D;&#x438;&#x435; &#x438;&#x445; &#x432; &#x434;&#x438;&#x440;&#x435;&#x43A;&#x442;&#x43E;&#x440;&#x438;&#x438; <code>applications_user</code>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2022/10/image-1.png" class="kg-image" alt="&#x421;&#x431;&#x43E;&#x440;&#x43A;&#x430; Hello World &#x43F;&#x43E;&#x434; Flipper Zero" loading="lazy" width="2000" height="1364" srcset="https://yakovlev.me/content/images/size/w600/2022/10/image-1.png 600w, https://yakovlev.me/content/images/size/w1000/2022/10/image-1.png 1000w, https://yakovlev.me/content/images/size/w1600/2022/10/image-1.png 1600w, https://yakovlev.me/content/images/2022/10/image-1.png 2190w" sizes="(min-width: 720px) 720px"><figcaption>&#x412;&#x43E;&#x442; &#x437;&#x434;&#x435;&#x441;&#x44C;</figcaption></figure><p>&#x421;&#x43D;&#x430;&#x447;&#x430;&#x43B;&#x430; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x434;&#x438;&#x43C; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x435;&#x439;&#x448;&#x435;&#x435; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x435; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43A;&#x43E;&#x43C;&#x43F;&#x438;&#x43B;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F;. &#x414;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x43E;&#x43D;&#x43E;, &#x43F;&#x440;&#x430;&#x432;&#x434;&#x430;, &#x43F;&#x43E;&#x43A;&#x430; &#x43D;&#x438;&#x447;&#x435;&#x433;&#x43E; &#x43D;&#x435; &#x431;&#x443;&#x434;&#x435;&#x442;. &#x41D;&#x43E; &#x438; &#x44D;&#x442;&#x43E; &#x43C;&#x44B; &#x43F;&#x43E;&#x43B;&#x435;&#x447;&#x438;&#x43C;.</p><p>&#x421;&#x43E;&#x437;&#x434;&#x430;&#x434;&#x438;&#x43C; &#x434;&#x438;&#x440;&#x435;&#x43A;&#x442;&#x43E;&#x440;&#x438;&#x44E; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F;, &#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E; &#x436;&#x435;, <code>hello_world</code>, &#x430; &#x432; &#x43D;&#x435;&#x439; &#x437;&#x430;&#x432;&#x435;&#x434;&#x435;&#x43C; &#x442;&#x440;&#x438; &#x444;&#x430;&#x439;&#x43B;&#x430;:</p><ul><li>&#x421;&#x438;-&#x438;&#x441;&#x445;&#x43E;&#x434;&#x43D;&#x438;&#x43A; &#x441; &#x43A;&#x43E;&#x434;&#x43E;&#x43C; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x44B; (<code>hello_world.c</code>).</li><li>&#x41C;&#x430;&#x43D;&#x438;&#x444;&#x435;&#x441;&#x442; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F; &#x2014; Flipper Application Manifest (<code>application.fam</code>).</li><li>&#x418;&#x43A;&#x43E;&#x43D;&#x43A;&#x430; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F; &#x2014; &#x447;/&#x431; PNG &#x440;&#x430;&#x437;&#x43C;&#x435;&#x440;&#x43E;&#x43C; 10x10 px (<code>hello_world.png</code>).</li></ul><p>&#x41A;&#x430;&#x43A; &#x432;&#x441;&#x435;&#x433;&#x434;&#x430;, &#x441;&#x430;&#x43C;&#x43E;&#x435; &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x43E;&#x435; &#x2014; &#x44D;&#x442;&#x43E; &#x438;&#x43A;&#x43E;&#x43D;&#x43A;&#x430;, &#x442;&#x430;&#x43A; &#x447;&#x442;&#x43E; &#x434;&#x430;&#x440;&#x44E;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2022/10/hello_world.png" class="kg-image" alt="&#x421;&#x431;&#x43E;&#x440;&#x43A;&#x430; Hello World &#x43F;&#x43E;&#x434; Flipper Zero" loading="lazy" width="10" height="10"><figcaption>hello_world.png</figcaption></figure><p>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x440;&#x430;&#x437;&#x431;&#x435;&#x440;&#x435;&#x43C;&#x441;&#x44F; &#x441; &#x43A;&#x43E;&#x434;&#x43E;&#x43C;. &#x41F;&#x43E; &#x441;&#x43E;&#x433;&#x43B;&#x430;&#x448;&#x435;&#x43D;&#x438;&#x44F;&#x43C; Flipper Zero &#x442;&#x43E;&#x447;&#x43A;&#x43E;&#x439; &#x432;&#x445;&#x43E;&#x434;&#x430; &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44F;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43D;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x43A;&#x430;&#x43A; &#x43D;&#x430;&#x448;&#x435; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435; + &#x441;&#x443;&#x444;&#x444;&#x438;&#x43A;&#x441; <em><code>app</code>. &#x422;&#x440;&#x430;&#x434;&#x438;&#x446;&#x438;&#x43E;&#x43D;&#x43D;&#x43E; &#x434;&#x43B;&#x44F; C &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44F; &#x431;&#x443;&#x434;&#x435;&#x442; &#x432;&#x43E;&#x437;&#x432;&#x440;&#x430;&#x449;&#x430;&#x442;&#x44C; &#x43A;&#x43E;&#x434; &#x43E;&#x448;&#x438;&#x431;&#x43A;&#x438; (0 &#x2014; &#x432;&#x441;&#x435; &#x43A;&#x440;&#x443;&#x442;&#x43E;), &#x430; &#x43F;&#x440;&#x438;&#x43D;&#x438;&#x43C;&#x430;&#x442;&#x44C; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x43F;&#x43E; &#x443;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44E;. &#x414;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x43D;&#x430;&#x43C; &#x43D;&#x435; &#x43F;&#x43E;&#x442;&#x440;&#x435;&#x431;&#x443;&#x44E;&#x442;&#x441;&#x44F;, &#x442;&#x430;&#x43A; &#x447;&#x442;&#x43E; &#x43A;&#x43E;&#x434; &#x441; &#x438;&#x43D;&#x43A;&#x43B;&#x443;&#x434;&#x43E;&#x43C; &#x434;&#x43B;&#x44F; </em><code><em>int32_</em>t</code> &#x431;&#x443;&#x434;&#x435;&#x442; &#x432;&#x44B;&#x433;&#x43B;&#x44F;&#x434;&#x435;&#x442;&#x44C; &#x442;&#x430;&#x43A;:</p><figure class="kg-card kg-code-card"><pre><code class="language-c">#include &lt;stdio.h&gt;

int32_t hello_world_app(void *p) {
    return 0;
}</code></pre><figcaption>hello_world.c</figcaption></figure><p>&#x42D;&#x442;&#x43E;&#x442; &#x433;&#x435;&#x43D;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x43A;&#x43E;&#x434;, &#x43A; &#x441;&#x43E;&#x436;&#x430;&#x43B;&#x435;&#x43D;&#x438;&#x44E; &#x43D;&#x435; &#x441;&#x43A;&#x43E;&#x43C;&#x43F;&#x438;&#x440;&#x438;&#x440;&#x443;&#x435;&#x442;&#x441;&#x44F;, &#x43F;&#x43E;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x443; &#x432; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x435; &#x43F;&#x43E; &#x443;&#x43C;&#x43E;&#x43B;&#x447;&#x430;&#x43D;&#x438;&#x44E; &#x432;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x44B; &#x434;&#x43E;&#x432;&#x43E;&#x43B;&#x44C;&#x43D;&#x43E; &#x436;&#x435;&#x441;&#x442;&#x43A;&#x438;&#x435; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x430;, &#x430; &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x443; &#x43B;&#x44E;&#x431;&#x43E;&#x439; warning &#x432;&#x43E;&#x441;&#x43F;&#x440;&#x438;&#x43D;&#x438;&#x43C;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x43A;&#x430;&#x43A; &#x43E;&#x448;&#x438;&#x431;&#x43A;&#x430;. &#x420;&#x435;&#x448;&#x438;&#x442;&#x44C; &#x44D;&#x442;&#x443; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x443; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x432; &#x432;&#x438;&#x434;, &#x447;&#x442;&#x43E; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x43C;&#x44B; &#x432;&#x441;&#x435; &#x436;&#x435; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x43C;:</p><figure class="kg-card kg-code-card"><pre><code class="language-c">#include &lt;stdio.h&gt;

int32_t hello_world_app(void* p) {
  (void)(p);
  
  return 0;
}</code></pre><figcaption>hello_world.c</figcaption></figure><p>&#x41E;&#x442;&#x43B;&#x438;&#x447;&#x43D;&#x43E;, &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43E;&#x441;&#x442;&#x430;&#x43B;&#x43E;&#x441;&#x44C; &#x441;&#x43E;&#x441;&#x442;&#x430;&#x432;&#x438;&#x442;&#x44C; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43C;&#x430;&#x43D;&#x438;&#x444;&#x435;&#x441;&#x442;, &#x441; &#x43F;&#x43E;&#x43C;&#x43E;&#x449;&#x44C;&#x44E; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x433;&#x43E; &#x432;&#x43E;&#x43B;&#x448;&#x435;&#x431;&#x43D;&#x44B;&#x439; <code>fbt</code> &#x43F;&#x43E;&#x439;&#x43C;&#x435;&#x442;, &#x447;&#x442;&#x43E; &#x43C;&#x44B; &#x434;&#x435;&#x43B;&#x430;&#x435;&#x43C; &#x43D;&#x43E;&#x432;&#x43E;&#x435; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435;. &#x41E; &#x442;&#x43E;&#x43C;, &#x43A;&#x430;&#x43A; &#x443;&#x441;&#x442;&#x440;&#x43E;&#x435;&#x43D; &#x44D;&#x442;&#x43E;&#x442; &#x444;&#x430;&#x439;&#x43B; &#x434;&#x430;&#x436;&#x435; &#x435;&#x441;&#x442;&#x44C; <a href="https://github.com/flipperdevices/flipperzero-firmware/blob/dev/documentation/AppManifests.md?ref=yakovlev.me">&#x43A;&#x430;&#x43A;&#x430;&#x44F;-&#x43D;&#x438;&#x43A;&#x430;&#x43A;&#x430;&#x44F; &#x434;&#x43E;&#x43A;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x446;&#x438;&#x44F;</a>, &#x438;&#x437; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x439; &#x43C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x43F;&#x43E;&#x447;&#x435;&#x440;&#x43F;&#x43D;&#x443;&#x442;&#x44C; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x435;&#x435;:</p><ul><li>&#x412; &#x43F;&#x43E;&#x43B;&#x435; <code>appid</code> &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x443;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C; &#x43A;&#x430;&#x43A;&#x43E;&#x435;-&#x442;&#x43E; &#x443;&#x43D;&#x438;&#x43A;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x435; &#x438;&#x43C;&#x44F; &#x431;&#x435;&#x437; &#x43F;&#x440;&#x43E;&#x431;&#x435;&#x43B;&#x43E;&#x432;, &#x43F;&#x43E; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x43C;&#x443; <code>fbt</code> &#x431;&#x443;&#x434;&#x435;&#x442; &#x441;&#x43E;&#x431;&#x438;&#x440;&#x430;&#x442;&#x44C; &#x43D;&#x430;&#x448;&#x435; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435;.</li><li>&#x412; &#x43F;&#x43E;&#x43B;&#x435; <code>name</code> &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43D;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x447;&#x442;&#x43E; &#x443;&#x433;&#x43E;&#x434;&#x43D;&#x43E;, &#x442;&#x430;&#x43A; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43D;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x43D;&#x430; &#x441;&#x430;&#x43C;&#x43E;&#x43C; Flipper.</li><li>&#x41F;&#x43E;&#x43B;&#x435; <code>apptype</code> &#x437;&#x430;&#x434;&#x430;&#x435;&#x442; &#x442;&#x438;&#x43F; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F;, &#x434;&#x43B;&#x44F; &#x432;&#x441;&#x435;&#x445; &#x43D;&#x430;&#x448;&#x438;&#x445; &#x43F;&#x43E;&#x434;&#x435;&#x43B;&#x438;&#x439;, &#x43F;&#x43E;&#x43A;&#x430; &#x43C;&#x44B; &#x43D;&#x435; &#x43B;&#x435;&#x437;&#x435;&#x43C; &#x432; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x443; &#x44D;&#x442;&#x43E; &#x431;&#x443;&#x434;&#x435;&#x442; <code>FlipperAppType.EXTERNAL</code>.</li><li><code>entry_point</code> &#x437;&#x430;&#x434;&#x430;&#x435;&#x442; &#x442;&#x43E;&#x447;&#x43A;&#x443; &#x432;&#x445;&#x43E;&#x434;&#x430; &#x2014; &#x442;&#x443; &#x441;&#x430;&#x43C;&#x443;&#x44E; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E;, &#x447;&#x442;&#x43E; &#x43C;&#x44B; &#x43D;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x43B;&#x438; &#x432;&#x44B;&#x448;&#x435;.</li><li><code>fap_icon</code> &#x443;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x435;&#x442; &#x43D;&#x430; &#x438;&#x43A;&#x43E;&#x43D;&#x43A;&#x443; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F;.</li><li><code>fap_category</code> &#x433;&#x43E;&#x432;&#x43E;&#x440;&#x438;&#x442;, &#x43A; &#x43A;&#x430;&#x43A;&#x43E;&#x439; &#x43A;&#x430;&#x442;&#x435;&#x433;&#x43E;&#x440;&#x438;&#x438; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43E;&#x442;&#x43D;&#x43E;&#x441;&#x438;&#x442;&#x44C;&#x441;&#x44F; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435; (<code>GPIO</code>, <code>Music</code>, <code>Misc</code>, <code>Tool</code> &#x438; &#x442;.&#x434;.).</li></ul><p>&#x412;&#x43E;&#x43E;&#x440;&#x443;&#x436;&#x438;&#x432;&#x448;&#x438;&#x441;&#x44C; &#x44D;&#x442;&#x438;&#x43C;&#x438; &#x437;&#x43D;&#x430;&#x43D;&#x438;&#x44F;&#x43C;&#x438; &#x441;&#x43E;&#x43E;&#x440;&#x443;&#x434;&#x438;&#x43C; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x439; &#x43C;&#x430;&#x43D;&#x438;&#x444;&#x435;&#x441;&#x442;:</p><figure class="kg-card kg-code-card"><pre><code class="language-python">App(
    appid=&quot;hello_world&quot;,
    name=&quot;Hello World&quot;,
    apptype=FlipperAppType.EXTERNAL,
    entry_point=&quot;hello_world_app&quot;,
    cdefines=[&quot;APP_HELLO_WORLD&quot;],
    requires=[
        &quot;gui&quot;,
    ],
    stack_size=1 * 1024,
    order=90,
	fap_icon=&quot;hello_world.png&quot;,
    fap_category=&quot;Misc&quot;,
)</code></pre><figcaption>application.fam</figcaption></figure><p>&#x412;&#x441;&#x435;, &#x43C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x441;&#x43E;&#x431;&#x438;&#x440;&#x430;&#x442;&#x44C; &#x43D;&#x430;&#x448;&#x435; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435;. &#x414;&#x435;&#x43B;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x44D;&#x442;&#x43E; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x43E;&#x439;:</p><pre><code class="language-bash">$ ./fbt fap_{APPID &#x41D;&#x410;&#x428;&#x415;&#x413;&#x41E; &#x41F;&#x420;&#x418;&#x41B;&#x41E;&#x416;&#x415;&#x41D;&#x418;&#x42F;}</code></pre><p>&#x412; &#x43D;&#x430;&#x448;&#x435;&#x43C; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435;:</p><pre><code class="language-bash">$ ./fbt fap_hello_world
        CC      applications_user/hello_world/hello_world.c
        SDKCHK  firmware/targets/f7/api_symbols.csv
        LINK    build/f7-firmware-D/.extapps/hello_world_d.elf
API version 5.0 is up to date
        APPMETA build/f7-firmware-D/.extapps/hello_world.fap
        FAP     build/f7-firmware-D/.extapps/hello_world.fap
        APPCHK  build/f7-firmware-D/.extapps/hello_world.fap</code></pre><p>&#x418; &#x432;&#x441;&#x435;! &#x412; &#x43F;&#x430;&#x43F;&#x43A;&#x435; <code>build/f7-firmware-D/.extapps</code> &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43B;&#x435;&#x436;&#x438;&#x442; &#x43D;&#x430;&#x448; FAP-&#x444;&#x430;&#x439;&#x43B;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43B;&#x44E;&#x431;&#x44B;&#x43C; &#x443;&#x434;&#x43E;&#x431;&#x43D;&#x44B;&#x43C; &#x432;&#x430;&#x43C; &#x441;&#x43F;&#x43E;&#x441;&#x43E;&#x431;&#x43E;&#x43C; &#x437;&#x430;&#x43A;&#x438;&#x43D;&#x443;&#x442;&#x44C; &#x43D;&#x430; Flipper. &#x42F; &#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43B;&#x441;&#x44F; qFlipper:</p><figure class="kg-card kg-image-card"><img src="https://yakovlev.me/content/images/2022/10/image-3.png" class="kg-image" alt="&#x421;&#x431;&#x43E;&#x440;&#x43A;&#x430; Hello World &#x43F;&#x43E;&#x434; Flipper Zero" loading="lazy" width="2000" height="1299" srcset="https://yakovlev.me/content/images/size/w600/2022/10/image-3.png 600w, https://yakovlev.me/content/images/size/w1000/2022/10/image-3.png 1000w, https://yakovlev.me/content/images/size/w1600/2022/10/image-3.png 1600w, https://yakovlev.me/content/images/size/w2400/2022/10/image-3.png 2400w" sizes="(min-width: 720px) 720px"></figure><blockquote><strong>UPDATE</strong>. &#x41F;&#x440;&#x43E;&#x434;&#x432;&#x438;&#x43D;&#x443;&#x442;&#x44B;&#x435; &#x440;&#x435;&#x431;&#x44F;&#x442;&#x430; &#x43D;&#x435; &#x434;&#x440;&#x44B;&#x433;&#x430;&#x44E;&#x442; &#x43C;&#x44B;&#x448;&#x43A;&#x43E;&#x439;, &#x430; &#x438; &#x442;&#x430;&#x43A;&#x438;&#x435; &#x43E;&#x43F;&#x435;&#x440;&#x430;&#x446;&#x438;&#x438; &#x434;&#x435;&#x43B;&#x430;&#x44E;&#x442; &#x447;&#x435;&#x440;&#x435;&#x437; <code>fbt</code> &#x438;&#x437; &#x43A;&#x43E;&#x43D;&#x441;&#x43E;&#x43B;&#x438; &#x438;&#x43B;&#x438; Visual Studio Code. &#x41B;&#x43E;&#x432;&#x438;&#x442;&#x435; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x443;: <code>./fbt launch_app APPSRC=hello_world</code>.</blockquote><p>&#x41F;&#x43E;&#x441;&#x43B;&#x435; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x43F;&#x43E;&#x44F;&#x432;&#x438;&#x442;&#x441;&#x44F; &#x432; &#x441;&#x43F;&#x438;&#x441;&#x43A;&#x435; &#x432; &#x438;&#x441;&#x43A;&#x43E;&#x43C;&#x43E;&#x439; &#x43F;&#x430;&#x43F;&#x43A;&#x435;:</p><figure class="kg-card kg-image-card"><img src="https://yakovlev.me/content/images/2022/10/Screenshot-20221024-224504.png" class="kg-image" alt="&#x421;&#x431;&#x43E;&#x440;&#x43A;&#x430; Hello World &#x43F;&#x43E;&#x434; Flipper Zero" loading="lazy" width="512" height="256"></figure><p>&#x417;&#x430;&#x43F;&#x443;&#x441;&#x43A; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F; &#x43D;&#x435; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43F;&#x440;&#x438;&#x432;&#x43E;&#x434;&#x438;&#x442;&#x44C; &#x43D;&#x438; &#x43A; &#x43A;&#x430;&#x43A;&#x438;&#x43C; &#x43E;&#x448;&#x438;&#x431;&#x43A;&#x430;&#x43C;, &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44F; &#x447;&#x435;&#x441;&#x442;&#x43D;&#x43E; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x43D;&#x438;&#x442;&#x441;&#x44F;, &#x438; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x442;&#x443;&#x442; &#x436;&#x435; &#x437;&#x430;&#x432;&#x435;&#x440;&#x448;&#x438;&#x442;&#x441;&#x44F;. &#x41D;&#x43E; &#x44D;&#x442;&#x43E; &#x44F;&#x432;&#x43D;&#x43E; &#x43D;&#x435; &#x442;&#x43E;, &#x440;&#x430;&#x434;&#x438; &#x447;&#x435;&#x433;&#x43E; &#x43C;&#x44B; &#x442;&#x443;&#x442; &#x441;&#x43E;&#x431;&#x440;&#x430;&#x43B;&#x438;&#x441;&#x44C;, &#x442;&#x430;&#x43A; &#x447;&#x442;&#x43E; &#x43F;&#x43E;&#x433;&#x440;&#x443;&#x437;&#x438;&#x43C;&#x441;&#x44F; &#x432; &#x43C;&#x435;&#x43B;&#x43A;&#x43E;&#x432;&#x43E;&#x434;&#x44C;&#x435; &#x43E;&#x440;&#x433;&#x430;&#x43D;&#x438;&#x437;&#x430;&#x446;&#x438;&#x438; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x439;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x44F; &#x443;&#x44F;&#x441;&#x43D;&#x438;&#x43B; &#x437;&#x430; &#x43F;&#x430;&#x440;&#x443; &#x447;&#x430;&#x441;&#x43E;&#x432; &#x43A;&#x43E;&#x432;&#x44B;&#x440;&#x44F;&#x43D;&#x438;&#x44F;.</p><h2 id="%D0%BE%D1%87%D0%B5%D1%80%D0%B5%D0%B4%D1%8C-%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B9">&#x41E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x441;&#x43E;&#x43E;&#x431;&#x449;&#x435;&#x43D;&#x438;&#x439;</h2><p>&#x41A;&#x430;&#x43A; &#x438; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x43C;&#x43D;&#x43E;&#x433;&#x438;&#x435; &#x433;&#x440;&#x430;&#x444;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x435; &#x444;&#x440;&#x435;&#x439;&#x43C;&#x432;&#x43E;&#x440;&#x43A;&#x438;, Flipper &#x43E;&#x440;&#x433;&#x430;&#x43D;&#x438;&#x437;&#x443;&#x435;&#x442; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x443; &#x447;&#x435;&#x440;&#x435;&#x437; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x441;&#x43E;&#x43E;&#x431;&#x449;&#x435;&#x43D;&#x438;&#x439;. &#x41D;&#x430; &#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x43A;&#x435; &#x44D;&#x442;&#x43E; &#x432;&#x44B;&#x433;&#x43B;&#x44F;&#x434;&#x438;&#x442; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;&#x43D;&#x43E; &#x442;&#x430;&#x43A;:</p><figure class="kg-card kg-code-card"><pre><code>&#x41E;&#x427;&#x415;&#x420;&#x415;&#x414;&#x42C;_&#x421;&#x41E;&#x41E;&#x411;&#x429;&#x415;&#x41D;&#x418;&#x419; = &#x43D;&#x43E;&#x432;&#x430;&#x44F;_&#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C;_&#x441;&#x43E;&#x43E;&#x431;&#x449;&#x435;&#x43D;&#x438;&#x439;()

&#x431;&#x435;&#x441;&#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x44B;&#x439;_&#x446;&#x438;&#x43A;&#x43B; {
  &#x421;&#x41E;&#x41E;&#x411;&#x429;&#x415;&#x41D;&#x418;&#x415; = &#x432;&#x43E;&#x437;&#x44C;&#x43C;&#x438;_&#x441;&#x43E;&#x43E;&#x431;&#x449;&#x435;&#x43D;&#x438;&#x435;_&#x438;&#x437;(&#x41E;&#x427;&#x415;&#x420;&#x415;&#x414;&#x42C;_&#x421;&#x41E;&#x41E;&#x411;&#x429;&#x415;&#x41D;&#x418;&#x419;)

  &#x435;&#x441;&#x43B;&#x438; &#x435;&#x441;&#x442;&#x44C; &#x421;&#x41E;&#x41E;&#x411;&#x429;&#x415;&#x41D;&#x418;&#x415; {
    &#x445;&#x438;&#x442;&#x440;&#x430;&#x44F;_&#x43E;&#x431;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x430;(&#x421;&#x41E;&#x41E;&#x411;&#x429;&#x415;&#x41D;&#x418;&#x415;)
  }
}

&#x43E;&#x447;&#x438;&#x441;&#x442;&#x438;_&#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C;(&#x41E;&#x427;&#x415;&#x420;&#x415;&#x414;&#x42C;_&#x421;&#x41E;&#x41E;&#x411;&#x429;&#x415;&#x41D;&#x418;&#x419;)</code></pre><figcaption>&#x41F;&#x440;&#x44F;&#x43C;&#x43E; &#x432;&#x441;&#x43F;&#x43E;&#x43C;&#x43D;&#x438;&#x43B;, &#x43A;&#x430;&#x43A; 15 &#x43B;&#x435;&#x442; &#x43D;&#x430;&#x437;&#x430;&#x434; &#x43F;&#x438;&#x441;&#x430;&#x43B; &#x43D;&#x430; WinAPI32...</figcaption></figure><p>&#x414;&#x43B;&#x44F; &#x442;&#x43E;&#x433;&#x43E;, &#x447;&#x442;&#x43E;&#x431; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x442;&#x430;&#x43A;&#x43E;&#x439; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x43E;&#x43D;&#x430;&#x43B; &#x43D;&#x430;&#x43C; &#x443;&#x436;&#x435; &#x43D;&#x435; &#x43E;&#x431;&#x43E;&#x439;&#x442;&#x438;&#x441;&#x44C; &#x43E;&#x434;&#x43D;&#x438;&#x43C; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; <code>stdio.h</code>, &#x430; &#x43F;&#x43E;&#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x43D;&#x430;&#x447;&#x430;&#x442;&#x44C; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x437;&#x430;&#x433;&#x43E;&#x43B;&#x43E;&#x432;&#x43A;&#x438; &#x438;&#x437; SDK Flipper. &#x41D;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x43E;&#x43D;&#x430; <code>FURI</code>, &#x433;&#x434;&#x435;-&#x442;&#x43E; &#x447;&#x438;&#x442;&#x430;&#x43B;, &#x447;&#x442;&#x43E; &#x440;&#x430;&#x441;&#x448;&#x438;&#x444;&#x440;&#x43E;&#x432;&#x44B;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x44D;&#x442;&#x43E; &#x43A;&#x430;&#x43A; <code>Flipper<em><strong> </strong></em>Universal Registry Implementation</code>. &#x41A;&#x430;&#x436;&#x435;&#x442;&#x441;&#x44F;, &#x441;&#x443;&#x442;&#x44C; &#x443;&#x436;&#x435; &#x443;&#x448;&#x43B;&#x430; &#x434;&#x430;&#x43B;&#x435;&#x43A;&#x43E; &#x43E;&#x442; &#x43D;&#x430;&#x437;&#x432;&#x430;&#x43D;&#x438;&#x44F;, &#x43D;&#x43E; &#x430;&#x431;&#x431;&#x440;&#x435;&#x432;&#x435;&#x430;&#x442;&#x443;&#x440;&#x430; &#x43A;&#x43B;&#x430;&#x441;&#x441;&#x43D;&#x430;&#x44F;, &#x442;&#x430;&#x43A; &#x447;&#x442;&#x43E; &#x435;&#x451; &#x43E;&#x441;&#x442;&#x430;&#x432;&#x438;&#x43B;&#x438;. &#x41F;&#x43E;&#x43C;&#x438;&#x43C;&#x43E; &#x43D;&#x435;&#x435; &#x441;&#x440;&#x430;&#x437;&#x443; &#x43F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x438;&#x43C; &#x435;&#x449;&#x435; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x437;&#x430;&#x433;&#x43E;&#x43B;&#x43E;&#x432;&#x43A;&#x43E;&#x432;:</p><ul><li><code>gui/gui.h</code> &#x2014; &#x43E;&#x442;&#x432;&#x435;&#x447;&#x430;&#x435;&#x442; &#x437;&#x430; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x443; &#x441; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x444;&#x435;&#x439;&#x441;&#x43E;&#x43C;.</li><li><code>input/input.h</code> &#x2014; &#x441;&#x43E;&#x434;&#x435;&#x440;&#x436;&#x438;&#x442; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x438; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; &#x434;&#x43B;&#x44F; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x44B; &#x441; &#x441;&#x43E;&#x43E;&#x431;&#x449;&#x435;&#x43D;&#x438;&#x44F;&#x43C;&#x438; &#x43E;&#x442; &#x43A;&#x43D;&#x43E;&#x43F;&#x43E;&#x43A;.</li><li><code>notification/notification_messages.h</code> &#x2014; &#x441;&#x43E;&#x434;&#x435;&#x440;&#x436;&#x438;&#x442; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x438; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; &#x434;&#x43B;&#x44F; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x44B; &#x441; &#x443;&#x432;&#x435;&#x434;&#x43E;&#x43C;&#x43B;&#x435;&#x43D;&#x438;&#x44F;&#x43C;&#x438;, &#x43D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, &#x441;&#x432;&#x435;&#x442;&#x43E;&#x434;&#x438;&#x43E;&#x434;&#x43E;&#x43C;.</li></ul><p>&#x415;&#x441;&#x43B;&#x438; &#x447;&#x442;&#x43E;-&#x442;&#x43E; &#x438;&#x437; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x432;&#x430;&#x43C; &#x43D;&#x435; &#x43D;&#x443;&#x436;&#x43D;&#x43E;, &#x441;&#x43C;&#x435;&#x43B;&#x43E; &#x443;&#x434;&#x430;&#x43B;&#x44F;&#x439;&#x442;&#x435;. &#x41C;&#x43E;&#x439; &#x436;&#x435; &#x438;&#x441;&#x445;&#x43E;&#x434;&#x43D;&#x438;&#x43A; &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x431;&#x443;&#x434;&#x435;&#x442; &#x432;&#x44B;&#x433;&#x43B;&#x44F;&#x434;&#x435;&#x442;&#x44C; &#x442;&#x430;&#x43A;:</p><figure class="kg-card kg-code-card"><pre><code>#include &lt;stdio.h&gt;
#include &lt;furi.h&gt;
#include &lt;gui/gui.h&gt;
#include &lt;input/input.h&gt;
#include &lt;notification/notification_messages.h&gt;

int32_t hello_world_app(void* p) {
    UNUSED(p);

    return 0;
}</code></pre><figcaption>hello_world.c</figcaption></figure><p><code>UNUSED</code> &#x2014; &#x44D;&#x442;&#x43E; &#x43C;&#x430;&#x43A;&#x440;&#x43E;&#x441;, &#x43E;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x435;&#x43D;&#x43D;&#x44B;&#x439; &#x432; <code>FURI</code>, &#x435;&#x433;&#x43E; &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x430;&#x446;&#x438;&#x44F; &#x440;&#x43E;&#x432;&#x43D;&#x43E; &#x442;&#x430;&#x43A;&#x430;&#x44F; &#x436;&#x435;, &#x43A;&#x430;&#x43A; &#x43C;&#x44B; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43B;&#x438; &#x440;&#x430;&#x43D;&#x44C;&#x448;&#x435;, &#x43D;&#x43E; &#x432;&#x44B;&#x433;&#x43B;&#x44F;&#x434;&#x438;&#x442; &#x432; &#x43A;&#x43E;&#x434;&#x435; &#x441;&#x438;&#x43C;&#x43F;&#x430;&#x442;&#x438;&#x447;&#x43D;&#x435;&#x435;.</p><p>&#x41E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x438; &#x441;&#x43E;&#x43E;&#x431;&#x449;&#x435;&#x43D;&#x438;&#x439;, &#x43A;&#x430;&#x43A; &#x44F; &#x43F;&#x43E;&#x43D;&#x44F;&#x43B; (&#x43C;&#x43E;&#x433;&#x443; &#x436;&#x435;&#x441;&#x442;&#x43E;&#x43A;&#x43E; &#x43E;&#x448;&#x438;&#x431;&#x430;&#x442;&#x44C;&#x441;&#x44F;), &#x43D;&#x430; &#x441;&#x430;&#x43C;&#x43E;&#x43C; &#x434;&#x435;&#x43B;&#x435; &#x433;&#x43B;&#x443;&#x431;&#x43E;&#x43A;&#x43E; &#x43D;&#x430;&#x43F;&#x43B;&#x435;&#x432;&#x430;&#x442;&#x44C; &#x43A;&#x430;&#x43A;&#x438;&#x435; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x441;&#x43E;&#x43E;&#x431;&#x449;&#x435;&#x43D;&#x438;&#x44F; &#x445;&#x440;&#x430;&#x43D;&#x438;&#x442;&#x44C;. &#x42D;&#x442;&#x43E; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x434;&#x43B;&#x44F; &#x442;&#x43E;&#x433;&#x43E;, &#x447;&#x442;&#x43E;&#x431; &#x432;&#x44B; &#x43C;&#x43E;&#x433;&#x43B;&#x438; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x442;&#x43E;&#x442; &#x43D;&#x430;&#x431;&#x43E;&#x440; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x439;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x445;&#x43E;&#x442;&#x438;&#x442;&#x435; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x432;&#x44B;. &#x41F;&#x440;&#x438; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x438;&#x438; &#x432;&#x430;&#x43C; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x443;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C; &#x440;&#x430;&#x437;&#x43C;&#x435;&#x440; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x438; (&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x439; &#x43E;&#x43D;&#x430; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x445;&#x440;&#x430;&#x43D;&#x438;&#x442;&#x44C; &#x434;&#x43E; &quot;&#x438;&#x441;&#x447;&#x435;&#x440;&#x43F;&#x430;&#x43D;&#x438;&#x44F;&quot;) &#x438; &#x440;&#x430;&#x437;&#x43C;&#x435;&#x440; &#x43A;&#x430;&#x436;&#x434;&#x43E;&#x433;&#x43E; &#x438;&#x437; &#x43D;&#x438;&#x445;.</p><p>&#x41C;&#x44B; &#x43D;&#x430;&#x447;&#x43D;&#x435;&#x43C; &#x441; &#x442;&#x43E;&#x433;&#x43E;, &#x447;&#x442;&#x43E; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x43F;&#x43E;&#x434;&#x434;&#x435;&#x440;&#x436;&#x438;&#x432;&#x430;&#x442;&#x44C; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43E;&#x434;&#x438;&#x43D; &#x442;&#x438;&#x43F; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x439; &#x2014; <code>InputEvent</code>, &#x43E;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x435;&#x43D;&#x43D;&#x44B;&#x439; &#x432; <code>input/input.h</code>, &#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x44F; &#x43E;&#x442; &#x43A;&#x43D;&#x43E;&#x43F;&#x43E;&#x43A;. &#x414;&#x43B;&#x44F; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43C;&#x43E;&#x434;&#x438;&#x444;&#x438;&#x446;&#x438;&#x440;&#x443;&#x435;&#x43C; &#x43D;&#x430;&#x448;&#x443; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x43C; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x43C;:</p><figure class="kg-card kg-code-card"><pre><code class="language-&#x441;">#include &lt;stdio.h&gt;
#include &lt;furi.h&gt;
#include &lt;gui/gui.h&gt;
#include &lt;input/input.h&gt;
#include &lt;notification/notification_messages.h&gt;

int32_t hello_world_app(void* p) {
    UNUSED(p);

    // &#x422;&#x435;&#x43A;&#x443;&#x449;&#x435;&#x435; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x435; &#x442;&#x438;&#x43F;&#x430; InputEvent
    InputEvent event;
    // &#x41E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x439; &#x43D;&#x430; 8 &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x43E;&#x432; &#x440;&#x430;&#x437;&#x43C;&#x435;&#x440;&#x430; InputEvent
    FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(InputEvent));

    // &#x411;&#x435;&#x441;&#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x44B;&#x439; &#x446;&#x438;&#x43A;&#x43B; &#x43E;&#x431;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x438; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x438; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x439;
    while(1) {
        // &#x412;&#x44B;&#x431;&#x438;&#x440;&#x430;&#x435;&#x43C; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x435; &#x438;&#x437; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x438; &#x432; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x443;&#x44E; event (&#x436;&#x434;&#x435;&#x43C; &#x431;&#x435;&#x441;&#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E; &#x434;&#x43E;&#x43B;&#x433;&#x43E;, &#x435;&#x441;&#x43B;&#x438; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x43F;&#x443;&#x441;&#x442;&#x430;)
        // &#x438; &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x44F;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x443; &#x43D;&#x430;&#x441; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x43B;&#x43E;&#x441;&#x44C; &#x44D;&#x442;&#x43E; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C;
        furi_check(furi_message_queue_get(event_queue, &amp;event, FuriWaitForever) == FuriStatusOk);

        // &#x415;&#x441;&#x43B;&#x438; &#x43D;&#x430;&#x436;&#x430;&#x442;&#x430; &#x43A;&#x43D;&#x43E;&#x43F;&#x43A;&#x430; &quot;&#x43D;&#x430;&#x437;&#x430;&#x434;&quot;, &#x442;&#x43E; &#x432;&#x44B;&#x445;&#x43E;&#x434;&#x438;&#x43C; &#x438;&#x437; &#x446;&#x438;&#x43A;&#x43B;&#x430;, &#x430; &#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x438; &#x438;&#x437; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F;
        if(event.key == InputKeyBack) {
            break;
        }
    }

    // &#x421;&#x43F;&#x435;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x430;&#x44F; &#x43E;&#x447;&#x438;&#x441;&#x442;&#x43A;&#x430; &#x43F;&#x430;&#x43C;&#x44F;&#x442;&#x438;, &#x437;&#x430;&#x43D;&#x438;&#x43C;&#x430;&#x435;&#x43C;&#x43E;&#x439; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C;&#x44E;
    furi_message_queue_free(event_queue);

    return 0;
}</code></pre><figcaption>hello_world.c</figcaption></figure><p>&#x415;&#x441;&#x43B;&#x438; &#x432;&#x44B; &#x441;&#x43A;&#x43E;&#x43C;&#x43F;&#x438;&#x43B;&#x438;&#x440;&#x443;&#x435;&#x442;&#x435;, &#x441;&#x43A;&#x43E;&#x43F;&#x438;&#x440;&#x443;&#x435;&#x442;&#x435; &#x43D;&#x430; &#x443;&#x441;&#x442;&#x440;&#x43E;&#x439;&#x441;&#x442;&#x432;&#x43E; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x442;&#x438;&#x442;&#x435; &#x44D;&#x442;&#x43E; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435;, &#x442;&#x43E; &#x432;&#x430;&#x448; Flipper &#x431;&#x443;&#x434;&#x435;&#x442; &#x432;&#x435;&#x447;&#x43D;&#x43E; &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x432;&#x43E;&#x442; &#x442;&#x430;&#x43A;&#x43E;&#x439; &#x44D;&#x43A;&#x440;&#x430;&#x43D;, &#x43D;&#x435; &#x440;&#x435;&#x430;&#x433;&#x438;&#x440;&#x443;&#x44F; &#x43D;&#x438; &#x43D;&#x430; &#x43A;&#x430;&#x43A;&#x438;&#x435; &#x43D;&#x430;&#x436;&#x430;&#x442;&#x438;&#x44F;. &#x415;&#x434;&#x438;&#x43D;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x43E;&#x435;, &#x447;&#x442;&#x43E; &#x432;&#x430;&#x441; &#x441;&#x43F;&#x430;&#x441;&#x435;&#x442; &#x2014; &#x44D;&#x442;&#x43E; &#x43F;&#x435;&#x440;&#x435;&#x437;&#x430;&#x433;&#x440;&#x443;&#x437;&#x43A;&#x430; (&#x432;&#x43B;&#x435;&#x432;&#x43E; + &#x43D;&#x430;&#x437;&#x430;&#x434;).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2022/10/Screenshot-20221024-231150.png" class="kg-image" alt="&#x421;&#x431;&#x43E;&#x440;&#x43A;&#x430; Hello World &#x43F;&#x43E;&#x434; Flipper Zero" loading="lazy" width="512" height="256"><figcaption>&#x417;&#x430;&#x432;&#x438;&#x441;&#x448;&#x438;&#x439; &#x444;&#x43B;&#x438;&#x43F;&#x43F;&#x435;&#x440;</figcaption></figure><p>&#x41F;&#x43E;&#x447;&#x435;&#x43C;&#x443; &#x442;&#x430;&#x43A; &#x43F;&#x440;&#x43E;&#x438;&#x441;&#x445;&#x43E;&#x434;&#x438;&#x442;? &#x41C;&#x44B;, &#x43E;&#x447;&#x435;&#x432;&#x438;&#x434;&#x43D;&#x43E;, &#x432;&#x438;&#x441;&#x438;&#x43C; &#x432; &#x431;&#x435;&#x441;&#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;&#x43C; &#x446;&#x438;&#x43A;&#x43B;&#x435;, &#x43D;&#x43E; &#x440;&#x430;&#x437;&#x432;&#x435; &#x43D;&#x430;&#x436;&#x430;&#x442;&#x438;&#x435; &#x43A;&#x43D;&#x43E;&#x43F;&#x43A;&#x438; &quot;&#x43D;&#x430;&#x437;&#x430;&#x434;&quot; &#x43D;&#x435; &#x434;&#x43E;&#x43B;&#x436;&#x43D;&#x43E; &#x435;&#x433;&#x43E; &#x43F;&#x440;&#x435;&#x440;&#x44B;&#x432;&#x430;&#x442;&#x44C;?</p><p>&#x41D;&#x430; &#x441;&#x430;&#x43C;&#x43E;&#x43C; &#x434;&#x435;&#x43B;&#x435;, &#x43D;&#x435;&#x442;. &#x41F;&#x43E;&#x442;&#x43E;&#x43C;&#x443; &#x447;&#x442;&#x43E; &#x432; &#x43D;&#x430;&#x448;&#x435;&#x439; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x438; &#x441;&#x43E;&#x43E;&#x431;&#x449;&#x435;&#x43D;&#x438;&#x439; &#x43F;&#x43E;&#x43A;&#x430; &#x43D;&#x438;&#x447;&#x435;&#x433;&#x43E; &#x43D;&#x435; &#x43B;&#x435;&#x436;&#x438;&#x442;. &#x41C;&#x44B; &#x438;&#x437; &#x43D;&#x435;&#x435; &#x447;&#x438;&#x442;&#x430;&#x435;&#x43C;, &#x43D;&#x43E; &#x43D;&#x438;&#x447;&#x435;&#x433;&#x43E; &#x432; &#x43D;&#x435;&#x451; &#x43D;&#x435; &#x43F;&#x438;&#x448;&#x435;&#x43C;. &#x410; &#x44D;&#x442;&#x43E; &#x432; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435; &#x441; Flipper &#x43C;&#x44B; &#x442;&#x43E;&#x436;&#x435; &#x434;&#x43E;&#x43B;&#x436;&#x43D;&#x44B; &#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x441;&#x430;&#x43C;&#x438;. &#x420;&#x430;&#x437;&#x431;&#x435;&#x440;&#x435;&#x43C;&#x441;&#x44F; &#x43A;&#x430;&#x43A; &#x44D;&#x442;&#x43E; &#x432;&#x43E;&#x43F;&#x43B;&#x43E;&#x442;&#x438;&#x442;&#x44C;. &#x41D;&#x43E; &#x434;&#x43B;&#x44F; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43D;&#x430;&#x43C; &#x43F;&#x440;&#x438;&#x434;&#x435;&#x442;&#x441;&#x44F; &#x441;&#x43D;&#x430;&#x447;&#x430;&#x43B;&#x430; &#x440;&#x430;&#x437;&#x43E;&#x431;&#x440;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x441; GUI.</p><h2 id="%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9-%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81">&#x413;&#x440;&#x430;&#x444;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x439; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x444;&#x435;&#x439;&#x441;</h2><p>&#x421;&#x43A;&#x430;&#x436;&#x443; &#x447;&#x435;&#x441;&#x442;&#x43D;&#x43E;, &#x44F; &#x43D;&#x435; &#x43E;&#x441;&#x43E;&#x431;&#x435;&#x43D;&#x43D;&#x43E; &#x441;&#x438;&#x43B;&#x44C;&#x43D;&#x43E; &#x442;&#x443;&#x442; &#x440;&#x430;&#x437;&#x431;&#x438;&#x440;&#x430;&#x43B;&#x441;&#x44F;, &#x43D;&#x43E; &#x433;&#x43B;&#x43E;&#x431;&#x430;&#x43B;&#x44C;&#x43D;&#x430;&#x44F; &#x438;&#x434;&#x435;&#x44F; &#x432;&#x44B;&#x433;&#x43B;&#x44F;&#x434;&#x438;&#x442; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x43D;&#x43E;. &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; GUI, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x438;&#x43D;&#x438;&#x446;&#x438;&#x438;&#x440;&#x443;&#x435;&#x442; &#x43D;&#x430;&#x448;&#x443; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x443;. &#x41A; &#x44D;&#x442;&#x43E;&#x43C;&#x443; GUI &#x43F;&#x440;&#x438;&#x432;&#x44F;&#x437;&#x44B;&#x432;&#x430;&#x435;&#x43C; view port, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x433;&#x43E;&#x432;&#x43E;&#x440;&#x438;&#x442;, &#x43A;&#x443;&#x434;&#x430; &#x431;&#x443;&#x434;&#x435;&#x442; &#x440;&#x435;&#x43D;&#x434;&#x435;&#x440;&#x438;&#x442;&#x44C;&#x441;&#x44F; &#x43D;&#x430;&#x448; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x444;&#x435;&#x439;&#x441; (&#x43E;&#x447;&#x435;&#x432;&#x438;&#x434;&#x43D;&#x43E;, &#x43F;&#x43E;&#x43B;&#x43D;&#x43E;&#x44D;&#x43A;&#x440;&#x430;&#x43D;&#x43D;&#x44B;&#x439; &#x434;&#x43B;&#x44F; &#x43D;&#x430;&#x448;&#x435;&#x433;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x435;&#x439;&#x448;&#x435;&#x433;&#x43E; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F;), &#x430; &#x434;&#x430;&#x43B;&#x44C;&#x448;&#x435; &#x43F;&#x440;&#x438;&#x432;&#x44F;&#x437;&#x44B;&#x432;&#x430;&#x435;&#x43C; &#x43A;&#x43E;&#x43B;&#x431;&#x44D;&#x43A;&#x438; &#x43E;&#x442;&#x440;&#x438;&#x441;&#x43E;&#x432;&#x43A;&#x438; &#x438; &#x432;&#x441;&#x44F;&#x43A;&#x438;&#x445; &#x43F;&#x43E;&#x434;&#x434;&#x435;&#x440;&#x436;&#x438;&#x432;&#x430;&#x435;&#x43C;&#x44B;&#x445; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x439;. &#x412; &#x447;&#x430;&#x441;&#x442;&#x43D;&#x43E;&#x441;&#x442;&#x438;, &#x43A; &#x43D;&#x438;&#x43C; &#x431;&#x443;&#x434;&#x443;&#x442; &#x43E;&#x442;&#x43D;&#x43E;&#x441;&#x438;&#x442;&#x44C;&#x441;&#x44F; &#x442;&#x435; &#x441;&#x430;&#x43C;&#x44B;&#x435; &#x43D;&#x430;&#x436;&#x430;&#x442;&#x438;&#x44F; &#x43A;&#x43D;&#x43E;&#x43F;&#x43E;&#x43A;.</p><p>&#x41D;&#x43E;&#x432;&#x43E;&#x433;&#x43E; &#x43A;&#x43E;&#x434;&#x430; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43C;&#x43D;&#x43E;&#x433;&#x43E;, &#x442;&#x430;&#x43A; &#x447;&#x442;&#x43E; &#x441;&#x43D;&#x430;&#x447;&#x430;&#x43B;&#x430; &#x43A;&#x443;&#x441;&#x43E;&#x447;&#x43A;&#x438;. &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x43D;&#x43E;&#x432;&#x44B;&#x439; view port. &#x422;&#x443;&#x442; &#x432;&#x441;&#x435; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; &#x438; &#x431;&#x435;&#x437; &#x43F;&#x430;&#x440;&#x430;&#x43C;&#x435;&#x442;&#x440;&#x43E;&#x432;.</p><pre><code class="language-c">ViewPort* view_port = view_port_alloc();</code></pre><p>&#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x43A;&#x43E;&#x43B;&#x43B;&#x431;&#x44D;&#x43A;&#x438; &#x434;&#x43B;&#x44F; &#x43E;&#x442;&#x440;&#x438;&#x441;&#x43E;&#x432;&#x43A;&#x438; (<code>view_port_draw_callback_set</code>) &#x438; &#x43E;&#x442;&#x43B;&#x43E;&#x432;&#x430; &#x43D;&#x430;&#x436;&#x430;&#x442;&#x438;&#x439; &#x43D;&#x430; &#x43A;&#x43B;&#x430;&#x432;&#x438;&#x448;&#x438; (<code>view_port_input_callback_set</code>). &#x412; &#x43E;&#x431;&#x43E;&#x438;&#x445; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x44F;&#x445; &#x43F;&#x43E;&#x43C;&#x438;&#x43C;&#x43E; &#x443;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x44F; view port &#x438; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438;-callback &#x43D;&#x430;&#x43C; &#x442;&#x430;&#x43A;&#x436;&#x435; &#x434;&#x430;&#x44E;&#x442; &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x442;&#x44C; &#x432; callback &#x43F;&#x440;&#x43E;&#x438;&#x437;&#x432;&#x43E;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442;. &#x414;&#x43B;&#x44F; &#x43E;&#x442;&#x440;&#x438;&#x441;&#x43E;&#x432;&#x43A;&#x438; &#x43D;&#x430;&#x43C; &#x43D;&#x438;&#x447;&#x435;&#x433;&#x43E; &#x43F;&#x43E;&#x43A;&#x430; &#x43D;&#x435; &#x43F;&#x43E;&#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F;, &#x430; &#x432;&#x43E;&#x442; &#x432; callback &#x43D;&#x430;&#x436;&#x430;&#x442;&#x438;&#x439; &#x43D;&#x430; &#x43A;&#x43B;&#x430;&#x432;&#x438;&#x448;&#x438; &#x443;&#x434;&#x43E;&#x431;&#x43D;&#x43E; &#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x442;&#x44C; &#x443;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C; &#x43D;&#x430; &#x43D;&#x430;&#x448;&#x443; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x441;&#x43E;&#x43E;&#x431;&#x449;&#x435;&#x43D;&#x438;&#x439;, &#x447;&#x442;&#x43E;&#x431; &#x43F;&#x438;&#x445;&#x430;&#x442;&#x44C; &#x432; &#x43D;&#x435;&#x435; &#x43D;&#x430;&#x436;&#x430;&#x442;&#x44B;&#x435; &#x43A;&#x43B;&#x430;&#x432;&#x438;&#x448;&#x438;:</p><pre><code class="language-c">view_port_draw_callback_set(view_port, draw_callback, NULL);
view_port_input_callback_set(view_port, input_callback, event_queue);</code></pre><p>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x43E;&#x431;&#x449;&#x435;&#x435; GUI &#x43D;&#x430;&#x448;&#x435;&#x433;&#x43E; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F; &#x438; &#x43F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x430;&#x435;&#x43C; &#x43A; &#x43D;&#x435;&#x43C;&#x443; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x439; view port &#x432; &#x440;&#x435;&#x436;&#x438;&#x43C;&#x435; &#x43F;&#x43E;&#x43B;&#x43D;&#x43E;&#x433;&#x43E; &#x44D;&#x43A;&#x440;&#x430;&#x43D;&#x430;:</p><pre><code class="language-c">Gui* gui = furi_record_open(RECORD_GUI);
gui_add_view_port(gui, view_port, GuiLayerFullscreen);</code></pre><p>&#x41F;&#x43E;&#x441;&#x43B;&#x435; &#x432;&#x44B;&#x445;&#x43E;&#x434;&#x430; &#x438;&#x437; &#x43D;&#x430;&#x448;&#x435;&#x433;&#x43E; &#x431;&#x435;&#x441;&#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;&#x433;&#x43E; &#x446;&#x438;&#x43A;&#x43B;&#x430; &#x447;&#x438;&#x441;&#x442;&#x438;&#x442;&#x44C; &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43F;&#x440;&#x438;&#x434;&#x435;&#x442;&#x441;&#x44F; &#x43D;&#x435; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x441;&#x43E;&#x43E;&#x431;&#x449;&#x435;&#x43D;&#x438;&#x439;, &#x43D;&#x43E; &#x438; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x43E;&#x431;&#x44A;&#x435;&#x43A;&#x442;&#x44B;:</p><pre><code class="language-c">gui_remove_view_port(gui, view_port);
view_port_free(view_port);
furi_record_close(RECORD_GUI);</code></pre><p>&#x421;&#x43E;&#x431;&#x438;&#x440;&#x430;&#x435;&#x43C; &#x43D;&#x430;&#x448;&#x443; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E; &#x446;&#x435;&#x43B;&#x438;&#x43A;&#x43E;&#x43C;:</p><pre><code class="language-c">int32_t hello_world_app(void* p) {
    UNUSED(p);

    // &#x422;&#x435;&#x43A;&#x443;&#x449;&#x435;&#x435; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x435; &#x442;&#x438;&#x43F;&#x430; InputEvent
    InputEvent event;
    // &#x41E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x439; &#x43D;&#x430; 8 &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x43E;&#x432; &#x440;&#x430;&#x437;&#x43C;&#x435;&#x440;&#x430; InputEvent
    FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(InputEvent));

    // &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x43D;&#x43E;&#x432;&#x44B;&#x439; view port
    ViewPort* view_port = view_port_alloc();
    // &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; callback &#x43E;&#x442;&#x440;&#x438;&#x441;&#x43E;&#x432;&#x43A;&#x438;, &#x431;&#x435;&#x437; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442;&#x430;
    view_port_draw_callback_set(view_port, draw_callback, NULL);
    // &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; callback &#x43D;&#x430;&#x436;&#x430;&#x442;&#x438;&#x439; &#x43D;&#x430; &#x43A;&#x43B;&#x430;&#x432;&#x438;&#x448;&#x438;, &#x432; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x435; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442;&#x430; &#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x435;&#x43C;
    // &#x43D;&#x430;&#x448;&#x443; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x441;&#x43E;&#x43E;&#x431;&#x449;&#x435;&#x43D;&#x438;&#x439;, &#x447;&#x442;&#x43E;&#x431; &#x437;&#x430;&#x43F;&#x438;&#x445;&#x438;&#x432;&#x430;&#x442;&#x44C; &#x432; &#x43D;&#x435;&#x451; &#x44D;&#x442;&#x438; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x44F;
    view_port_input_callback_set(view_port, input_callback, event_queue);

    // &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; GUI &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F;
    Gui* gui = furi_record_open(RECORD_GUI);
    // &#x41F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x430;&#x435;&#x43C; view port &#x43A; GUI &#x432; &#x43F;&#x43E;&#x43B;&#x43D;&#x43E;&#x44D;&#x43A;&#x440;&#x430;&#x43D;&#x43D;&#x43E;&#x43C; &#x440;&#x435;&#x436;&#x438;&#x43C;&#x435;
    gui_add_view_port(gui, view_port, GuiLayerFullscreen);

    // &#x411;&#x435;&#x441;&#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x44B;&#x439; &#x446;&#x438;&#x43A;&#x43B; &#x43E;&#x431;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x438; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x438; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x439;
    while(1) {
        // &#x412;&#x44B;&#x431;&#x438;&#x440;&#x430;&#x435;&#x43C; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x435; &#x438;&#x437; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x438; &#x432; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x443;&#x44E; event (&#x436;&#x434;&#x435;&#x43C; &#x431;&#x435;&#x441;&#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E; &#x434;&#x43E;&#x43B;&#x433;&#x43E;, &#x435;&#x441;&#x43B;&#x438; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x43F;&#x443;&#x441;&#x442;&#x430;)
        // &#x438; &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x44F;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x443; &#x43D;&#x430;&#x441; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x43B;&#x43E;&#x441;&#x44C; &#x44D;&#x442;&#x43E; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C;
        furi_check(furi_message_queue_get(event_queue, &amp;event, FuriWaitForever) == FuriStatusOk);

        // &#x415;&#x441;&#x43B;&#x438; &#x43D;&#x430;&#x436;&#x430;&#x442;&#x430; &#x43A;&#x43D;&#x43E;&#x43F;&#x43A;&#x430; &quot;&#x43D;&#x430;&#x437;&#x430;&#x434;&quot;, &#x442;&#x43E; &#x432;&#x44B;&#x445;&#x43E;&#x434;&#x438;&#x43C; &#x438;&#x437; &#x446;&#x438;&#x43A;&#x43B;&#x430;, &#x430; &#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x438; &#x438;&#x437; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F;
        if(event.key == InputKeyBack) {
            break;
        }
    }

    // &#x421;&#x43F;&#x435;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x430;&#x44F; &#x43E;&#x447;&#x438;&#x441;&#x442;&#x43A;&#x430; &#x43F;&#x430;&#x43C;&#x44F;&#x442;&#x438;, &#x437;&#x430;&#x43D;&#x438;&#x43C;&#x430;&#x435;&#x43C;&#x43E;&#x439; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C;&#x44E;
    furi_message_queue_free(event_queue);

    // &#x427;&#x438;&#x441;&#x442;&#x438;&#x43C; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x43E;&#x431;&#x44A;&#x435;&#x43A;&#x442;&#x44B;, &#x441;&#x432;&#x44F;&#x437;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x441; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x444;&#x435;&#x439;&#x441;&#x43E;&#x43C;
    gui_remove_view_port(gui, view_port);
    view_port_free(view_port);
    furi_record_close(RECORD_GUI);

    return 0;
}</code></pre><p>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x43D;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C;, &#x441;&#x43E;&#x431;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x43E;, &#x43A;&#x43E;&#x43B;&#x43B;&#x431;&#x44D;&#x43A;&#x438;. &#x41D;&#x430;&#x447;&#x43D;&#x435;&#x43C; &#x441; <code>draw_callback</code>, &#x43E;&#x442;&#x432;&#x435;&#x447;&#x430;&#x44E;&#x449;&#x435;&#x433;&#x43E; &#x437;&#x430; &#x43E;&#x442;&#x440;&#x438;&#x441;&#x43E;&#x432;&#x43A;&#x443;. &#x41E;&#x43D; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43F;&#x440;&#x438;&#x43D;&#x438;&#x43C;&#x430;&#x442;&#x44C; &#x43D;&#x430; &#x432;&#x445;&#x43E;&#x434; &#x434;&#x432;&#x430; &#x430;&#x440;&#x433;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430; &#x2014; canvas, &#x442;.&#x435;. &quot;&#x445;&#x43E;&#x43B;&#x441;&#x442;&quot; &#x43D;&#x430; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x43C; &#x43C;&#x44B; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x440;&#x438;&#x441;&#x43E;&#x432;&#x430;&#x442;&#x44C;, &#x438; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442;. &#x412; &#x43D;&#x430;&#x448;&#x435;&#x43C; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x43D;&#x435; &#x431;&#x443;&#x434;&#x435;&#x442;, &#x442;&#x430;&#x43A; &#x447;&#x442;&#x43E; &#x432;&#x43E;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x43C;&#x441;&#x44F; &#x443;&#x436;&#x435; &#x43F;&#x440;&#x438;&#x432;&#x44B;&#x447;&#x43D;&#x44B;&#x43C; &#x43C;&#x430;&#x43A;&#x440;&#x43E;&#x441;&#x43E;&#x43C; <code>UNUSED</code>. &#x425;&#x43E;&#x43B;&#x441;&#x442; &#x436;&#x435; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x43F;&#x440;&#x438; &#x43A;&#x430;&#x436;&#x434;&#x43E;&#x43C; &#x432;&#x44B;&#x437;&#x43E;&#x432;&#x435; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; &#x43E;&#x447;&#x438;&#x449;&#x430;&#x442;&#x44C;.</p><pre><code class="language-c">static void draw_callback(Canvas* canvas, void* ctx) {
    UNUSED(ctx);

    canvas_clear(canvas);
}</code></pre><p>&#x412; &#x44D;&#x442;&#x43E;&#x439; &#x436;&#x435; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; &#x43C;&#x44B; &#x441;&#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x438; &#x440;&#x438;&#x441;&#x43E;&#x432;&#x430;&#x442;&#x44C;-&#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x43D;&#x430; &#x44D;&#x43A;&#x440;&#x430;&#x43D;&#x435;. &#x427;&#x442;&#x43E;&#x431; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x43D;&#x435; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x430;&#x43B;&#x43E;&#x441;&#x44C; &#x441;&#x43E;&#x432;&#x441;&#x435;&#x43C; &#x433;&#x440;&#x443;&#x441;&#x442;&#x43D;&#x44B;&#x43C; &#x434;&#x430;&#x432;&#x430;&#x439;&#x442;&#x435; &#x441;&#x440;&#x430;&#x437;&#x443; &#x43F;&#x43E;&#x441;&#x43B;&#x435; &#x43E;&#x447;&#x438;&#x441;&#x442;&#x43A;&#x438; &#x445;&#x43E;&#x43B;&#x441;&#x442;&#x430; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x438;&#x43C; &#x437;&#x430;&#x432;&#x435;&#x442;&#x43D;&#x44B;&#x435; &#x441;&#x43B;&#x43E;&#x432;&#x430; &quot;Hello World!&quot;. &#x414;&#x43B;&#x44F; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x432;&#x44B;&#x431;&#x440;&#x430;&#x442;&#x44C; &#x448;&#x440;&#x438;&#x444;&#x442; &#x438; &#x440;&#x430;&#x437;&#x43C;&#x435;&#x441;&#x442;&#x438;&#x442;&#x44C; &#x442;&#x435;&#x43A;&#x441;&#x442; &#x43F;&#x43E; &#x43A;&#x430;&#x43A;&#x438;&#x43C;-&#x442;&#x43E; &#x43A;&#x43E;&#x43E;&#x440;&#x434;&#x438;&#x43D;&#x430;&#x442;&#x430;&#x43C;. &#x41A;&#x43E;&#x43E;&#x440;&#x434;&#x438;&#x43D;&#x430;&#x442;&#x44B; &#x443;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x44E;&#x442; &#x43B;&#x435;&#x432;&#x44B;&#x439; &#x43D;&#x438;&#x436;&#x43D;&#x438;&#x439; &#x443;&#x433;&#x43E;&#x43B; &#x43E;&#x431;&#x44A;&#x435;&#x43A;&#x442;&#x430;, &#x430; &#x441;&#x447;&#x438;&#x442;&#x430;&#x44E;&#x442;&#x441;&#x44F; &#x43E;&#x442; &#x43B;&#x435;&#x432;&#x43E;&#x433;&#x43E; &#x432;&#x435;&#x440;&#x445;&#x43D;&#x435;&#x433;&#x43E; &#x443;&#x433;&#x43B;&#x430; &#x44D;&#x43A;&#x440;&#x430;&#x43D;&#x430;.</p><pre><code class="language-c">static void draw_callback(Canvas* canvas, void* ctx) {
    UNUSED(ctx);

    canvas_clear(canvas);
    canvas_set_font(canvas, FontPrimary);
    canvas_draw_str(canvas, 0, 10, &quot;Hello World!&quot;);
}</code></pre><p>&#x410;&#x43D;&#x430;&#x43B;&#x43E;&#x433;&#x438;&#x447;&#x43D;&#x44B;&#x43C; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x43C; &#x440;&#x430;&#x437;&#x431;&#x435;&#x440;&#x435;&#x43C;&#x441;&#x44F; &#x438; &#x441; callback &#x434;&#x43B;&#x44F; &#x43A;&#x43B;&#x430;&#x432;&#x438;&#x448;. &#x41E;&#x43D; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x430;&#x442;&#x44C; &#x43D;&#x430; &#x432;&#x445;&#x43E;&#x434; <code>InputEvent</code> &#x2014; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x435; &#x43D;&#x430;&#x436;&#x430;&#x442;&#x438;&#x44F;, &#x438; &#x43D;&#x430;&#x448; &#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x432;&#x430;&#x435;&#x43C;&#x44B;&#x439; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442;. &#x424;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44F; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;&#x439;: &#x432;&#x43E;&#x437;&#x44C;&#x43C;&#x435;&#x43C; &#x438;&#x437; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442;&#x430; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x438; &#x43F;&#x43E;&#x43B;&#x43E;&#x436;&#x438;&#x43C; &#x432; &#x43D;&#x435;&#x435; &#x43F;&#x440;&#x438;&#x448;&#x435;&#x434;&#x448;&#x435;&#x435; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x435;.</p><pre><code>static void input_callback(InputEvent* input_event, void* ctx) {
    // &#x41F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x44F;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442; &#x43D;&#x435; &#x43D;&#x443;&#x43B;&#x435;&#x432;&#x43E;&#x439;
    furi_assert(ctx);
    FuriMessageQueue* event_queue = ctx;

    furi_message_queue_put(event_queue, input_event, FuriWaitForever);
}</code></pre><p>&#x41D;&#x430; &#x432;&#x441;&#x44F;&#x43A;&#x438;&#x439; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x439; &#x43F;&#x440;&#x438;&#x432;&#x43E;&#x436;&#x443; &#x43F;&#x43E;&#x43B;&#x43D;&#x44B;&#x439; &#x43B;&#x438;&#x441;&#x442;&#x438;&#x43D;&#x433; &#x432;&#x441;&#x435;&#x433;&#x43E; &#x442;&#x435;&#x43A;&#x443;&#x449;&#x435;&#x433;&#x43E; &#x444;&#x430;&#x439;&#x43B;&#x430; <code>hello_world.c</code>:</p><pre><code class="language-c">#include &lt;stdio.h&gt;
#include &lt;furi.h&gt;
#include &lt;gui/gui.h&gt;
#include &lt;input/input.h&gt;
#include &lt;notification/notification_messages.h&gt;

static void draw_callback(Canvas* canvas, void* ctx) {
    UNUSED(ctx);

    canvas_clear(canvas);
    canvas_set_font(canvas, FontPrimary);
    canvas_draw_str(canvas, 0, 10, &quot;Hello World!&quot;);
}

static void input_callback(InputEvent* input_event, void* ctx) {
    // &#x41F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x44F;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442; &#x43D;&#x435; &#x43D;&#x443;&#x43B;&#x435;&#x432;&#x43E;&#x439;
    furi_assert(ctx);
    FuriMessageQueue* event_queue = ctx;

    furi_message_queue_put(event_queue, input_event, FuriWaitForever);
}

int32_t hello_world_app(void* p) {
    UNUSED(p);

    // &#x422;&#x435;&#x43A;&#x443;&#x449;&#x435;&#x435; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x435; &#x442;&#x438;&#x43F;&#x430; InputEvent
    InputEvent event;
    // &#x41E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x439; &#x43D;&#x430; 8 &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x43E;&#x432; &#x440;&#x430;&#x437;&#x43C;&#x435;&#x440;&#x430; InputEvent
    FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(InputEvent));

    // &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x43D;&#x43E;&#x432;&#x44B;&#x439; view port
    ViewPort* view_port = view_port_alloc();
    // &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; callback &#x43E;&#x442;&#x440;&#x438;&#x441;&#x43E;&#x432;&#x43A;&#x438;, &#x431;&#x435;&#x437; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442;&#x430;
    view_port_draw_callback_set(view_port, draw_callback, NULL);
    // &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; callback &#x43D;&#x430;&#x436;&#x430;&#x442;&#x438;&#x439; &#x43D;&#x430; &#x43A;&#x43B;&#x430;&#x432;&#x438;&#x448;&#x438;, &#x432; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x435; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442;&#x430; &#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x435;&#x43C;
    // &#x43D;&#x430;&#x448;&#x443; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x441;&#x43E;&#x43E;&#x431;&#x449;&#x435;&#x43D;&#x438;&#x439;, &#x447;&#x442;&#x43E;&#x431; &#x437;&#x430;&#x43F;&#x438;&#x445;&#x438;&#x432;&#x430;&#x442;&#x44C; &#x432; &#x43D;&#x435;&#x451; &#x44D;&#x442;&#x438; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x44F;
    view_port_input_callback_set(view_port, input_callback, event_queue);

    // &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; GUI &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F;
    Gui* gui = furi_record_open(RECORD_GUI);
    // &#x41F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x430;&#x435;&#x43C; view port &#x43A; GUI &#x432; &#x43F;&#x43E;&#x43B;&#x43D;&#x43E;&#x44D;&#x43A;&#x440;&#x430;&#x43D;&#x43D;&#x43E;&#x43C; &#x440;&#x435;&#x436;&#x438;&#x43C;&#x435;
    gui_add_view_port(gui, view_port, GuiLayerFullscreen);

    // &#x411;&#x435;&#x441;&#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x44B;&#x439; &#x446;&#x438;&#x43A;&#x43B; &#x43E;&#x431;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x438; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x438; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x439;
    while(1) {
        // &#x412;&#x44B;&#x431;&#x438;&#x440;&#x430;&#x435;&#x43C; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x435; &#x438;&#x437; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x438; &#x432; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x443;&#x44E; event (&#x436;&#x434;&#x435;&#x43C; &#x431;&#x435;&#x441;&#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E; &#x434;&#x43E;&#x43B;&#x433;&#x43E;, &#x435;&#x441;&#x43B;&#x438; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x43F;&#x443;&#x441;&#x442;&#x430;)
        // &#x438; &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x44F;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x443; &#x43D;&#x430;&#x441; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x43B;&#x43E;&#x441;&#x44C; &#x44D;&#x442;&#x43E; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C;
        furi_check(furi_message_queue_get(event_queue, &amp;event, FuriWaitForever) == FuriStatusOk);

        // &#x415;&#x441;&#x43B;&#x438; &#x43D;&#x430;&#x436;&#x430;&#x442;&#x430; &#x43A;&#x43D;&#x43E;&#x43F;&#x43A;&#x430; &quot;&#x43D;&#x430;&#x437;&#x430;&#x434;&quot;, &#x442;&#x43E; &#x432;&#x44B;&#x445;&#x43E;&#x434;&#x438;&#x43C; &#x438;&#x437; &#x446;&#x438;&#x43A;&#x43B;&#x430;, &#x430; &#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x438; &#x438;&#x437; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F;
        if(event.key == InputKeyBack) {
            break;
        }
    }

    // &#x421;&#x43F;&#x435;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x430;&#x44F; &#x43E;&#x447;&#x438;&#x441;&#x442;&#x43A;&#x430; &#x43F;&#x430;&#x43C;&#x44F;&#x442;&#x438;, &#x437;&#x430;&#x43D;&#x438;&#x43C;&#x430;&#x435;&#x43C;&#x43E;&#x439; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C;&#x44E;
    furi_message_queue_free(event_queue);

    // &#x427;&#x438;&#x441;&#x442;&#x438;&#x43C; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x43E;&#x431;&#x44A;&#x435;&#x43A;&#x442;&#x44B;, &#x441;&#x432;&#x44F;&#x437;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x441; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x444;&#x435;&#x439;&#x441;&#x43E;&#x43C;
    gui_remove_view_port(gui, view_port);
    view_port_free(view_port);
    furi_record_close(RECORD_GUI);

    return 0;
}</code></pre><p>&#x41A;&#x43E;&#x43C;&#x43F;&#x438;&#x43B;&#x438;&#x440;&#x443;&#x435;&#x43C;, &#x437;&#x430;&#x43B;&#x438;&#x432;&#x430;&#x435;&#x43C; &#x438; &#x43D;&#x430;&#x441;&#x43B;&#x430;&#x436;&#x434;&#x430;&#x435;&#x43C;&#x441;&#x44F;!</p><figure class="kg-card kg-image-card"><img src="https://yakovlev.me/content/images/2022/10/Screenshot-20221024-234910.png" class="kg-image" alt="&#x421;&#x431;&#x43E;&#x440;&#x43A;&#x430; Hello World &#x43F;&#x43E;&#x434; Flipper Zero" loading="lazy" width="512" height="256"></figure><figure class="kg-card kg-image-card"><img src="https://yakovlev.me/content/images/2022/10/Screenshot-20221024-234456.png" class="kg-image" alt="&#x421;&#x431;&#x43E;&#x440;&#x43A;&#x430; Hello World &#x43F;&#x43E;&#x434; Flipper Zero" loading="lazy" width="512" height="256"></figure><p>&#x41C;&#x430;&#x43B;&#x43E; &#x442;&#x43E;&#x433;&#x43E;, &#x447;&#x442;&#x43E; &#x43C;&#x44B; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x43B;&#x438; &quot;Hello World!&quot; &#x43D;&#x430; &#x44D;&#x43A;&#x440;&#x430;&#x43D;&#x435; (&#x43A;&#x430;&#x436;&#x435;&#x442;&#x441;&#x44F;, &#x441;&#x442;&#x43E;&#x438;&#x43B;&#x43E; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x43E;&#x442;&#x441;&#x442;&#x443;&#x43F; &#x441;&#x43B;&#x435;&#x432;&#x430; &#x43D;&#x435; &#x43D;&#x443;&#x43B;&#x435;&#x432;&#x44B;&#x43C;), &#x442;&#x430;&#x43A; &#x435;&#x449;&#x435; &#x438; &#x43A;&#x43D;&#x43E;&#x43F;&#x43A;&#x430; &quot;&#x43D;&#x430;&#x437;&#x430;&#x434;&quot; &#x437;&#x430;&#x43A;&#x440;&#x44B;&#x432;&#x430;&#x435;&#x442; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435;!</p><h2 id="%D1%82%D0%B0%D0%B9%D0%BC%D0%B5%D1%80">&#x422;&#x430;&#x439;&#x43C;&#x435;&#x440;</h2><p>&#x41D;&#x430; &#x44D;&#x442;&#x43E;&#x43C; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x431;&#x44B;&#x43B;&#x43E; &#x431;&#x44B; &#x437;&#x430;&#x43A;&#x43E;&#x43D;&#x447;&#x438;&#x442;&#x44C; &#x44D;&#x442;&#x43E;&#x442; &#x442;&#x435;&#x43A;&#x441;&#x442;, &#x43D;&#x43E; &#x43C;&#x43D;&#x435; &#x437;&#x430;&#x445;&#x43E;&#x442;&#x435;&#x43B;&#x43E;&#x441;&#x44C; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x438;&#x442;&#x44C; &#x435;&#x449;&#x435; &#x434;&#x432;&#x430; &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x430;: &#x442;&#x430;&#x439;&#x43C;&#x435;&#x440; &#x438; &#x43C;&#x438;&#x433;&#x430;&#x43D;&#x438;&#x435; &#x441;&#x432;&#x435;&#x442;&#x43E;&#x434;&#x438;&#x43E;&#x434;&#x43E;&#x43C;. &#x414;&#x435;&#x43B;&#x430;&#x44E; &#x44F; &#x44D;&#x442;&#x43E; &#x43D;&#x435; &#x438;&#x437;-&#x437;&#x430; &#x43B;&#x44E;&#x431;&#x432;&#x438; &#x43A; &#x438;&#x441;&#x43A;&#x443;&#x441;&#x441;&#x442;&#x432;&#x443;, &#x430; &#x447;&#x442;&#x43E;&#x431; &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C; &#x43A;&#x430;&#x441;&#x442;&#x43E;&#x43C;&#x43D;&#x44B;&#x435; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x44F; &#x432; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x438;. &#x42D;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x449;&#x435; &#x432;&#x441;&#x435;&#x433;&#x43E; &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x43D;&#x430; &#x442;&#x430;&#x439;&#x43C;&#x435;&#x440;&#x435;.</p><p>&#x414;&#x43E;&#x431;&#x430;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x43E;&#x43D; &#x442;&#x430;&#x43A; &#x436;&#x435; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;, &#x43A;&#x430;&#x43A; &#x438; &#x43F;&#x440;&#x435;&#x434;&#x44B;&#x434;&#x443;&#x449;&#x438;&#x435; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x44F;, &#x43D;&#x43E; &#x43F;&#x440;&#x438; &#x44D;&#x442;&#x43E;&#x43C; &#x43D;&#x435; &#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442; &#x438;&#x43D;&#x438;&#x446;&#x438;&#x430;&#x43B;&#x438;&#x437;&#x430;&#x446;&#x438;&#x438; GUI. &#x41F;&#x440;&#x438; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x438;&#x438; &#x442;&#x430;&#x439;&#x43C;&#x435;&#x440;&#x430; &#x43C;&#x44B; &#x443;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x435;&#x43C; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E;-callback, &#x442;&#x438;&#x43F; &#x442;&#x430;&#x439;&#x43C;&#x435;&#x440;&#x430; (&#x43F;&#x435;&#x440;&#x438;&#x43E;&#x434;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x439; &#x432; &#x43D;&#x430;&#x448;&#x435;&#x43C; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435;) &#x438; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442; callback`&#x430;.</p><pre><code class="language-c">FuriTimer* timer = furi_timer_alloc(timer_callback, FuriTimerTypePeriodic, event_queue);</code></pre><p>&#x421;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x43C; &#x434;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x435;&#x43C; &#x43C;&#x44B; &#x442;&#x430;&#x439;&#x43C;&#x435;&#x440;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x431;&#x443;&#x434;&#x435;&#x442; &#x441;&#x440;&#x430;&#x431;&#x430;&#x442;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x43A;&#x430;&#x436;&#x434;&#x44B;&#x435; 500 &#x43C;&#x438;&#x43B;&#x43B;&#x438;&#x441;&#x435;&#x43A;&#x443;&#x43D;&#x434;:</p><pre><code class="language-c">furi_timer_start(timer, 500);</code></pre><p>&#x410; &#x432; &#x43A;&#x43E;&#x43D;&#x446;&#x435;, &#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;, &#x43E;&#x447;&#x438;&#x441;&#x442;&#x438;&#x442;&#x44C; &#x43F;&#x430;&#x43C;&#x44F;&#x442;&#x44C;:</p><pre><code class="language-c">furi_timer_free(timer);</code></pre><p>&#x424;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44F;-callback &#x442;&#x43E;&#x436;&#x435; &#x432;&#x44B;&#x433;&#x43B;&#x44F;&#x434;&#x438;&#x442; &#x434;&#x43B;&#x44F; &#x43D;&#x430;&#x441; &#x443;&#x436;&#x435; &#x43F;&#x43E;&#x445;&#x43E;&#x436;&#x435;:</p><pre><code class="language-c">static void timer_callback(FuriMessageQueue* event_queue) {
    // &#x41F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x44F;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442; &#x43D;&#x435; &#x43D;&#x443;&#x43B;&#x435;&#x432;&#x43E;&#x439;
    furi_assert(event_queue);

    // &#x410; &#x447;&#x442;&#x43E; &#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x442;&#x443;&#x442;?!
}</code></pre><p>&#x418; &#x437;&#x434;&#x435;&#x441;&#x44C; &#x432;&#x43E;&#x437;&#x43D;&#x438;&#x43A;&#x430;&#x435;&#x442; &#x432;&#x43E;&#x43F;&#x440;&#x43E;&#x441;, &#x430; &#x447;&#x442;&#x43E; &#x436;&#x435; &#x43D;&#x430;&#x43C; &#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x432; &#x44D;&#x442;&#x43E;&#x43C; callback? &#x41A;&#x430;&#x436;&#x435;&#x442;&#x441;&#x44F;, &#x431;&#x44B;&#x43B;&#x43E; &#x431;&#x44B; &#x437;&#x434;&#x43E;&#x440;&#x43E;&#x432;&#x43E; &#x442;&#x430;&#x43A; &#x436;&#x435; &#x43F;&#x438;&#x445;&#x430;&#x442;&#x44C; &#x43A;&#x430;&#x43A;&#x438;&#x435;-&#x442;&#x43E; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x44F; &#x432; &#x43D;&#x430;&#x448;&#x443; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; <code>event_queue</code>, &#x447;&#x442;&#x43E;&#x431; &#x43F;&#x43E;&#x442;&#x43E;&#x43C; &#x432;&#x44B;&#x442;&#x430;&#x441;&#x43A;&#x438;&#x432;&#x430;&#x442;&#x44C; &#x438;&#x445; &#x432; &#x431;&#x435;&#x441;&#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;&#x43C; &#x446;&#x438;&#x43A;&#x43B;&#x435;. &#x41D;&#x43E; &#x432;&#x43E;&#x442; &#x43D;&#x435;&#x437;&#x430;&#x434;&#x430;&#x447;&#x430;, &#x43D;&#x430;&#x448;&#x430; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x443;&#x43C;&#x435;&#x435;&#x442; &#x445;&#x440;&#x430;&#x43D;&#x438;&#x442;&#x44C; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x44F; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43E;&#x434;&#x43D;&#x43E;&#x433;&#x43E; &#x442;&#x438;&#x43F;&#x430; &#x2014; <code>InputEvent</code>. &#x41F;&#x440;&#x438;&#x448;&#x43B;&#x430; &#x43F;&#x43E;&#x440;&#x430; &#x44D;&#x442;&#x43E; &#x438;&#x441;&#x43F;&#x440;&#x430;&#x432;&#x438;&#x442;&#x44C;.</p><h2 id="%D0%BA%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%BD%D1%8B%D0%B5-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F">&#x41A;&#x430;&#x441;&#x442;&#x43E;&#x43C;&#x43D;&#x44B;&#x435; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x44F;</h2><p>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43D;&#x430;&#x448;&#x430; &#x437;&#x430;&#x43C;&#x435;&#x447;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x430;&#x44F; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x430; &#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442; &#x441;&#x440;&#x430;&#x437;&#x443; &#x434;&#x432;&#x430; &#x442;&#x438;&#x43F;&#x430; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x439; &#x2014; &#x43D;&#x430;&#x436;&#x430;&#x442;&#x438;&#x435; &#x43D;&#x430; &#x43A;&#x43B;&#x430;&#x432;&#x438;&#x448;&#x438; &#x438; &quot;&#x442;&#x438;&#x43A;&#x430;&#x43D;&#x438;&#x435;&quot; &#x442;&#x430;&#x439;&#x43C;&#x435;&#x440;&#x430;. &#x420;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x44D;&#x442;&#x43E; &#x432; &#x438;&#x43C;&#x435;&#x44E;&#x449;&#x435;&#x43C;&#x441;&#x44F; &#x43A;&#x43E;&#x434;&#x435; &#x434;&#x43E;&#x432;&#x43E;&#x43B;&#x44C;&#x43D;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;. &#x41B;&#x43E;&#x433;&#x438;&#x43A;&#x430; &#x431;&#x443;&#x434;&#x435;&#x442; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x430;&#x44F;:</p><ul><li>&#x41F;&#x435;&#x440;&#x435;&#x447;&#x438;&#x441;&#x43B;&#x438;&#x43C; &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x44B;&#x435; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x44F; &#x432; &#x432;&#x438;&#x434;&#x435; <code>enum</code>.</li><li>&#x417;&#x430;&#x432;&#x435;&#x434;&#x435;&#x43C; &#x43A;&#x430;&#x441;&#x442;&#x43E;&#x43C;&#x43D;&#x443;&#x44E; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x443;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x431;&#x443;&#x434;&#x435;&#x442; &#x441;&#x43E;&#x434;&#x435;&#x440;&#x436;&#x430;&#x442;&#x44C; &#x442;&#x438;&#x43F; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x44F; &#x438; &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x44B;&#x439; payload (&#x43D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, &#x43D;&#x430;&#x436;&#x430;&#x442;&#x430;&#x44F; &#x43A;&#x43B;&#x430;&#x432;&#x438;&#x448;&#x430; &#x434;&#x43B;&#x44F; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x439; &#x43D;&#x430;&#x436;&#x430;&#x442;&#x438;&#x44F; &#x43D;&#x430; &#x43A;&#x43D;&#x43E;&#x43F;&#x43A;&#x438;).</li><li>&#x41C;&#x43E;&#x434;&#x438;&#x444;&#x438;&#x446;&#x438;&#x440;&#x443;&#x435;&#x43C; &#x43D;&#x430;&#x448;&#x443; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x43F;&#x43E;&#x434; &#x43F;&#x440;&#x438;&#x435;&#x43C; &#x442;&#x430;&#x43A;&#x438;&#x445; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x439;.</li><li>&#x41C;&#x43E;&#x434;&#x438;&#x444;&#x438;&#x446;&#x438;&#x440;&#x443;&#x435;&#x43C; &#x432;&#x441;&#x435; &#x432;&#x44B;&#x437;&#x43E;&#x432;&#x44B; <code>furi_message_queue_put</code>, &#x447;&#x442;&#x43E;&#x431; &#x443;&#x43F;&#x430;&#x43A;&#x43E;&#x432;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x44F; <code>FURI</code> &#x432; &#x43D;&#x430;&#x448;&#x438; &#x43A;&#x430;&#x441;&#x442;&#x43E;&#x43C;&#x43D;&#x44B;&#x435;.</li><li>&#x41C;&#x43E;&#x434;&#x438;&#x444;&#x438;&#x446;&#x438;&#x440;&#x443;&#x435;&#x43C; &#x43D;&#x430;&#x448; &#x446;&#x438;&#x43A;&#x43B; &#x43E;&#x431;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x438; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x439;, &#x447;&#x442;&#x43E;&#x431; &#x43E;&#x431;&#x440;&#x430;&#x431;&#x430;&#x442;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x44F; &#x440;&#x430;&#x437;&#x43D;&#x43E;&#x433;&#x43E; &#x442;&#x438;&#x43F;&#x430;.</li></ul><p>&#x41F;&#x43E; &#x44D;&#x442;&#x43E;&#x43C;&#x443; &#x43F;&#x43B;&#x430;&#x43D;&#x443; &#x438; &#x43F;&#x43E;&#x435;&#x434;&#x435;&#x43C;. &#x41D;&#x435;&#x43E;&#x431;&#x445;&#x43E;&#x434;&#x438;&#x43C;&#x44B;&#x435; &#x43D;&#x430;&#x43C; &#x434;&#x43E;&#x43F;&#x43E;&#x43B;&#x43D;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x435; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x431;&#x443;&#x434;&#x443;&#x442; &#x432;&#x44B;&#x433;&#x43B;&#x44F;&#x434;&#x435;&#x442;&#x44C; &#x442;&#x430;&#x43A;:</p><pre><code class="language-c">typedef enum {
    EventTypeTick,
    EventTypeInput,
} EventType;

typedef struct {
    EventType type;
    InputEvent input;
} HelloWorldEvent;</code></pre><p>&#x412; &#x43D;&#x430;&#x448;&#x435; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x435; &#x432; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x435; payload &#x43C;&#x44B; &#x43F;&#x440;&#x44F;&#x43C;&#x43E; &#x43F;&#x430;&#x43A;&#x443;&#x435;&#x43C; <code>InputEvent</code>. &#x41A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;, &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x438;&#x437; &#x43D;&#x435;&#x433;&#x43E; &#x434;&#x43E;&#x441;&#x442;&#x430;&#x432;&#x430;&#x442;&#x44C; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43D;&#x443;&#x436;&#x43D;&#x443;&#x44E; &#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x446;&#x438;&#x44E;, &#x43D;&#x43E; &#x442;&#x430;&#x43A; &#x43F;&#x440;&#x43E;&#x449;&#x435;, &#x442;&#x430;&#x43A; &#x447;&#x442;&#x43E; &#x441;&#x44D;&#x43A;&#x43E;&#x43D;&#x43E;&#x43C;&#x438;&#x43C; &#x434;&#x443;&#x43C;&#x430;&#x442;&#x44C;.</p><p>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43C;&#x43E;&#x434;&#x438;&#x444;&#x438;&#x446;&#x438;&#x440;&#x443;&#x435;&#x43C; &#x43D;&#x430;&#x448;&#x443; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C;:</p><pre><code class="language-c">// &#x422;&#x435;&#x43A;&#x443;&#x449;&#x435;&#x435; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x435; &#x442;&#x438;&#x43F;&#x430; &#x43A;&#x430;&#x441;&#x442;&#x43E;&#x43C;&#x43D;&#x43E;&#x433;&#x43E; &#x442;&#x438;&#x43F;&#x430; HelloWorldEvent
HelloWorldEvent event;
// &#x41E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x439; &#x43D;&#x430; 8 &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x43E;&#x432; &#x440;&#x430;&#x437;&#x43C;&#x435;&#x440;&#x430; HelloWorldEvent
FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(HelloWorldEvent));
</code></pre><p>&#x417;&#x430;&#x43F;&#x430;&#x43A;&#x443;&#x435;&#x43C; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x435; &#x432; <code>input_callback</code>:</p><pre><code class="language-c">static void input_callback(InputEvent* input_event, void* ctx) {
    // &#x41F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x44F;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442; &#x43D;&#x435; &#x43D;&#x443;&#x43B;&#x435;&#x432;&#x43E;&#x439;
    furi_assert(ctx);
    FuriMessageQueue* event_queue = ctx;

    HelloWorldEvent event = {.type = EventTypeInput, .input = *input_event};
    furi_message_queue_put(event_queue, &amp;event, FuriWaitForever);
}</code></pre><p>&#x418; &#x437;&#x430;&#x43F;&#x430;&#x43A;&#x443;&#x435;&#x43C; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x435; &#x432; &#x43D;&#x430;&#x448;&#x435;&#x43C; &#x442;&#x430;&#x439;&#x43C;&#x435;&#x440;&#x435; (<code>timer_callback</code>):</p><pre><code class="language-c">static void timer_callback(FuriMessageQueue* event_queue) {
    // &#x41F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x44F;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442; &#x43D;&#x435; &#x43D;&#x443;&#x43B;&#x435;&#x432;&#x43E;&#x439;
    furi_assert(event_queue);

    HelloWorldEvent event = {.type = EventTypeTick};
    furi_message_queue_put(event_queue, &amp;event, 0);
}</code></pre><p>&#x41E;&#x441;&#x442;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x44C;&#x43D;&#x43E; &#x43E;&#x431;&#x440;&#x430;&#x431;&#x430;&#x442;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x44F; &#x432; &#x446;&#x438;&#x43A;&#x43B;&#x435;:</p><pre><code class="language-c">// &#x411;&#x435;&#x441;&#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x44B;&#x439; &#x446;&#x438;&#x43A;&#x43B; &#x43E;&#x431;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x438; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x438; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x439;
while(1) {
    // &#x412;&#x44B;&#x431;&#x438;&#x440;&#x430;&#x435;&#x43C; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x435; &#x438;&#x437; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x438; &#x432; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x443;&#x44E; event (&#x436;&#x434;&#x435;&#x43C; &#x431;&#x435;&#x441;&#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E; &#x434;&#x43E;&#x43B;&#x433;&#x43E;, &#x435;&#x441;&#x43B;&#x438; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x43F;&#x443;&#x441;&#x442;&#x430;)
    // &#x438; &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x44F;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x443; &#x43D;&#x430;&#x441; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x43B;&#x43E;&#x441;&#x44C; &#x44D;&#x442;&#x43E; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C;
    furi_check(furi_message_queue_get(event_queue, &amp;event, FuriWaitForever) == FuriStatusOk);

    // &#x41D;&#x430;&#x448;&#x435; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x435; &#x2014; &#x44D;&#x442;&#x43E; &#x43D;&#x430;&#x436;&#x430;&#x442;&#x438;&#x435; &#x43A;&#x43D;&#x43E;&#x43F;&#x43A;&#x438;
    if (event.type == EventTypeInput) {
        // &#x415;&#x441;&#x43B;&#x438; &#x43D;&#x430;&#x436;&#x430;&#x442;&#x430; &#x43A;&#x43D;&#x43E;&#x43F;&#x43A;&#x430; &quot;&#x43D;&#x430;&#x437;&#x430;&#x434;&quot;, &#x442;&#x43E; &#x432;&#x44B;&#x445;&#x43E;&#x434;&#x438;&#x43C; &#x438;&#x437; &#x446;&#x438;&#x43A;&#x43B;&#x430;, &#x430; &#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x438; &#x438;&#x437; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F;
        if (event.input.key == InputKeyBack) {
            break;
        }
    // &#x41D;&#x430;&#x448;&#x435; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x435; &#x2014; &#x44D;&#x442;&#x43E; &#x441;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x432;&#x448;&#x438;&#x439; &#x442;&#x430;&#x439;&#x43C;&#x435;&#x440;
    } else if (event.type == EventTypeTick) {
        // &#x421;&#x434;&#x435;&#x43B;&#x430;&#x435;&#x43C; &#x447;&#x442;&#x43E;-&#x442;&#x43E; &#x43F;&#x43E; &#x442;&#x430;&#x439;&#x43C;&#x435;&#x440;&#x443;
    }
}</code></pre><p>&#x41A;&#x430;&#x43A; &#x438; &#x440;&#x430;&#x43D;&#x44C;&#x448;&#x435;, &#x43D;&#x430; &#x432;&#x441;&#x44F;&#x43A;&#x438;&#x439; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x439; &#x43F;&#x440;&#x438;&#x432;&#x435;&#x434;&#x443; &#x43F;&#x43E;&#x43B;&#x43D;&#x44B;&#x439; &#x43A;&#x43E;&#x434; &#x442;&#x435;&#x43A;&#x443;&#x449;&#x435;&#x433;&#x43E; &#x432;&#x430;&#x440;&#x438;&#x430;&#x43D;&#x442;&#x430;:</p><pre><code class="language-c">#include &lt;stdio.h&gt;
#include &lt;furi.h&gt;
#include &lt;gui/gui.h&gt;
#include &lt;input/input.h&gt;
#include &lt;notification/notification_messages.h&gt;

typedef enum {
    EventTypeTick,
    EventTypeInput,
} EventType;

typedef struct {
    EventType type;
    InputEvent input;
} HelloWorldEvent;

static void draw_callback(Canvas* canvas, void* ctx) {
    UNUSED(ctx);

    canvas_clear(canvas);
    canvas_set_font(canvas, FontPrimary);
    canvas_draw_str(canvas, 0, 10, &quot;Hello World!&quot;);
}

static void input_callback(InputEvent* input_event, void* ctx) {
    // &#x41F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x44F;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442; &#x43D;&#x435; &#x43D;&#x443;&#x43B;&#x435;&#x432;&#x43E;&#x439;
    furi_assert(ctx);
    FuriMessageQueue* event_queue = ctx;

    HelloWorldEvent event = {.type = EventTypeInput, .input = *input_event};
    furi_message_queue_put(event_queue, &amp;event, FuriWaitForever);
}

static void timer_callback(FuriMessageQueue* event_queue) {
    // &#x41F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x44F;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442; &#x43D;&#x435; &#x43D;&#x443;&#x43B;&#x435;&#x432;&#x43E;&#x439;
    furi_assert(event_queue);

    HelloWorldEvent event = {.type = EventTypeTick};
    furi_message_queue_put(event_queue, &amp;event, 0);
}

int32_t hello_world_app(void* p) {
    UNUSED(p);

    // &#x422;&#x435;&#x43A;&#x443;&#x449;&#x435;&#x435; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x435; &#x442;&#x438;&#x43F;&#x430; &#x43A;&#x430;&#x441;&#x442;&#x43E;&#x43C;&#x43D;&#x43E;&#x433;&#x43E; &#x442;&#x438;&#x43F;&#x430; HelloWorldEvent
    HelloWorldEvent event;
    // &#x41E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x439; &#x43D;&#x430; 8 &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x43E;&#x432; &#x440;&#x430;&#x437;&#x43C;&#x435;&#x440;&#x430; HelloWorldEvent
    FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(HelloWorldEvent));

    // &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x43D;&#x43E;&#x432;&#x44B;&#x439; view port
    ViewPort* view_port = view_port_alloc();
    // &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; callback &#x43E;&#x442;&#x440;&#x438;&#x441;&#x43E;&#x432;&#x43A;&#x438;, &#x431;&#x435;&#x437; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442;&#x430;
    view_port_draw_callback_set(view_port, draw_callback, NULL);
    // &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; callback &#x43D;&#x430;&#x436;&#x430;&#x442;&#x438;&#x439; &#x43D;&#x430; &#x43A;&#x43B;&#x430;&#x432;&#x438;&#x448;&#x438;, &#x432; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x435; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442;&#x430; &#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x435;&#x43C;
    // &#x43D;&#x430;&#x448;&#x443; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x441;&#x43E;&#x43E;&#x431;&#x449;&#x435;&#x43D;&#x438;&#x439;, &#x447;&#x442;&#x43E;&#x431; &#x437;&#x430;&#x43F;&#x438;&#x445;&#x438;&#x432;&#x430;&#x442;&#x44C; &#x432; &#x43D;&#x435;&#x451; &#x44D;&#x442;&#x438; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x44F;
    view_port_input_callback_set(view_port, input_callback, event_queue);

    // &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; GUI &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F;
    Gui* gui = furi_record_open(RECORD_GUI);
    // &#x41F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x430;&#x435;&#x43C; view port &#x43A; GUI &#x432; &#x43F;&#x43E;&#x43B;&#x43D;&#x43E;&#x44D;&#x43A;&#x440;&#x430;&#x43D;&#x43D;&#x43E;&#x43C; &#x440;&#x435;&#x436;&#x438;&#x43C;&#x435;
    gui_add_view_port(gui, view_port, GuiLayerFullscreen);

    // &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x43F;&#x435;&#x440;&#x438;&#x43E;&#x434;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x439; &#x442;&#x430;&#x439;&#x43C;&#x435;&#x440; &#x441; &#x43A;&#x43E;&#x43B;&#x43B;&#x431;&#x44D;&#x43A;&#x43E;&#x43C;, &#x43A;&#x443;&#x434;&#x430; &#x432; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x435;
    // &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442;&#x430; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x43D;&#x430;&#x448;&#x430; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x439;
    FuriTimer* timer = furi_timer_alloc(timer_callback, FuriTimerTypePeriodic, event_queue);
    // &#x417;&#x430;&#x43F;&#x443;&#x441;&#x43A;&#x430;&#x435;&#x43C; &#x442;&#x430;&#x439;&#x43C;&#x435;&#x440;
    furi_timer_start(timer, 500);

    // &#x411;&#x435;&#x441;&#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x44B;&#x439; &#x446;&#x438;&#x43A;&#x43B; &#x43E;&#x431;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x438; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x438; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x439;
    while(1) {
        // &#x412;&#x44B;&#x431;&#x438;&#x440;&#x430;&#x435;&#x43C; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x435; &#x438;&#x437; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x438; &#x432; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x443;&#x44E; event (&#x436;&#x434;&#x435;&#x43C; &#x431;&#x435;&#x441;&#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E; &#x434;&#x43E;&#x43B;&#x433;&#x43E;, &#x435;&#x441;&#x43B;&#x438; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x43F;&#x443;&#x441;&#x442;&#x430;)
        // &#x438; &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x44F;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x443; &#x43D;&#x430;&#x441; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x43B;&#x43E;&#x441;&#x44C; &#x44D;&#x442;&#x43E; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C;
        furi_check(furi_message_queue_get(event_queue, &amp;event, FuriWaitForever) == FuriStatusOk);

        // &#x41D;&#x430;&#x448;&#x435; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x435; &#x2014; &#x44D;&#x442;&#x43E; &#x43D;&#x430;&#x436;&#x430;&#x442;&#x438;&#x435; &#x43A;&#x43D;&#x43E;&#x43F;&#x43A;&#x438;
        if(event.type == EventTypeInput) {
            // &#x415;&#x441;&#x43B;&#x438; &#x43D;&#x430;&#x436;&#x430;&#x442;&#x430; &#x43A;&#x43D;&#x43E;&#x43F;&#x43A;&#x430; &quot;&#x43D;&#x430;&#x437;&#x430;&#x434;&quot;, &#x442;&#x43E; &#x432;&#x44B;&#x445;&#x43E;&#x434;&#x438;&#x43C; &#x438;&#x437; &#x446;&#x438;&#x43A;&#x43B;&#x430;, &#x430; &#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x438; &#x438;&#x437; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F;
            if(event.input.key == InputKeyBack) {
                break;
            }
            // &#x41D;&#x430;&#x448;&#x435; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x435; &#x2014; &#x44D;&#x442;&#x43E; &#x441;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x432;&#x448;&#x438;&#x439; &#x442;&#x430;&#x439;&#x43C;&#x435;&#x440;
        } else if(event.type == EventTypeTick) {
            // &#x421;&#x434;&#x435;&#x43B;&#x430;&#x435;&#x43C; &#x447;&#x442;&#x43E;-&#x442;&#x43E; &#x43F;&#x43E; &#x442;&#x430;&#x439;&#x43C;&#x435;&#x440;&#x443;
        }
    }

    // &#x41E;&#x447;&#x438;&#x449;&#x430;&#x435;&#x43C; &#x442;&#x430;&#x439;&#x43C;&#x435;&#x440;
    furi_timer_free(timer);

    // &#x421;&#x43F;&#x435;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x430;&#x44F; &#x43E;&#x447;&#x438;&#x441;&#x442;&#x43A;&#x430; &#x43F;&#x430;&#x43C;&#x44F;&#x442;&#x438;, &#x437;&#x430;&#x43D;&#x438;&#x43C;&#x430;&#x435;&#x43C;&#x43E;&#x439; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C;&#x44E;
    furi_message_queue_free(event_queue);

    // &#x427;&#x438;&#x441;&#x442;&#x438;&#x43C; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x43E;&#x431;&#x44A;&#x435;&#x43A;&#x442;&#x44B;, &#x441;&#x432;&#x44F;&#x437;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x441; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x444;&#x435;&#x439;&#x441;&#x43E;&#x43C;
    gui_remove_view_port(gui, view_port);
    view_port_free(view_port);
    furi_record_close(RECORD_GUI);

    return 0;
}</code></pre><p>&#x41C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x438;&#x442;&#x44C;, &#x447;&#x442;&#x43E; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x432;&#x448;&#x438;&#x439;&#x441;&#x44F; &#x43A;&#x43E;&#x434; &#x432;&#x43D;&#x43E;&#x432;&#x44C; &#x43A;&#x43E;&#x43C;&#x43F;&#x438;&#x43B;&#x438;&#x440;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x438; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442;. &#x412;&#x43E;&#x442; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43F;&#x43E; &#x442;&#x430;&#x439;&#x43C;&#x435;&#x440;&#x443; &#x43F;&#x43E;&#x43A;&#x430; &#x43D;&#x438;&#x447;&#x435;&#x433;&#x43E; &#x43D;&#x435; &#x43F;&#x440;&#x43E;&#x438;&#x441;&#x445;&#x43E;&#x434;&#x438;&#x442;. &#x418;&#x441;&#x43F;&#x440;&#x430;&#x432;&#x438;&#x43C; &#x438; &#x44D;&#x442;&#x43E;!</p><h2 id="%D0%BC%D0%B8%D0%B3%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D0%B2%D0%B5%D1%82%D0%BE%D0%B4%D0%B8%D0%BE%D0%B4%D0%BE%D0%BC">&#x41C;&#x438;&#x433;&#x430;&#x43D;&#x438;&#x435; &#x441;&#x432;&#x435;&#x442;&#x43E;&#x434;&#x438;&#x43E;&#x434;&#x43E;&#x43C;</h2><p>&#x41A;&#x430;&#x43A; &#x44F; &#x43F;&#x43E;&#x43D;&#x44F;&#x43B;, &#x43C;&#x438;&#x433;&#x430;&#x43D;&#x438;&#x435; &#x432; Flipper &#x2014; &#x44D;&#x442;&#x43E; &#x43E;&#x434;&#x438;&#x43D; &#x438;&#x437; &#x432;&#x438;&#x434;&#x43E;&#x432; &#x43D;&#x43E;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438;. &#x41F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x438;&#x435; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x43D;&#x43E;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x439; &#x43F;&#x440;&#x43E;&#x438;&#x441;&#x445;&#x43E;&#x434;&#x438;&#x442; &#x442;&#x43E;&#x436;&#x435; &#x434;&#x43E;&#x432;&#x43E;&#x43B;&#x44C;&#x43D;&#x43E; &#x43B;&#x43E;&#x433;&#x438;&#x447;&#x43D;&#x43E;:</p><ul><li>&#x418;&#x43D;&#x438;&#x446;&#x438;&#x430;&#x43B;&#x438;&#x437;&#x438;&#x440;&#x443;&#x435;&#x43C; &#x43D;&#x43E;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x442;&#x43E;&#x440;, &#x432; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x437;&#x430;&#x43F;&#x438;&#x445;&#x438;&#x432;&#x430;&#x442;&#x44C; &#x43D;&#x43E;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438;.</li><li>&#x41A;&#x43E;&#x433;&#x434;&#x430; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x448;&#x43B;&#x435;&#x43C; &#x43D;&#x43E;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438;.</li><li>&#x412; &#x43A;&#x43E;&#x43D;&#x446;&#x435; &#x43E;&#x447;&#x438;&#x449;&#x430;&#x435;&#x43C; &#x43D;&#x43E;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x442;&#x43E;&#x440;.</li></ul><p>&#x421;&#x43E;&#x431;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x43E;, &#x43A;&#x430;&#x43A; &#x437;&#x434;&#x435;&#x441;&#x44C; &#x43E;&#x43F;&#x438;&#x441;&#x430;&#x43D;&#x43E;, &#x442;&#x430;&#x43A; &#x438; &#x438;&#x434;&#x435;&#x43C;. &#x412; &#x431;&#x43B;&#x43E;&#x43A;&#x435; &#x438;&#x43D;&#x438;&#x446;&#x438;&#x430;&#x43B;&#x438;&#x437;&#x430;&#x446;&#x438;&#x438; &#x43D;&#x430;&#x448;&#x435;&#x439; &#x433;&#x43B;&#x430;&#x432;&#x43D;&#x43E;&#x439; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x43B;&#x44F;&#x435;&#x43C;:</p><pre><code class="language-c">NotificationApp* notifications = furi_record_open(RECORD_NOTIFICATION);</code></pre><p>&#x412; &#x43C;&#x435;&#x441;&#x442;&#x435;, &#x433;&#x434;&#x435; &#x43E;&#x431;&#x440;&#x430;&#x431;&#x430;&#x442;&#x44B;&#x432;&#x430;&#x435;&#x43C; &#x442;&#x430;&#x439;&#x43C;&#x435;&#x440;:</p><pre><code class="language-c">notification_message(notifications, &amp;sequence_blink_blue_100);</code></pre><p>&#x418; &#x432; &#x43A;&#x43E;&#x43D;&#x446;&#x435;:</p><pre><code class="language-c">furi_record_close(RECORD_NOTIFICATION);</code></pre><p>&#x423; &#x43D;&#x430;&#x441; &#x432;&#x43E;&#x437;&#x43D;&#x438;&#x43A;&#x43B;&#x430; &#x43C;&#x430;&#x433;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x430;&#x44F; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x430;&#x43D;&#x442;&#x430; <code>sequence_blink_blue_100</code>, &#x43E;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x44F;&#x44E;&#x449;&#x430;&#x44F; &#x43A;&#x43E;&#x434; &#x43D;&#x43E;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438;, &#x441;&#x43E;&#x43E;&#x442;&#x432;&#x435;&#x442;&#x441;&#x442;&#x432;&#x443;&#x44E;&#x449;&#x435;&#x439; &#x43C;&#x438;&#x433;&#x430;&#x43D;&#x438;&#x44E; &#x441;&#x438;&#x43D;&#x438;&#x43C; &#x441;&#x432;&#x435;&#x442;&#x43E;&#x434;&#x438;&#x43E;&#x434;&#x43E;&#x43C;. &#x41D;&#x430; &#x441;&#x430;&#x43C;&#x43E;&#x43C; &#x434;&#x435;&#x43B;&#x435; &#x43E;&#x43D;&#x430; &#x43E;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x435;&#x43D;&#x430; &#x432; &#x43F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x43D;&#x43E;&#x43C; <code>notification/notification_messages.h</code>. &#x422;&#x430;&#x43C; &#x435;&#x449;&#x435; &#x43C;&#x43D;&#x43E;&#x433;&#x43E; &#x432;&#x441;&#x44F;&#x43A;&#x43E;&#x433;&#x43E; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x43E;&#x433;&#x43E; (&#x43D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, &#x43C;&#x438;&#x433;&#x430;&#x43D;&#x438;&#x435; &#x43A;&#x440;&#x430;&#x441;&#x43D;&#x44B;&#x43C; &#x441;&#x432;&#x435;&#x442;&#x43E;&#x434;&#x438;&#x43E;&#x434;&#x43E;&#x43C;). &#x41C;&#x44B; &#x436;&#x435; &#x43E;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x438;&#x43C;&#x441;&#x44F; &#x434;&#x43B;&#x44F; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;&#x430; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43D;&#x430; &#x44D;&#x442;&#x43E;&#x43C;. &#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43A;&#x430;&#x436;&#x434;&#x43E;&#x435; &#x441;&#x440;&#x430;&#x431;&#x430;&#x442;&#x44B;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x442;&#x430;&#x439;&#x43C;&#x435;&#x440;&#x43E;&#x43C; &#x43C;&#x44B; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x43C;&#x438;&#x433;&#x430;&#x442;&#x44C; &#x441;&#x438;&#x43D;&#x438;&#x43C; &#x441;&#x432;&#x435;&#x442;&#x43E;&#x434;&#x438;&#x43E;&#x434;&#x43E;&#x43C;!</p><p>&#x41F;&#x43E;&#x43B;&#x43D;&#x44B;&#x439; &#x43A;&#x43E;&#x434;:</p><pre><code class="language-c">#include &lt;stdio.h&gt;
#include &lt;furi.h&gt;
#include &lt;gui/gui.h&gt;
#include &lt;input/input.h&gt;
#include &lt;notification/notification_messages.h&gt;

typedef enum {
    EventTypeTick,
    EventTypeInput,
} EventType;

typedef struct {
    EventType type;
    InputEvent input;
} HelloWorldEvent;

static void draw_callback(Canvas* canvas, void* ctx) {
    UNUSED(ctx);

    canvas_clear(canvas);
    canvas_set_font(canvas, FontPrimary);
    canvas_draw_str(canvas, 0, 10, &quot;Hello World!&quot;);
}

static void input_callback(InputEvent* input_event, void* ctx) {
    // &#x41F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x44F;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442; &#x43D;&#x435; &#x43D;&#x443;&#x43B;&#x435;&#x432;&#x43E;&#x439;
    furi_assert(ctx);
    FuriMessageQueue* event_queue = ctx;

    HelloWorldEvent event = {.type = EventTypeInput, .input = *input_event};
    furi_message_queue_put(event_queue, &amp;event, FuriWaitForever);
}

static void timer_callback(FuriMessageQueue* event_queue) {
    // &#x41F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x44F;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442; &#x43D;&#x435; &#x43D;&#x443;&#x43B;&#x435;&#x432;&#x43E;&#x439;
    furi_assert(event_queue);

    HelloWorldEvent event = {.type = EventTypeTick};
    furi_message_queue_put(event_queue, &amp;event, 0);
}

int32_t hello_world_app(void* p) {
    UNUSED(p);

    // &#x422;&#x435;&#x43A;&#x443;&#x449;&#x435;&#x435; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x435; &#x442;&#x438;&#x43F;&#x430; &#x43A;&#x430;&#x441;&#x442;&#x43E;&#x43C;&#x43D;&#x43E;&#x433;&#x43E; &#x442;&#x438;&#x43F;&#x430; HelloWorldEvent
    HelloWorldEvent event;
    // &#x41E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x439; &#x43D;&#x430; 8 &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x43E;&#x432; &#x440;&#x430;&#x437;&#x43C;&#x435;&#x440;&#x430; HelloWorldEvent
    FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(HelloWorldEvent));

    // &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x43D;&#x43E;&#x432;&#x44B;&#x439; view port
    ViewPort* view_port = view_port_alloc();
    // &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; callback &#x43E;&#x442;&#x440;&#x438;&#x441;&#x43E;&#x432;&#x43A;&#x438;, &#x431;&#x435;&#x437; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442;&#x430;
    view_port_draw_callback_set(view_port, draw_callback, NULL);
    // &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; callback &#x43D;&#x430;&#x436;&#x430;&#x442;&#x438;&#x439; &#x43D;&#x430; &#x43A;&#x43B;&#x430;&#x432;&#x438;&#x448;&#x438;, &#x432; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x435; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442;&#x430; &#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x435;&#x43C;
    // &#x43D;&#x430;&#x448;&#x443; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x441;&#x43E;&#x43E;&#x431;&#x449;&#x435;&#x43D;&#x438;&#x439;, &#x447;&#x442;&#x43E;&#x431; &#x437;&#x430;&#x43F;&#x438;&#x445;&#x438;&#x432;&#x430;&#x442;&#x44C; &#x432; &#x43D;&#x435;&#x451; &#x44D;&#x442;&#x438; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x44F;
    view_port_input_callback_set(view_port, input_callback, event_queue);

    // &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; GUI &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F;
    Gui* gui = furi_record_open(RECORD_GUI);
    // &#x41F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x430;&#x435;&#x43C; view port &#x43A; GUI &#x432; &#x43F;&#x43E;&#x43B;&#x43D;&#x43E;&#x44D;&#x43A;&#x440;&#x430;&#x43D;&#x43D;&#x43E;&#x43C; &#x440;&#x435;&#x436;&#x438;&#x43C;&#x435;
    gui_add_view_port(gui, view_port, GuiLayerFullscreen);

    // &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x43F;&#x435;&#x440;&#x438;&#x43E;&#x434;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x439; &#x442;&#x430;&#x439;&#x43C;&#x435;&#x440; &#x441; &#x43A;&#x43E;&#x43B;&#x43B;&#x431;&#x44D;&#x43A;&#x43E;&#x43C;, &#x43A;&#x443;&#x434;&#x430; &#x432; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x435;
    // &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442;&#x430; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x43D;&#x430;&#x448;&#x430; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x439;
    FuriTimer* timer = furi_timer_alloc(timer_callback, FuriTimerTypePeriodic, event_queue);
    // &#x417;&#x430;&#x43F;&#x443;&#x441;&#x43A;&#x430;&#x435;&#x43C; &#x442;&#x430;&#x439;&#x43C;&#x435;&#x440;
    furi_timer_start(timer, 500);

    // &#x412;&#x43A;&#x43B;&#x44E;&#x447;&#x430;&#x435;&#x43C; &#x43D;&#x43E;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438;
    NotificationApp* notifications = furi_record_open(RECORD_NOTIFICATION);

    // &#x411;&#x435;&#x441;&#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x44B;&#x439; &#x446;&#x438;&#x43A;&#x43B; &#x43E;&#x431;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x438; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x438; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x439;
    while(1) {
        // &#x412;&#x44B;&#x431;&#x438;&#x440;&#x430;&#x435;&#x43C; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x435; &#x438;&#x437; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x438; &#x432; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x443;&#x44E; event (&#x436;&#x434;&#x435;&#x43C; &#x431;&#x435;&#x441;&#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E; &#x434;&#x43E;&#x43B;&#x433;&#x43E;, &#x435;&#x441;&#x43B;&#x438; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x43F;&#x443;&#x441;&#x442;&#x430;)
        // &#x438; &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x44F;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x443; &#x43D;&#x430;&#x441; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x43B;&#x43E;&#x441;&#x44C; &#x44D;&#x442;&#x43E; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C;
        furi_check(furi_message_queue_get(event_queue, &amp;event, FuriWaitForever) == FuriStatusOk);

        // &#x41D;&#x430;&#x448;&#x435; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x435; &#x2014; &#x44D;&#x442;&#x43E; &#x43D;&#x430;&#x436;&#x430;&#x442;&#x438;&#x435; &#x43A;&#x43D;&#x43E;&#x43F;&#x43A;&#x438;
        if(event.type == EventTypeInput) {
            // &#x415;&#x441;&#x43B;&#x438; &#x43D;&#x430;&#x436;&#x430;&#x442;&#x430; &#x43A;&#x43D;&#x43E;&#x43F;&#x43A;&#x430; &quot;&#x43D;&#x430;&#x437;&#x430;&#x434;&quot;, &#x442;&#x43E; &#x432;&#x44B;&#x445;&#x43E;&#x434;&#x438;&#x43C; &#x438;&#x437; &#x446;&#x438;&#x43A;&#x43B;&#x430;, &#x430; &#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x438; &#x438;&#x437; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F;
            if(event.input.key == InputKeyBack) {
                break;
            }
            // &#x41D;&#x430;&#x448;&#x435; &#x441;&#x43E;&#x431;&#x44B;&#x442;&#x438;&#x435; &#x2014; &#x44D;&#x442;&#x43E; &#x441;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x432;&#x448;&#x438;&#x439; &#x442;&#x430;&#x439;&#x43C;&#x435;&#x440;
        } else if(event.type == EventTypeTick) {
            // &#x41E;&#x442;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x44F;&#x435;&#x43C; &#x43D;&#x43E;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x44E; &#x43C;&#x438;&#x433;&#x430;&#x43D;&#x438;&#x44F; &#x441;&#x438;&#x43D;&#x438;&#x43C; &#x441;&#x432;&#x435;&#x442;&#x43E;&#x434;&#x438;&#x43E;&#x434;&#x43E;&#x43C;
            notification_message(notifications, &amp;sequence_blink_blue_100);
        }
    }

    // &#x41E;&#x447;&#x438;&#x449;&#x430;&#x435;&#x43C; &#x442;&#x430;&#x439;&#x43C;&#x435;&#x440;
    furi_timer_free(timer);

    // &#x421;&#x43F;&#x435;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x430;&#x44F; &#x43E;&#x447;&#x438;&#x441;&#x442;&#x43A;&#x430; &#x43F;&#x430;&#x43C;&#x44F;&#x442;&#x438;, &#x437;&#x430;&#x43D;&#x438;&#x43C;&#x430;&#x435;&#x43C;&#x43E;&#x439; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C;&#x44E;
    furi_message_queue_free(event_queue);

    // &#x427;&#x438;&#x441;&#x442;&#x438;&#x43C; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x43E;&#x431;&#x44A;&#x435;&#x43A;&#x442;&#x44B;, &#x441;&#x432;&#x44F;&#x437;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x441; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x444;&#x435;&#x439;&#x441;&#x43E;&#x43C;
    gui_remove_view_port(gui, view_port);
    view_port_free(view_port);
    furi_record_close(RECORD_GUI);

    // &#x41E;&#x447;&#x438;&#x449;&#x430;&#x435;&#x43C; &#x43D;&#x43E;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438;
    furi_record_close(RECORD_NOTIFICATION);

    return 0;
}</code></pre><p>&#x41D;&#x443;, &#x438; &#x444;&#x438;&#x43D;&#x430;&#x43B;&#x44C;&#x43D;&#x430;&#x44F; &#x434;&#x435;&#x43C;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x430;&#x446;&#x438;&#x44F;!</p><figure class="kg-card kg-video-card"><div class="kg-video-container"><video src="https://yakovlev.me/content/media/2022/10/flipper_hello_world.mp4" poster="https://img.spacergif.org/v1/1280x704/0a/spacer.png" width="1280" height="704" playsinline preload="metadata" style="background: transparent url(&apos;https://yakovlev.me/content/images/2022/10/media-thumbnail-ember2507.jpg&apos;) 50% 50% / cover no-repeat;"></video><div class="kg-video-overlay"><button class="kg-video-large-play-icon"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/></svg></button></div><div class="kg-video-player-container"><div class="kg-video-player"><button class="kg-video-play-icon"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/></svg></button><button class="kg-video-pause-icon kg-video-hide"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/><rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/></svg></button><span class="kg-video-current-time">0:00</span><div class="kg-video-time">/<span class="kg-video-duration"></span></div><input type="range" class="kg-video-seek-slider" max="100" value="0"><button class="kg-video-playback-rate">1&#xD7;</button><button class="kg-video-unmute-icon"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/></svg></button><button class="kg-video-mute-icon kg-video-hide"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/></svg></button><input type="range" class="kg-video-volume-slider" max="100" value="100"></div></div></div></figure>]]></content:encoded></item><item><title><![CDATA[Пара слов об AlphaFold2]]></title><description><![CDATA[Несколько мыслей о событии, расколовшем мир вычислительных биологов на непримиримые лагеря.]]></description><link>https://yakovlev.me/para-slov-za-alphafold2/</link><guid isPermaLink="false">62a9a65d27b7ab000134c252</guid><category><![CDATA[biology]]></category><category><![CDATA[machine learning]]></category><category><![CDATA[comment]]></category><dc:creator><![CDATA[Pavel Yakovlev]]></dc:creator><pubDate>Thu, 03 Dec 2020 19:24:00 GMT</pubDate><media:content url="https://yakovlev.me/content/images/2020/12/alphafold.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://yakovlev.me/content/images/2020/12/alphafold.jpg" alt="&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43B;&#x43E;&#x432; &#x43E;&#x431; AlphaFold2"><p>&#x412;&#x43E; &#x432;&#x441;&#x435;&#x445; &#x43E;&#x43A;&#x43E;&#x43B;&#x43E;&#x431;&#x438;&#x43E;&#x43B;&#x43E;&#x433;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x445; &#x43A;&#x440;&#x443;&#x433;&#x430;&#x445; &#x43C;&#x438;&#x440;&#x430; &#x44D;&#x442;&#x430; &#x43D;&#x435;&#x434;&#x435;&#x43B;&#x44F; &#x43D;&#x430;&#x447;&#x430;&#x43B;&#x430;&#x441;&#x44C; &#x441; &#x43E;&#x431;&#x441;&#x443;&#x436;&#x434;&#x435;&#x43D;&#x438;&#x44F; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x43E;&#x432; <a href="https://predictioncenter.org/casp14/index.cgi?ref=yakovlev.me">CASP14</a>, &#x43D;&#x430; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x43C; &#x432;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x432;&#x435;&#x440;&#x441;&#x438;&#x44F; AlphaFold &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x43B;&#x430; &#x432;&#x44B;&#x434;&#x430;&#x44E;&#x449;&#x438;&#x435;&#x441;&#x44F; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x44B; &#x432; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x438; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440; &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432;. &#x41E;&#x434;&#x438;&#x43D; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x437;&#x430;&#x433;&#x43E;&#x43B;&#x43E;&#x432;&#x43E;&#x43A; &#x43F;&#x440;&#x435;&#x441;&#x441;-&#x440;&#x435;&#x43B;&#x438;&#x437;&#x430; DeepMind <a href="https://deepmind.com/blog/article/alphafold-a-solution-to-a-50-year-old-grand-challenge-in-biology?ref=yakovlev.me">&quot;AlphaFold: a solution to a 50-year-old grand challenge in biology&quot;</a> &#x440;&#x430;&#x441;&#x43A;&#x43E;&#x43B;&#x43E;&#x43B; &#x43E;&#x431;&#x449;&#x435;&#x441;&#x442;&#x432;&#x43E; &#x442;&#x430;&#x43A;, &#x447;&#x442;&#x43E; &#x441;&#x43F;&#x443;&#x441;&#x442;&#x44F; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x434;&#x43D;&#x435;&#x439; &#x431;&#x430;&#x442;&#x430;&#x43B;&#x438;&#x438; &#x432; &#x441;&#x43E;&#x446;&#x441;&#x435;&#x442;&#x44F;&#x445; &#x432;&#x441;&#x451; &#x435;&#x449;&#x435; &#x43F;&#x440;&#x43E;&#x434;&#x43E;&#x43B;&#x436;&#x430;&#x44E;&#x442;&#x441;&#x44F;. &#x41D;&#x430;&#x432;&#x435;&#x440;&#x43D;&#x43E;&#x435;, &#x44D;&#x442;&#x43E; &#x43F;&#x43E;&#x432;&#x43E;&#x434; &#x441;&#x444;&#x43E;&#x440;&#x43C;&#x443;&#x43B;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43C;&#x44B;&#x441;&#x43B;&#x435;&#x439; &#x43D;&#x430; &#x44D;&#x442;&#x43E;&#x442; &#x441;&#x447;&#x435;&#x442;. &#x420;&#x430;&#x437;&#x443;&#x43C;&#x435;&#x435;&#x442;&#x441;&#x44F;, &#x431;&#x435;&#x437; &#x43F;&#x440;&#x435;&#x442;&#x435;&#x43D;&#x437;&#x438;&#x438; &#x43D;&#x430; &#x43E;&#x431;&#x44A;&#x435;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x441;&#x442;&#x44C;.</p><h2 id="-">&#x427;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x438;&#x437;&#x43E;&#x448;&#x43B;&#x43E;?</h2><p>&#x420;&#x430;&#x437; &#x432; 2 &#x433;&#x43E;&#x434;&#x430; &#x43F;&#x440;&#x43E;&#x445;&#x43E;&#x434;&#x438;&#x442; &#x441;&#x43E;&#x440;&#x435;&#x432;&#x43D;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435; <strong>Critical Assessment of Techniques for Protein Structure Prediction</strong>, &#x438;&#x437;&#x432;&#x435;&#x441;&#x442;&#x43D;&#x43E;&#x435; &#x442;&#x430;&#x43A; &#x436;&#x435; &#x43A;&#x430;&#x43A; <strong>CASP</strong>. &#x412; &#x445;&#x43E;&#x434;&#x435; &#x441;&#x43E;&#x440;&#x435;&#x432;&#x43D;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x443;&#x447;&#x430;&#x441;&#x442;&#x43D;&#x438;&#x43A;&#x430;&#x43C; &#x43F;&#x440;&#x435;&#x434;&#x43B;&#x430;&#x433;&#x430;&#x44E;&#x442;&#x441;&#x44F; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432;, &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x445; &#x443;&#x436;&#x435; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x44B;, &#x43D;&#x43E; &#x435;&#x449;&#x435; &#x43D;&#x435; &#x43E;&#x43F;&#x443;&#x431;&#x43B;&#x438;&#x43A;&#x43E;&#x432;&#x430;&#x43D;&#x44B;. &#x41A;&#x43E;&#x43D;&#x43A;&#x443;&#x440;&#x441;&#x430;&#x43D;&#x442;&#x44B;, &#x438;&#x43C;&#x435;&#x44F; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43B;&#x438;&#x448;&#x44C; &#x44D;&#x442;&#x438; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x438;, &#x434;&#x43E;&#x43B;&#x436;&#x43D;&#x44B; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x44D;&#x442;&#x438;&#x445; &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432;. &#x417;&#x430;&#x434;&#x430;&#x447;&#x438; &#x43F;&#x43E; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x44E; &#x440;&#x430;&#x437;&#x434;&#x435;&#x43B;&#x435;&#x43D;&#x44B; &#x43D;&#x430; &#x43A;&#x430;&#x442;&#x435;&#x433;&#x43E;&#x440;&#x438;&#x438; &#x43F;&#x43E; &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x438; (&#x432; &#x437;&#x430;&#x432;&#x438;&#x441;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x438; &#x43E;&#x442; &#x442;&#x43E;&#x433;&#x43E;, &#x43D;&#x430;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x431;&#x435;&#x43B;&#x43E;&#x43A; &#x43D;&#x435; &#x43F;&#x43E;&#x445;&#x43E;&#x436; &#x43D;&#x430; &#x432;&#x441;&#x435; &#x443;&#x436;&#x435; &#x441;&#x443;&#x449;&#x435;&#x441;&#x442;&#x432;&#x443;&#x44E;&#x449;&#x438;&#x435;) &#x438; &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x430;&#x43C; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44F; (&#x43F;&#x43E;&#x43B;&#x43D;&#x43E;&#x441;&#x442;&#x44C;&#x44E; &#x430;&#x432;&#x442;&#x43E;&#x43C;&#x430;&#x442;&#x438;&#x437;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x438;&#x43B;&#x438; &#x441; &#x440;&#x430;&#x437;&#x43D;&#x43E;&#x439; &#x441;&#x442;&#x435;&#x43F;&#x435;&#x43D;&#x44C;&#x44E; &#x447;&#x435;&#x43B;&#x43E;&#x432;&#x435;&#x447;&#x435;&#x441;&#x43A;&#x43E;&#x433;&#x43E; &#x443;&#x447;&#x430;&#x441;&#x442;&#x438;&#x44F;).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/12/image.png" class="kg-image" alt="&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43B;&#x43E;&#x432; &#x43E;&#x431; AlphaFold2" loading="lazy" width="1966" height="1094" srcset="https://yakovlev.me/content/images/size/w600/2020/12/image.png 600w, https://yakovlev.me/content/images/size/w1000/2020/12/image.png 1000w, https://yakovlev.me/content/images/size/w1600/2020/12/image.png 1600w, https://yakovlev.me/content/images/2020/12/image.png 1966w" sizes="(min-width: 720px) 720px"><figcaption>&#x41E;&#x43F;&#x438;&#x441;&#x430;&#x43D;&#x438;&#x435; &#x43A;&#x430;&#x442;&#x435;&#x433;&#x43E;&#x440;&#x438;&#x439; &#x43D;&#x430; <a href="https://predictioncenter.org/?ref=yakovlev.me">&#x441;&#x430;&#x439;&#x442;&#x435; CASP</a></figcaption></figure><p>&#x422;&#x440;&#x430;&#x434;&#x438;&#x446;&#x438;&#x43E;&#x43D;&#x43D;&#x43E; &#x441;&#x430;&#x43C;&#x43E;&#x439; &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x43E;&#x439; &#x43A;&#x430;&#x442;&#x435;&#x433;&#x43E;&#x440;&#x438;&#x435;&#x439; &#x441;&#x447;&#x438;&#x442;&#x430;&#x435;&#x442;&#x441;&#x44F; <em>ab initio</em> modeling, &#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x435; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &quot;&#x441; &#x43D;&#x443;&#x43B;&#x44F;&quot;, &#x431;&#x435;&#x437; &#x434;&#x43E;&#x43F;&#x43E;&#x43B;&#x43D;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x446;&#x438;&#x438; &#x43E; &#x43F;&#x43E;&#x445;&#x43E;&#x436;&#x438;&#x445; &#x431;&#x435;&#x43B;&#x43A;&#x430;&#x445;. &#x414;&#x43E;&#x43B;&#x433;&#x43E;&#x435; &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x43F;&#x440;&#x43E;&#x440;&#x44B;&#x432;&#x43E;&#x432; &#x432; &#x44D;&#x442;&#x43E;&#x439; &#x43E;&#x431;&#x43B;&#x430;&#x441;&#x442;&#x438; &#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438; &#x43D;&#x435; &#x431;&#x44B;&#x43B;&#x43E;, &#x43F;&#x43E;&#x43A;&#x430; &#x432;<a href="https://predictioncenter.org/casp13/zscores_final.cgi?ref=yakovlev.me"> 2018 &#x433;&#x43E;&#x434;&#x443; &#x43D;&#x435; &#x43F;&#x43E;&#x44F;&#x432;&#x438;&#x43B;&#x430;&#x441;&#x44C; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x430; A7D</a>, &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x44B; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x439; &#x43D;&#x430; &#x434;&#x435;&#x441;&#x44F;&#x442;&#x43A;&#x438; &#x43F;&#x43E;&#x43F;&#x443;&#x433;&#x430;&#x435;&#x432; (&#x43F;&#x440;&#x43E; &#x43D;&#x438;&#x445; &#x431;&#x443;&#x434;&#x435;&#x442; &#x434;&#x430;&#x43B;&#x44C;&#x448;&#x435;) &#x43E;&#x43F;&#x435;&#x440;&#x435;&#x436;&#x430;&#x43B;&#x438; &#x432;&#x441;&#x435; &#x434;&#x440;&#x443;&#x433;&#x438;&#x435;. &#x412;&#x44B;&#x44F;&#x441;&#x43D;&#x438;&#x43B;&#x43E;&#x441;&#x44C;, &#x447;&#x442;&#x43E; &#x43F;&#x43E;&#x434; &#x44D;&#x442;&#x438;&#x43C; &#x43D;&#x430;&#x437;&#x432;&#x430;&#x43D;&#x438;&#x435;&#x43C; &#x441;&#x43A;&#x440;&#x44B;&#x432;&#x430;&#x43B;&#x441;&#x44F; &#x43D;&#x43E;&#x432;&#x44B;&#x439; &#x430;&#x43B;&#x433;&#x43E;&#x440;&#x438;&#x442;&#x43C; <a href="https://deepmind.com/blog/article/AlphaFold-Using-AI-for-scientific-discovery?ref=yakovlev.me">AlphaFold &#x43E;&#x442; &#x43A;&#x43E;&#x43C;&#x43F;&#x430;&#x43D;&#x438;&#x438; DeepMind</a>, &#x443;&#x436;&#x435; &#x43D;&#x430;&#x448;&#x443;&#x43C;&#x435;&#x432;&#x448;&#x435;&#x439; &#x43A; &#x442;&#x43E;&#x43C;&#x443; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x438; <a href="https://deepmind.com/research/case-studies/alphago-the-story-so-far?ref=yakovlev.me">&#x43F;&#x43E;&#x431;&#x435;&#x434;&#x430;&#x43C;&#x438; &#x43D;&#x430; &#x43F;&#x43E;&#x43B;&#x44F;&#x445; &#x433;&#x43E;</a>. &#x420;&#x430;&#x437;&#x443;&#x43C;&#x435;&#x435;&#x442;&#x441;&#x44F;, &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x435; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43B;&#x43E; &#x433;&#x43B;&#x443;&#x431;&#x43E;&#x43A;&#x438;&#x435; &#x43D;&#x435;&#x439;&#x440;&#x43E;&#x441;&#x435;&#x442;&#x438;, &#x447;&#x442;&#x43E; &#x432;&#x44B;&#x437;&#x432;&#x430;&#x43B;&#x43E; &#x43E;&#x433;&#x440;&#x43E;&#x43C;&#x43D;&#x44B;&#x439; &#x440;&#x435;&#x437;&#x43E;&#x43D;&#x430;&#x43D;&#x441; &#x441;&#x440;&#x435;&#x434;&#x438; &#x43F;&#x440;&#x438;&#x447;&#x430;&#x441;&#x442;&#x43D;&#x44B;&#x445; &#x43A; &#x442;&#x435;&#x43C;&#x435; &#x438;, &#x43E;&#x441;&#x43E;&#x431;&#x435;&#x43D;&#x43D;&#x43E;, &#x43E;&#x431;&#x44B;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x435;&#x439;.</p><p>&#x417;&#x430; &#x43F;&#x440;&#x43E;&#x448;&#x435;&#x434;&#x448;&#x438;&#x435; &#x434;&#x432;&#x430; &#x433;&#x43E;&#x434;&#x430; &#x430;&#x43B;&#x433;&#x43E;&#x440;&#x438;&#x442;&#x43C; &#x431;&#x44B;&#x43B; &#x43E;&#x43F;&#x443;&#x431;&#x43B;&#x438;&#x43A;&#x43E;&#x432;&#x430;&#x43D;, &#x43A;&#x43E;&#x434; &#x432;&#x44B;&#x43B;&#x43E;&#x436;&#x435;&#x43D;, &#x43D;&#x43E; &#x440;&#x435;&#x432;&#x43E;&#x43B;&#x44E;&#x446;&#x438;&#x438; &#x432; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x43D;&#x43E;&#x439; &#x431;&#x438;&#x43E;&#x43B;&#x43E;&#x433;&#x438;&#x438; &#x43D;&#x435; &#x43F;&#x440;&#x43E;&#x438;&#x437;&#x43E;&#x448;&#x43B;&#x43E;. &#x412; &#x44D;&#x442;&#x43E;&#x43C; &#x433;&#x43E;&#x434;&#x443; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442; &#x431;&#x44B;&#x43B; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x443;&#x43B;&#x443;&#x447;&#x448;&#x435;&#x43D;: &#x43E;&#x442;&#x440;&#x44B;&#x432; &#x43D;&#x43E;&#x432;&#x43E;&#x439; &#x432;&#x435;&#x440;&#x441;&#x438;&#x438; AlphaFold &#x43E;&#x442; &#x432;&#x442;&#x43E;&#x440;&#x43E;&#x433;&#x43E; &#x43C;&#x435;&#x441;&#x442;&#x430; &#x441;&#x43E;&#x441;&#x442;&#x430;&#x432;&#x438;&#x43B; &#x431;&#x43E;&#x43B;&#x435;&#x435; 2.5 &#x440;&#x430;&#x437; (&#x432; &#x442;&#x435;&#x445; &#x436;&#x435; &#x43F;&#x43E;&#x43F;&#x443;&#x433;&#x430;&#x44F;&#x445;), &#x447;&#x442;&#x43E; &#x43F;&#x43E;&#x434;&#x43D;&#x44F;&#x43B;&#x43E; &#x43D;&#x435;&#x432;&#x435;&#x440;&#x43E;&#x44F;&#x442;&#x43D;&#x443;&#x44E; &#x432;&#x43E;&#x43B;&#x43D;&#x443; &#x445;&#x430;&#x439;&#x43F;&#x430; &#x441; &#x43E;&#x434;&#x43D;&#x43E;&#x439; &#x441;&#x442;&#x43E;&#x440;&#x43E;&#x43D;&#x44B; &#x438; &#x43D;&#x435;&#x433;&#x43E;&#x434;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x441; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x439;. &#x41F;&#x440;&#x435;&#x436;&#x434;&#x435; &#x447;&#x435;&#x43C; &#x43F;&#x43E;&#x43A;&#x440;&#x438;&#x442;&#x438;&#x43A;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43C;&#x43D;&#x435;&#x43D;&#x438;&#x44F; &#x43F;&#x435;&#x441;&#x441;&#x438;&#x43C;&#x438;&#x441;&#x442;&#x43E;&#x432; &#x438; &#x43E;&#x43F;&#x442;&#x438;&#x43C;&#x438;&#x441;&#x442;&#x43E;&#x432;, &#x440;&#x430;&#x437;&#x431;&#x435;&#x440;&#x435;&#x43C;&#x441;&#x44F; &#x441; &#x43F;&#x43E;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x43A;&#x43E;&#x439; &#x437;&#x430;&#x434;&#x430;&#x447;&#x438; &#x438; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x43F;&#x440;&#x435;&#x442;&#x430;&#x446;&#x438;&#x435;&#x439; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x43E;&#x432;.</p><h2 id="--1">&#x41F;&#x440;&#x43E; &#x437;&#x430;&#x434;&#x430;&#x447;&#x443;</h2><p>&#x412; &#x43F;&#x435;&#x440;&#x432;&#x443;&#x44E; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x445;&#x43E;&#x447;&#x435;&#x442;&#x441;&#x44F; &#x43E;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x438;&#x442;&#x44C;&#x441;&#x44F; &#x441; &#x442;&#x435;&#x440;&#x43C;&#x438;&#x43D;&#x43E;&#x43B;&#x43E;&#x433;&#x438;&#x435;&#x439;. &#x412; &#x441;&#x432;&#x43E;&#x435;&#x43C; &#x43F;&#x440;&#x435;&#x441;&#x441;-&#x440;&#x435;&#x43B;&#x438;&#x437;&#x435; DeepMind &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x442; &#x432;&#x44B;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x435; <em>&quot;protein folding problem&quot;</em>. &#x424;&#x43E;&#x440;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;, &#x441;&#x432;&#x43E;&#x440;&#x430;&#x447;&#x438;&#x432;&#x430;&#x43D;&#x438;&#x435; (&#x444;&#x43E;&#x43B;&#x434;&#x438;&#x43D;&#x433;) &#x431;&#x435;&#x43B;&#x43A;&#x430; &#x2014; &#x44D;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x442;&#x44F;&#x436;&#x435;&#x43D;&#x43D;&#x44B;&#x439; &#x432;&#x43E; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x438; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441; &#x43F;&#x440;&#x435;&#x432;&#x440;&#x430;&#x449;&#x435;&#x43D;&#x438;&#x44F; &#x446;&#x435;&#x43F;&#x43E;&#x447;&#x43A;&#x438; &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442; &#x432; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x440;&#x430;&#x43D;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x443;&#x44E; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x443;, &#x43D;&#x435;&#x441;&#x443;&#x44E;&#x449;&#x443;&#x44E; &#x43A;&#x430;&#x43A;&#x443;&#x44E;-&#x43B;&#x438;&#x431;&#x43E; &#x431;&#x438;&#x43E;&#x43B;&#x43E;&#x433;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x443;&#x44E; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E;. &#x41E;&#x442; &#x434;&#x438;&#x43D;&#x430;&#x43C;&#x438;&#x43A;&#x438; &#x438; &#x43A;&#x438;&#x43D;&#x435;&#x442;&#x438;&#x43A;&#x438; (&#x43F;&#x43E;-&#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;&#x43C;&#x443;, &#x43D;&#x43E; &#x43D;&#x435; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x442;&#x43E;&#x447;&#x43D;&#x43E;, &#x442;&#x440;&#x430;&#x435;&#x43A;&#x442;&#x43E;&#x440;&#x438;&#x438; &#x438; &#x441;&#x43A;&#x43E;&#x440;&#x43E;&#x441;&#x442;&#x438;) &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441;&#x430; &#x437;&#x430;&#x432;&#x438;&#x441;&#x438;&#x442; &#x43A;&#x430;&#x43A; &#x438;&#x442;&#x43E;&#x433;&#x43E;&#x432;&#x430;&#x44F; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x430;, &#x442;&#x430;&#x43A; &#x438;, &#x43D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, &#x44D;&#x444;&#x444;&#x435;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x435;&#x451; &#x43F;&#x440;&#x43E;&#x438;&#x437;&#x432;&#x43E;&#x434;&#x441;&#x442;&#x432;&#x430;, &#x447;&#x442;&#x43E; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x44F;&#x435;&#x442; &#x43E;&#x441;&#x43E;&#x431;&#x44B;&#x439; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441; &#x434;&#x43B;&#x44F; &#x432;&#x441;&#x435;&#x445;, &#x43A;&#x442;&#x43E; &#x437;&#x430;&#x43D;&#x438;&#x43C;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x43D;&#x430;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x43E;&#x439; &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432; (&#x43D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, &#x444;&#x430;&#x440;&#x43C;&#x430;&#x446;&#x435;&#x432;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x435; &#x43A;&#x43E;&#x43C;&#x43F;&#x430;&#x43D;&#x438;&#x438;).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/12/image-13.png" class="kg-image" alt="&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43B;&#x43E;&#x432; &#x43E;&#x431; AlphaFold2" loading="lazy" width="1024" height="614" srcset="https://yakovlev.me/content/images/size/w600/2020/12/image-13.png 600w, https://yakovlev.me/content/images/size/w1000/2020/12/image-13.png 1000w, https://yakovlev.me/content/images/2020/12/image-13.png 1024w" sizes="(min-width: 720px) 720px"><figcaption>&#x417;&#x430;&#x434;&#x430;&#x447;&#x430;: &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x44C;, &#x43A;&#x430;&#x43A; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x43F;&#x440;&#x435;&#x432;&#x440;&#x430;&#x449;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x432; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x443; (<a href="https://predictioncenter.org/casp14/doc/presentations/2020_11_30_CASP14_Introduction_Moult.pdf?ref=yakovlev.me">&#x418;&#x441;&#x442;&#x43E;&#x447;&#x43D;&#x438;&#x43A;</a>)</figcaption></figure><p>&#x422;&#x43E;, &#x447;&#x435;&#x43C; &#x437;&#x430;&#x43D;&#x438;&#x43C;&#x430;&#x44E;&#x442;&#x441;&#x44F; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x44B; &#x432; &#x445;&#x43E;&#x434;&#x435; CASP, &#x43D;&#x430; &#x441;&#x430;&#x43C;&#x43E;&#x43C; &#x434;&#x435;&#x43B;&#x435; &#x438;&#x43C;&#x435;&#x435;&#x442; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x435; &#x43D;&#x430;&#x437;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x2014; <em>&quot;protein structure prediction&quot;</em>, &#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x435; &#x43F;&#x43E; &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442;&#x43D;&#x43E;&#x439; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x444;&#x438;&#x43D;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B;, &#x431;&#x435;&#x437; &#x443;&#x447;&#x435;&#x442;&#x430; &#x432;&#x441;&#x435;&#x433;&#x43E; &#x43F;&#x440;&#x43E;&#x43C;&#x435;&#x436;&#x443;&#x442;&#x43E;&#x447;&#x43D;&#x43E;&#x433;&#x43E; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441;&#x430;. &#x414;&#x43B;&#x44F; &#x43E;&#x433;&#x440;&#x43E;&#x43C;&#x43D;&#x43E;&#x433;&#x43E; &#x447;&#x438;&#x441;&#x43B;&#x430; &#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x445; &#x437;&#x430;&#x434;&#x430;&#x447; (&#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x434;&#x430;&#x436;&#x435; &#x430;&#x43A;&#x43A;&#x443;&#x440;&#x430;&#x442;&#x43D;&#x43E; &#x441;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C; &quot;&#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x438;&#x43D;&#x441;&#x442;&#x432;&#x430;&quot;) &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x431;&#x43E;&#x43B;&#x435;&#x435; &#x447;&#x435;&#x43C; &#x434;&#x43E;&#x441;&#x442;&#x430;&#x442;&#x43E;&#x447;&#x43D;&#x43E;. &#x411;&#x43E;&#x43B;&#x435;&#x435; &#x442;&#x43E;&#x433;&#x43E;, &#x43D;&#x430; &#x441;&#x435;&#x433;&#x43E;&#x434;&#x43D;&#x44F;&#x448;&#x43D;&#x435;&#x43C; &#x443;&#x440;&#x43E;&#x432;&#x43D;&#x435; &#x440;&#x430;&#x437;&#x432;&#x438;&#x442;&#x438;&#x44F; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x44D;&#x442;&#x430; &#x437;&#x430;&#x434;&#x430;&#x447;&#x430; &#x438; &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x445;&#x43E;&#x442;&#x44C; &#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E;-&#x43D;&#x438;&#x431;&#x443;&#x434;&#x44C; &#x440;&#x435;&#x448;&#x430;&#x435;&#x43C;&#x43E;&#x439; (&#x438; &#x442;&#x43E; &#x441; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x438;&#x43C;&#x438; &#x43E;&#x433;&#x43E;&#x432;&#x43E;&#x440;&#x43A;&#x430;&#x43C;&#x438;), &#x442;&#x43E;&#x433;&#x434;&#x430; &#x43A;&#x430;&#x43A; &#x43A; &#x43C;&#x43E;&#x434;&#x435;&#x43B;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44E; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441;&#x430; &#x441;&#x432;&#x43E;&#x440;&#x430;&#x447;&#x438;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x43C;&#x44B; &#x43F;&#x43E;&#x434;&#x431;&#x438;&#x440;&#x430;&#x435;&#x43C;&#x441;&#x44F; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x43C;&#x435;&#x434;&#x43B;&#x435;&#x43D;&#x43D;&#x43E;. &#x421;&#x438;&#x43C;&#x443;&#x43B;&#x44F;&#x446;&#x438;&#x438; &#x434;&#x43B;&#x44F; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x43A;&#x43E;&#x440;&#x43E;&#x442;&#x43A;&#x438;&#x445; &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432; (&#x432; &#x432;&#x438;&#x434;&#x435;&#x43E; &#x43D;&#x438;&#x436;&#x435; 39 &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442; &#x2014; &#x432; &#x434;&#x435;&#x441;&#x44F;&#x442;&#x43A;&#x438; &#x440;&#x430;&#x437; &#x43C;&#x435;&#x43D;&#x44C;&#x448;&#x435; &#x442;&#x435;&#x445; &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432;, &#x441; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x43C;&#x438; &#x43E;&#x431;&#x44B;&#x447;&#x43D;&#x43E; &#x43F;&#x440;&#x438;&#x445;&#x43E;&#x434;&#x438;&#x442;&#x441;&#x44F; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x442;&#x44C;) &#x43C;&#x43E;&#x433;&#x443;&#x442; &#x437;&#x430;&#x43D;&#x438;&#x43C;&#x430;&#x442;&#x44C; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x441;&#x443;&#x442;&#x43E;&#x43A; &#x43D;&#x430; &#x440;&#x430;&#x441;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x435;&#x43D;&#x43D;&#x44B;&#x445; GPU-&#x43A;&#x43B;&#x430;&#x441;&#x442;&#x435;&#x440;&#x430;&#x445;. &#x41E; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x438;&#x438; &#x43F;&#x440;&#x430;&#x432;&#x434;&#x43E;&#x43F;&#x43E;&#x434;&#x43E;&#x431;&#x43D;&#x44B;&#x445; &#x442;&#x440;&#x430;&#x435;&#x43A;&#x442;&#x43E;&#x440;&#x438;&#x439; &#x434;&#x43B;&#x44F; &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432;, &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x44F;&#x44E;&#x449;&#x438;&#x445; &#x440;&#x435;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441; (&#x441;&#x43E;&#x442;&#x43D;&#x438; &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442;), &#x43F;&#x43E;&#x43A;&#x430; &#x43D;&#x435; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x438;&#x434;&#x442;&#x438; &#x438; &#x440;&#x435;&#x447;&#x438;.</p><figure class="kg-card kg-embed-card kg-card-hascaption"><iframe width="612" height="344" src="https://www.youtube.com/embed/gFcp2Xpd29I?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><figcaption>&#x421;&#x438;&#x43C;&#x443;&#x43B;&#x44F;&#x446;&#x438;&#x44F; &#x444;&#x440;&#x430;&#x433;&#x43C;&#x435;&#x43D;&#x442;&#x430; &#x431;&#x435;&#x43B;&#x43A;&#x430; NTL9 (<a href="https://pubs.acs.org/doi/abs/10.1021/ja9090353?ref=yakovlev.me"><em>Voelz et al, 2010</em></a>)</figcaption></figure><p>&#x41A;&#x430;&#x43A; &#x438;&#x442;&#x43E;&#x433;, &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x438;&#x43D;&#x441;&#x442;&#x432;&#x43E; &#x43B;&#x44E;&#x434;&#x435;&#x439;, &#x43A;&#x430;&#x43A; &#x43D;&#x430;&#x445;&#x43E;&#x434;&#x44F;&#x449;&#x438;&#x435;&#x441;&#x44F; &#x432; &#x43E;&#x431;&#x43B;&#x430;&#x441;&#x442;&#x438;, &#x442;&#x430;&#x43A; &#x438; &#x432;&#x43D;&#x435; &#x435;&#x451;, &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x44E;&#x442; &#x442;&#x435;&#x440;&#x43C;&#x438;&#x43D; &quot;&#x444;&#x43E;&#x43B;&#x434;&#x438;&#x43D;&#x433;&quot; &#x43A;&#x430;&#x43A; &#x440;&#x430;&#x437; &#x434;&#x43B;&#x44F; &#x437;&#x430;&#x434;&#x430;&#x447;&#x438; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x44F; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B;. DeepMind &#x43D;&#x435;&#x43C;&#x43D;&#x43E;&#x433;&#x43E; &#x441;&#x43C;&#x435;&#x448;&#x438;&#x432;&#x430;&#x435;&#x442; &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x438;&#x44F;, &#x433;&#x43E;&#x432;&#x43E;&#x440;&#x44F; &#x43E; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x438; &quot;50-years-old grand challenge&quot; &#x432; &#x437;&#x430;&#x433;&#x43E;&#x43B;&#x43E;&#x432;&#x43A;&#x435;, &#x43D;&#x43E; &#x442;&#x443;&#x442; &#x436;&#x435; &#x43F;&#x43E;&#x44F;&#x441;&#x43D;&#x44F;&#x44E;&#x442;, &#x447;&#x442;&#x43E; &#x43E;&#x43D;&#x438; &#x438;&#x43C;&#x435;&#x44E;&#x442; &#x432;&#x432;&#x438;&#x434;&#x443; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x435; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432;. &#x422;&#x435;&#x43C; &#x43D;&#x435; &#x43C;&#x435;&#x43D;&#x435;&#x435;, &#x43F;&#x43E;&#x434;&#x43E;&#x431;&#x43D;&#x430;&#x44F; &#x43D;&#x435;&#x431;&#x440;&#x435;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x438;&#x43B;&#x430; &#x43F;&#x443;&#x440;&#x438;&#x441;&#x442;&#x430;&#x43C; &#x43D;&#x430;&#x447;&#x430;&#x442;&#x44C; &#x432;&#x43E;&#x440;&#x447;&#x430;&#x442;&#x44C;, &#x447;&#x442;&#x43E; &#x43A; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x435; &#x444;&#x43E;&#x43B;&#x434;&#x438;&#x43D;&#x433;&#x430; &#x44D;&#x442;&#x43E; &#x432;&#x441;&#x451; &#x43D;&#x435; &#x438;&#x43C;&#x435;&#x435;&#x442; &#x43D;&#x438;&#x43A;&#x430;&#x43A;&#x43E;&#x433;&#x43E; &#x43E;&#x442;&#x43D;&#x43E;&#x448;&#x435;&#x43D;&#x438;&#x44F;. &#x420;&#x430;&#x437;&#x431;&#x435;&#x440;&#x435;&#x43C; &#x44D;&#x442;&#x43E; &#x447;&#x443;&#x442;&#x44C; &#x43F;&#x43E;&#x437;&#x434;&#x43D;&#x435;&#x435;, &#x441;&#x440;&#x435;&#x434;&#x438; &#x434;&#x440;&#x443;&#x433;&#x438;&#x445; &#x43F;&#x440;&#x435;&#x442;&#x435;&#x43D;&#x437;&#x438;&#x439;.</p><figure class="kg-card kg-embed-card kg-card-hascaption"><iframe width="612" height="344" src="https://www.youtube.com/embed/KpedmJdrTpY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><figcaption>DeepMind &#x43E;&#x431;&#x44A;&#x44F;&#x441;&#x43D;&#x44F;&#x44E;&#x442;, &#x447;&#x442;&#x43E; &#x43E;&#x43D;&#x438; &#x438;&#x43C;&#x435;&#x44E;&#x442; &#x432;&#x432;&#x438;&#x434;&#x443; &#x43F;&#x43E;&#x434; &quot;protein folding&quot;</figcaption></figure><p>&#x414;&#x430;&#x436;&#x435; &#x440;&#x435;&#x434;&#x443;&#x446;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x430;&#x44F; (&#x43E;&#x442;&#x43D;&#x43E;&#x441;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x43D;&#x430;&#x441;&#x442;&#x43E;&#x44F;&#x449;&#x435;&#x433;&#x43E; &#x444;&#x43E;&#x43B;&#x434;&#x438;&#x43D;&#x433;&#x430;) &#x437;&#x430;&#x434;&#x430;&#x447;&#x430; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x44F; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x431;&#x435;&#x43B;&#x43A;&#x430; &#x432;&#x441;&#x435; &#x435;&#x449;&#x435; &#x43A;&#x440;&#x430;&#x439;&#x43D;&#x435; &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x430;, &#x43F;&#x43E;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x443; &#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442; &#x43E;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x43F;&#x43E;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F; &#x43A;&#x430;&#x436;&#x434;&#x43E;&#x433;&#x43E; &#x430;&#x442;&#x43E;&#x43C;&#x430; &#x43A;&#x430;&#x436;&#x434;&#x43E;&#x439; &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442;&#x44B;. &#x412; &#x440;&#x435;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x431;&#x435;&#x43B;&#x43A;&#x430;&#x445; &#x440;&#x435;&#x447;&#x44C; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x438;&#x434;&#x442;&#x438; &#x43E; &#x442;&#x44B;&#x441;&#x44F;&#x447;&#x430;&#x445; &#x438; &#x434;&#x435;&#x441;&#x44F;&#x442;&#x43A;&#x430;&#x445; &#x442;&#x44B;&#x441;&#x44F;&#x447; &#x442;&#x440;&#x435;&#x445;&#x43C;&#x435;&#x440;&#x43D;&#x44B;&#x445; &#x43A;&#x43E;&#x43E;&#x440;&#x434;&#x438;&#x43D;&#x430;&#x442;, &#x441;&#x442;&#x440;&#x435;&#x43C;&#x44F;&#x449;&#x438;&#x445;&#x441;&#x44F; &#x43E;&#x431;&#x435;&#x441;&#x43F;&#x435;&#x447;&#x438;&#x442;&#x44C; &#x43C;&#x438;&#x43D;&#x438;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x44D;&#x43D;&#x435;&#x440;&#x433;&#x435;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x43E;&#x433;&#x43E; &#x43F;&#x43E;&#x442;&#x435;&#x43D;&#x446;&#x438;&#x430;&#x43B;&#x430;. &#x41A;&#x430;&#x43A; &#x432;&#x44B;&#x433;&#x43B;&#x44F;&#x434;&#x438;&#x442; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44F;, &#x43F;&#x440;&#x438;&#x431;&#x43B;&#x438;&#x436;&#x430;&#x44E;&#x449;&#x430;&#x44F; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x435; &#x43F;&#x43E;&#x442;&#x435;&#x43D;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x44D;&#x43D;&#x435;&#x440;&#x433;&#x438;&#x438; &#x442;&#x430;&#x43A;&#x43E;&#x439; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x44B;, &#x43C;&#x44B; <a href="https://en.wikipedia.org/wiki/Force_field_(chemistry)?ref=yakovlev.me">&#x431;&#x43E;&#x43B;&#x435;&#x435;-&#x43C;&#x435;&#x43D;&#x435;&#x435; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x44F;&#x435;&#x43C;</a>. &#x41D;&#x43E; &#x432;&#x43E;&#x442; &#x440;&#x430;&#x437;&#x43C;&#x435;&#x440;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x437;&#x430;&#x434;&#x430;&#x447;&#x438; &#x43D;&#x430;&#x43F;&#x440;&#x43E;&#x447;&#x44C; &#x443;&#x431;&#x438;&#x432;&#x430;&#x435;&#x442; &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x44F; &#x43F;&#x43E;&#x434;&#x445;&#x43E;&#x434;&#x43E;&#x432;, &#x441;&#x432;&#x44F;&#x437;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x441; &#x433;&#x43B;&#x43E;&#x431;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x43E;&#x43F;&#x442;&#x438;&#x43C;&#x438;&#x437;&#x430;&#x446;&#x438;&#x435;&#x439;, &#x430; &#x43B;&#x43E;&#x43A;&#x430;&#x43B;&#x44C;&#x43D;&#x430;&#x44F; &#x43D;&#x435; &#x43F;&#x43E;&#x434;&#x445;&#x43E;&#x434;&#x438;&#x442; &#x438;&#x437;-&#x437;&#x430;, &#x43C;&#x44F;&#x433;&#x43A;&#x43E; &#x433;&#x43E;&#x432;&#x43E;&#x440;&#x44F;, &#x43D;&#x435;&#x432;&#x44B;&#x43F;&#x443;&#x43A;&#x43B;&#x43E;&#x441;&#x442;&#x438;, &#x43F;&#x43E;&#x442;&#x435;&#x43D;&#x446;&#x438;&#x430;&#x43B;&#x430;. &#x415;&#x441;&#x43B;&#x438; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x438;&#x435; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43F;&#x440;&#x435;&#x434;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x439; &#x43D;&#x435;&#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x43D;&#x44B;, &#x442;&#x43E; &#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x432;&#x430;&#x44F; &#x43C;&#x44B;&#x441;&#x43B;&#x44C; &#x442;&#x430;&#x43A;&#x43E;&#x432;&#x430;: &#x445;&#x43E;&#x442;&#x44C; &#x43C;&#x44B; &#x438; &#x437;&#x43D;&#x430;&#x435;&#x43C; &#x43A;&#x430;&#x43A; &#x43D;&#x430;&#x439;&#x442;&#x438; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x435; &quot;&#x432; &#x43B;&#x43E;&#x431;&quot;, &#x43D;&#x438;&#x43A;&#x430;&#x43A;&#x43E;&#x439; &#x43A;&#x43E;&#x43C;&#x43F;&#x44C;&#x44E;&#x442;&#x435;&#x440; &#x43D;&#x438; &#x437;&#x430; &#x43A;&#x430;&#x43A;&#x43E;&#x435; (&#x440;&#x430;&#x437;&#x443;&#x43C;&#x43D;&#x43E;&#x435;) &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x43D;&#x435; &#x441;&#x43C;&#x43E;&#x436;&#x435;&#x442; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C;. &#x418;&#x437;-&#x437;&#x430; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43F;&#x440;&#x438;&#x445;&#x43E;&#x434;&#x438;&#x442;&#x441;&#x44F; &#x438;&#x434;&#x442;&#x438; &#x43D;&#x430; &#x440;&#x430;&#x437;&#x43D;&#x44B;&#x435; &#x443;&#x445;&#x438;&#x449;&#x440;&#x435;&#x43D;&#x438;&#x44F;. &#x411;&#x443;&#x434;&#x435;&#x43C; &#x438;&#x445; &#x440;&#x430;&#x441;&#x441;&#x43C;&#x430;&#x442;&#x440;&#x438;&#x432;&#x430;&#x442;&#x44C; &#x43D;&#x430; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;&#x435; &#x43E;&#x434;&#x43D;&#x43E;&#x433;&#x43E; <a href="https://www.rcsb.org/structure/1FSD?ref=yakovlev.me">&#x43A;&#x43E;&#x440;&#x43E;&#x442;&#x435;&#x43D;&#x44C;&#x43A;&#x43E;&#x433;&#x43E; &#x431;&#x435;&#x43B;&#x43A;&#x430;</a> &#x438;&#x437; 28 &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/12/1fsd_full.gif" class="kg-image" alt="&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43B;&#x43E;&#x432; &#x43E;&#x431; AlphaFold2" loading="lazy" width="690" height="388" srcset="https://yakovlev.me/content/images/size/w600/2020/12/1fsd_full.gif 600w, https://yakovlev.me/content/images/2020/12/1fsd_full.gif 690w"><figcaption>&#x41F;&#x43E;&#x43B;&#x43D;&#x43E;&#x430;&#x442;&#x43E;&#x43C;&#x43D;&#x430;&#x44F; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x430; &#x43C;&#x430;&#x43B;&#x435;&#x43D;&#x44C;&#x43A;&#x43E;&#x433;&#x43E; &#x431;&#x435;&#x43B;&#x43A;&#x430; (504 &#x430;&#x442;&#x43E;&#x43C;&#x430;)</figcaption></figure><p>&#x421;&#x430;&#x43C;&#x44B;&#x43C; &#x440;&#x430;&#x441;&#x43F;&#x440;&#x43E;&#x441;&#x442;&#x440;&#x430;&#x43D;&#x435;&#x43D;&#x43D;&#x44B;&#x43C; &#x43F;&#x43E;&#x434;&#x445;&#x43E;&#x434;&#x43E;&#x43C; &#x43A; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x44E; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x435; &#x43F;&#x43E; &#x448;&#x430;&#x431;&#x43B;&#x43E;&#x43D;&#x443; (template-based), &#x43E;&#x43D; &#x436;&#x435; &#x433;&#x43E;&#x43C;&#x43E;&#x43B;&#x43E;&#x433;&#x438;&#x447;&#x43D;&#x44B;&#x439; &#x444;&#x43E;&#x43B;&#x434;&#x438;&#x43D;&#x433;. &#x412; &#x435;&#x433;&#x43E; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x435; &#x43B;&#x435;&#x436;&#x438;&#x442; &#x438;&#x434;&#x435;&#x44F; &#x43E; &#x442;&#x43E;&#x43C;, &#x447;&#x442;&#x43E; &#x43F;&#x43E;&#x445;&#x43E;&#x436;&#x438;&#x435; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442; &#x431;&#x443;&#x434;&#x443;&#x442; &#x434;&#x430;&#x432;&#x430;&#x442;&#x44C; &#x43F;&#x43E;&#x445;&#x43E;&#x436;&#x438;&#x435; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x440;&#x430;&#x43D;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x44B;&#x435; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x432; &#x431;&#x435;&#x43B;&#x43A;&#x430;&#x445;. &#x418;&#x43C;&#x435;&#x44F; &#x434;&#x43E;&#x441;&#x442;&#x430;&#x442;&#x43E;&#x447;&#x43D;&#x43E; <a href="https://www.rcsb.org/?ref=yakovlev.me">&#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x443;&#x44E; &#x431;&#x430;&#x437;&#x443; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x44B;&#x445; &#x44D;&#x43A;&#x441;&#x43F;&#x435;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;</a> &#x43C;&#x43E;&#x436;&#x43D;&#x43E;, &#x437;&#x430;&#x43C;&#x435;&#x43D;&#x44F;&#x44F; &#x440;&#x44F;&#x434; &#x444;&#x440;&#x430;&#x433;&#x43C;&#x435;&#x43D;&#x442;&#x43E;&#x432;, &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x44C; &#x434;&#x43E;&#x432;&#x43E;&#x43B;&#x44C;&#x43D;&#x43E; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x443;&#x44E; &#x43F;&#x43E;&#x43B;&#x43D;&#x43E;&#x430;&#x442;&#x43E;&#x43C;&#x43D;&#x443;&#x44E; &#x43C;&#x43E;&#x434;&#x435;&#x43B;&#x44C;. &#x414;&#x43E;&#x43F;&#x43E;&#x43B;&#x43D;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x435; &#x437;&#x43D;&#x430;&#x43D;&#x438;&#x44F; &#x43E; &#x43A;&#x43E;&#x43D;&#x43A;&#x440;&#x435;&#x442;&#x43D;&#x43E;&#x43C; &#x43A;&#x43B;&#x430;&#x441;&#x441;&#x435; &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x44E;&#x442; &#x437;&#x430;&#x43F;&#x43E;&#x43B;&#x43D;&#x44F;&#x442;&#x44C; &#x43E;&#x442;&#x43B;&#x438;&#x447;&#x430;&#x44E;&#x449;&#x438;&#x435;&#x441;&#x44F; &#x438;&#x43B;&#x438; &#x43D;&#x435;&#x438;&#x437;&#x432;&#x435;&#x441;&#x442;&#x43D;&#x44B;&#x435; &#x444;&#x440;&#x430;&#x433;&#x43C;&#x435;&#x43D;&#x442;&#x44B; &#x43E;&#x441;&#x43E;&#x431;&#x435;&#x43D;&#x43D;&#x43E; &#x445;&#x43E;&#x440;&#x43E;&#x448;&#x43E;. &#x422;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x433;&#x43E;&#x43C;&#x43E;&#x43B;&#x43E;&#x433;&#x438;&#x447;&#x43D;&#x44B;&#x439; &#x444;&#x43E;&#x43B;&#x434;&#x438;&#x43D;&#x433; &#x2014; &#x44D;&#x442;&#x43E; &#x442;&#x430;&#x43A;&#x43E;&#x435; &#x43E;&#x442;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x438;&#x434;&#x435;&#x438;, &#x447;&#x442;&#x43E; &#x435;&#x441;&#x43B;&#x438; &#x437;&#x430;&#x434;&#x430;&#x447;&#x443; &#x43D;&#x435;&#x43B;&#x44C;&#x437;&#x44F; &#x440;&#x435;&#x448;&#x438;&#x442;&#x44C; &#x434;&#x43B;&#x44F; <em>&#x432;&#x441;&#x435;&#x445;</em> &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432;, &#x442;&#x43E; &#x435;&#x451; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x440;&#x435;&#x448;&#x438;&#x442;&#x44C; &#x43F;&#x43E; &#x43A;&#x440;&#x430;&#x439;&#x43D;&#x435;&#x439; &#x43C;&#x435;&#x440;&#x435; &#x434;&#x43B;&#x44F; <em>&#x43A;&#x430;&#x436;&#x434;&#x43E;&#x433;&#x43E;</em>. &#x41D;&#x435; &#x443;&#x43D;&#x438;&#x432;&#x435;&#x440;&#x441;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;, &#x437;&#x430;&#x442;&#x43E; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442;.</p><figure class="kg-card kg-embed-card kg-card-hascaption"><iframe width="612" height="344" src="https://www.youtube.com/embed/u-kK8NM-wOY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><figcaption>&#x420;&#x430;&#x441;&#x441;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x44E; &#x43F;&#x440;&#x43E; &#x433;&#x43E;&#x43C;&#x43E;&#x43B;&#x43E;&#x433;&#x438;&#x447;&#x43D;&#x44B;&#x439; &#x444;&#x43E;&#x43B;&#x434;&#x438;&#x43D;&#x433; &#x430;&#x43D;&#x442;&#x438;&#x442;&#x435;&#x43B;</figcaption></figure><p>&#x41F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x44B;, &#x43E;&#x447;&#x435;&#x432;&#x438;&#x434;&#x43D;&#x43E;, &#x43D;&#x430;&#x447;&#x438;&#x43D;&#x430;&#x44E;&#x442;&#x441;&#x44F;, &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x431;&#x43B;&#x438;&#x437;&#x43A;&#x438;&#x445; &#x43F;&#x43E; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432; &#x432; &#x431;&#x430;&#x437;&#x435; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440; &#x43D;&#x435; &#x43D;&#x430;&#x445;&#x43E;&#x434;&#x438;&#x442;&#x441;&#x44F;, &#x447;&#x442;&#x43E;, &#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;, &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x434;&#x43E;&#x432;&#x43E;&#x43B;&#x44C;&#x43D;&#x43E; &#x447;&#x430;&#x441;&#x442;&#x43E;. &#x42D;&#x442;&#x430; &#x437;&#x430;&#x434;&#x430;&#x447;&#x430; &#x441;&#x447;&#x438;&#x442;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x441;&#x442;&#x43E;&#x43B;&#x44C; &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x43E;&#x439;, &#x447;&#x442;&#x43E; &#x435;&#x451; &#x443;&#x440;&#x435;&#x437;&#x430;&#x44E;&#x442; &#x435;&#x449;&#x435; &#x441;&#x438;&#x43B;&#x44C;&#x43D;&#x435;&#x435;. &#x41D;&#x43E; &#x43F;&#x440;&#x43E;&#x434;&#x43E;&#x43B;&#x436;&#x430;&#x44E;&#x442; &#x43D;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x442;&#x430;&#x43A; &#x436;&#x435;, &#x434;&#x430;. &#x42D;&#x442;&#x43E; &#x431;&#x438;&#x43E;&#x43B;&#x43E;&#x433;&#x438;&#x44F;.</p><p>&#x41A;&#x430;&#x43A; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x441;&#x43E;&#x43A;&#x440;&#x430;&#x442;&#x438;&#x442;&#x44C; &#x437;&#x430;&#x434;&#x430;&#x447;&#x43A;&#x443;? &#x41D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, &#x432;&#x44B;&#x43A;&#x438;&#x43D;&#x443;&#x442;&#x44C; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x443;&#x44E; &#x447;&#x430;&#x441;&#x442;&#x44C; &#x430;&#x442;&#x43E;&#x43C;&#x43E;&#x432;. &#x412; &#x43F;&#x435;&#x440;&#x432;&#x443;&#x44E; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; (&#x443;&#x436;&#x435; &#x43F;&#x43E;&#x434;&#x432;&#x43E;&#x445;!) &#x43E;&#x442;&#x43A;&#x430;&#x436;&#x435;&#x43C;&#x441;&#x44F; &#x43E;&#x442; &#x430;&#x442;&#x43E;&#x43C;&#x43E;&#x432; &#x440;&#x430;&#x434;&#x438;&#x43A;&#x430;&#x43B;&#x43E;&#x432;, &#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x43E;&#x431;&#x435;&#x437;&#x43B;&#x438;&#x447;&#x438;&#x43C; &#x43A;&#x430;&#x436;&#x434;&#x443;&#x44E; &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442;&#x443;, &#x43E;&#x441;&#x442;&#x430;&#x432;&#x438;&#x432; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x430;&#x442;&#x43E;&#x43C;&#x44B; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x43D;&#x43E;&#x433;&#x43E; &#x43A;&#x430;&#x440;&#x43A;&#x430;&#x441;&#x430;. &#x414;&#x43B;&#x44F; &#x43C;&#x43D;&#x43E;&#x433;&#x438;&#x445; &#x437;&#x430;&#x434;&#x430;&#x447; &#x442;&#x430;&#x43A;&#x430;&#x44F; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x430; &#x443;&#x436;&#x435; &#x43D;&#x435; &#x43F;&#x43E;&#x434;&#x43E;&#x439;&#x434;&#x435;&#x442;, &#x43D;&#x43E; &#x43C;&#x44B; &#x432;&#x441;&#x435; &#x435;&#x449;&#x435; &#x43E;&#x442;&#x43B;&#x438;&#x447;&#x43D;&#x43E; &#x441;&#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x43F;&#x43E;&#x43D;&#x438;&#x43C;&#x430;&#x442;&#x44C; &#x43E;&#x431;&#x449;&#x435;&#x435; &#x443;&#x441;&#x442;&#x440;&#x43E;&#x439;&#x441;&#x442;&#x432;&#x43E; &#x431;&#x435;&#x43B;&#x43A;&#x430;. &#x410; &#x437;&#x430;&#x431;&#x435;&#x433;&#x430;&#x44F; &#x432;&#x43F;&#x435;&#x440;&#x435;&#x434;, &#x441;&#x43A;&#x430;&#x436;&#x443;, &#x447;&#x442;&#x43E; &#x43C;&#x44B; &#x443;&#x43C;&#x435;&#x435;&#x43C; &#x434;&#x43E;&#x432;&#x43E;&#x43B;&#x44C;&#x43D;&#x43E; &#x43D;&#x435;&#x43F;&#x43B;&#x43E;&#x445;&#x43E; &#x432;&#x43E;&#x441;&#x441;&#x442;&#x430;&#x43D;&#x430;&#x432;&#x43B;&#x438;&#x432;&#x430;&#x442;&#x44C; &#x43F;&#x43E;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F; &#x440;&#x430;&#x434;&#x438;&#x43A;&#x430;&#x43B;&#x43E;&#x432;, &#x435;&#x441;&#x43B;&#x438; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x430; &#x43A;&#x430;&#x440;&#x43A;&#x430;&#x441;&#x430; &#x443; &#x43D;&#x430;&#x441; &#x443;&#x436;&#x435; &#x435;&#x441;&#x442;&#x44C;. &#x412;&#x43E;&#x442; &#x447;&#x442;&#x43E; &#x443; &#x43D;&#x430;&#x441; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x441;&#x44F;:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/12/1fsd_main-1.gif" class="kg-image" alt="&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43B;&#x43E;&#x432; &#x43E;&#x431; AlphaFold2" loading="lazy" width="690" height="388" srcset="https://yakovlev.me/content/images/size/w600/2020/12/1fsd_main-1.gif 600w, https://yakovlev.me/content/images/2020/12/1fsd_main-1.gif 690w"><figcaption>&#x421;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x430; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x43D;&#x43E;&#x433;&#x43E; &#x43A;&#x430;&#x440;&#x43A;&#x430;&#x441;&#x430; &#x431;&#x435;&#x437; &#x440;&#x430;&#x434;&#x438;&#x43A;&#x430;&#x43B;&#x43E;&#x432; (140 &#x430;&#x442;&#x43E;&#x43C;&#x43E;&#x432;)</figcaption></figure><p>&#x41C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x43E;&#x439;&#x442;&#x438; &#x435;&#x449;&#x435; &#x434;&#x430;&#x43B;&#x44C;&#x448;&#x435;, &#x430; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x44F;&#x442;&#x44C; &#x43A;&#x430;&#x436;&#x434;&#x443;&#x44E; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x443; &#x438; &#x432;&#x43E;&#x432;&#x441;&#x435; &#x43E;&#x434;&#x43D;&#x438;&#x43C; &#x430;&#x442;&#x43E;&#x43C;&#x43E;&#x43C; \(C_{\alpha}\) &#x2014; &#x443;&#x433;&#x43B;&#x435;&#x440;&#x43E;&#x434;&#x430;, &#x438;&#x437; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x433;&#x43E; &quot;&#x440;&#x430;&#x441;&#x442;&#x435;&#x442;&quot; &#x440;&#x430;&#x434;&#x438;&#x43A;&#x430;&#x43B; &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442;&#x44B;. &#x422;&#x430;&#x43A;&#x430;&#x44F; &#x43C;&#x43E;&#x434;&#x435;&#x43B;&#x44C; &#x431;&#x443;&#x434;&#x435;&#x442; &#x441;&#x43E;&#x432;&#x441;&#x435;&#x43C; &#x433;&#x440;&#x443;&#x431;&#x43E;&#x439;, &#x43D;&#x43E; &#x437;&#x430;&#x442;&#x43E; &#x43A;&#x43E;&#x43B;&#x438;&#x447;&#x435;&#x441;&#x442;&#x432;&#x43E; &#x430;&#x442;&#x43E;&#x43C;&#x43E;&#x432; &#x441;&#x43E;&#x43A;&#x440;&#x430;&#x442;&#x438;&#x442;&#x441;&#x44F; &#x441;&#x43E;&#x432;&#x441;&#x435;&#x43C; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x438; &#x431;&#x443;&#x434;&#x435;&#x442; &#x440;&#x430;&#x432;&#x43D;&#x43E; &#x43A;&#x43E;&#x43B;&#x438;&#x447;&#x435;&#x441;&#x442;&#x432;&#x443; &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442;. &#x418;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x442;&#x430;&#x43A;&#x443;&#x44E; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x443; &#x434;&#x43B;&#x44F; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44F; &#x43A;&#x430;&#x43A;&#x438;&#x445;-&#x43B;&#x438;&#x431;&#x43E; &#x43F;&#x440;&#x438;&#x43A;&#x43B;&#x430;&#x434;&#x43D;&#x44B;&#x445; &#x437;&#x430;&#x434;&#x430;&#x447;, &#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;, &#x431;&#x443;&#x434;&#x435;&#x442; &#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438; &#x43D;&#x435;&#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;. &#x41D;&#x43E;, &#x430;&#x432;&#x43E;&#x441;&#x44C;, &#x43F;&#x43E;&#x442;&#x43E;&#x43C; &#x434;&#x43E;&#x442;&#x44F;&#x43D;&#x435;&#x43C;. &#x418;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x44D;&#x442;&#x43E; &#x438; &#x43F;&#x440;&#x435;&#x434;&#x43B;&#x430;&#x433;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x432; &#x43A;&#x430;&#x442;&#x435;&#x433;&#x43E;&#x440;&#x438;&#x438; <em>ab initio</em> modeling &#x441;&#x43E;&#x440;&#x435;&#x432;&#x43D;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x438; CASP.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/12/1fsd_ca.gif" class="kg-image" alt="&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43B;&#x43E;&#x432; &#x43E;&#x431; AlphaFold2" loading="lazy" width="690" height="388" srcset="https://yakovlev.me/content/images/size/w600/2020/12/1fsd_ca.gif 600w, https://yakovlev.me/content/images/2020/12/1fsd_ca.gif 690w"><figcaption>&#x421;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x430;, &#x437;&#x430;&#x434;&#x430;&#x43D;&#x43D;&#x430;&#x44F; \(C_{\alpha}\) &#x430;&#x442;&#x43E;&#x43C;&#x430;&#x43C;&#x438; (28 &#x430;&#x442;&#x43E;&#x43C;&#x43E;&#x432;)</figcaption></figure><h2 id="--2">&#x41F;&#x440;&#x43E; &#x43F;&#x43E;&#x43F;&#x443;&#x433;&#x430;&#x435;&#x432;</h2><p>&#x41C;&#x44B; &#x437;&#x430;&#x43F;&#x438;&#x445;&#x43D;&#x443;&#x43B;&#x438; &#x43D;&#x430;&#x448;&#x443; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442; &#x432; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C; &#x438; &#x43D;&#x430; &#x432;&#x44B;&#x445;&#x43E;&#x434;&#x435; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x43B;&#x438; &#x43D;&#x430;&#x431;&#x43E;&#x440; &#x43A;&#x43E;&#x43E;&#x440;&#x434;&#x438;&#x43D;&#x430;&#x442; &#x434;&#x43B;&#x44F; &#x43D;&#x430;&#x448;&#x438;&#x445; \(C_{\alpha}\) &#x430;&#x442;&#x43E;&#x43C;&#x43E;&#x432;. &#x41A;&#x430;&#x43A; &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x44C;, &#x445;&#x43E;&#x440;&#x43E;&#x448;&#x438; &#x43C;&#x44B; &#x438;&#x43B;&#x438; &#x43D;&#x435;&#x442;? &#x414;&#x43B;&#x44F; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x432;&#x44B;&#x440;&#x43E;&#x432;&#x43D;&#x44F;&#x442;&#x44C; &#x43C;&#x43E;&#x43B;&#x435;&#x43A;&#x443;&#x43B;&#x44B;, &#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x440;&#x430;&#x441;&#x43F;&#x43E;&#x43B;&#x43E;&#x436;&#x438;&#x442;&#x44C; &#x438;&#x445; &#x442;&#x430;&#x43A;, &#x447;&#x442;&#x43E;&#x431; &#x441;&#x43E;&#x43E;&#x442;&#x432;&#x435;&#x442;&#x441;&#x442;&#x432;&#x443;&#x44E;&#x449;&#x438;&#x435; &#x434;&#x440;&#x443;&#x433; &#x434;&#x440;&#x443;&#x433;&#x443; &#x430;&#x442;&#x43E;&#x43C;&#x44B; &#x43E;&#x43A;&#x430;&#x437;&#x430;&#x43B;&#x438;&#x441;&#x44C; &#x43A;&#x430;&#x43A; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x431;&#x43B;&#x438;&#x436;&#x435; &#x434;&#x440;&#x443;&#x433; &#x43A; &#x434;&#x440;&#x443;&#x433;&#x443;, &#x430; &#x437;&#x430;&#x442;&#x435;&#x43C; &#x43F;&#x43E;&#x441;&#x447;&#x438;&#x442;&#x430;&#x442;&#x44C; &#x440;&#x430;&#x441;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x438;&#x44F; &#x43C;&#x435;&#x436;&#x434;&#x443; &#x441;&#x43E;&#x43E;&#x442;&#x432;&#x435;&#x442;&#x441;&#x442;&#x432;&#x443;&#x44E;&#x449;&#x438;&#x43C;&#x438; &#x43F;&#x430;&#x440;&#x430;&#x43C;&#x438; &#x430;&#x442;&#x43E;&#x43C;&#x43E;&#x432;. &#x41E;&#x434;&#x43D;&#x43E; &#x442;&#x430;&#x43A;&#x43E;&#x435; &#x440;&#x430;&#x441;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x438;&#x435; &#x43C;&#x435;&#x436;&#x434;&#x443; &#x430;&#x442;&#x43E;&#x43C;&#x430;&#x43C;&#x438; &#x434;&#x432;&#x443;&#x445; &#x43C;&#x43E;&#x434;&#x435;&#x43B;&#x435;&#x439; &#x43E;&#x434;&#x43D;&#x43E;&#x439; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x43E; &#x43D;&#x438;&#x436;&#x435;:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/12/1fsd_rmsd.gif" class="kg-image" alt="&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43B;&#x43E;&#x432; &#x43E;&#x431; AlphaFold2" loading="lazy" width="690" height="388" srcset="https://yakovlev.me/content/images/size/w600/2020/12/1fsd_rmsd.gif 600w, https://yakovlev.me/content/images/2020/12/1fsd_rmsd.gif 690w"><figcaption>&#x414;&#x432;&#x435; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x432;&#x44B;&#x440;&#x43E;&#x432;&#x43D;&#x435;&#x43D;&#x44B; &#x434;&#x440;&#x443;&#x433; &#x43D;&#x430; &#x434;&#x440;&#x443;&#x433;&#x430;, &#x440;&#x430;&#x441;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x438;&#x435; &#x43C;&#x435;&#x436;&#x434;&#x443; &#x43F;&#x430;&#x440;&#x43E;&#x439; &#x430;&#x442;&#x43E;&#x43C;&#x43E;&#x432; &#x441;&#x43E;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x44F;&#x435;&#x442; 7.3 &#xC5;</figcaption></figure><p>&#x41D;&#x430;&#x439;&#x434;&#x44F; &#x440;&#x430;&#x441;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x438;&#x44F; &#x43C;&#x435;&#x436;&#x434;&#x443; &#x43A;&#x430;&#x436;&#x434;&#x43E;&#x439; &#x43F;&#x430;&#x440;&#x43E;&#x439; &#x430;&#x442;&#x43E;&#x43C;&#x43E;&#x432; &#x43C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x43E;&#x446;&#x435;&#x43D;&#x438;&#x442;&#x44C; &#x431;&#x43B;&#x438;&#x437;&#x43E;&#x441;&#x442;&#x44C; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440; &#x434;&#x440;&#x443;&#x433; &#x43A; &#x434;&#x440;&#x443;&#x433;&#x443; &#x432;&#x441;&#x435;&#x433;&#x43E; &#x43E;&#x434;&#x43D;&#x43E;&#x439; &#x446;&#x438;&#x444;&#x440;&#x43E;&#x439; <a href="https://en.wikipedia.org/wiki/Root-mean-square_deviation_of_atomic_positions?ref=yakovlev.me">RMSD</a> &#x2014; root-mean-square deviation, &#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x441;&#x440;&#x435;&#x434;&#x43D;&#x435;&#x43A;&#x432;&#x430;&#x434;&#x440;&#x430;&#x442;&#x438;&#x447;&#x43D;&#x43E;&#x435; &#x43E;&#x442;&#x43A;&#x43B;&#x43E;&#x43D;&#x435;&#x43D;&#x438;&#x435; &#x430;&#x442;&#x43E;&#x43C;&#x43E;&#x432; &#x434;&#x440;&#x443;&#x433; &#x43E;&#x442; &#x434;&#x440;&#x443;&#x433;&#x430;. RMSD &#x43C;&#x435;&#x436;&#x434;&#x443; &#x43C;&#x43E;&#x434;&#x435;&#x43B;&#x44C;&#x44E; &#x438; &quot;&#x438;&#x441;&#x442;&#x438;&#x43D;&#x43D;&#x43E;&#x439;&quot; (&#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x43D;&#x43E;&#x439; &#x44D;&#x43A;&#x441;&#x43F;&#x435;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;) &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x43E;&#x439; &#x438; &#x435;&#x441;&#x442;&#x44C; &#x43E;&#x446;&#x435;&#x43D;&#x43A;&#x430; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x430; &#x43C;&#x43E;&#x434;&#x435;&#x43B;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F;.</p><p>\[ RMSD_{s_1, s_2} = \sqrt{\frac{1}{num\_atoms(s_1)}\sum\limits_{i \in num\_atoms(s_1)} |s^{i}_1 - s^{i}_2|^2} \]</p><p>&#x41E;&#x447;&#x435;&#x432;&#x438;&#x434;&#x43D;&#x43E;&#x439; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x43E;&#x439; RMSD &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x443;&#x441;&#x440;&#x435;&#x434;&#x43D;&#x435;&#x43D;&#x438;&#x435;. &#x422;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x44F;, &#x432; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x43C; &#x432;&#x441;&#x435; &#x430;&#x442;&#x43E;&#x43C;&#x44B; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x44B; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x44C;&#x43D;&#x43E;, &#x430; &#x43E;&#x434;&#x438;&#x43D; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x434;&#x430;&#x43B;&#x435;&#x43A;&#x43E; (&#x43A;&#x430;&#x43A; &#x43D;&#x430; &#x43A;&#x430;&#x440;&#x442;&#x438;&#x43D;&#x43A;&#x435; &#x432;&#x44B;&#x448;&#x435;), &#xA0;&#x438; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x435;, &#x432; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x43C; &#x432;&#x441;&#x435; &#x430;&#x442;&#x43E;&#x43C;&#x44B; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x44B; &#x43D;&#x435; &#x43E;&#x447;&#x435;&#x43D;&#x44C;, &#x43C;&#x43E;&#x433;&#x443;&#x442; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x44C; &#x43E;&#x434;&#x438;&#x43D;&#x430;&#x43A;&#x43E;&#x432;&#x443;&#x44E; &#x43E;&#x446;&#x435;&#x43D;&#x43A;&#x443;, &#x445;&#x43E;&#x442;&#x44F; &#x441; &#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x43E;&#x439; &#x442;&#x43E;&#x447;&#x43A;&#x438; &#x437;&#x440;&#x435;&#x43D;&#x438;&#x44F; &#x43E;&#x43D;&#x438; &#x438;&#x43C;&#x435;&#x44E;&#x442; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x440;&#x430;&#x437;&#x43D;&#x43E;&#x435; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x43E;. &#x412; &#x441;&#x432;&#x44F;&#x437;&#x438; &#x441; &#x44D;&#x442;&#x438;&#x43C; CASP &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x442; &#x43E;&#x446;&#x435;&#x43D;&#x43A;&#x443; &#x43D;&#x430; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x435; <a href="https://en.wikipedia.org/wiki/Global_distance_test?ref=yakovlev.me">Global Distance Test</a> (GDT). &#x418;&#x434;&#x435;&#x44F; GDT &#x441;&#x43E;&#x441;&#x442;&#x43E;&#x438;&#x442; &#x432; &#x43F;&#x43E;&#x434;&#x441;&#x447;&#x435;&#x442;&#x435; &#x434;&#x43E;&#x43B;&#x438; \(C_{\alpha}\) &#x430;&#x442;&#x43E;&#x43C;&#x43E;&#x432; &#x43C;&#x43E;&#x434;&#x435;&#x43B;&#x438;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x43F;&#x43E;&#x441;&#x43B;&#x435; &#x432;&#x44B;&#x440;&#x430;&#x432;&#x43D;&#x438;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x43E;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x44E;&#x442;&#x441;&#x44F; &#x43D;&#x430; &#x440;&#x430;&#x441;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x438;&#x438; &#x43D;&#x435; &#x431;&#x43E;&#x43B;&#x435;&#x435; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x439; &#x43E;&#x442;&#x441;&#x435;&#x447;&#x43A;&#x438; &#x43E;&#x442; &#x441;&#x43E;&#x43E;&#x442;&#x432;&#x435;&#x442;&#x441;&#x442;&#x432;&#x443;&#x44E;&#x449;&#x438;&#x445; &#x438;&#x43C; \(C_{\alpha}\) &#x430;&#x442;&#x43E;&#x43C;&#x43E;&#x432; &quot;&#x438;&#x441;&#x442;&#x438;&#x43D;&#x43D;&#x43E;&#x439;&quot; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B;. &#x422;&#x430;&#x43A;&#x438;&#x43C; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x43C; GDT &#x440;&#x430;&#x441;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x435;&#x43D;&#x430; &#x43E;&#x442; 0 &#x434;&#x43E; 1, &#x438; &#x43E;&#x431;&#x44B;&#x447;&#x43D;&#x43E; &#x438;&#x437;&#x43C;&#x435;&#x440;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x432; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x43D;&#x442;&#x430;&#x445;. &#x412; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435; CASP &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x44E;&#x442; &#x43E;&#x442;&#x441;&#x435;&#x447;&#x43A;&#x438; &#x432; 1, 2, 4 &#x438; 8 &#xC5;, &#x43F;&#x43E;&#x441;&#x43B;&#x435; &#x447;&#x435;&#x433;&#x43E; &#x443;&#x441;&#x440;&#x435;&#x434;&#x43D;&#x44F;&#x44E;&#x442; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x43D;&#x44B;&#x435; 4 &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44F; &#x438; &#x432;&#x44B;&#x432;&#x43E;&#x434;&#x44F;&#x442; &#x43E;&#x434;&#x43D;&#x443; &#x446;&#x438;&#x444;&#x440;&#x443;, &#x43D;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x435;&#x43C;&#x443;&#x44E; &quot;total score&quot; &#x2014; GDT_TS.</p><p>\[ GDT\_TS = \frac{1}{4}(GDT_{1&#xC5;} + GDT_{2&#xC5;} + GDT_{4&#xC5;} + GDT_{8&#xC5;}) \]</p><p>&#x41D;&#x430; &#x441;&#x430;&#x43C;&#x43E;&#x43C; &#x434;&#x435;&#x43B;&#x435;, &#x43E;&#x440;&#x433;&#x430;&#x43D;&#x438;&#x437;&#x430;&#x442;&#x43E;&#x440;&#x44B; CASP <a href="https://predictioncenter.org/casp14/zscores_final.cgi?formula=gdt_ts&amp;ref=yakovlev.me">&#x438;&#x434;&#x443;&#x442; &#x435;&#x449;&#x435; &#x434;&#x430;&#x43B;&#x44C;&#x448;&#x435;</a>, &#x43D;&#x430;&#x441;&#x438;&#x43B;&#x443;&#x44F; &#x434;&#x430;&#x436;&#x435; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x43D;&#x44B;&#x435; &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x438; GDT_TS &#x43F;&#x443;&#x442;&#x435;&#x43C; &#x43F;&#x440;&#x435;&#x432;&#x440;&#x430;&#x449;&#x435;&#x43D;&#x438;&#x44F; &#x438;&#x445; &#x432; <a href="https://en.wikipedia.org/wiki/Standard_score?ref=yakovlev.me">z-score</a> (&#x43F;&#x43E; &#x432;&#x44B;&#x431;&#x43E;&#x440;&#x43A;&#x435; &#x432;&#x441;&#x435;&#x445; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x439; &#x434;&#x430;&#x43D;&#x43D;&#x43E;&#x439; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B;), &#x432;&#x44B;&#x43A;&#x438;&#x434;&#x44B;&#x432;&#x430;&#x44F; &#x432;&#x44B;&#x431;&#x440;&#x43E;&#x441;&#x44B; &#x438; &#x43E;&#x431;&#x440;&#x435;&#x437;&#x430;&#x44F; &#x441;&#x43B;&#x438;&#x448;&#x43A;&#x43E;&#x43C; &#x43D;&#x438;&#x437;&#x43A;&#x438;&#x435; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x44F; (-2 &#x438;&#x43B;&#x438; 0). Z-score &#x43F;&#x43E; &#x432;&#x441;&#x435;&#x43C; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x43D;&#x44B;&#x43C; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x430;&#x43C; &#x434;&#x43B;&#x44F; &#x434;&#x430;&#x43D;&#x43D;&#x43E;&#x439; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x44B; &#x434;&#x430;&#x43B;&#x44C;&#x448;&#x435; &#x438; &#x441;&#x443;&#x43C;&#x43C;&#x438;&#x440;&#x443;&#x44E;&#x442;&#x441;&#x44F; &#x438; &#x443;&#x441;&#x440;&#x435;&#x434;&#x43D;&#x44F;&#x44E;&#x442;&#x441;&#x44F;. &#x412; &#x438;&#x442;&#x43E;&#x433;&#x435; &#x43C;&#x44B; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x430;&#x435;&#x43C; 4 &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44F;: &#x441;&#x443;&#x43C;&#x43C;&#x430;&#x440;&#x43D;&#x44B;&#x435; z-score &#x434;&#x43B;&#x44F; &#x43E;&#x442;&#x441;&#x435;&#x447;&#x435;&#x43A; -2/0 &#x438; &#x441;&#x440;&#x435;&#x434;&#x43D;&#x438;&#x435; z-score &#x434;&#x43B;&#x44F; &#x43E;&#x442;&#x441;&#x435;&#x447;&#x435;&#x43A; -2/0. &#x41E;&#x431;&#x44B;&#x447;&#x43D;&#x43E; &#x44D;&#x442;&#x43E; &#x434;&#x435;&#x43B;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x434;&#x43B;&#x44F; &#x442;&#x43E;&#x433;&#x43E;, &#x447;&#x442;&#x43E;&#x431; &#x443;&#x439;&#x442;&#x438; &#x43E;&#x442; &#x43D;&#x435;&#x43E;&#x431;&#x445;&#x43E;&#x434;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x438; &#x43E;&#x431;&#x44A;&#x44F;&#x432;&#x43B;&#x44F;&#x442;&#x44C; &#x43F;&#x43E;&#x431;&#x435;&#x434;&#x438;&#x442;&#x435;&#x43B;&#x44F;, &#x43E;&#x441;&#x442;&#x430;&#x432;&#x438;&#x432; &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x441;&#x440;&#x430;&#x437;&#x443; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x438;&#x43C; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x430;&#x43C; &#x441;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C;, &#x447;&#x442;&#x43E; &#x43E;&#x43D;&#x438; &#x2116;1(2,3...) &#x432; &#x441;&#x43E;&#x440;&#x435;&#x432;&#x43D;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x438; CASP &#x43F;&#x43E; &#x442;&#x430;&#x43A;&#x43E;&#x43C;&#x443;-&#x442;&#x43E; &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44E;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/12/image-1.png" class="kg-image" alt="&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43B;&#x43E;&#x432; &#x43E;&#x431; AlphaFold2" loading="lazy" width="2000" height="1037" srcset="https://yakovlev.me/content/images/size/w600/2020/12/image-1.png 600w, https://yakovlev.me/content/images/size/w1000/2020/12/image-1.png 1000w, https://yakovlev.me/content/images/size/w1600/2020/12/image-1.png 1600w, https://yakovlev.me/content/images/size/w2400/2020/12/image-1.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>&#x420;&#x430;&#x441;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x43F;&#x43E;&#x43F;&#x443;&#x433;&#x430;&#x435;&#x432; &#x43C;&#x435;&#x436;&#x434;&#x443; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x430;&#x43C;&#x438; &#x432; <a href="https://predictioncenter.org/casp14/zscores_final.cgi?ref=yakovlev.me">CASP14</a></figcaption></figure><p>&#x412; &#x44D;&#x442;&#x43E;&#x442; &#x440;&#x430;&#x437; &#x43F;&#x43E; &#x432;&#x441;&#x435;&#x43C; &#x447;&#x435;&#x442;&#x44B;&#x440;&#x435;&#x43C; &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44F;&#x43C; &#x431;&#x435;&#x437;&#x43E;&#x433;&#x43E;&#x432;&#x43E;&#x440;&#x43E;&#x447;&#x43D;&#x43E; &#x432;&#x44B;&#x438;&#x433;&#x440;&#x430;&#x43B; AlphaFold2.</p><p>&#x412; &#x441;&#x432;&#x43E;&#x435;&#x43C; &#x43F;&#x440;&#x435;&#x441;&#x441;-&#x440;&#x435;&#x43B;&#x438;&#x437;&#x435; DeepMind &#x442;&#x430;&#x43A;&#x436;&#x435; &#x43F;&#x440;&#x438;&#x432;&#x43E;&#x434;&#x438;&#x442; &#x43C;&#x435;&#x434;&#x438;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x44F; GDT_TS &#x434;&#x43B;&#x44F; &#x432;&#x441;&#x435;&#x445; &#x43C;&#x438;&#x448;&#x435;&#x43D;&#x435;&#x439; &#x2014; 92.4, &#x430; &#x442;&#x430;&#x43A;&#x436;&#x435; &#x434;&#x43B;&#x44F; &#x43E;&#x441;&#x43E;&#x431;&#x43E; &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x44B;&#x445; &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432; &#x2014; 87.0. &#x41F;&#x435;&#x440;&#x432;&#x44B;&#x439; &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;, &#x43F;&#x43E; &#x438;&#x445; &#x43F;&#x440;&#x438;&#x43A;&#x438;&#x434;&#x43A;&#x430;&#x43C;, &#x441;&#x43E;&#x43E;&#x442;&#x432;&#x435;&#x442;&#x441;&#x442;&#x432;&#x443;&#x435;&#x442; RMSD &#x432; 1.6 &#xC5;, &#x447;&#x442;&#x43E;, &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;, &#x441;&#x43E;&#x43F;&#x43E;&#x441;&#x442;&#x430;&#x432;&#x438;&#x43C;&#x43E; &#x441; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x43E;&#x43C; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;, &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x430;&#x435;&#x43C;&#x44B;&#x445; &#x432; &#x445;&#x43E;&#x434;&#x435; <a href="https://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BD%D1%82%D0%B3%D0%B5%D0%BD%D0%BE%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%BD%D1%8B%D0%B9_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7?ref=yakovlev.me">&#x440;&#x435;&#x43D;&#x442;&#x433;&#x435;&#x43D;&#x43E;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x43D;&#x43E;&#x433;&#x43E; &#x430;&#x43D;&#x430;&#x43B;&#x438;&#x437;&#x430;</a>. &#xA0;&#x41E;&#x434;&#x43D;&#x430;&#x43A;&#x43E; &#x44D;&#x442;&#x43E; &#x437;&#x430;&#x44F;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435;, &#x43A;&#x430;&#x43A; &#x438; &#x43C;&#x43D;&#x43E;&#x433;&#x438;&#x435; &#x434;&#x440;&#x443;&#x433;&#x438;&#x435;, &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x441;&#x43F;&#x435;&#x43A;&#x443;&#x43B;&#x44F;&#x442;&#x438;&#x432;&#x43D;&#x43E;.</p><h2 id="--3">&#x41A;&#x430;&#x43A; &#x44D;&#x442;&#x430; &#x448;&#x442;&#x443;&#x43A;&#x430; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442;?</h2><p>&#x41C;&#x44B; &#x434;&#x43E;&#x441;&#x442;&#x43E;&#x432;&#x435;&#x440;&#x43D;&#x43E; &#x43D;&#x435; &#x437;&#x43D;&#x430;&#x435;&#x43C;, &#x43A;&#x430;&#x43A; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442; AlphaFold2, &#x43D;&#x43E; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x43F;&#x440;&#x435;&#x434;&#x43F;&#x43E;&#x43B;&#x430;&#x433;&#x430;&#x442;&#x44C; &#x43D;&#x430; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x435; &#x43F;&#x440;&#x435;&#x441;&#x441;-&#x440;&#x435;&#x43B;&#x438;&#x437;&#x430;, <a href="https://www.nature.com/articles/s41586-019-1923-7.epdf?author_access_token=Z_KaZKDqtKzbE7Wd5HtwI9RgN0jAjWel9jnR3ZoTv0MCcgAwHMgRx9mvLjNQdB2TlQQaa7l420UCtGo8vYQ39gg8lFWR9mAZtvsN_1PrccXfIbc6e-tGSgazNL_XdtQzn1PHfy21qdcxV7Pw-k3htw%3D%3D&amp;ref=yakovlev.me">&#x43E;&#x43F;&#x443;&#x431;&#x43B;&#x438;&#x43A;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x43E;&#x439; &#x441;&#x442;&#x430;&#x442;&#x44C;&#x438;</a> &#x438; <a href="https://github.com/deepmind/deepmind-research/tree/master/alphafold_casp13?ref=yakovlev.me">&#x43A;&#x43E;&#x434;&#x430;</a> &#x43F;&#x435;&#x440;&#x432;&#x43E;&#x439; &#x432;&#x435;&#x440;&#x441;&#x438;&#x438; &#x430;&#x43B;&#x433;&#x43E;&#x440;&#x438;&#x442;&#x43C;&#x430;. &#x41D;&#x430; &#x434;&#x430;&#x43D;&#x43D;&#x43E;&#x43C; &#x44D;&#x442;&#x430;&#x43F;&#x435; &#x44D;&#x442;&#x43E;, &#x43D;&#x430;&#x432;&#x435;&#x440;&#x43D;&#x43E;&#x435;, &#x434;&#x430;&#x436;&#x435; &#x445;&#x43E;&#x440;&#x43E;&#x448;&#x43E;, &#x43F;&#x43E;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x443; &#x43D;&#x435; &#x43F;&#x440;&#x438;&#x445;&#x43E;&#x434;&#x438;&#x442;&#x441;&#x44F; &#x442;&#x435;&#x440;&#x437;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x441;&#x43E;&#x43C;&#x43D;&#x435;&#x43D;&#x438;&#x44F;&#x43C;&#x438; &#x43E; &#x442;&#x43E;&#x43C;, &#x43D;&#x430;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43F;&#x43E;&#x434;&#x440;&#x43E;&#x431;&#x43D;&#x43E; &#x440;&#x430;&#x441;&#x441;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x43F;&#x440;&#x43E; &#x435;&#x433;&#x43E; &#x443;&#x441;&#x442;&#x440;&#x43E;&#x439;&#x441;&#x442;&#x432;&#x43E;.</p><p>&#x412;&#x43C;&#x435;&#x441;&#x442;&#x43E; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43F;&#x43E;&#x441;&#x43C;&#x43E;&#x442;&#x440;&#x438;&#x43C; &#x43D;&#x430; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x43D;&#x44B;&#x435; &#x438;&#x434;&#x435;&#x438;, &#x431;&#x43B;&#x430;&#x433;&#x43E;&#x434;&#x430;&#x440;&#x44F; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x43C; &#x432;&#x441;&#x44F; &#x437;&#x430;&#x442;&#x435;&#x44F; &#x432;&#x44B;&#x441;&#x442;&#x440;&#x435;&#x43B;&#x438;&#x43B;&#x430;. &#x41F;&#x43E; &#x43C;&#x43E;&#x435;&#x43C;&#x443; &#x43C;&#x43D;&#x435;&#x43D;&#x438;&#x44E;, &#x43E;&#x43D;&#x430; &#x432;&#x43E;&#x432;&#x441;&#x435; &#x43D;&#x435; &#x432; &#x445;&#x438;&#x442;&#x440;&#x44B;&#x445; &#x430;&#x440;&#x445;&#x438;&#x442;&#x435;&#x43A;&#x442;&#x443;&#x440;&#x430;&#x445; &#x43D;&#x435;&#x439;&#x440;&#x43E;&#x441;&#x435;&#x442;&#x435;&#x439;. &#x41E;&#x43D;&#x438;, &#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;, &#x431;&#x443;&#x434;&#x443;&#x442; &#x432;&#x441;&#x451; &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x435;&#x435;, &#x447;&#x442;&#x43E; &#x43F;&#x43E;&#x43C;&#x43E;&#x436;&#x435;&#x442; &#x432;&#x44B;&#x436;&#x438;&#x43C;&#x430;&#x442;&#x44C; &#x432;&#x441;&#x451; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435; &#x438; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435; &#x43F;&#x43E;&#x43F;&#x443;&#x433;&#x430;&#x435;&#x432; &#x432; &#x441;&#x43E;&#x440;&#x435;&#x432;&#x43D;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F;&#x445;. &#x41D;&#x43E; &#x432;&#x441;&#x451; &#x436;&#x435; &#x433;&#x43B;&#x430;&#x432;&#x43D;&#x44B;&#x43C; &#x437;&#x430;&#x43B;&#x43E;&#x433;&#x43E;&#x43C; &#x443;&#x441;&#x43F;&#x435;&#x445;&#x430; &#x441;&#x442;&#x430;&#x43B;&#x43E; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x435; <a href="https://en.wikipedia.org/wiki/Convolutional_neural_network?ref=yakovlev.me">&#x441;&#x432;&#x435;&#x440;&#x442;&#x43E;&#x447;&#x43D;&#x44B;&#x445; &#x43D;&#x435;&#x439;&#x440;&#x43E;&#x441;&#x435;&#x442;&#x435;&#x439;</a> &#x432; &#x441;&#x43E;&#x432;&#x43E;&#x43A;&#x443;&#x43F;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x441; &#x43F;&#x43E;&#x43B;&#x435;&#x437;&#x43D;&#x44B;&#x43C; &#x43D;&#x430;&#x431;&#x43B;&#x44E;&#x434;&#x435;&#x43D;&#x438;&#x435;&#x43C; (&#x441;&#x434;&#x435;&#x43B;&#x430;&#x43D;&#x43D;&#x44B;&#x43C; &#x43D;&#x435; DeepMind), &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x435; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x438;&#x43B;&#x43E; &#x433;&#x440;&#x430;&#x43C;&#x43E;&#x442;&#x43D;&#x43E; &#x433;&#x43E;&#x442;&#x43E;&#x432;&#x438;&#x442;&#x44C; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x438; &#x432;&#x44B;&#x431;&#x440;&#x430;&#x442;&#x44C; &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x442; &#x432;&#x44B;&#x445;&#x43E;&#x434;&#x430; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44F;. &#x421; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x435;&#x433;&#x43E; &#x438; &#x43D;&#x430;&#x447;&#x43D;&#x435;&#x43C;, &#x43D;&#x43E; &#x43F;&#x440;&#x435;&#x436;&#x434;&#x435; &#x43D;&#x430; &#x432;&#x441;&#x44F;&#x43A;&#x438;&#x439; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x439; &#x435;&#x449;&#x435; &#x440;&#x430;&#x437; &#x43F;&#x43E;&#x432;&#x442;&#x43E;&#x440;&#x44E;&#x441;&#x44C;: &#x43C;&#x44B; &#x440;&#x430;&#x441;&#x441;&#x43C;&#x43E;&#x442;&#x440;&#x438;&#x43C; &#x43F;&#x430;&#x440;&#x443; &#x43E;&#x431;&#x449;&#x438;&#x445; &#x438;&#x434;&#x435;&#x439;. &#x41D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x432;&#x435;&#x449;&#x438;, &#x441;&#x43F;&#x435;&#x446;&#x438;&#x444;&#x438;&#x447;&#x43D;&#x44B;&#x435; &#x434;&#x43B;&#x44F; AlphaFold, &#x44F; &#x443;&#x43C;&#x44B;&#x448;&#x43B;&#x435;&#x43D;&#x43D;&#x43E; &#x43E;&#x43F;&#x443;&#x441;&#x43A;&#x430;&#x44E;.</p><p><strong>AlphaFold &#x43D;&#x435; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x435;&#x442; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x443; &#x431;&#x435;&#x43B;&#x43A;&#x430;.</strong></p><p>&#x414;&#x430;&#x432;&#x430;&#x439;&#x442;&#x435; &#x43D;&#x430; &#x441;&#x435;&#x43A;&#x443;&#x43D;&#x434;&#x443; &#x43E;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x438;&#x43C;&#x441;&#x44F; &#x438; &#x437;&#x430;&#x434;&#x443;&#x43C;&#x430;&#x435;&#x43C;&#x441;&#x44F; &#x43D;&#x430;&#x434; &#x442;&#x435;&#x43C;, &#x430; &#x43A;&#x430;&#x43A; &#x432;&#x43E;&#x43E;&#x431;&#x449;&#x435; &#x43C;&#x430;&#x442;&#x435;&#x43C;&#x430;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x432;&#x44B;&#x440;&#x430;&#x437;&#x438;&#x442;&#x44C; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x443; &#x431;&#x435;&#x43B;&#x43A;&#x430;. &#x414;&#x43E; &#x442;&#x43E;&#x433;&#x43E; &#x43C;&#x44B; &#x43F;&#x43E;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x43D;&#x43E; &#x43D;&#x435;&#x44F;&#x432;&#x43D;&#x43E; &#x43F;&#x43E;&#x434;&#x440;&#x430;&#x437;&#x443;&#x43C;&#x435;&#x432;&#x430;&#x43B;&#x438;, &#x447;&#x442;&#x43E; &#x44D;&#x442;&#x43E; &#x43A;&#x43E;&#x43E;&#x440;&#x434;&#x438;&#x43D;&#x430;&#x442;&#x44B; &#x430;&#x442;&#x43E;&#x43C;&#x43E;&#x432; (&#x432;&#x441;&#x435;&#x445;, &#x43A;&#x430;&#x440;&#x43A;&#x430;&#x441;&#x43D;&#x44B;&#x445;, \(C_{\alpha}\) &#x438;&#x43B;&#x438; &#x43A;&#x430;&#x43A;&#x438;&#x445;-&#x442;&#x43E; &#x435;&#x449;&#x451;), &#x43D;&#x43E; &#x43D;&#x430; &#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x43A;&#x435; &#x44D;&#x442;&#x43E; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x43D;&#x435;&#x443;&#x434;&#x430;&#x447;&#x43D;&#x43E;&#x435; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435;, &#x43F;&#x43E;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x443; &#x43E;&#x43D;&#x43E; &#x43D;&#x435; &#x435;&#x434;&#x438;&#x43D;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x43E;&#x435;. &#x41C;&#x44B; &#x43E;&#x431;&#x44B;&#x447;&#x43D;&#x43E; &#x441;&#x447;&#x438;&#x442;&#x430;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x435; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442; &#x43A;&#x430;&#x43A; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x434;&#x435;&#x442;&#x435;&#x440;&#x43C;&#x438;&#x43D;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x430;&#x44F; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44F;: &#x43F;&#x440;&#x438;&#x43D;&#x438;&#x43C;&#x430;&#x435;&#x442; &#x43D;&#x430; &#x432;&#x445;&#x43E;&#x434; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x438; &#x432;&#x441;&#x435;&#x433;&#x434;&#x430; &#x432;&#x43E;&#x437;&#x432;&#x440;&#x430;&#x449;&#x430;&#x435;&#x442; &#x43E;&#x434;&#x438;&#x43D; &#x435;&#x434;&#x438;&#x43D;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x44B;&#x439; &#x43E;&#x442;&#x432;&#x435;&#x442;. &#x41D;&#x43E; &#x43A;&#x430;&#x43A;&#x43E;&#x439; &#x438;&#x437; &#x431;&#x435;&#x441;&#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;&#x433;&#x43E; &#x43D;&#x430;&#x431;&#x43E;&#x440;&#x430; &#x43A;&#x43E;&#x43E;&#x440;&#x434;&#x438;&#x43D;&#x430;&#x442; &quot;&#x43A;&#x430;&#x43D;&#x43E;&#x43D;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x439;&quot;?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/12/image-2.png" class="kg-image" alt="&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43B;&#x43E;&#x432; &#x43E;&#x431; AlphaFold2" loading="lazy" width="1412" height="628" srcset="https://yakovlev.me/content/images/size/w600/2020/12/image-2.png 600w, https://yakovlev.me/content/images/size/w1000/2020/12/image-2.png 1000w, https://yakovlev.me/content/images/2020/12/image-2.png 1412w" sizes="(min-width: 720px) 720px"><figcaption>&#x414;&#x432;&#x435; &#x43E;&#x434;&#x438;&#x43D;&#x430;&#x43A;&#x43E;&#x432;&#x44B;&#x435; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; (RMSD = 0&#xC5;) &#x438;&#x43C;&#x435;&#x44E;&#x442; &#x441;&#x43E;&#x432;&#x435;&#x440;&#x448;&#x435;&#x43D;&#x43D;&#x43E; &#x440;&#x430;&#x437;&#x43D;&#x44B;&#x435; &#x43A;&#x43E;&#x43E;&#x440;&#x434;&#x438;&#x43D;&#x430;&#x442;&#x44B;</figcaption></figure><p>&#x414;&#x43E;&#x43F;&#x43E;&#x43B;&#x43D;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x441;&#x43E;&#x432;&#x435;&#x440;&#x448;&#x435;&#x43D;&#x43D;&#x43E; &#x43D;&#x435;&#x44F;&#x441;&#x43D;&#x43E;, &#x43A;&#x430;&#x43A; &#x43D;&#x430; &#x44D;&#x442;&#x43E;&#x43C; &#x442;&#x440;&#x435;&#x43D;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43C;&#x43E;&#x434;&#x435;&#x43B;&#x438; &#x43C;&#x430;&#x448;&#x438;&#x43D;&#x43D;&#x43E;&#x433;&#x43E; &#x43E;&#x431;&#x443;&#x447;&#x435;&#x43D;&#x438;&#x44F;. &#x412;&#x435;&#x434;&#x44C; &#x43E;&#x43D;&#x438; &#x434;&#x43E;&#x43B;&#x436;&#x43D;&#x44B; &#x438;&#x441;&#x43A;&#x430;&#x442;&#x44C; &#x437;&#x430;&#x43A;&#x43E;&#x43D;&#x43E;&#x43C;&#x435;&#x440;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x432; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445;, &#x430; &#x435;&#x441;&#x43B;&#x438; &#x432;&#x441;&#x435; &#x431;&#x435;&#x43B;&#x43A;&#x438; &#x431;&#x443;&#x434;&#x443;&#x442; &#x43F;&#x43E;-&#x440;&#x430;&#x437;&#x43D;&#x43E;&#x43C;&#x443; &#x43F;&#x43E;&#x432;&#x435;&#x440;&#x43D;&#x443;&#x442;&#x44B; &#x438; &#x43F;&#x435;&#x440;&#x435;&#x43D;&#x435;&#x441;&#x435;&#x43D;&#x44B; &#x432; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x440;&#x430;&#x43D;&#x441;&#x442;&#x432;&#x435;, &#x442;&#x43E; &#x43D;&#x430;&#x445;&#x43E;&#x434;&#x438;&#x442;&#x44C; &#x447;&#x442;&#x43E;-&#x43B;&#x438;&#x431;&#x43E; &#x432; &#x441;&#x43E;&#x432;&#x435;&#x440;&#x448;&#x435;&#x43D;&#x43D;&#x43E; &#x43D;&#x438;&#x447;&#x435;&#x433;&#x43E; &#x43D;&#x435; &#x437;&#x43D;&#x430;&#x447;&#x430;&#x449;&#x438;&#x445; &#x43A;&#x43E;&#x43E;&#x440;&#x434;&#x438;&#x43D;&#x430;&#x442;&#x430;&#x445; &#x437;&#x430;&#x43D;&#x44F;&#x442;&#x438;&#x435; &#x437;&#x430;&#x432;&#x435;&#x434;&#x43E;&#x43C;&#x43E; &#x431;&#x435;&#x441;&#x43F;&#x435;&#x440;&#x441;&#x43F;&#x435;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x435;.</p><p>&#x41F;&#x43E;&#x43D;&#x44F;&#x43B;&#x438; &#x44D;&#x442;&#x43E;, &#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;, &#x43D;&#x435; DeepMind, &#x442;&#x430;&#x43A; &#x447;&#x442;&#x43E; &#x43F;&#x43E;&#x438;&#x441;&#x43A;&#x43E;&#x43C; <em>&#x438;&#x43D;&#x432;&#x430;&#x440;&#x438;&#x430;&#x43D;&#x442;&#x430;</em>, &#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x43A;&#x430;&#x43A;&#x43E;&#x433;&#x43E;-&#x442;&#x43E; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B;, &#x43D;&#x435; &#x437;&#x430;&#x432;&#x438;&#x441;&#x44F;&#x449;&#x435;&#x433;&#x43E; &#x43E;&#x442; &#x435;&#x451; &#x43F;&#x43E;&#x432;&#x43E;&#x440;&#x43E;&#x442;&#x43E;&#x432; &#x438; &#x43F;&#x435;&#x440;&#x435;&#x43D;&#x43E;&#x441;&#x43E;&#x432; &#x432; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x440;&#x430;&#x43D;&#x441;&#x442;&#x432;&#x435;, &#x437;&#x430;&#x43D;&#x44F;&#x43B;&#x438;&#x441;&#x44C; &#x434;&#x43E;&#x432;&#x43E;&#x43B;&#x44C;&#x43D;&#x43E;-&#x442;&#x430;&#x43A;&#x438; &#x434;&#x430;&#x432;&#x43D;&#x43E;. &#x41A;&#x43B;&#x430;&#x441;&#x441;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x43C; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x435;&#x43C; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x438;&#x445; &#x434;&#x435;&#x441;&#x44F;&#x442;&#x438;&#x43B;&#x435;&#x442;&#x438;&#x439; &#x431;&#x44B;&#x43B; &#x43F;&#x43E;&#x434;&#x445;&#x43E;&#x434;, &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x44B;&#x439; &#x43D;&#x430; &#x443;&#x433;&#x43B;&#x430;&#x445;.</p><p>&#x41F;&#x440;&#x43E;&#x432;&#x435;&#x434;&#x435;&#x43C; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;&#x439; &#x44D;&#x43A;&#x441;&#x43F;&#x435;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x442; &#x43D;&#x430; &#x432;&#x441;&#x451; &#x442;&#x43E;&#x439; &#x436;&#x435; &#x43C;&#x430;&#x43B;&#x435;&#x43D;&#x44C;&#x43A;&#x43E;&#x439; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x435;, &#x441; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x439; &#x43C;&#x44B; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x43C; &#x432;&#x441;&#x44E; &#x434;&#x43E;&#x440;&#x43E;&#x433;&#x443;. &#x418;&#x437;&#x43C;&#x435;&#x440;&#x438;&#x43C; &#x440;&#x430;&#x441;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x438;&#x44F; &#x43C;&#x435;&#x436;&#x434;&#x443; &#x432;&#x441;&#x435;&#x43C;&#x438; &#x435;&#x433;&#x43E; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x438;&#x434;&#x443;&#x449;&#x438;&#x43C;&#x438; \(C_{\alpha}\) &#x430;&#x442;&#x43E;&#x43C;&#x430;&#x43C;&#x438;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/12/1fsd_dits.gif" class="kg-image" alt="&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43B;&#x43E;&#x432; &#x43E;&#x431; AlphaFold2" loading="lazy" width="690" height="388" srcset="https://yakovlev.me/content/images/size/w600/2020/12/1fsd_dits.gif 600w, https://yakovlev.me/content/images/2020/12/1fsd_dits.gif 690w"><figcaption>Magic! &#x412;&#x441;&#x435; &#x440;&#x430;&#x441;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x438;&#x44F; &#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438; &#x440;&#x430;&#x432;&#x43D;&#x44B;!</figcaption></figure><p>&#x412;&#x43D;&#x435;&#x437;&#x430;&#x43F;&#x43D;&#x43E; &#x43E;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F;, &#x447;&#x442;&#x43E; &#x44D;&#x442;&#x438; &#x440;&#x430;&#x441;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x438;&#x44F; &#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438; &#x440;&#x430;&#x432;&#x43D;&#x44B;. &#x411;&#x43E;&#x43B;&#x435;&#x435; &#x442;&#x43E;&#x433;&#x43E;, &#x434;&#x430;&#x436;&#x435; &#x435;&#x441;&#x43B;&#x438; &#x43C;&#x44B; &#x432;&#x43E;&#x437;&#x44C;&#x43C;&#x435;&#x43C; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x439; &#x431;&#x435;&#x43B;&#x43E;&#x43A; &#x438; &#x43F;&#x43E;&#x441;&#x43C;&#x43E;&#x442;&#x440;&#x438;&#x43C; &#x440;&#x430;&#x441;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x438;&#x44F; &#x432; &#x43D;&#x435;&#x43C;, &#x43C;&#x44B; &#x443;&#x432;&#x438;&#x434;&#x438;&#x43C; &#x440;&#x43E;&#x432;&#x43D;&#x43E; &#x442;&#x435; &#x436;&#x435; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x44F;. &#x42F; &#x43D;&#x435; &#x43F;&#x43E;&#x43B;&#x435;&#x43D;&#x438;&#x43B;&#x441;&#x44F; &#x438; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x43B; &#x44D;&#x442;&#x43E; &#x434;&#x43B;&#x44F; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x438;&#x445; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x438;&#x434;&#x443;&#x449;&#x438;&#x445; \(C_{\alpha}\) &#x430;&#x442;&#x43E;&#x43C;&#x43E;&#x432; <a href="https://www.rcsb.org/structure/2HBB?ref=yakovlev.me">&#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x431;&#x435;&#x43B;&#x43A;&#x430; NTL9</a> &#x438;&#x437; &#x432;&#x438;&#x434;&#x435;&#x43E; &#x432; &#x43D;&#x430;&#x447;&#x430;&#x43B;&#x435; &#x437;&#x430;&#x43C;&#x435;&#x442;&#x43A;&#x438;:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/12/2hbb_dist-1.png" class="kg-image" alt="&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43B;&#x43E;&#x432; &#x43E;&#x431; AlphaFold2" loading="lazy" width="1024" height="768" srcset="https://yakovlev.me/content/images/size/w600/2020/12/2hbb_dist-1.png 600w, https://yakovlev.me/content/images/size/w1000/2020/12/2hbb_dist-1.png 1000w, https://yakovlev.me/content/images/2020/12/2hbb_dist-1.png 1024w" sizes="(min-width: 720px) 720px"><figcaption>&#x421;&#x43E;&#x432;&#x441;&#x435;&#x43C; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x439; &#x431;&#x435;&#x43B;&#x43E;&#x43A;, &#x430; &#x440;&#x430;&#x441;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x438;&#x44F; &#x43C;&#x435;&#x436;&#x434;&#x443; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x438;&#x434;&#x443;&#x449;&#x438;&#x43C;&#x438; \(C_{\alpha}\) &#x442;&#x435; &#x436;&#x435;</figcaption></figure><p>&#x427;&#x442;&#x43E; &#x436;, &#x44D;&#x442;&#x43E; &#x432;&#x435;&#x441;&#x44C;&#x43C;&#x430; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x435; &#x43D;&#x430;&#x431;&#x43B;&#x44E;&#x434;&#x435;&#x43D;&#x438;&#x435; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x435;&#x442; &#x43D;&#x430;&#x43C; &#x43F;&#x440;&#x435;&#x434;&#x43F;&#x43E;&#x43B;&#x43E;&#x436;&#x438;&#x442;&#x44C;, &#x447;&#x442;&#x43E; &#x43C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x434;&#x43E;&#x441;&#x442;&#x440;&#x430;&#x438;&#x432;&#x430;&#x442;&#x44C; &#x43D;&#x430;&#x448;&#x443; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x443; &#x438;&#x437; \(C_{\alpha}\) &#x430;&#x442;&#x43E;&#x43C;&#x43E;&#x432; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43F;&#x43E; &#x43D;&#x430;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x44F;&#x43C; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x435;&#x433;&#x43E; &#x430;&#x442;&#x43E;&#x43C;&#x430; &#x43E;&#x442;&#x43D;&#x43E;&#x441;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x43F;&#x440;&#x435;&#x434;&#x44B;&#x434;&#x443;&#x449;&#x435;&#x433;&#x43E;, &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x44F; &#x43F;&#x440;&#x438; &#x44D;&#x442;&#x43E;&#x43C; &#x43F;&#x43E;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x43D;&#x44B;&#x435; &#x440;&#x430;&#x441;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x438;&#x44F;.</p><p>&#x415;&#x441;&#x43B;&#x438; &#x431;&#x44B; &#x43C;&#x44B; &#x436;&#x438;&#x43B;&#x438; &#x432; &#x43A;&#x43E;&#x43E;&#x440;&#x434;&#x438;&#x43D;&#x430;&#x442;&#x43D;&#x43E;&#x43C; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x440;&#x430;&#x43D;&#x441;&#x442;&#x432;&#x435;, &#x442;&#x43E; &#x442;&#x430;&#x43A;&#x43E;&#x435; &#x43D;&#x430;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x437;&#x430;&#x434;&#x430;&#x432;&#x430;&#x43B; &#x431;&#x44B; &#x43A;&#x430;&#x43A;&#x43E;&#x439;-&#x43D;&#x438;&#x431;&#x443;&#x434;&#x44C; &#x435;&#x434;&#x438;&#x43D;&#x438;&#x447;&#x43D;&#x44B;&#x439; &#x432;&#x435;&#x43A;&#x442;&#x43E;&#x440;. &#x41D;&#x43E; &#x43C;&#x44B; &#x43F;&#x43E;&#x43C;&#x43D;&#x438;&#x43C;, &#x447;&#x442;&#x43E; &#x43A;&#x43E;&#x43E;&#x440;&#x434;&#x438;&#x43D;&#x430;&#x442;&#x43D;&#x43E;&#x435; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x440;&#x430;&#x43D;&#x441;&#x442;&#x432;&#x43E; &#x43D;&#x430;&#x43C; &#x43D;&#x435; &#x43D;&#x440;&#x430;&#x432;&#x438;&#x442;&#x441;&#x44F; &#x442;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x43E;&#x43D;&#x43E; &#x430;&#x431;&#x441;&#x43E;&#x43B;&#x44E;&#x442;&#x43D;&#x43E;, &#x430; &#x43D;&#x430;&#x448;&#x438; &#x431;&#x435;&#x43B;&#x43A;&#x438; &#x43C;&#x43E;&#x433;&#x443;&#x442; &#x434;&#x432;&#x438;&#x433;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x432; &#x44D;&#x442;&#x43E;&#x43C; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x440;&#x430;&#x43D;&#x441;&#x442;&#x432;&#x435; &#x43A;&#x430;&#x43A; &#x443;&#x433;&#x43E;&#x434;&#x43D;&#x43E;. &#x411;&#x44B;&#x43B;&#x43E; &#x431;&#x44B; &#x437;&#x434;&#x43E;&#x440;&#x43E;&#x432;&#x43E; &#x443;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x44D;&#x442;&#x43E; &#x43D;&#x430;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x442;&#x43E;&#x436;&#x435; &#x43A;&#x430;&#x43A;-&#x442;&#x43E; &#x43E;&#x442;&#x43D;&#x43E;&#x441;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;, &#x431;&#x435;&#x437; &#x43F;&#x440;&#x438;&#x432;&#x44F;&#x437;&#x43A;&#x438; &#x43A; &#x433;&#x43B;&#x43E;&#x431;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x43C;&#x443; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x440;&#x430;&#x43D;&#x441;&#x442;&#x432;&#x443;. &#x414;&#x43B;&#x44F; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43D;&#x430;&#x43C; &#x438; &#x43F;&#x43E;&#x442;&#x440;&#x435;&#x431;&#x443;&#x44E;&#x442;&#x441;&#x44F; &#x443;&#x433;&#x43B;&#x44B;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/12/image-4.png" class="kg-image" alt="&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43B;&#x43E;&#x432; &#x43E;&#x431; AlphaFold2" loading="lazy" width="392" height="338"><figcaption>&#x428;&#x438;&#x440;&#x43E;&#x442;&#x430; &#x438; &#x434;&#x43E;&#x43B;&#x433;&#x43E;&#x442;&#x430; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x435;&#x442; &#x43D;&#x430;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x44F;&#x442;&#x44C; &#x435;&#x434;&#x438;&#x43D;&#x438;&#x447;&#x43D;&#x44B;&#x439; &#x432;&#x435;&#x43A;&#x442;&#x43E;&#x440; &#x432; &#x43B;&#x44E;&#x431;&#x443;&#x44E; &#x441;&#x442;&#x43E;&#x440;&#x43E;&#x43D;&#x443; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x440;&#x430;&#x43D;&#x441;&#x442;&#x432;&#x430;</figcaption></figure><p>&#x41A;&#x430;&#x440;&#x442;&#x438;&#x43D;&#x43A;&#x430; &#x432;&#x44B;&#x448;&#x435; &#x434;&#x43E;&#x43B;&#x436;&#x43D;&#x430; &#x443;&#x431;&#x435;&#x434;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C;, &#x447;&#x442;&#x43E; &#x43D;&#x430;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x432;&#x435;&#x43A;&#x442;&#x43E;&#x440;&#x430; &#x432; &#x442;&#x440;&#x435;&#x445;&#x43C;&#x435;&#x440;&#x43D;&#x43E;&#x43C; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x440;&#x430;&#x43D;&#x441;&#x442;&#x432;&#x435; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x431;&#x44B;&#x442;&#x44C; &#x43B;&#x435;&#x433;&#x43A;&#x43E; &#x437;&#x430;&#x434;&#x430;&#x43D;&#x43E; &#x434;&#x432;&#x443;&#x43C;&#x44F; &#x443;&#x433;&#x43B;&#x430;&#x43C;&#x438; (&#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x441;&#x447;&#x438;&#x442;&#x430;&#x442;&#x44C; &#x438;&#x445; <em>&#x448;&#x438;&#x440;&#x43E;&#x442;&#x43E;&#x439;</em> &#x438; <em>&#x434;&#x43E;&#x43B;&#x433;&#x43E;&#x442;&#x43E;&#x439;</em>, &#x43A;&#x430;&#x43A; &#x43D;&#x430; &#x433;&#x43B;&#x43E;&#x431;&#x443;&#x441;&#x435;). &#x41E;&#x434;&#x43D;&#x430;&#x43A;&#x43E; &#x447;&#x442;&#x43E;&#x431; &#x437;&#x430;&#x434;&#x430;&#x442;&#x44C; &#x44D;&#x442;&#x438; &#x443;&#x433;&#x43B;&#x44B; &#x43D;&#x430;&#x43C; &#x43D;&#x443;&#x436;&#x43D;&#x430; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x43F;&#x43B;&#x43E;&#x441;&#x43A;&#x43E;&#x441;&#x442;&#x44C;, &#x43E;&#x442;&#x43D;&#x43E;&#x441;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x439; &#x43E;&#x43D;&#x438; &#x431;&#x443;&#x434;&#x443;&#x442; &#x437;&#x430;&#x434;&#x430;&#x43D;&#x44B; &#x438; &#x442;&#x43E;&#x447;&#x43A;&#x430; &#x43D;&#x430; &#x43F;&#x43B;&#x43E;&#x441;&#x43A;&#x43E;&#x441;&#x442;&#x438;, &#x43E;&#x442;&#x43D;&#x43E;&#x441;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x439; &#x43C;&#x44B; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x437;&#x430;&#x434;&#x430;&#x432;&#x430;&#x442;&#x44C; &#x43D;&#x430;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435;.</p><p>&#x421; &#x442;&#x43E;&#x447;&#x43A;&#x43E;&#x439; &#x432;&#x441;&#x451; &#x44F;&#x441;&#x43D;&#x43E; &#x2014; &#x44D;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; &#x43F;&#x440;&#x435;&#x434;&#x44B;&#x434;&#x443;&#x449;&#x438;&#x439; &#x430;&#x442;&#x43E;&#x43C;. &#x41F;&#x43B;&#x43E;&#x441;&#x43A;&#x43E;&#x441;&#x442;&#x44C;, &#x43A;&#x430;&#x43A; &#x438;&#x437;&#x432;&#x435;&#x441;&#x442;&#x43D;&#x43E;, &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x431;&#x44B;&#x442;&#x44C; &#x437;&#x430;&#x434;&#x430;&#x43D;&#x430; &#x442;&#x440;&#x435;&#x43C;&#x44F; &#x442;&#x43E;&#x447;&#x43A;&#x430;&#x43C;&#x438;. &#x41C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x432;&#x437;&#x44F;&#x442;&#x44C; &#x442;&#x440;&#x438; &#x43F;&#x440;&#x435;&#x434;&#x44B;&#x434;&#x443;&#x449;&#x438;&#x445; &#x430;&#x442;&#x43E;&#x43C;&#x430;, &#x438; &#x442;&#x43E;&#x433;&#x434;&#x430; &#x434;&#x432;&#x430; &#x443;&#x433;&#x43B;&#x430; &#x432;&#x43E;&#x437;&#x43D;&#x438;&#x43A;&#x430;&#x44E;&#x442; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x435;&#x441;&#x442;&#x435;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x43E;. &#x41F;&#x435;&#x440;&#x432;&#x44B;&#x439; &#x441;&#x447;&#x438;&#x442;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x43A;&#x430;&#x43A; &#x43F;&#x43B;&#x43E;&#x441;&#x43A;&#x438;&#x439; &#x443;&#x433;&#x43E;&#x43B; &#x43C;&#x435;&#x436;&#x434;&#x443; &#x442;&#x440;&#x435;&#x43C;&#x44F; &#x430;&#x442;&#x43E;&#x43C;&#x430;&#x43C;&#x438; (&#x442;&#x435;&#x43A;&#x443;&#x449;&#x438;&#x43C; &#x438; &#x434;&#x432;&#x443;&#x43C;&#x44F; &#x43F;&#x440;&#x435;&#x434;&#x44B;&#x434;&#x443;&#x449;&#x438;&#x43C;&#x438;). &#x412;&#x442;&#x43E;&#x440;&#x43E;&#x439; &#x2014; &#x43A;&#x430;&#x43A; &#x434;&#x432;&#x443;&#x433;&#x440;&#x430;&#x43D;&#x43D;&#x44B;&#x439; &#x443;&#x433;&#x43E;&#x43B; &#x43F;&#x43E; &#x432;&#x441;&#x435;&#x43C; &#x447;&#x435;&#x442;&#x44B;&#x440;&#x435;&#x43C; &#x442;&#x43E;&#x447;&#x43A;&#x430;&#x43C;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/12/image-5.png" class="kg-image" alt="&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43B;&#x43E;&#x432; &#x43E;&#x431; AlphaFold2" loading="lazy" width="1024" height="768" srcset="https://yakovlev.me/content/images/size/w600/2020/12/image-5.png 600w, https://yakovlev.me/content/images/size/w1000/2020/12/image-5.png 1000w, https://yakovlev.me/content/images/2020/12/image-5.png 1024w" sizes="(min-width: 720px) 720px"><figcaption>&#x41F;&#x43B;&#x43E;&#x441;&#x43A;&#x438;&#x439; (92.7) &#x438; &#x434;&#x432;&#x443;&#x433;&#x440;&#x430;&#x43D;&#x43D;&#x44B;&#x439; (51.9) &#x443;&#x433;&#x43B;&#x44B; &#x434;&#x43B;&#x44F; &#x447;&#x435;&#x442;&#x44B;&#x440;&#x435;&#x445; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; \(C_{\alpha}\)</figcaption></figure><p>&#x41F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x434;&#x43E;&#x432;&#x43E;&#x43B;&#x44C;&#x43D;&#x43E;-&#x442;&#x430;&#x43A;&#x438; &#x443;&#x434;&#x43E;&#x431;&#x43D;&#x43E;&#x435;, &#x442;&#x430;&#x43A; &#x43A;&#x430;&#x43A; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x435;&#x442; &#x434;&#x43B;&#x44F; N &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x442;&#x44C; N-3 &#x434;&#x432;&#x443;&#x433;&#x440;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x438; N-2 &#x43F;&#x43B;&#x43E;&#x441;&#x43A;&#x438;&#x445; &#x443;&#x433;&#x43B;&#x43E;&#x432;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x43F;&#x43E;&#x43B;&#x43D;&#x43E;&#x441;&#x442;&#x44C;&#x44E; &#x43E;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x44F;&#x442; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x443;. &#x421; &#x43D;&#x438;&#x43C; &#x435;&#x441;&#x442;&#x44C; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43E;&#x434;&#x43D;&#x430; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x430;, &#x43E;&#x43D;&#x43E; &#x43D;&#x435; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442;.</p><p>&#x415;&#x441;&#x43B;&#x438; &#x431;&#x44B;&#x442;&#x44C; &#x442;&#x43E;&#x447;&#x43D;&#x435;&#x435;, &#x43D;&#x438;&#x43A;&#x442;&#x43E; &#x442;&#x430;&#x43A; &#x438; &#x43D;&#x435; &#x437;&#x430;&#x441;&#x442;&#x430;&#x432;&#x438;&#x43B; &#x43A;&#x430;&#x43A;&#x438;&#x435;-&#x43B;&#x438;&#x431;&#x43E; &#x43C;&#x43E;&#x434;&#x435;&#x43B;&#x438; &#x43F;&#x440;&#x438;&#x43B;&#x438;&#x447;&#x43D;&#x43E; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x443;&#x433;&#x43B;&#x44B; &#x43F;&#x43E; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x438;. &#x41A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;, &#x442;&#x430;&#x43A;&#x438;&#x445; &#x430;&#x43B;&#x433;&#x43E;&#x440;&#x438;&#x442;&#x43C;&#x43E;&#x432; &#x432;&#x435;&#x43B;&#x438;&#x43A;&#x43E;&#x435; &#x43C;&#x43D;&#x43E;&#x436;&#x435;&#x441;&#x442;&#x432;&#x43E;, &#x43D;&#x43E; &#x432;&#x441;&#x435; &#x43E;&#x43D;&#x438; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x44E;&#x442; &#x441; &#x440;&#x430;&#x437;&#x43D;&#x43E;&#x439; &#x441;&#x442;&#x435;&#x43F;&#x435;&#x43D;&#x44C;&#x44E; &#x43F;&#x430;&#x440;&#x448;&#x438;&#x432;&#x43E;&#x441;&#x442;&#x438;. &#x41F;&#x43E;&#x447;&#x435;&#x43C;&#x443; &#x442;&#x430;&#x43A; &#x43F;&#x440;&#x43E;&#x438;&#x441;&#x445;&#x43E;&#x434;&#x438;&#x442;, &#x43F;&#x43E;&#x436;&#x430;&#x43B;&#x443;&#x439;, &#x442;&#x435;&#x43C;&#x430; &#x43E;&#x442;&#x434;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x437;&#x430;&#x43C;&#x435;&#x442;&#x43A;&#x438;, &#x43D;&#x43E; &#x432; &#x434;&#x432;&#x443;&#x445; &#x441;&#x43B;&#x43E;&#x432;&#x430;&#x445;, &#x43A;&#x430;&#x436;&#x435;&#x442;&#x441;&#x44F;, &#x447;&#x442;&#x43E; &#x44D;&#x442;&#x43E; &#x441;&#x432;&#x44F;&#x437;&#x430;&#x43D;&#x43E; &#x441; &#x442;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x435; &#x443;&#x433;&#x43B;&#x43E;&#x432; &#x2014; &#x44D;&#x442;&#x43E; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x435; &#x437;&#x430;&#x434;&#x430;&#x447;&#x438; &#x43F;&#x440;&#x43E; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x43B;&#x43E;&#x43A;&#x430;&#x43B;&#x44C;&#x43D;&#x443;&#x44E; &#x43E;&#x431;&#x43B;&#x430;&#x441;&#x442;&#x44C; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B;, &#x43D;&#x435; &#x443;&#x447;&#x438;&#x442;&#x44B;&#x432;&#x430;&#x44E;&#x449;&#x435;&#x435; &#x43D;&#x438;&#x43A;&#x430;&#x43A;&#x438;&#x445; &#x432;&#x437;&#x430;&#x438;&#x43C;&#x43E;&#x434;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x439; &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442;, &#x43D;&#x430;&#x445;&#x43E;&#x434;&#x44F;&#x449;&#x438;&#x445;&#x441;&#x44F; &#x434;&#x430;&#x43B;&#x435;&#x43A;&#x43E; &#x434;&#x440;&#x443;&#x433; &#x43E;&#x442; &#x434;&#x440;&#x443;&#x433;&#x430;.</p><p>&#x418; &#x432;&#x43E;&#x442; &#x437;&#x434;&#x435;&#x441;&#x44C; &#x43D;&#x430; &#x441;&#x446;&#x435;&#x43D;&#x435; &#x43F;&#x43E;&#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x439;, &#x433;&#x43E;&#x440;&#x430;&#x437;&#x434;&#x43E; &#x431;&#x43E;&#x43B;&#x435;&#x435; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;&#x439; &#x438;&#x43D;&#x432;&#x430;&#x440;&#x438;&#x430;&#x43D;&#x442;. &#x412; &#x43E;&#x442;&#x43B;&#x438;&#x447;&#x438;&#x438; &#x43E;&#x442; &#x443;&#x433;&#x43B;&#x43E;&#x432; &#x435;&#x433;&#x43E; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43E;&#x431;&#x44A;&#x44F;&#x441;&#x43D;&#x438;&#x442;&#x44C; &#x431;&#x443;&#x43A;&#x432;&#x430;&#x43B;&#x44C;&#x43D;&#x43E; &#x43E;&#x434;&#x43D;&#x43E;&#x439; &#x444;&#x440;&#x430;&#x437;&#x43E;&#x439; &#x2014; &#x438;&#x43D;&#x432;&#x430;&#x440;&#x438;&#x430;&#x43D;&#x442;&#x43E;&#x43C; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x43C;&#x430;&#x442;&#x440;&#x438;&#x446;&#x430; (&#x442;&#x430;&#x431;&#x43B;&#x438;&#x446;&#x430;) &#x432;&#x441;&#x435;&#x445; &#x43F;&#x43E;&#x43F;&#x430;&#x440;&#x43D;&#x44B;&#x445; &#x440;&#x430;&#x441;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x438;&#x439; &#x43C;&#x435;&#x436;&#x434;&#x443; &#x430;&#x442;&#x43E;&#x43C;&#x430;&#x43C;&#x438;. &#x422;&#x430;&#x43A;&#x43E;&#x435; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x43D;&#x435; &#x437;&#x430;&#x432;&#x438;&#x441;&#x438;&#x442; &#x43E;&#x442; &#x43F;&#x43E;&#x432;&#x43E;&#x440;&#x43E;&#x442;&#x43E;&#x432; &#x438;&#x43B;&#x438; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x449;&#x435;&#x43D;&#x438;&#x439; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x432; &#x442;&#x440;&#x435;&#x445;&#x43C;&#x435;&#x440;&#x43D;&#x43E;&#x43C; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x440;&#x430;&#x43D;&#x441;&#x442;&#x432;&#x435;, &#x441;&#x43E;&#x434;&#x435;&#x440;&#x436;&#x438;&#x442; &#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x446;&#x438;&#x44E; &#x43E; &#x432;&#x437;&#x430;&#x438;&#x43C;&#x43E;&#x434;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x438; (&#x431;&#x43B;&#x438;&#x437;&#x43E;&#x441;&#x442;&#x438;) &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442; &#x432;&#x43D;&#x435; &#x437;&#x430;&#x432;&#x438;&#x441;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x438; &#x43E;&#x442; &#x438;&#x445; &#x443;&#x434;&#x430;&#x43B;&#x435;&#x43D;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x43F;&#x43E; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x438;. &#x422;&#x430;&#x43A;&#x436;&#x435; &#x447;&#x435;&#x43B;&#x43E;&#x432;&#x435;&#x447;&#x435;&#x441;&#x442;&#x432;&#x43E; &#x443;&#x436;&#x435; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x434;&#x430;&#x432;&#x43D;&#x43E; &#x443;&#x43C;&#x435;&#x435;&#x442; &#x44D;&#x444;&#x444;&#x435;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E; &#x43D;&#x430;&#x445;&#x43E;&#x434;&#x438;&#x442;&#x44C; &#x43D;&#x430;&#x431;&#x43E;&#x440; &#x43A;&#x43E;&#x43E;&#x440;&#x434;&#x438;&#x43D;&#x430;&#x442; &#x43F;&#x43E; &#x43C;&#x430;&#x442;&#x440;&#x438;&#x446;&#x435; &#x440;&#x430;&#x441;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x438;&#x439;. &#x42D;&#x442;&#x43E; &#x442;&#x43E;&#x436;&#x435; &#x442;&#x435;&#x43C;&#x430; &#x434;&#x43B;&#x44F; &#x43E;&#x442;&#x434;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x437;&#x430;&#x43C;&#x435;&#x442;&#x43A;&#x438;, &#x43D;&#x43E; &#x441;&#x430;&#x43C;&#x43E;&#x441;&#x442;&#x43E;&#x44F;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x43F;&#x43E;&#x441;&#x43C;&#x43E;&#x442;&#x440;&#x435;&#x442;&#x44C; &#x43E;&#x434;&#x438;&#x43D; &#x438;&#x437; &#x441;&#x442;&#x430;&#x440;&#x435;&#x439;&#x448;&#x438;&#x445; &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x43E;&#x432; &#x43C;&#x43E;&#x436;&#x43D;&#x43E;, &#x43D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, <a href="https://www.sciencedirect.com/science/article/pii/0021999178900815?ref=yakovlev.me">&#x437;&#x434;&#x435;&#x441;&#x44C;</a>.</p><figure class="kg-card kg-code-card"><pre><code>  0.0       3.83271   6.01989   6.58519  &#x2026;  25.678    24.6388   24.0295
  3.83271   0.0       3.83997   6.59813     23.5736   22.5554   21.486
  6.01989   3.83997   0.0       3.82077     20.5022   19.164    18.2255
  6.58519   6.59813   3.82077   0.0         20.6506   19.0817   18.7819
 10.0775    9.08123   5.37992   3.8444      17.0151   15.2753   15.0675
 11.085    10.8644    7.81588   5.66081  &#x2026;  16.316    15.1335   15.7933
 14.4674   13.5387   10.1526    8.7795      12.6211   11.3417   12.3157
 16.4536   15.7524   12.8618   11.6161      11.6552   11.4539   13.233
 13.8395   13.8638   11.4989    9.82352     15.386    15.1816   16.6443
 10.8774   10.5668    8.77125   8.06832     16.6945   16.5649   17.2367
  7.27608   6.78375   5.36449   5.38269  &#x2026;  18.9654   18.3924   18.3666
  8.49109   6.13378   4.79525   7.04693     17.8971   17.399    16.6753
  8.15412   4.97326   5.92916   9.24726     20.7562   20.3603   19.1268
  &#x22EE;                                      &#x22F1;   &#x22EE;                  
 14.6443   11.3347    9.85678  12.5927      14.7822   14.6226   12.817
 13.4068   10.4863    7.84574   9.82696     13.6534   12.7312   11.2792
 16.7364   13.568    10.9384   12.9258      12.5891   11.3365    8.88843
 18.6057   15.4437   13.2634   15.3405      11.0792   11.0058    8.80482
 17.6728   15.0817   12.5043   13.7692   &#x2026;   9.06338   9.17429   8.31031
 19.7891   17.344    14.2232   14.8957       6.80036   5.72403   4.80765
 22.4295   19.6197   16.8814   18.1163       6.56397   6.69385   4.6497
 22.6069   20.0842   17.5949   18.6529       5.71467   7.68905   7.47085
 22.0187   19.9578   17.0287   17.2996       3.8602    5.29157   6.763
 25.678    23.5736   20.5022   20.6506   &#x2026;   0.0       3.81372   6.17142
 24.6388   22.5554   19.164    19.0817       3.81372   0.0       3.84365
 24.0295   21.486    18.2255   18.7819       6.17142   3.84365   0.0
</code></pre><figcaption>&#x422;&#x430;&#x431;&#x43B;&#x438;&#x446;&#x430; &#x43F;&#x43E;&#x43F;&#x430;&#x440;&#x43D;&#x44B;&#x445; &#x440;&#x430;&#x441;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x438;&#x439; &#x43C;&#x435;&#x436;&#x434;&#x443; \(C_{\alpha}\) &#x430;&#x442;&#x43E;&#x43C;&#x430;&#x43C;&#x438; &#x43D;&#x430;&#x448;&#x435;&#x433;&#x43E; &#x43C;&#x43E;&#x434;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x433;&#x43E; &#x431;&#x435;&#x43B;&#x43A;&#x430;</figcaption></figure><p>&#x418;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x44D;&#x442;&#x443; &#x43C;&#x430;&#x442;&#x440;&#x438;&#x446;&#x443; &#x438; &#x438;&#x449;&#x435;&#x442; AlphaFold. &#x41F;&#x43E;&#x438;&#x441;&#x43A; &#x436;&#x435; &#x43A;&#x43E;&#x43E;&#x440;&#x434;&#x438;&#x43D;&#x430;&#x442; &#x43F;&#x440;&#x43E;&#x438;&#x441;&#x445;&#x43E;&#x434;&#x438;&#x442; &#x443;&#x436;&#x435; &#x441;&#x443;&#x449;&#x435;&#x441;&#x442;&#x432;&#x443;&#x44E;&#x449;&#x438;&#x43C;&#x438; &#x438;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x43C;&#x438; &#x441; &#x43F;&#x43E;&#x43C;&#x43E;&#x449;&#x44C;&#x44E; <a href="https://en.wikipedia.org/wiki/Gradient_descent?ref=yakovlev.me">&#x433;&#x440;&#x430;&#x434;&#x438;&#x435;&#x43D;&#x442;&#x43D;&#x43E;&#x433;&#x43E; &#x441;&#x43F;&#x443;&#x441;&#x43A;&#x430;</a>. &#x422;&#x430;&#x43A;&#x436;&#x435; AlphaFold &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x435;&#x442; &#x440;&#x430;&#x441;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x438;&#x44F; &#x43D;&#x435; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43C;&#x435;&#x436;&#x434;&#x443; \(C_{\alpha}\), &#x43D;&#x43E; &#x442;&#x430;&#x43A;&#x436;&#x435; &#x431;&#x435;&#x440;&#x435;&#x442; &#x432; &#x440;&#x430;&#x441;&#x441;&#x43C;&#x43E;&#x442;&#x440;&#x435;&#x43D;&#x438;&#x435; &#x438; \(C_{\beta}\) &#x2014; &#x43F;&#x435;&#x440;&#x432;&#x44B;&#x435; &#x430;&#x442;&#x43E;&#x43C;&#x44B; &#x440;&#x430;&#x434;&#x438;&#x43A;&#x430;&#x43B;&#x43E;&#x432; &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/12/1fsd_cacb.gif" class="kg-image" alt="&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43B;&#x43E;&#x432; &#x43E;&#x431; AlphaFold2" loading="lazy" width="690" height="388" srcset="https://yakovlev.me/content/images/size/w600/2020/12/1fsd_cacb.gif 600w, https://yakovlev.me/content/images/2020/12/1fsd_cacb.gif 690w"><figcaption>\(C_{\alpha}\) &#x438; \(C_{\beta}\) &#x430;&#x442;&#x43E;&#x43C;&#x44B; &#x431;&#x435;&#x43B;&#x43A;&#x430;</figcaption></figure><p>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C;, &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x43D;&#x430;&#x43C; &#x441;&#x442;&#x430;&#x43B;&#x43E; &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x43D;&#x43E; &#x447;&#x442;&#x43E; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x435;&#x442; AlphaFold, &#x438; &#x43A;&#x430;&#x43A; &#x44D;&#x442;&#x43E; &#x43F;&#x440;&#x435;&#x432;&#x440;&#x430;&#x449;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x432; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x443;, &#x441;&#x434;&#x435;&#x43B;&#x430;&#x435;&#x43C; &#x435;&#x449;&#x435; &#x43E;&#x434;&#x43D;&#x43E; &#x433;&#x440;&#x43E;&#x43C;&#x43A;&#x43E;&#x435; &#x437;&#x430;&#x44F;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435;.</p><p><strong>AlphaFold &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x430;&#x435;&#x442; &#x43D;&#x430; &#x432;&#x445;&#x43E;&#x434; &#x43D;&#x435; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442; &#x431;&#x435;&#x43B;&#x43A;&#x430;.</strong></p><p>&#x41A; &#x441;&#x43B;&#x43E;&#x432;&#x443;, &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x44D;&#x442;&#x43E; &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x433;&#x43B;&#x430;&#x432;&#x43D;&#x43E;&#x439; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x43E;&#x439; &#x432; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x438; &#x432;&#x44B;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x43D;&#x43E;&#x433;&#x43E; DeepMind &#x43A;&#x43E;&#x434;&#x430; (&#x43D;&#x43E; &#x435;&#x441;&#x442;&#x44C; <a href="https://www.biorxiv.org/content/10.1101/830273v1.full?ref=yakovlev.me">&#x432;&#x430;&#x440;&#x438;&#x430;&#x43D;&#x442; &#x438;&#x43C;&#x43F;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x446;&#x438;&#x438;</a> &#x43E;&#x442; &#x441;&#x43E;&#x43E;&#x431;&#x449;&#x435;&#x441;&#x442;&#x432;&#x430;, &#x438;&#x441;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x44F;&#x44E;&#x449;&#x438;&#x439; &#x44D;&#x442;&#x443; &#x441;&#x438;&#x442;&#x443;&#x430;&#x446;&#x438;&#x44E;). &#x414;&#x43B;&#x44F; &#x442;&#x43E;&#x433;&#x43E;, &#x447;&#x442;&#x43E;&#x431; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x44C; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x443; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x443;&#x44E;&#x449;&#x435;&#x439; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x435;&#x451; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x44C;&#x43D;&#x43E; &#x43F;&#x43E;&#x434;&#x433;&#x43E;&#x442;&#x43E;&#x432;&#x438;&#x442;&#x44C;. &#x41D;&#x43E; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x432; &#x44D;&#x442;&#x43E;&#x439; &#x43F;&#x43E;&#x434;&#x433;&#x43E;&#x442;&#x43E;&#x432;&#x43A;&#x438; &#x442;&#x430;&#x438;&#x442;&#x441;&#x44F; &#x432;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x432;&#x430;&#x436;&#x43D;&#x430;&#x44F; &#x441;&#x43E;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x44F;&#x44E;&#x449;&#x430;&#x44F; &#x443;&#x441;&#x43F;&#x435;&#x445;&#x430;.</p><p>&#x421;&#x430;&#x43C;&#x430; &#x43F;&#x43E; &#x441;&#x435;&#x431;&#x435; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x44C;, &#x43E;&#x447;&#x435;&#x432;&#x438;&#x434;&#x43D;&#x43E;, &#x43D;&#x435; &#x43D;&#x435;&#x441;&#x435;&#x442; &#x43D;&#x438;&#x43A;&#x430;&#x43A;&#x43E;&#x439; &#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x446;&#x438;&#x438; &#x43E; &#x432;&#x437;&#x430;&#x438;&#x43C;&#x43E;&#x434;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x438; &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442;, &#x432; &#x441;&#x432;&#x44F;&#x437;&#x438; &#x441; &#x447;&#x435;&#x43C; &#x43A;&#x430;&#x43A;&#x43E;&#x439; &#x431;&#x44B; &#x445;&#x438;&#x442;&#x440;&#x43E;&#x439; &#x438; &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x43E;&#x439; &#x43D;&#x438; &#x431;&#x44B;&#x43B;&#x430; &#x43D;&#x435;&#x439;&#x440;&#x43E;&#x441;&#x435;&#x442;&#x44C;, &#x438;&#x437;&#x432;&#x43B;&#x435;&#x447;&#x44C; &#x44D;&#x442;&#x443; &#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x446;&#x438;&#x44E; &#x435;&#x439; &#x434;&#x43E;&#x432;&#x43E;&#x43B;&#x44C;&#x43D;&#x43E;-&#x442;&#x430;&#x43A;&#x438; &#x442;&#x44F;&#x436;&#x435;&#x43B;&#x43E;. &#x41C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x443;&#x43F;&#x440;&#x43E;&#x441;&#x442;&#x438;&#x442;&#x44C; &#x44D;&#x442;&#x443; &#x437;&#x430;&#x434;&#x430;&#x447;&#x443;, &#x435;&#x441;&#x43B;&#x438; &#x437;&#x430;&#x440;&#x430;&#x43D;&#x435;&#x435; &#x441;&#x43E;&#x43E;&#x431;&#x449;&#x438;&#x43C; &#x43D;&#x430;&#x448;&#x435;&#x43C;&#x443; &#x430;&#x43B;&#x433;&#x43E;&#x440;&#x438;&#x442;&#x43C;&#x443;, &#x447;&#x442;&#x43E; &#x43A;&#x430;&#x43A;&#x438;&#x435;-&#x442;&#x43E; &#x43F;&#x43E;&#x437;&#x438;&#x446;&#x438;&#x438; &#x432; &#x43D;&#x430;&#x448;&#x435;&#x439; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x438;, &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;, &#x438;&#x43C;&#x435;&#x44E;&#x442; &#x441;&#x432;&#x44F;&#x437;&#x44C; &#x434;&#x440;&#x443;&#x433; &#x441; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x43C;. &#x41D;&#x43E; &#x43E;&#x442;&#x43A;&#x443;&#x434;&#x430; &#x44D;&#x442;&#x443; &#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x446;&#x438;&#x44E; &#x432;&#x437;&#x44F;&#x442;&#x44C;?</p><p>&#x414;&#x430;&#x436;&#x435; &#x442;&#x43E;, &#x447;&#x442;&#x43E; &#x434;&#x43B;&#x44F; &#x43D;&#x430;&#x448;&#x435;&#x433;&#x43E; &#x431;&#x435;&#x43B;&#x43A;&#x430; &#x43E;&#x442;&#x441;&#x443;&#x442;&#x441;&#x432;&#x443;&#x435;&#x442; &#x43A;&#x430;&#x43A;&#x430;&#x44F;-&#x43B;&#x438;&#x431;&#x43E; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x43D;&#x430;&#x44F; &#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x446;&#x438;&#x44F; &#x43D;&#x435; &#x43E;&#x437;&#x43D;&#x430;&#x447;&#x430;&#x435;&#x442;, &#x447;&#x442;&#x43E; &#x43C;&#x44B; &#x43D;&#x435; &#x437;&#x43D;&#x430;&#x435;&#x43C; &#x43F;&#x440;&#x43E; &#x43D;&#x435;&#x433;&#x43E; &#x43D;&#x438;&#x447;&#x435;&#x433;&#x43E;. &#x421; &#x43C;&#x43E;&#x43C;&#x435;&#x43D;&#x442;&#x430; &#x438;&#x437;&#x43E;&#x431;&#x440;&#x435;&#x442;&#x435;&#x43D;&#x438;&#x44F; <a href="https://en.wikipedia.org/wiki/DNA_sequencing?ref=yakovlev.me">&#x43C;&#x435;&#x442;&#x43E;&#x434;&#x43E;&#x432; &#x432;&#x44B;&#x441;&#x43E;&#x43A;&#x43E;&#x43F;&#x440;&#x43E;&#x438;&#x437;&#x432;&#x43E;&#x434;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x433;&#x43E; &#x441;&#x435;&#x43A;&#x432;&#x435;&#x43D;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F;</a> &#x43B;&#x44E;&#x434;&#x438; &#x434;&#x43E;&#x431;&#x44B;&#x43B;&#x438; &#x438; &#x440;&#x430;&#x437;&#x43C;&#x435;&#x442;&#x438;&#x43B;&#x438; &#x43F;&#x43E;&#x438;&#x441;&#x442;&#x438;&#x43D;&#x435; &#x43A;&#x43E;&#x43B;&#x43E;&#x441;&#x441;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x435; &#x43A;&#x43E;&#x43B;&#x438;&#x447;&#x435;&#x441;&#x442;&#x432;&#x43E; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x435;&#x439; &#x433;&#x435;&#x43D;&#x43E;&#x432;, &#x43A;&#x43E;&#x434;&#x438;&#x440;&#x443;&#x44E;&#x449;&#x438;&#x445; &#x440;&#x430;&#x437;&#x43D;&#x44B;&#x435; &#x431;&#x435;&#x43B;&#x43A;&#x438;. &#x418; &#x441;&#x440;&#x435;&#x434;&#x438; &#x43D;&#x438;&#x445; &#x43E;&#x431;&#x44F;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x43D;&#x430;&#x439;&#x434;&#x443;&#x442;&#x441;&#x44F; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x438;, &#x445;&#x43E;&#x442;&#x44F; &#x431;&#x44B; &#x43E;&#x442;&#x447;&#x430;&#x441;&#x442;&#x438; &#x43F;&#x43E;&#x445;&#x43E;&#x436;&#x438;&#x435; &#x43D;&#x430; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x443;&#x44E;&#x449;&#x443;&#x44E; &#x43D;&#x430;&#x441;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/12/image-6.png" class="kg-image" alt="&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43B;&#x43E;&#x432; &#x43E;&#x431; AlphaFold2" loading="lazy" width="2000" height="602" srcset="https://yakovlev.me/content/images/size/w600/2020/12/image-6.png 600w, https://yakovlev.me/content/images/size/w1000/2020/12/image-6.png 1000w, https://yakovlev.me/content/images/size/w1600/2020/12/image-6.png 1600w, https://yakovlev.me/content/images/2020/12/image-6.png 2120w" sizes="(min-width: 720px) 720px"><figcaption>&#x421;&#x442;&#x430;&#x442;&#x438;&#x441;&#x442;&#x438;&#x43A;&#x430; &#x43F;&#x43E; &#x43A;&#x43E;&#x43B;&#x438;&#x447;&#x435;&#x441;&#x442;&#x432;&#x443; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x435;&#x439; &#x432; <a href="https://www.ncbi.nlm.nih.gov/genbank/statistics/?ref=yakovlev.me">GenBank</a></figcaption></figure><p>&#x421;&#x43A;&#x43E;&#x440;&#x435;&#x435; &#x432;&#x441;&#x435;&#x433;&#x43E; &#x44D;&#x442;&#x438; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x43F;&#x43E;&#x445;&#x43E;&#x436;&#x438; &#x43D;&#x435; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; &#x442;&#x430;&#x43A;, &#x430; &#x43A;&#x430;&#x43A; &#x440;&#x430;&#x437; &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x443;, &#x447;&#x442;&#x43E; &#x43A;&#x43E;&#x434;&#x438;&#x440;&#x443;&#x435;&#x43C;&#x44B;&#x435; &#x438;&#x43C;&#x438; &#x431;&#x435;&#x43B;&#x43A;&#x438; &#x432;&#x44B;&#x43F;&#x43E;&#x43B;&#x43D;&#x44F;&#x44E;&#x442; &#x441;&#x445;&#x43E;&#x436;&#x438;&#x435; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; (&#x432; &#x442;&#x43E;&#x43C; &#x436;&#x435; &#x438;&#x43B;&#x438; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x43C; &#x43E;&#x440;&#x433;&#x430;&#x43D;&#x438;&#x437;&#x43C;&#x435;). &#x42D;&#x442;&#x43E;, &#x43E;&#x447;&#x435;&#x432;&#x438;&#x434;&#x43D;&#x43E;, &#x43E;&#x437;&#x43D;&#x430;&#x447;&#x430;&#x435;&#x442;, &#x447;&#x442;&#x43E; &#x438; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x430; &#x44D;&#x442;&#x438;&#x445; &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432; &#x434;&#x43E;&#x43B;&#x436;&#x43D;&#x430; &#x431;&#x44B;&#x442;&#x44C; &#x43F;&#x43E;&#x445;&#x43E;&#x436;&#x430;.</p><p>&quot;&#x41D;&#x443;, &#x438; &#x447;&#x442;&#x43E;?&quot; &#x441;&#x43F;&#x440;&#x43E;&#x441;&#x438;&#x442;&#x435; &#x432;&#x44B;. &#x412;&#x435;&#x434;&#x44C; &#x43C;&#x44B; &#x43D;&#x435; &#x437;&#x43D;&#x430;&#x435;&#x43C; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x44D;&#x442;&#x438;&#x445; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x435;&#x439;. &#x417;&#x430;&#x447;&#x430;&#x441;&#x442;&#x443;&#x44E; &#x43C;&#x44B; &#x434;&#x430;&#x436;&#x435; &#x438;&#x445; &#x43D;&#x430;&#x437;&#x432;&#x430;&#x43D;&#x438;&#x439; &#x43D;&#x435; &#x437;&#x43D;&#x430;&#x435;&#x43C;. &#x427;&#x435;&#x43C; &#x43D;&#x430;&#x43C; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x43F;&#x43E;&#x43C;&#x43E;&#x447;&#x44C;, &#x447;&#x442;&#x43E; &#x43A;&#x442;&#x43E;-&#x442;&#x43E; &#x432; &#x43A;&#x430;&#x43A;&#x43E;&#x43C;-&#x442;&#x43E; &#x43E;&#x440;&#x433;&#x430;&#x43D;&#x438;&#x437;&#x43C;&#x435; &#x443;&#x432;&#x438;&#x434;&#x435;&#x43B; &#x43F;&#x43E;&#x445;&#x43E;&#x436;&#x443;&#x44E; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x44C;? &#x41D;&#x430; &#x441;&#x430;&#x43C;&#x43E;&#x43C; &#x434;&#x435;&#x43B;&#x435;, &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x43C;&#x43D;&#x43E;&#x433;&#x43E;&#x435;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/12/1fsd_contacts.png" class="kg-image" alt="&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43B;&#x43E;&#x432; &#x43E;&#x431; AlphaFold2" loading="lazy" width="1024" height="768" srcset="https://yakovlev.me/content/images/size/w600/2020/12/1fsd_contacts.png 600w, https://yakovlev.me/content/images/size/w1000/2020/12/1fsd_contacts.png 1000w, https://yakovlev.me/content/images/2020/12/1fsd_contacts.png 1024w" sizes="(min-width: 720px) 720px"><figcaption>&#x41F;&#x430;&#x440;&#x430; &#x432;&#x437;&#x430;&#x438;&#x43C;&#x43E;&#x434;&#x435;&#x439;&#x441;&#x442;&#x432;&#x443;&#x44E;&#x449;&#x438;&#x445; &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442; &#x432; &#x431;&#x435;&#x43B;&#x43A;&#x435;</figcaption></figure><p>&#x414;&#x430;&#x432;&#x430;&#x439;&#x442;&#x435; &#x432;&#x43D;&#x43E;&#x432;&#x44C; &#x43F;&#x43E;&#x441;&#x43C;&#x43E;&#x442;&#x440;&#x438;&#x43C; &#x43D;&#x430; &#x43D;&#x430;&#x448; &#x431;&#x435;&#x43B;&#x43E;&#x43A; &#x438; &#x441;&#x43E;&#x441;&#x440;&#x435;&#x434;&#x43E;&#x442;&#x43E;&#x447;&#x438;&#x43C;&#x441;&#x44F; &#x43D;&#x430; &#x43F;&#x430;&#x440;&#x435; &#x432;&#x437;&#x430;&#x438;&#x43C;&#x43E;&#x434;&#x435;&#x439;&#x441;&#x442;&#x432;&#x443;&#x44E;&#x449;&#x438;&#x445; &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442;. &#x414;&#x430;&#x432;&#x430;&#x439;&#x442;&#x435; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x438;&#x43C;, &#x447;&#x442;&#x43E; &#x43C;&#x44B; &#x437;&#x430;&#x43C;&#x435;&#x43D;&#x438;&#x43C; &#x43E;&#x434;&#x43D;&#x443; &#x438;&#x437; &#x43D;&#x438;&#x445;. &#x412; &#x44D;&#x442;&#x43E;&#x43C; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435; &#x432;&#x437;&#x430;&#x438;&#x43C;&#x43E;&#x434;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x435; &#x441; &#x432;&#x44B;&#x441;&#x43E;&#x43A;&#x43E;&#x439; &#x432;&#x435;&#x440;&#x43E;&#x44F;&#x442;&#x43D;&#x43E;&#x441;&#x442;&#x44C;&#x44E; &#x431;&#x443;&#x434;&#x435;&#x442; &#x443;&#x442;&#x440;&#x430;&#x447;&#x435;&#x43D;&#x43E;, &#x431;&#x435;&#x43B;&#x43E;&#x43A; &#x438;&#x437;&#x43C;&#x435;&#x43D;&#x438;&#x442; &#x441;&#x432;&#x43E;&#x44E; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x443; &#x438;, &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;, &#x434;&#x430;&#x436;&#x435; &#x43F;&#x435;&#x440;&#x435;&#x441;&#x442;&#x430;&#x43D;&#x435;&#x442; &#x432;&#x44B;&#x43F;&#x43E;&#x43B;&#x43D;&#x44F;&#x442;&#x44C; &#x441;&#x432;&#x43E;&#x44E; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E;. &#x41E;&#x440;&#x433;&#x430;&#x43D;&#x438;&#x437;&#x43C; &#x432; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x43C; &#x43F;&#x440;&#x43E;&#x438;&#x437;&#x43E;&#x439;&#x434;&#x435;&#x442; &#x442;&#x430;&#x43A;&#x430;&#x44F; &#x43C;&#x443;&#x442;&#x430;&#x446;&#x438;&#x44F;, &#x441;&#x43A;&#x43E;&#x440;&#x435;&#x435; &#x432;&#x441;&#x435;&#x433;&#x43E;, &#x43F;&#x43E;&#x441;&#x442;&#x440;&#x430;&#x434;&#x430;&#x435;&#x442; &#x438; &#x441; &#x43C;&#x435;&#x43D;&#x44C;&#x448;&#x435;&#x439; &#x432;&#x435;&#x440;&#x43E;&#x44F;&#x442;&#x43D;&#x43E;&#x441;&#x442;&#x44C;&#x44E; &#x434;&#x430;&#x441;&#x442; &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x441;&#x442;&#x432;&#x43E;.</p><p>&#x421; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x439; &#x441;&#x442;&#x43E;&#x440;&#x43E;&#x43D;&#x44B;, &#x435;&#x441;&#x43B;&#x438; &#x44D;&#x442;&#x430; &#x437;&#x430;&#x43C;&#x435;&#x43D;&#x430; &#x43F;&#x440;&#x43E;&#x438;&#x437;&#x43E;&#x439;&#x434;&#x435;&#x442; &#x43D;&#x430; &#x43A;&#x430;&#x43A;&#x443;&#x44E;-&#x442;&#x43E; &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442;&#x443;, &#x441;&#x43F;&#x43E;&#x441;&#x43E;&#x431;&#x43D;&#x443;&#x44E; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x442;&#x430;&#x43A;&#x443;&#x44E; &#x436;&#x435; &#x438;&#x43B;&#x438; &#x43F;&#x43E;&#x445;&#x43E;&#x436;&#x443;&#x44E; &#x441;&#x432;&#x44F;&#x437;&#x44C;, &#x442;&#x43E; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x430; &#x43F;&#x43E;&#x43C;&#x435;&#x43D;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x43D;&#x435;&#x441;&#x438;&#x43B;&#x44C;&#x43D;&#x43E; &#x438; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44F;, &#x432;&#x435;&#x440;&#x43E;&#x44F;&#x442;&#x43D;&#x43E;, &#x443;&#x442;&#x440;&#x430;&#x447;&#x435;&#x43D;&#x430; &#x43D;&#x435; &#x431;&#x443;&#x434;&#x435;&#x442;.</p><p>&#x42D;&#x442;&#x43E; &#x43D;&#x430;&#x431;&#x43B;&#x44E;&#x434;&#x435;&#x43D;&#x438;&#x435; &#x438;&#x43C;&#x435;&#x435;&#x442; &#x441;&#x430;&#x43C;&#x43E;&#x435; &#x43F;&#x440;&#x44F;&#x43C;&#x43E;&#x435; &#x43E;&#x442;&#x43D;&#x43E;&#x448;&#x435;&#x43D;&#x438;&#x435; &#x43A; &#x43D;&#x430;&#x448;&#x438;&#x43C; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x44F;&#x43C;. &#x41C;&#x44B; &#x43D;&#x430;&#x431;&#x43B;&#x44E;&#x434;&#x430;&#x435;&#x43C; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x44B; &#x441;&#x435;&#x43A;&#x432;&#x435;&#x43D;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x438;&#x437; &#x436;&#x438;&#x437;&#x43D;&#x435;&#x441;&#x43F;&#x43E;&#x441;&#x43E;&#x431;&#x43D;&#x44B;&#x445; &#x43E;&#x440;&#x433;&#x430;&#x43D;&#x438;&#x437;&#x43C;&#x43E;&#x432;. &#x418;&#x437; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43C;&#x44B; &#x434;&#x435;&#x43B;&#x430;&#x435;&#x43C; &#x432;&#x44B;&#x432;&#x43E;&#x434;&#x44B;, &#x447;&#x442;&#x43E; &#x433;&#x435;&#x43D;&#x44B; &#x432; &#x43D;&#x438;&#x445;, &#x441;&#x43A;&#x43E;&#x440;&#x435;&#x435;, &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x44E;&#x442; &#x43A;&#x430;&#x43A; &#x43D;&#x430;&#x434;&#x43E;. &#x410; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442;, &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x441;&#x445;&#x43E;&#x436;&#x438;&#x445; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x435;&#x439; &#x431;&#x443;&#x434;&#x443;&#x442; &#x438;&#x43C;&#x435;&#x442;&#x44C; &#x441;&#x445;&#x43E;&#x436;&#x438;&#x435; &#x432;&#x437;&#x430;&#x438;&#x43C;&#x43E;&#x434;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x44F;. &#x41F;&#x43E;&#x437;&#x438;&#x446;&#x438;&#x438;, &#x43E;&#x431;&#x435;&#x441;&#x43F;&#x435;&#x447;&#x438;&#x432;&#x430;&#x44E;&#x449;&#x438;&#x435; &#x44D;&#x442;&#x438; &#x432;&#x437;&#x430;&#x438;&#x43C;&#x43E;&#x434;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x44F;, &#x441;&#x43A;&#x43E;&#x440;&#x435;&#x435; &#x432;&#x441;&#x435;&#x433;&#x43E; &#x431;&#x443;&#x434;&#x443;&#x442; &#x441;&#x43A;&#x43E;&#x440;&#x440;&#x435;&#x43B;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x44B;, &#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x43C;&#x435;&#x43D;&#x44F;&#x442;&#x44C;&#x441;&#x44F; &#x441;&#x43E;&#x432;&#x43C;&#x435;&#x441;&#x442;&#x43D;&#x43E;. &#x41F;&#x43E;&#x441;&#x447;&#x438;&#x442;&#x430;&#x442;&#x44C; &#x442;&#x430;&#x43A;&#x443;&#x44E; &#x43A;&#x43E;&#x440;&#x440;&#x435;&#x43B;&#x44F;&#x446;&#x438;&#x44E; &#x43F;&#x43E; &#x43A;&#x43E;&#x440;&#x43F;&#x443;&#x441;&#x443; &#x43D;&#x430;&#x439;&#x434;&#x435;&#x43D;&#x43D;&#x44B;&#x445; &#x43F;&#x43E;&#x445;&#x43E;&#x436;&#x438;&#x445; &#x43D;&#x430; &#x43D;&#x430;&#x448;&#x443; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x435;&#x439; &#x434;&#x43E;&#x432;&#x43E;&#x43B;&#x44C;&#x43D;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/12/image-3.png" class="kg-image" alt="&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43B;&#x43E;&#x432; &#x43E;&#x431; AlphaFold2" loading="lazy" width="2000" height="846" srcset="https://yakovlev.me/content/images/size/w600/2020/12/image-3.png 600w, https://yakovlev.me/content/images/size/w1000/2020/12/image-3.png 1000w, https://yakovlev.me/content/images/size/w1600/2020/12/image-3.png 1600w, https://yakovlev.me/content/images/size/w2400/2020/12/image-3.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>&#x421;&#x432;&#x44F;&#x437;&#x44C; &#x43A;&#x43E;&#x440;&#x440;&#x435;&#x43B;&#x44F;&#x446;&#x438;&#x438; &#x43F;&#x43E;&#x437;&#x438;&#x446;&#x438;&#x439; &#x432; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x44F;&#x445; &#x438; &#x43A;&#x43E;&#x43D;&#x442;&#x430;&#x43A;&#x442;&#x43E;&#x432; &#x432; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x435; (<a href="https://predictioncenter.org/casp14/doc/presentations/2020_11_30_CASP14_Introduction_Moult.pdf?ref=yakovlev.me">&#x418;&#x441;&#x442;&#x43E;&#x447;&#x43D;&#x438;&#x43A;</a>)</figcaption></figure><p>&#x422;&#x430;&#x43A;, &#x43F;&#x43E;&#x43C;&#x438;&#x43C;&#x43E; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x438;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x441;&#x430;&#x43C;&#x430; &#x43F;&#x43E; &#x441;&#x435;&#x431;&#x435; &#x43D;&#x435;&#x441;&#x435;&#x442; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x43C;&#x430;&#x43B;&#x43E; &#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x446;&#x438;&#x438;, &#x43C;&#x44B; &#x435;&#x449;&#x435; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x43C; &#x43A;&#x432;&#x430;&#x434;&#x440;&#x430;&#x442;&#x43D;&#x443;&#x44E; &#x43C;&#x430;&#x442;&#x440;&#x438;&#x446;&#x443;, &#x43E;&#x43F;&#x438;&#x441;&#x44B;&#x432;&#x430;&#x44E;&#x449;&#x443;&#x44E; &#x43A;&#x43E;&#x440;&#x440;&#x435;&#x43B;&#x44F;&#x446;&#x438;&#x44E; &#x43A;&#x430;&#x436;&#x434;&#x43E;&#x439; &#x43F;&#x430;&#x440;&#x44B; &#x43F;&#x43E;&#x437;&#x438;&#x446;&#x438;&#x439; (&#x435;&#x451; &#x43E;&#x431;&#x44B;&#x447;&#x43D;&#x43E; &#x43D;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x44E;&#x442; &#x43C;&#x430;&#x442;&#x440;&#x438;&#x446;&#x435;&#x439; <em>&#x43A;&#x43E;&#x44D;&#x432;&#x43E;&#x43B;&#x44E;&#x446;&#x438;&#x438;</em>). &#x41A;&#x441;&#x442;&#x430;&#x442;&#x438;, &#x43E;&#x43D;&#x430; &#x431;&#x443;&#x434;&#x435;&#x442; &#x442;&#x430;&#x43A;&#x43E;&#x433;&#x43E; &#x436;&#x435; &#x440;&#x430;&#x437;&#x43C;&#x435;&#x440;&#x430;, &#x447;&#x442;&#x43E; &#x438; &#x43E;&#x442;&#x432;&#x435;&#x442; &#x430;&#x43B;&#x433;&#x43E;&#x440;&#x438;&#x442;&#x43C;&#x430; &#x2014; &#x43C;&#x430;&#x442;&#x440;&#x438;&#x446;&#x430; &#x43F;&#x43E;&#x43F;&#x430;&#x440;&#x43D;&#x44B;&#x445; &#x440;&#x430;&#x441;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x438;&#x439; (&#x442;&#x43E;&#x436;&#x435; NxN &#x43F;&#x440;&#x438; &#x434;&#x43B;&#x438;&#x43D;&#x435; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x438; N). &#x42D;&#x442;&#x43E; &#x43F;&#x440;&#x438;&#x44F;&#x442;&#x43D;&#x43E;, &#x43F;&#x43E;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x443; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x443;&#x43F;&#x440;&#x43E;&#x449;&#x430;&#x435;&#x442; &#x43F;&#x43E;&#x441;&#x442;&#x440;&#x43E;&#x435;&#x43D;&#x438;&#x435; &#x441;&#x432;&#x435;&#x440;&#x442;&#x43E;&#x447;&#x43D;&#x43E;&#x439; &#x43D;&#x435;&#x439;&#x440;&#x43E;&#x441;&#x435;&#x442;&#x438;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x431;&#x443;&#x434;&#x435;&#x442; &#x441; &#x44D;&#x442;&#x438;&#x43C; &#x434;&#x435;&#x43B;&#x43E;&#x43C; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x442;&#x44C;.</p><p>&#x412; &#x43F;&#x440;&#x435;&#x441;&#x441;-&#x440;&#x435;&#x43B;&#x438;&#x437;&#x435; AlphaFold2 &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x432;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x437;&#x44C; &#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x43E;, &#x447;&#x442;&#x43E; &#x43D;&#x43E;&#x432;&#x430;&#x44F; &#x43D;&#x435;&#x439;&#x440;&#x43E;&#x441;&#x435;&#x442;&#x44C; &#x431;&#x44B;&#x43B;&#x430; &#x43E;&#x431;&#x443;&#x447;&#x435;&#x43D;&#x430; end-to-end. &#x418;&#x437; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43E;&#x441;&#x442;&#x43E;&#x440;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x440;&#x435;&#x434;&#x43F;&#x43E;&#x43B;&#x43E;&#x436;&#x438;&#x442;&#x44C;, &#x447;&#x442;&#x43E; &#x43D;&#x435;&#x439;&#x440;&#x43E;&#x441;&#x435;&#x442;&#x44C; &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x431;&#x435;&#x440;&#x435;&#x442; &#x43D;&#x430; &#x441;&#x435;&#x431;&#x44F; &#x432;&#x441;&#x435; &#x44D;&#x442;&#x430;&#x43F;&#x44B; &#x43E;&#x442; &#x43F;&#x43E;&#x438;&#x441;&#x43A;&#x430; &#x43A;&#x43E;&#x44D;&#x432;&#x43E;&#x43B;&#x44E;&#x446;&#x438;&#x438; &#x434;&#x43E; &#x444;&#x438;&#x43D;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x433;&#x43E; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B;. &#x41F;&#x440;&#x430;&#x432;&#x434;&#x430; &#x442;&#x430;&#x43C; &#x436;&#x435; &#x43D;&#x430; &#x438;&#x437;&#x43E;&#x431;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x438; &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x43D; &#x44D;&#x442;&#x430;&#x43F; &#x43F;&#x43E;&#x438;&#x441;&#x43A;&#x430; &#x431;&#x43B;&#x438;&#x437;&#x43A;&#x438;&#x445; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x435;&#x439; (Genetics search &amp; embed), &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439;, &#x43F;&#x43E; &#x432;&#x441;&#x435;&#x439; &#x432;&#x438;&#x434;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x438;, &#x434;&#x435;&#x43B;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x432;&#x441;&#x451; &#x436;&#x435; &#x431;&#x43E;&#x43B;&#x435;&#x435; &#x43A;&#x43B;&#x430;&#x441;&#x441;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x43C;&#x438; &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x430;&#x43C;&#x438;. &#x422;&#x430;&#x43A; &#x438;&#x43B;&#x438; &#x438;&#x43D;&#x430;&#x447;&#x435;, &#x441;&#x443;&#x434;&#x438;&#x442;&#x44C; &#x43E;&#x431; &#x44D;&#x442;&#x43E;&#x43C; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43B;&#x438;&#x448;&#x44C; &#x43F;&#x43E; PR-&#x43D;&#x43E;&#x432;&#x43E;&#x441;&#x442;&#x438; &#x440;&#x430;&#x43D;&#x43E;, &#x431;&#x443;&#x434;&#x435;&#x43C; &#x436;&#x434;&#x430;&#x442;&#x44C; &#x441;&#x442;&#x430;&#x442;&#x44C;&#x44E;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/12/image-14.png" class="kg-image" alt="&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43B;&#x43E;&#x432; &#x43E;&#x431; AlphaFold2" loading="lazy" width="2000" height="785" srcset="https://yakovlev.me/content/images/size/w600/2020/12/image-14.png 600w, https://yakovlev.me/content/images/size/w1000/2020/12/image-14.png 1000w, https://yakovlev.me/content/images/size/w1600/2020/12/image-14.png 1600w, https://yakovlev.me/content/images/2020/12/image-14.png 2048w" sizes="(min-width: 720px) 720px"><figcaption>&#x41F;&#x440;&#x438;&#x43D;&#x446;&#x438;&#x43F;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x430;&#x44F; &#x441;&#x445;&#x435;&#x43C;&#x430; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x44B; AlphaFold2 (<a href="https://deepmind.com/blog/article/alphafold-a-solution-to-a-50-year-old-grand-challenge-in-biology?ref=yakovlev.me">&#x418;&#x441;&#x442;&#x43E;&#x447;&#x43D;&#x438;&#x43A;</a>)</figcaption></figure><blockquote>&#x415;&#x441;&#x43B;&#x438; &#x432;&#x44B; &#x434;&#x43E;&#x447;&#x438;&#x442;&#x430;&#x43B;&#x438; &#x430;&#x436; &#x434;&#x43E;&#x441;&#x44E;&#x434;&#x430;, &#x442;&#x43E; &#x443;&#x436;&#x435; &#x434;&#x43E;&#x433;&#x430;&#x434;&#x430;&#x43B;&#x438;&#x441;&#x44C;, &#x447;&#x442;&#x43E; &#x44F; &#x432;&#x430;&#x441; &#x43E;&#x431;&#x43C;&#x430;&#x43D;&#x443;&#x43B; &#x438; &#x43F;&#x43E;&#x434; &#x432;&#x438;&#x434;&#x43E;&#x43C; &#x43A;&#x43E;&#x43C;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x440;&#x438;&#x44F; &#x43A; &#x440;&#x435;&#x43B;&#x438;&#x433;&#x438;&#x43E;&#x437;&#x43D;&#x44B;&#x43C; &#x441;&#x43F;&#x43E;&#x440;&#x430;&#x43C; &#x432; &#x441;&#x43E;&#x446;&#x441;&#x435;&#x442;&#x44F;&#x445; &#x432;&#x44B;&#x434;&#x430;&#x43B; &#x442;&#x435;&#x43A;&#x441;&#x442; &#x43E; &#x437;&#x430;&#x434;&#x430;&#x447;&#x435; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x44F; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432; &#x438; &#x438;&#x434;&#x435;&#x439;, &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x44E;&#x449;&#x438;&#x445; &#x44D;&#x442;&#x443; &#x437;&#x430;&#x434;&#x430;&#x447;&#x443; &#x440;&#x435;&#x448;&#x438;&#x442;&#x44C;. &#x427;&#x435;&#x441;&#x442;&#x43D;&#x43E; &#x433;&#x43E;&#x432;&#x43E;&#x440;&#x44F;, &#x43F;&#x440;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x438;&#x442;&#x44C; &#x44D;&#x432;&#x43E;&#x43B;&#x44E;&#x446;&#x438;&#x43E;&#x43D;&#x43D;&#x44B;&#x439; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441; &#x43F;&#x440;&#x438;&#x432;&#x435;&#x434;&#x448;&#x438;&#x439; &#x43D;&#x430;&#x441; &#x43A; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x430;&#x43C; CASP14, &#x43C;&#x43D;&#x435; &#x434;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x435;&#x435;, &#x447;&#x435;&#x43C; &#x43E;&#x431;&#x441;&#x443;&#x436;&#x434;&#x430;&#x442;&#x44C; &#x447;&#x430;&#x441;&#x442;&#x43D;&#x44B;&#x435; &#x43C;&#x43D;&#x435;&#x43D;&#x438;&#x44F; &#x43E;&#x442;&#x43D;&#x43E;&#x441;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x438; &#x44D;&#x442;&#x438;&#x445; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x43E;&#x432;. &#x41D;&#x43E; &#x434;&#x430;&#x432;&#x430;&#x439;&#x442;&#x435; &#x432;&#x441;&#x451;-&#x442;&#x430;&#x43A;&#x438; &#x43F;&#x43E;&#x441;&#x432;&#x44F;&#x442;&#x438;&#x43C; &#x438;&#x43C; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x430;&#x431;&#x437;&#x430;&#x446;&#x435;&#x432; &#x432; &#x431;&#x43B;&#x438;&#x446;-&#x440;&#x435;&#x436;&#x438;&#x43C;&#x435;.</blockquote><h2 id="--4">&#x427;&#x442;&#x43E; &#x433;&#x43E;&#x432;&#x43E;&#x440;&#x44F;&#x442; &#x43F;&#x435;&#x441;&#x441;&#x438;&#x43C;&#x438;&#x441;&#x442;&#x44B;</h2><h3 id="--5">&#x42D;&#x442;&#x43E; &#x436;&#x435; &#x43D;&#x435; &#x444;&#x43E;&#x43B;&#x434;&#x438;&#x43D;&#x433;!</h3><p>&#x42F; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x440;&#x430;&#x437; &#x432;&#x441;&#x442;&#x440;&#x435;&#x447;&#x430;&#x43B; &#x432;&#x44B;&#x441;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x43D;&#x438;&#x44F;, &#x447;&#x442;&#x43E; DeepMind &#x432;&#x441;&#x435;&#x445; &#x43E;&#x431;&#x43C;&#x430;&#x43D;&#x44B;&#x432;&#x430;&#x435;&#x442;, &#x432;&#x44B;&#x434;&#x430;&#x432;&#x430;&#x44F; &#x43E;&#x434;&#x43D;&#x443; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x443; &#x437;&#x430; &#x434;&#x440;&#x443;&#x433;&#x443;&#x44E;. &#x412;&#x435;&#x434;&#x44C; &#x440;&#x435;&#x448;&#x430;&#x43B;&#x430;&#x441;&#x44C; &#x437;&#x430;&#x434;&#x430;&#x447;&#x430; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x44F; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x431;&#x435;&#x43B;&#x43A;&#x430;, &#x430; &#x43D;&#x435; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441;&#x430; &#x444;&#x43E;&#x43B;&#x434;&#x438;&#x43D;&#x433;&#x430;. &#x410; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442;, &#x433;&#x43E;&#x432;&#x43E;&#x440;&#x44F;&#x442; &#x442;&#x430;&#x43A;&#x438;&#x435; &#x43B;&#x44E;&#x434;&#x438;, &#x438; &#x446;&#x435;&#x43D;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x442;&#x443;&#x442; &#x43D;&#x435;&#x442; &#x43D;&#x438;&#x43A;&#x430;&#x43A;&#x43E;&#x439;.</p><p>&#x412; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441;&#x435; &#x43F;&#x43E;&#x432;&#x435;&#x441;&#x442;&#x432;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x44F; &#x443;&#x436;&#x435; &#x43E;&#x442;&#x43C;&#x435;&#x447;&#x430;&#x43B;, &#x447;&#x442;&#x43E; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x435; &#x442;&#x435;&#x440;&#x43C;&#x438;&#x43D;&#x430; &quot;folding problem&quot; &#x43A; &#x437;&#x430;&#x434;&#x430;&#x447;&#x435; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x44F; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x43F;&#x43E;&#x432;&#x441;&#x435;&#x43C;&#x435;&#x441;&#x442;&#x435;&#x43D;, &#x442;&#x430;&#x43A; &#x447;&#x442;&#x43E; &#x442;&#x430;&#x43A;&#x438;&#x445; &#x43A;&#x440;&#x438;&#x442;&#x438;&#x43A;&#x43E;&#x432; &#x44F; &#x437;&#x430;&#x43F;&#x438;&#x441;&#x44B;&#x432;&#x430;&#x44E; &#x432; &#x440;&#x430;&#x437;&#x440;&#x44F;&#x434; &#x442;&#x435;&#x445; &#x441;&#x430;&#x43C;&#x44B;&#x445; &#x43F;&#x443;&#x440;&#x438;&#x441;&#x442;&#x43E;&#x432;, &#x447;&#x442;&#x43E;, &#x43D;&#x430; &#x441;&#x430;&#x43C;&#x43E;&#x43C; &#x434;&#x435;&#x43B;&#x435;, &#x43D;&#x435;&#x43F;&#x43B;&#x43E;&#x445;&#x43E;. &#x41D;&#x43E; &#x432;&#x430;&#x436;&#x43D;&#x43E;&#x439; &#x440;&#x43E;&#x43B;&#x438; &#x44D;&#x442;&#x438; &#x432;&#x44B;&#x441;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x43D;&#x438;&#x44F;, &#x43D;&#x430; &#x43C;&#x43E;&#x439; &#x432;&#x437;&#x433;&#x43B;&#x44F;&#x434;, &#x43D;&#x435; &#x438;&#x433;&#x440;&#x430;&#x44E;&#x442;, &#x432;&#x43E; &#x432;&#x441;&#x44F;&#x43A;&#x43E;&#x43C; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435;, &#x43F;&#x43E;&#x43A;&#x430; &#x43C;&#x44B; &#x432;&#x435;&#x440;&#x438;&#x43C; &#x432; &#x442;&#x43E;, &#x447;&#x442;&#x43E; &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442;&#x43D;&#x43E;&#x439; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x434;&#x43E;&#x441;&#x442;&#x430;&#x442;&#x43E;&#x447;&#x43D;&#x43E; &#x434;&#x43B;&#x44F; &#x442;&#x43E;&#x433;&#x43E;, &#x447;&#x442;&#x43E;&#x431; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x443;. &#x41F;&#x43E; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435;&#x439; &#x447;&#x430;&#x441;&#x442;&#x438;, <a href="https://en.wikipedia.org/wiki/Anfinsen%27s_dogma?ref=yakovlev.me">&#x43C;&#x44B; &#x432; &#x44D;&#x442;&#x43E; &#x432;&#x435;&#x440;&#x438;&#x43C;</a>, &#x43D;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x43D;&#x44E;&#x430;&#x43D;&#x441;&#x44B;, &#x43E; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x445; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43D;&#x435;&#x43C;&#x43D;&#x43E;&#x433;&#x43E; &#x43F;&#x43E;&#x437;&#x436;&#x435;.</p><p>&#x410; &#x432;&#x43E;&#x442; &#x441;&#x43E;&#x43E;&#x431;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x44F;, &#x447;&#x442;&#x43E; &#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x430;&#x44F; &#x446;&#x435;&#x43D;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x44F; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440; &#x43D;&#x438;&#x437;&#x43A;&#x430; &#x43C;&#x43D;&#x435; &#x43A;&#x430;&#x436;&#x443;&#x442;&#x441;&#x44F; &#x434;&#x43E;&#x432;&#x43E;&#x43B;&#x44C;&#x43D;&#x43E; &#x432;&#x440;&#x435;&#x434;&#x43D;&#x44B;&#x43C;&#x438; &#x43F;&#x435;&#x440;&#x435;&#x434;&#x435;&#x440;&#x433;&#x438;&#x432;&#x430;&#x43D;&#x438;&#x44F;&#x43C;&#x438;. &#x414;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;, &#x434;&#x43B;&#x44F; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44F; &#x440;&#x44F;&#x434;&#x430; &#x432;&#x430;&#x436;&#x43D;&#x435;&#x439;&#x448;&#x438;&#x445; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C; &#x431;&#x44B;&#x43B;&#x43E; &#x431;&#x44B; &#x43A;&#x440;&#x430;&#x439;&#x43D;&#x435; &#x43F;&#x43E;&#x43B;&#x435;&#x437;&#x43D;&#x43E; &#x437;&#x43D;&#x430;&#x442;&#x44C; &#x43F;&#x443;&#x442;&#x44C;, &#x43F;&#x43E; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x43C;&#x443; &#x431;&#x435;&#x43B;&#x43E;&#x43A; &#x441;&#x432;&#x43E;&#x440;&#x430;&#x447;&#x438;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x43A; &#x438;&#x442;&#x43E;&#x433;&#x43E;&#x432;&#x43E;&#x439; &#x444;&#x43E;&#x440;&#x43C;&#x435;, &#x43D;&#x43E; &#x43F;&#x43E;&#x434;&#x430;&#x432;&#x43B;&#x44F;&#x44E;&#x449;&#x435;&#x435; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x438;&#x43D;&#x441;&#x442;&#x432;&#x43E; &#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x445; &#x437;&#x430;&#x434;&#x430;&#x447; &#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x44B;&#x445; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440; (&#x43D;&#x43E;, &#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;, &#x43D;&#x435; &#x438;&#x441;&#x447;&#x435;&#x440;&#x43F;&#x44B;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x438;&#x43C;&#x438;). &#x412;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x43A;&#x43E;&#x433;&#x434;&#x430;-&#x43D;&#x438;&#x431;&#x443;&#x434;&#x44C; &#x43D;&#x435; &#x442;&#x440;&#x430;&#x442;&#x438;&#x442;&#x44C; &#x43F;&#x43E; 2 &#x433;&#x43E;&#x434;&#x430; &#x43D;&#x430; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x438;&#x435; &#x442;&#x430;&#x43A;&#x438;&#x445; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440; &#x44D;&#x43A;&#x441;&#x43F;&#x435;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x43C;&#x438; &#x441;&#x43F;&#x43E;&#x441;&#x43E;&#x431;&#x430;&#x43C;&#x438; &#x431;&#x44B;&#x43B;&#x430; &#x431;&#x44B; &#x43D;&#x430;&#x441;&#x442;&#x43E;&#x44F;&#x449;&#x438;&#x43C; &#x43F;&#x440;&#x43E;&#x440;&#x44B;&#x432;&#x43E;&#x43C;.</p><h3 id="--6">&#x42D;&#x442;&#x43E; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x441; &#x43E;&#x434;&#x43D;&#x43E;&#x434;&#x43E;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x43C;&#x438; &#x431;&#x435;&#x43B;&#x43A;&#x430;&#x43C;&#x438;</h3><p>&#x41C;&#x43D;&#x43E;&#x433;&#x438;&#x435; &#x431;&#x435;&#x43B;&#x43A;&#x438; &#x443;&#x43F;&#x430;&#x43A;&#x43E;&#x432;&#x430;&#x43D;&#x44B; &#x43D;&#x435; &#x435;&#x434;&#x438;&#x43D;&#x44B;&#x43C; &#x434;&#x43E;&#x43C;&#x435;&#x43D;&#x43E;&#x43C;, &#x430; &#x441;&#x43E;&#x441;&#x442;&#x43E;&#x44F;&#x442; &#x438;&#x437; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x438;&#x445; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x443;&#x43F;&#x430;&#x43A;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x444;&#x440;&#x430;&#x433;&#x43C;&#x435;&#x43D;&#x43E;&#x432; &#x2014; &#x434;&#x43E;&#x43C;&#x435;&#x43D;&#x43E;&#x432;. &#x422;&#x438;&#x43F;&#x438;&#x447;&#x43D;&#x44B;&#x43C; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;&#x43E;&#x43C; &#x44F;&#x432;&#x43B;&#x44F;&#x44E;&#x442;&#x441;&#x44F; &#x441;&#x442;&#x43E;&#x43B;&#x44C; &#x431;&#x43B;&#x438;&#x437;&#x43A;&#x438;&#x435; &#x43C;&#x43D;&#x435; &#x430;&#x43D;&#x442;&#x438;&#x442;&#x435;&#x43B;&#x430;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/12/1igt_domains.png" class="kg-image" alt="&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43B;&#x43E;&#x432; &#x43E;&#x431; AlphaFold2" loading="lazy" width="1920" height="1080" srcset="https://yakovlev.me/content/images/size/w600/2020/12/1igt_domains.png 600w, https://yakovlev.me/content/images/size/w1000/2020/12/1igt_domains.png 1000w, https://yakovlev.me/content/images/size/w1600/2020/12/1igt_domains.png 1600w, https://yakovlev.me/content/images/2020/12/1igt_domains.png 1920w" sizes="(min-width: 720px) 720px"><figcaption>&#x410;&#x43D;&#x442;&#x438;&#x442;&#x435;&#x43B;&#x43E; &#x43A;&#x43B;&#x430;&#x441;&#x441;&#x430; G, &#x43F;&#x43E;&#x43A;&#x440;&#x430;&#x448;&#x435;&#x43D;&#x43D;&#x43E;&#x435; &#x43F;&#x43E; &#x434;&#x43E;&#x43C;&#x435;&#x43D;&#x430;&#x43C; (<a href="https://www.rcsb.org/structure/1IGT?ref=yakovlev.me">&#x421;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x430;</a>)</figcaption></figure><p>&#x41E;&#x433;&#x440;&#x430;&#x43D;&#x438;&#x447;&#x435;&#x43D;&#x438;&#x435; &#x434;&#x43E;&#x432;&#x43E;&#x43B;&#x44C;&#x43D;&#x43E; &#x441;&#x435;&#x440;&#x44C;&#x435;&#x437;&#x43D;&#x43E;&#x435;, &#x43D;&#x43E; &#x43D;&#x435; &#x43D;&#x435;&#x43F;&#x440;&#x435;&#x43E;&#x434;&#x43E;&#x43B;&#x438;&#x43C;&#x43E;&#x435;. &#x41C;&#x43D;&#x435; &#x43A;&#x430;&#x436;&#x435;&#x442;&#x441;&#x44F;, &#x43F;&#x440;&#x438;&#x43D;&#x446;&#x438;&#x43F;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x43E;&#x433;&#x440;&#x430;&#x43D;&#x438;&#x447;&#x435;&#x43D;&#x438;&#x439;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x431;&#x44B; &#x43F;&#x440;&#x435;&#x43F;&#x44F;&#x442;&#x441;&#x442;&#x432;&#x43E;&#x432;&#x430;&#x43B;&#x438; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x438;&#x44E; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x43C;&#x43D;&#x43E;&#x433;&#x43E;&#x434;&#x43E;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x445; &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432; &#x43D;&#x435;&#x442;. &#x41D;&#x43E; &#x442;&#x435;&#x43A;&#x443;&#x449;&#x435;&#x435; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x435;, &#x43A;&#x430;&#x436;&#x435;&#x442;&#x441;&#x44F;, &#x43F;&#x43E;&#x43A;&#x430; &#x440;&#x435;&#x448;&#x430;&#x442;&#x44C; &#x442;&#x430;&#x43A;&#x438;&#x435; &#x437;&#x430;&#x434;&#x430;&#x447;&#x438; &#x43D;&#x435; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x435;&#x442;.</p><p>&#x413;&#x43E;&#x440;&#x430;&#x437;&#x434;&#x43E; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x435;&#x435;, &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x431;&#x443;&#x434;&#x443;&#x442; &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x44B;, &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x44E;&#x449;&#x438;&#x435; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x430;&#x442;&#x44C; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432;, &#x441;&#x43E;&#x441;&#x442;&#x43E;&#x44F;&#x449;&#x438;&#x445; &#x438;&#x437; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x438;&#x445; &#x43D;&#x435;&#x437;&#x430;&#x432;&#x438;&#x441;&#x438;&#x43C;&#x44B;&#x445; &#x446;&#x435;&#x43F;&#x435;&#x439; &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442;. <a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7355305/?ref=yakovlev.me">&#x41F;&#x443;&#x431;&#x43B;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438; &#x43F;&#x43E; &#x432;&#x441;&#x451; &#x442;&#x435;&#x43C; &#x436;&#x435; &#x430;&#x43D;&#x442;&#x438;&#x442;&#x435;&#x43B;&#x430;&#x43C;</a> &#x43D;&#x430;&#x43C;&#x435;&#x43A;&#x430;&#x44E;&#x442;, &#x447;&#x442;&#x43E; &#x438; &#x437;&#x434;&#x435;&#x441;&#x44C; &#x43E;&#x441;&#x43E;&#x431;&#x44B;&#x445; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C; &#x43D;&#x435;&#x442;, &#x438; &#x43C;&#x43E;&#x434;&#x438;&#x444;&#x438;&#x446;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43D;&#x435;&#x439;&#x440;&#x43E;&#x441;&#x435;&#x442;&#x44C; &#x434;&#x43B;&#x44F; &#x43F;&#x440;&#x438;&#x435;&#x43C;&#x430; &#x441;&#x440;&#x430;&#x437;&#x443; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x438;&#x445; &#x446;&#x435;&#x43F;&#x435;&#x439; &#x432;&#x43F;&#x43E;&#x43B;&#x43D;&#x435; &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;. &#x41A; &#x442;&#x43E;&#x43C;&#x443; &#x436;&#x435; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x442;&#x430;&#x43A;&#x438;&#x445; &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432; &#x431;&#x43B;&#x438;&#x436;&#x435; &#x43A; &#x437;&#x430;&#x434;&#x430;&#x447;&#x435; &#x43F;&#x43E;&#x438;&#x441;&#x43A;&#x430; &#x441;&#x43E;&#x441;&#x442;&#x44B;&#x43A;&#x43E;&#x432;&#x43A;&#x438; &#x43C;&#x43E;&#x43B;&#x435;&#x43A;&#x443;&#x43B; (<a href="https://en.wikipedia.org/wiki/Docking_(molecular)?ref=yakovlev.me">&#x43C;&#x43E;&#x43B;&#x435;&#x43A;&#x443;&#x43B;&#x44F;&#x440;&#x43D;&#x44B;&#x439; &#x434;&#x43E;&#x43A;&#x438;&#x43D;&#x433;</a>), &#x430; &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x443;, &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;, &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x432;&#x43E;&#x43E;&#x431;&#x449;&#x435; &#x43D;&#x435; &#x440;&#x430;&#x441;&#x441;&#x43C;&#x430;&#x442;&#x440;&#x438;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x432; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442;&#x435; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x44F; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B;. &#x41D;&#x43E; &#x44D;&#x442;&#x43E; &#x432;&#x43E;&#x43F;&#x440;&#x43E;&#x441; &#x432;&#x43A;&#x443;&#x441;&#x43E;&#x432;&#x44B;&#x445; &#x43F;&#x440;&#x435;&#x434;&#x43F;&#x43E;&#x447;&#x442;&#x435;&#x43D;&#x438;&#x439;.</p><h3 id="--7">&#x41F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x44E;&#x442;&#x441;&#x44F; &#x443;&#x441;&#x440;&#x435;&#x434;&#x43D;&#x435;&#x43D;&#x43D;&#x44B;&#x435; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B;</h3><p>&#x41D;&#x430; &#x441;&#x430;&#x43C;&#x43E;&#x43C; &#x434;&#x435;&#x43B;&#x435;, &#x441;&#x43E;&#x43E;&#x431;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x43E; &#x442;&#x43E;&#x43C;, &#x447;&#x442;&#x43E; &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442;&#x43D;&#x430;&#x44F; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x43E;&#x434;&#x43D;&#x43E;&#x437;&#x43D;&#x430;&#x447;&#x43D;&#x43E; &#x43E;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x44F;&#x435;&#x442; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x443; &#x430;&#x431;&#x441;&#x43E;&#x43B;&#x44E;&#x442;&#x43D;&#x43E; &#x43B;&#x43E;&#x436;&#x43D;&#x43E;. &#x41D;&#x438;&#x447;&#x443;&#x442;&#x44C; &#x43D;&#x435; &#x43C;&#x435;&#x43D;&#x44C;&#x448;&#x435; &#x43D;&#x430; &#x44D;&#x442;&#x43E; &#x432;&#x43B;&#x438;&#x44F;&#x44E;&#x442; &#x443;&#x441;&#x43B;&#x43E;&#x432;&#x438;&#x44F;, &#x432; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x445; &#x441;&#x432;&#x43E;&#x440;&#x430;&#x447;&#x438;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x431;&#x435;&#x43B;&#x43E;&#x43A;: &#x43A;&#x43E;&#x43D;&#x446;&#x435;&#x43D;&#x442;&#x440;&#x430;&#x446;&#x438;&#x44F; &#x440;&#x430;&#x437;&#x43B;&#x438;&#x447;&#x43D;&#x44B;&#x445; &#x438;&#x43E;&#x43D;&#x43E;&#x432;, &#x43F;&#x440;&#x438;&#x441;&#x443;&#x442;&#x441;&#x442;&#x432;&#x438;&#x435; &#x43F;&#x43E;&#x431;&#x43B;&#x438;&#x437;&#x43E;&#x441;&#x442;&#x438; &#x434;&#x440;&#x443;&#x433;&#x438;&#x445; &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432; &#x438; &#x442;&#x430;&#x43A; &#x434;&#x430;&#x43B;&#x435;&#x435;. &#x412; &#x437;&#x430;&#x432;&#x438;&#x441;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x438; &#x43E;&#x442; &#x44D;&#x442;&#x438;&#x445; &#x443;&#x441;&#x43B;&#x43E;&#x432;&#x438;&#x439; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x438;&#x440;&#x443;&#x44E;&#x449;&#x438;&#x435; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x43C;&#x43E;&#x433;&#x443;&#x442; &#x431;&#x44B;&#x442;&#x44C; &#x441;&#x43E;&#x432;&#x441;&#x435;&#x43C; &#x440;&#x430;&#x437;&#x43B;&#x438;&#x447;&#x43D;&#x44B;.</p><p>&#x422;&#x440;&#x435;&#x43D;&#x438;&#x440;&#x43E;&#x432;&#x43A;&#x430; AlphaFold (&#x43A;&#x430;&#x43A; &#x438; &#x432;&#x441;&#x435;&#x445; &#x43F;&#x440;&#x43E;&#x447;&#x438;&#x445; &#x430;&#x43B;&#x433;&#x43E;&#x440;&#x438;&#x442;&#x43C;&#x43E;&#x432; &#x43C;&#x430;&#x448;&#x438;&#x43D;&#x43D;&#x43E;&#x433;&#x43E; &#x43E;&#x431;&#x443;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x434;&#x43B;&#x44F; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44F; &#x434;&#x430;&#x43D;&#x43D;&#x43E;&#x439; &#x437;&#x430;&#x434;&#x430;&#x447;&#x438;) &#x43F;&#x440;&#x43E;&#x438;&#x441;&#x445;&#x43E;&#x434;&#x438;&#x442; &#x43D;&#x430; &#x431;&#x430;&#x437;&#x435; &#x44D;&#x43A;&#x441;&#x43F;&#x435;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440; <a href="https://www.rcsb.org/?ref=yakovlev.me">Protein Data Bank</a> (PDB), &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x441;&#x43E;&#x434;&#x435;&#x440;&#x436;&#x438;&#x442; &#x431;&#x435;&#x43B;&#x43A;&#x438; &#x432; &#x441;&#x430;&#x43C;&#x44B;&#x445; &#x440;&#x430;&#x437;&#x43B;&#x438;&#x447;&#x43D;&#x44B;&#x445; &#x443;&#x441;&#x43B;&#x43E;&#x432;&#x438;&#x44F;&#x445;. &#x422;&#x430;&#x43C; &#x437;&#x430;&#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43D;&#x430;&#x439;&#x442;&#x438; &#x43C;&#x43D;&#x43E;&#x436;&#x435;&#x441;&#x442;&#x432;&#x43E; &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432; &#x441; &#x43E;&#x434;&#x438;&#x43D;&#x430;&#x43A;&#x43E;&#x432;&#x43E;&#x439; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x44C;&#x44E;, &#x43D;&#x43E; &#x440;&#x430;&#x437;&#x43B;&#x438;&#x447;&#x43D;&#x44B;&#x43C;&#x438; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x430;&#x43C;&#x438;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/12/image-9.png" class="kg-image" alt="&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43B;&#x43E;&#x432; &#x43E;&#x431; AlphaFold2" loading="lazy" width="1000" height="500" srcset="https://yakovlev.me/content/images/size/w600/2020/12/image-9.png 600w, https://yakovlev.me/content/images/2020/12/image-9.png 1000w" sizes="(min-width: 720px) 720px"><figcaption>&#x414;&#x432;&#x435; &#x440;&#x430;&#x437;&#x43D;&#x44B;&#x435; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x446;&#x438;&#x43A;&#x43B;&#x438;&#x43D;-&#x437;&#x430;&#x432;&#x438;&#x441;&#x438;&#x43C;&#x43E;&#x439; &#x43A;&#x438;&#x43D;&#x430;&#x437;&#x44B; 8 (<a href="https://www.rcsb.org/structure/6T41?ref=yakovlev.me">6T41</a> &#x438; <a href="https://www.rcsb.org/structure/6TPA?ref=yakovlev.me">6TPA</a>)</figcaption></figure><p>&#x414;&#x43B;&#x44F; &#x43D;&#x430;&#x441; &#x44D;&#x442;&#x43E; &#x43E;&#x437;&#x43D;&#x430;&#x447;&#x430;&#x435;&#x442;, &#x447;&#x442;&#x43E; AlphaFold &#x443;&#x441;&#x440;&#x435;&#x434;&#x43D;&#x44F;&#x435;&#x442; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B;, &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x430;&#x44F; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x44B;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x43C;&#x43E;&#x433;&#x443;&#x442; &#x43D;&#x435; &#x441;&#x43E;&#x43E;&#x442;&#x432;&#x435;&#x442;&#x441;&#x442;&#x432;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43D;&#x438;&#x43A;&#x430;&#x43A;&#x438;&#x43C; &#x440;&#x435;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x43C; &#x443;&#x441;&#x43B;&#x43E;&#x432;&#x438;&#x44F;&#x43C;, &#x430;, &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442;, &#x442;&#x430;&#x43A;&#x438;&#x435; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x44B; &#x431;&#x435;&#x441;&#x43F;&#x43E;&#x43B;&#x435;&#x437;&#x43D;&#x44B;.</p><p>&#x41D;&#x430; &#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x43A;&#x435;, &#x432;&#x441;&#x451;, &#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;, &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x435;&#x435;. &#x414;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x446;&#x435;&#x43B;&#x44B;&#x435; &#x43A;&#x43B;&#x430;&#x441;&#x441;&#x44B; &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432; &#x438;&#x43C;&#x435;&#x435;&#x442; &#x441;&#x43C;&#x44B;&#x441;&#x43B; &#x440;&#x430;&#x441;&#x441;&#x43C;&#x430;&#x442;&#x440;&#x438;&#x432;&#x430;&#x442;&#x44C; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x432;&#x43C;&#x435;&#x441;&#x442;&#x435; &#x441; &#x443;&#x441;&#x43B;&#x43E;&#x432;&#x438;&#x44F;&#x43C;&#x438;, &#x43F;&#x43E;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x443; &#x438;&#x445; &#x43C;&#x435;&#x445;&#x430;&#x43D;&#x438;&#x437;&#x43C; &#x434;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x44F; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x432; &#x442;&#x43E;&#x43C;, &#x447;&#x442;&#x43E; &#x43E;&#x43D;&#x438; &#x43F;&#x43E;-&#x440;&#x430;&#x437;&#x43D;&#x43E;&#x43C;&#x443; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x43E;&#x43D;&#x438;&#x440;&#x443;&#x44E;&#x442; &#x432; &#x440;&#x430;&#x437;&#x43D;&#x44B;&#x445; &#x441;&#x438;&#x442;&#x443;&#x430;&#x446;&#x438;&#x44F;&#x445;. &#x41D;&#x43E; &#x442;&#x430;&#x43A;&#x438;&#x445; &#x43E;&#x431;&#x44A;&#x435;&#x43A;&#x442;&#x43E;&#x432; &#x44F;&#x432;&#x43D;&#x43E; &#x43D;&#x435; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x438;&#x43D;&#x441;&#x442;&#x432;&#x43E;.</p><p>&#x41F;&#x440;&#x438; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x435; &#x43B;&#x435;&#x43A;&#x430;&#x440;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x44B;&#x445; &#x441;&#x440;&#x435;&#x434;&#x441;&#x442;&#x432; &#x43C;&#x44B;, &#x43F;&#x440;&#x435;&#x438;&#x43C;&#x443;&#x449;&#x435;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x43E;, &#x441;&#x442;&#x430;&#x43B;&#x43A;&#x438;&#x432;&#x430;&#x435;&#x43C;&#x441;&#x44F; &#x441; &#x43E;&#x431;&#x44A;&#x435;&#x43A;&#x442;&#x430;&#x43C;&#x438;, &#x434;&#x43B;&#x44F; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x445; &#x443;&#x441;&#x43B;&#x43E;&#x432;&#x438;&#x44F; &#x43D;&#x435; &#x43E;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x44E;&#x442; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x433;&#x43E; &#x432;&#x43B;&#x438;&#x44F;&#x43D;&#x438;&#x44F;. &#x412;&#x441;&#x435; &#x434;&#x438;&#x437;&#x430;&#x439;&#x43D;&#x44B; &#x430;&#x43D;&#x442;&#x438;&#x442;&#x435;&#x43B; &#x43A; &#x43F;&#x43E;&#x432;&#x435;&#x440;&#x445;&#x43D;&#x43E;&#x441;&#x442;&#x43D;&#x44B;&#x43C; &#x440;&#x435;&#x446;&#x435;&#x43F;&#x442;&#x43E;&#x440;&#x430;&#x43C;, &#x43C;&#x43E;&#x43B;&#x435;&#x43A;&#x443;&#x43B; &#x43A; &#x43A;&#x438;&#x43D;&#x430;&#x437;&#x430;&#x43C; &#x438; &#x43A;&#x430;&#x43F;&#x441;&#x438;&#x434;&#x43E;&#x432; &#x432;&#x438;&#x440;&#x443;&#x441;&#x43E;&#x432; &#x434;&#x43B;&#x44F; &#x433;&#x435;&#x43D;&#x43E;&#x442;&#x435;&#x440;&#x430;&#x43F;&#x438;&#x438; &#x432; &#x43F;&#x43E;&#x434;&#x430;&#x432;&#x43B;&#x44F;&#x44E;&#x449;&#x435;&#x43C; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x438;&#x43D;&#x441;&#x442;&#x432;&#x435; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435;&#x432; &#x434;&#x435;&#x43B;&#x430;&#x44E;&#x442;&#x441;&#x44F; &#x43E;&#x431;&#x44B;&#x447;&#x43D;&#x43E; &#x431;&#x435;&#x437; &#x443;&#x447;&#x435;&#x442;&#x430; &#x443;&#x441;&#x43B;&#x43E;&#x432;&#x438;&#x439;, &#x43A;&#x430;&#x43A; &#x440;&#x430;&#x437; &#x434;&#x43B;&#x44F; &#x443;&#x441;&#x440;&#x435;&#x434;&#x43D;&#x435;&#x43D;&#x43D;&#x43E;&#x433;&#x43E; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x44F;. &#x412; &#x441;&#x438;&#x442;&#x443;&#x430;&#x446;&#x438;&#x44F;&#x445;, &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x43E;&#x43D;&#x438; &#x432;&#x441;&#x451; &#x436;&#x435; &#x43D;&#x443;&#x436;&#x43D;&#x44B;, &#x43C;&#x44B; &#x43F;&#x440;&#x438;&#x431;&#x435;&#x433;&#x430;&#x435;&#x43C; &#x43A; <a href="https://en.wikipedia.org/wiki/Molecular_dynamics?ref=yakovlev.me">&#x43C;&#x43E;&#x43B;&#x435;&#x43A;&#x443;&#x43B;&#x44F;&#x440;&#x43D;&#x44B;&#x43C; &#x441;&#x438;&#x43C;&#x443;&#x43B;&#x44F;&#x446;&#x438;&#x44F;&#x43C;</a>, &#x433;&#x434;&#x435; &#x43D;&#x430;&#x448; &#x431;&#x435;&#x43B;&#x43E;&#x43A; &#x443;&#x436;&#x435; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &quot;&#x43F;&#x43E;&#x441;&#x43E;&#x43B;&#x438;&#x442;&#x44C;&quot; &#x43D;&#x443;&#x436;&#x43D;&#x44B;&#x43C; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x43C;. &#x412;&#x441;&#x451;-&#x442;&#x430;&#x43A;&#x438; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x435; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440; &#x2014; &#x44D;&#x442;&#x43E; &#x43D;&#x435; &#x435;&#x434;&#x438;&#x43D;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x44B;&#x439; &#x43C;&#x435;&#x442;&#x43E;&#x434; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x43D;&#x43E;&#x439; &#x431;&#x438;&#x43E;&#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x442;&#x438;&#x43A;&#x438;, &#x438; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; &#x433;&#x440;&#x430;&#x43C;&#x43E;&#x442;&#x43D;&#x43E; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x44F;&#x442;&#x44C; &#x434;&#x440;&#x443;&#x433;&#x438;&#x435;.</p><figure class="kg-card kg-embed-card kg-card-hascaption"><iframe width="612" height="344" src="https://www.youtube.com/embed/UaNe4d2nm7g?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><figcaption>&#x412;&#x435;&#x441;&#x435;&#x43B;&#x43E; &#x438; &#x43D;&#x430; &#x43F;&#x430;&#x43B;&#x44C;&#x446;&#x430;&#x445; &#x440;&#x430;&#x441;&#x441;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x44E; &#x43F;&#x440;&#x43E; &#x43C;&#x43E;&#x43B;&#x435;&#x43A;&#x443;&#x43B;&#x44F;&#x440;&#x43D;&#x443;&#x44E; &#x434;&#x438;&#x43D;&#x430;&#x43C;&#x438;&#x43A;&#x443;</figcaption></figure><p>&#x41E;&#x434;&#x43D;&#x430;&#x43A;&#x43E; &#x43D;&#x430;&#x434;&#x43E; &#x447;&#x435;&#x441;&#x442;&#x43D;&#x43E; &#x43F;&#x440;&#x438;&#x437;&#x43D;&#x430;&#x442;&#x44C;, &#x447;&#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x437;&#x430;&#x434;&#x430;&#x447;&#x438;, &#x432; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x445; &#x44D;&#x442;&#x43E; &#x432;&#x441;&#x451; &#x43D;&#x435; &#x441;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442;. &#x418;&#x437;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x44F; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x432; &#x440;&#x430;&#x437;&#x43B;&#x438;&#x447;&#x43D;&#x44B;&#x445; &#x443;&#x441;&#x43B;&#x43E;&#x432;&#x438;&#x44F;&#x445; &#x441;&#x442;&#x43E;&#x43B;&#x44C; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;, &#x447;&#x442;&#x43E; &#x432;&#x44B;&#x447;&#x438;&#x441;&#x43B;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x435; &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x44B; &#x43F;&#x43E;&#x43A;&#x430; &#x43D;&#x435; &#x441;&#x43F;&#x43E;&#x441;&#x43E;&#x431;&#x43D;&#x44B; &#x438;&#x445; &#x441;&#x438;&#x43C;&#x443;&#x43B;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x432; &#x434;&#x438;&#x43D;&#x430;&#x43C;&#x438;&#x43A;&#x435;. &#x412; &#x44D;&#x442;&#x43E;&#x43C; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435; &#x43D;&#x430;&#x43C; &#x43D;&#x443;&#x436;&#x43D;&#x44B; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B;, &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x43D;&#x44B;&#x435; &#x432; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x443;&#x44E;&#x449;&#x438;&#x445; &#x443;&#x441;&#x43B;&#x43E;&#x432;&#x438;&#x44F;&#x445;. &#x41F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x430; &#x432; &#x442;&#x43E;&#x43C;, &#x447;&#x442;&#x43E; &#x435;&#x441;&#x43B;&#x438; &#x43C;&#x44B; &#x43D;&#x430;&#x447;&#x43D;&#x435;&#x43C; &#x434;&#x435;&#x43B;&#x438;&#x442;&#x44C; &#x43E;&#x431;&#x443;&#x447;&#x430;&#x44E;&#x449;&#x443;&#x44E; &#x432;&#x44B;&#x431;&#x43E;&#x440;&#x43A;&#x443; &#x43D;&#x430; &#x43F;&#x43E;&#x434;&#x432;&#x44B;&#x431;&#x43E;&#x440;&#x43A;&#x438; &#x432; &#x437;&#x430;&#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x443;&#x441;&#x43B;&#x43E;&#x432;&#x438;&#x44F;&#x445;, <a href="https://www.rcsb.org/stats/growth/growth-released-structures?ref=yakovlev.me">170 &#x442;&#x44B;&#x441;&#x44F;&#x447; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;</a> &#x438;&#x437; PDB &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x443;&#x436;&#x435; &#x438; &#x43D;&#x435; &#x445;&#x432;&#x430;&#x442;&#x438;&#x442;&#x44C;, &#x447;&#x442;&#x43E;&#x431; &#x43D;&#x43E;&#x440;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E; &#x43E;&#x431;&#x443;&#x447;&#x438;&#x442;&#x44C; &#x43C;&#x43E;&#x434;&#x435;&#x43B;&#x44C;. &#x410;, &#x43C;&#x43E;&#x436;&#x435;&#x442;, &#x438; &#x445;&#x432;&#x430;&#x442;&#x438;&#x442;. &#x412; &#x43B;&#x44E;&#x431;&#x43E;&#x43C; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435;, AlphaFold &#x441;&#x435;&#x439;&#x447;&#x430;&#x441; &#x442;&#x430;&#x43A; &#x434;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x43D;&#x435; &#x443;&#x43C;&#x435;&#x435;&#x442;.</p><h3 id="--8">&#x41C;&#x44B; &#x43D;&#x435; &#x437;&#x43D;&#x430;&#x435;&#x43C; &#x433;&#x440;&#x430;&#x43D;&#x438;&#x446; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x438; &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x430;</h3><p>&#x412; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x44F;&#x445;, &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x43C;&#x44B; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x435;&#x43C; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x43D;&#x435;&#x438;&#x437;&#x432;&#x435;&#x441;&#x442;&#x43D;&#x44B;&#x445; &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432; &#x438;&#x437; &#x43D;&#x43E;&#x432;&#x44B;&#x445; &#x441;&#x435;&#x43C;&#x435;&#x439;&#x441;&#x442;&#x432;, &#x43C;&#x44B; &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x438;&#x44F; &#x43D;&#x435; &#x438;&#x43C;&#x435;&#x435;&#x43C;, &#x43A;&#x430;&#x43A; &#x432;&#x44B;&#x433;&#x43B;&#x44F;&#x434;&#x438;&#x442; &#x43E;&#x442;&#x432;&#x435;&#x442;, &#x430; &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x443; &#x43D;&#x435; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x438;&#x442;&#x44C; &#x438;&#x441;&#x442;&#x438;&#x43D;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x44F;. &#x422;&#x430;&#x43A;&#x438;&#x43C; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x43C; &#x43C;&#x44B; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x430;&#x435;&#x43C; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x43E;&#x442;&#x432;&#x435;&#x442;, &#x43D;&#x435; &#x437;&#x43D;&#x430;&#x44F;, &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x43E;&#x43D; &#x432;&#x435;&#x440;&#x43D;&#x44B;&#x439;, &#x430; &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x43D;&#x435;&#x442;.</p><p>&#x41D;&#x435; &#x442;&#x43E;, &#x447;&#x442;&#x43E;&#x431; &#x44D;&#x442;&#x430; &#x441;&#x438;&#x442;&#x443;&#x430;&#x446;&#x438;&#x44F; &#x431;&#x44B;&#x43B;&#x430; &#x43D;&#x435;&#x442;&#x438;&#x43F;&#x438;&#x447;&#x43D;&#x43E;&#x439; &#x434;&#x43B;&#x44F; &#x433;&#x43B;&#x443;&#x431;&#x43E;&#x43A;&#x43E;&#x433;&#x43E; &#x43E;&#x431;&#x443;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x2014; &#x43E;&#x431;&#x44B;&#x447;&#x43D;&#x43E; &#x43F;&#x440;&#x438; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x438; &#x437;&#x430;&#x434;&#x430;&#x447; &#x43D;&#x435;&#x439;&#x440;&#x43E;&#x441;&#x435;&#x442;&#x44F;&#x43C;&#x438; &#x43C;&#x44B; &#x437;&#x43D;&#x430;&#x435;&#x43C; &#x438; &#x442;&#x43E;&#x433;&#x43E; &#x43C;&#x435;&#x43D;&#x44C;&#x448;&#x435;. &#x421;&#x43C;&#x43E;&#x436;&#x435;&#x442;&#x435; &#x43B;&#x438; &#x432;&#x44B; &#x43F;&#x440;&#x43E;&#x438;&#x43D;&#x442;&#x435;&#x440;&#x43F;&#x440;&#x435;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x438; &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x44C;, &#x43F;&#x43E;&#x447;&#x435;&#x43C;&#x443; &#x442;&#x43E;&#x442; &#x438;&#x43B;&#x438; &#x438;&#x43D;&#x43E;&#x439; &#x43E;&#x442;&#x432;&#x435;&#x442; &#x432;&#x44B;&#x434;&#x430;&#x43B;&#x430; <a href="https://en.wikipedia.org/wiki/GPT-3?ref=yakovlev.me">GPT-3</a> &#x441; &#x43C;&#x438;&#x43B;&#x43B;&#x438;&#x43E;&#x43D;&#x430;&#x43C;&#x438; &#x43F;&#x430;&#x440;&#x430;&#x43C;&#x435;&#x442;&#x440;&#x43E;&#x432;? &#x414;&#x430;, &#x43D;&#x438; &#x432; &#x436;&#x438;&#x437;&#x43D;&#x438;. &#x422;&#x435;&#x43C; &#x43D;&#x435; &#x43C;&#x435;&#x43D;&#x435;&#x435; &#x44D;&#x442;&#x43E; &#x43D;&#x435; &#x43C;&#x435;&#x448;&#x430;&#x435;&#x442; &#x43B;&#x44E;&#x434;&#x44F;&#x43C; &#x435;&#x451; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x44F;&#x442;&#x44C;. &#x422;&#x43E;&#x447;&#x43D;&#x43E; &#x442;&#x430;&#x43A; &#x436;&#x435; &#x43C;&#x44B; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x43C; &#x430;&#x431;&#x441;&#x43E;&#x43B;&#x44E;&#x442;&#x43D;&#x43E; &#x43D;&#x435;&#x438;&#x43D;&#x442;&#x440;&#x435;&#x43F;&#x440;&#x435;&#x442;&#x438;&#x440;&#x443;&#x435;&#x43C;&#x44B;&#x435; &#x43C;&#x43E;&#x434;&#x435;&#x43B;&#x438; &#x432; &#x43A;&#x43E;&#x43C;&#x43F;&#x44C;&#x44E;&#x442;&#x435;&#x440;&#x43D;&#x43E;&#x43C; &#x437;&#x440;&#x435;&#x43D;&#x438;&#x438;, &#x442;&#x43E;&#x440;&#x433;&#x43E;&#x432;&#x43B;&#x435; &#x43D;&#x430; &#x431;&#x438;&#x440;&#x436;&#x435;, &#x441;&#x430;&#x43C;&#x43E;&#x443;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x44F;&#x435;&#x43C;&#x44B;&#x445; &#x430;&#x432;&#x442;&#x43E;&#x43C;&#x43E;&#x431;&#x438;&#x43B;&#x44F;&#x445; &#x438; &#x43C;&#x43D;&#x43E;&#x433;&#x43E;&#x43C; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x43C;. &#x422;&#x430;&#x43A; &#x447;&#x442;&#x43E; &#x43E;&#x431;&#x44B;&#x447;&#x43D;&#x43E; &#x44D;&#x442;&#x43E; &#x43D;&#x435; &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x43E;&#x439;.</p><p>&#x421;&#x43E;&#x43E;&#x431;&#x449;&#x435;&#x441;&#x442;&#x432;&#x43E; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x43D;&#x44B;&#x445; &#x431;&#x438;&#x43E;&#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x442;&#x438;&#x43A;&#x43E;&#x432; (&#x434;&#x430;, &#x438; &#x432;&#x43E;&#x43E;&#x431;&#x449;&#x435; &#x43B;&#x44E;&#x434;&#x435;&#x439;, &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x44E;&#x449;&#x438;&#x445; &#x432; &#x431;&#x438;&#x43E;&#x442;&#x435;&#x445;&#x435;) &#x432; &#x44D;&#x442;&#x43E;&#x43C; &#x432;&#x43E;&#x43F;&#x440;&#x43E;&#x441;&#x435; &#x431;&#x43E;&#x43B;&#x435;&#x435; &#x449;&#x435;&#x43F;&#x435;&#x442;&#x438;&#x43B;&#x44C;&#x43D;&#x44B; &#x438; &#x43D;&#x435; &#x43B;&#x44E;&#x431;&#x44F;&#x442; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x44B;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x43D;&#x435; &#x43C;&#x43E;&#x433;&#x443;&#x442; &#x43E;&#x446;&#x435;&#x43D;&#x438;&#x442;&#x44C; &#x43D;&#x430; &#x430;&#x434;&#x435;&#x43A;&#x432;&#x430;&#x442;&#x43D;&#x43E;&#x441;&#x442;&#x44C;. &#x418; &#x44D;&#x442;&#x43E;, &#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;, &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x44C;&#x43D;&#x43E;. &#x41D;&#x43E;, &#x431;&#x43E;&#x44E;&#x441;&#x44C;, &#x441;&#x43B;&#x435;&#x43F;&#x43E;&#x435; &#x434;&#x43E;&#x432;&#x435;&#x440;&#x438;&#x435; &#x43C;&#x430;&#x448;&#x438;&#x43D;&#x43D;&#x43E;&#x43C;&#x443; &#x43E;&#x431;&#x443;&#x447;&#x435;&#x43D;&#x438;&#x44E; &#x43E;&#x434;&#x43D;&#x430;&#x436;&#x434;&#x44B; &#x43D;&#x430;&#x43A;&#x440;&#x43E;&#x435;&#x442; &#x438; &#x44D;&#x442;&#x443; &#x433;&#x430;&#x432;&#x430;&#x43D;&#x44C;.</p><h3 id="--9">&#x422;&#x43E;&#x447;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x432;&#x441;&#x451; &#x435;&#x449;&#x435; &#x43D;&#x435; &#x445;&#x432;&#x430;&#x442;&#x430;&#x435;&#x442; &#x434;&#x43B;&#x44F; &#x440;&#x430;&#x446;&#x438;&#x43E;&#x43D;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x433;&#x43E; &#x434;&#x438;&#x437;&#x430;&#x439;&#x43D;&#x430;</h3><p>&#x412; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x435; &#x430;&#x440;&#x433;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430; &#x43D;&#x430; &#x44D;&#x442;&#x443; &#x442;&#x43E;&#x447;&#x43A;&#x443; &#x437;&#x440;&#x435;&#x43D;&#x438;&#x44F; &#x43F;&#x440;&#x438;&#x432;&#x43E;&#x434;&#x44F;&#x442;&#x441;&#x44F; &#x441;&#x438;&#x442;&#x443;&#x430;&#x446;&#x438;&#x438;, &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x438;&#x437;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x435; &#x43F;&#x43E;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F; &#x430;&#x442;&#x43E;&#x43C;&#x43E;&#x432; &#x43D;&#x430; 1 &#xC5; &#x43F;&#x440;&#x438;&#x432;&#x43E;&#x434;&#x438;&#x442; &#x43A; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x43C;&#x443; &#x438;&#x437;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x44E; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; &#x431;&#x435;&#x43B;&#x43A;&#x430;. &#x42F; &#x442;&#x430;&#x43A;&#x438;&#x43C; &#x43B;&#x44E;&#x434;&#x44F;&#x43C; &#x445;&#x43E;&#x447;&#x443; &#x437;&#x430;&#x434;&#x430;&#x442;&#x44C; &#x432;&#x43E;&#x43F;&#x440;&#x43E;&#x441;: &#x430; &#x43C;&#x43D;&#x43E;&#x433;&#x43E; &#x432;&#x44B; &#x432;&#x438;&#x434;&#x435;&#x43B;&#x438; &#x44D;&#x43A;&#x441;&#x43F;&#x435;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x43B;&#x44C;&#x43D;&#x43E; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x43D;&#x44B;&#x445; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440; &#x441; &#x440;&#x430;&#x437;&#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x435;&#x43C; &#x43B;&#x443;&#x447;&#x448;&#x435; 1 &#xC5;? &#x427;&#x442;&#x43E;&#x431; &#x43D;&#x438;&#x43A;&#x43E;&#x433;&#x43E; &#x43D;&#x435; &#x443;&#x442;&#x440;&#x443;&#x436;&#x434;&#x430;&#x442;&#x44C;, &#x441;&#x430;&#x43C; &#x436;&#x435; &#x43D;&#x430; &#x43D;&#x435;&#x433;&#x43E; &#x438; &#x43E;&#x442;&#x432;&#x435;&#x447;&#x443;. &#x422;&#x430;&#x43A;&#x438;&#x445; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440; 803 &#x448;&#x442;&#x443;&#x43A;&#x438;. &#x418;&#x437; 170 &#x442;&#x44B;&#x441;&#x44F;&#x447;, &#x434;&#x430;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/12/image-10.png" class="kg-image" alt="&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43B;&#x43E;&#x432; &#x43E;&#x431; AlphaFold2" loading="lazy" width="1364" height="704" srcset="https://yakovlev.me/content/images/size/w600/2020/12/image-10.png 600w, https://yakovlev.me/content/images/size/w1000/2020/12/image-10.png 1000w, https://yakovlev.me/content/images/2020/12/image-10.png 1364w" sizes="(min-width: 720px) 720px"><figcaption>&#x420;&#x430;&#x441;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440; &#x432; PDB &#x43F;&#x43E; &#x440;&#x430;&#x437;&#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44E; (<a href="https://www.rcsb.org/stats/distribution-resolution?ref=yakovlev.me">&#x418;&#x441;&#x442;&#x43E;&#x447;&#x43D;&#x438;&#x43A;</a>)</figcaption></figure><p><a href="https://deepmind.com/blog/article/alphafold-a-solution-to-a-50-year-old-grand-challenge-in-biology?ref=yakovlev.me">&#x41F;&#x43E;&#x441;&#x442;&#x443;&#x43B;&#x438;&#x440;&#x443;&#x435;&#x43C;&#x430;&#x44F;</a> DeepMind &#x43E;&#x446;&#x435;&#x43D;&#x43A;&#x430; &#x442;&#x43E;&#x447;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x2014; &#x43E;&#x43A;&#x43E;&#x43B;&#x43E; 1.6 &#xC5;, &#x447;&#x442;&#x43E;, &#x441;&#x443;&#x434;&#x44F; &#x43F;&#x43E; &#x433;&#x440;&#x430;&#x444;&#x438;&#x43A;&#x443;, &#x434;&#x430;&#x436;&#x435; &#x43B;&#x443;&#x447;&#x448;&#x435;, &#x447;&#x435;&#x43C; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x438;&#x43D;&#x441;&#x442;&#x432;&#x43E; &#x44D;&#x43A;&#x441;&#x43F;&#x435;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;. &#x418; &#x437;&#x434;&#x435;&#x441;&#x44C;, &#x43D;&#x430;&#x432;&#x435;&#x440;&#x43D;&#x43E;&#x435;, &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x431;&#x44B;&#x43B;&#x43E; &#x431;&#x44B; &#x43E;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x438;&#x442;&#x44C;&#x441;&#x44F; &#x432; &#x43A;&#x43E;&#x43C;&#x43C;&#x435;&#x43D;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x438; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43F;&#x443;&#x43D;&#x43A;&#x442;&#x430;, &#x43D;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x43E;&#x434;&#x438;&#x43D; &#x43D;&#x44E;&#x430;&#x43D;&#x441;. &#x423;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x43D;&#x430;&#x44F; &#x43E;&#x446;&#x435;&#x43D;&#x43A;&#x430; &#x442;&#x43E;&#x447;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x441;&#x43F;&#x440;&#x430;&#x432;&#x435;&#x434;&#x43B;&#x438;&#x432;&#x430; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x434;&#x43B;&#x44F; \(C_{\alpha}\) &#x430;&#x442;&#x43E;&#x43C;&#x43E;&#x432;, &#x442;&#x43E;&#x433;&#x434;&#x430; &#x43A;&#x430;&#x43A; &#x43D;&#x430; &#x433;&#x440;&#x430;&#x444;&#x438;&#x43A;&#x435; &#x432;&#x44B;&#x448;&#x435; &#x43E;&#x43D;&#x430; &#x434;&#x43B;&#x44F; <em>&#x432;&#x441;&#x435;&#x445;</em> &#x430;&#x442;&#x43E;&#x43C;&#x43E;&#x432; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B;.</p><p>&#x427;&#x442;&#x43E; &#x44D;&#x442;&#x43E; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442;? &#x427;&#x435;&#x441;&#x442;&#x43D;&#x43E; &#x433;&#x43E;&#x432;&#x43E;&#x440;&#x44F;, &#x43D;&#x435; &#x437;&#x43D;&#x430;&#x44E;. &#x423; &#x447;&#x435;&#x43B;&#x43E;&#x432;&#x435;&#x447;&#x435;&#x441;&#x442;&#x432;&#x430; &#x435;&#x441;&#x442;&#x44C; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x443;&#x441;&#x43F;&#x435;&#x445;&#x438; &#x432; &#x434;&#x43E;&#x441;&#x442;&#x440;&#x430;&#x438;&#x432;&#x430;&#x43D;&#x438;&#x438; &#x43F;&#x43E;&#x43B;&#x43D;&#x43E;&#x439; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x431;&#x435;&#x43B;&#x43A;&#x430; &#x43D;&#x430; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x435; &#x43E;&#x434;&#x43D;&#x43E;&#x439; &#x43B;&#x438;&#x448;&#x44C; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x43D;&#x43E;&#x433;&#x43E; &#x43A;&#x430;&#x440;&#x43A;&#x430;&#x441;&#x430; (&#x43A;&#x430;&#x43A; <a href="https://pubmed.ncbi.nlm.nih.gov/15690346/?ref=yakovlev.me">&#x43E;&#x43F;&#x442;&#x438;&#x43C;&#x438;&#x437;&#x430;&#x446;&#x438;&#x43E;&#x43D;&#x43D;&#x44B;&#x435;</a>, &#x442;&#x430;&#x43A; &#x438; &#x43D;&#x430; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x435; &#x432;&#x441;&#x451; &#x442;&#x43E;&#x433;&#x43E; &#x436;&#x435; <a href="https://arxiv.org/pdf/1707.08381.pdf?ref=yakovlev.me">&#x43C;&#x430;&#x448;&#x438;&#x43D;&#x43D;&#x43E;&#x433;&#x43E; &#x43E;&#x431;&#x443;&#x447;&#x435;&#x43D;&#x438;&#x44F;</a>). &#x41D;&#x43E; &#x43D;&#x438;&#x43A;&#x442;&#x43E; &#x435;&#x449;&#x435; &#x43D;&#x435; &#x43F;&#x440;&#x43E;&#x431;&#x43E;&#x432;&#x430;&#x43B; &#x43E;&#x431;&#x44A;&#x435;&#x434;&#x438;&#x43D;&#x438;&#x442;&#x44C; AlphaFold &#x441; &#x44D;&#x442;&#x438;&#x43C;&#x438; &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x430;&#x43C;&#x438; &#x438; &#x43E;&#x446;&#x435;&#x43D;&#x438;&#x442;&#x44C; &#x442;&#x43E;&#x447;&#x43D;&#x43E;&#x441;&#x442;&#x44C;. &#x422;&#x430;&#x43A; &#x447;&#x442;&#x43E; &#x43C;&#x44B; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x438;&#x44F; &#x43D;&#x435; &#x438;&#x43C;&#x435;&#x435;&#x43C; &#x43A;&#x430;&#x43A;&#x43E;&#x432;&#x430; &#x440;&#x435;&#x430;&#x43B;&#x44C;&#x43D;&#x430;&#x44F; &#x442;&#x43E;&#x447;&#x43D;&#x43E;&#x441;&#x442;&#x44C; AlphaFold (&#x430; &#x442;&#x43E;&#x447;&#x43D;&#x435;&#x435;, &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x43E;&#x432; &#x441; &#x435;&#x433;&#x43E; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435;&#x43C;) &#x432; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x438;&#x438; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;, &#x441; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x43C;&#x438; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x442;&#x44C;.</p><h2 id="--10">&#x427;&#x442;&#x43E; &#x433;&#x43E;&#x432;&#x43E;&#x440;&#x44F;&#x442; &#x43E;&#x43F;&#x442;&#x438;&#x43C;&#x438;&#x441;&#x442;&#x44B;</h2><p>&#x41A;&#x43E;&#x43C;&#x43C;&#x435;&#x43D;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43E;&#x43F;&#x442;&#x438;&#x43C;&#x438;&#x441;&#x442;&#x43E;&#x432; &#x433;&#x43E;&#x440;&#x430;&#x437;&#x434;&#x43E; &#x43C;&#x435;&#x43D;&#x435;&#x435; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x43E;, &#x43F;&#x43E;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x443; &#x43C;&#x43D;&#x43E;&#x433;&#x438;&#x435; &#x438;&#x437; &#x43D;&#x438;&#x445; &#x2014; &#x43B;&#x44E;&#x434;&#x438;, &#x43A; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x43D;&#x43E;&#x439; &#x431;&#x438;&#x43E;&#x43B;&#x43E;&#x433;&#x438;&#x438; (&#x438; &#x432;&#x43E;&#x43E;&#x431;&#x449;&#x435; &#x43A;&#x430;&#x43A;&#x43E;&#x439;-&#x43B;&#x438;&#x431;&#x43E;) &#x43E;&#x442;&#x43D;&#x43E;&#x448;&#x435;&#x43D;&#x438;&#x44F; &#x43D;&#x435; &#x438;&#x43C;&#x435;&#x44E;&#x449;&#x438;&#x435;, &#x430; &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x443; &#x432;&#x44B;&#x441;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x442;&#x430;&#x43C;, &#x441;&#x43A;&#x43E;&#x440;&#x435;&#x435;, &#x44D;&#x43C;&#x43E;&#x446;&#x438;&#x43E;&#x43D;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x435;, &#x447;&#x435;&#x43C; &#x43F;&#x43E; &#x434;&#x435;&#x43B;&#x443;. &#x42F; &#x43E;&#x442;&#x43E;&#x431;&#x440;&#x430;&#x43B; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x442;&#x435;&#x445;, &#x447;&#x442;&#x43E; &#x43C;&#x43D;&#x435; &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x43B;&#x438;&#x441;&#x44C; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x43C;&#x44B;&#x43C;&#x438;.</p><h3 id="-2-5-">&#x41E;&#x442;&#x440;&#x44B;&#x432; &#x43E;&#x442; &#x432;&#x442;&#x43E;&#x440;&#x43E;&#x433;&#x43E; &#x43C;&#x435;&#x441;&#x442;&#x430; &#x432; 2.5 &#x440;&#x430;&#x437;&#x430;!</h3><p>&#x41C;&#x43D;&#x435; &#x43A;&#x430;&#x436;&#x435;&#x442;&#x441;&#x44F;, &#x43C;&#x44B; &#x434;&#x43E;&#x441;&#x442;&#x430;&#x442;&#x43E;&#x447;&#x43D;&#x43E; &#x43F;&#x43E;&#x434;&#x440;&#x43E;&#x431;&#x43D;&#x43E; &#x440;&#x430;&#x437;&#x43E;&#x431;&#x440;&#x430;&#x43B;&#x438; &#x442;&#x43E;, &#x43A;&#x430;&#x43A; &#x443;&#x441;&#x442;&#x440;&#x43E;&#x435;&#x43D;&#x44B; &#x43F;&#x43E;&#x43F;&#x443;&#x433;&#x430;&#x438;, &#x432; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x445; &#x441;&#x440;&#x430;&#x432;&#x43D;&#x438;&#x432;&#x430;&#x44E;&#x442;&#x441;&#x44F; &#x430;&#x43B;&#x433;&#x43E;&#x440;&#x438;&#x442;&#x43C;&#x44B;. &#x41B;&#x438;&#x447;&#x43D;&#x43E; &#x43C;&#x43D;&#x435; &#x438;&#x437; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x441;&#x442;&#x430;&#x43B;&#x43E; &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x43D;&#x43E; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x442;&#x43E;, &#x447;&#x442;&#x43E; &#x44F; &#x43D;&#x435; &#x43C;&#x43E;&#x433;&#x443; &#x43D;&#x438;&#x43A;&#x430;&#x43A; &#x43E;&#x431;&#x44A;&#x435;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E; &#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x432;&#x44B;&#x432;&#x43E;&#x434;&#x44B; &#x43D;&#x430; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x435; &#x44D;&#x442;&#x438;&#x445; &#x441;&#x440;&#x430;&#x432;&#x43D;&#x435;&#x43D;&#x438;&#x439;.</p><p>&#x413;&#x43E;&#x440;&#x430;&#x437;&#x434;&#x43E; &#x431;&#x43E;&#x43B;&#x435;&#x435; &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x43C;&#x43D;&#x435; &#x43A;&#x430;&#x436;&#x435;&#x442;&#x441;&#x44F; &#x43A;&#x430;&#x440;&#x442;&#x438;&#x43D;&#x43A;&#x430; &#x438;&#x437; &#x432;&#x441;&#x451; &#x442;&#x43E;&#x433;&#x43E; &#x436;&#x435; &#x43F;&#x440;&#x435;&#x441;&#x441;-&#x440;&#x435;&#x43B;&#x438;&#x437;&#x430;, &#x432; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x439; &#x441;&#x440;&#x430;&#x432;&#x43D;&#x438;&#x432;&#x430;&#x44E;&#x442;&#x441;&#x44F; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x44B; &#x440;&#x430;&#x437;&#x43D;&#x44B;&#x445; &#x43B;&#x435;&#x442;. &#x41F;&#x43E; &#x43D;&#x435;&#x439; &#x442;&#x43E;&#x436;&#x435; &#x432;&#x438;&#x434;&#x43D;&#x43E;, &#x447;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x435;&#x441;&#x441; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442;&#x435;&#x43B;&#x435;&#x43D;. &#x418; &#x44D;&#x442;&#x43E; &#x43F;&#x440;&#x438; &#x442;&#x43E;&#x43C;, &#x447;&#x442;&#x43E; &#x437;&#x430;&#x434;&#x430;&#x447;&#x438; &#x435;&#x436;&#x435;&#x433;&#x43E;&#x434;&#x43D;&#x43E; &#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x44F;&#x442;&#x441;&#x44F; &#x432;&#x441;&#x451; &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x435;&#x435; &#x438; &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x435;&#x435;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/12/image-11.png" class="kg-image" alt="&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43B;&#x43E;&#x432; &#x43E;&#x431; AlphaFold2" loading="lazy" width="1920" height="1287" srcset="https://yakovlev.me/content/images/size/w600/2020/12/image-11.png 600w, https://yakovlev.me/content/images/size/w1000/2020/12/image-11.png 1000w, https://yakovlev.me/content/images/size/w1600/2020/12/image-11.png 1600w, https://yakovlev.me/content/images/2020/12/image-11.png 1920w" sizes="(min-width: 720px) 720px"><figcaption>&#x421;&#x440;&#x430;&#x432;&#x43D;&#x435;&#x43D;&#x438;&#x435; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x43E;&#x432; &#x43F;&#x440;&#x43E;&#x448;&#x43B;&#x44B;&#x445; &#x43B;&#x435;&#x442; &#x438; &#x442;&#x435;&#x43A;&#x443;&#x449;&#x435;&#x433;&#x43E; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44F; (<a href="https://deepmind.com/blog/article/alphafold-a-solution-to-a-50-year-old-grand-challenge-in-biology?ref=yakovlev.me">&#x418;&#x441;&#x442;&#x43E;&#x447;&#x43D;&#x438;&#x43A;</a>)</figcaption></figure><p>&#x412; &#x43E;&#x431;&#x449;&#x435;&#x43C;, &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x435;&#x441;&#x441;, &#x434;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442;&#x435;&#x43B;&#x435;&#x43D;. &#x41D;&#x43E; &#x44F; &#x431;&#x44B; &#x445;&#x43E;&#x442;&#x435;&#x43B; &#x43F;&#x43E;&#x441;&#x43C;&#x43E;&#x442;&#x440;&#x435;&#x442;&#x44C; &#x43D;&#x430; &#x43E;&#x446;&#x435;&#x43D;&#x43A;&#x438; GDT_TS &#x434;&#x43B;&#x44F; &#x434;&#x440;&#x443;&#x433;&#x438;&#x445; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x439;, &#x447;&#x442;&#x43E;&#x431; &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x44C;, &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x431;&#x44B;&#x442;&#x44C;, &#x43E;&#x43D;&#x438; &#x43D;&#x435; &#x441;&#x442;&#x43E;&#x43B;&#x44C; &#x43E;&#x442;&#x441;&#x442;&#x430;&#x44E;&#x442;, &#x43A;&#x430;&#x43A; &#x43A;&#x430;&#x436;&#x435;&#x442;&#x441;&#x44F;, &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x441;&#x43C;&#x43E;&#x442;&#x440;&#x438;&#x448;&#x44C; &#x43D;&#x430; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x44B; &#x43C;&#x430;&#x43D;&#x438;&#x43F;&#x443;&#x43B;&#x44F;&#x446;&#x438;&#x439; &#x441; z-score.</p><h3 id="--11">&#x41F;&#x43E;&#x440;&#x43E;&#x439; &#x438; &#x433;&#x440;&#x443;&#x431;&#x43E;&#x439; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x434;&#x43E;&#x441;&#x442;&#x430;&#x442;&#x43E;&#x447;&#x43D;&#x43E;</h3><p>&#x421;&#x43B;&#x43E;&#x436;&#x43D;&#x43E; &#x43D;&#x435; &#x441;&#x43E;&#x433;&#x43B;&#x430;&#x441;&#x438;&#x442;&#x44C;&#x441;&#x44F; &#x441; &#x442;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x433;&#x440;&#x443;&#x431;&#x430;&#x44F; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x430; &#x43B;&#x443;&#x447;&#x448;&#x435;, &#x447;&#x435;&#x43C; &#x43D;&#x438;&#x43A;&#x430;&#x43A;&#x430;&#x44F;. &#x41D;&#x43E; &#x43D;&#x430; &#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x43A;&#x435; &#x44F; &#x43D;&#x435; &#x437;&#x43D;&#x430;&#x44E; &#x43D;&#x438; &#x43E;&#x434;&#x43D;&#x43E;&#x439; &#x432;&#x430;&#x436;&#x43D;&#x43E;&#x439; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x44B;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x443;&#x44E; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x431;&#x44B;&#x43B;&#x43E; &#x431;&#x44B; &#x440;&#x435;&#x448;&#x438;&#x442;&#x44C; &#x441; &#x43F;&#x43E;&#x43C;&#x43E;&#x449;&#x44C;&#x44E; &#x43E;&#x434;&#x43D;&#x43E;&#x439; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x43F;&#x43E; \(C_{\alpha}\) &#x430;&#x442;&#x43E;&#x43C;&#x43E;&#x432;. &#x412;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;, &#x43C;&#x43E;&#x434;&#x435;&#x43B;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x43F;&#x43E;&#x432;&#x435;&#x434;&#x435;&#x43D;&#x438;&#x44F; &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432; &#x432; <a href="https://en.wikipedia.org/wiki/Coarse-grained_modeling?ref=yakovlev.me">coarse-grained</a> &#x432;&#x438;&#x434;&#x435;, &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x43F;&#x440;&#x43E;&#x441;&#x438;&#x43C;&#x443;&#x43B;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x434;&#x43B;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x43E;&#x442;&#x440;&#x435;&#x437;&#x43E;&#x43A; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x438; &#x438; &#x43F;&#x43E;&#x441;&#x43C;&#x43E;&#x442;&#x440;&#x435;&#x442;&#x44C; &#x43D;&#x430; &#x43F;&#x43E;&#x432;&#x435;&#x434;&#x435;&#x43D;&#x438;&#x435; &#x431;&#x435;&#x43B;&#x43A;&#x430;. &#x41D;&#x43E; &#x43C;&#x43E;&#x439; &#x43B;&#x438;&#x447;&#x43D;&#x44B;&#x439; &#x43E;&#x43F;&#x44B;&#x442; &#x441; &#x442;&#x430;&#x43A;&#x438;&#x43C;&#x438; &#x43C;&#x43E;&#x434;&#x435;&#x43B;&#x44F;&#x43C;&#x438; &#x43A;&#x440;&#x430;&#x439;&#x43D;&#x435; &#x43E;&#x442;&#x440;&#x438;&#x446;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x439;.</p><p>&#x422;&#x430;&#x43A; &#x43A;&#x430;&#x43A; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435; &#x44F; &#x438; &#x43D;&#x435; &#x437;&#x43D;&#x430;&#x44E;, &#x447;&#x442;&#x43E; &#x441;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C; &#x43F;&#x43E; &#x44D;&#x442;&#x43E;&#x43C;&#x443; &#x43F;&#x43E;&#x432;&#x43E;&#x434;&#x443; &#x432; &#x441;&#x438;&#x43B;&#x443; &#x43E;&#x433;&#x440;&#x430;&#x43D;&#x438;&#x447;&#x435;&#x43D;&#x43D;&#x43E;&#x433;&#x43E; &#x43A;&#x440;&#x443;&#x433;&#x43E;&#x437;&#x43E;&#x440;&#x430;, &#x43F;&#x440;&#x438;&#x441;&#x43E;&#x432;&#x43E;&#x43A;&#x443;&#x43F;&#x43B;&#x44E; &#x43A; &#x44D;&#x442;&#x43E;&#x43C;&#x443; &#x43F;&#x443;&#x43D;&#x43A;&#x442;&#x443; &#x443;&#x436;&#x435; &#x432;&#x44B;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x43D;&#x43E;&#x435; &#x432;&#x44B;&#x448;&#x435; &#x43D;&#x430;&#x431;&#x43B;&#x44E;&#x434;&#x435;&#x43D;&#x438;&#x435;, &#x447;&#x442;&#x43E; &#x43C;&#x44B; &#x443;&#x43C;&#x435;&#x435;&#x43C; &#x43F;&#x440;&#x435;&#x432;&#x440;&#x430;&#x449;&#x430;&#x442;&#x44C; &#x43D;&#x435;&#x43F;&#x43E;&#x43B;&#x43D;&#x44B;&#x435; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x432; &#x43F;&#x43E;&#x43B;&#x43D;&#x44B;&#x435;. &#x41D;&#x43E;, &#x43A;&#x430;&#x43A; &#x432;&#x44B;&#x441;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x43B;&#x43E;&#x441;&#x44C; &#x432;&#x44B;&#x448;&#x435;, &#x43D;&#x430;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x445;&#x43E;&#x440;&#x43E;&#x448;&#x43E; &#x44D;&#x442;&#x43E; &#x432;&#x441;&#x451; &#x431;&#x443;&#x434;&#x435;&#x442; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x442;&#x44C; &#x432; &#x441;&#x432;&#x44F;&#x437;&#x43A;&#x435;, &#x43D;&#x435;&#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x43D;&#x43E;.</p><h3 id="--12">&#x413;&#x43B;&#x430;&#x432;&#x43D;&#x43E;&#x435; &#x2014; &#x43C;&#x435;&#x442;&#x43E;&#x434; &#x432; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x435;, &#x43E;&#x43D; &#x43C;&#x43D;&#x43E;&#x433;&#x43E; &#x433;&#x434;&#x435; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x438;&#x43C;</h3><p>&#x414;&#x430;, &#x434;&#x430; &#x438; &#x435;&#x449;&#x435; &#x440;&#x430;&#x437; &#x434;&#x430;! &#x41C;&#x43E;&#x436;&#x43D;&#x43E; &#x441;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C;, &#x447;&#x442;&#x43E; &#x44F; &#x441;&#x430;&#x43C; &#x43E;&#x43F;&#x442;&#x438;&#x43C;&#x438;&#x441;&#x442; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x43F;&#x43E; &#x434;&#x430;&#x43D;&#x43D;&#x43E;&#x43C;&#x443; &#x43F;&#x443;&#x43D;&#x43A;&#x442;&#x443;. &#x41E;&#x442;&#x43B;&#x43E;&#x436;&#x438;&#x432; &#x432; &#x441;&#x442;&#x43E;&#x440;&#x43E;&#x43D;&#x443; &#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x443;&#x44E; &#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443; &#x43A;&#x43E;&#x43D;&#x43A;&#x440;&#x435;&#x442;&#x43D;&#x43E; AlphaFold &#x432; &#x442;&#x43E;&#x43C; &#x432;&#x438;&#x434;&#x435;, &#x447;&#x442;&#x43E; &#x43E;&#x43D; &#x435;&#x441;&#x442;&#x44C; &#x441;&#x435;&#x439;&#x447;&#x430;&#x441;, &#x43C;&#x43D;&#x435; &#x43A;&#x430;&#x436;&#x435;&#x442;&#x441;&#x44F;, &#x447;&#x442;&#x43E; &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x43E; &#x43E;&#x442;&#x440;&#x438;&#x446;&#x430;&#x442;&#x44C; &#x442;&#x43E;, &#x447;&#x442;&#x43E; &#x432; &#x43D;&#x430;&#x448;&#x435;&#x43C; &#x440;&#x430;&#x441;&#x43F;&#x43E;&#x440;&#x44F;&#x436;&#x435;&#x43D;&#x438;&#x438; &#x43F;&#x43E;&#x44F;&#x432;&#x438;&#x43B;&#x441;&#x44F; &#x43D;&#x43E;&#x432;&#x44B;&#x439; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x44B;&#x439; &#x43C;&#x435;&#x442;&#x43E;&#x434;, &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x44C; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x433;&#x43E; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x431;&#x44B;&#x442;&#x44C; &#x432;&#x435;&#x441;&#x44C;&#x43C;&#x430; &#x432;&#x44B;&#x441;&#x43E;&#x43A;&#x430; &#x432; &#x440;&#x430;&#x437;&#x43B;&#x438;&#x447;&#x43D;&#x44B;&#x445; &#x441;&#x43C;&#x435;&#x436;&#x43D;&#x44B;&#x445; &#x437;&#x430;&#x434;&#x430;&#x447;&#x430;&#x445;.</p><p>&#x421;&#x432;&#x44F;&#x437;&#x44C; &#x43A;&#x43E;&#x44D;&#x432;&#x43E;&#x43B;&#x44E;&#x446;&#x438;&#x438; (&#x43A;&#x43E;&#x440;&#x440;&#x435;&#x43B;&#x44F;&#x446;&#x438;&#x438; &#x43F;&#x43E;&#x437;&#x438;&#x446;&#x438;&#x439; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x435;&#x439;) &#x441; &#x440;&#x430;&#x441;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x438;&#x44F;&#x43C;&#x438; &#x43C;&#x435;&#x436;&#x434;&#x443; &#x430;&#x442;&#x43E;&#x43C;&#x430;&#x43C;&#x438; &#x2014; &#x44D;&#x442;&#x43E; &#x43C;&#x43E;&#x449;&#x43D;&#x44B;&#x439; &#x438;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43C;&#x435;&#x43D;&#x442;, &#x445;&#x43E;&#x440;&#x43E;&#x448;&#x43E; &#x43B;&#x43E;&#x436;&#x430;&#x449;&#x438;&#x439;&#x441;&#x44F; &#x43D;&#x430; &#x43C;&#x430;&#x448;&#x438;&#x43D;&#x43D;&#x43E;&#x435; &#x43E;&#x431;&#x443;&#x447;&#x435;&#x43D;&#x438;&#x435;. &#x412; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x442;&#x432;&#x43E; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x442;&#x435;&#x437;&#x438;&#x441;&#x430; &#x437;&#x430; &#x43F;&#x440;&#x43E;&#x448;&#x435;&#x434;&#x448;&#x438;&#x435; &#x434;&#x432;&#x430; &#x433;&#x43E;&#x434;&#x430; &#x441; &#x43E;&#x431;&#x43D;&#x430;&#x440;&#x43E;&#x434;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x43E;&#x432; &#x43F;&#x435;&#x440;&#x432;&#x43E;&#x433;&#x43E; AlphaFold, &#x43F;&#x43E;&#x44F;&#x432;&#x438;&#x43B;&#x441;&#x44F; &#x440;&#x44F;&#x434; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x44B;&#x445; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x439; &#x43A;&#x43E;&#x43D;&#x43A;&#x440;&#x435;&#x442;&#x43D;&#x44B;&#x445; &#x43F;&#x440;&#x438;&#x43A;&#x43B;&#x430;&#x434;&#x43D;&#x44B;&#x445; &#x437;&#x430;&#x434;&#x430;&#x447;.</p><p>&#x412;&#x430;&#x436;&#x43D;&#x44B;&#x439; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440; &#x434;&#x43B;&#x44F; &#x43C;&#x435;&#x43D;&#x44F; &#x2014; &#x44D;&#x442;&#x43E; &#x43B;&#x430;&#x431;&#x43E;&#x440;&#x430;&#x442;&#x43E;&#x440;&#x438;&#x44F; &#x414;&#x436;&#x435;&#x444;&#x444;&#x440;&#x438; &#x413;&#x440;&#x435;&#x44F;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x43B;&#x430; <a href="https://github.com/Graylab/deepH3-distances-orientations?ref=yakovlev.me">&#x43E;&#x442;&#x43B;&#x438;&#x447;&#x43D;&#x44B;&#x439; &#x43C;&#x435;&#x442;&#x43E;&#x434;</a> &#x434;&#x43B;&#x44F; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x44F; &#x43F;&#x435;&#x442;&#x435;&#x43B;&#x44C; &#x430;&#x43D;&#x442;&#x438;&#x442;&#x435;&#x43B;. &#x41E;&#x447;&#x435;&#x43D;&#x44C; &#x430;&#x43A;&#x442;&#x443;&#x430;&#x43B;&#x44C;&#x43D;&#x430;&#x44F; &#x43F;&#x440;&#x438;&#x43A;&#x43B;&#x430;&#x434;&#x43D;&#x430;&#x44F; &#x437;&#x430;&#x434;&#x430;&#x447;&#x430; &#x434;&#x43B;&#x44F; &#x43D;&#x443;&#x436;&#x434; &#x441;&#x43E;&#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x43E;&#x439; &#x444;&#x430;&#x440;&#x43C;&#x430;&#x446;&#x435;&#x432;&#x442;&#x438;&#x43A;&#x438;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x434;&#x43E; &#x441;&#x438;&#x445; &#x43F;&#x43E;&#x440; &#x440;&#x435;&#x448;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x432;&#x435;&#x441;&#x44C;&#x43C;&#x430; &#x438; &#x432;&#x435;&#x441;&#x44C;&#x43C;&#x430; &#x43F;&#x43B;&#x43E;&#x445;&#x43E;. &#x41A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x430; &#x413;&#x440;&#x435;&#x44F;, &#x43A; &#x441;&#x43B;&#x43E;&#x432;&#x443;, &#x437;&#x430;&#x431;&#x438;&#x43B;&#x430; &#x43D;&#x430; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x438;&#x435; &#x43C;&#x430;&#x442;&#x440;&#x438;&#x446;&#x44B; &#x43A;&#x43E;&#x44D;&#x432;&#x43E;&#x43B;&#x44E;&#x446;&#x438;&#x438; (&#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x44C;, &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x435;&#x439; &#x430;&#x43D;&#x442;&#x438;&#x442;&#x435;&#x43B; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x43C;&#x435;&#x43D;&#x44C;&#x448;&#x435;, &#x447;&#x435;&#x43C; &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432; &#x432;&#x43E;&#x43E;&#x431;&#x449;&#x435;, &#x430; &#x432;&#x430;&#x440;&#x438;&#x430;&#x431;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x44D;&#x442;&#x438;&#x445; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x435;&#x439; &#x43A;&#x443;&#x434;&#x430; &#x432;&#x44B;&#x448;&#x435;), &#x43D;&#x43E; &#x432;&#x43D;&#x435;&#x434;&#x440;&#x438;&#x43B;&#x430; &#x43F;&#x430;&#x440;&#x443; &#x434;&#x440;&#x443;&#x433;&#x438;&#x445; &#x442;&#x440;&#x44E;&#x43A;&#x43E;&#x432;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x445;&#x430;&#x440;&#x430;&#x43A;&#x442;&#x435;&#x440;&#x43D;&#x44B; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x434;&#x43B;&#x44F; &#x430;&#x43D;&#x442;&#x438;&#x442;&#x435;&#x43B;. &#x418; &#x432;&#x441;&#x451; &#x43F;&#x43E;&#x43B;&#x435;&#x442;&#x435;&#x43B;&#x43E;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/12/image-12.png" class="kg-image" alt="&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43B;&#x43E;&#x432; &#x43E;&#x431; AlphaFold2" loading="lazy" width="1078" height="810" srcset="https://yakovlev.me/content/images/size/w600/2020/12/image-12.png 600w, https://yakovlev.me/content/images/size/w1000/2020/12/image-12.png 1000w, https://yakovlev.me/content/images/2020/12/image-12.png 1078w" sizes="(min-width: 720px) 720px"><figcaption>&#x41A;&#x430;&#x440;&#x442;&#x438;&#x43D;&#x43A;&#x430; &#x438;&#x437; &#x441;&#x442;&#x430;&#x442;&#x44C;&#x438; &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x430; DeepH3 (<a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7355305/?ref=yakovlev.me">&#x418;&#x441;&#x442;&#x43E;&#x447;&#x43D;&#x438;&#x43A;</a>)</figcaption></figure><p>&#x41D;&#x430; &#x43C;&#x43E;&#x439; &#x432;&#x437;&#x433;&#x43B;&#x44F;&#x434;, &#x44D;&#x442;&#x43E; &#x43A;&#x430;&#x43A; &#x440;&#x430;&#x437; &#x43E;&#x431;&#x435;&#x441;&#x43F;&#x435;&#x447;&#x438;&#x432;&#x430;&#x435;&#x442; &#x43D;&#x430;&#x43C; &#x43D;&#x430;&#x434;&#x435;&#x436;&#x434;&#x443; &#x43D;&#x430; &#x441;&#x43A;&#x43E;&#x440;&#x43E;&#x435; &#x43F;&#x43E;&#x44F;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x43E;&#x432; &#x434;&#x43B;&#x44F; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44F; &#x432;&#x430;&#x436;&#x43D;&#x44B;&#x445; &#x437;&#x430;&#x434;&#x430;&#x447; &#x438;&#x43D;&#x434;&#x443;&#x441;&#x442;&#x440;&#x438;&#x438;. &#x41C;&#x43D;&#x435;, &#x43A;&#x430;&#x43A; &#x435;&#x451; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x438;&#x442;&#x435;&#x43B;&#x44E;, &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x44D;&#x442;&#x43E;, &#x430; &#x43D;&#x435; &#x43E;&#x434;&#x438;&#x43D; &#x430;&#x43B;&#x433;&#x43E;&#x440;&#x438;&#x442;&#x43C; &#x434;&#x43B;&#x44F; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44F; &#x444;&#x443;&#x43D;&#x434;&#x430;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x437;&#x430;&#x434;&#x430;&#x447;&#x438;, &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x44B; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x433;&#x43E; &#x44F; &#x43D;&#x435; &#x441;&#x43C;&#x43E;&#x433;&#x443; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x438;&#x442;&#x44C; &#x43D;&#x430; &#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x43A;&#x435;.</p><h2 id="--13">&#x417;&#x430;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x438;&#x435;, &#x438;&#x43B;&#x438; &#x447;&#x442;&#x43E; &#x433;&#x43E;&#x432;&#x43E;&#x440;&#x44E; &#x44F;</h2><p>&#x41F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x435; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x431;&#x435;&#x43B;&#x43A;&#x43E;&#x432; &#x2014; &#x43D;&#x435;&#x441;&#x43E;&#x43C;&#x43D;&#x435;&#x43D;&#x43D;&#x43E; &#x432;&#x430;&#x436;&#x43D;&#x44B;&#x439; &#x438;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43C;&#x435;&#x43D;&#x442; &#x434;&#x43B;&#x44F; &#x430;&#x43D;&#x430;&#x43B;&#x438;&#x437;&#x430; &#x431;&#x438;&#x43E;&#x43B;&#x43E;&#x433;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x445; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C; &#x438; &#x440;&#x430;&#x446;&#x438;&#x43E;&#x43D;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x433;&#x43E; &#x431;&#x438;&#x43E;&#x43B;&#x43E;&#x433;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x43E;&#x433;&#x43E; &#x434;&#x438;&#x437;&#x430;&#x439;&#x43D;&#x430;. &#x41D;&#x43E; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x447;&#x435;&#x442;&#x43A;&#x43E; &#x43E;&#x442;&#x434;&#x430;&#x432;&#x430;&#x442;&#x44C; &#x441;&#x435;&#x431;&#x435; &#x43E;&#x442;&#x447;&#x435;&#x442; &#x432; &#x442;&#x43E;&#x43C;, &#x447;&#x442;&#x43E; &#x44D;&#x442;&#x43E; &#x43D;&#x435; &#x441;&#x435;&#x440;&#x435;&#x431;&#x440;&#x44F;&#x43D;&#x430;&#x44F; &#x43F;&#x443;&#x43B;&#x44F;, &#x430; &#x43E;&#x434;&#x438;&#x43D; &#x438;&#x437; &#x43C;&#x43D;&#x43E;&#x433;&#x438;&#x445; &#x438;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x43E;&#x432;. &#x414;&#x430;&#x436;&#x435; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x438;&#x435; &#x438;&#x434;&#x435;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x433;&#x43E; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44F; &#x44D;&#x442;&#x43E;&#x439; &#x437;&#x430;&#x434;&#x430;&#x447;&#x438; &#x43D;&#x435; &#x440;&#x435;&#x448;&#x438;&#x442; &#x432;&#x441;&#x435; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x44B; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x43D;&#x43E;&#x439; &#x431;&#x438;&#x43E;&#x43B;&#x43E;&#x433;&#x438;&#x438; &#x438; &#x43A;&#x440;&#x430;&#x442;&#x43D;&#x43E; &#x43D;&#x435; &#x443;&#x434;&#x435;&#x448;&#x435;&#x432;&#x438;&#x442;/&#x443;&#x441;&#x43A;&#x43E;&#x440;&#x438;&#x442; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x443; &#x43D;&#x43E;&#x432;&#x44B;&#x445; &#x43B;&#x435;&#x43A;&#x430;&#x440;&#x441;&#x442;&#x432;. &#x41D;&#x43E; &#x43F;&#x43E;&#x44F;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x442;&#x430;&#x43A;&#x43E;&#x433;&#x43E; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44F;, &#x43D;&#x435;&#x441;&#x43E;&#x43C;&#x43D;&#x435;&#x43D;&#x43D;&#x43E;, &#x441;&#x438;&#x43B;&#x44C;&#x43D;&#x43E; &#x43F;&#x440;&#x43E;&#x434;&#x432;&#x438;&#x43D;&#x443;&#x43B;&#x43E; &#x431;&#x44B; &#x438;&#x43D;&#x434;&#x443;&#x441;&#x442;&#x440;&#x438;&#x44E;.</p><p>&#x41A; &#x441;&#x43E;&#x436;&#x430;&#x43B;&#x435;&#x43D;&#x438;&#x44E;, &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44F; &#x443; &#x43D;&#x430;&#x441; &#x435;&#x449;&#x435; &#x43D;&#x435;&#x442;. &#x414;&#x430;&#x436;&#x435; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x43E;&#x435; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x435; \(C_{\alpha}\) &#x2014; &#x44D;&#x442;&#x43E; &#x435;&#x449;&#x435; &#x43D;&#x435; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x435; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B;. &#x41D;&#x43E; &#x446;&#x435;&#x43D;&#x43D;&#x43E;&#x441;&#x442;&#x44C; AlphaFold &#x43D;&#x435; &#x432; &#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x43E;&#x439; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x438;, &#x430; &#x432; &#x437;&#x430;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x43D;&#x43E;&#x439; &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x43E;&#x43B;&#x43E;&#x433;&#x438;&#x438;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x431;&#x44B;&#x442;&#x44C; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x430; &#x43F;&#x440;&#x438; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x438; &#x43C;&#x43D;&#x43E;&#x433;&#x438;&#x445; &#x441;&#x43C;&#x435;&#x436;&#x43D;&#x44B;&#x445; &#x437;&#x430;&#x434;&#x430;&#x447;. &#x422;&#x430;&#x43A; &#x447;&#x442;&#x43E; &#x44D;&#x442;&#x43E; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x43E;&#x439; &#x43F;&#x440;&#x43E;&#x440;&#x44B;&#x432;, &#x438; &#x432;&#x441;&#x44F; &#x43E;&#x431;&#x43B;&#x430;&#x441;&#x442;&#x44C;, &#x43D;&#x430; &#x43C;&#x43E;&#x439; &#x432;&#x437;&#x433;&#x43B;&#x44F;&#x434;, &#x434;&#x43E;&#x43B;&#x436;&#x43D;&#x430; &#x441;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C; DeepMind &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x43E;&#x435; &#x441;&#x43F;&#x430;&#x441;&#x438;&#x431;&#x43E;.</p><p>&#x422;&#x430;&#x43A; &#x447;&#x442;&#x43E; &#x432;&#x43F;&#x435;&#x440;&#x435;&#x434;&#x438; &#x43E;&#x433;&#x440;&#x43E;&#x43C;&#x43D;&#x430;&#x44F; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430; &#x43F;&#x43E; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44E; &#x43C;&#x43D;&#x43E;&#x433;&#x438;&#x445; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x44B;&#x445; &#x437;&#x430;&#x434;&#x430;&#x447;. &#x421;&#x43F;&#x435;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x432;&#x44B;&#x447;&#x438;&#x441;&#x43B;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x433;&#x43E; &#x431;&#x438;&#x43E;&#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x442;&#x438;&#x43A;&#x430; &#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x438;&#x442;&#x441;&#x44F; &#x432;&#x441;&#x435; &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x435;&#x435; &#x438; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x435;&#x435;, &#x43D;&#x43E; &#x438; &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x435;&#x439; &#x443; &#x435;&#x451; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x438;&#x442;&#x435;&#x43B;&#x435;&#x439; &#x432;&#x441;&#x451; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435;. &#x41F;&#x443;&#x441;&#x43A;&#x430;&#x439; &#x43C;&#x44B; &#x43D;&#x435; &#x440;&#x435;&#x448;&#x438;&#x43C; &#x432;&#x441;&#x435; &#x437;&#x430;&#x434;&#x430;&#x447;&#x438; &#x43E;&#x434;&#x43D;&#x438;&#x43C; &#x43C;&#x430;&#x445;&#x43E;&#x43C;, &#x43D;&#x43E; &#x43A;&#x430;&#x436;&#x434;&#x443;&#x44E; &#x440;&#x435;&#x448;&#x438;&#x43C; &#x43E;&#x431;&#x44F;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;!</p>]]></content:encoded></item><item><title><![CDATA[Lean: introduction]]></title><description><![CDATA[В текущей серии постов я хочу уложить некоторые вещи в собственной голове, получить простую шпаргалку на русском языке, а также помочь проникнуться системой тем, кому по какой-то неведомой причине влом читать книжку, что тем не менее сделать обязательно нужно.]]></description><link>https://yakovlev.me/lean-intro/</link><guid isPermaLink="false">62a9a65d27b7ab000134c24a</guid><category><![CDATA[fp]]></category><category><![CDATA[verification]]></category><dc:creator><![CDATA[Pavel Yakovlev]]></dc:creator><pubDate>Thu, 29 Oct 2020 19:48:04 GMT</pubDate><content:encoded><![CDATA[<p>&#x420;&#x435;&#x447;&#x44C; &#x43F;&#x43E;&#x439;&#x434;&#x435;&#x442; &#x43D;&#x435; &#x43E; <a href="https://leankanban.com/?ref=yakovlev.me">Lean Kanban</a>, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x432;&#x441;&#x435; &#x447;&#x430;&#x449;&#x435; &#x437;&#x432;&#x443;&#x447;&#x438;&#x442; &#x43D;&#x430; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x435;, &#x430; &#x43E; &#x43D;&#x435;&#x432;&#x435;&#x440;&#x43E;&#x44F;&#x442;&#x43D;&#x43E; &#x447;&#x443;&#x434;&#x435;&#x441;&#x43D;&#x43E;&#x43C; &#x44F;&#x437;&#x44B;&#x43A;&#x435; &#x441; &#x437;&#x430;&#x432;&#x438;&#x441;&#x438;&#x43C;&#x44B;&#x43C;&#x438; &#x442;&#x438;&#x43F;&#x430;&#x43C;&#x438; &#x438; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x435; &#x434;&#x43B;&#x44F; &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x432;&#x435;&#x440;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438; <a href="http://leanprover.github.io/?ref=yakovlev.me">Lean</a> &#x43E;&#x442; Microsoft Research. &#x412; &#x442;&#x435;&#x43A;&#x443;&#x449;&#x435;&#x439; &#x441;&#x435;&#x440;&#x438;&#x438; &#x43F;&#x43E;&#x441;&#x442;&#x43E;&#x432; &#x44F; &#x445;&#x43E;&#x447;&#x443; &#x443;&#x43B;&#x43E;&#x436;&#x438;&#x442;&#x44C; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x432;&#x435;&#x449;&#x438; &#x432; &#x441;&#x43E;&#x431;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x43E;&#x439; &#x433;&#x43E;&#x43B;&#x43E;&#x432;&#x435;, &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x44C; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x443;&#x44E; &#x448;&#x43F;&#x430;&#x440;&#x433;&#x430;&#x43B;&#x43A;&#x443; &#x43D;&#x430; &#x440;&#x443;&#x441;&#x441;&#x43A;&#x43E;&#x43C; &#x44F;&#x437;&#x44B;&#x43A;&#x435;, &#x430; &#x442;&#x430;&#x43A;&#x436;&#x435; &#x43F;&#x43E;&#x43C;&#x43E;&#x447;&#x44C; &#x43F;&#x440;&#x43E;&#x43D;&#x438;&#x43A;&#x43D;&#x443;&#x442;&#x44C;&#x441;&#x44F; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x43E;&#x439; &#x442;&#x435;&#x43C;, &#x43A;&#x43E;&#x43C;&#x443; &#x43F;&#x43E; &#x43A;&#x430;&#x43A;&#x43E;&#x439;-&#x442;&#x43E; &#x43D;&#x435;&#x432;&#x435;&#x434;&#x43E;&#x43C;&#x43E;&#x439; &#x43F;&#x440;&#x438;&#x447;&#x438;&#x43D;&#x435; &#x432;&#x43B;&#x43E;&#x43C; &#x447;&#x438;&#x442;&#x430;&#x442;&#x44C; <a href="https://leanprover.github.io/theorem_proving_in_lean/theorem_proving_in_lean.pdf?ref=yakovlev.me">&#x43A;&#x43D;&#x438;&#x436;&#x43A;&#x443;</a>, &#x447;&#x442;&#x43E; &#x442;&#x435;&#x43C; &#x43D;&#x435; &#x43C;&#x435;&#x43D;&#x435;&#x435; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x43E;&#x431;&#x44F;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x43D;&#x443;&#x436;&#x43D;&#x43E; (&#x43E;&#x43D;&#x430;, &#x432;&#x43E;&#x438;&#x441;&#x442;&#x438;&#x43D;&#x443;, &#x431;&#x43B;&#x438;&#x437;&#x43A;&#x430; &#x43A; &#x438;&#x434;&#x435;&#x430;&#x43B;&#x443; &#x442;&#x43E;&#x433;&#x43E;, &#x43A;&#x430;&#x43A; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x43A;&#x43D;&#x438;&#x433;&#x438; &#x43F;&#x43E;&#x434;&#x43E;&#x431;&#x43D;&#x43E;&#x433;&#x43E; &#x440;&#x43E;&#x434;&#x430;). &#x41A;&#x43D;&#x438;&#x433;&#x430; &#x43F;&#x440;&#x43E;&#x432;&#x43E;&#x434;&#x438;&#x442; &#x447;&#x438;&#x442;&#x430;&#x442;&#x435;&#x43B;&#x44F; &#x447;&#x435;&#x440;&#x435;&#x437; &#x43F;&#x440;&#x435;&#x43C;&#x443;&#x434;&#x440;&#x43E;&#x441;&#x442;&#x438; &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x432;&#x435;&#x440;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438; &#x441; &#x43F;&#x43E;&#x43C;&#x43E;&#x449;&#x44C;&#x44E; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x44B; &#x441; &#x437;&#x430;&#x432;&#x438;&#x441;&#x438;&#x43C;&#x44B;&#x43C;&#x438; &#x442;&#x438;&#x43F;&#x430;&#x43C;&#x438; &#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438; &#x43F;&#x43E;&#x434; &#x430;&#x43D;&#x435;&#x441;&#x442;&#x435;&#x437;&#x438;&#x435;&#x439;. &#x422;&#x430;&#x43A; &#x447;&#x442;&#x43E;, &#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;, &#x43B;&#x443;&#x447;&#x448;&#x435; &#x437;&#x430;&#x43A;&#x440;&#x44B;&#x442;&#x44C; &#x44D;&#x442;&#x43E;&#x442; &#x43F;&#x43E;&#x441;&#x442; &#x438; &#x43F;&#x43E;&#x439;&#x442;&#x438; &#x447;&#x438;&#x442;&#x430;&#x442;&#x44C; &#x435;&#x451;. &#x41D;&#x43E; &#x44F; &#x436;&#x435; &#x43F;&#x438;&#x448;&#x443; &#x434;&#x43B;&#x44F; &#x441;&#x435;&#x431;&#x44F;, &#x432; &#x43A;&#x43E;&#x43D;&#x446;&#x435;-&#x43A;&#x43E;&#x43D;&#x446;&#x43E;&#x432;!</p><blockquote>&#x42D;&#x442;&#x430; &#x441;&#x442;&#x430;&#x442;&#x44C;&#x44F; &#x43F;&#x440;&#x43E;&#x43B;&#x435;&#x436;&#x430;&#x43B;&#x430; &#x432; &#x447;&#x435;&#x440;&#x43D;&#x43E;&#x432;&#x438;&#x43A;&#x430;&#x445; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435; &#x433;&#x43E;&#x434;&#x430;. &#x420;&#x435;&#x448;&#x438;&#x432; &#x43E;&#x442;&#x43A;&#x440;&#x44B;&#x442;&#x44C; &#x435;&#x451; &#x441;&#x435;&#x433;&#x43E;&#x434;&#x43D;&#x44F;, &#x44F; &#x43F;&#x43E;&#x43D;&#x44F;&#x43B;, &#x447;&#x442;&#x43E; &#x43D;&#x430; &#x441;&#x430;&#x43C;&#x43E;&#x43C; &#x434;&#x435;&#x43B;&#x435; &#x43E;&#x43D;&#x430; &#x433;&#x43E;&#x442;&#x43E;&#x432;&#x430; &#x43D;&#x430; 90%. &#x412; &#x441;&#x432;&#x44F;&#x437;&#x438; &#x441; &#x44D;&#x442;&#x438;&#x43C; &#x44F; &#x440;&#x435;&#x448;&#x438;&#x43B; &#x434;&#x43E;&#x431;&#x438;&#x442;&#x44C; &#x432;&#x441;&#x435;&#x433;&#x43E; &#x43F;&#x430;&#x440;&#x443; &#x430;&#x431;&#x437;&#x430;&#x446;&#x435;&#x432; &#x438;, &#x43D;&#x430;&#x43A;&#x43E;&#x43D;&#x435;&#x446;, &#x435;&#x451; &#x43E;&#x43F;&#x443;&#x431;&#x43B;&#x438;&#x43A;&#x43E;&#x432;&#x430;&#x442;&#x44C;. &#x410; &#x432;&#x441;&#x451; &#x441;&#x430;&#x43C;&#x43E;&#x435; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x43E;&#x435; &#x443;&#x436;&#x435; &#x43F;&#x43E;&#x43B;&#x43E;&#x436;&#x438;&#x442;&#x44C; &#x432; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x435; &#x432;&#x44B;&#x43F;&#x443;&#x441;&#x43A;&#x438; (&#x441; &#x43C;&#x43E;&#x435;&#x439; &#x441;&#x43A;&#x43E;&#x440;&#x43E;&#x441;&#x442;&#x44C;&#x44E; &#x43F;&#x443;&#x431;&#x43B;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x439;, &#x432;&#x438;&#x434;&#x438;&#x43C;&#x43E;, &#x433;&#x43E;&#x434;&#x430; &#x447;&#x435;&#x440;&#x435;&#x437; &#x434;&#x432;&#x430;).</blockquote><p>&#x41F;&#x440;&#x435;&#x436;&#x434;&#x435; &#x447;&#x435;&#x43C; &#x440;&#x430;&#x437;&#x431;&#x438;&#x440;&#x430;&#x442;&#x44C;&#x441;&#x44F;, &#x441;&#x43E;&#x431;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x43E;, &#x441; Lean &#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x44C;, &#x430; &#x43A;&#x430;&#x43A;&#x443;&#x44E; &#x437;&#x430;&#x434;&#x430;&#x447;&#x43A;&#x443; &#x43C;&#x44B; &#x440;&#x435;&#x448;&#x430;&#x435;&#x43C;, &#x438; &#x43F;&#x43E;&#x447;&#x435;&#x43C;&#x443; &#x435;&#x451; &#x432;&#x43E;&#x43E;&#x431;&#x449;&#x435; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x440;&#x435;&#x448;&#x430;&#x442;&#x44C;. &#x414;&#x43B;&#x44F; &#x43D;&#x430;&#x447;&#x430;&#x43B;&#x430; &#x432;&#x432;&#x435;&#x434;&#x435;&#x43C; &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x438;&#x435; <em>&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x432;&#x435;&#x440;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438;</em>, &#x443;&#x43F;&#x43E;&#x43C;&#x44F;&#x43D;&#x443;&#x442;&#x43E;&#x439; &#x432;&#x44B;&#x448;&#x435; &#x443;&#x436;&#x435; &#x434;&#x432;&#x430;&#x436;&#x434;&#x44B;. &#x42D;&#x442;&#x438;&#x43C; &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x438;&#x435;&#x43C; &#x43C;&#x44B; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x43D;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x43B;&#x43E;&#x433;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x445; &#x438; &#x432;&#x44B;&#x447;&#x438;&#x441;&#x43B;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x43E;&#x432; &#x434;&#x43B;&#x44F; &#x443;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x438;&#x441;&#x442;&#x438;&#x43D;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x443;&#x442;&#x432;&#x435;&#x440;&#x436;&#x434;&#x435;&#x43D;&#x438;&#x439;, &#x432;&#x44B;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x43D;&#x44B;&#x445; &#x432; &#x442;&#x43E;&#x447;&#x43D;&#x44B;&#x445; &#x43C;&#x430;&#x442;&#x435;&#x43C;&#x430;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x445; &#x444;&#x43E;&#x440;&#x43C;&#x443;&#x43B;&#x430;&#x445;. &#x41F;&#x440;&#x438;&#x43C;&#x435;&#x440;&#x43E;&#x43C; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x441;&#x43B;&#x443;&#x436;&#x438;&#x442;&#x44C; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x435;&#x435; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;&#x435; &#x432;&#x44B;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x435;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x435; &#x43C;&#x44B; &#x43E;&#x434;&#x43D;&#x430;&#x436;&#x434;&#x44B; &#x43E;&#x431;&#x44F;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x434;&#x43E;&#x43A;&#x430;&#x436;&#x435;&#x43C; &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;:</p><p>\[ \forall n, m \in \mathbb{N}, n + m = m + n \]</p><p>&#x422;&#x430;&#x43A;&#x438;&#x435; &#x432;&#x44B;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x44F; &#x43C;&#x43E;&#x433;&#x443;&#x442; &#x441;&#x43E;&#x434;&#x435;&#x440;&#x436;&#x430;&#x442;&#x44C; &#x43D;&#x435; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43A;&#x43B;&#x430;&#x441;&#x441;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x435; &#x43C;&#x430;&#x442;&#x435;&#x43C;&#x430;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x435; &#x442;&#x435;&#x43E;&#x440;&#x435;&#x43C;&#x44B;, &#x43A;&#x430;&#x43A; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440; &#x432;&#x44B;&#x448;&#x435;, &#x43D;&#x43E; &#x438; &#x443;&#x442;&#x432;&#x435;&#x440;&#x436;&#x434;&#x435;&#x43D;&#x438;&#x44F; &#x43E; &#x43A;&#x43E;&#x440;&#x440;&#x435;&#x43A;&#x442;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x43D;&#x43E;&#x433;&#x43E; &#x43A;&#x43E;&#x434;&#x430;, &#x430;&#x43F;&#x43F;&#x430;&#x440;&#x430;&#x442;&#x43D;&#x44B;&#x445; &#x441;&#x445;&#x435;&#x43C;, &#x441;&#x435;&#x442;&#x435;&#x432;&#x44B;&#x445; &#x43F;&#x440;&#x43E;&#x442;&#x43E;&#x43A;&#x43E;&#x43B;&#x43E;&#x432;, &#x438; &#x43C;&#x43D;&#x43E;&#x433;&#x43E;&#x433;&#x43E; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x433;&#x43E;. &#x41F;&#x43E;&#x434;&#x43E;&#x431;&#x43D;&#x43E;&#x435; &#x440;&#x430;&#x437;&#x43D;&#x43E;&#x43E;&#x431;&#x440;&#x430;&#x437;&#x438;&#x435; &#x434;&#x43E;&#x441;&#x442;&#x438;&#x433;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x437;&#x430; &#x441;&#x447;&#x435;&#x442; <a href="https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D1%82%D0%B2%D0%B8%D0%B5_%D0%9A%D0%B0%D1%80%D1%80%D0%B8_%E2%80%94_%D0%A5%D0%BE%D0%B2%D0%B0%D1%80%D0%B4%D0%B0?ref=yakovlev.me">&#x438;&#x437;&#x43E;&#x43C;&#x43E;&#x440;&#x444;&#x438;&#x437;&#x43C;&#x430; &#x41A;&#x430;&#x440;&#x440;&#x438;-&#x413;&#x43E;&#x432;&#x430;&#x440;&#x434;&#x430;</a>, &#x443;&#x442;&#x432;&#x435;&#x440;&#x436;&#x434;&#x430;&#x44E;&#x449;&#x435;&#x433;&#x43E;, &#x447;&#x442;&#x43E; &#x43D;&#x435;&#x442; &#x440;&#x430;&#x437;&#x43B;&#x438;&#x447;&#x438;&#x439; &#x43C;&#x435;&#x436;&#x434;&#x443; &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x43A;&#x43E;&#x439; &#x43A;&#x43E;&#x440;&#x440;&#x435;&#x43A;&#x442;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x442;&#x432;&#x430; &#x442;&#x435;&#x43E;&#x440;&#x435;&#x43C; &#x438; &#x441;&#x43E;&#x43E;&#x442;&#x432;&#x435;&#x442;&#x441;&#x442;&#x432;&#x438;&#x44F; &#x43D;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x43D;&#x43D;&#x43E;&#x439; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; &#x437;&#x430;&#x44F;&#x432;&#x43B;&#x435;&#x43D;&#x43D;&#x43E;&#x439; &#x441;&#x43F;&#x435;&#x446;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438;, &#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x435;&#x451; &#x442;&#x438;&#x43F;&#x443;. &#x41F;&#x440;&#x438; &#x44D;&#x442;&#x43E;&#x43C; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x442;&#x432;&#x43E;, &#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;, &#x43D;&#x435; &#x434;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x431;&#x435;&#x441;&#x43F;&#x43B;&#x430;&#x442;&#x43D;&#x43E;. &#x412;&#x43E;-&#x43F;&#x435;&#x440;&#x432;&#x44B;&#x445;, &#x43B;&#x44E;&#x431;&#x443;&#x44E; &#x441;&#x445;&#x435;&#x43C;&#x443;, &#x447;&#x44C;&#x44E; &#x43A;&#x43E;&#x440;&#x440;&#x435;&#x43A;&#x442;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x432;&#x435;&#x440;&#x438;&#x444;&#x438;&#x446;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C;, &#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x43B;&#x438;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x432; &#x43C;&#x430;&#x442;&#x435;&#x43C;&#x430;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x445; &#x442;&#x435;&#x440;&#x43C;&#x438;&#x43D;&#x430;&#x445;, &#x447;&#x442;&#x43E; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x434;&#x43E;&#x441;&#x442;&#x430;&#x442;&#x43E;&#x447;&#x43D;&#x43E; &#x43D;&#x435;&#x442;&#x440;&#x438;&#x432;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x437;&#x430;&#x434;&#x430;&#x447;&#x435;&#x439;. &#x412;&#x43E;-&#x432;&#x442;&#x43E;&#x440;&#x44B;&#x445;, &#x441;&#x430;&#x43C;&#x430; &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x43A;&#x430; &#x43A;&#x43E;&#x440;&#x440;&#x435;&#x43A;&#x442;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x437;&#x430;&#x447;&#x430;&#x441;&#x442;&#x443;&#x44E; &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x432;&#x44B;&#x447;&#x438;&#x441;&#x43B;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x43E;&#x439; &#x437;&#x430;&#x434;&#x430;&#x447;&#x435;&#x439;, &#x437;&#x430;&#x442;&#x440;&#x430;&#x447;&#x438;&#x432;&#x430;&#x44E;&#x449;&#x435;&#x439; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x435; &#x430;&#x43F;&#x43F;&#x430;&#x440;&#x430;&#x442;&#x43D;&#x44B;&#x435; &#x440;&#x435;&#x441;&#x443;&#x440;&#x441;&#x44B;.</p><h2 id="-">&#x41F;&#x43E;&#x433;&#x43E;&#x434;&#x438;&#x442;&#x435;, &#x430; &#x437;&#x430;&#x447;&#x435;&#x43C; &#x44D;&#x442;&#x43E; &#x432;&#x441;&#x451;?</h2><p>&#x41D;&#x443;, &#x432;&#x43E;-&#x43F;&#x435;&#x440;&#x432;&#x44B;&#x445;, &#x44D;&#x442;&#x43E; &#x43A;&#x440;&#x430;&#x441;&#x438;&#x432;&#x43E;. &#x410; &#x435;&#x441;&#x43B;&#x438; &#x441;&#x435;&#x440;&#x44C;&#x435;&#x437;&#x43D;&#x43E;, &#x442;&#x43E; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x43D;&#x44B;&#x445; &#x43C;&#x43E;&#x442;&#x438;&#x432;&#x430;&#x446;&#x438;&#x439; &#x43A; &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x432;&#x435;&#x440;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438; &#x438; &#x430;&#x432;&#x442;&#x43E;&#x43C;&#x430;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x43E;&#x43C;&#x443; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x442;&#x432;&#x443; (&#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x441;&#x438;&#x43D;&#x442;&#x435;&#x437;&#x443; &#x447;&#x430;&#x441;&#x442;&#x438; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x442;&#x432;&#x430; &#x431;&#x435;&#x437; &#x443;&#x447;&#x430;&#x441;&#x442;&#x438;&#x44F; &#x447;&#x435;&#x43B;&#x43E;&#x432;&#x435;&#x43A;&#x430;) &#x44F; &#x432;&#x438;&#x436;&#x443; &#x434;&#x432;&#x435;.</p><p>&#x41F;&#x435;&#x440;&#x432;&#x430;&#x44F; (&#x444;&#x443;&#x43D;&#x434;&#x430;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x43B;&#x44C;&#x43D;&#x430;&#x44F;) &#x2014; &#x43D;&#x430;&#x443;&#x447;&#x438;&#x442;&#x44C; &#x43C;&#x430;&#x448;&#x438;&#x43D;&#x443; &#x43C;&#x44B;&#x441;&#x43B;&#x438;&#x442;&#x44C;-&#x442;&#x430;&#x43A;&#x438; &#x43B;&#x43E;&#x433;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438; &#x438; &#x432;&#x44B;&#x432;&#x43E;&#x434;&#x438;&#x442;&#x44C; &#x43D;&#x43E;&#x432;&#x44B;&#x435; &#x437;&#x43D;&#x430;&#x43D;&#x438;&#x44F; &#x438;&#x437; &#x438;&#x43C;&#x435;&#x44E;&#x449;&#x438;&#x445;&#x441;&#x44F;. &#x412;&#x441;&#x435; &#x43D;&#x430;&#x448;&#x438; &#x43C;&#x43E;&#x434;&#x43D;&#x44B;&#x435; &#x43D;&#x435;&#x439;&#x440;&#x43E;&#x441;&#x435;&#x442;&#x43A;&#x438; &#x43E;&#x431;&#x43B;&#x430;&#x434;&#x430;&#x44E;&#x442; &#x43E;&#x442;&#x43B;&#x438;&#x447;&#x43D;&#x44B;&#x43C;&#x438; &#x441;&#x43F;&#x43E;&#x441;&#x43E;&#x431;&#x43D;&#x43E;&#x441;&#x442;&#x44F;&#x43C;&#x438; &#x43A; &#x43E;&#x431;&#x43E;&#x431;&#x449;&#x435;&#x43D;&#x438;&#x44E; &#x438; &#x43F;&#x43E;&#x438;&#x441;&#x43A;&#x443; &#x437;&#x430;&#x43A;&#x43E;&#x43D;&#x43E;&#x43C;&#x435;&#x440;&#x43D;&#x43E;&#x441;&#x442;&#x435;&#x439;, &#x43D;&#x43E; &#x443;&#x436;&#x430;&#x441;&#x43D;&#x44B; &#x432; &#x43F;&#x43E;&#x441;&#x442;&#x440;&#x43E;&#x435;&#x43D;&#x438;&#x438; &#x43B;&#x43E;&#x433;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x445; &#x437;&#x430;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x438;&#x439; &#x43D;&#x430; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x435; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445;. &#x41B;&#x44E;&#x431;&#x43E;-&#x434;&#x43E;&#x440;&#x43E;&#x433;&#x43E; &#x441;&#x43C;&#x43E;&#x442;&#x440;&#x435;&#x442;&#x44C;, &#x43A;&#x430;&#x43A; &#x445;&#x430;&#x439;&#x43F;&#x43E;&#x432;&#x430;&#x44F; GPT-3 <a href="https://habr.com/ru/post/517856/?ref=yakovlev.me">&#x43B;&#x430;&#x436;&#x430;&#x435;&#x442; &#x43D;&#x430; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x435;&#x439;&#x448;&#x438;&#x445; &#x432;&#x43E;&#x43F;&#x440;&#x43E;&#x441;&#x430;&#x445;</a>. &#x422;&#x430;&#x43A; &#x447;&#x442;&#x43E; &#x43B;&#x438;&#x448;&#x44C; &#x441;&#x438;&#x43D;&#x442;&#x435;&#x437; &#x44D;&#x442;&#x438;&#x445; &#x434;&#x438;&#x441;&#x446;&#x438;&#x43F;&#x43B;&#x438;&#x43D; &#x43E;&#x434;&#x43D;&#x430;&#x436;&#x434;&#x44B; &#x441;&#x43C;&#x43E;&#x436;&#x435;&#x442; &#x43F;&#x440;&#x438;&#x432;&#x435;&#x441;&#x442;&#x438; &#x43D;&#x430;&#x441; &#x43A; &#x43D;&#x430;&#x441;&#x442;&#x43E;&#x44F;&#x449;&#x435;&#x43C;&#x443; &#x441;&#x438;&#x43B;&#x44C;&#x43D;&#x43E;&#x43C;&#x443; &#x438;&#x441;&#x43A;&#x443;&#x441;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x43E;&#x43C;&#x443; &#x438;&#x43D;&#x442;&#x435;&#x43B;&#x43B;&#x435;&#x43A;&#x442;&#x443;.</p><p>&#x412;&#x442;&#x43E;&#x440;&#x430;&#x44F; (&#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x430;&#x44F;) &#x2014; &#x431;&#x44B;&#x442;&#x44C; &#x443;&#x432;&#x435;&#x440;&#x435;&#x43D;&#x43D;&#x44B;&#x43C;&#x438;, &#x447;&#x442;&#x43E; &#x432; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x442;&#x432;&#x430;&#x445; &#x442;&#x435;&#x43E;&#x440;&#x435;&#x43C; &#x43E;&#x442;&#x441;&#x443;&#x442;&#x441;&#x442;&#x432;&#x443;&#x44E;&#x442; &#x43E;&#x448;&#x438;&#x431;&#x43A;&#x438;. &#x421;&#x43E;&#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x435; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x442;&#x432;&#x430; &#x432;&#x435;&#x441;&#x44C;&#x43C;&#x430; &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x44B; &#x438; &#x437;&#x430;&#x43D;&#x438;&#x43C;&#x430;&#x44E;&#x442; &#x441;&#x43E;&#x442;&#x43D;&#x438; &#x441;&#x442;&#x440;&#x430;&#x43D;&#x438;&#x446; (<a href="https://www.jstor.org/stable/2118559?origin=crossref&amp;seq=1&amp;ref=yakovlev.me">&#x432;&#x43E;&#x442;</a>, &#x43D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, 109-&#x441;&#x442;&#x440;&#x430;&#x43D;&#x438;&#x447;&#x43D;&#x43E;&#x435; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x442;&#x432;&#x43E; &#x432;&#x435;&#x43B;&#x438;&#x43A;&#x43E;&#x439; &#x442;&#x435;&#x43E;&#x440;&#x435;&#x43C;&#x44B; &#x424;&#x435;&#x440;&#x43C;&#x430;), &#x430; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442; &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x43A;&#x430; &#x438;&#x445; &#x43A;&#x43E;&#x440;&#x440;&#x435;&#x43A;&#x442;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x2014; &#x437;&#x430;&#x434;&#x430;&#x447;&#x430; &#x43D;&#x438;&#x447;&#x443;&#x442;&#x44C; &#x43D;&#x435; &#x431;&#x43E;&#x43B;&#x435;&#x435; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x430;&#x44F;, &#x447;&#x435;&#x43C; &#x43E;&#x444;&#x43E;&#x440;&#x43C;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x441;&#x430;&#x43C;&#x43E;&#x433;&#x43E; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x442;&#x432;&#x430;. &#x41A;&#x430;&#x43A; &#x43C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x431;&#x44B;&#x442;&#x44C; &#x443;&#x432;&#x435;&#x440;&#x435;&#x43D;&#x44B; &#x432; &#x442;&#x43E;&#x43C;, &#x447;&#x442;&#x43E; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x442;&#x432;&#x43E; &#x43D;&#x430; 100 &#x43B;&#x438;&#x441;&#x442;&#x430;&#x445; &#x43D;&#x435; &#x441;&#x43E;&#x434;&#x435;&#x440;&#x436;&#x438;&#x442; &#x43E;&#x448;&#x438;&#x431;&#x43A;&#x438;? &#x414;&#x43E; &#x441;&#x438;&#x445; &#x43F;&#x43E;&#x440; &#x441;&#x443;&#x449;&#x435;&#x441;&#x442;&#x432;&#x43E;&#x432;&#x430;&#x43B; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43E;&#x434;&#x438;&#x43D; &#x43C;&#x435;&#x442;&#x43E;&#x434;: &#x434;&#x430;&#x442;&#x44C; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x442;&#x432;&#x43E; &#x43D;&#x430; &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x43A;&#x443; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x438;&#x43C; <strong><em>&#x430;&#x432;&#x442;&#x43E;&#x440;&#x438;&#x442;&#x435;&#x442;&#x43D;&#x44B;&#x43C;</em></strong> &#x43C;&#x430;&#x442;&#x435;&#x43C;&#x430;&#x442;&#x438;&#x43A;&#x430;&#x43C; &#x438; <strong><em>&#x43F;&#x43E;&#x432;&#x435;&#x440;&#x438;&#x442;&#x44C;</em></strong> &#x438;&#x445; &#x437;&#x430;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x438;&#x44E;. &#x421;&#x442;&#x440;&#x430;&#x448;&#x43D;&#x43E; &#x43F;&#x43E;&#x434;&#x443;&#x43C;&#x430;&#x442;&#x44C;, &#x43C;&#x430;&#x442;&#x435;&#x43C;&#x430;&#x442;&#x438;&#x43A;&#x430;, &#x446;&#x430;&#x440;&#x438;&#x446;&#x430; &#x43D;&#x430;&#x443;&#x43A; &#x441;&#x43A;&#x430;&#x442;&#x438;&#x43B;&#x430;&#x441;&#x44C; &#x434;&#x43E; &#x432;&#x435;&#x440;&#x44B; &#x432; &#x430;&#x432;&#x442;&#x43E;&#x440;&#x438;&#x442;&#x435;&#x442;&#x44B;! &#x421;&#x430;&#x43C;&#x43E; &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x438;&#x435; &quot;&#x432;&#x435;&#x440;&#x43D;&#x43E;&#x435; &#x443;&#x442;&#x432;&#x435;&#x440;&#x436;&#x434;&#x435;&#x43D;&#x438;&#x435;&quot; &#x442;&#x435;&#x440;&#x44F;&#x435;&#x442; &#x43C;&#x430;&#x442;&#x435;&#x43C;&#x430;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x443;&#x44E; &#x447;&#x438;&#x441;&#x442;&#x43E;&#x442;&#x443;, &#x43F;&#x43E;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x443; &#x437;&#x430;&#x432;&#x442;&#x440;&#x430; &#x43E;&#x43D;&#x43E; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x441;&#x442;&#x430;&#x442;&#x44C; &#x443;&#x436;&#x435; &#x43B;&#x43E;&#x436;&#x43D;&#x44B;&#x43C;. &#x418; &#x43A;&#x430;&#x43A; &#x436;&#x435; &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43F;&#x440;&#x435;&#x437;&#x438;&#x440;&#x430;&#x442;&#x44C; &#x432;&#x441;&#x435; &#x44D;&#x43A;&#x441;&#x43F;&#x435;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x435; &#x43D;&#x430;&#x443;&#x43A;&#x438;? &#x41F;&#x43E;&#x440;&#x443;&#x447;&#x438;&#x442;&#x44C; &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x43A;&#x443; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x442;&#x432;&#x430; &#x43C;&#x430;&#x448;&#x438;&#x43D;&#x435;!</p><p>&#x415;&#x441;&#x442;&#x44C; &#x435;&#x449;&#x435; &#x442;&#x43E;&#x432;&#x430;&#x440;&#x438;&#x449;&#x438;, &#x438;&#x441;&#x43A;&#x440;&#x435;&#x43D;&#x43D;&#x435; &#x441;&#x447;&#x438;&#x442;&#x430;&#x44E;&#x449;&#x438;&#x435;, &#x447;&#x442;&#x43E; &#x43F;&#x43E;&#x434;&#x43E;&#x431;&#x43D;&#x44B;&#x435; &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x44B; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x442; &#x432;&#x44B;&#x43F;&#x443;&#x441;&#x43A;&#x430;&#x442;&#x44C; &#x431;&#x43E;&#x43B;&#x435;&#x435; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x43E;&#x435; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x43D;&#x43E;&#x435; &#x43E;&#x431;&#x435;&#x441;&#x43F;&#x435;&#x447;&#x435;&#x43D;&#x438;&#x435;, &#x43D;&#x43E; &#x44F; &#x432; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x435;&#x435; &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x43E;&#x442;&#x43D;&#x43E;&#x448;&#x443;&#x441;&#x44C; &#x43A; &#x44D;&#x442;&#x43E;&#x43C;&#x443; &#x434;&#x43E;&#x432;&#x43E;&#x43B;&#x44C;&#x43D;&#x43E; &#x441;&#x43A;&#x435;&#x43F;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;. &#x41F;&#x43E;&#x447;&#x435;&#x43C;&#x443; &#x44F; &#x432; &#x44D;&#x442;&#x43E; &#x43D;&#x435; &#x432;&#x435;&#x440;&#x44E;? &#x41D;&#x435;&#x441;&#x43C;&#x43E;&#x442;&#x440;&#x44F; &#x43D;&#x430; &#x442;&#x43E;, &#x447;&#x442;&#x43E; &#x432; &#x44D;&#x442;&#x43E;&#x43C; &#x446;&#x438;&#x43A;&#x43B;&#x435; &#x43F;&#x43E;&#x441;&#x442;&#x43E;&#x432; &#x44F; &#x431;&#x443;&#x434;&#x443; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x442;&#x44C;, &#x43A;&#x430;&#x43A; &#x432;&#x441;&#x44F; &#x44D;&#x442;&#x430; &#x43C;&#x430;&#x433;&#x438;&#x44F; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x430; &#x438; &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x43D;&#x430;, &#x43D;&#x430; &#x441;&#x430;&#x43C;&#x43E;&#x43C; &#x434;&#x435;&#x43B;&#x435; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x435; &#x442;&#x430;&#x43A;&#x438;&#x445; &#x43F;&#x43E;&#x434;&#x445;&#x43E;&#x434;&#x43E;&#x432; &#x43A; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x435; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x43D;&#x43E;&#x433;&#x43E; &#x43E;&#x431;&#x435;&#x441;&#x43F;&#x435;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x2014; &#x44D;&#x442;&#x43E; <strong>&#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x43E;</strong>. &#x422;&#x440;&#x443;&#x434;&#x43E;&#x437;&#x430;&#x442;&#x440;&#x430;&#x442;&#x44B; &#x43D;&#x430; &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x435; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x442;&#x432;&#x43E; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x43F;&#x440;&#x435;&#x432;&#x43E;&#x441;&#x445;&#x43E;&#x434;&#x44F;&#x442; &#x437;&#x430;&#x442;&#x440;&#x430;&#x442;&#x44B; &#x43D;&#x430; &#x442;&#x435; &#x436;&#x435; &#x442;&#x435;&#x441;&#x442;&#x44B;, &#x442;&#x43E;&#x433;&#x434;&#x430; &#x43A;&#x430;&#x43A; &#x440;&#x430;&#x437;&#x43D;&#x438;&#x446;&#x430; &#x43C;&#x435;&#x436;&#x434;&#x443; 100% &#x438; 99% &#x43D;&#x430;&#x434;&#x435;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x44C;&#x44E; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x44B; &#x43D;&#x435; &#x442;&#x430;&#x43A; &#x43A;&#x440;&#x438;&#x442;&#x438;&#x447;&#x43D;&#x430;. &#x421;&#x443;&#x449;&#x435;&#x441;&#x442;&#x432;&#x443;&#x435;&#x442; &#x438;&#x441;&#x43A;&#x43B;&#x44E;&#x447;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x43C;&#x430;&#x43B;&#x43E; &#x43E;&#x431;&#x43B;&#x430;&#x441;&#x442;&#x435;&#x439;, &#x432; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x445; &#x433;&#x43E;&#x442;&#x43E;&#x432;&#x44B; &#x43F;&#x435;&#x440;&#x435;&#x43F;&#x43B;&#x430;&#x447;&#x438;&#x432;&#x430;&#x442;&#x44C; &#x437;&#x430; &#x44D;&#x442;&#x43E;&#x442; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x43D;&#x442;, &#x430; &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x443;, &#x44D;&#x442;&#x430; &#x441;&#x444;&#x435;&#x440;&#x430; &#x442;&#x430;&#x43A; &#x438; &#x43E;&#x441;&#x442;&#x430;&#x43D;&#x435;&#x442;&#x441;&#x44F; &#x43C;&#x430;&#x440;&#x433;&#x438;&#x43D;&#x430;&#x43B;&#x44C;&#x449;&#x438;&#x43D;&#x43E;&#x439;.</p><h2 id="--1">&#x414;&#x432;&#x430; &#x441;&#x43B;&#x43E;&#x432;&#x430; &#x43F;&#x440;&#x43E; &#x442;&#x438;&#x43F;&#x44B;</h2><p>&#x420;&#x430;&#x441;&#x441;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x43F;&#x43E;&#x434;&#x440;&#x43E;&#x431;&#x43D;&#x43E; CoC (Calculus of Constructions) &#x438; CiC (Calculus of Inductive Constructions), &#x43D;&#x430; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x43C; &#x43F;&#x43E;&#x441;&#x442;&#x440;&#x43E;&#x435;&#x43D;&#x44B; &#x432;&#x441;&#x435; &#x441;&#x43E;&#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x435; &#x44F;&#x437;&#x44B;&#x43A;&#x438; &#x441; &#x437;&#x430;&#x432;&#x438;&#x441;&#x438;&#x43C;&#x44B;&#x43C;&#x438; &#x442;&#x438;&#x43F;&#x430;&#x43C;&#x438;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x438; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x44E;&#x442;&#x441;&#x44F; &#x434;&#x43B;&#x44F; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x442;&#x432;, &#x44F; &#x43D;&#x435; &#x431;&#x443;&#x434;&#x443;. &#x41D;&#x43E; &#x43A;&#x430;&#x43A;&#x438;&#x435;-&#x442;&#x43E; &#x431;&#x430;&#x437;&#x43E;&#x432;&#x44B;&#x435; &#x432;&#x432;&#x43E;&#x434;&#x43D;&#x44B;&#x435; &#x441;&#x43B;&#x43E;&#x432;&#x430; &#x441;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C; &#x441;&#x442;&#x43E;&#x438;&#x442;.</p><p>&#x422;&#x438;&#x43F;&#x44B; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x440;&#x430;&#x441;&#x441;&#x43C;&#x430;&#x442;&#x440;&#x438;&#x432;&#x430;&#x442;&#x44C; &#x43A;&#x430;&#x43A; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x443;&#x44E; &#x430;&#x43B;&#x44C;&#x442;&#x435;&#x440;&#x43D;&#x430;&#x442;&#x438;&#x432;&#x443; &#x43C;&#x43D;&#x43E;&#x436;&#x435;&#x441;&#x442;&#x432;&#x430;&#x43C;, &#x434;&#x43E;&#x43B;&#x433;&#x43E;&#x435; &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x438;&#x433;&#x440;&#x430;&#x432;&#x448;&#x438;&#x445; &#x440;&#x43E;&#x43B;&#x44C; &quot;&#x431;&#x430;&#x437;&#x43E;&#x432;&#x43E;&#x433;&#x43E; &#x44F;&#x437;&#x44B;&#x43A;&#x430;&quot; &#x43C;&#x430;&#x442;&#x435;&#x43C;&#x430;&#x442;&#x438;&#x43A;&#x438;. &#x414;&#x440;&#x443;&#x433;&#x438;&#x43C;&#x438; &#x441;&#x43B;&#x43E;&#x432;&#x430;&#x43C;&#x438;, &#x438;&#x441;&#x445;&#x43E;&#x434;&#x44F; &#x438;&#x437; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x435;&#x439;&#x448;&#x435;&#x439; &#x430;&#x43A;&#x441;&#x438;&#x43E;&#x43C;&#x430;&#x442;&#x438;&#x43A;&#x438; &#x43C;&#x43D;&#x43E;&#x436;&#x435;&#x441;&#x442;&#x432; (&#x430;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E; &#x438;&#x437;&#x443;&#x447;&#x430;&#x435;&#x43C;&#x43E;&#x439; &#x432; &#x448;&#x43A;&#x43E;&#x43B;&#x430;&#x445; &#x438; &#x43D;&#x430; &#x43C;&#x43B;&#x430;&#x434;&#x448;&#x438;&#x445; &#x43A;&#x443;&#x440;&#x441;&#x430;&#x445; &#x442;&#x435;&#x445;&#x43D;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x445; &#x412;&#x423;&#x417;&#x43E;&#x432;) &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x440;&#x438;&#x434;&#x442;&#x438; &#x43A; &#x43F;&#x440;&#x43E;&#x438;&#x437;&#x432;&#x43E;&#x43B;&#x44C;&#x43D;&#x44B;&#x43C; &#x43C;&#x430;&#x442;&#x435;&#x43C;&#x430;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x43C; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x44F;&#x43C; &#x43E;&#x442; &#x43D;&#x430;&#x442;&#x443;&#x440;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x447;&#x438;&#x441;&#x435;&#x43B; &#x434;&#x43E; &#x43C;&#x43D;&#x43E;&#x433;&#x43E;&#x43C;&#x435;&#x440;&#x43D;&#x44B;&#x445; &#x433;&#x435;&#x43E;&#x43C;&#x435;&#x442;&#x440;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x445; &#x43E;&#x431;&#x44A;&#x435;&#x43A;&#x442;&#x43E;&#x432;. &#x41A; &#x441;&#x43E;&#x436;&#x430;&#x43B;&#x435;&#x43D;&#x438;&#x44E;, &#x43D;&#x435;&#x441;&#x43C;&#x43E;&#x442;&#x440;&#x44F; &#x43D;&#x430; &#x441;&#x432;&#x43E;&#x44E; &#x430;&#x43A;&#x441;&#x438;&#x43E;&#x43C;&#x430;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x443;&#x44E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;&#x442;&#x443; &#x438; &#x43E;&#x43F;&#x438;&#x441;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x443;&#x44E; &#x43C;&#x43E;&#x449;&#x43D;&#x43E;&#x441;&#x442;&#x44C;, &#x441;&#x430;&#x43C;&#x430; &#x442;&#x435;&#x43E;&#x440;&#x438;&#x44F; &#x43C;&#x43D;&#x43E;&#x436;&#x435;&#x441;&#x442;&#x432; &#x43E;&#x431;&#x43B;&#x430;&#x434;&#x430;&#x435;&#x442; &#x444;&#x443;&#x43D;&#x434;&#x430;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x43C; &#x43D;&#x435;&#x434;&#x43E;&#x441;&#x442;&#x430;&#x442;&#x43A;&#x43E;&#x43C;: <a href="https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%B0%D0%B4%D0%BE%D0%BA%D1%81_%D0%A0%D0%B0%D1%81%D1%81%D0%B5%D0%BB%D0%B0?ref=yakovlev.me">&#x43E;&#x43D;&#x430; &#x43F;&#x440;&#x43E;&#x442;&#x438;&#x432;&#x43E;&#x440;&#x435;&#x447;&#x438;&#x432;&#x430;</a>, &#x430; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442;, &#x43F;&#x440;&#x438; &#x436;&#x435;&#x43B;&#x430;&#x43D;&#x438;&#x438; &#x435;&#x451; &#x438;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x440;&#x438;&#x439; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x435;&#x442; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C; &#x447;&#x442;&#x43E; &#x443;&#x433;&#x43E;&#x434;&#x43D;&#x43E;, &#x432; &#x442;&#x43E;&#x43C; &#x447;&#x438;&#x441;&#x43B;&#x435; &#x43E;&#x447;&#x435;&#x432;&#x438;&#x434;&#x43D;&#x43E; &#x43B;&#x43E;&#x436;&#x43D;&#x44B;&#x435; &#x443;&#x442;&#x432;&#x435;&#x440;&#x436;&#x434;&#x435;&#x43D;&#x438;&#x44F;.</p><p>&#x415;&#x449;&#x435; &#x43E;&#x434;&#x43D;&#x430; &#x448;&#x438;&#x440;&#x43E;&#x43A;&#x43E; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x43C;&#x430;&#x44F; &#x432; &#x448;&#x43A;&#x43E;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x43C;&#x430;&#x442;&#x435;&#x43C;&#x430;&#x442;&#x438;&#x43A;&#x435; &#x432;&#x435;&#x449;&#x44C;, &#x43E;&#x442; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x439; &#x441;&#x442;&#x43E;&#x438;&#x442; &#x43E;&#x442;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x2014; &#x44D;&#x442;&#x43E; <em><strong>&#x43D;&#x435;&#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x441;&#x442;&#x44C;</strong></em> &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x442;&#x432;, &#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x442;&#x432;&#x43E; &#x43A;&#x430;&#x43A;&#x43E;&#x433;&#x43E;-&#x442;&#x43E; &#x444;&#x430;&#x43A;&#x442;&#x430; &#x43D;&#x435; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x435;&#x442; &#x432;&#x430;&#x43C; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x44C; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x435;&#x43C;&#x44B;&#x439; &#x43E;&#x431;&#x44A;&#x435;&#x43A;&#x442;. &#x41D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, &#x432;&#x44B; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x435;&#x442;&#x435; &#x447;&#x442;&#x43E; &#x441;&#x443;&#x449;&#x435;&#x441;&#x442;&#x432;&#x443;&#x44E;&#x442; &#x434;&#x432;&#x430; &#x438;&#x440;&#x440;&#x430;&#x446;&#x438;&#x43E;&#x43D;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x447;&#x438;&#x441;&#x43B;&#x430; a &#x438; b, &#x442;&#x430;&#x43A;&#x438;&#x435; &#x447;&#x442;&#x43E; \( a^b \) &#x2014; &#x440;&#x430;&#x446;&#x438;&#x43E;&#x43D;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x435;. &#x41D;&#x43E; &#x43F;&#x440;&#x438; &#x44D;&#x442;&#x43E;&#x43C; &#x43D;&#x435; &#x43F;&#x440;&#x435;&#x434;&#x44A;&#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x435; &#x441;&#x430;&#x43C;&#x438; &#x44D;&#x442;&#x438; &#x447;&#x438;&#x441;&#x43B;&#x430;. &#x41D;&#x443;, &#x438; &#x437;&#x430;&#x447;&#x435;&#x43C; &#x43D;&#x430;&#x43C; &#x442;&#x430;&#x43A;&#x43E;&#x435; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x442;&#x432;&#x43E;?</p><p>&#x42D;&#x442;&#x43E; &#x43F;&#x440;&#x438;&#x432;&#x435;&#x43B;&#x43E; &#x43A; &#x43F;&#x43E;&#x44F;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x44E; &#x434;&#x432;&#x443;&#x445; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x432;&#x430;&#x436;&#x43D;&#x44B;&#x445; &#x434;&#x43B;&#x44F; &#x440;&#x430;&#x441;&#x441;&#x43C;&#x430;&#x442;&#x440;&#x438;&#x432;&#x430;&#x435;&#x43C;&#x43E;&#x433;&#x43E; &#x43F;&#x440;&#x435;&#x434;&#x43C;&#x435;&#x442;&#x430; &#x442;&#x435;&#x447;&#x435;&#x43D;&#x438;&#x439;: <strong><em>&#x442;&#x435;&#x43E;&#x440;&#x438;&#x44F; &#x442;&#x438;&#x43F;&#x43E;&#x432;</em></strong> &#x438; <strong><em>&#x438;&#x43D;&#x442;&#x443;&#x438;&#x446;&#x438;&#x43E;&#x43D;&#x438;&#x437;&#x43C;</em></strong>.</p><p><strong><em>&#x422;&#x435;&#x43E;&#x440;&#x438;&#x44F; &#x442;&#x438;&#x43F;&#x43E;&#x432;</em></strong> (&#x442;&#x43E;&#x447;&#x43D;&#x435;&#x435;, &#x442;&#x43E;&#x442; &#x432;&#x430;&#x440;&#x438;&#x430;&#x43D;&#x442;, &#x447;&#x442;&#x43E; &#x43C;&#x44B; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x437;&#x434;&#x435;&#x441;&#x44C; &#x440;&#x430;&#x441;&#x441;&#x43C;&#x430;&#x442;&#x440;&#x438;&#x432;&#x430;&#x442;&#x44C;) &#x443;&#x441;&#x442;&#x430;&#x43D;&#x430;&#x432;&#x43B;&#x438;&#x432;&#x430;&#x435;&#x442; &#x436;&#x435;&#x441;&#x442;&#x43A;&#x443;&#x44E; &#x438;&#x435;&#x440;&#x430;&#x440;&#x445;&#x438;&#x44E; &#x43D;&#x430; &#x43F;&#x440;&#x438;&#x43D;&#x430;&#x434;&#x43B;&#x435;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x43E;&#x431;&#x44A;&#x435;&#x43A;&#x442;&#x43E;&#x432; (&#x442;&#x435;&#x440;&#x43C;&#x43E;&#x432;) &#x43A;&#x430;&#x43A;&#x438;&#x43C;-&#x43B;&#x438;&#x431;&#x43E; &#x441;&#x43A;&#x43E;&#x43F;&#x43B;&#x435;&#x43D;&#x438;&#x44F;&#x43C; &#x2014; &#x442;&#x438;&#x43F;&#x430;&#x43C;. &#x422;&#x430;&#x43A;, &#x432;&#x441;&#x435; &#x43F;&#x440;&#x438;&#x43C;&#x438;&#x442;&#x438;&#x432;&#x43D;&#x44B;&#x435; &#x43E;&#x431;&#x44A;&#x435;&#x43A;&#x442;&#x44B; &#x431;&#x443;&#x434;&#x443;&#x442; &#x43B;&#x435;&#x436;&#x430;&#x442;&#x44C; &#x432; &#x442;&#x435;&#x445; &#x438;&#x43B;&#x438; &#x438;&#x43D;&#x44B;&#x445; &#x43C;&#x43D;&#x43E;&#x436;&#x435;&#x441;&#x442;&#x432;&#x430;&#x445; &#x2014; &#x442;&#x438;&#x43F;&#x430;&#x445; &#x43D;&#x443;&#x43B;&#x435;&#x432;&#x43E;&#x433;&#x43E; &#x43F;&#x43E;&#x440;&#x44F;&#x434;&#x43A;&#x430;, &#x43E;&#x431;&#x440;&#x430;&#x437;&#x443;&#x44E;&#x449;&#x438;&#x445; <strong><em>&#x432;&#x441;&#x435;&#x43B;&#x435;&#x43D;&#x43D;&#x443;&#x44E;</em></strong> &#x442;&#x430;&#x43A;&#x438;&#x445; &#x442;&#x438;&#x43F;&#x43E;&#x432; <code>Type 0</code>, &#x43E;&#x434;&#x43D;&#x430;&#x43A;&#x43E; &#x441;&#x430;&#x43C;&#x438; &#x43C;&#x43D;&#x43E;&#x436;&#x435;&#x441;&#x442;&#x432;&#x430; &#x43D;&#x435; &#x43C;&#x43E;&#x433;&#x443;&#x442; &#x43B;&#x435;&#x436;&#x430;&#x442;&#x44C; &#x432; &#x434;&#x440;&#x443;&#x433;&#x438;&#x445; &#x43C;&#x43D;&#x43E;&#x436;&#x435;&#x441;&#x442;&#x432;&#x430;&#x445;. &#x412;&#x43C;&#x435;&#x441;&#x442;&#x43E; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43E;&#x43D;&#x438; &#x431;&#x443;&#x434;&#x443;&#x442; &#x43F;&#x440;&#x438;&#x43D;&#x430;&#x434;&#x43B;&#x435;&#x436;&#x430;&#x442;&#x44C; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x43C; &#x431;&#x43E;&#x43B;&#x435;&#x435; &#x43A;&#x440;&#x443;&#x43F;&#x43D;&#x44B;&#x43C; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x430;&#x43C; &#x2014; &#x442;&#x438;&#x43F;&#x430;&#x43C; &#x43F;&#x435;&#x440;&#x432;&#x43E;&#x433;&#x43E; &#x43F;&#x43E;&#x440;&#x44F;&#x434;&#x43A;&#x430; (<code>Type 1</code>). &#x410;&#x43D;&#x430;&#x43B;&#x43E;&#x433;&#x438;&#x447;&#x43D;&#x43E; &#x43F;&#x440;&#x43E;&#x434;&#x43E;&#x43B;&#x436;&#x430;&#x44F;, &#x43C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x44C; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x43E;, &#x447;&#x442;&#x43E; &#x43A;&#x430;&#x436;&#x434;&#x44B;&#x439; &#x442;&#x438;&#x43F; &#x43F;&#x43E;&#x440;&#x44F;&#x434;&#x43A;&#x430; <code>u</code> &#x431;&#x443;&#x434;&#x435;&#x442; &#x43B;&#x435;&#x436;&#x430;&#x442;&#x44C; &#x432; &#x442;&#x438;&#x43F;&#x435; &#x43F;&#x43E;&#x440;&#x44F;&#x434;&#x43A;&#x430; <code>u+1</code>, &#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; <code>Type u : Type (u+1)</code>. &#x42D;&#x442;&#x43E; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x435;&#x442; &#x438;&#x437;&#x431;&#x435;&#x436;&#x430;&#x442;&#x44C; &#x43F;&#x430;&#x440;&#x430;&#x434;&#x43E;&#x43A;&#x441;&#x43E;&#x432;, &#x432;&#x43D;&#x435;&#x441;&#x44F; &#x435;&#x449;&#x435; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435; &#x441;&#x442;&#x440;&#x43E;&#x433;&#x43E;&#x441;&#x442;&#x438; &#x432; &#x43E;&#x43F;&#x438;&#x441;&#x430;&#x43D;&#x438;&#x435; &#x440;&#x430;&#x441;&#x441;&#x43C;&#x430;&#x442;&#x440;&#x438;&#x432;&#x430;&#x435;&#x43C;&#x44B;&#x445; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x439;. &#x41F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x438;&#x43C; &#x434;&#x43E;&#x43F;&#x43E;&#x43B;&#x43D;&#x435;&#x43D;&#x438;&#x435;&#x43C; &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x43A;&#x443;&#x43C;&#x443;&#x43B;&#x44F;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x435; &#x432;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x432;&#x441;&#x435;&#x43B;&#x435;&#x43D;&#x43D;&#x44B;&#x445; &#x442;&#x438;&#x43F;&#x43E;&#x432; &#x434;&#x440;&#x443;&#x433; &#x432; &#x434;&#x440;&#x443;&#x433;&#x430;. &#x42D;&#x442;&#x43E; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442;, &#x447;&#x442;&#x43E; &#x43B;&#x44E;&#x431;&#x43E;&#x439; &#x442;&#x438;&#x43F; &#x43B;&#x435;&#x436;&#x438;&#x442; &#x43D;&#x435; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x432; &#x442;&#x438;&#x43F;&#x435; &#x443;&#x440;&#x43E;&#x432;&#x43D;&#x44F; &#x43D;&#x430; &#x435;&#x434;&#x438;&#x43D;&#x438;&#x446;&#x443; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435;, &#x43D;&#x43E; &#x438; &#x432;&#x43E; &#x432;&#x441;&#x435;&#x445; &#x442;&#x438;&#x43F;&#x430;&#x445; &#x431;&#x43E;&#x43B;&#x435;&#x435; &#x432;&#x44B;&#x441;&#x43E;&#x43A;&#x43E;&#x433;&#x43E; &#x43F;&#x43E;&#x440;&#x44F;&#x434;&#x43A;&#x430;.</p><p>&#x41F;&#x43E;&#x434; <strong><em>&#x438;&#x43D;&#x442;&#x443;&#x438;&#x446;&#x438;&#x43E;&#x43D;&#x438;&#x437;&#x43C;&#x43E;&#x43C;</em></strong> &#x432; &#x441;&#x430;&#x43C;&#x43E;&#x43C; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;&#x43C; &#x432;&#x438;&#x434;&#x435; &#x43C;&#x44B; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x43F;&#x43E;&#x43D;&#x438;&#x43C;&#x430;&#x442;&#x44C; &#x43E;&#x442;&#x441;&#x443;&#x442;&#x441;&#x442;&#x432;&#x438;&#x435; &#x430;&#x43A;&#x441;&#x438;&#x43E;&#x43C;&#x44B; &#x438;&#x441;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x43D;&#x43E;&#x433;&#x43E; &#x442;&#x440;&#x435;&#x442;&#x44C;&#x435;&#x433;&#x43E; (<code>A &#x2228; &#xAC;A</code>) &#x438;&#x43B;&#x438;, &#x447;&#x442;&#x43E; &#x442;&#x43E; &#x436;&#x435; &#x441;&#x430;&#x43C;&#x43E;&#x435;, &#x437;&#x430;&#x43A;&#x43E;&#x43D;&#x430; &#x441;&#x43D;&#x44F;&#x442;&#x438;&#x44F; &#x434;&#x432;&#x43E;&#x439;&#x43D;&#x43E;&#x433;&#x43E; &#x43E;&#x442;&#x440;&#x438;&#x446;&#x430;&#x43D;&#x438;&#x44F; (<code>&#xAC;&#xAC;A &#x2192; A</code>). &#x421; &#x444;&#x438;&#x43B;&#x43E;&#x441;&#x43E;&#x444;&#x441;&#x43A;&#x43E;&#x439; &#x442;&#x43E;&#x447;&#x43A;&#x438; &#x437;&#x440;&#x435;&#x43D;&#x438;&#x44F; &#x44D;&#x442;&#x43E; &#x43E;&#x437;&#x43D;&#x430;&#x447;&#x430;&#x435;&#x442;, &#x447;&#x442;&#x43E; &#x438;&#x437; &#x43E;&#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x436;&#x435;&#x43D;&#x438;&#x44F; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x433;&#x43E; &#x444;&#x430;&#x43A;&#x442;&#x430; &#x43D;&#x435; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x435;&#x442; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x442;&#x432;&#x43E; &#x435;&#x433;&#x43E; &#x43E;&#x442;&#x440;&#x438;&#x446;&#x430;&#x43D;&#x438;&#x44F;. &#x414;&#x440;&#x443;&#x433;&#x438;&#x43C;&#x438; &#x441;&#x43B;&#x43E;&#x432;&#x430;&#x43C;&#x438;, &#x435;&#x434;&#x438;&#x43D;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x44B;&#x439; &#x441;&#x43F;&#x43E;&#x441;&#x43E;&#x431; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C; &#x447;&#x442;&#x43E;-&#x442;&#x43E; &#x432; &#x438;&#x43D;&#x442;&#x443;&#x438;&#x446;&#x438;&#x43E;&#x43D;&#x438;&#x437;&#x43C;&#x435; &#x2014; &#x43F;&#x440;&#x438;&#x432;&#x435;&#x441;&#x442;&#x438; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x44E; (&#x442;&#x43E;&#x442; &#x441;&#x430;&#x43C;&#x44B;&#x439; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x44B;&#x439; &#x43C;&#x435;&#x442;&#x43E;&#x434; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x442;&#x432;&#x430;). &#x41D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, &#x434;&#x43B;&#x44F; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x442;&#x432;&#x430; &#x441;&#x443;&#x449;&#x435;&#x441;&#x442;&#x432;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x43D;&#x430;&#x442;&#x443;&#x440;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x447;&#x438;&#x441;&#x435;&#x43B; &#x43C;&#x435;&#x43D;&#x44C;&#x448;&#x435; 10 &#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x43F;&#x440;&#x435;&#x434;&#x44A;&#x44F;&#x432;&#x438;&#x442;&#x44C; &#x445;&#x43E;&#x442;&#x44C; &#x43E;&#x434;&#x43D;&#x43E; &#x442;&#x430;&#x43A;&#x43E;&#x435; &#x447;&#x438;&#x441;&#x43B;&#x43E;. &#x410; &#x434;&#x43B;&#x44F; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x442;&#x432;&#x430; &#x443;&#x43F;&#x43E;&#x43C;&#x438;&#x43D;&#x430;&#x435;&#x43C;&#x43E;&#x433;&#x43E; &#x432;&#x44B;&#x448;&#x435; &#x444;&#x430;&#x43A;&#x442;&#x430; &#x43A;&#x43E;&#x43C;&#x43C;&#x443;&#x442;&#x430;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x441;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F; &#x43D;&#x430;&#x442;&#x443;&#x440;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x447;&#x438;&#x441;&#x435;&#x43B; &#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C;, &#x441;&#x43F;&#x43E;&#x441;&#x43E;&#x431; &#x43F;&#x440;&#x438;&#x432;&#x435;&#x434;&#x435;&#x43D;&#x438;&#x44F; &#x43E;&#x431;&#x435;&#x438;&#x445; &#x447;&#x430;&#x441;&#x442;&#x435;&#x439; &#x43A; &#x43E;&#x434;&#x438;&#x43D;&#x430;&#x43A;&#x43E;&#x432;&#x43E;&#x43C;&#x443; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x443;. &#x414;&#x430;&#x43B;&#x435;&#x435; &#x43C;&#x44B; &#x430;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x44D;&#x442;&#x438;&#x43C; &#x441;&#x43E;&#x43E;&#x431;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x435;&#x43C;, &#x43F;&#x440;&#x435;&#x434;&#x44A;&#x44F;&#x432;&#x43B;&#x44F;&#x44F; &#x43A;&#x43E;&#x43D;&#x43A;&#x440;&#x435;&#x442;&#x43D;&#x44B;&#x435; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;&#x44B; &#x442;&#x435;&#x440;&#x43C;&#x43E;&#x432;, &#x438;&#x43C;&#x435;&#x44E;&#x449;&#x438;&#x445; &#x442;&#x438;&#x43F;&#x44B;, &#x441;&#x43E;&#x434;&#x435;&#x440;&#x436;&#x430;&#x449;&#x438;&#x435; &#x443;&#x442;&#x432;&#x435;&#x440;&#x436;&#x434;&#x435;&#x43D;&#x438;&#x44F;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x43C;&#x44B; &#x445;&#x43E;&#x442;&#x438;&#x43C; &#x434;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C;.</p><h2 id="setup">Setup</h2><p>&#x421;&#x43A;&#x430;&#x447;&#x430;&#x442;&#x44C; Lean 3 &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x441; <a href="https://github.com/leanprover/lean/releases/tag/v3.4.2?ref=yakovlev.me">GitHub</a> &#x438;&#x43B;&#x438; &#x432; &#x440;&#x435;&#x43F;&#x43E;&#x437;&#x438;&#x442;&#x43E;&#x440;&#x438;&#x44F;&#x445; &#x432;&#x430;&#x448;&#x435;&#x439; &#x43E;&#x43F;&#x435;&#x440;&#x430;&#x446;&#x438;&#x43E;&#x43D;&#x43D;&#x43E;&#x439; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x44B; &#x43E;&#x43F;&#x435;&#x440;&#x430;&#x446;&#x438;&#x43E;&#x43D;&#x43D;&#x44B;&#x445; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;. &#x41F;&#x43E;&#x43A;&#x430; &#x44D;&#x442;&#x43E;&#x442; &#x442;&#x435;&#x43A;&#x441;&#x442; &#x433;&#x43E;&#x442;&#x43E;&#x432;&#x438;&#x43B;&#x441;&#x44F;, &#x432;&#x435;&#x442;&#x43A;&#x430; 3.&#x445; &#x431;&#x44B;&#x43B;&#x430; &#x437;&#x430;&#x43C;&#x43E;&#x440;&#x43E;&#x436;&#x435;&#x43D;&#x430; (&#x43D;&#x43E; &#x43F;&#x440;&#x43E;&#x434;&#x43E;&#x43B;&#x436;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x432; &#x432;&#x438;&#x434;&#x435; <a href="https://github.com/leanprover-community/lean?ref=yakovlev.me">community &#x432;&#x435;&#x442;&#x43A;&#x438;</a>), &#x441;&#x435;&#x439;&#x447;&#x430;&#x441; &#x432; &#x430;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x439; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x435; &#x432;&#x435;&#x440;&#x441;&#x438;&#x44F; 4, &#x43D;&#x43E; &#x43E;&#x43D;&#x430; &#x43F;&#x43E;&#x43A;&#x430; &#x43A;&#x440;&#x430;&#x439;&#x43D;&#x435; &#x43D;&#x435;&#x434;&#x440;&#x443;&#x436;&#x435;&#x43B;&#x44E;&#x431;&#x43D;&#x430; &#x43A; &#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44F;&#x43C;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/10/image.png" class="kg-image" alt loading="lazy" width="1722" height="338" srcset="https://yakovlev.me/content/images/size/w600/2020/10/image.png 600w, https://yakovlev.me/content/images/size/w1000/2020/10/image.png 1000w, https://yakovlev.me/content/images/size/w1600/2020/10/image.png 1600w, https://yakovlev.me/content/images/2020/10/image.png 1722w" sizes="(min-width: 720px) 720px"><figcaption>README.md &#x434;&#x43B;&#x44F; &#x440;&#x435;&#x43F;&#x43E;&#x437;&#x438;&#x442;&#x43E;&#x440;&#x438;&#x44F; <a href="https://github.com/leanprover/lean4?ref=yakovlev.me">Lean 4</a></figcaption></figure><p>&#x414;&#x43B;&#x44F; &#x43F;&#x43E;&#x43B;&#x43D;&#x43E;&#x446;&#x435;&#x43D;&#x43D;&#x43E;&#x433;&#x43E; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x44F;&#x437;&#x44B;&#x43A;&#x430; &#x43D;&#x430;&#x43C; &#x43F;&#x43E;&#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x441;&#x43E;&#x432;&#x43C;&#x435;&#x441;&#x442;&#x438;&#x43C;&#x430;&#x44F; IDE, &#x43A; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x43C; &#x432; &#x43D;&#x430;&#x441;&#x442;&#x43E;&#x44F;&#x449;&#x438;&#x439; &#x43C;&#x43E;&#x43C;&#x435;&#x43D;&#x442; &#x43E;&#x442;&#x43D;&#x43E;&#x441;&#x44F;&#x442;&#x441;&#x44F; <a href="https://github.com/leanprover/lean-mode?ref=yakovlev.me">Emacs</a>, <a href="https://github.com/leanprover/lean.vim?ref=yakovlev.me">VIM</a> &#x438; <a href="https://github.com/leanprover/vscode-lean?ref=yakovlev.me">VS Code</a>. &#x42F; &#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x44E;&#x441;&#x44C; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x435;&#x439;, &#x433;&#x434;&#x435; &#x432;&#x441;&#x44F; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430; &#x432;&#x44B;&#x433;&#x43B;&#x44F;&#x434;&#x438;&#x442; &#x432;&#x43E;&#x442; &#x442;&#x430;&#x43A;:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2019/09/image.png" class="kg-image" alt loading="lazy"><figcaption>&#x420;&#x430;&#x431;&#x43E;&#x442;&#x430; c Lean &#x432; VS Code</figcaption></figure><p>&#x412; &#x44F;&#x437;&#x44B;&#x43A;&#x435; &#x430;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x44E;&#x43D;&#x438;&#x43A;&#x43E;&#x434;, &#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x438; &#x441;&#x430;&#x43C;&#x43E;&#x43C;&#x443;. &#x422;&#x430;&#x43A;, &#x434;&#x43B;&#x44F; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x43A;&#x440;&#x430;&#x441;&#x438;&#x432;&#x43E;&#x433;&#x43E; &#x441;&#x438;&#x43C;&#x432;&#x43E;&#x43B;&#x430; &#x2115; &#x434;&#x43E;&#x441;&#x442;&#x430;&#x442;&#x43E;&#x447;&#x43D;&#x43E; &#x432; VS Code &#x432;&#x432;&#x435;&#x441;&#x442;&#x438; <code>\nat</code>, &#x430; &#x43A;&#x440;&#x430;&#x441;&#x438;&#x432;&#x430;&#x44F; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430; (&#x3BB;) &#x431;&#x443;&#x434;&#x435;&#x442; &#x437;&#x430;&#x434;&#x430;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x447;&#x435;&#x440;&#x435;&#x437; <code>\fun</code> &#x438;&#x43B;&#x438; <code>\lam</code>. &#x413;&#x43B;&#x430;&#x432;&#x43D;&#x44B;&#x43C; &#x43D;&#x435;&#x434;&#x43E;&#x441;&#x442;&#x430;&#x442;&#x43A;&#x43E;&#x43C; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; Lean &#x432; VIM, &#x43F;&#x43E;&#x436;&#x430;&#x43B;&#x443;&#x439;, &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x43E;&#x442;&#x441;&#x443;&#x442;&#x441;&#x442;&#x432;&#x438;&#x435; &#x43D;&#x43E;&#x440;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x43F;&#x43E;&#x434;&#x434;&#x435;&#x440;&#x436;&#x43A;&#x438; &#x44D;&#x442;&#x43E;&#x439; &#x444;&#x438;&#x448;&#x43A;&#x438;. &#x412; &#x43E;&#x441;&#x442;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x43C; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x442;&#x44C; &#x43D;&#x435; &#x43C;&#x435;&#x43D;&#x435;&#x435; &#x443;&#x434;&#x43E;&#x431;&#x43D;&#x43E;:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2019/09/image-1.png" class="kg-image" alt loading="lazy"><figcaption>&#x420;&#x430;&#x431;&#x43E;&#x442;&#x430; &#x441; Lean &#x432; VIM</figcaption></figure><h2 id="hello-world">Hello World</h2><p>Lean &#x2014; &#x44F;&#x437;&#x44B;&#x43A;, &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x43D;&#x43D;&#x44B;&#x439; &#x432; &#x43F;&#x435;&#x440;&#x432;&#x443;&#x44E; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x434;&#x43B;&#x44F; &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x432;&#x435;&#x440;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438;, &#x430; &#x43D;&#x435; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x432; &#x43F;&#x440;&#x438;&#x432;&#x44B;&#x447;&#x43D;&#x43E;&#x43C; &#x43F;&#x43E;&#x43D;&#x438;&#x43C;&#x430;&#x43D;&#x438;&#x438; &#x441;&#x43B;&#x43E;&#x432;&#x430;. &#x422;&#x435;&#x43C; &#x43D;&#x435; &#x43C;&#x435;&#x43D;&#x435;&#x435; &#x43C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x43B;&#x435;&#x433;&#x43A;&#x43E; &#x432;&#x44B;&#x432;&#x435;&#x441;&#x442;&#x438; &#x43B;&#x44E;&#x431;&#x443;&#x44E; &#x441;&#x442;&#x440;&#x43E;&#x43A;&#x443; &#x43D;&#x430; &#x44D;&#x43A;&#x440;&#x430;&#x43D; &#x441; &#x43F;&#x43E;&#x43C;&#x43E;&#x449;&#x44C;&#x44E; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x44B; <code>#print</code>. &#x414;&#x43B;&#x44F; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x442;&#x44C; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x435;&#x439;&#x448;&#x438;&#x439; &#x444;&#x430;&#x439;&#x43B; (&#x441;&#x43A;&#x430;&#x436;&#x435;&#x43C;, <code>hello_world.lean</code>):</p><figure class="kg-card kg-code-card"><pre><code class="language-lean">#print &quot;Hello World!&quot;
</code></pre><figcaption>hello_world.lean</figcaption></figure><p>&#x418; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x442;&#x438;&#x442;&#x44C; &#x435;&#x433;&#x43E; &#x438;&#x437; &#x43A;&#x43E;&#x43D;&#x441;&#x43E;&#x43B;&#x438; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x43C; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x43C;:</p><pre><code class="language-console">$ lean hello_world.lean
Hello, World!
</code></pre><p>&#x414;&#x430;&#x43B;&#x435;&#x435; &#x43C;&#x44B; &#x43D;&#x435; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x43A;&#x43E;&#x43D;&#x441;&#x43E;&#x43B;&#x44C;&#x43D;&#x44B;&#x43C; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x43A;&#x43E;&#x43C;, &#x43F;&#x440;&#x435;&#x434;&#x43F;&#x43E;&#x447;&#x438;&#x442;&#x430;&#x44F; &#x432;&#x43C;&#x435;&#x441;&#x442;&#x43E; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x443; &#x432; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x439; &#x441;&#x440;&#x435;&#x434;&#x435;. &#x41E;&#x434;&#x43D;&#x430;&#x43A;&#x43E; &#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x43D;&#x430; Lean &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x445;&#x43E;&#x442;&#x44C; &#x432; &#x411;&#x43B;&#x43E;&#x43A;&#x43D;&#x43E;&#x442;&#x435;: &#x432;&#x441;&#x435; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x44B;, &#x43D;&#x430;&#x447;&#x438;&#x43D;&#x430;&#x44E;&#x449;&#x438;&#x435;&#x441;&#x44F; &#x441; <code>#</code> &#x431;&#x443;&#x434;&#x443;&#x442; &#x432;&#x44B;&#x432;&#x43E;&#x434;&#x438;&#x442;&#x44C; &#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x446;&#x438;&#x44E; &#x432; <code>stdout</code> &#x43F;&#x440;&#x438; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x43A;&#x435; &#x43D;&#x430; &#x43D;&#x438;&#x445; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x43F;&#x440;&#x435;&#x442;&#x430;&#x442;&#x43E;&#x440;&#x430; Lean.</p><h2 id="--2">&#x412;&#x44B;&#x432;&#x43E;&#x434; &#x442;&#x438;&#x43F;&#x430;</h2><p>&#x411;&#x430;&#x437;&#x43E;&#x432;&#x43E;&#x439; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x43E;&#x439;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x439; &#x43C;&#x44B; &#x43F;&#x43E;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x43D;&#x43E; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F;, &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x430; <code>#check</code>, &#x43E;&#x441;&#x443;&#x449;&#x435;&#x441;&#x442;&#x432;&#x43B;&#x44F;&#x44E;&#x449;&#x430;&#x44F; &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x43A;&#x443; &#x442;&#x438;&#x43F;&#x430; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x433;&#x43E; &#x432;&#x44B;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x44F;. &#x412;&#x43E;&#x442; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;&#x43E;&#x432; &#x435;&#x451; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F;:</p><pre><code class="language-lean">#check 5
#check &apos;a&apos;
#check tt
</code></pre><p>&#x41A;&#x430;&#x436;&#x434;&#x430;&#x44F; &#x438;&#x437; &#x44D;&#x442;&#x438;&#x445; &#x441;&#x442;&#x440;&#x43E;&#x447;&#x435;&#x43A; &#x432; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441;&#x435; &#x432;&#x44B;&#x43F;&#x43E;&#x43B;&#x43D;&#x435;&#x43D;&#x438;&#x44F; &#x432;&#x435;&#x440;&#x43D;&#x435;&#x442; &#x442;&#x438;&#x43F; &#x432;&#x44B;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x44F;. &#x418;&#x43C;&#x438; &#x441;&#x442;&#x430;&#x43D;&#x443;&#x442;:</p><pre><code class="language-lean">5   : &#x2115;
&apos;a&apos; : char
tt  : bool
</code></pre><p>&#x412; Lean <a href="https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82_%D0%BF%D0%B5%D1%80%D0%B2%D0%BE%D0%B3%D0%BE_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0?ref=yakovlev.me">&#x43E;&#x431;&#x44A;&#x435;&#x43A;&#x442;&#x430;&#x43C;&#x438; &#x43F;&#x435;&#x440;&#x432;&#x43E;&#x433;&#x43E; &#x43A;&#x43B;&#x430;&#x441;&#x441;&#x430;</a> &#x44F;&#x432;&#x43B;&#x44F;&#x44E;&#x442;&#x441;&#x44F; &#x43D;&#x435; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43F;&#x440;&#x438;&#x43C;&#x438;&#x442;&#x438;&#x432;&#x43D;&#x44B;&#x435; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x44F;, &#x43D;&#x43E; &#x438; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438;, &#x438; &#x442;&#x438;&#x43F;&#x44B;. &#x41E;&#x43D;&#x438; &#x43C;&#x43E;&#x433;&#x443;&#x442; &#x431;&#x44B;&#x442;&#x44C; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x44B; &#x43A;&#x430;&#x43A; &#x430;&#x440;&#x433;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x44B; &#x438; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x439;, &#x430; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442; &#x442;&#x43E;&#x436;&#x435; &#x434;&#x43E;&#x43B;&#x436;&#x43D;&#x44B; &#x438;&#x43C;&#x435;&#x442;&#x44C; &#x43A;&#x430;&#x43A;&#x43E;&#x439;-&#x442;&#x43E; &#x442;&#x438;&#x43F;:</p><pre><code class="language-lean">#check &#x2115;
#check fun x, x + 1
</code></pre><p>&#x412;&#x435;&#x440;&#x43D;&#x435;&#x442;, &#x441;&#x43E;&#x43E;&#x442;&#x432;&#x435;&#x442;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x43E;:</p><pre><code class="language-lean">&#x2115;                : Type
&#x3BB; (x : &#x2115;), x + 1 : &#x2115; &#x2192; &#x2115;
</code></pre><p>&#x421;&#x442;&#x440;&#x435;&#x43B;&#x43E;&#x447;&#x43D;&#x430;&#x44F; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x44F; &#x442;&#x430;&#x43A;&#x436;&#x435; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x431;&#x44B;&#x442;&#x44C; &#x43F;&#x440;&#x43E;&#x442;&#x438;&#x43F;&#x438;&#x437;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x430; (&#x434;&#x43B;&#x44F; &#x440;&#x438;&#x441;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x43A;&#x440;&#x430;&#x441;&#x438;&#x432;&#x43E;&#x439; &#x441;&#x442;&#x440;&#x435;&#x43B;&#x43E;&#x447;&#x43A;&#x438; &#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x432;&#x43E;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x441;&#x43E;&#x43A;&#x440;&#x430;&#x449;&#x435;&#x43D;&#x438;&#x435;&#x43C; <code>\r</code>):</p><pre><code class="language-lean">#check &#x2115; &#x2192; &#x2115;
</code></pre><p>&#x422;&#x430;&#x43A;&#x430;&#x44F; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x44F;, &#x43E;&#x436;&#x438;&#x434;&#x430;&#x435;&#x43C;&#x43E;, &#x432;&#x43D;&#x43E;&#x432;&#x44C; &#x432;&#x435;&#x440;&#x43D;&#x435;&#x442; <code>Type</code>.</p><p>&#x421;&#x430;&#x43C;&#x430; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x44F; <code>Type</code> &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x431;&#x44B;&#x442;&#x44C; &#x43F;&#x440;&#x43E;&#x442;&#x438;&#x43F;&#x438;&#x437;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x430;, &#x432;&#x435;&#x434;&#x44C; &#x44D;&#x442;&#x43E; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x442;&#x438;&#x43F;, &#x430; &#x442;&#x438;&#x43F;&#x44B; &#x432; Lean, &#x43A;&#x430;&#x43A; &#x43C;&#x44B; &#x443;&#x436;&#x435; &#x441;&#x43A;&#x430;&#x437;&#x430;&#x43B;&#x438;, &#x44F;&#x432;&#x43B;&#x44F;&#x44E;&#x442;&#x441;&#x44F; &#x43E;&#x431;&#x44A;&#x435;&#x43A;&#x442;&#x430;&#x43C;&#x438; &#x43F;&#x435;&#x440;&#x432;&#x43E;&#x433;&#x43E; &#x43A;&#x43B;&#x430;&#x441;&#x441;&#x430;.</p><pre><code>#check Type
</code></pre><p>&#x41F;&#x43E;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x443; Lean &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x44F;&#x437;&#x44B;&#x43A;&#x43E;&#x43C; &#x438;&#x441;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x43F;&#x440;&#x435;&#x434;&#x438;&#x43A;&#x430;&#x442;&#x438;&#x432;&#x43D;&#x44B;&#x445; &#x438;&#x43D;&#x434;&#x443;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x44B;&#x445; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x439;, &#x442;&#x43E; &#x432;&#x441;&#x435; &#x442;&#x438;&#x43F;&#x44B; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x443;&#x44E;&#x442; &#x432; &#x43D;&#x435;&#x43C; &#x43A;&#x443;&#x43C;&#x443;&#x43B;&#x44F;&#x442;&#x438;&#x432;&#x43D;&#x443;&#x44E; &#x438;&#x435;&#x440;&#x430;&#x440;&#x445;&#x438;&#x44E;. &#x422;&#x438;&#x43F; <code>Type (0)</code> &#x43B;&#x435;&#x436;&#x438;&#x442; &#x432; <code>Type 1</code> &#x438; &#x432;&#x441;&#x435;&#x445; &#x431;&#x43E;&#x43B;&#x435;&#x435; &#x432;&#x44B;&#x441;&#x43E;&#x43A;&#x438;&#x445; &#x432;&#x441;&#x435;&#x43B;&#x435;&#x43D;&#x43D;&#x44B;&#x445; (<code>Type n</code>). &#x41D;&#x430;&#x448; &#x437;&#x430;&#x43F;&#x440;&#x43E;&#x441; &#x43E;&#x442;&#x43E;&#x431;&#x440;&#x430;&#x437;&#x438;&#x442; &#x43D;&#x430;&#x43C; &#x431;&#x43B;&#x438;&#x436;&#x430;&#x439;&#x448;&#x443;&#x44E;:</p><pre><code class="language-lean">Type : Type 1
</code></pre><p>&#x412; &#x441;&#x442;&#x430;&#x43D;&#x434;&#x430;&#x440;&#x442;&#x43D;&#x43E;&#x439; &#x431;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x435; &#x442;&#x430;&#x43A;&#x436;&#x435; &#x43E;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x435;&#x43D;&#x44B; &#x43F;&#x43E;&#x43B;&#x435;&#x437;&#x43D;&#x44B;&#x435; &#x432; &#x43D;&#x430;&#x442;&#x443;&#x440;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x43C; &#x445;&#x43E;&#x437;&#x44F;&#x439;&#x441;&#x442;&#x432;&#x435; &#x442;&#x438;&#x43F;&#x44B; &#x441;&#x443;&#x43C;&#x43C;&#x44B; &#x438; &#x43F;&#x440;&#x43E;&#x438;&#x437;&#x432;&#x435;&#x434;&#x435;&#x43D;&#x438;&#x44F;. &#x41D;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x44E;&#x442;&#x441;&#x44F; &#x43E;&#x43D;&#x438; &#x441;&#x43E;&#x43E;&#x442;&#x432;&#x435;&#x442;&#x441;&#x442;&#x432;&#x443;&#x44E;&#x449;&#x435;, &#x430; &#x442;&#x430;&#x43A;&#x436;&#x435; &#x438;&#x43C;&#x435;&#x44E;&#x442; &#x43A;&#x440;&#x430;&#x441;&#x438;&#x432;&#x44B;&#x435; &#x44E;&#x43D;&#x438;&#x43A;&#x43E;&#x434;&#x43D;&#x44B;&#x435; &#x43E;&#x431;&#x43E;&#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x44F;:</p><figure class="kg-card kg-code-card"><pre><code class="language-lean">#check prod &#x2115; &#x2115;
#check &#x2115; &#xD7; &#x2115;
#check (1, 1)          -- &#x431;&#x443;&#x434;&#x435;&#x442; &#x438;&#x43C;&#x435;&#x442;&#x44C; &#x442;&#x438;&#x43F; &#x2115; &#xD7; &#x2115;</code></pre><figcaption>prod &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x437;&#x430;&#x43C;&#x435;&#x43D;&#x438;&#x442;&#x44C; &#x43D;&#x430; &#x43E;&#x43F;&#x435;&#x440;&#x430;&#x442;&#x43E;&#x440; &#xD7; (<code>\x</code>)</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-lean">#check sum nat bool
#check nat &#x2295; bool</code></pre><figcaption>sum &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x437;&#x430;&#x43C;&#x435;&#x43D;&#x438;&#x442;&#x44C; &#x43D;&#x430; &#x43E;&#x43F;&#x435;&#x440;&#x430;&#x442;&#x43E;&#x440; &#x2295; (<code>\o+</code>)</figcaption></figure><h2 id="--3">&#x412;&#x44B;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x438; &#x440;&#x435;&#x434;&#x443;&#x43A;&#x446;&#x438;&#x44F;</h2><p>&#x41A;&#x430;&#x43A; &#x438; &#x432; &#x43B;&#x44E;&#x431;&#x43E;&#x43C; &#x43D;&#x43E;&#x440;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x43C; &#x44F;&#x437;&#x44B;&#x43A;&#x435; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x43C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x43F;&#x43E;&#x43F;&#x440;&#x43E;&#x441;&#x438;&#x442;&#x44C; Lean &#x432;&#x44B;&#x447;&#x438;&#x441;&#x43B;&#x438;&#x442;&#x44C; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x435; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x433;&#x43E; &#x432;&#x44B;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x44F;. &#x414;&#x43B;&#x44F; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x430; <code>#eval</code>:</p><figure class="kg-card kg-code-card"><pre><code class="language-lean">#eval 1 + 2                                 -- 3
#eval (&#x3BB; x, x + 39) 3                       -- 42
#eval tt &amp;&amp; ff                              -- ff
</code></pre><figcaption>Lean &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43A;&#x430;&#x43A; &#x43A;&#x430;&#x43B;&#x44C;&#x43A;&#x443;&#x43B;&#x44F;&#x442;&#x43E;&#x440;</figcaption></figure><p>&#x41D;&#x435; &#x432;&#x441;&#x435; &#x432;&#x44B;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x44F;, &#x43E;&#x434;&#x43D;&#x430;&#x43A;&#x43E;, &#x437;&#x430;&#x43A;&#x430;&#x43D;&#x447;&#x438;&#x432;&#x430;&#x44E;&#x442;&#x441;&#x44F; &#x43A;&#x430;&#x43A;&#x438;&#x43C;-&#x442;&#x43E; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x43E;&#x43C; &#x2014; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x435;&#x43C;, &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x438;&#x43C;&#x43E;&#x43C; &#x432; &#x432;&#x438;&#x434;&#x435; &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x440;&#x43D;&#x43E;&#x433;&#x43E; &#x43C;&#x430;&#x448;&#x438;&#x43D;&#x43D;&#x43E;&#x433;&#x43E; &#x442;&#x438;&#x43F;&#x430;. &#x412; &#x441;&#x432;&#x44F;&#x437;&#x438; &#x441; &#x44D;&#x442;&#x438;&#x43C; &#x431;&#x43E;&#x43B;&#x435;&#x435; &#x440;&#x430;&#x441;&#x43F;&#x440;&#x43E;&#x441;&#x442;&#x440;&#x430;&#x43D;&#x435;&#x43D;&#x43D;&#x43E;&#x439; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x435;&#x439; &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x430; <code>#reduce</code>, &#x43F;&#x440;&#x438;&#x432;&#x43E;&#x434;&#x44F;&#x449;&#x430;&#x44F; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442; &#x432; &#x432;&#x438;&#x434;&#x435; &#x43D;&#x43E;&#x440;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x444;&#x43E;&#x440;&#x43C;&#x44B;:</p><pre><code class="language-lean">#reduce (&#x3BB; x y, x) 1                        -- &#x3BB; (y : ?M_1), 1
</code></pre><p>&#x412;&#x44B;&#x432;&#x43E;&#x434; &#x432; &#x434;&#x430;&#x43D;&#x43D;&#x43E;&#x43C; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435; &#x437;&#x430;&#x43E;&#x434;&#x43D;&#x43E; &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x43B; &#x43D;&#x430;&#x43C;, &#x43A;&#x430;&#x43A; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x441;&#x43F;&#x435;&#x446;&#x438;&#x444;&#x438;&#x446;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x442;&#x438;&#x43F; &#x432; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x430;&#x431;&#x441;&#x442;&#x440;&#x430;&#x43A;&#x446;&#x438;&#x438; (&#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x441;&#x442;&#x438;&#x43B;&#x44C; &#x427;&#x451;&#x440;&#x447;&#x430;). &#x41C;&#x43E;&#x436;&#x43D;&#x43E; &#x432;&#x43E;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x44D;&#x442;&#x438;&#x43C; &#x432; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x435;&#x43C; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;&#x435;:</p><pre><code class="language-lean">#reduce (&#x3BB; (x : &#x2115;) (y : &#x2115;), x + 10) 1 4     -- 11
</code></pre><p>&#x412; &#x43F;&#x440;&#x438;&#x43D;&#x446;&#x438;&#x43F;&#x435;, &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x43E;&#x439; <code>#reduce</code> &#x432;&#x43C;&#x435;&#x441;&#x442;&#x43E; <code>#eval</code> &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x432;&#x441;&#x435;&#x433;&#x434;&#x430;. &#x41F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x44F;&#x44F; &#x438;&#x43C;&#x435;&#x435;&#x442; &#x43B;&#x443;&#x447;&#x448;&#x443;&#x44E; &#x43F;&#x440;&#x43E;&#x438;&#x437;&#x432;&#x43E;&#x434;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x44C;, &#x43D;&#x43E; &#x43F;&#x43E;&#x43A;&#x430; &#x43C;&#x44B; &#x43D;&#x435; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x44F;&#x435;&#x43C; Lean &#x434;&#x43B;&#x44F; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x43E;&#x431;&#x449;&#x435;&#x433;&#x43E; &#x43D;&#x430;&#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x44F;, &#x44D;&#x442;&#x43E; &#x43D;&#x435; &#x442;&#x430;&#x43A; &#x432;&#x430;&#x436;&#x43D;&#x43E;, &#x43A;&#x430;&#x43A; &#x443;&#x434;&#x43E;&#x431;&#x441;&#x442;&#x432;&#x43E; &#x43E;&#x434;&#x43D;&#x43E;&#x43E;&#x431;&#x440;&#x430;&#x437;&#x438;&#x44F;.</p><h2 id="--4">&#x424;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438;</h2><p>&#x420;&#x430;&#x437;&#x443;&#x43C;&#x435;&#x435;&#x442;&#x441;&#x44F;, &#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x43D;&#x430; &#x43E;&#x434;&#x43D;&#x438;&#x445; &#x43B;&#x438;&#x448;&#x44C; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;&#x445; &#x431;&#x44B;&#x43B;&#x43E; &#x431;&#x44B; &#x432;&#x435;&#x441;&#x44C;&#x43C;&#x430; &#x43D;&#x435;&#x443;&#x434;&#x43E;&#x431;&#x43D;&#x43E;, &#x430; &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x443; &#x432; Lean &#x435;&#x441;&#x442;&#x44C; &#x43C;&#x435;&#x445;&#x430;&#x43D;&#x438;&#x437;&#x43C; &#x441;&#x432;&#x44F;&#x437;&#x44B;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x438;&#x43C;&#x435;&#x43D; &#x441; &#x440;&#x430;&#x437;&#x43B;&#x438;&#x447;&#x43D;&#x44B;&#x43C;&#x438; &#x442;&#x435;&#x440;&#x43C;&#x430;&#x43C;&#x438;. &#x41D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, &#x442;&#x430;&#x43A; &#x43C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x437;&#x430;&#x434;&#x430;&#x442;&#x44C; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x430;&#x43D;&#x442;&#x43D;&#x443;&#x44E; (&#x43D;&#x443;&#x43B;&#x44F;&#x440;&#x43D;&#x443;&#x44E;) &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E; <code>foo</code>, &#x432;&#x43E;&#x437;&#x432;&#x440;&#x430;&#x449;&#x430;&#x44E;&#x449;&#x443;&#x44E; &#x43D;&#x430;&#x442;&#x443;&#x440;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x435; &#x447;&#x438;&#x441;&#x43B;&#x43E; 5:</p><pre><code class="language-lean">def foo : &#x2115; := 5
</code></pre><p>&#x411;&#x43E;&#x43B;&#x435;&#x435; &#x43D;&#x435;&#x442;&#x440;&#x438;&#x432;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x43C; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;&#x43E;&#x43C; &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x441;&#x432;&#x44F;&#x437;&#x44B;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x438;&#x43C;&#x435;&#x43D;&#x438; &#x441; &#x43A;&#x430;&#x43A;&#x438;&#x43C;-&#x43D;&#x438;&#x431;&#x443;&#x434;&#x44C; &#x442;&#x438;&#x43F;&#x43E;&#x43C;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x432; Lean &#x43D;&#x438;&#x447;&#x435;&#x43C; &#x43D;&#x435; &#x43E;&#x442;&#x43B;&#x438;&#x447;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x43E;&#x442; &#x43B;&#x44E;&#x431;&#x43E;&#x433;&#x43E; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x433;&#x43E; &#x442;&#x435;&#x440;&#x43C;&#x430;:</p><pre><code class="language-lean">def my_bool : Type := bool
</code></pre><p>&#x41E;&#x442; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x430;&#x43D;&#x442;&#x43D;&#x44B;&#x445; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x439; &#x43F;&#x43E;&#x440;&#x430; &#x43F;&#x435;&#x440;&#x435;&#x445;&#x43E;&#x434;&#x438;&#x442;&#x44C; &#x43A; &#x431;&#x43E;&#x43B;&#x435;&#x435; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x44B;&#x43C;, &#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x438;&#x43C;&#x435;&#x44E;&#x449;&#x438;&#x43C; &#x43F;&#x430;&#x440;&#x430;&#x43C;&#x435;&#x442;&#x440;&#x44B;. &#x417;&#x430;&#x434;&#x430;&#x432;&#x430;&#x442;&#x44C; &#x442;&#x430;&#x43A;&#x438;&#x435; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x438;&#x43C;&#x438; &#x441;&#x43F;&#x43E;&#x441;&#x43E;&#x431;&#x430;&#x43C;&#x438;, &#x432;&#x441;&#x435; &#x43E;&#x43D;&#x438; &#x431;&#x443;&#x434;&#x443;&#x442; &#x44D;&#x43A;&#x432;&#x438;&#x432;&#x430;&#x43B;&#x435;&#x43D;&#x442;&#x43D;&#x44B; &#x438; &#x437;&#x430;&#x432;&#x438;&#x441;&#x44F;&#x442; &#x43E;&#x442; &#x43F;&#x440;&#x438;&#x432;&#x44B;&#x447;&#x43A;&#x438; &#x438; &#x447;&#x443;&#x432;&#x441;&#x442;&#x432;&#x430; &#x43F;&#x440;&#x435;&#x43A;&#x440;&#x430;&#x441;&#x43D;&#x43E;&#x433;&#x43E; &#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44F;. &#x42D;&#x442;&#x43E; &#x43E;&#x431;&#x435;&#x441;&#x43F;&#x435;&#x447;&#x438;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x431;&#x43B;&#x430;&#x433;&#x43E;&#x434;&#x430;&#x440;&#x44F; &#x442;&#x43E;&#x43C;&#x443;, &#x447;&#x442;&#x43E; &#x432;&#x441;&#x435; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; &#x432; Lean &#x43F;&#x43E; &#x443;&#x43C;&#x43E;&#x43B;&#x447;&#x430;&#x43D;&#x438;&#x44E; <a href="https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D1%80%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5?ref=yakovlev.me">&#x43A;&#x430;&#x440;&#x440;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x44B;</a>, &#x43A;&#x430;&#x43A; &#x432; Haskell.</p><pre><code class="language-lean">def add1 (n : &#x2115;) (m : &#x2115;) : &#x2115; :=
    n + m

def add2 (n m : &#x2115;) : &#x2115; :=
    n + m

def add3 (n : &#x2115;) : &#x2115; &#x2192; &#x2115; :=
    &#x3BB; m, n + m

def add4 : &#x2115; &#x2192; &#x2115; &#x2192; &#x2115; :=
    &#x3BB; n m, n + m
</code></pre><p>&#x41F;&#x43E;&#x434;&#x434;&#x435;&#x440;&#x436;&#x43A;&#x430; &#x437;&#x430;&#x432;&#x438;&#x441;&#x438;&#x43C;&#x44B;&#x445; &#x442;&#x438;&#x43F;&#x43E;&#x432; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x435;&#x442; &#x432; &#x442;&#x438;&#x43F;&#x435; &#x432;&#x43E;&#x437;&#x432;&#x440;&#x430;&#x449;&#x430;&#x435;&#x43C;&#x43E;&#x433;&#x43E; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x430;&#x440;&#x433;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x44B;. &#x42D;&#x442;&#x43E; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442;, &#x447;&#x442;&#x43E; &#x432; &#x441;&#x442;&#x440;&#x435;&#x43B;&#x43A;&#x435; <code>A &#x2192; B</code> &#x442;&#x438;&#x43F; <code>B</code> &#x437;&#x430;&#x432;&#x438;&#x441;&#x438;&#x442; &#x43E;&#x442; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x44F; <code>a</code>, &#x438;&#x43D;&#x44B;&#x43C;&#x438; &#x441;&#x43B;&#x43E;&#x432;&#x430;&#x43C;&#x438;, <code>a</code> &#x43A;&#x430;&#x43A;-&#x442;&#x43E; &#x443;&#x447;&#x430;&#x441;&#x442;&#x432;&#x443;&#x435;&#x442; &#x432; &#x437;&#x430;&#x43F;&#x438;&#x441;&#x438; <code>B</code>. &#x422;&#x430;&#x43A;&#x443;&#x44E; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x44E; &#x43F;&#x440;&#x438;&#x43D;&#x44F;&#x442;&#x43E; &#x437;&#x430;&#x43F;&#x438;&#x441;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x432; &#x432;&#x438;&#x434;&#x435; <code>&#x3A0; (a : A), B</code>. &#x41F;&#x440;&#x438;&#x432;&#x435;&#x434;&#x435;&#x43D;&#x43D;&#x430;&#x44F; &#x436;&#x435; &#x432;&#x44B;&#x448;&#x435; &#x441;&#x442;&#x440;&#x435;&#x43B;&#x43A;&#x430; &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x441;&#x438;&#x43D;&#x442;&#x430;&#x43A;&#x441;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x43C; &#x441;&#x430;&#x445;&#x430;&#x440;&#x43E;&#x43C; &#x434;&#x43B;&#x44F; &#x447;&#x430;&#x441;&#x442;&#x43D;&#x43E;&#x433;&#x43E; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x44F;, &#x43A;&#x43E;&#x433;&#x434;&#x430; <code>B</code> &#x43E;&#x442; <code>a</code> &#x43D;&#x435; &#x437;&#x430;&#x432;&#x438;&#x441;&#x438;&#x442;. &#x422;&#x435;&#x43C; &#x43D;&#x435; &#x43C;&#x435;&#x43D;&#x435;&#x435; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43D;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x43F;&#x43E;&#x43B;&#x43D;&#x443;&#x44E; &#x434;&#x435;&#x448;&#x443;&#x433;&#x430;&#x440;&#x438;&#x437;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x443;&#x44E; &#x432;&#x435;&#x440;&#x441;&#x438;&#x44E;:</p><figure class="kg-card kg-code-card"><pre><code class="language-lean">def add5 : &#x3A0; (n : &#x2115;), &#x3A0; (m : &#x2115;), &#x2115; :=
    &#x3BB; n m, n + m
</code></pre><figcaption>&#x412; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x435;&#x439;&#x448;&#x435;&#x43C; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435; <code>A &#x2192; B</code> &#x438; <code>&#x3A0; (a : A), B</code> &#x2014; &#x44D;&#x442;&#x43E; &#x43E;&#x434;&#x43D;&#x43E; &#x438; &#x442;&#x43E; &#x436;&#x435;</figcaption></figure><p>&#x420;&#x430;&#x437;&#x443;&#x43C;&#x435;&#x435;&#x442;&#x441;&#x44F;, &#x43A;&#x430;&#x43A; &#x43B;&#x44E;&#x431;&#x43E;&#x439; &#x43F;&#x440;&#x438;&#x43B;&#x438;&#x447;&#x43D;&#x44B;&#x439; &#x44F;&#x437;&#x44B;&#x43A;, Lean &#x43F;&#x43E;&#x434;&#x434;&#x435;&#x440;&#x436;&#x438;&#x432;&#x430;&#x435;&#x442; &#x434;&#x43E;&#x432;&#x43E;&#x43B;&#x44C;&#x43D;&#x43E;-&#x442;&#x430;&#x43A;&#x438; &#x43F;&#x440;&#x43E;&#x434;&#x432;&#x438;&#x43D;&#x443;&#x442;&#x44B;&#x439; <a href="https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%BF%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D1%86%D0%BE%D0%BC?ref=yakovlev.me">pattern matching</a> &#x430;&#x440;&#x433;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x43E;&#x432;, &#x447;&#x442;&#x43E; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x435;&#x442; &#x43E;&#x431;&#x44A;&#x435;&#x434;&#x438;&#x43D;&#x438;&#x442;&#x44C; &#x432;&#x441;&#x435; &#x438;&#x43C;&#x435;&#x44E;&#x449;&#x438;&#x435;&#x441;&#x44F; &#x443; &#x43D;&#x430;&#x441; &#x437;&#x43D;&#x430;&#x43D;&#x438;&#x44F; &#x438; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x438;&#x442;&#x44C; &#x438;&#x445; &#x434;&#x43B;&#x44F; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x447;&#x435;&#x433;&#x43E;-&#x43D;&#x438;&#x431;&#x443;&#x434;&#x44C; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438; &#x43F;&#x43E;&#x43B;&#x435;&#x437;&#x43D;&#x43E;&#x433;&#x43E;. &#x41D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; &#x432;&#x44B;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x447;&#x438;&#x441;&#x435;&#x43B; &#x424;&#x438;&#x431;&#x43E;&#x43D;&#x430;&#x447;&#x447;&#x438;:</p><figure class="kg-card kg-code-card"><pre><code class="language-lean">def fib : &#x2115; &#x2192; &#x2115;
| 0 := 1
| 1 := 1
| (n + 2) := fib n + fib (n + 1)</code></pre><figcaption><code>#eval fib 10</code> &#x431;&#x43E;&#x434;&#x440;&#x43E; &#x432;&#x44B;&#x432;&#x435;&#x434;&#x435;&#x442; &#x43D;&#x430;&#x43C; 89</figcaption></figure><p>&#x41D;&#x443;, &#x432;&#x441;&#x451;, &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C;! &#x41D;&#x43E; &#x441;&#x43E;&#x431;&#x440;&#x430;&#x43B;&#x438;&#x441;&#x44C; &#x43C;&#x44B; &#x442;&#x443;&#x442;, &#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E; &#x43D;&#x435; &#x434;&#x43B;&#x44F; &#x44D;&#x442;&#x43E;&#x433;&#x43E;. &#x422;&#x430;&#x43A; &#x447;&#x442;&#x43E; &#x432; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x439; &#x440;&#x430;&#x437; &#x432;&#x432;&#x435;&#x434;&#x435;&#x43C; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43D;&#x435;&#x43E;&#x431;&#x44B;&#x447;&#x43D;&#x44B;&#x445; &#x434;&#x43B;&#x44F; &#x43F;&#x440;&#x438;&#x432;&#x44B;&#x447;&#x43D;&#x44B;&#x445; &#x44F;&#x437;&#x44B;&#x43A;&#x43E;&#x432; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x439;, &#x43F;&#x43E;&#x441;&#x43C;&#x43E;&#x442;&#x440;&#x438;&#x43C; &#x43D;&#x430; &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x430;&#x446;&#x438;&#x44E; &#x440;&#x430;&#x437;&#x43D;&#x44B;&#x445; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C; &#x442;&#x438;&#x43F;&#x43E;&#x432; &#x438;, &#x43D;&#x430;&#x43A;&#x43E;&#x43D;&#x435;&#x446;, &#x43E;&#x43A;&#x443;&#x43D;&#x435;&#x43C;&#x441;&#x44F; &#x432; &#x442;&#x435;&#x43E;&#x440;&#x435;&#x43C;&#x44B;.</p>]]></content:encoded></item><item><title><![CDATA[Магистратура в ВШЭ, COVID и черные списки]]></title><description><![CDATA[Мы решили открыть магистратуру "Вычислительная биология и биоинформатика" в Питерской Вышке. Для того, чтобы прорекламировать направление решили откровенно хайпануть на теме COVID-19.]]></description><link>https://yakovlev.me/maghistratura-v-vshe/</link><guid isPermaLink="false">62a9a65d27b7ab000134c250</guid><category><![CDATA[biocad]]></category><category><![CDATA[hse]]></category><dc:creator><![CDATA[Pavel Yakovlev]]></dc:creator><pubDate>Tue, 09 Jun 2020 07:28:50 GMT</pubDate><content:encoded><![CDATA[<p>&#x41C;&#x44B; &#x440;&#x435;&#x448;&#x438;&#x43B;&#x438; &#x43E;&#x442;&#x43A;&#x440;&#x44B;&#x442;&#x44C; &#x43C;&#x430;&#x433;&#x438;&#x441;&#x442;&#x440;&#x430;&#x442;&#x443;&#x440;&#x443; &quot;&#x412;&#x44B;&#x447;&#x438;&#x441;&#x43B;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x430;&#x44F; &#x431;&#x438;&#x43E;&#x43B;&#x43E;&#x433;&#x438;&#x44F; &#x438; &#x431;&#x438;&#x43E;&#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x442;&#x438;&#x43A;&#x430;&quot; &#x432; &#x41F;&#x438;&#x442;&#x435;&#x440;&#x441;&#x43A;&#x43E;&#x439; &#x412;&#x44B;&#x448;&#x43A;&#x435;. &#x414;&#x43B;&#x44F; &#x442;&#x43E;&#x433;&#x43E;, &#x447;&#x442;&#x43E;&#x431;&#x44B; &#x43F;&#x440;&#x43E;&#x440;&#x435;&#x43A;&#x43B;&#x430;&#x43C;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43D;&#x430;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x440;&#x435;&#x448;&#x438;&#x43B;&#x438; &#x43E;&#x442;&#x43A;&#x440;&#x43E;&#x432;&#x435;&#x43D;&#x43D;&#x43E; &#x445;&#x430;&#x439;&#x43F;&#x430;&#x43D;&#x443;&#x442;&#x44C; &#x43D;&#x430; &#x442;&#x435;&#x43C;&#x435; COVID-19. &#x422;&#x435;&#x43C; &#x431;&#x43E;&#x43B;&#x435;&#x435;, &#x447;&#x442;&#x43E; &#x43C;&#x44B; &#x432;&#x441;&#x451; &#x436;&#x435; &#x438;&#x43C;&#x435;&#x435;&#x43C; &#x43D;&#x430; &#x44D;&#x442;&#x43E; &#x43F;&#x440;&#x430;&#x432;&#x43E;, &#x43A;&#x430;&#x43A; &#x43B;&#x44E;&#x434;&#x438;, &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x438;&#x435; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43C;&#x435;&#x441;&#x44F;&#x446;&#x435;&#x432; &#x430;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E; &#x437;&#x430;&#x43D;&#x438;&#x43C;&#x430;&#x44E;&#x449;&#x438;&#x435;&#x441;&#x44F; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x43E;&#x439; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x438;&#x445; &#x432;&#x430;&#x43A;&#x446;&#x438;&#x43D;. &#x41C;&#x43D;&#x435; &#x43A;&#x430;&#x436;&#x435;&#x442;&#x441;&#x44F;, &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x43B;&#x441;&#x44F; &#x432;&#x435;&#x441;&#x44C;&#x43C;&#x430; &#x43D;&#x435;&#x43F;&#x43B;&#x43E;&#x445;&#x43E;&#x439; <a href="https://habr.com/ru/company/hsespb/blog/505846/?ref=yakovlev.me">&#x43F;&#x43E;&#x441;&#x442; &#x43D;&#x430; Habr</a>. </p><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet" data-width="550"><p lang="ru" dir="ltr">&#x41C;&#x44B; &#x442;&#x443;&#x442; &#x441;&#x43E;&#x431;&#x440;&#x430;&#x43B;&#x438; &#x442;&#x43E; &#x43D;&#x435;&#x43C;&#x43D;&#x43E;&#x433;&#x43E;&#x435;, &#x447;&#x442;&#x43E; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x440;&#x430;&#x441;&#x441;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x43F;&#x440;&#x43E; &#x43D;&#x430;&#x448;&#x443; &#x436;&#x438;&#x437;&#x43D;&#x44C; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x438;&#x435; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43C;&#x435;&#x441;&#x44F;&#x446;&#x435;&#x432; &#x438; &#x43D;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x43B;&#x438; &#x43D;&#x430; Habr. <a href="https://t.co/LMWFRqZU78?ref=yakovlev.me">https://t.co/LMWFRqZU78</a></p>&#x2014; Pavel Yakovlev (@zmactep) <a href="https://twitter.com/zmactep/status/1270774789376966658?ref_src=twsrc%5Etfw&amp;ref=yakovlev.me">June 10, 2020</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</figure><p>&#x41E;&#x434;&#x43D;&#x430;&#x43A;&#x43E;, &#x441;&#x43F;&#x443;&#x441;&#x442;&#x44F; &#x43F;&#x43E;&#x447;&#x442;&#x438; &#x441;&#x443;&#x442;&#x43A;&#x438; &#x43F;&#x43E;&#x441;&#x43B;&#x435; &#x43F;&#x443;&#x431;&#x43B;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438;, &#x43C;&#x44B; &#x43F;&#x43E;&#x43D;&#x44F;&#x43B;&#x438;, &#x447;&#x442;&#x43E; &#x43D;&#x435; &#x43D;&#x430; &#x442;&#x43E;&#x43C; &#x445;&#x430;&#x439;&#x43F;&#x43E;&#x432;&#x430;&#x43B;&#x438;. &#x1F602;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/06/image.png" class="kg-image" alt loading="lazy"><figcaption>&#x421;&#x43F;&#x443;&#x441;&#x442;&#x44F; &#x441;&#x443;&#x442;&#x43A;&#x438; &#x443; &#x43D;&#x430;&#x441; 1.3 &#x442;&#x44B;&#x441;&#x44F;&#x447;&#x438; &#x43F;&#x440;&#x43E;&#x441;&#x43C;&#x43E;&#x442;&#x440;&#x43E;&#x432; &#x438; &#x43D;&#x438; &#x43E;&#x434;&#x43D;&#x43E;&#x433;&#x43E; &#x43A;&#x43E;&#x43C;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x440;&#x438;&#x44F;</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://yakovlev.me/content/images/2020/06/image-1.png" class="kg-image" alt loading="lazy"><figcaption>&#x412; &#x442;&#x43E; &#x436;&#x435; &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x442;&#x430;&#x43A;&#x430;&#x44F; &#x442;&#x435;&#x43C;&#x430; &#x432;&#x44B;&#x437;&#x432;&#x430;&#x43B;&#x430; &#x43A;&#x443;&#x434;&#x430; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x438;&#x439; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;</figcaption></figure>]]></content:encoded></item><item><title><![CDATA[Сборка проекта в web-разработке]]></title><description><![CDATA[Пытаюсь разобраться с проектом на JavaScript. Так как до этого я веб-разработкой никогда не занимался, меня сильно смутил весь окружающий её тулинг. Этой заметкой я хочу зафиксировать свой путь создания простейшего проекта.]]></description><link>https://yakovlev.me/web-razrabotka-eto-slozhno/</link><guid isPermaLink="false">62a9a65d27b7ab000134c24d</guid><category><![CDATA[js]]></category><category><![CDATA[tutorial]]></category><category><![CDATA[web]]></category><dc:creator><![CDATA[Pavel Yakovlev]]></dc:creator><pubDate>Thu, 19 Sep 2019 20:48:53 GMT</pubDate><content:encoded><![CDATA[<p>&#x414;&#x43B;&#x44F; &#x440;&#x430;&#x437;&#x432;&#x438;&#x442;&#x438;&#x44F; &#x43E;&#x434;&#x43D;&#x43E;&#x433;&#x43E; &#x438;&#x437; &#x43D;&#x430;&#x448;&#x438;&#x445; &#x43F;&#x43E;&#x442;&#x435;&#x43D;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x43E;&#x432; &#x44F; &#x437;&#x430;&#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43E;&#x432;&#x430;&#x43B;&#x441;&#x44F; &#x441;&#x43E;&#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x43C;&#x438; &#x442;&#x435;&#x445;&#x43D;&#x43E;&#x43B;&#x43E;&#x433;&#x438;&#x44F;&#x43C;&#x438; &#x442;&#x440;&#x435;&#x445;&#x43C;&#x435;&#x440;&#x43D;&#x43E;&#x439; &#x432;&#x438;&#x437;&#x443;&#x430;&#x43B;&#x438;&#x437;&#x430;&#x446;&#x438;&#x438;. &#x41A;&#x43E;&#x433;&#x434;&#x430;-&#x442;&#x43E; &#x434;&#x430;&#x432;&#x43D;&#x43E; &#x44F; &#x43C;&#x43D;&#x43E;&#x433;&#x43E; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43B; &#x441; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435;&#x43C; &#x441;&#x442;&#x44D;&#x43A;&#x430; OpenGL, &#x438; &#x445;&#x43E;&#x442;&#x435;&#x43B; &#x431;&#x44B;&#x441;&#x442;&#x440;&#x43E; &#x43E;&#x441;&#x432;&#x435;&#x436;&#x438;&#x442;&#x44C; &#x432; &#x43F;&#x430;&#x43C;&#x44F;&#x442;&#x438; &#x441;&#x43E;&#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x435; &#x43A;&#x43E;&#x43D;&#x446;&#x435;&#x43F;&#x446;&#x438;&#x438; &#x438; &#x43D;&#x430;&#x431;&#x440;&#x43E;&#x441;&#x430;&#x442;&#x44C; &#x43F;&#x440;&#x43E;&#x442;&#x43E;&#x442;&#x438;&#x43F;. &#x41C;&#x43E;&#x435;&#x43C;&#x443; &#x436;&#x435;&#x43B;&#x430;&#x43D;&#x438;&#x44E; &#x441;&#x445;&#x43E;&#x434;&#x443; &#x441;&#x442;&#x430;&#x43B;&#x438; &#x43F;&#x440;&#x435;&#x43F;&#x44F;&#x442;&#x441;&#x442;&#x432;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43E;&#x431;&#x441;&#x442;&#x43E;&#x44F;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x442;&#x432;.</p><p>&#x412;&#x43E;-&#x43F;&#x435;&#x440;&#x432;&#x44B;&#x445;, &#x43D;&#x430;&#x447;&#x438;&#x43D;&#x430;&#x44F; &#x441; macOS Mojave, Apple &#x43F;&#x43E;&#x43B;&#x43D;&#x43E;&#x441;&#x442;&#x44C;&#x44E; &#x43F;&#x435;&#x440;&#x435;&#x448;&#x43B;&#x430; &#x43D;&#x430; &#x441;&#x432;&#x43E;&#x439; &#x444;&#x440;&#x435;&#x439;&#x43C;&#x432;&#x43E;&#x440;&#x43A; Metal 2, &#x43D;&#x435; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E;<a href="https://www.change.org/p/tim-cook-apple-publicly-commit-to-work-with-nvidia-on-drivers-for-mac-os-10-14?ref=yakovlev.me"> &#x443;&#x431;&#x438;&#x432; &#x43F;&#x43E;&#x434;&#x434;&#x435;&#x440;&#x436;&#x43A;&#x443; NVidia CUDA</a> (&#x434;&#x43E; &#x441;&#x432;&#x438;&#x434;&#x430;&#x43D;&#x438;&#x44F; MatLAB, Photoshop, &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x434;&#x435;&#x441;&#x44F;&#x442;&#x43A;&#x43E;&#x432; &#x443;&#x434;&#x43E;&#x431;&#x43D;&#x44B;&#x439; &#x443;&#x442;&#x438;&#x43B;&#x438;&#x442; &#x438; &#x432;&#x441;&#x44F; &#x440;&#x430;&#x431;&#x43E;&#x447;&#x430;&#x44F; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x430; &#x43D;&#x430; CUDA C/C++), &#x43D;&#x43E; &#x438; <a href="https://developer.apple.com/macos/whats-new/?ref=yakovlev.me">&#x443;&#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x438;&#x432; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x443; &#x441; OpenGL</a>.</p><p>&#x412;&#x43E;-&#x432;&#x442;&#x43E;&#x440;&#x44B;&#x445;, &#x441;&#x435;&#x439;&#x447;&#x430;&#x441; &#x432;&#x441;&#x44F; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x430; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x444;&#x435;&#x439;&#x441;&#x43E;&#x432; &#x43F;&#x43E;&#x441;&#x442;&#x440;&#x43E;&#x435;&#x43D;&#x430; &#x43D;&#x430; web-&#x442;&#x435;&#x445;&#x43D;&#x43E;&#x43B;&#x43E;&#x433;&#x438;&#x44F;&#x445;, &#x438; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x44D;&#x442;&#x430; &#x43E;&#x431;&#x43B;&#x430;&#x441;&#x442;&#x44C; &#x440;&#x430;&#x437;&#x432;&#x438;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x431;&#x44B;&#x441;&#x442;&#x440;&#x435;&#x435; &#x432;&#x441;&#x435;&#x433;&#x43E;. &#x42D;&#x442;&#x43E; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442;, &#x447;&#x442;&#x43E; &#x434;&#x43B;&#x44F; &#x43F;&#x43E;&#x441;&#x442;&#x440;&#x43E;&#x435;&#x43D;&#x438;&#x44F; &#x43D;&#x43E;&#x440;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x433;&#x43E; &#x43F;&#x435;&#x440;&#x435;&#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x43C;&#x43E;&#x433;&#x43E; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44F;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x435; &#x43D;&#x435; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43E;&#x431;&#x44A;&#x44F;&#x432;&#x43B;&#x435;&#x43D;&#x43E; deprecated &#x443;&#x436;&#x435; &#x447;&#x435;&#x440;&#x435;&#x437; &#x43F;&#x43E;&#x43B;&#x433;&#x43E;&#x434;&#x430; &#x43F;&#x43E;&#x441;&#x43B;&#x435; &#x432;&#x44B;&#x43F;&#x443;&#x441;&#x43A;&#x430;, &#x442;&#x430;&#x43A;&#x436;&#x435; &#x441;&#x442;&#x43E;&#x438;&#x442; &#x43F;&#x43E;&#x434;&#x434;&#x430;&#x442;&#x44C;&#x441;&#x44F; web &#x442;&#x440;&#x435;&#x43D;&#x434;&#x443;. &#x412;&#x435;&#x434;&#x44C; &#x434;&#x430;&#x436;&#x435; &#x441;&#x440;&#x435;&#x434;&#x430; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x438;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x439; &#x44F; &#x438;&#x43D;&#x43E;&#x433;&#x434;&#x430; &#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x44E;&#x441;&#x44C; &#x434;&#x43B;&#x44F; Haskell &#x2014; &#x44D;&#x442;&#x43E; <a href="https://code.visualstudio.com/?ref=yakovlev.me">Visual Studio Code</a>, &#x43F;&#x43E;&#x441;&#x442;&#x440;&#x43E;&#x435;&#x43D;&#x43D;&#x44B;&#x439; &#x43D;&#x430; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x435; <a href="https://electronjs.org/?ref=yakovlev.me">Electron</a> (&#x441;&#x435;&#x439;&#x447;&#x430;&#x441;, &#x43F;&#x440;&#x430;&#x432;&#x434;&#x430;, &#x435;&#x433;&#x43E; &#x43F;&#x43E;&#x447;&#x442;&#x438; &#x43F;&#x43E;&#x43B;&#x43D;&#x43E;&#x441;&#x442;&#x44C;&#x44E; &#x432;&#x44B;&#x442;&#x435;&#x441;&#x43D;&#x438;&#x43B; <a href="https://spacevim.org/?ref=yakovlev.me">SpaceVim</a>). &#x41D;&#x430; &#x43D;&#x435;&#x43C; &#x436;&#x435; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435; <a href="https://ghost.org/ru/downloads/?ref=yakovlev.me">Ghost</a> (&#x432; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x43C; &#x43F;&#x438;&#x448;&#x435;&#x442;&#x441;&#x44F; &#x44D;&#x442;&#x43E;&#x442; &#x442;&#x435;&#x43A;&#x441;&#x442;), &#x430; &#x442;&#x430;&#x43A;&#x436;&#x435; Slack, Skype &#x438; &#x43C;&#x43D;&#x43E;&#x433;&#x438;&#x435; &#x434;&#x440;&#x443;&#x433;&#x438;&#x435; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x44B; &#x43E;&#x431;&#x449;&#x435;&#x433;&#x43E; &#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F;.</p><p>&#x412; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x435; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;&#x430; &#x44F; &#x440;&#x435;&#x448;&#x438;&#x43B; &#x440;&#x430;&#x441;&#x441;&#x43C;&#x43E;&#x442;&#x440;&#x435;&#x442;&#x44C; <a href="https://threejs.org/?ref=yakovlev.me">Three.JS</a>, &#x43F;&#x440;&#x435;&#x434;&#x43E;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x44F;&#x44E;&#x449;&#x438;&#x439; &#x432;&#x44B;&#x441;&#x43E;&#x43A;&#x43E;&#x443;&#x440;&#x43E;&#x432;&#x43D;&#x435;&#x432;&#x44B;&#x435; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x444;&#x435;&#x439;&#x441;&#x44B; &#x434;&#x43B;&#x44F; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; <a href="https://www.khronos.org/webgl/?ref=yakovlev.me">WebGL</a>, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439;, &#x43A;&#x430;&#x43A; &#x44F; &#x43D;&#x430;&#x434;&#x435;&#x44E;&#x441;&#x44C;, &#x441;&#x43B;&#x435;&#x434;&#x443;&#x435;&#x442; &#x437;&#x43D;&#x430;&#x43A;&#x43E;&#x43C;&#x44B;&#x43C; &#x43C;&#x43D;&#x435; &#x43F;&#x440;&#x438;&#x43D;&#x446;&#x438;&#x43F;&#x430;&#x43C; OpenGL. &#x422;&#x430;&#x43A; &#x43A;&#x430;&#x43A; &#x434;&#x43E; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x44F; &#x432;&#x435;&#x431;-&#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x43E;&#x439; &#x43D;&#x438;&#x43A;&#x43E;&#x433;&#x434;&#x430; &#x43D;&#x435; &#x437;&#x430;&#x43D;&#x438;&#x43C;&#x430;&#x43B;&#x441;&#x44F;, &#x43C;&#x435;&#x43D;&#x44F; &#x441;&#x438;&#x43B;&#x44C;&#x43D;&#x43E; &#x441;&#x43C;&#x443;&#x442;&#x438;&#x43B; &#x432;&#x435;&#x441;&#x44C; &#x43E;&#x43A;&#x440;&#x443;&#x436;&#x430;&#x44E;&#x449;&#x438;&#x439; &#x435;&#x451; &#x442;&#x443;&#x43B;&#x438;&#x43D;&#x433;. &#x42D;&#x442;&#x43E;&#x439; &#x437;&#x430;&#x43C;&#x435;&#x442;&#x43A;&#x43E;&#x439; &#x44F; &#x445;&#x43E;&#x447;&#x443; &#x437;&#x430;&#x444;&#x438;&#x43A;&#x441;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x441;&#x432;&#x43E;&#x439; &#x43F;&#x443;&#x442;&#x44C; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x438;&#x44F; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x435;&#x439;&#x448;&#x435;&#x433;&#x43E; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x430;.</p><p>&#x412; &#x43C;&#x438;&#x440;&#x435; web-&#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x438; &#x431;&#x435;&#x437;&#x440;&#x430;&#x437;&#x434;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x442; JavaScript, &#x430; &#x432; &#x43C;&#x438;&#x440;&#x435; JavaScript &#x441;&#x432;&#x44F;&#x437;&#x43A;&#x430; <a href="https://nodejs.org/en/?ref=yakovlev.me">node</a> + <a href="https://www.npmjs.com/?ref=yakovlev.me">npm</a>, &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x44E;&#x449;&#x430;&#x44F; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x435;&#x433;&#x43E; &#x43D;&#x435; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x434;&#x43B;&#x44F; &#x431;&#x440;&#x430;&#x443;&#x437;&#x435;&#x440;&#x43D;&#x43E;&#x439; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x438;, &#x43D;&#x43E; &#x438; &#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x443;&#x434;&#x43E;&#x431;&#x43D;&#x44B;&#x435; &#x43A;&#x43E;&#x43D;&#x441;&#x43E;&#x43B;&#x44C;&#x43D;&#x44B;&#x435; &#x438;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x44B;. &#x412; &#x442;&#x43E;&#x43C; &#x447;&#x438;&#x441;&#x43B;&#x435; &#x434;&#x43B;&#x44F; &#x441;&#x431;&#x43E;&#x440;&#x43A;&#x438; &#x43A;&#x43B;&#x430;&#x441;&#x441;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x445; &#x431;&#x440;&#x430;&#x443;&#x437;&#x435;&#x440;&#x43D;&#x44B;&#x445; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x43E;&#x432;. &#x1F60A;</p><p>&#x41D;&#x43E; &#x434;&#x43B;&#x44F; &#x43D;&#x430;&#x447;&#x430;&#x43B;&#x430; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x434;&#x438;&#x43C; &#x43C;&#x430;&#x43A;&#x441;&#x438;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E; &#x433;&#x43B;&#x443;&#x43F;&#x44B;&#x439; &#x43A;&#x43E;&#x434;, &#x441;&#x43E;&#x441;&#x442;&#x43E;&#x44F;&#x449;&#x438;&#x439; &#x438;&#x437; &#x442;&#x440;&#x435;&#x445; &#x444;&#x430;&#x439;&#x43B;&#x43E;&#x432;: &#x432;&#x435;&#x440;&#x441;&#x442;&#x43A;&#x438;, &#x441;&#x442;&#x438;&#x43B;&#x44F; &#x438; &#x441;&#x43A;&#x440;&#x438;&#x43F;&#x442;&#x430; &#x43E;&#x442;&#x440;&#x438;&#x441;&#x43E;&#x432;&#x43A;&#x438;.</p><figure class="kg-card kg-code-card"><pre><code class="language-html">&lt;!doctype html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;&#x41F;&#x440;&#x438;&#x43C;&#x435;&#x440;&lt;/title&gt;
    &lt;!-- &#x41F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x430;&#x435;&#x43C; &#x444;&#x430;&#x439;&#x43B; &#x441;&#x43E; &#x441;&#x442;&#x438;&#x43B;&#x44F;&#x43C;&#x438; --&gt;
    &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;style.css&quot; /&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;!-- &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x439;&#x43D;&#x435;&#x440;, &#x432; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x43C; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43F;&#x440;&#x43E;&#x438;&#x441;&#x445;&#x43E;&#x434;&#x438;&#x442;&#x44C; &#x43E;&#x442;&#x440;&#x438;&#x441;&#x43E;&#x432;&#x43A;&#x430; --&gt;
    &lt;div id=&quot;container&quot;&gt;&lt;/div&gt;
    &lt;!-- &#x41F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x430;&#x435;&#x43C; ThreeJS &#x441; &#x43E;&#x444;&#x438;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x433;&#x43E; &#x441;&#x430;&#x439;&#x442;&#x430; --&gt;
    &lt;script src=&quot;https://threejs.org/build/three.js&quot;&gt;&lt;/script&gt;
    &lt;!-- &#x41F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x430;&#x435;&#x43C; &#x444;&#x430;&#x439;&#x43B; &#x441;&#x43E; &#x441;&#x43A;&#x440;&#x438;&#x43F;&#x442;&#x43E;&#x43C;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x431;&#x443;&#x434;&#x435;&#x442; &#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x43E;&#x442;&#x440;&#x438;&#x441;&#x43E;&#x432;&#x43A;&#x443; --&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;app.js&quot;&gt;&lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre><figcaption>index.html</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-css">body {
  background-color: #000;
  margin: 0px;
  overflow: hidden;
  color: white;
  text-align: center;
}

#container {
  position: absolute;
  width: 100%;
  height: 100%;
}
</code></pre><figcaption>style.css</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-javascript">var container = document.querySelector(&apos;#container&apos;);


var scene = new THREE.Scene();
scene.background = new THREE.Color(&apos;skyblue&apos;);

var fov = 35; // AKA Field of View
var aspect = container.clientWidth / container.clientHeight;
var near = 0.1; // the near clipping plane
var far = 100; // the far clipping plane

var camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
camera.position.set(0, 0, 10);

var geometry = new THREE.BoxBufferGeometry(2, 2, 2);
var material = new THREE.MeshBasicMaterial();
var mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);

var renderer = new THREE.WebGLRenderer();

renderer.setSize(container.clientWidth, container.clientHeight);
renderer.setPixelRatio(window.devicePixelRatio);

container.appendChild(renderer.domElement);
renderer.render(scene, camera);
</code></pre><figcaption>app.js</figcaption></figure><p>&#x412; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x435; &#x43C;&#x44B; &#x443;&#x432;&#x438;&#x434;&#x438;&#x43C; &#x437;&#x430;&#x43C;&#x435;&#x447;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x431;&#x435;&#x43B;&#x44B;&#x439; &#x43A;&#x432;&#x430;&#x434;&#x440;&#x430;&#x442;&#x438;&#x43A; (&#x43D;&#x430; &#x441;&#x430;&#x43C;&#x43E;&#x43C; &#x434;&#x435;&#x43B;&#x435; &#x43A;&#x443;&#x431;&#x438;&#x43A;) &#x43D;&#x430; &#x433;&#x43E;&#x43B;&#x443;&#x431;&#x43E;&#x43C; &#x444;&#x43E;&#x43D;&#x435;. &#x423;&#x447;&#x438;&#x442;&#x44C;&#x441;&#x44F; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x442;&#x44C; &#x441; ThreeJS &#x43C;&#x44B; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x432; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x439; &#x440;&#x430;&#x437;, &#x430; &#x43F;&#x43E;&#x43A;&#x430; &#x43F;&#x43E;&#x43F;&#x440;&#x43E;&#x431;&#x443;&#x435;&#x43C; &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x44C;, &#x447;&#x442;&#x43E; &#x437;&#x434;&#x435;&#x441;&#x44C; &#x43D;&#x435; &#x442;&#x430;&#x43A; &#x438; &#x43F;&#x43E;&#x447;&#x435;&#x43C;&#x443; &#x431;&#x44B; &#x43D;&#x435; &#x438;&#x434;&#x442;&#x438; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; &#x43F;&#x443;&#x442;&#x435;&#x43C; &#x442;&#x430;&#x43A;&#x43E;&#x439; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x438; &#x432; &#x442;&#x440;&#x435;&#x445; &#x444;&#x430;&#x439;&#x43B;&#x430;&#x445;.</p><!--kg-card-begin: html--><div id="scene-container" style="width: 600px; height: 400px;"></div>
<script src="https://threejs.org/build/three.js"></script>
<script type="text/javascript">
var container = document.querySelector('#scene-container');

var scene = new THREE.Scene();
scene.background = new THREE.Color('skyblue');

var fov = 35; // AKA Field of View
var aspect = container.clientWidth / container.clientHeight;
var near = 0.1; // the near clipping plane
var far = 100; // the far clipping plane

var camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
camera.position.set(0, 0, 10);

var geometry = new THREE.BoxBufferGeometry(2, 2, 2);
var material = new THREE.MeshBasicMaterial();
var mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);

var renderer = new THREE.WebGLRenderer();

renderer.setSize(container.clientWidth, container.clientHeight);
renderer.setPixelRatio(window.devicePixelRatio);

container.appendChild(renderer.domElement);
renderer.render(scene, camera);
</script><!--kg-card-end: html--><!--kg-card-begin: markdown--><p>&#x41D;&#x430; &#x441;&#x430;&#x43C;&#x43E;&#x43C; &#x434;&#x435;&#x43B;&#x435;, &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x442;&#x44C;, &#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;, &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x438; &#x442;&#x430;&#x43A;. &#x41D;&#x43E; &#x43C;&#x44B; &#x441;&#x442;&#x430;&#x43B;&#x43A;&#x438;&#x432;&#x430;&#x435;&#x43C;&#x441;&#x44F; &#x441; &#x440;&#x44F;&#x434;&#x43E;&#x43C; &#x43E;&#x433;&#x440;&#x430;&#x43D;&#x438;&#x447;&#x435;&#x43D;&#x438;&#x439;, &#x442;&#x435;&#x440;&#x43F;&#x435;&#x442;&#x44C; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x43B;&#x44E;&#x434;&#x44F;&#x43C;, &#x43F;&#x440;&#x438;&#x448;&#x435;&#x434;&#x448;&#x438;&#x43C; &#x438;&#x437; &#x442;&#x435;&#x43F;&#x43B;&#x438;&#x447;&#x43D;&#x43E;&#x439; backend-&#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x438; &#x440;&#x435;&#x448;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x43D;&#x435;&#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;, &#x430; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E;:</p>
<ul>
<li>&#x43D;&#x435;&#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x440;&#x430;&#x437;&#x431;&#x438;&#x435;&#x43D;&#x438;&#x44F; &#x43A;&#x43E;&#x434;&#x430; &#x43D;&#x430; &#x43C;&#x43E;&#x434;&#x443;&#x43B;&#x438;;</li>
<li>&#x437;&#x430;&#x432;&#x438;&#x441;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x44C; &#x43E;&#x442; &#x43A;&#x43E;&#x434;&#x430; &#x43D;&#x430; &#x443;&#x434;&#x430;&#x43B;&#x435;&#x43D;&#x43D;&#x43E;&#x43C; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440;&#x435;;</li>
<li>&#x43E;&#x433;&#x440;&#x430;&#x43D;&#x438;&#x447;&#x435;&#x43D;&#x438;&#x435; vanila-JS, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x43D;&#x435;&#x440;&#x430;&#x432;&#x43D;&#x43E;&#x43C;&#x435;&#x440;&#x43D;&#x43E; &#x440;&#x430;&#x437;&#x432;&#x438;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x432; &#x440;&#x430;&#x437;&#x43D;&#x44B;&#x445; &#x431;&#x440;&#x430;&#x443;&#x437;&#x435;&#x440;&#x430;&#x445;;</li>
<li>&#x43E;&#x442;&#x441;&#x443;&#x442;&#x441;&#x442;&#x432;&#x438;&#x435; &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x43E;&#x43A; &#x43A;&#x43E;&#x434;&#x430; &#x438; &#x432;&#x44B;&#x43F;&#x43E;&#x43B;&#x43D;&#x435;&#x43D;&#x438;&#x44F; &#x43D;&#x430; &#x43D;&#x435;&#x43C; &#x43A;&#x430;&#x43A;&#x438;&#x445;-&#x43B;&#x438;&#x431;&#x43E; CI &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x434;&#x443;&#x440;;</li>
<li>&#x43D;&#x435;&#x43E;&#x431;&#x445;&#x43E;&#x434;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x44C; &#x432;&#x43D;&#x43E;&#x441;&#x438;&#x442;&#x44C; &#x438;&#x437;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x44F; &#x441;&#x440;&#x430;&#x437;&#x443; &#x432; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43C;&#x435;&#x441;&#x442; (html, css, js);</li>
<li>&#x438; &#x43C;&#x43D;&#x43E;&#x433;&#x43E;&#x435; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x435;...</li>
</ul>
<p>&#x411;&#x443;&#x434;&#x435;&#x43C; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x431;&#x43E;&#x440;&#x43E;&#x442;&#x44C;&#x441;&#x44F; &#x441; &#x44D;&#x442;&#x438;&#x43C;&#x438; &#x43D;&#x435;&#x434;&#x443;&#x433;&#x430;&#x43C;&#x438;.</p>
<!--kg-card-end: markdown--><h2 id="-npm-">&#x421;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x438;&#x435; npm-&#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x430;</h2><p>&#x412; &#x43F;&#x435;&#x440;&#x432;&#x443;&#x44E; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x434;&#x438;&#x43C; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442; &#x432; &#x43D;&#x430;&#x448;&#x435;&#x439; &#x434;&#x438;&#x440;&#x435;&#x43A;&#x442;&#x43E;&#x440;&#x438;&#x438;:</p><pre><code class="language-bash">$ npm init -y
Wrote to /prjoect/path/package.json:

{
  &quot;name&quot;: &quot;example-project&quot;,
  &quot;version&quot;: &quot;1.0.0&quot;,
  &quot;description&quot;: &quot;&quot;,
  &quot;main&quot;: &quot;app.js&quot;,
  &quot;scripts&quot;: {
    &quot;test&quot;: &quot;echo \&quot;Error: no test specified\&quot; &amp;&amp; exit 1&quot;
  },
  &quot;keywords&quot;: [],
  &quot;author&quot;: &quot;&quot;,
  &quot;license&quot;: &quot;ISC&quot;
}
</code></pre><p>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x435;&#x451; &#x441;&#x43E;&#x434;&#x435;&#x440;&#x436;&#x438;&#x43C;&#x43E;&#x435; &#x432;&#x44B;&#x433;&#x43B;&#x44F;&#x434;&#x438;&#x442; &#x442;&#x430;&#x43A;:</p><pre><code class="language-bash">$ tree .
.
&#x251C;&#x2500;&#x2500; app.js
&#x251C;&#x2500;&#x2500; index.html
&#x251C;&#x2500;&#x2500; package.json
&#x2514;&#x2500;&#x2500; style.css

0 directories, 4 files
</code></pre><p>&#x421;&#x43E;&#x434;&#x435;&#x440;&#x436;&#x438;&#x43C;&#x43E;&#x435; <code>package.json</code> &#x435;&#x449;&#x435; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x43E;&#x434;&#x440;&#x435;&#x434;&#x430;&#x43A;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C;, &#x443;&#x43A;&#x430;&#x437;&#x430;&#x432; &#x430;&#x432;&#x442;&#x43E;&#x440;&#x430; &#x438; &#x43F;&#x440;&#x43E;&#x447;&#x443;&#x44E; &#x43C;&#x435;&#x442;&#x430;-&#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x446;&#x438;&#x44E;, &#x43C;&#x44B; &#x436;&#x435; &#x43F;&#x435;&#x440;&#x435;&#x439;&#x434;&#x435;&#x43C; &#x43A; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x43C; &#x448;&#x430;&#x433;&#x430;&#x43C;.</p><h2 id="-webpack">&#x41F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x438;&#x435; webpack</h2><p>&#x41E;&#x434;&#x43D;&#x430; &#x438;&#x437; &#x433;&#x43B;&#x430;&#x432;&#x43D;&#x44B;&#x445; &#x431;&#x43E;&#x43B;&#x435;&#x439; &#x2014; &#x44D;&#x442;&#x43E;, &#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;, &#x43D;&#x435;&#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43C;&#x43E;&#x434;&#x443;&#x43B;&#x438; &#x43F;&#x440;&#x438; &#x43D;&#x430;&#x448;&#x435;&#x439; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x435;. &#x415;&#x451;, &#x438; &#x43D;&#x435; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E;, &#x440;&#x435;&#x448;&#x430;&#x435;&#x442; &#x43F;&#x440;&#x435;&#x432;&#x43E;&#x441;&#x445;&#x43E;&#x434;&#x43D;&#x430;&#x44F; &#x443;&#x442;&#x438;&#x43B;&#x438;&#x442;&#x430; Webpack, &#x442;&#x430;&#x43A;&#x436;&#x435; &#x44F;&#x432;&#x43B;&#x44F;&#x44E;&#x449;&#x430;&#x44F;&#x441;&#x44F; &#x43F;&#x43E;&#x447;&#x442;&#x438; &#x43D;&#x435;&#x437;&#x430;&#x43C;&#x435;&#x43D;&#x438;&#x43C;&#x43E;&#x439; &#x432; &#x43A;&#x430;&#x436;&#x434;&#x43E;&#x43C; &#x441;&#x43E;&#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x43E;&#x43C; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x435;. &#x414;&#x43B;&#x44F; &#x435;&#x451; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x443; &#x43D;&#x430;&#x441; &#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x432;&#x432;&#x435;&#x441;&#x442;&#x438; &#x432;&#x441;&#x435;&#x433;&#x43E; &#x43B;&#x438;&#x448;&#x44C; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x443; &#x443;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x43A;&#x438;:</p><pre><code class="language-bash">$ npm install --save-dev webpack webpack-cli
...
+ webpack-cli@3.3.7
+ webpack@4.39.3
added 453 packages from 237 contributors and audited 5286 packages in 13.776s
found 0 vulnerabilities
</code></pre><p>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x441;&#x43E;&#x431;&#x438;&#x440;&#x430;&#x442;&#x44C; &#x43E;&#x434;&#x438;&#x43D; JS-&quot;&#x431;&#x430;&#x43D;&#x434;&#x43B;&quot; &#x438;&#x437; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x438;&#x445; &#x43C;&#x43E;&#x434;&#x443;&#x43B;&#x435;&#x439;. &#x412;&#x43E;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x43C;&#x441;&#x44F; &#x44D;&#x442;&#x438;&#x43C; &#x434;&#x43B;&#x44F; &#x442;&#x43E;&#x433;&#x43E;, &#x447;&#x442;&#x43E;&#x431; &#x43F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x438;&#x442;&#x44C; ThreeJS:</p><pre><code class="language-bash">$ npm install --save three
...
+ three@0.108.0
added 1 package from 1 contributor and audited 5287 packages in 2.73s
found 0 vulnerabilities
</code></pre><p>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x438;&#x442;&#x44C; &#x432; &#x43D;&#x430;&#x448; &#x444;&#x430;&#x439;&#x43B; <code>app.js</code> &#x43F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x438;&#x435; ThreeJS:</p><pre><code class="language-javascript">var THREE = require(&apos;three&apos;);
...
</code></pre><p>&#x418;&#x437; <code>index.html</code> &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x443;&#x431;&#x440;&#x430;&#x442;&#x44C; &#x441;&#x442;&#x440;&#x43E;&#x447;&#x43A;&#x443; &#x43F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x431;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x438; &#x441;&#x43E; &#x441;&#x442;&#x43E;&#x440;&#x43E;&#x43D;&#x43D;&#x435;&#x433;&#x43E; CDN. &#x41D;&#x43E; &#x44D;&#x442;&#x43E; &#x43D;&#x435; &#x435;&#x434;&#x438;&#x43D;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x43E;&#x435; &#x438;&#x437;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x435;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x435; &#x43D;&#x430;&#x43C; &#x43F;&#x43E;&#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x432; HTML-&#x444;&#x430;&#x439;&#x43B;&#x435;. &#x414;&#x435;&#x43B;&#x43E; &#x432; &#x442;&#x43E;&#x43C;, &#x447;&#x442;&#x43E; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x43E;&#x43C; &quot;&#x441;&#x431;&#x43E;&#x440;&#x43A;&#x438;&quot; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43D;&#x435; &#x43C;&#x43E;&#x434;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x44F; JS-&#x444;&#x430;&#x439;&#x43B;&#x430; &#x438; &#x434;&#x430;&#x436;&#x435; &#x43D;&#x435; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x43D;&#x43E;&#x432;&#x44B;&#x445; &#x441;&#x442;&#x440;&#x43E;&#x447;&#x435;&#x43A; &#x432; HTML &#x2014; &#x44D;&#x442;&#x43E; &#x431;&#x443;&#x434;&#x435;&#x442; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x438;&#x435; &#x43D;&#x43E;&#x432;&#x43E;&#x433;&#x43E; JS, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x431;&#x443;&#x434;&#x435;&#x442; &#x441;&#x43E;&#x434;&#x435;&#x440;&#x436;&#x430;&#x442;&#x44C; &#x432; &#x441;&#x435;&#x431;&#x435; &#x432;&#x435;&#x441;&#x44C; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x43C;&#x44B;&#x439; &#x43A;&#x43E;&#x434;. &#x41F;&#x43E; &#x443;&#x43C;&#x43E;&#x43B;&#x447;&#x430;&#x43D;&#x438;&#x44E; &#x442;&#x430;&#x43A;&#x43E;&#x439; &#x431;&#x430;&#x43D;&#x434;&#x43B; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43B;&#x435;&#x436;&#x430;&#x442;&#x44C; &#x432; <code>dist/main.js</code>, &#x430; &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x443; &#x43D;&#x430; &#x43D;&#x435;&#x433;&#x43E; &#x438; &#x441;&#x43E;&#x448;&#x43B;&#x435;&#x43C;&#x441;&#x44F;. &#x418;&#x442;&#x43E;&#x433;&#x43E;&#x432;&#x44B;&#x439; &#x432;&#x438;&#x434; &#x43D;&#x430;&#x448;&#x435;&#x433;&#x43E; <code>index.html</code> &#x431;&#x443;&#x434;&#x435;&#x442;:</p><figure class="kg-card kg-code-card"><pre><code class="language-html">&lt;!doctype html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;&#x41F;&#x440;&#x438;&#x43C;&#x435;&#x440;&lt;/title&gt;
    &lt;!-- &#x41F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x430;&#x435;&#x43C; &#x444;&#x430;&#x439;&#x43B; &#x441;&#x43E; &#x441;&#x442;&#x438;&#x43B;&#x44F;&#x43C;&#x438; --&gt;
    &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;style.css&quot; /&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;!-- &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x439;&#x43D;&#x435;&#x440;, &#x432; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x43C; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43F;&#x440;&#x43E;&#x438;&#x441;&#x445;&#x43E;&#x434;&#x438;&#x442;&#x44C; &#x43E;&#x442;&#x440;&#x438;&#x441;&#x43E;&#x432;&#x43A;&#x430; --&gt;
    &lt;div id=&quot;container&quot;&gt;&lt;/div&gt;
    &lt;!-- &#x41F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x430;&#x435;&#x43C; &#x444;&#x430;&#x439;&#x43B; &#x441;&#x43E; &#x441;&#x43A;&#x43E;&#x43C;&#x43F;&#x438;&#x43B;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x44B;&#x43C; javascript --&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;./dist/main.js&quot;&gt;&lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre><figcaption>index.html</figcaption></figure><p>&#x41A;&#x430;&#x43A; &#x436;&#x435; &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x441;&#x43E;&#x431;&#x440;&#x430;&#x442;&#x44C; &#x43D;&#x430;&#x448; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;? &#x414;&#x43B;&#x44F; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x432; &#x441;&#x43A;&#x440;&#x438;&#x43F;&#x442;&#x44B; &#x444;&#x430;&#x439;&#x43B;&#x430; <code>package.json</code> &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x438;&#x442;&#x44C; &#x441;&#x43E;&#x43E;&#x442;&#x432;&#x435;&#x442;&#x441;&#x442;&#x432;&#x443;&#x44E;&#x449;&#x443;&#x44E; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x443;:</p><figure class="kg-card kg-code-card"><pre><code class="language-json">...
  &quot;scripts&quot;: {
    &quot;test&quot;: &quot;echo \&quot;Error: no test specified\&quot; &amp;&amp; exit 1&quot;,
    &quot;build&quot;: &quot;webpack --mode production&quot;
  },
...
</code></pre><figcaption>package.json</figcaption></figure><p>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x431;&#x44B;&#x442;&#x44C; &#x441;&#x43E;&#x431;&#x440;&#x430;&#x43D; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x43E;&#x439;:</p><pre><code class="language-bash">$ npm run build

&gt; example-project@1.0.0 build /path/to/project
&gt; webpack --mode production


Insufficient number of arguments or no entry found.
Alternatively, run &apos;webpack(-cli) --help&apos; for usage info.

Hash: c8e9ac5d52d7c3c70555
Version: webpack 4.39.3
Time: 52ms
Built at: 04.09.2019 09:56:46

ERROR in Entry module not found: Error: Can&apos;t resolve &apos;./src&apos; in &apos;/path/to/project&apos;
npm ERR! code ELIFECYCLE
npm ERR! errno 2
npm ERR! example-project@1.0.0 build: `webpack --mode production`
npm ERR! Exit status 2
npm ERR!
npm ERR! Failed at the example-project@1.0.0 build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/dir/.npm/_logs/2019-09-04T06_56_46_316Z-debug.log
</code></pre><p>&#x41A;&#x430;&#x436;&#x435;&#x442;&#x441;&#x44F;, &#x447;&#x442;&#x43E;-&#x442;&#x43E; &#x43F;&#x43E;&#x448;&#x43B;&#x43E; &#x43D;&#x435; &#x442;&#x430;&#x43A;. &#x414;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;, Webpack &#x43F;&#x43E; &#x443;&#x43C;&#x43E;&#x43B;&#x447;&#x430;&#x43D;&#x438;&#x44E; &#x438;&#x449;&#x435;&#x442; &#x432;&#x441;&#x435; JS-&#x444;&#x430;&#x439;&#x43B;&#x44B; &#x432; &#x434;&#x438;&#x440;&#x435;&#x43A;&#x442;&#x43E;&#x440;&#x438;&#x438; <code>src</code>, &#x430; &#x433;&#x43B;&#x430;&#x432;&#x43D;&#x44B;&#x439; &#x444;&#x430;&#x439;&#x43B; &#x43E;&#x436;&#x438;&#x434;&#x430;&#x435;&#x442; &#x443;&#x432;&#x438;&#x434;&#x435;&#x442;&#x44C; &#x43F;&#x43E;&#x434; &#x438;&#x43C;&#x435;&#x43D;&#x435;&#x43C; <code>index.js</code>. &#x41F;&#x43E;&#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x435;&#x43C;&#x443;:</p><pre><code class="language-bash">$ mkdir src
$ mv app.js src/index.js
$ npm run build

&gt; example-project@1.0.0 build /path/to/project
&gt; webpack --mode production

Hash: 9a8895c35652a46d21af
Version: webpack 4.39.3
Time: 706ms
Built at: 04.09.2019 10:05:35
  Asset     Size  Chunks                    Chunk Names
main.js  587 KiB       0  [emitted]  [big]  main
Entrypoint main [big] = main.js
[0] ./src/index.js 842 bytes {0} [built]
    + 1 hidden module
...
</code></pre><p>&#x421;&#x43A;&#x43E;&#x440;&#x435;&#x435; &#x432;&#x441;&#x435;&#x433;&#x43E; &#x43C;&#x44B; &#x443;&#x432;&#x438;&#x434;&#x438;&#x43C; &#x435;&#x449;&#x435; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43F;&#x440;&#x435;&#x434;&#x443;&#x43F;&#x440;&#x435;&#x436;&#x434;&#x435;&#x43D;&#x438;&#x439; (&#x43E;&#x43D;&#x438; &#x441;&#x432;&#x44F;&#x437;&#x430;&#x43D;&#x44B; &#x441; &#x442;&#x435;&#x43C;, &#x447;&#x43E;&#x442; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x432;&#x448;&#x438;&#x439;&#x441;&#x44F; &#x431;&#x430;&#x43D;&#x434;&#x43B; &#x441;&#x43B;&#x438;&#x448;&#x43A;&#x43E;&#x43C; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x43E;&#x439; &#x2014; &#x43C;&#x44B; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x438;&#x43B;&#x438; &#x432; &#x43D;&#x435;&#x433;&#x43E; &#x432;&#x441;&#x44E; &#x431;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x443; ThreeJS, &#x430; &#x43D;&#x435; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43D;&#x443;&#x436;&#x43D;&#x44B;&#x435; &#x43D;&#x430;&#x43C; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438;), &#x43D;&#x43E; &#x43C;&#x44B; &#x43F;&#x43E;&#x43A;&#x430; &#x438;&#x445; &#x43F;&#x440;&#x43E;&#x438;&#x433;&#x43D;&#x43E;&#x440;&#x438;&#x440;&#x443;&#x435;&#x43C; &#x438; &#x43D;&#x430;&#x441;&#x43B;&#x430;&#x434;&#x438;&#x43C;&#x441;&#x44F; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x43E;&#x43C;, &#x43E;&#x442;&#x43A;&#x440;&#x44B;&#x432; <code>index.html</code>. &#x411;&#x440;&#x430;&#x443;&#x437;&#x435;&#x440; &#x43F;&#x43E;&#x43A;&#x430;&#x436;&#x435;&#x442; &#x43D;&#x430;&#x43C; &#x440;&#x43E;&#x432;&#x43D;&#x43E; &#x442;&#x43E;&#x442; &#x436;&#x435; &#x431;&#x435;&#x43B;&#x44B;&#x439; &#x43A;&#x432;&#x430;&#x434;&#x440;&#x430;&#x442; &#x43D;&#x430; &#x433;&#x43E;&#x43B;&#x443;&#x431;&#x43E;&#x43C; &#x444;&#x43E;&#x43D;&#x435;.</p><h2 id="-html">&#x41F;&#x430;&#x43A;&#x443;&#x435;&#x43C; HTML</h2><p>&#x412;&#x43E; &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x43D;&#x430;&#x448;&#x438;&#x445; &#x43C;&#x430;&#x43D;&#x438;&#x43F;&#x443;&#x43B;&#x44F;&#x446;&#x438;&#x439; &#x441; &#x43A;&#x43E;&#x43C;&#x43F;&#x438;&#x43B;&#x44F;&#x446;&#x438;&#x435;&#x439; JS-&#x444;&#x430;&#x439;&#x43B;&#x43E;&#x432; &#x43D;&#x430;&#x43C; &#x43F;&#x440;&#x438;&#x448;&#x43B;&#x43E;&#x441;&#x44C; &#x442;&#x430;&#x43A;&#x436;&#x435; &#x43C;&#x435;&#x43D;&#x44F;&#x442;&#x44C; &#x438; &#x43D;&#x430;&#x448; HTML. &#x412; &#x431;&#x443;&#x434;&#x443;&#x449;&#x435;&#x43C; &#x442;&#x430;&#x43A;&#x438;&#x445; &#x43C;&#x430;&#x43D;&#x438;&#x43F;&#x443;&#x43B;&#x44F;&#x446;&#x438;&#x439; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x431;&#x44B;&#x442;&#x44C; &#x435;&#x449;&#x435; &#x43C;&#x43D;&#x43E;&#x433;&#x43E;, &#x430; &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x443; &#x43F;&#x43E;&#x447;&#x435;&#x43C;&#x443; &#x431;&#x44B; &#x43D;&#x435; &#x43D;&#x430;&#x443;&#x447;&#x438;&#x442;&#x44C;&#x441;&#x44F; &#x433;&#x435;&#x43D;&#x435;&#x440;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x447;&#x430;&#x441;&#x442;&#x44C; &#x44D;&#x442;&#x43E;&#x433;&#x43E; HTML &#x430;&#x432;&#x442;&#x43E;&#x43C;&#x430;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;? Webpack &#x43F;&#x43E;&#x43C;&#x43E;&#x436;&#x435;&#x442; &#x43D;&#x430;&#x43C; &#x438; &#x432; &#x44D;&#x442;&#x43E;&#x43C;. &#x41D;&#x43E; &#x434;&#x43B;&#x44F; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x43D;&#x430;&#x443;&#x447;&#x438;&#x442;&#x44C;&#x441;&#x44F; &#x435;&#x433;&#x43E; &#x43A;&#x43E;&#x43D;&#x444;&#x438;&#x433;&#x443;&#x440;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C;.</p><p>&#x412;&#x441;&#x44F; &#x43A;&#x43E;&#x43D;&#x444;&#x438;&#x433;&#x443;&#x440;&#x430;&#x446;&#x438;&#x44F; &#x441;&#x431;&#x43E;&#x440;&#x43A;&#x438; &#x441; &#x43F;&#x43E;&#x43C;&#x43E;&#x449;&#x44C;&#x44E; Webpack &#x43E;&#x43F;&#x438;&#x441;&#x44B;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x432; &#x441;&#x43F;&#x435;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x43C; &#x444;&#x430;&#x439;&#x43B;&#x435; <code>webpack.config.js</code>. &#x421;&#x43E;&#x437;&#x434;&#x430;&#x434;&#x438;&#x43C; &#x431;&#x430;&#x437;&#x43E;&#x432;&#x443;&#x44E; &#x431;&#x43E;&#x43B;&#x432;&#x430;&#x43D;&#x43A;&#x443; &#x442;&#x430;&#x43A;&#x43E;&#x433;&#x43E; &#x444;&#x430;&#x439;&#x43B;&#x430;:</p><figure class="kg-card kg-code-card"><pre><code class="language-javascript">module.exports = {
  // &#x417;&#x434;&#x435;&#x441;&#x44C; &#x443;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x435;&#x43C;, &#x43A;&#x430;&#x43A;&#x43E;&#x439; &#x444;&#x430;&#x439;&#x43B; &#x441;&#x447;&#x438;&#x442;&#x430;&#x442;&#x44C; &#x433;&#x43B;&#x430;&#x432;&#x43D;&#x44B;&#x43C;.
  entry: &apos;./src/index.js&apos;,
  // &#x421;&#x43A;&#x43E;&#x43C;&#x43F;&#x438;&#x43B;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x44B;&#x439; &#x431;&#x430;&#x43D;&#x434;&#x43B; &#x43F;&#x43E;&#x43B;&#x43E;&#x436;&#x438;&#x43C; &#x43F;&#x43E;&#x434; &#x438;&#x43C;&#x435;&#x43D;&#x435;&#x43C; main.js.
  output: {
    filename: &quot;main.js&quot;
  },
  module: {
    rules: [
    // &#x417;&#x434;&#x435;&#x441;&#x44C; &#x43C;&#x44B; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x43E;&#x43F;&#x438;&#x441;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x430; &#x442;&#x440;&#x430;&#x43D;&#x441;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x446;&#x438;&#x439;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x431;&#x443;&#x434;&#x443;&#x442;
    // &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x44F;&#x442;&#x44C;&#x441;&#x44F; &#x43A; &#x444;&#x430;&#x439;&#x43B;&#x430;&#x43C; &#x440;&#x430;&#x437;&#x43B;&#x438;&#x447;&#x43D;&#x43E;&#x433;&#x43E; &#x442;&#x438;&#x43F;&#x430;.
    ]
  },
  // &#x417;&#x434;&#x435;&#x441;&#x44C; &#x43C;&#x44B; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x438;&#x43C; &#x440;&#x430;&#x437;&#x43B;&#x438;&#x447;&#x43D;&#x44B;&#x435; &#x43F;&#x43B;&#x430;&#x433;&#x438;&#x43D;&#x44B;, &#x440;&#x430;&#x441;&#x448;&#x438;&#x440;&#x44F;&#x44E;&#x449;&#x438;&#x435; &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x438; Webpack
  plugins: [
  ]
};
</code></pre><figcaption>webpack.config.js</figcaption></figure><p>&#x417;&#x430;&#x43F;&#x443;&#x441;&#x43A; <code>npm run build</code> &#x43F;&#x440;&#x438;&#x432;&#x435;&#x434;&#x435;&#x442; &#x440;&#x43E;&#x432;&#x43D;&#x43E; &#x43A; &#x442;&#x43E;&#x43C;&#x443; &#x436;&#x435; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x443;, &#x43F;&#x43E;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x443; &#x43C;&#x44B;, &#x444;&#x430;&#x43A;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;, &#x432;&#x43E;&#x441;&#x43F;&#x440;&#x43E;&#x438;&#x437;&#x432;&#x435;&#x43B;&#x438; &#x43A;&#x43E;&#x43D;&#x444;&#x438;&#x433;&#x443;&#x440;&#x430;&#x446;&#x438;&#x44E; &#x43F;&#x43E; &#x443;&#x43C;&#x43E;&#x43B;&#x447;&#x430;&#x43D;&#x438;&#x44E;. &#x41F;&#x440;&#x438; &#x438;&#x437;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x438; <code>output.filename</code> &#x43D;&#x430;&#x43C; &#x43E;&#x43F;&#x44F;&#x442;&#x44C; &#x43F;&#x440;&#x438;&#x434;&#x435;&#x442;&#x441;&#x44F; &#x43C;&#x435;&#x43D;&#x44F;&#x442;&#x44C; <code>index.html</code>. &#x427;&#x442;&#x43E;&#x431; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43D;&#x435; &#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x43C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x432;&#x43E;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x432;&#x43E;&#x43B;&#x448;&#x435;&#x431;&#x43D;&#x44B;&#x43C; &#x43F;&#x43B;&#x430;&#x433;&#x438;&#x43D;&#x43E;&#x43C; HtmlWebpackPlugin. &#x414;&#x43B;&#x44F; &#x43D;&#x430;&#x447;&#x430;&#x43B;&#x430; &#x43F;&#x43E;&#x441;&#x442;&#x430;&#x432;&#x438;&#x43C; &#x435;&#x433;&#x43E;, &#x430; &#x442;&#x430;&#x43A;&#x436;&#x435; HTML-&#x437;&#x430;&#x433;&#x440;&#x443;&#x437;&#x447;&#x438;&#x43A;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x43D;&#x430;&#x43C; &#x442;&#x430;&#x43A;&#x436;&#x435; &#x43F;&#x43E;&#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F;:</p><pre><code class="language-bash">$ npm install --save-dev html-webpack-plugin html-loader
...
+ html-loader@0.5.5
+ html-webpack-plugin@3.2.0
added 63 packages from 75 contributors and audited 5407 packages in 4.757s
found 0 vulnerabilities
</code></pre><p>&#x41A;&#x430;&#x43A; &#x43D;&#x435;&#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x43E; &#x434;&#x43E;&#x433;&#x430;&#x434;&#x430;&#x442;&#x44C;&#x441;&#x44F;, &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43D;&#x430;&#x43C; &#x43F;&#x43E;&#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x43F;&#x440;&#x43E;&#x43C;&#x43E;&#x434;&#x438;&#x444;&#x438;&#x446;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43A;&#x43E;&#x43D;&#x444;&#x438;&#x433; Webpack`&#x430;:</p><figure class="kg-card kg-code-card"><pre><code class="language-javascript">// &#x418;&#x43C;&#x43F;&#x43E;&#x440;&#x442;&#x438;&#x440;&#x443;&#x435;&#x43C; &#x43C;&#x43E;&#x434;&#x443;&#x43B;&#x44C; &#x43F;&#x43B;&#x430;&#x433;&#x438;&#x43D;&#x430; &#x432; &#x43D;&#x430;&#x448;&#x443; &#x43A;&#x43E;&#x43D;&#x444;&#x438;&#x433;&#x443;&#x440;&#x430;&#x446;&#x438;&#x44E;.
var HtmlWebpackPlugin = require(&quot;html-webpack-plugin&quot;);

module.exports = {
  entry: &apos;./src/index.js&apos;,
  output: {
    filename: &quot;main.js&quot;
  },
  module: {
    rules: [
      {
        // &#x414;&#x43B;&#x44F; &#x432;&#x441;&#x435;&#x445; &#x444;&#x430;&#x439;&#x43B;&#x43E;&#x432; HTML
        test: /\.html$/,
        use: [
          {
            // &#x412;&#x43E;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x43C;&#x441;&#x44F; &#x437;&#x430;&#x433;&#x440;&#x443;&#x437;&#x447;&#x438;&#x43A;&#x43E;&#x43C; html-loader
            loader: &quot;html-loader&quot;,
            // &#x41A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x437;&#x430;&#x43E;&#x434;&#x43D;&#x43E; &#x43F;&#x440;&#x43E;&#x43C;&#x438;&#x43D;&#x438;&#x43C;&#x438;&#x437;&#x438;&#x440;&#x443;&#x435;&#x442; &#x43D;&#x430;&#x448; HTML
            options: { minimize: true }
          }
        ]
      }
    ]
  },
  plugins: [
    // &#x421;&#x43A;&#x43E;&#x43F;&#x438;&#x440;&#x443;&#x435;&#x43C; &#x43D;&#x430;&#x448; index.html &#x432; &#x43F;&#x430;&#x43F;&#x43A;&#x443; dist
    new HtmlWebpackPlugin({
      template: &quot;./index.html&quot;,
      filename: &quot;./index.html&quot;
    })
  ]
};
</code></pre><figcaption>webpack.config.js</figcaption></figure><p>&#x422;&#x430;&#x43A;&#x436;&#x435; &#x443;&#x434;&#x430;&#x43B;&#x438;&#x43C; &#x438;&#x437; <code>index.html</code> &#x432;&#x44B;&#x437;&#x43E;&#x432; &#x441;&#x43A;&#x440;&#x438;&#x43F;&#x442;&#x430;, &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; Webpack &#x43F;&#x43E;&#x434;&#x441;&#x442;&#x430;&#x432;&#x438;&#x442; &#x435;&#x433;&#x43E; &#x441;&#x430;&#x43C;&#x43E;&#x441;&#x442;&#x43E;&#x44F;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;:</p><figure class="kg-card kg-code-card"><pre><code class="language-html">&lt;!doctype html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;&#x41F;&#x440;&#x438;&#x43C;&#x435;&#x440;&lt;/title&gt;
    &lt;!-- &#x41F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x430;&#x435;&#x43C; &#x444;&#x430;&#x439;&#x43B; &#x441;&#x43E; &#x441;&#x442;&#x438;&#x43B;&#x44F;&#x43C;&#x438; --&gt;
    &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;style.css&quot; /&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;!-- &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x439;&#x43D;&#x435;&#x440;, &#x432; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x43C; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43F;&#x440;&#x43E;&#x438;&#x441;&#x445;&#x43E;&#x434;&#x438;&#x442;&#x44C; &#x43E;&#x442;&#x440;&#x438;&#x441;&#x43E;&#x432;&#x43A;&#x430; --&gt;
    &lt;div id=&quot;container&quot;&gt;&lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre><figcaption>index.html</figcaption></figure><p>&#x41F;&#x43E;&#x441;&#x43B;&#x435; <code>npm run build</code> &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x441;&#x43E;&#x434;&#x435;&#x440;&#x436;&#x438;&#x43C;&#x43E;&#x435; <code>dist</code> &#x431;&#x443;&#x434;&#x435;&#x442; &#x442;&#x430;&#x43A;&#x438;&#x43C;:</p><pre><code class="language-bash">$ tree dist
dist
&#x251C;&#x2500;&#x2500; index.html
&#x2514;&#x2500;&#x2500; main.js

0 directories, 2 files
</code></pre><p>&#x41D;&#x43E;&#x432;&#x44B;&#x439; <code>index.html</code> &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x438;&#x437;&#x431;&#x430;&#x432;&#x43B;&#x435;&#x43D; &#x43E;&#x442; &#x43A;&#x43E;&#x43C;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x440;&#x438;&#x435;&#x432; &#x438; &#x441;&#x43E;&#x434;&#x435;&#x440;&#x436;&#x438;&#x442; &#x432;&#x44B;&#x437;&#x43E;&#x432; &#x441;&#x43A;&#x440;&#x438;&#x43F;&#x442;&#x430;. &#x410; &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x443; &#x43C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x443;&#x432;&#x438;&#x434;&#x435;&#x442;&#x44C; &#x43D;&#x430;&#x448; &#x437;&#x43D;&#x430;&#x43A;&#x43E;&#x43C;&#x44B;&#x439; &#x431;&#x435;&#x43B;&#x44B;&#x439; &#x43A;&#x432;&#x430;&#x434;&#x440;&#x430;&#x442; &#x43F;&#x440;&#x438; &#x435;&#x433;&#x43E; &#x43E;&#x442;&#x43A;&#x440;&#x44B;&#x442;&#x438;&#x438; (<strong>NB:</strong> &#x44D;&#x442;&#x43E; &#x43D;&#x435;&#x43F;&#x440;&#x430;&#x432;&#x434;&#x430;!). &#x421;&#x430;&#x43C; &#x441;&#x43A;&#x440;&#x438;&#x43F;&#x442; &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x435;&#x440;&#x435;&#x438;&#x43C;&#x435;&#x43D;&#x43E;&#x432;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x43A;&#x430;&#x43A; &#x443;&#x433;&#x43E;&#x434;&#x43D;&#x43E;, &#x432;&#x441;&#x451; &#x441;&#x43E;&#x445;&#x440;&#x430;&#x43D;&#x438;&#x442;&#x441;&#x44F;.</p><h2 id="-css">&#x41F;&#x430;&#x43A;&#x443;&#x435;&#x43C; CSS</h2><p>&#x415;&#x441;&#x43B;&#x438; &#x43E;&#x442;&#x43A;&#x440;&#x44B;&#x442;&#x44C;-&#x442;&#x430;&#x43A;&#x438; <code>index.html</code>, &#x442;&#x43E; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x437;&#x430;&#x43C;&#x435;&#x442;&#x438;&#x442;&#x44C;, &#x447;&#x442;&#x43E; &#x432; &#x43F;&#x440;&#x435;&#x434;&#x44B;&#x434;&#x443;&#x449;&#x435;&#x43C; &#x430;&#x431;&#x437;&#x430;&#x446;&#x435; &#x44F; &#x441;&#x43E;&#x432;&#x440;&#x430;&#x43B;: &#x43D;&#x438;&#x43A;&#x430;&#x43A;&#x43E;&#x433;&#x43E; &#x43A;&#x432;&#x430;&#x434;&#x440;&#x430;&#x442;&#x430; &#x43D;&#x435; &#x431;&#x443;&#x434;&#x435;&#x442;, &#x43F;&#x43E; &#x43F;&#x440;&#x438;&#x447;&#x438;&#x43D;&#x435; &#x442;&#x43E;&#x433;&#x43E;, &#x447;&#x442;&#x43E; &#x43D;&#x430;&#x448; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x439;&#x43D;&#x435;&#x440; &#x431;&#x44B;&#x43B; &#x43D;&#x443;&#x43B;&#x435;&#x432;&#x43E;&#x433;&#x43E; &#x440;&#x430;&#x437;&#x43C;&#x435;&#x440;&#x430; &#x2014; &#x432;&#x435;&#x434;&#x44C; &#x43D;&#x438;&#x43A;&#x430;&#x43A;&#x438;&#x435; &#x441;&#x442;&#x438;&#x43B;&#x438; &#x43D;&#x435; &#x431;&#x44B;&#x43B;&#x438; &#x438;&#x43C;&#x43F;&#x43E;&#x440;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x44B;. &#x41A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;, &#x43C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x441;&#x43A;&#x43E;&#x43F;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x438;&#x445; &#x432;&#x440;&#x443;&#x447;&#x43D;&#x443;&#x44E;, &#x438; &#x432;&#x441;&#x435; &#x437;&#x430;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442;. &#x41D;&#x43E; &#x437;&#x430;&#x447;&#x435;&#x43C; &#x44D;&#x442;&#x43E; &#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C;, &#x435;&#x441;&#x43B;&#x438; Webpack &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x432;&#x437;&#x44F;&#x442;&#x44C; &#x44D;&#x442;&#x43E; &#x43D;&#x430; &#x441;&#x435;&#x431;&#x44F;?</p><p>&#x422;&#x440;&#x430;&#x434;&#x438;&#x446;&#x438;&#x43E;&#x43D;&#x43D;&#x43E; &#x43D;&#x430;&#x447;&#x43D;&#x435;&#x43C; &#x441; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x43F;&#x430;&#x440;&#x44B; &#x43C;&#x43E;&#x434;&#x443;&#x43B;&#x435;&#x439; &#x432; &#x440;&#x435;&#x436;&#x438;&#x43C;&#x435; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x438;:</p><pre><code class="language-bash">$ npm install --save-dev css-loader style-loader
...
+ style-loader@1.0.0
+ css-loader@3.2.0
added 16 packages from 47 contributors and audited 5543 packages in 3.974s
found 0 vulnerabilities</code></pre><p>&#x422;&#x430;&#x43A;&#x436;&#x435; &#x43F;&#x440;&#x43E;&#x43C;&#x43E;&#x434;&#x438;&#x444;&#x438;&#x446;&#x438;&#x440;&#x443;&#x435;&#x43C; &#x444;&#x430;&#x439;&#x43B; &#x43A;&#x43E;&#x43D;&#x444;&#x438;&#x433;&#x443;&#x440;&#x430;&#x446;&#x438;&#x438; Webpack. &#x410; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E;, &#x432; &#x441;&#x435;&#x43A;&#x446;&#x438;&#x44E; <code>module.rules</code> &#x434;&#x43E;&#x431;&#x430;&#x432;&#x438;&#x43C; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x435;&#x435;:</p><figure class="kg-card kg-code-card"><pre><code class="language-javascript">...
{
    test: /\.css$/,
    use: [
        {
            loader: &quot;style-loader&quot;
        },
        {
            loader: &quot;css-loader&quot;
        }
    ]
}
...</code></pre><figcaption>webpack.config.js</figcaption></figure><p>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43D;&#x430;&#x43C; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x443;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C;, &#x43E;&#x442;&#x43A;&#x443;&#x434;&#x430; &#x431;&#x440;&#x430;&#x442;&#x44C; &#x444;&#x430;&#x439;&#x43B; &#x441;&#x43E; &#x441;&#x442;&#x438;&#x43B;&#x435;&#x43C;. &#x414;&#x43B;&#x44F; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x443;&#x431;&#x435;&#x440;&#x435;&#x43C; &#x441;&#x442;&#x440;&#x43E;&#x447;&#x43A;&#x443; &#x43F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x441;&#x442;&#x438;&#x43B;&#x435;&#x439; &#x438;&#x437; <code>index.html</code> &#x438; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x438;&#x43C; &#x441;&#x442;&#x440;&#x43E;&#x447;&#x43A;&#x443; &#x43F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x441;&#x442;&#x438;&#x43B;&#x435;&#x439; &#x432; &#x43D;&#x430;&#x448; JavaScript:</p><figure class="kg-card kg-code-card"><pre><code class="language-html">&lt;!doctype html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;&#x41F;&#x440;&#x438;&#x43C;&#x435;&#x440;&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;!-- &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x439;&#x43D;&#x435;&#x440;, &#x432; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x43C; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43F;&#x440;&#x43E;&#x438;&#x441;&#x445;&#x43E;&#x434;&#x438;&#x442;&#x44C; &#x43E;&#x442;&#x440;&#x438;&#x441;&#x43E;&#x432;&#x43A;&#x430; --&gt;
    &lt;div id=&quot;container&quot;&gt;&lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre><figcaption>index.html</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-javascript">var css = require(&quot;./../style.css&quot;);
var THREE = require(&quot;three&quot;);
...</code></pre><figcaption>src/index.js</figcaption></figure><p>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43D;&#x430;&#x448; Webpack &#x441; &#x43F;&#x43E;&#x43C;&#x43E;&#x449;&#x44C;&#x44E; <code>css-loader</code> &#x43F;&#x43E;&#x434;&#x433;&#x440;&#x443;&#x437;&#x438;&#x442; &#x43D;&#x430;&#x448;&#x438; &#x441;&#x442;&#x438;&#x43B;&#x438; &#x43F;&#x440;&#x44F;&#x43C;&#x43E; &#x432; JavaScript, &#x438; &#x43D;&#x430;&#x43C; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435; &#x43D;&#x435; &#x43F;&#x440;&#x438;&#x434;&#x435;&#x442;&#x441;&#x44F; &#x43D;&#x438;&#x447;&#x435;&#x433;&#x43E; &#x43A;&#x43E;&#x43F;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C;. &#x41A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x44B; <code>npm install</code> &#x438; <code>npm run build</code> &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x431;&#x443;&#x434;&#x443;&#x442; &#x441;&#x43E;&#x431;&#x438;&#x440;&#x430;&#x442;&#x44C; &#x43F;&#x43E;&#x43B;&#x43D;&#x43E;&#x441;&#x442;&#x44C;&#x44E; &#x440;&#x430;&#x431;&#x43E;&#x447;&#x438;&#x439; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442; &#x431;&#x435;&#x437; &#x43D;&#x435;&#x43E;&#x431;&#x445;&#x43E;&#x434;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x438; &#x447;&#x442;&#x43E;-&#x43B;&#x438;&#x431;&#x43E; &#x434;&#x43E;&#x434;&#x435;&#x43B;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x440;&#x443;&#x43A;&#x430;&#x43C;&#x438;. &#x42D;&#x442;&#x43E; &#x43F;&#x43E;&#x43A;&#x440;&#x44B;&#x432;&#x430;&#x435;&#x442; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x438;&#x435; &#x431;&#x430;&#x437;&#x43E;&#x432;&#x43E;&#x433;&#x43E; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x430; web-&#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F; &#x431;&#x435;&#x437; &#x43A;&#x430;&#x43A;&#x438;&#x445;-&#x43B;&#x438;&#x431;&#x43E; &#x43D;&#x430;&#x434;&#x441;&#x442;&#x440;&#x43E;&#x435;&#x43A; &#x438;&#x43B;&#x438; &#x434;&#x43E;&#x43F;&#x43E;&#x43B;&#x43D;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x444;&#x438;&#x448;&#x435;&#x43A; &#x442;&#x438;&#x43F;&#x430; &#x43F;&#x43E;&#x434;&#x434;&#x435;&#x440;&#x436;&#x43A;&#x438; &#x43D;&#x43E;&#x432;&#x44B;&#x445; &#x432;&#x435;&#x440;&#x441;&#x438;&#x439; ECMAScript. &#x41E; &#x43D;&#x438;&#x445; &#x43C;&#x44B; &#x43F;&#x43E;&#x433;&#x43E;&#x432;&#x43E;&#x440;&#x438;&#x43C; &#x432; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x439; &#x440;&#x430;&#x437;.</p><p>&#x418;&#x442;&#x43E;&#x433;&#x43E;&#x432;&#x44B;&#x439; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442; &#x431;&#x443;&#x434;&#x435;&#x442; &#x432;&#x44B;&#x433;&#x43B;&#x44F;&#x434;&#x435;&#x442;&#x44C; &#x442;&#x430;&#x43A; (&#x430;&#x432;&#x442;&#x43E;&#x43C;&#x430;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438; &#x441;&#x43A;&#x430;&#x447;&#x438;&#x432;&#x430;&#x435;&#x43C;&#x44B;&#x435; &#x438;&#x43B;&#x438; &#x433;&#x435;&#x43D;&#x435;&#x440;&#x438;&#x440;&#x443;&#x435;&#x43C;&#x44B;&#x435; &#x444;&#x430;&#x439;&#x43B;&#x44B; &#x441;&#x43A;&#x440;&#x44B;&#x442;&#x44B;):</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">$ tree
.
&#x251C;&#x2500;&#x2500; index.html
&#x251C;&#x2500;&#x2500; package.json
&#x251C;&#x2500;&#x2500; src
&#x2502;&#xA0;&#xA0; &#x2514;&#x2500;&#x2500; index.js
&#x251C;&#x2500;&#x2500; style.css
&#x2514;&#x2500;&#x2500; webpack.config.js

1 directory, 5 files</code></pre><figcaption>&#x421;&#x43F;&#x438;&#x441;&#x43E;&#x43A; &#x444;&#x430;&#x439;&#x43B;&#x43E;&#x432;</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-json">{
  &quot;name&quot;: &quot;example&quot;,
  &quot;version&quot;: &quot;1.0.0&quot;,
  &quot;description&quot;: &quot;&quot;,
  &quot;private&quot;: true,
  &quot;scripts&quot;: {
    &quot;test&quot;: &quot;echo \&quot;Error: no test specified\&quot; &amp;&amp; exit 1&quot;,
    &quot;build&quot;: &quot;webpack --mode production&quot;
  },
  &quot;keywords&quot;: [],
  &quot;author&quot;: &quot;&quot;,
  &quot;license&quot;: &quot;ISC&quot;,
  &quot;devDependencies&quot;: {
    &quot;css-loader&quot;: &quot;^3.2.0&quot;,
    &quot;html-loader&quot;: &quot;^0.5.5&quot;,
    &quot;html-webpack-plugin&quot;: &quot;^3.2.0&quot;,
    &quot;style-loader&quot;: &quot;^1.0.0&quot;,
    &quot;webpack&quot;: &quot;^4.40.2&quot;,
    &quot;webpack-cli&quot;: &quot;^3.3.9&quot;
  },
  &quot;dependencies&quot;: {
    &quot;three&quot;: &quot;^0.108.0&quot;
  }
}</code></pre><figcaption>package.json</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-javascript">var HtmlWebpackPlugin = require(&quot;html-webpack-plugin&quot;);

module.exports = {
  entry: &apos;./src/index.js&apos;,
  output: {
    filename: &quot;main.js&quot;
  },
  module: {
    rules: [
      {
        // &#x414;&#x43B;&#x44F; &#x432;&#x441;&#x435;&#x445; &#x444;&#x430;&#x439;&#x43B;&#x43E;&#x432; HTML
        test: /\.html$/,
        use: [
          {
            // &#x412;&#x43E;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x43C;&#x441;&#x44F; &#x437;&#x430;&#x433;&#x440;&#x443;&#x437;&#x447;&#x438;&#x43A;&#x43E;&#x43C; html-loader
            loader: &quot;html-loader&quot;,
            // &#x41A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x437;&#x430;&#x43E;&#x434;&#x43D;&#x43E; &#x43F;&#x440;&#x43E;&#x43C;&#x438;&#x43D;&#x438;&#x43C;&#x438;&#x437;&#x438;&#x440;&#x443;&#x435;&#x442; &#x43D;&#x430;&#x448; HTML
            options: { minimize: true }
          }
        ]
      },
      {
        test: /\.css$/,
        use: [
          {
            loader: &quot;style-loader&quot;
          },
          {
            loader: &quot;css-loader&quot;
          }
        ]
      }
    ]
  },
  plugins: [
    // &#x421;&#x43A;&#x43E;&#x43F;&#x438;&#x440;&#x443;&#x435;&#x43C; &#x43D;&#x430;&#x448; index.html &#x432; &#x43F;&#x430;&#x43F;&#x43A;&#x443; dist
    new HtmlWebpackPlugin({
      template: &quot;./index.html&quot;,
      filename: &quot;./index.html&quot;
    })
  ]
};</code></pre><figcaption>webpack.config.js</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-html">&lt;!doctype html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;&#x41F;&#x440;&#x438;&#x43C;&#x435;&#x440;&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;!-- &#x421;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x43C; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x439;&#x43D;&#x435;&#x440;, &#x432; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x43C; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43F;&#x440;&#x43E;&#x438;&#x441;&#x445;&#x43E;&#x434;&#x438;&#x442;&#x44C; &#x43E;&#x442;&#x440;&#x438;&#x441;&#x43E;&#x432;&#x43A;&#x430; --&gt;
    &lt;div id=&quot;container&quot;&gt;&lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre><figcaption>index.html</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-css">body {
  background-color: #000;
  margin: 0px;
  overflow: hidden;
  color: white;
  text-align: center;
}

#container {
  position: absolute;
  width: 100%;
  height: 100%;
}</code></pre><figcaption>style.css</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-javascript">var css = require(&quot;./../style.css&quot;);
var THREE = require(&quot;three&quot;);

var container = document.querySelector(&apos;#container&apos;);

var scene = new THREE.Scene();
scene.background = new THREE.Color(&apos;skyblue&apos;);

var fov = 35; // AKA Field of View
var aspect = container.clientWidth / container.clientHeight;
var near = 0.1; // the near clipping plane
var far = 100; // the far clipping plane

var camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
camera.position.set(0, 0, 10);

var geometry = new THREE.BoxBufferGeometry(2, 2, 2);
var material = new THREE.MeshBasicMaterial();
var mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);

var renderer = new THREE.WebGLRenderer();

renderer.setSize(container.clientWidth, container.clientHeight);
renderer.setPixelRatio(window.devicePixelRatio);

container.appendChild(renderer.domElement);
renderer.render(scene, camera);</code></pre><figcaption>src/index.js</figcaption></figure>]]></content:encoded></item><item><title><![CDATA[О кодировании натуральных чисел (часть 1)]]></title><description><![CDATA[Широко известно классическое индуктивное объявление натуральных чисел: ноль — натуральное число, и число следующее за натуральным — натуральное. Простейший способ кодирования таких чисел при помощи лямбда-исчисления — метод Чёрча, не имеющий, как кажется, прямого отношения к индуктивному типу.]]></description><link>https://yakovlev.me/natural-numbers-encoding/</link><guid isPermaLink="false">62a9a65d27b7ab000134c248</guid><category><![CDATA[fp]]></category><dc:creator><![CDATA[Pavel Yakovlev]]></dc:creator><pubDate>Tue, 30 Oct 2018 20:15:00 GMT</pubDate><content:encoded><![CDATA[<p>&#x428;&#x438;&#x440;&#x43E;&#x43A;&#x43E; &#x438;&#x437;&#x432;&#x435;&#x441;&#x442;&#x43D;&#x43E; &#x43A;&#x43B;&#x430;&#x441;&#x441;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x43E;&#x435; &#x438;&#x43D;&#x434;&#x443;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x435; &#x43E;&#x431;&#x44A;&#x44F;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x43D;&#x430;&#x442;&#x443;&#x440;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x447;&#x438;&#x441;&#x435;&#x43B;: &#x43D;&#x43E;&#x43B;&#x44C; &#x2014; &#x43D;&#x430;&#x442;&#x443;&#x440;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x435; &#x447;&#x438;&#x441;&#x43B;&#x43E;, &#x438; &#x447;&#x438;&#x441;&#x43B;&#x43E; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x435;&#x435; &#x437;&#x430; &#x43D;&#x430;&#x442;&#x443;&#x440;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x43C; &#x2014; &#x43D;&#x430;&#x442;&#x443;&#x440;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x435;. &#x41D;&#x430; &#x44F;&#x437;&#x44B;&#x43A;&#x435; &#x441; &#x43F;&#x43E;&#x434;&#x434;&#x435;&#x440;&#x436;&#x43A;&#x43E;&#x439; &#x438;&#x43D;&#x434;&#x443;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x44B;&#x445; &#x442;&#x438;&#x43F;&#x43E;&#x432; &#x44D;&#x442;&#x43E; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x437;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x43A;&#x430;&#x43A;-&#x442;&#x43E; &#x442;&#x430;&#x43A;:</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">data Nat :: * where
  Zero :: Nat
  Succ :: Nat -&gt; Nat
  
zero :: Nat
zero = Zero

one :: Nat
one = Succ Zero

two :: Nat
two = Succ (Succ Zero)

add :: Nat -&gt; Nat -&gt; Nat
add n Zero     = n
add n (Succ k) = Succ (add n k)

mul :: Nat -&gt; Nat -&gt; Nat
mul n Zero     = Zero
mul n (Succ k) = add m (mul n k)

pred :: Nat -&gt; Nat
pred Zero     = Zero
pred (Succ k) = k

minus :: Nat -&gt; Nat -&gt; Nat
minus Zero     m        = Zero
minus n        Zero     = n
minus (Succ k) (Succ l) = minus k l
</code></pre>
<!--kg-card-end: markdown--><p>&#x41F;&#x440;&#x43E;&#x441;&#x442;&#x435;&#x439;&#x448;&#x438;&#x439; &#x441;&#x43F;&#x43E;&#x441;&#x43E;&#x431; &#x43A;&#x43E;&#x434;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x442;&#x430;&#x43A;&#x438;&#x445; &#x447;&#x438;&#x441;&#x435;&#x43B; &#x43F;&#x440;&#x438; &#x43F;&#x43E;&#x43C;&#x43E;&#x449;&#x438; &#x43D;&#x435;&#x442;&#x438;&#x43F;&#x438;&#x437;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x43E;&#x433;&#x43E; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x438;&#x441;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x2014; &#x43C;&#x435;&#x442;&#x43E;&#x434; &#x427;&#x451;&#x440;&#x447;&#x430;, &#x43D;&#x435; &#x438;&#x43C;&#x435;&#x44E;&#x449;&#x438;&#x439;, &#x43A;&#x430;&#x43A; &#x43A;&#x430;&#x436;&#x435;&#x442;&#x441;&#x44F;, &#x43F;&#x440;&#x44F;&#x43C;&#x43E;&#x433;&#x43E; &#x43E;&#x442;&#x43D;&#x43E;&#x448;&#x435;&#x43D;&#x438;&#x44F; &#x43A; &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x43D;&#x43E;&#x43C;&#x443; &#x438;&#x43D;&#x434;&#x443;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x43C;&#x443; &#x442;&#x438;&#x43F;&#x443;:</p><p>\[<br>&#x200C;&#x200C;\begin{align*}<br>&#x200C;&#x200C;0 &amp;= \lambda s z. z\\<br>&#x200C;&#x200C;1 &amp;= \lambda s z. sz\\&#x200C;&#x200C;<br>2 &amp;= \lambda s z. s(sz)\\&#x200C;&#x200C;<br>&amp;\ldots\\&#x200C;&#x200C;<br>n &amp;= \lambda s z. s^nz\\&#x200C;&#x200C;<br>\end{align*}<br>&#x200C;&#x200C;\]</p><p>&#x41F;&#x440;&#x438; &#x44D;&#x442;&#x43E;&#x43C; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x43D;&#x43E;&#x442;&#x430;&#x446;&#x438;&#x44F; &#x441;&#x442;&#x435;&#x43F;&#x435;&#x43D;&#x438;, &#x44F;&#x432;&#x43B;&#x44F;&#x44E;&#x449;&#x430;&#x44F;&#x441;&#x44F; &#x441;&#x438;&#x43D;&#x442;&#x430;&#x43A;&#x441;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x43C; &#x441;&#x430;&#x445;&#x430;&#x440;&#x43E;&#x43C; &#x434;&#x43B;&#x44F; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x435;&#x439; &#x437;&#x430;&#x43F;&#x438;&#x441;&#x438;:</p><p>\[&#x200C;&#x200C;<br>\begin{align*}&#x200C;&#x200C;<br>F^0(X) &amp;= X\\<br>&#x200C;&#x200C;F^N(X) &amp;= F^{N-1}(F(X))&#x200C;&#x200C;<br>\end{align*}&#x200C;&#x200C;<br>\]</p><p>&#x41D;&#x435;&#x441;&#x43C;&#x43E;&#x442;&#x440;&#x44F; &#x43D;&#x430; &#x441;&#x442;&#x440;&#x430;&#x43D;&#x43D;&#x44B;&#x439; &#x432;&#x438;&#x434; &#x442;&#x430;&#x43A;&#x438;&#x445; &#x442;&#x435;&#x440;&#x43C;&#x43E;&#x432;, &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x443;&#x44E; &#x430;&#x43D;&#x430;&#x43B;&#x43E;&#x433;&#x438;&#x44E; &#x43D;&#x430;&#x439;&#x442;&#x438; &#x43C;&#x43E;&#x436;&#x43D;&#x43E;: <code>z</code> &#x432; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x442;&#x435;&#x440;&#x43C;&#x430;&#x445; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43E;&#x437;&#x43D;&#x430;&#x447;&#x430;&#x442;&#x44C; &#x43D;&#x43E;&#x43B;&#x44C;, &#x430; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x435; &#x43A;&#x43E;&#x43B;&#x438;&#x447;&#x435;&#x441;&#x442;&#x432;&#x43E; <code>s</code> &#x43F;&#x435;&#x440;&#x435;&#x434; &#x43D;&#x438;&#x43C; &#x2014; &#x443;&#x432;&#x435;&#x43B;&#x438;&#x447;&#x435;&#x43D;&#x438;&#x435; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43D;&#x443;&#x43B;&#x44F; &#x43D;&#x430; &#x435;&#x434;&#x438;&#x43D;&#x438;&#x446;&#x443; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x440;&#x430;&#x437;. &#x414;&#x43B;&#x44F; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x435;&#x449;&#x435; &#x431;&#x43E;&#x43B;&#x435;&#x435; &#x441;&#x438;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x430;&#x43D;&#x430;&#x43B;&#x43E;&#x433;&#x438;&#x438; &#x432;&#x432;&#x435;&#x434;&#x435;&#x43C; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E; <code>succ</code>:</p><p>\[<br>&#x200C;&#x200C;succ = \lambda n s z.s (n s z)&#x200C;&#x200C;<br>\]</p><p>&#x414;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;, &#x432;&#x43E;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x432;&#x448;&#x438;&#x441;&#x44C; &#x442;&#x430;&#x43A;&#x438;&#x43C; &#x442;&#x435;&#x440;&#x43C;&#x43E;&#x43C;, &#x43C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x44C; &#x43E;&#x436;&#x438;&#x434;&#x430;&#x435;&#x43C;&#x43E;&#x435; &#x43F;&#x43E;&#x432;&#x435;&#x434;&#x435;&#x43D;&#x438;&#x435;:</p><p>\[<br>&#x200C;&#x200C;\begin{align*}&#x200C;&#x200C;<br>succ \; n &amp;= (\lambda \color{red}n \color{black} s z.s (\color{red}n \color{black} s z)) \color{blue} (\lambda s z. s^n z) \color{black} = \\&#x200C;&#x200C;<br>&amp;= &#xA0;(\lambda s z.s (\color{green} &#xA0;(\lambda \color{red} s \color{green} z. \color{red} s \color{green} ^n z) \color{blue} s \color{black} z)) = \\&#x200C;&#x200C;<br>&amp;= (\lambda s z.s (\color{green} &#xA0;(\lambda \color{red} z \color{green}. s^n \color{red} z \color{green}) \color{blue} z \color{black})) = \\<br>&#x200C;&#x200C;&amp;= (\lambda s z.s (s^n z)) = (\lambda s z.s^{n+1} z)<br>&#x200C;&#x200C;\end{align*}&#x200C;&#x200C;<br>\]</p><p>&#x422;&#x430;&#x43A;&#x436;&#x435; &#x43D;&#x430;&#x43C; &#x434;&#x43E;&#x441;&#x442;&#x443;&#x43F;&#x43D;&#x44B; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x435;&#x439;&#x448;&#x438;&#x435; &#x430;&#x440;&#x438;&#x444;&#x43C;&#x435;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x435; &#x43E;&#x43F;&#x435;&#x440;&#x430;&#x446;&#x438;&#x438; (&#x438;&#x445; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x438;&#x442;&#x44C; &#x430;&#x431;&#x441;&#x43E;&#x43B;&#x44E;&#x442;&#x43D;&#x43E; &#x430;&#x43D;&#x430;&#x43B;&#x43E;&#x433;&#x438;&#x447;&#x43D;&#x43E; &#x442;&#x43E;&#x43C;&#x443;, &#x43A;&#x430;&#x43A; &#x432;&#x44B;&#x448;&#x435; &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44F; <code>succ</code>):</p><p>\[&#x200C;&#x200C;<br>\begin{align*}&#x200C;&#x200C;<br>add &amp;= \lambda m n. m \; succ \; n\\<br>&#x200C;&#x200C;mul &amp;= \lambda m n. m \; add \; n\\&#x200C;&#x200C;<br>pow &amp;= \lambda m n. m \; mul \; n&#x200C;&#x200C;<br>\end{align*}&#x200C;&#x200C;<br>\]</p><p>&#x42D;&#x442;&#x438; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; &#x434;&#x430;&#x44E;&#x442; &#x432;&#x430;&#x436;&#x43D;&#x43E;&#x435; &#x441;&#x432;&#x43E;&#x439;&#x441;&#x442;&#x432;&#x43E; &#x43D;&#x430;&#x442;&#x443;&#x440;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x447;&#x438;&#x441;&#x435;&#x43B; &#x432; &#x43A;&#x43E;&#x434;&#x438;&#x440;&#x43E;&#x432;&#x43A;&#x435; &#x427;&#x451;&#x440;&#x447;&#x430;. &#x41F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x435; &#x442;&#x435;&#x440;&#x43C;&#x430;, &#x44F;&#x432;&#x43B;&#x44F;&#x44E;&#x449;&#x435;&#x433;&#x43E;&#x441;&#x44F; n-&#x43D;&#x44B;&#x43C; &#x43D;&#x430;&#x442;&#x443;&#x440;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x43C; &#x447;&#x438;&#x441;&#x43B;&#x43E;&#x43C; &#x43A; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x43C; &#x442;&#x435;&#x440;&#x43C;&#x430;&#x43C; <code>f</code> &#x438; <code>x</code> &#x43E;&#x431;&#x435;&#x441;&#x43F;&#x435;&#x447;&#x438;&#x442; n-&#x43A;&#x440;&#x430;&#x442;&#x43D;&#x43E;&#x435; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x435; <code>f</code> &#x43A; <code>x</code>:</p><p>\[<br>&#x200C;&#x200C;n f x = (\lambda s z.s^n z) f x = f^n x&#x200C;&#x200C;<br>\]</p><p>&#x412;&#x44B;&#x447;&#x438;&#x442;&#x430;&#x43D;&#x438;&#x435; &#x438; &#x434;&#x435;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x434;&#x435;&#x43B;&#x430;&#x44E;&#x442;&#x441;&#x44F; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x435;&#x435;, &#x441; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x435;&#x43C; &#x441;&#x445;&#x435;&#x43C;&#x44B; &#x43F;&#x440;&#x438;&#x43C;&#x438;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x439; &#x440;&#x435;&#x43A;&#x443;&#x440;&#x441;&#x438;&#x438;. &#x414;&#x43B;&#x44F; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43E;&#x431;&#x440;&#x430;&#x442;&#x438;&#x43C;&#x441;&#x44F; &#x43A; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x438;&#x43C; &#x432;&#x441;&#x43F;&#x43E;&#x43C;&#x43E;&#x433;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x43C; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x44F;&#x43C;. &#x412; &#x43F;&#x435;&#x440;&#x432;&#x443;&#x44E; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x437;&#x430;&#x432;&#x435;&#x434;&#x435;&#x43C; &#x43F;&#x430;&#x440;&#x44B; &#x438;&#x437; &#x434;&#x432;&#x443;&#x445; &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x43E;&#x432;. &#x418;&#x43D;&#x434;&#x443;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x435; &#x43E;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x43F;&#x430;&#x440;&#x44B; &#x432;&#x44B;&#x433;&#x43B;&#x44F;&#x434;&#x438;&#x442; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x43C; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x43C;:</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">data Pair :: * -&gt; * -&gt; * where
  MkPair :: a -&gt; b -&gt; Pair a b
  
fst :: Pair a b -&gt; a
fst (Pair x y) = x

snd :: Pair a b -&gt; b
snd (Pair x y) = y
</code></pre>
<!--kg-card-end: markdown--><p>&#x41C;&#x44B; &#x436;&#x435; &#x432;&#x43D;&#x43E;&#x432;&#x44C; &#x434;&#x43E;&#x43B;&#x436;&#x43D;&#x44B; &#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x438;&#x441;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x435;&#x43C; &#x434;&#x43B;&#x44F; &#x438;&#x445; &#x43A;&#x43E;&#x434;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F;:</p><p>\[<br>pair = \lambda a b c.c a b<br> \]</p><p>&#x414;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;, &#x43C;&#x44B; &#x43C;&#x43E;&#x436;&#x435; &#x437;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x43B;&#x44E;&#x431;&#x443;&#x44E; &#x43F;&#x430;&#x440;&#x443; &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x43E;&#x432; &#x442;&#x430;&#x43A;&#x438;&#x43C; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x43C;, &#x432;&#x435;&#x434;&#x44C; \( pair X Y = \lambda c. c X Y \). &#x411;&#x43E;&#x43B;&#x435;&#x435; &#x442;&#x43E;&#x433;&#x43E;, &#x43D;&#x430;&#x43C; &#x434;&#x43E;&#x441;&#x442;&#x443;&#x43F;&#x43D;&#x44B; &#x434;&#x432;&#x435; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x446;&#x438;&#x438;, &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x44E;&#x449;&#x438;&#x435; &#x431;&#x440;&#x430;&#x442;&#x44C; &#x43F;&#x435;&#x440;&#x432;&#x44B;&#x439; &#x438; &#x432;&#x442;&#x43E;&#x440;&#x43E;&#x439; &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442; &#x43F;&#x430;&#x440;&#x44B;:</p><p>\[<br>\begin{align*}<br>fst &amp;= \lambda p. p \; K \\<br>snd &amp;= \lambda p. p \; K*<br>\end{align*}<br>\]</p><p>\( K \) &#x438; \( K* \) &#x437;&#x434;&#x435;&#x441;&#x44C; &#x2014; &#x44D;&#x442;&#x43E; &#x43A;&#x43E;&#x43C;&#x431;&#x438;&#x43D;&#x430;&#x442;&#x43E;&#x440;&#x44B; \( \lambda x y.x \) &#x438; \( \lambda x y. y \) &#x441;&#x43E;&#x43E;&#x442;&#x432;&#x435;&#x442;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x43E;. &#x414;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;:</p><p>\[<br>\begin{align*}<br>fst (pair X Y) &amp;= (\lambda p.p \; K) \; ((\lambda a b c.c a b) X Y) = \\<br>&amp;= (\lambda p.p \; K) \; (\lambda c.c X Y) = (\lambda c.c X Y) K = \\<br>&amp;= K X Y = (\lambda x y.x) X Y = (\lambda y.X) Y = X<br>\end{align*}<br>\]</p><p>&#x41A;&#x430;&#x43A; &#x436;&#x435; &#x432;&#x43E;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x44D;&#x442;&#x43E;&#x439; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x435;&#x439; &#x434;&#x43B;&#x44F; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x43F;&#x440;&#x435;&#x434;&#x44B;&#x434;&#x443;&#x449;&#x435;&#x433;&#x43E; &#x447;&#x438;&#x441;&#x43B;&#x430;? &#x414;&#x430;&#x432;&#x430;&#x439;&#x442;&#x435; &#x437;&#x430;&#x434;&#x430;&#x434;&#x438;&#x43C; &#x43F;&#x430;&#x440;&#x443;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x431;&#x443;&#x434;&#x435;&#x442; &#x441;&#x43E;&#x434;&#x435;&#x440;&#x436;&#x430;&#x442;&#x44C; &#x432; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x435; &#x43F;&#x435;&#x440;&#x432;&#x43E;&#x433;&#x43E; &#x430;&#x440;&#x433;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x435; &#x447;&#x438;&#x441;&#x43B;&#x43E;, &#x430; &#x432; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x435; &#x432;&#x442;&#x43E;&#x440;&#x43E;&#x433;&#x43E; &#x2014; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x435;&#x435; &#x437;&#x430; &#x43D;&#x438;&#x43C;. &#x41F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x44C; &#x435;&#x451; &#x434;&#x43E;&#x432;&#x43E;&#x43B;&#x44C;&#x43D;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;:</p><p>\[<br>pair \; n \; (succ \; n)<br>\]</p><p>&#x412; &#x447;&#x430;&#x441;&#x442;&#x43D;&#x43E;&#x441;&#x442;&#x438;, &#x43F;&#x435;&#x440;&#x432;&#x44B;&#x435; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x442;&#x430;&#x43A;&#x438;&#x445; &#x43F;&#x430;&#x440; &#x431;&#x443;&#x434;&#x443;&#x442; (&#x43C;&#x44B; &#x441;&#x447;&#x438;&#x442;&#x430;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x43F;&#x440;&#x435;&#x434;&#x44B;&#x434;&#x443;&#x449;&#x435;&#x435; &#x434;&#x43B;&#x44F; &#x43D;&#x43E;&#x43B;&#x44F; &#x2014; &#x43D;&#x43E;&#x43B;&#x44C;):</p><p>\[<br>pair \; 0 \; 0\\<br>pair \; 0 \; 1\\<br>pair \; 1 \; 2\\<br>\ldots<br>\]</p><p>&#x410; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x43B;&#x438; &#x43C;&#x44B; &#x432;&#x43C;&#x435;&#x441;&#x442;&#x43E; &#x432;&#x44B;&#x43F;&#x438;&#x441;&#x44B;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x432;&#x441;&#x435;&#x445; &#x43F;&#x430;&#x440; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; &#x43F;&#x440;&#x438;&#x434;&#x443;&#x43C;&#x430;&#x442;&#x44C; &#x442;&#x435;&#x440;&#x43C;, &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x44E;&#x449;&#x438;&#x439; &#x43D;&#x430;&#x43C; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x44C; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x443;&#x44E; &#x43F;&#x430;&#x440;&#x443; &#x438;&#x437; &#x43F;&#x440;&#x435;&#x434;&#x44B;&#x434;&#x443;&#x449;&#x435;&#x439;? &#x414;&#x430;, &#x437;&#x430;&#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;!</p><p>\[<br>sp = \lambda p. pair \; (snd \; p) (snd \; (succ \; p))<br>\]</p><p>&#x417;&#x434;&#x435;&#x441;&#x44C; &#x43F;&#x435;&#x440;&#x432;&#x44B;&#x43C; &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x43E;&#x43C; &#x43D;&#x43E;&#x432;&#x43E;&#x439; &#x43F;&#x430;&#x440;&#x44B; &#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x438;&#x442;&#x441;&#x44F; &#x432;&#x442;&#x43E;&#x440;&#x43E;&#x439; &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442; &#x43F;&#x440;&#x435;&#x434;&#x44B;&#x434;&#x443;&#x449;&#x435;&#x439;, &#x430; &#x432;&#x442;&#x43E;&#x440;&#x44B;&#x43C; &#x2014; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x435;&#x435; &#x447;&#x438;&#x441;&#x43B;&#x43E;. &#x41F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x438;&#x432; &#x442;&#x430;&#x43A;&#x443;&#x44E; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E; &#x43A; &#x43F;&#x430;&#x440;&#x435; \( (pair \; 0 \; 0) \) <code>n</code> &#x440;&#x430;&#x437; &#x43C;&#x44B; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x43C; &#x43F;&#x430;&#x440;&#x443;, &#x433;&#x434;&#x435; &#x432;&#x442;&#x43E;&#x440;&#x43E;&#x439; &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442; &#x2014; &#x447;&#x438;&#x441;&#x43B;&#x43E; <code>n</code>, &#x430; &#x43F;&#x435;&#x440;&#x432;&#x43E;&#x435; &#x2014; <code>n - 1</code>. &#x410; &#x440;&#x43E;&#x432;&#x43D;&#x43E; &#x44D;&#x442;&#x43E; &#x43D;&#x430;&#x43C; &#x438; &#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F;. &#x421;&#x43E;&#x431;&#x438;&#x440;&#x430;&#x44F; &#x432;&#x441;&#x435; &#x432;&#x43C;&#x435;&#x441;&#x442;&#x435; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x43C; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x43F;&#x440;&#x435;&#x434;&#x44B;&#x434;&#x443;&#x449;&#x435;&#x433;&#x43E; &#x43D;&#x430;&#x442;&#x443;&#x440;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x433;&#x43E; &#x447;&#x438;&#x441;&#x43B;&#x430;:</p><p>\[<br>pred \; n = \lambda n.fst \; (n \; sp \; (pair \; 0 \; 0))<br>\]</p><p>&#x418;&#x437; &#x442;&#x435;&#x445; &#x436;&#x435; &#x441;&#x43E;&#x43E;&#x431;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x439; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x44C; &#x432;&#x44B;&#x447;&#x438;&#x442;&#x430;&#x43D;&#x438;&#x435; &#x447;&#x438;&#x441;&#x435;&#x43B;:</p><p>\[<br>minus = \lambda n m. m \; pred \; n<br>\]</p><p>&#x412;&#x430;&#x436;&#x43D;&#x44B;&#x43C; &#x43D;&#x430;&#x431;&#x43B;&#x44E;&#x434;&#x435;&#x43D;&#x438;&#x435;&#x43C; &#x442;&#x443;&#x442; &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x442;&#x43E;, &#x447;&#x442;&#x43E; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44F; <code>pred</code> &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442; &#x437;&#x430; \( O(n) \), &#x430; <code>minus</code> &#x438; &#x432;&#x43E;&#x432;&#x441;&#x435; &#x437;&#x430; \( O(n^2) \)! &#x42D;&#x442;&#x43E;, &#x43E;&#x447;&#x435;&#x432;&#x438;&#x434;&#x43D;&#x43E;, &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x43E;&#x439; &#x43A;&#x43E;&#x434;&#x438;&#x440;&#x43E;&#x432;&#x43A;&#x438; &#x43D;&#x430;&#x442;&#x443;&#x440;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x447;&#x438;&#x441;&#x435;&#x43B; &#x427;&#x451;&#x440;&#x447;&#x430;.</p><p>&#x426;&#x435;&#x43B;&#x43E;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x43D;&#x43E;&#x435; &#x434;&#x435;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x442;&#x430;&#x43A;&#x436;&#x435; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x44C;, &#x432;&#x441;&#x43F;&#x43E;&#x43C;&#x43D;&#x438;&#x432; &#x440;&#x435;&#x43A;&#x443;&#x440;&#x441;&#x438;&#x432;&#x43D;&#x43E;&#x435; &#x432;&#x44B;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x447;&#x435;&#x440;&#x435;&#x437; &#x432;&#x44B;&#x447;&#x438;&#x442;&#x430;&#x43D;&#x438;&#x435;:</p><p>\[<br>\left[ \frac{n}{m} \right] =<br>\begin{cases}<br>1 + \left[ \frac{n - m}{m} \right] &amp; n \ge m \\<br>0 &amp; n &lt; m<br>\end{cases}<br>\]</p><p>&#x414;&#x43B;&#x44F; &#x43D;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x43D;&#x438;&#x44F; &#x434;&#x430;&#x43D;&#x43D;&#x43E;&#x433;&#x43E; &#x432;&#x44B;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x44F; &#x43D;&#x430;&#x43C; &#x43F;&#x43E;&#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x435;&#x449;&#x435; &#x43E;&#x434;&#x438;&#x43D; &#x442;&#x438;&#x43F; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x2014; Boolean, &#x434;&#x43B;&#x44F; &#x442;&#x43E;&#x433;&#x43E;, &#x447;&#x442;&#x43E;&#x431; &#x432;&#x44B;&#x440;&#x430;&#x436;&#x430;&#x442;&#x44C; &#x443;&#x441;&#x43B;&#x43E;&#x432;&#x438;&#x435;, &#x432; &#x441;&#x43E;&#x43E;&#x442;&#x432;&#x435;&#x442;&#x441;&#x442;&#x432;&#x438;&#x438; &#x441; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x43C; &#x43C;&#x44B; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x432;&#x43E;&#x437;&#x432;&#x440;&#x430;&#x449;&#x430;&#x442;&#x44C; 0 &#x438;&#x43B;&#x438; &#x438;&#x434;&#x442;&#x438; &#x432; &#x440;&#x435;&#x43A;&#x443;&#x440;&#x441;&#x438;&#x432;&#x43D;&#x443;&#x44E; &#x432;&#x435;&#x442;&#x43A;&#x443;. &#x41A;&#x43B;&#x430;&#x441;&#x441;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x43E;&#x435; &#x43E;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x435;&#x43D;&#x438;&#x435; Boolean &#x442;&#x440;&#x438;&#x432;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x43E; &#x2014; &#x44D;&#x442;&#x43E; &#x442;&#x438;&#x43F;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x43D;&#x430;&#x441;&#x435;&#x43B;&#x44F;&#x44E;&#x442; &#x434;&#x432;&#x430; &#x43A;&#x43E;&#x43D;&#x43A;&#x442;&#x440;&#x435;&#x43D;&#x44B;&#x445; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x44F;:</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">data Bool :: * where
  True  :: Bool
  False :: Bool
  
ifThenElse :: Bool -&gt; a -&gt; a -&gt; a
ifThenElse True  x y = x
ifThenElse False x y = y
</code></pre>
<!--kg-card-end: markdown--><p>&#x412; &#x43D;&#x435;&#x442;&#x438;&#x43F;&#x438;&#x437;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x43E;&#x43C; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x438;&#x441;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x438; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x442;&#x43E;&#x436;&#x435; &#x43D;&#x435; &#x43E;&#x441;&#x43E;&#x431;&#x43E; &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x43E;&#x435;:</p><p>\[<br>\begin{align*}<br>true &amp;= \lambda t f.t \\<br>false &amp;= \lambda t f.f<br>\end{align*}<br>\]</p><p>&#x41E;&#x43F;&#x435;&#x440;&#x430;&#x442;&#x43E;&#x440; <code>if</code> &#x434;&#x43B;&#x44F; &#x442;&#x430;&#x43A;&#x43E;&#x439; &#x43A;&#x43E;&#x434;&#x438;&#x440;&#x43E;&#x432;&#x43A;&#x438; &#x441;&#x43E;&#x432;&#x441;&#x435;&#x43C; &#x442;&#x440;&#x438;&#x432;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439;:</p><p>\[<br>if = \lambda c x y.c x y<br>\]</p><p>&#x414;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;, &#x44D;&#x442;&#x43E; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x438;&#x442;&#x44C;:</p><p>\[<br>\begin{align*}<br>if \; true \; X \; Y &amp;= (\lambda c x y.c x y) \; true \; X \; Y = \\<br>&amp;= (\lambda x y.true \; x \; y) \; X \; Y = \\<br>&amp;= (\lambda y.true \; X \; y) \; Y = true \; X \; Y = \\<br>&amp;= (\lambda t f.t) \; X \; Y = (\lambda f.X) \; Y = \\<br>&amp;= X\\<br><br>if \; false \; X \; Y &amp;= (\lambda c x y.c x y) \; false \; X \; Y = \\<br>&amp;= (\lambda x y.false \; x \; y) \; X \; Y = \\<br>&amp;= (\lambda y.false \; X \; y) \; Y = false \; X \; Y = \\<br>&amp;= (\lambda t f.f) \; X \; Y = (\lambda f.f) \; Y = \\<br>&amp;= Y<br>\end{align*}<br>\]</p><p>&#x414;&#x43B;&#x44F; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x43D;&#x430;&#x448;&#x435;&#x439; &#x444;&#x43E;&#x440;&#x43C;&#x443;&#x43B;&#x44B; &#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x435;&#x449;&#x435; &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x44C;, &#x43A;&#x430;&#x43A; &#x441;&#x440;&#x430;&#x432;&#x43D;&#x438;&#x432;&#x430;&#x442;&#x44C; &#x434;&#x432;&#x430; &#x447;&#x438;&#x441;&#x43B;&#x430;. &#x41F;&#x440;&#x43E;&#x441;&#x442;&#x435;&#x439;&#x448;&#x438;&#x439; &#x441;&#x43F;&#x43E;&#x441;&#x43E;&#x431; &#x2014; &#x432;&#x44B;&#x447;&#x435;&#x441;&#x442;&#x44C; &#x43E;&#x434;&#x43D;&#x43E; &#x438;&#x437; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x433;&#x43E; &#x438; &#x441;&#x440;&#x430;&#x432;&#x43D;&#x438;&#x442;&#x44C; &#x441; &#x43D;&#x443;&#x43B;&#x435;&#x43C;. &#x412;&#x44B;&#x447;&#x438;&#x442;&#x430;&#x442;&#x44C; &#x43C;&#x44B; &#x443;&#x436;&#x435; &#x443;&#x43C;&#x435;&#x435;&#x43C;, &#x430; &#x432;&#x43E;&#x442; &#x441;&#x440;&#x430;&#x432;&#x43D;&#x435;&#x43D;&#x438;&#x435; &#x441; &#x43D;&#x443;&#x43B;&#x435;&#x43C; &#x2014; &#x44D;&#x442;&#x43E; &#x43D;&#x43E;&#x432;&#x43E;&#x435; &#x441;&#x43C;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x435; &#x434;&#x432;&#x443;&#x445; &#x43C;&#x438;&#x440;&#x43E;&#x432;: &#x43D;&#x430;&#x442;&#x443;&#x440;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x447;&#x438;&#x441;&#x435;&#x43B; &#x438; &#x431;&#x443;&#x43B;&#x435;&#x432;&#x44B;&#x445; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x439;. &#x422;&#x435;&#x43C; &#x43D;&#x435; &#x43C;&#x435;&#x43D;&#x435;&#x435; &#x434;&#x435;&#x43B;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x44D;&#x442;&#x43E; &#x441;&#x440;&#x430;&#x432;&#x43D;&#x435;&#x43D;&#x438;&#x435; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;. &#x417;&#x430;&#x43C;&#x435;&#x442;&#x438;&#x43C;, &#x447;&#x442;&#x43E; &#x43D;&#x43E;&#x43B;&#x44C; &#x432;&#x44B;&#x433;&#x43B;&#x44F;&#x434;&#x438;&#x442; &#x442;&#x430;&#x43A; &#x436;&#x435;, &#x43A;&#x430;&#x43A; <code>false</code>, &#x430; &#x447;&#x438;&#x441;&#x43B;&#x43E; &#x43E;&#x442;&#x43B;&#x438;&#x447;&#x43D;&#x43E;&#x435; &#x43E;&#x442; &#x43D;&#x443;&#x43B;&#x44F; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x438;&#x442; <code>n</code> &#x440;&#x430;&#x437; &#x43A;&#x430;&#x43A;&#x443;&#x44E;-&#x442;&#x43E; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E; &#x43A; &#x43D;&#x443;&#x43B;&#x44E;. &#x42D;&#x442;&#x43E; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x435;&#x442; &#x43D;&#x430;&#x43C; &#x43D;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E; <code>iszero</code> &#x43F;&#x43E; &#x430;&#x43D;&#x430;&#x43B;&#x43E;&#x433;&#x438;&#x438; &#x441; <code>if</code>:</p><p>\[<br>iszero = \lambda n.n \; (\lambda x.false) \; true<br>\]</p><p>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x437;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x440;&#x435;&#x43A;&#x443;&#x440;&#x441;&#x438;&#x432;&#x43D;&#x443;&#x44E; &#x444;&#x43E;&#x440;&#x43C;&#x443; &#x43D;&#x430;&#x448;&#x435;&#x433;&#x43E; &#x434;&#x435;&#x43B;&#x435;&#x43D;&#x438;&#x44F;:</p><p>\[<br>div = \lambda n m. if \; (iszero \; (minus \; m \; (add \; n \; 1))) \; 0 \; (add \; 1 \; (div \; (minus \; n \; m) \; m))<br>\]</p><p>&#x41E;&#x442;&#x43B;&#x438;&#x447;&#x43D;&#x43E;! &#x417;&#x430; &#x43E;&#x434;&#x43D;&#x438;&#x43C; &#x438;&#x441;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x438;&#x435;&#x43C;: &#x43C;&#x44B; &#x43D;&#x435; &#x443;&#x43C;&#x435;&#x435;&#x43C; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x442;&#x44C; &#x441; &#x440;&#x435;&#x43A;&#x443;&#x440;&#x441;&#x438;&#x432;&#x43D;&#x44B;&#x43C;&#x438; &#x442;&#x435;&#x440;&#x43C;&#x430;&#x43C;&#x438;. &#x41D;&#x43E; &#x44D;&#x442;&#x43E; &#x43B;&#x435;&#x433;&#x43A;&#x43E; &#x438;&#x441;&#x43F;&#x440;&#x430;&#x432;&#x438;&#x442;&#x44C;. &#x414;&#x43B;&#x44F; &#x43D;&#x430;&#x447;&#x430;&#x43B;&#x430; &#x43F;&#x440;&#x43E;&#x430;&#x431;&#x441;&#x442;&#x440;&#x430;&#x433;&#x438;&#x440;&#x443;&#x435;&#x43C;&#x441;&#x44F; &#x43F;&#x43E; &#x443;&#x43F;&#x43E;&#x43C;&#x438;&#x43D;&#x430;&#x43D;&#x438;&#x44E; <code>div</code> &#x432; &#x43D;&#x430;&#x448;&#x435;&#x43C; &#x442;&#x435;&#x440;&#x43C;&#x435;:</p><p>\[<br>div = (\lambda \color{red} d \color{black} n m. if \; (iszero \; (minus \; m \; (add \; n \; 1))) \; 0 \; (add \; 1 \; (\color{red} d \color{black} \; (minus \; n \; m) \; m))) \; \color{red} div \color{black}<br>\]</p><p>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43D;&#x430;&#x448; &#x442;&#x435;&#x440;&#x43C; &#x43F;&#x440;&#x438;&#x43D;&#x44F;&#x43B; &#x432;&#x438;&#x434; \( X = F \; X \), &#x438;&#x43D;&#x44B;&#x43C;&#x438; &#x441;&#x43B;&#x43E;&#x432;&#x430;&#x43C;&#x438; <code>div</code> &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; <em>&#x43D;&#x435;&#x43F;&#x43E;&#x434;&#x432;&#x438;&#x436;&#x43D;&#x43E;&#x439; &#x442;&#x43E;&#x447;&#x43A;&#x43E;&#x439;</em> &#x434;&#x43B;&#x44F; &#x442;&#x435;&#x440;&#x43C;&#x430;:</p><p>\[<br>\lambda d n m. if \; (iszero \; (minus \; m \; (add \; n \; 1))) \; 0 \; (add \; 1 \; (d \; (minus \; n \; m) \; m))<br>\]</p><p>&#x412; &#x441;&#x43E;&#x43E;&#x442;&#x432;&#x435;&#x442;&#x441;&#x442;&#x432;&#x438;&#x438; &#x441; &#x442;&#x435;&#x43E;&#x440;&#x435;&#x43C;&#x43E;&#x439; &#x43E; <a href="https://en.wikipedia.org/wiki/Fixed-point_combinator?ref=yakovlev.me">&#x43A;&#x43E;&#x43C;&#x431;&#x438;&#x43D;&#x430;&#x442;&#x43E;&#x440;&#x435; &#x43D;&#x435;&#x43F;&#x43E;&#x434;&#x432;&#x438;&#x436;&#x43D;&#x43E;&#x439; &#x442;&#x43E;&#x447;&#x43A;&#x438;</a> &#x442;&#x430;&#x43A;&#x430;&#x44F; &#x442;&#x43E;&#x447;&#x43A;&#x430; &#x435;&#x441;&#x442;&#x44C; &#x443; &#x43B;&#x44E;&#x431;&#x43E;&#x433;&#x43E; &#x442;&#x435;&#x440;&#x43C;&#x430;, &#x438; &#x43D;&#x430;&#x445;&#x43E;&#x434;&#x438;&#x442;&#x441;&#x44F; &#x43E;&#x43D;&#x430; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; &#x441; &#x43F;&#x43E;&#x43C;&#x43E;&#x449;&#x44C;&#x44E; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x44F; &#x442;&#x430;&#x43A;&#x43E;&#x433;&#x43E; &#x43A;&#x43E;&#x43C;&#x431;&#x438;&#x43D;&#x430;&#x442;&#x43E;&#x440;&#x430; &#x43A; &#x442;&#x435;&#x440;&#x43C;&#x443;:</p><p>\[<br>Y = \lambda f.(\lambda x.f (xx))(\lambda x.f (xx))<br>\]</p><p>&#x418;&#x442;&#x43E;&#x433;&#x43E;, &#x444;&#x438;&#x43D;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x435; &#x43D;&#x435;&#x440;&#x435;&#x43A;&#x443;&#x440;&#x441;&#x438;&#x432;&#x43D;&#x43E;&#x435; &#x432;&#x44B;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x434;&#x43B;&#x44F; &#x434;&#x435;&#x43B;&#x435;&#x43D;&#x438;&#x44F;:</p><p>\[<br>div = Y (\lambda d n m. if \; (iszero \; (minus \; m \; (add \; n \; 1))) \; 0 \; (add \; 1 \; (d \; (minus \; n \; m) \; m)))<br>\]</p><p>&#x41F;&#x43E;&#x434;&#x432;&#x435;&#x434;&#x435;&#x43C; &#x438;&#x442;&#x43E;&#x433;. &#x41C;&#x44B; &#x443;&#x432;&#x438;&#x434;&#x435;&#x43B;&#x438; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x44B;&#x435; &#x438; &#x43E;&#x447;&#x435;&#x432;&#x438;&#x434;&#x43D;&#x44B;&#x435; &#x43E;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x434;&#x43B;&#x44F; &#x442;&#x430;&#x43A;&#x438;&#x445; &#x442;&#x438;&#x43F;&#x43E;&#x432; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x43A;&#x430;&#x43A; &#x43D;&#x430;&#x442;&#x443;&#x440;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x435; &#x447;&#x438;&#x441;&#x43B;&#x430;, &#x43F;&#x430;&#x440;&#x44B; &#x438; &#x431;&#x443;&#x43B;&#x435;&#x432;&#x44B; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x44F;. &#x422;&#x430;&#x43A;&#x436;&#x435; &#x43C;&#x44B; &#x43E;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x438;&#x43B;&#x438; &#x43D;&#x430;&#x431;&#x43E;&#x440; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x439; &#x434;&#x43B;&#x44F; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x44B; &#x441; &#x43A;&#x430;&#x436;&#x434;&#x44B;&#x43C;. &#x421;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x43C; &#x448;&#x430;&#x433;&#x43E;&#x43C; &#x431;&#x44B;&#x43B;&#x43E; &#x43F;&#x43E;&#x44F;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x438;&#x437; &#x432;&#x43E;&#x437;&#x434;&#x443;&#x445;&#x430; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x445; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x442;&#x435;&#x440;&#x43C;&#x43E;&#x432;, &#x443;&#x434;&#x438;&#x432;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x43C; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x43C; &#x43A;&#x43E;&#x43F;&#x438;&#x440;&#x443;&#x44E;&#x449;&#x438;&#x445; &#x43F;&#x43E;&#x432;&#x435;&#x434;&#x435;&#x43D;&#x438;&#x435; &#x44D;&#x442;&#x438;&#x445; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x439;. &#x41F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x44F;&#x44F; &#x438;&#x445; &#x437;&#x430;&#x43E;&#x434;&#x43D;&#x43E; &#x441; &#x43F;&#x43E;&#x441;&#x442;&#x440;&#x43E;&#x435;&#x43D;&#x438;&#x435;&#x43C; &#x43F;&#x440;&#x438;&#x43C;&#x438;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x439; &#x440;&#x435;&#x43A;&#x443;&#x440;&#x441;&#x438;&#x438; &#x438; &#x432;&#x44B;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x435;&#x43C; &#x440;&#x435;&#x43A;&#x443;&#x440;&#x441;&#x438;&#x432;&#x44B;&#x445; &#x442;&#x435;&#x440;&#x43C;&#x43E;&#x432; &#x447;&#x435;&#x440;&#x435;&#x437; Y-&#x43A;&#x43E;&#x43C;&#x431;&#x438;&#x43D;&#x430;&#x442;&#x43E;&#x440;, &#x43C;&#x44B; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x43B;&#x438; &#x442;&#x43E;&#x442; &#x436;&#x435; &#x43D;&#x430;&#x431;&#x43E;&#x440; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x439;. &#x412;&#x43E;&#x43F;&#x440;&#x43E;&#x441; &#x436;&#x435;, &#x43D;&#x430; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x43C;&#x44B; &#x43F;&#x43E;&#x441;&#x442;&#x430;&#x440;&#x430;&#x435;&#x43C;&#x441;&#x44F; &#x43E;&#x442;&#x432;&#x435;&#x442;&#x438;&#x442;&#x44C; &#x432; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x439; &#x440;&#x430;&#x437;, &#x430; <strong><em>&#x441;&#x443;&#x449;&#x435;&#x441;&#x442;&#x432;&#x443;&#x435;&#x442; &#x43B;&#x438; &#x430;&#x43B;&#x433;&#x43E;&#x440;&#x438;&#x442;&#x43C;, &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x44E;&#x449;&#x438;&#x439; &#x43F;&#x435;&#x440;&#x435;&#x432;&#x43E;&#x434;&#x438;&#x442;&#x44C; &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x43D;&#x44B;&#x435; &#x438;&#x43D;&#x434;&#x443;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x44B;&#x435; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x438; &#x432; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x442;&#x435;&#x440;&#x43C;&#x44B;</em></strong>?</p>]]></content:encoded></item><item><title><![CDATA[Untyped Lambda Calculus]]></title><description><![CDATA[Попытка cделать описание лямбда-исчисления сразу с реализацией кода на языке программирования Haskell.]]></description><link>https://yakovlev.me/untyped-lambda-calculus/</link><guid isPermaLink="false">62a9a65d27b7ab000134c247</guid><category><![CDATA[fp]]></category><category><![CDATA[haskell]]></category><dc:creator><![CDATA[Pavel Yakovlev]]></dc:creator><pubDate>Wed, 29 Aug 2018 16:13:00 GMT</pubDate><content:encoded><![CDATA[<p>&#x421; 2015 &#x433;&#x43E;&#x434;&#x430; &#x44F; &#x447;&#x438;&#x442;&#x430;&#x44E; &#x43B;&#x435;&#x43A;&#x446;&#x438;&#x438; &#x432; &#x418;&#x422;&#x41C;&#x41E;, &#x442;&#x430;&#x43A; &#x438;&#x43B;&#x438; &#x438;&#x43D;&#x430;&#x447;&#x435; &#x441;&#x432;&#x44F;&#x437;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x441; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x43E;&#x43D;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x43C; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435;&#x43C;. &#x41E;&#x431;&#x44B;&#x447;&#x43D;&#x43E; &#x43F;&#x435;&#x440;&#x432;&#x44B;&#x435; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43B;&#x435;&#x43A;&#x446;&#x438;&#x439; &#x43F;&#x43E;&#x441;&#x432;&#x435;&#x449;&#x435;&#x43D;&#x44B; &#x43D;&#x435;&#x442;&#x438;&#x43F;&#x438;&#x437;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x43E;&#x43C;&#x443; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x438;&#x441;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x44E;, &#x435;&#x433;&#x43E; &#x43F;&#x43E;&#x441;&#x442;&#x440;&#x43E;&#x435;&#x43D;&#x438;&#x44E; &#x438; &#x437;&#x430;&#x434;&#x430;&#x447;&#x430;&#x43C;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43D;&#x430; &#x43D;&#x435;&#x43C; &#x440;&#x435;&#x448;&#x438;&#x442;&#x44C;.&#x200C;&#x200C; &#x421;&#x442;&#x443;&#x434;&#x435;&#x43D;&#x442;&#x44B; &#x432;&#x43E;&#x441;&#x43F;&#x440;&#x438;&#x43D;&#x438;&#x43C;&#x430;&#x44E;&#x442; &#x442;&#x430;&#x43A;&#x43E;&#x439; &#x441;&#x443;&#x433;&#x443;&#x431;&#x43E; &#x442;&#x435;&#x43E;&#x440;&#x435;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x439; &#x43C;&#x430;&#x442;&#x435;&#x440;&#x438;&#x430;&#x43B; &#x441; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x43C; &#x441;&#x43A;&#x440;&#x438;&#x43F;&#x43E;&#x43C;, &#x438; &#x445;&#x43E;&#x440;&#x43E;&#x448;&#x43E; &#x43F;&#x440;&#x43E;&#x43D;&#x438;&#x43A;&#x430;&#x44E;&#x442;&#x441;&#x44F; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x438;&#x43C; &#x43F;&#x440;&#x435;&#x434;&#x43B;&#x430;&#x433;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x43D;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x43A;&#x43E;&#x434; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x438;&#x441;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x441;&#x430;&#x43C;&#x438;&#x43C;. &#x412; &#x441;&#x432;&#x44F;&#x437;&#x438; &#x441; &#x44D;&#x442;&#x438;&#x43C; &#x43A;&#x430;&#x436;&#x435;&#x442;&#x441;&#x44F; &#x431;&#x44B;&#x43B;&#x43E; &#x431;&#x44B; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x43E; &#x43F;&#x43E;&#x43F;&#x440;&#x43E;&#x431;&#x43E;&#x432;&#x430;&#x442;&#x44C; <s>&#x441;&#x43C;&#x435;&#x448;&#x430;&#x442;&#x44C; &#x43D;&#x435;&#x43F;&#x440;&#x438;&#x44F;&#x442;&#x43D;&#x43E;&#x435; &#x441; &#x431;&#x435;&#x441;&#x43F;&#x43E;&#x43B;&#x435;&#x437;&#x43D;&#x44B;&#x43C;</s> &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x43E;&#x43F;&#x438;&#x441;&#x430;&#x43D;&#x438;&#x435; &#x438;&#x441;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x441;&#x440;&#x430;&#x437;&#x443; &#x441; &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x430;&#x446;&#x438;&#x435;&#x439; &#x43A;&#x43E;&#x434;&#x430;. &#x420;&#x430;&#x437;&#x443;&#x43C;&#x435;&#x435;&#x442;&#x441;&#x44F;, &#x43F;&#x440;&#x438; &#x44D;&#x442;&#x43E;&#x43C; &#x43F;&#x43E;&#x441;&#x442;&#x440;&#x430;&#x434;&#x430;&#x435;&#x442; &#x43F;&#x43E;&#x43B;&#x43D;&#x43E;&#x442;&#x430; &#x438; &#x433;&#x43B;&#x443;&#x431;&#x438;&#x43D;&#x430; &#x43C;&#x430;&#x442;&#x435;&#x440;&#x438;&#x430;&#x43B;&#x430;, &#x43D;&#x43E; &#x434;&#x43B;&#x44F; &#x445;&#x43E;&#x440;&#x43E;&#x448;&#x435;&#x433;&#x43E; &#x442;&#x435;&#x43E;&#x440;&#x435;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x43E;&#x433;&#x43E; &#x43F;&#x43E;&#x43D;&#x438;&#x43C;&#x430;&#x43D;&#x438;&#x44F; &#x435;&#x441;&#x442;&#x44C; <a href="https://yakovlev.me/static/upload/henk.pdf">&#x411;&#x430;&#x440;&#x440;&#x435;&#x43D;&#x434;&#x440;&#x435;&#x433;&#x442;</a> &#x438;&#x43B;&#x438; (&#x441;&#x43A;&#x440;&#x43E;&#x43C;&#x43D;&#x43E;) <a href="https://math.wtf/course/fp_p2_2017?ref=yakovlev.me">&#x43C;&#x43E;&#x438; &#x43B;&#x435;&#x43A;&#x446;&#x438;&#x438;</a>. &#x417;&#x434;&#x435;&#x441;&#x44C; &#x436;&#x435; &#x43C;&#x44B; &#x441;&#x43A;&#x43E;&#x43D;&#x446;&#x435;&#x43D;&#x442;&#x440;&#x438;&#x440;&#x443;&#x435;&#x43C;&#x441;&#x44F; &#x43D;&#x430; &#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x43E;&#x43C; &#x430;&#x441;&#x43F;&#x435;&#x43A;&#x442;&#x435;.</p><p>&#x41D;&#x430;&#x447;&#x43D;&#x435;&#x43C;, &#x43D;&#x435;&#x43F;&#x43E;&#x441;&#x440;&#x435;&#x434;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x43E;, &#x441; &#x432;&#x432;&#x435;&#x434;&#x435;&#x43D;&#x438;&#x44F; &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x433;&#x43E; &#x44F;&#x437;&#x44B;&#x43A;&#x430;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x438;&#x442; &#x43D;&#x430;&#x43C; &#x43E;&#x43F;&#x438;&#x441;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x442;&#x435;&#x440;&#x43C;&#x44B; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x438;&#x441;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x44F;. &#x41F;&#x440;&#x43E;&#x441;&#x442;&#x435;&#x439;&#x448;&#x438;&#x43C; &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x43E;&#x43C; &#x438;&#x441;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x44F;&#x432;&#x43B;&#x44F;&#x44E;&#x442;&#x441;&#x44F; <strong>&#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x435;</strong> &#x2014; &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x44B; &#x43C;&#x43D;&#x43E;&#x436;&#x435;&#x441;&#x442;&#x432;&#x430; \(V = {x, y, z, \ldots}\) &#x43F;&#x440;&#x43E;&#x438;&#x437;&#x432;&#x43E;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x441;&#x438;&#x43C;&#x432;&#x43E;&#x43B;&#x43E;&#x432; &#x43B;&#x430;&#x442;&#x438;&#x43D;&#x441;&#x43A;&#x43E;&#x433;&#x43E; &#x430;&#x43B;&#x444;&#x430;&#x432;&#x438;&#x442;&#x430;. &#x41B;&#x44E;&#x431;&#x430;&#x44F; &#x43F;&#x43E;&#x434;&#x43E;&#x431;&#x43D;&#x430;&#x44F; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x430;&#x44F; &#x443;&#x436;&#x435; &#x431;&#x443;&#x434;&#x435;&#x442; &#x441;&#x447;&#x438;&#x442;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x442;&#x435;&#x440;&#x43C;&#x43E;&#x43C;:&#x200C;&#x200C;&#x200C;&#x200C;<br>\[x<br>\in V \Rightarrow x \in \Lambda.<br>\]&#x200C;&#x200C;&#x200C;&#x200C;<br>&#x422;&#x430;&#x43A;&#x436;&#x435; &#x43E;&#x431;&#x44F;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x43C; &#x443;&#x441;&#x43B;&#x43E;&#x432;&#x438;&#x435;&#x43C; &#x43F;&#x43E;&#x441;&#x442;&#x440;&#x43E;&#x435;&#x43D;&#x438;&#x44F; &#x43B;&#x44E;&#x431;&#x43E;&#x433;&#x43E; &#x438;&#x441;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x442;&#x43E;, &#x447;&#x442;&#x43E; &#x442;&#x435;&#x440;&#x43C;&#x43E;&#x43C; &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x442;&#x435;&#x440;&#x43C; &#x432; &#x441;&#x43A;&#x43E;&#x431;&#x43A;&#x430;&#x445;:&#x200C;&#x200C;&#x200C;&#x200C;<br>\[<br>t \in \Lambda \Rightarrow (t) \in \Lambda.<br>\]&#x200C;&#x200C;&#x200C;&#x200C;<br>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x441;&#x442;&#x440;&#x43E;&#x438;&#x442;&#x44C; &#x443;&#x436;&#x435; &#x431;&#x435;&#x441;&#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;&#x435; &#x43C;&#x43D;&#x43E;&#x436;&#x435;&#x441;&#x442;&#x432;&#x43E; &#x442;&#x435;&#x440;&#x43C;&#x43E;&#x432;:&#x200C;&#x200C;&#x200C;&#x200C;<br>\[<br>x, y, (x), ((x)), (((z))), \ldots<br>\]<br>&#x41E;&#x434;&#x43D;&#x430;&#x43A;&#x43E; &#x44D;&#x442;&#x43E; &#x44F;&#x432;&#x43D;&#x43E; &#x43D;&#x435; &#x442;&#x43E;, &#x447;&#x442;&#x43E; &#x43C;&#x44B; &#x445;&#x43E;&#x442;&#x438;&#x43C; &#x432; &#x438;&#x442;&#x43E;&#x433;&#x435;, &#x432;&#x435;&#x434;&#x44C; &#x43D;&#x430;&#x448;&#x435; &#x438;&#x441;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x434;&#x43E;&#x43B;&#x436;&#x43D;&#x43E; &#x438;&#x43C;&#x435;&#x442;&#x44C; &#x441;&#x43F;&#x43E;&#x441;&#x43E;&#x431;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x432;&#x44B;&#x440;&#x430;&#x436;&#x430;&#x442;&#x44C; &#x43B;&#x44E;&#x431;&#x43E;&#x435; &#x432;&#x44B;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x435;. &#x410; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442;, &#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x438;&#x442;&#x44C; &#x432; &#x43D;&#x435;&#x433;&#x43E; &#x435;&#x449;&#x435; &#x432;&#x438;&#x434;&#x43E;&#x432; &#x444;&#x43E;&#x440;&#x43C;&#x443;&#x43B;. &#x41F;&#x43E;&#x43D;&#x44F;&#x442;&#x43D;&#x430;&#x44F; &#x438; &#x435;&#x441;&#x442;&#x435;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x430;&#x44F; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x44F; &#x2014; &#x44D;&#x442;&#x43E; <strong>&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x435;</strong>. &#x422;&#x435;&#x440;&#x43C;, &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x44F;&#x44E;&#x449;&#x438;&#x439; &#x438;&#x437; &#x441;&#x435;&#x431;&#x44F; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E;, &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x43A; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x43C;&#x443; &#x442;&#x435;&#x440;&#x43C;&#x443; (&#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x44F;&#x44E;&#x449;&#x438;&#x439; &#x430;&#x440;&#x433;&#x443;&#x43C;&#x435;&#x43D;&#x442;), &#x432; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x435; &#x447;&#x435;&#x433;&#x43E; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x43D;&#x43E;&#x432;&#x44B;&#x439; &#x442;&#x435;&#x440;&#x43C;. &#x412; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x438;&#x441;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x438; &#x44D;&#x442;&#x43E; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x432;&#x44B;&#x440;&#x430;&#x437;&#x438;&#x442;&#x44C; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x43C; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x43C;:&#x200C;&#x200C;&#x200C;<br>\[<br>m, n \in \Lambda \Rightarrow (m \, n) \in \Lambda,<br>\]&#x200C;&#x200C;&#x200C;&#x200C;<br>&#x447;&#x442;&#x43E; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x435;&#x442; &#x43D;&#x430;&#x43C; &#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x435;&#x449;&#x435; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435; &#x431;&#x435;&#x441;&#x441;&#x43C;&#x44B;&#x441;&#x43B;&#x435;&#x43D;&#x43D;&#x44B;&#x445; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x439;:&#x200C;&#x200C;&#x200C;&#x200C;<br>\[<br>(x \, y), ((x \, y) z), ((x \,y) z) (m n), \ldots<br>\]</p><p>&#x41F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x44F;&#x44F;, &#x43D;&#x43E; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x432;&#x430;&#x436;&#x43D;&#x430;&#x44F; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x44F; &#x2014; <strong>&#x430;&#x431;&#x441;&#x442;&#x440;&#x430;&#x446;&#x438;&#x44F;</strong> &#x442;&#x435;&#x440;&#x43C;&#x430; &#x43F;&#x43E; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x43E;&#x439;, &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x44E;&#x449;&#x430;&#x44F; &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C; &#x437;&#x430;&#x432;&#x438;&#x441;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x44C; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x439; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; &#x43E;&#x442; &#x441;&#x432;&#x43E;&#x435;&#x433;&#x43E; &#x430;&#x440;&#x433;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430;. &#x41F;&#x43E; &#x438;&#x441;&#x442;&#x43E;&#x440;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x43C; &#x43F;&#x440;&#x438;&#x447;&#x438;&#x43D;&#x430;&#x43C; &#x43E;&#x43D;&#x430; &#x43F;&#x438;&#x448;&#x435;&#x442;&#x441;&#x44F; &#x447;&#x435;&#x440;&#x435;&#x437; &#x431;&#x443;&#x43A;&#x432;&#x443; \( \lambda \), &#x447;&#x442;&#x43E; &#x438; &#x434;&#x430;&#x43B;&#x43E; &#x43D;&#x430;&#x437;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x438;&#x441;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x44E;:&#x200C;&#x200C;&#x200C;&#x200C;<br>\[<br>x \in V, m \in \Lambda \Rightarrow \lambda x. m \in \Lambda.<br>\]</p><p>&#x415;&#x441;&#x43B;&#x438; &#x434;&#x43E;&#x43F;&#x443;&#x441;&#x442;&#x438;&#x442;&#x44C;, &#x447;&#x442;&#x43E; &#x443; &#x43D;&#x430;&#x441; &#x435;&#x441;&#x442;&#x44C; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x438;&#x43C;&#x435;&#x43D;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x442;&#x435;&#x440;&#x43C;&#x44B; (e.g. <em>plus, prod</em> &#x438; <em>pow</em>), &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x44F;&#x44E;&#x449;&#x438;&#x435; &#x442;&#x435; &#x438;&#x43B;&#x438; &#x438;&#x43D;&#x44B;&#x435; &#x43E;&#x43F;&#x435;&#x440;&#x430;&#x442;&#x43E;&#x440;&#x44B; (+, *, ^), &#x43C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x43D;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x43F;&#x440;&#x43E;&#x438;&#x437;&#x432;&#x43E;&#x43B;&#x44C;&#x43D;&#x443;&#x44E; &#x430;&#x440;&#x438;&#x444;&#x43C;&#x435;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x443;&#x44E; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E;:&#x200C;&#x200C;&#x200C;&#x200C;<br>\[<br>f(x,y) = x^2 + 3 \cdot y \rightarrow \lambda x.\lambda y.((plus ((pow \, x) 2)) ((prod \, 3) y))<br>\]<br>&#x418;&#x437;-&#x437;&#x430; &#x43E;&#x431;&#x438;&#x43B;&#x438;&#x44F; &#x441;&#x43A;&#x43E;&#x431;&#x43E;&#x447;&#x435;&#x43A; &#x432;&#x44B;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x432;&#x44B;&#x433;&#x43B;&#x44F;&#x434;&#x438;&#x442; &#x441;&#x43E;&#x432;&#x435;&#x440;&#x448;&#x435;&#x43D;&#x43D;&#x43E; &#x43D;&#x435;&#x447;&#x438;&#x442;&#x430;&#x435;&#x43C;&#x44B;&#x43C;, &#x442;&#x430;&#x43A; &#x447;&#x442;&#x43E; &#x434;&#x43B;&#x44F; &#x43D;&#x430;&#x447;&#x430;&#x43B;&#x430; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x438;&#x43C; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x441;&#x43E;&#x433;&#x43B;&#x430;&#x448;&#x435;&#x43D;&#x438;&#x439;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x442; &#x443;&#x43F;&#x440;&#x43E;&#x441;&#x442;&#x438;&#x442;&#x44C; &#x437;&#x430;&#x43F;&#x438;&#x441;&#x44C;. &#x412; &#x43F;&#x435;&#x440;&#x432;&#x443;&#x44E; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C;, &#x44D;&#x442;&#x43E; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x430; &#x430;&#x441;&#x441;&#x43E;&#x446;&#x438;&#x430;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x441;&#x442;&#x438;. &#x41F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x435; &#x43C;&#x44B; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x441;&#x447;&#x438;&#x442;&#x430;&#x442;&#x44C; &#x430;&#x441;&#x441;&#x43E;&#x446;&#x438;&#x430;&#x442;&#x438;&#x432;&#x43D;&#x44B;&#x43C; <em>&#x432;&#x43B;&#x435;&#x432;&#x43E;</em>, &#x430; &#x430;&#x431;&#x441;&#x442;&#x440;&#x430;&#x43A;&#x446;&#x438;&#x44E; <em>&#x432;&#x43F;&#x440;&#x430;&#x432;&#x43E;:</em>&#x200C;&#x200C;&#x200C;&#x200C;<br>\[<br>&#x200C;&#x200C;&#x200C;&#x200C;(m n) (k) = m \, n \, k \\<br>&#x200C;&#x200C;&#x200C;&#x200C;\lambda x. \lambda y. m = \lambda x \, y. m&#x200C;&#x200C;&#x200C;&#x200C;<br>\]<br>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43F;&#x435;&#x440;&#x435;&#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x442;&#x443; &#x436;&#x435; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x44E; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43A;&#x43E;&#x440;&#x43E;&#x447;&#x435; &#x438; &#x441;&#x43E;&#x432;&#x441;&#x435;&#x43C; &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x43D;&#x43E;:&#x200C;&#x200C;&#x200C;&#x200C;<br>\[<br>f(x,y) = x^2 + 3 \cdot y \rightarrow \lambda x \, y. plus \, (pow \, x \, 2) (prod \, 3 \, y)<br>\]<br>&#x427;&#x442;&#x43E;&#x431; &#x435;&#x449;&#x435; &#x441;&#x438;&#x43B;&#x44C;&#x43D;&#x435;&#x435; &#x437;&#x430;&#x431;&#x44B;&#x442;&#x44C; &#x43F;&#x440;&#x43E; &#x441;&#x43A;&#x43E;&#x431;&#x43A;&#x438;, &#x43D;&#x430;&#x447;&#x43D;&#x435;&#x43C; &#x434;&#x443;&#x43C;&#x430;&#x442;&#x44C; &#x43F;&#x440;&#x43E; &#x43D;&#x430;&#x448;&#x438; &#x442;&#x435;&#x440;&#x43C;&#x44B; &#x43D;&#x435; &#x43A;&#x430;&#x43A; &#x43F;&#x440;&#x43E; &#x441;&#x442;&#x440;&#x43E;&#x43A;&#x438;, &#x430; &#x43A;&#x430;&#x43A; &#x43F;&#x440;&#x43E; &#x441;&#x438;&#x43D;&#x442;&#x430;&#x43A;&#x441;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x435; &#x434;&#x435;&#x440;&#x435;&#x432;&#x44C;&#x44F;. &#x41F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x430; &#x43F;&#x435;&#x440;&#x435;&#x445;&#x43E;&#x434;&#x43E;&#x432; &#x432; &#x434;&#x435;&#x440;&#x435;&#x432;&#x44C;&#x44F; &#x431;&#x443;&#x434;&#x443;&#x442; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x435;:</p><!--kg-card-begin: html--><table>
    <tr>
        <th>&#x422;&#x435;&#x440;&#x43C;</th>
        <th>&#x414;&#x435;&#x440;&#x435;&#x432;&#x43E;</th>
    </tr>
    <tr>
        <td>\( x \)</td>
        <td><svg width="44pt" height="44pt" viewbox="0.00 0.00 44.00 44.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 40)">
<title>%3</title>
<!-- x -->
<g id="node1" class="node">
<title>x</title>
<ellipse fill="none" stroke="#000000" cx="18" cy="-18" rx="18" ry="18"/>
<text text-anchor="middle" x="18" y="-13.8" font-family="Times,serif" font-size="14.00" fill="#000000">x</text>
</g>
</g>
</svg></td>
    </tr>
    <tr>
        <td>\( m \, n \)</td>
        <td><svg width="98pt" height="117pt" viewbox="0.00 0.00 98.00 116.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 112.5015)">
<title>%3</title>
<!-- a -->
<g id="node1" class="node">
<title>a</title>
<ellipse fill="none" stroke="#000000" cx="45" cy="-90.2508" rx="18.0049" ry="18.0049"/>
<text text-anchor="middle" x="45" y="-86.0508" font-family="Times,serif" font-size="14.00" fill="#000000">@</text>
</g>
<!-- m -->
<g id="node2" class="node">
<title>m</title>
<ellipse fill="none" stroke="#000000" cx="18" cy="-18" rx="18" ry="18"/>
<text text-anchor="middle" x="18" y="-13.8" font-family="Times,serif" font-size="14.00" fill="#000000">m</text>
</g>
<!-- a&#45;&#45;m -->
<g id="edge1" class="edge">
<title>a--m</title>
<path fill="none" stroke="#000000" d="M38.6014,-73.1283C34.2974,-61.611 28.6471,-46.4911 24.3527,-34.9995"/>
</g>
<!-- n -->
<g id="node3" class="node">
<title>n</title>
<ellipse fill="none" stroke="#000000" cx="72" cy="-18" rx="18" ry="18"/>
<text text-anchor="middle" x="72" y="-13.8" font-family="Times,serif" font-size="14.00" fill="#000000">n</text>
</g>
<!-- a&#45;&#45;n -->
<g id="edge2" class="edge">
<title>a--n</title>
<path fill="none" stroke="#000000" d="M51.3986,-73.1283C55.7026,-61.611 61.3529,-46.4911 65.6473,-34.9995"/>
</g>
</g>
</svg></td>
    </tr>
    <tr>
        <td>\( \lambda x. m \)</td>
        <td><svg width="98pt" height="116pt" viewbox="0.00 0.00 98.00 116.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 112)">
<title>%3</title>
<!-- a -->
<g id="node1" class="node">
<title>a</title>
<ellipse fill="none" stroke="#000000" cx="45" cy="-90" rx="18" ry="18"/>
<text text-anchor="middle" x="45" y="-85.8" font-family="Times,serif" font-size="14.00" fill="#000000">&#x3BB;</text>
</g>
<!-- m -->
<g id="node2" class="node">
<title>m</title>
<ellipse fill="none" stroke="#000000" cx="18" cy="-18" rx="18" ry="18"/>
<text text-anchor="middle" x="18" y="-13.8" font-family="Times,serif" font-size="14.00" fill="#000000">x</text>
</g>
<!-- a&#45;&#45;m -->
<g id="edge1" class="edge">
<title>a--m</title>
<path fill="none" stroke="#000000" d="M38.6014,-72.937C34.2974,-61.4596 28.6471,-46.3922 24.3527,-34.9405"/>
</g>
<!-- n -->
<g id="node3" class="node">
<title>n</title>
<ellipse fill="none" stroke="#000000" cx="72" cy="-18" rx="18" ry="18"/>
<text text-anchor="middle" x="72" y="-13.8" font-family="Times,serif" font-size="14.00" fill="#000000">m</text>
</g>
<!-- a&#45;&#45;n -->
<g id="edge2" class="edge">
<title>a--n</title>
<path fill="none" stroke="#000000" d="M51.3986,-72.937C55.7026,-61.4596 61.3529,-46.3922 65.6473,-34.9405"/>
</g>
</g>
</svg></td>
    </tr>
</table><!--kg-card-end: html--><p>&#x41D;&#x430;&#x448;&#x430; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44F; \( f \) &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x431;&#x44B;&#x442;&#x44C; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x430; &#x432; &#x432;&#x438;&#x434;&#x435; &#x441;&#x438;&#x43D;&#x442;&#x430;&#x43A;&#x441;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x43E;&#x433;&#x43E; &#x434;&#x435;&#x440;&#x435;&#x432;&#x430;:</p><!--kg-card-begin: html--><svg width="259pt" height="522pt" viewbox="0.00 0.00 259.34 522.01" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 518.0081)">
<title>%3</title>
<!-- l1 -->
<g id="node1" class="node">
<title>l1</title>
<ellipse fill="none" stroke="#000000" cx="86.3368" cy="-496.0081" rx="18" ry="18"/>
<text text-anchor="middle" x="86.3368" y="-491.8081" font-family="Times,serif" font-size="14.00" fill="#000000">&#x3BB;</text>
</g>
<!-- l2 -->
<g id="node2" class="node">
<title>l2</title>
<ellipse fill="none" stroke="#000000" cx="113.3368" cy="-424.0081" rx="18" ry="18"/>
<text text-anchor="middle" x="113.3368" y="-419.8081" font-family="Times,serif" font-size="14.00" fill="#000000">&#x3BB;</text>
</g>
<!-- l1&#45;&#45;l2 -->
<g id="edge2" class="edge">
<title>l1--l2</title>
<path fill="none" stroke="#000000" d="M92.7354,-478.9451C97.0394,-467.4677 102.6897,-452.4003 106.9841,-440.9486"/>
</g>
<!-- xl -->
<g id="node3" class="node">
<title>xl</title>
<ellipse fill="none" stroke="#000000" cx="59.3368" cy="-424.0081" rx="18" ry="18"/>
<text text-anchor="middle" x="59.3368" y="-419.8081" font-family="Times,serif" font-size="14.00" fill="#000000">x</text>
</g>
<!-- l1&#45;&#45;xl -->
<g id="edge1" class="edge">
<title>l1--xl</title>
<path fill="none" stroke="#000000" d="M79.9381,-478.9451C75.6341,-467.4677 69.9838,-452.4003 65.6894,-440.9486"/>
</g>
<!-- yl -->
<g id="node4" class="node">
<title>yl</title>
<ellipse fill="none" stroke="#000000" cx="86.3368" cy="-351.7573" rx="18" ry="18"/>
<text text-anchor="middle" x="86.3368" y="-347.5573" font-family="Times,serif" font-size="14.00" fill="#000000">y</text>
</g>
<!-- l2&#45;&#45;yl -->
<g id="edge3" class="edge">
<title>l2--yl</title>
<path fill="none" stroke="#000000" d="M106.9381,-406.8856C102.6341,-395.3683 96.9838,-380.2484 92.6894,-368.7568"/>
</g>
<!-- a1 -->
<g id="node9" class="node">
<title>a1</title>
<ellipse fill="none" stroke="#000000" cx="140.3368" cy="-351.7573" rx="18.0049" ry="18.0049"/>
<text text-anchor="middle" x="140.3368" y="-347.5573" font-family="Times,serif" font-size="14.00" fill="#000000">@</text>
</g>
<!-- l2&#45;&#45;a1 -->
<g id="edge4" class="edge">
<title>l2--a1</title>
<path fill="none" stroke="#000000" d="M119.7354,-406.8856C123.977,-395.5352 129.5262,-380.6859 133.7965,-369.2587"/>
</g>
<!-- x -->
<g id="node5" class="node">
<title>x</title>
<ellipse fill="none" stroke="#000000" cx="86.3368" cy="-25.3368" rx="18" ry="18"/>
<text text-anchor="middle" x="86.3368" y="-21.1368" font-family="Times,serif" font-size="14.00" fill="#000000">x</text>
</g>
<!-- y -->
<g id="node6" class="node">
<title>y</title>
<ellipse fill="none" stroke="#000000" cx="225.3368" cy="-200.1562" rx="18" ry="18"/>
<text text-anchor="middle" x="225.3368" y="-195.9562" font-family="Times,serif" font-size="14.00" fill="#000000">y</text>
</g>
<!-- two -->
<g id="node7" class="node">
<title>two</title>
<ellipse fill="none" stroke="#000000" cx="109.3368" cy="-112.9905" rx="18" ry="18"/>
<text text-anchor="middle" x="109.3368" y="-108.7905" font-family="Times,serif" font-size="14.00" fill="#000000">2</text>
</g>
<!-- tree -->
<g id="node8" class="node">
<title>tree</title>
<ellipse fill="none" stroke="#000000" cx="233.3368" cy="-112.9905" rx="18" ry="18"/>
<text text-anchor="middle" x="233.3368" y="-108.7905" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
</g>
<!-- a2 -->
<g id="node10" class="node">
<title>a2</title>
<ellipse fill="none" stroke="#000000" cx="109.3368" cy="-279.2558" rx="18.0049" ry="18.0049"/>
<text text-anchor="middle" x="109.3368" y="-275.0558" font-family="Times,serif" font-size="14.00" fill="#000000">@</text>
</g>
<!-- a1&#45;&#45;a2 -->
<g id="edge5" class="edge">
<title>a1--a2</title>
<path fill="none" stroke="#000000" d="M133.1468,-334.9418C128.1745,-323.3126 121.5822,-307.895 116.5951,-296.2313"/>
</g>
<!-- a3 -->
<g id="node11" class="node">
<title>a3</title>
<ellipse fill="none" stroke="#000000" cx="171.3368" cy="-279.2558" rx="18.0049" ry="18.0049"/>
<text text-anchor="middle" x="171.3368" y="-275.0558" font-family="Times,serif" font-size="14.00" fill="#000000">@</text>
</g>
<!-- a1&#45;&#45;a3 -->
<g id="edge6" class="edge">
<title>a1--a3</title>
<path fill="none" stroke="#000000" d="M147.5267,-334.9418C152.499,-323.3126 159.0913,-307.895 164.0784,-296.2313"/>
</g>
<!-- a4 -->
<g id="node12" class="node">
<title>a4</title>
<ellipse fill="none" stroke="#000000" cx="109.3368" cy="-200.1562" rx="18.0049" ry="18.0049"/>
<text text-anchor="middle" x="109.3368" y="-195.9562" font-family="Times,serif" font-size="14.00" fill="#000000">@</text>
</g>
<!-- a2&#45;&#45;a4 -->
<g id="edge8" class="edge">
<title>a2--a4</title>
<path fill="none" stroke="#000000" d="M109.3368,-260.91C109.3368,-248.2225 109.3368,-231.4017 109.3368,-218.6766"/>
</g>
<!-- plus -->
<g id="node15" class="node">
<title>plus</title>
<ellipse fill="none" stroke="#000000" cx="48.3368" cy="-200.1562" rx="24.6985" ry="24.6985"/>
<text text-anchor="middle" x="48.3368" y="-195.9562" font-family="Times,serif" font-size="14.00" fill="#000000">plus</text>
</g>
<!-- a2&#45;&#45;plus -->
<g id="edge7" class="edge">
<title>a2--plus</title>
<path fill="none" stroke="#000000" d="M98.1484,-264.7477C88.4491,-252.1704 74.3233,-233.8533 63.5895,-219.9346"/>
</g>
<!-- a3&#45;&#45;y -->
<g id="edge14" class="edge">
<title>a3--y</title>
<path fill="none" stroke="#000000" d="M181.7485,-264.0046C191.372,-249.9081 205.5858,-229.0876 215.1401,-215.0924"/>
</g>
<!-- a6 -->
<g id="node14" class="node">
<title>a6</title>
<ellipse fill="none" stroke="#000000" cx="171.3368" cy="-200.1562" rx="18.0049" ry="18.0049"/>
<text text-anchor="middle" x="171.3368" y="-195.9562" font-family="Times,serif" font-size="14.00" fill="#000000">@</text>
</g>
<!-- a3&#45;&#45;a6 -->
<g id="edge13" class="edge">
<title>a3--a6</title>
<path fill="none" stroke="#000000" d="M171.3368,-260.91C171.3368,-248.2225 171.3368,-231.4017 171.3368,-218.6766"/>
</g>
<!-- a4&#45;&#45;two -->
<g id="edge10" class="edge">
<title>a4--two</title>
<path fill="none" stroke="#000000" d="M109.3368,-181.6706C109.3368,-166.7783 109.3368,-145.9555 109.3368,-131.1505"/>
</g>
<!-- a5 -->
<g id="node13" class="node">
<title>a5</title>
<ellipse fill="none" stroke="#000000" cx="55.3368" cy="-112.9905" rx="18.0049" ry="18.0049"/>
<text text-anchor="middle" x="55.3368" y="-108.7905" font-family="Times,serif" font-size="14.00" fill="#000000">@</text>
</g>
<!-- a4&#45;&#45;a5 -->
<g id="edge9" class="edge">
<title>a4--a5</title>
<path fill="none" stroke="#000000" d="M99.6826,-184.5727C89.9143,-168.8048 74.8929,-144.5576 65.0894,-128.7329"/>
</g>
<!-- a5&#45;&#45;x -->
<g id="edge12" class="edge">
<title>a5--x</title>
<path fill="none" stroke="#000000" d="M61.4614,-95.6729C66.9314,-80.2062 74.8967,-57.684 80.3304,-42.3201"/>
</g>
<!-- pow -->
<g id="node16" class="node">
<title>pow</title>
<ellipse fill="none" stroke="#000000" cx="25.3368" cy="-25.3368" rx="25.1746" ry="25.1746"/>
<text text-anchor="middle" x="25.3368" y="-21.1368" font-family="Times,serif" font-size="14.00" fill="#000000">pow</text>
</g>
<!-- a5&#45;&#45;pow -->
<g id="edge11" class="edge">
<title>a5--pow</title>
<path fill="none" stroke="#000000" d="M49.4097,-95.6729C44.9017,-82.5013 38.6423,-64.2127 33.6362,-49.5859"/>
</g>
<!-- a6&#45;&#45;tree -->
<g id="edge16" class="edge">
<title>a6--tree</title>
<path fill="none" stroke="#000000" d="M182.1363,-184.9731C193.5854,-168.8769 211.5456,-143.6266 222.8675,-127.7092"/>
</g>
<!-- prod -->
<g id="node17" class="node">
<title>prod</title>
<ellipse fill="none" stroke="#000000" cx="171.3368" cy="-112.9905" rx="26.1352" ry="26.1352"/>
<text text-anchor="middle" x="171.3368" y="-108.7905" font-family="Times,serif" font-size="14.00" fill="#000000">prod</text>
</g>
<!-- a6&#45;&#45;prod -->
<g id="edge15" class="edge">
<title>a6--prod</title>
<path fill="none" stroke="#000000" d="M171.3368,-181.6706C171.3368,-169.377 171.3368,-153.042 171.3368,-139.387"/>
</g>
</g>
</svg><!--kg-card-end: html--><p>&#x41A;&#x43E;&#x434;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435;&#x43C; &#x442;&#x430;&#x43A;&#x438;&#x445; &#x434;&#x435;&#x440;&#x435;&#x432;&#x44C;&#x435;&#x432; &#x43C;&#x44B; &#x438; &#x437;&#x430;&#x439;&#x43C;&#x435;&#x43C;&#x441;&#x44F; &#x441; &#x43F;&#x43E;&#x43C;&#x43E;&#x449;&#x44C;&#x44E; &#x430;&#x43B;&#x433;&#x435;&#x431;&#x440;&#x430;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x445; &#x442;&#x438;&#x43F;&#x43E;&#x432;:</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">import Data.Text (Text)

data Term = Var Text       -- &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x435;
          | App Term Term  -- &#x430;&#x43F;&#x43F;&#x43B;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x44F;
          | Lam Text Term  -- &#x430;&#x431;&#x441;&#x442;&#x440;&#x430;&#x43A;&#x446;&#x438;&#x44F;
  deriving (Show)
</code></pre>
<!--kg-card-end: markdown--><p>&#x427;&#x442;&#x43E;&#x431; &#x441;&#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x443;&#x44E;&#x449;&#x438;&#x439; &#x43D;&#x430;&#x441; &#x442;&#x435;&#x440;&#x43C; \( f \) &#x43D;&#x430;&#x43C; &#x442;&#x430;&#x43A;&#x436;&#x435; &#x43F;&#x43E;&#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x43F;&#x43E;&#x434;&#x434;&#x435;&#x440;&#x436;&#x43A;&#x430; &#x447;&#x438;&#x441;&#x43B;&#x43E;&#x432;&#x44B;&#x445; &#x43B;&#x438;&#x442;&#x435;&#x440;&#x430;&#x43B;&#x43E;&#x432; (&#x447;&#x438;&#x441;&#x43B;&#x430; 2 &#x438; 3). &#x418;&#x445; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x438;&#x442;&#x44C; &#x432; &#x43D;&#x430;&#x448;&#x435; &#x438;&#x441;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x435; (&#x434;&#x43E;&#x431;&#x430;&#x432;&#x438;&#x432; &#x435;&#x449;&#x435; &#x43E;&#x434;&#x438;&#x43D; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x43E;&#x440;, &#x43D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, <code>Lit Int</code>) &#x438;&#x43B;&#x438; &#x441;&#x44D;&#x43C;&#x443;&#x43B;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x447;&#x435;&#x440;&#x435;&#x437; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x435; <code>two</code> &#x438; <code>tree</code>:</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">{-# LANGUAGE OverloadedStrings #-}

f :: Term
f = Lam &quot;x&quot; (Lam &quot;y&quot; (App (App (Var &quot;plus&quot;) xSqr) p3y))
  where xSqr = App (App (Var &quot;pow&quot;) (Var &quot;x&quot;)) (Var &quot;two&quot;)
        p3y  = App (App (Var &quot;prod&quot;) (Var &quot;tree&quot;)) (Var &quot;y&quot;)
</code></pre>
<!--kg-card-end: markdown--><p>&#x41F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x43D;&#x43E;&#x435; &#x432;&#x44B;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x432;&#x43D;&#x43E;&#x432;&#x44C; &#x438;&#x437;&#x43E;&#x431;&#x438;&#x43B;&#x443;&#x435;&#x442; &#x441;&#x43A;&#x43E;&#x431;&#x43A;&#x430;&#x43C;&#x438; &#x438; &#x432;&#x43E;&#x43E;&#x431;&#x449;&#x435; &#x442;&#x440;&#x443;&#x434;&#x43D;&#x43E; &#x43F;&#x435;&#x440;&#x435;&#x432;&#x430;&#x440;&#x438;&#x432;&#x430;&#x435;&#x43C;&#x43E;:</p><h2 id="-">&#x412;&#x44B;&#x432;&#x43E;&#x434; &#x442;&#x435;&#x440;&#x43C;&#x43E;&#x432;</h2><p>&#x427;&#x442;&#x43E;&#x431; &#x43A;&#x430;&#x43A;-&#x442;&#x43E; &#x436;&#x438;&#x442;&#x44C; &#x441; &#x44D;&#x442;&#x438;&#x43C;, &#x43B;&#x443;&#x447;&#x448;&#x435; &#x441;&#x440;&#x430;&#x437;&#x443; &#x43D;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; pretty printer, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x431;&#x443;&#x434;&#x435;&#x442; &#x432;&#x44B;&#x432;&#x43E;&#x434;&#x438;&#x442;&#x44C; &#x43D;&#x430;&#x448;&#x438; &#x442;&#x435;&#x440;&#x43C;&#x44B; &#x43A;&#x440;&#x430;&#x441;&#x438;&#x432;&#x43E;. &#x41D;&#x430;&#x447;&#x43D;&#x435;&#x43C; &#x441; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;&#x439; &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x430;&#x446;&#x438;&#x438;, &#x43F;&#x435;&#x447;&#x430;&#x442;&#x430;&#x44E;&#x449;&#x435;&#x439; &#x432;&#x441;&#x435; &#x441;&#x43A;&#x43E;&#x431;&#x43A;&#x438;:</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">import Data.Monoid ((&lt;&gt;))

pretty :: Term -&gt; Text
pretty (Var name)     = name
pretty (App algo arg) = &quot;(&quot; &lt;&gt; pretty algo &lt;&gt; &quot; &quot; &lt;&gt; pretty arg &lt;&gt; &quot;)&quot;
pretty (Lam var body) = &quot;&#x3BB;&quot; &lt;&gt; var &lt;&gt; &quot;.&quot; &lt;&gt; pretty body
</code></pre>
<!--kg-card-end: markdown--><p>&#x427;&#x438;&#x442;&#x430;&#x442;&#x44C; &#x43F;&#x43E;&#x434;&#x43E;&#x431;&#x43D;&#x44B;&#x439; &#x432;&#x44B;&#x432;&#x43E;&#x434; &#x443;&#x436;&#x435; &#x43C;&#x43E;&#x436;&#x43D;&#x43E;, &#x43D;&#x43E; &#x432;&#x441;&#x435; &#x436;&#x435; &#x43B;&#x438;&#x448;&#x43D;&#x438;&#x435; &#x441;&#x43A;&#x43E;&#x431;&#x43A;&#x438; &#x44F;&#x432;&#x43D;&#x43E; &#x437;&#x430;&#x442;&#x440;&#x443;&#x434;&#x43D;&#x44F;&#x44E;&#x442; &#x43F;&#x43E;&#x43D;&#x438;&#x43C;&#x430;&#x43D;&#x438;&#x435;:</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">ghci&gt; import Data.Text.IO as TIO
ghci&gt; TIO.putStrLn (pretty f)
&#x3BB;x.&#x3BB;y.((plus ((pow x) two)) ((prod tree) y)) 
</code></pre>
<!--kg-card-end: markdown--><p>&#x421;&#x43A;&#x43E;&#x431;&#x43A;&#x438; &#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x443;&#x431;&#x438;&#x440;&#x430;&#x442;&#x44C; &#x432;&#x43E;&#x43A;&#x440;&#x443;&#x433; &#x430;&#x43F;&#x43F;&#x43B;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438; &#x432; &#x442;&#x440;&#x435;&#x445; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x44F;&#x445;: &#x435;&#x441;&#x43B;&#x438; &#x43E;&#x43D;&#x430; &#x432;&#x435;&#x440;&#x445;&#x43D;&#x435;&#x443;&#x440;&#x43E;&#x432;&#x43D;&#x435;&#x432;&#x430;&#x44F;, &#x435;&#x441;&#x43B;&#x438; &#x43E;&#x43D;&#x430; &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x430;&#x43B;&#x433;&#x43E;&#x440;&#x438;&#x442;&#x43C;&#x43E;&#x43C; (<code>algo</code>) &#x434;&#x440;&#x443;&#x433;&#x43E;&#x439; &#x430;&#x43F;&#x43F;&#x43B;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438; &#x438;&#x43B;&#x438; &#x435;&#x441;&#x43B;&#x438; &#x43E;&#x43D;&#x430; &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x442;&#x435;&#x43B;&#x43E;&#x43C; (<code>body</code>) &#x430;&#x431;&#x441;&#x442;&#x440;&#x430;&#x43A;&#x446;&#x438;&#x438;. &#x41C;&#x43E;&#x434;&#x438;&#x444;&#x438;&#x446;&#x438;&#x440;&#x443;&#x435;&#x43C; &#x441;&#x43E;&#x43E;&#x442;&#x432;&#x435;&#x442;&#x441;&#x442;&#x432;&#x443;&#x44E;&#x449;&#x438;&#x43C; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x43C; &#x43D;&#x430;&#x448;&#x443; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E;:</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">data Parens = ParensLess | ParensFull

pretty :: Term -&gt; Text
pretty = pretty&apos; ParensLess
  where
    pretty&apos; :: Parens -&gt; Term -&gt; Text
    pretty&apos; _          (Var name)     = name
    pretty&apos; ParensLess (App algo arg) = pretty&apos; ParensLess algo &lt;&gt; &quot; &quot; &lt;&gt; pretty&apos; ParensFull arg
    pretty&apos; ParensFull app@(App _ _)  = &quot;(&quot; &lt;&gt; pretty&apos; ParensLess app &lt;&gt; &quot;)&quot;
    pretty&apos; _          (Lam var body) = &quot;&#x3BB;&quot; &lt;&gt; var &lt;&gt; &quot;.&quot; &lt;&gt; pretty&apos; ParensLess body
</code></pre>
<!--kg-card-end: markdown--><p>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43C;&#x44B; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x430;&#x435;&#x43C; &#x43A;&#x440;&#x430;&#x441;&#x438;&#x432;&#x44B;&#x439; &#x438; &#x43D;&#x430;&#x433;&#x43B;&#x44F;&#x434;&#x43D;&#x44B;&#x439; &#x432;&#x44B;&#x432;&#x43E;&#x434;:</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">ghci&gt; import Data.Text.IO as TIO
ghci&gt; TIO.putStrLn (pretty f)
&#x3BB;x.&#x3BB;y.plus (pow x two) (prod tree y)
</code></pre>
<!--kg-card-end: markdown--><p>&#x41F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x438;&#x43C; &#x448;&#x442;&#x440;&#x438;&#x445;&#x43E;&#x43C; &#x431;&#x443;&#x434;&#x435;&#x442; &#x441;&#x436;&#x430;&#x442;&#x438;&#x435; &#x432;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x43D;&#x44B;&#x445; &#x43B;&#x44F;&#x43C;&#x431;&#x434; &#x432; &#x43E;&#x434;&#x43D;&#x443;, &#x44D;&#x442;&#x43E; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x435;&#x441;&#x43B;&#x438; &#x442;&#x435;&#x43A;&#x443;&#x449;&#x430;&#x44F; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430; &#x43D;&#x430;&#x445;&#x43E;&#x434;&#x438;&#x442;&#x441;&#x44F; &#x432; &#x442;&#x435;&#x43B;&#x435; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x439; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x44B;. &#x41E;&#x431;&#x449;&#x430;&#x44F; &#x43B;&#x43E;&#x433;&#x438;&#x43A;&#x430;: &#x435;&#x441;&#x43B;&#x438; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430; &#x432; &#x442;&#x435;&#x43B;&#x435; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x439; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x44B;, &#x442;&#x43E; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x43B;&#x44F;&#x435;&#x43C; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x443;&#x44E; &#x432; &#x441;&#x43F;&#x438;&#x441;&#x43E;&#x43A; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x445;, &#x435;&#x441;&#x43B;&#x438; &#x432;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x43B;&#x44F;&#x43C;&#x431;&#x434; &#x43A;&#x43E;&#x43D;&#x447;&#x438;&#x43B;&#x43E;&#x441;&#x44C;, &#x442;&#x43E; &#x441;&#x442;&#x430;&#x432;&#x438;&#x43C; &#x442;&#x43E;&#x447;&#x43A;&#x443; &#x438; &#x43E;&#x43F;&#x438;&#x441;&#x44B;&#x432;&#x430;&#x435;&#x43C; &#x442;&#x435;&#x43B;&#x43E;. &#x420;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x430;&#x446;&#x438;&#x44F; &#x442;&#x430;&#x43A;&#x43E;&#x432;&#x430;:</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">data Position = AppAlgo | AppArg | LamBody | Other

pretty :: Term -&gt; Text
pretty = pretty&apos; Other
  where
    prettyLB :: Term -&gt; Text
    prettyLB (Lam var body) = var &lt;&gt; pretty&apos; LamBody body
    prettyLB _              = undefined
    
    pretty&apos; :: Position -&gt; Term -&gt; Text
    pretty&apos; LamBody lam@(Lam _ _)  = &quot; &quot; &lt;&gt; prettyLB lam
    pretty&apos; AppAlgo lam@(Lam _ _)  = &quot;(&quot; &lt;&gt; pretty&apos; Other lam &lt;&gt; &quot;)&quot;
    pretty&apos; _       lam@(Lam _ _)  = &quot;&#x3BB;&quot; &lt;&gt; prettyLB lam
    pretty&apos; LamBody term           = &quot;.&quot; &lt;&gt; pretty&apos; Other term
    pretty&apos; _       (Var name)     = name
    pretty&apos; AppArg  app@(App _ _)  = &quot;(&quot; &lt;&gt; pretty&apos; Other app &lt;&gt; &quot;)&quot;
    pretty&apos; _       (App algo arg) = pretty&apos; AppAlgo algo &lt;&gt; &quot; &quot; &lt;&gt; pretty&apos; AppArg arg 
</code></pre>
<!--kg-card-end: markdown--><p>&#x418; &#x444;&#x438;&#x43D;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x432;&#x44B;&#x432;&#x43E;&#x434;:</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">ghci&gt; import Data.Text.IO as TIO
ghci&gt; TIO.putStrLn (pretty f)
&#x3BB;x y.plus (pow x two) (prod tree y)
</code></pre>
<!--kg-card-end: markdown--><h2 id="--1">&#x412;&#x432;&#x43E;&#x434; &#x442;&#x435;&#x440;&#x43C;&#x43E;&#x432;</h2><p>&#x41F;&#x43E;&#x43C;&#x438;&#x43C;&#x43E; &#x43A;&#x440;&#x430;&#x441;&#x438;&#x432;&#x43E;&#x433;&#x43E; &#x432;&#x44B;&#x432;&#x43E;&#x434;&#x430; &#x43D;&#x430;&#x43C; &#x43F;&#x43E;&#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x43A;&#x430;&#x43A;-&#x442;&#x43E; &#x437;&#x430;&#x431;&#x438;&#x432;&#x430;&#x442;&#x44C; &#x442;&#x435;&#x440;&#x43C;&#x44B; &#x432; &#x43D;&#x430;&#x448; &#x43A;&#x430;&#x43B;&#x44C;&#x43A;&#x443;&#x43B;&#x44F;&#x442;&#x43E;&#x440;, &#x43F;&#x43E;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x443; &#x43D;&#x430;&#x431;&#x438;&#x440;&#x430;&#x442;&#x44C; &#x447;&#x442;&#x43E;-&#x442;&#x43E; &#x432;&#x440;&#x43E;&#x434;&#x435; <code>Lam &quot;x&quot; (Lam &quot;y&quot; (App (...</code> &#x441;&#x43E;&#x432;&#x441;&#x435;&#x43C; &#x43D;&#x435; &#x432;&#x435;&#x441;&#x435;&#x43B;&#x43E;. &#x414;&#x43B;&#x44F; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43D;&#x430;&#x43C; &#x43F;&#x43E;&#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43F;&#x430;&#x440;&#x441;&#x435;&#x440; &#x434;&#x43B;&#x44F; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x442;&#x435;&#x440;&#x43C;&#x43E;&#x432;. &#x412; &#x438;&#x434;&#x435;&#x430;&#x43B;&#x435; &#x43C;&#x44B; &#x434;&#x43E;&#x43B;&#x436;&#x43D;&#x44B; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x44C; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E;, &#x441;&#x43F;&#x43E;&#x441;&#x43E;&#x431;&#x43D;&#x443;&#x44E; &#x440;&#x430;&#x441;&#x43F;&#x430;&#x440;&#x441;&#x438;&#x442;&#x44C; &#x43B;&#x44E;&#x431;&#x43E;&#x439; &#x43D;&#x430;&#x448; &#x441;&#x436;&#x430;&#x442;&#x44B;&#x439; &#x432;&#x44B;&#x432;&#x43E;&#x434; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; <code>pretty</code>, &#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x43E;&#x431;&#x435;&#x441;&#x43F;&#x435;&#x447;&#x438;&#x432;&#x430;&#x44E;&#x449;&#x443;&#x44E; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x435;&#x435; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x43E;:<br>&#x200C;&#x200C;\[<br>parse \circ pretty = id<br>\]</p><p>&#x41A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;, &#x43D;&#x430; &#x441;&#x430;&#x43C;&#x43E;&#x43C; &#x434;&#x435;&#x43B;&#x435; &#x43C;&#x44B; &#x434;&#x43E;&#x43B;&#x436;&#x43D;&#x44B; &#x43E;&#x431;&#x440;&#x430;&#x431;&#x430;&#x442;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x43E;&#x448;&#x438;&#x431;&#x43A;&#x438; &#x441;&#x438;&#x43D;&#x442;&#x430;&#x43A;&#x441;&#x438;&#x441;&#x430; &#x438; &#x432;&#x441;&#x435; &#x442;&#x430;&#x43A;&#x43E;&#x435;, &#x430; &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x443; &#x43D;&#x430;&#x448;&#x430; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44F; <code>parse</code> &#x431;&#x443;&#x434;&#x435;&#x442; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x435;&#x435;. &#x421;&#x430;&#x43C;&#x430; &#x441;&#x442;&#x440;&#x430;&#x442;&#x435;&#x433;&#x438;&#x44F; &#x43F;&#x430;&#x440;&#x441;&#x438;&#x43D;&#x433;&#x430; &#x431;&#x443;&#x434;&#x435;&#x442; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x430;&#x44F;: &#x43B;&#x44E;&#x431;&#x43E;&#x439; &#x442;&#x435;&#x440;&#x43C; &#x43C;&#x44B; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x440;&#x430;&#x441;&#x441;&#x43C;&#x430;&#x442;&#x440;&#x438;&#x432;&#x430;&#x442;&#x44C; &#x43A;&#x430;&#x43A; &#x43F;&#x43E;&#x442;&#x435;&#x43D;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x443;&#x44E; &#x430;&#x43F;&#x43F;&#x43B;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x44E;, &#x442;.&#x435;. &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x442;&#x435;&#x440;&#x43C;&#x43E;&#x432; &#x438;&#x434;&#x443;&#x449;&#x438;&#x445; &#x434;&#x440;&#x443;&#x433; &#x437;&#x430; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x43C;. &#x41F;&#x43E;&#x442;&#x435;&#x43D;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x43E;&#x43D;&#x430; &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x432; &#x442;&#x43E;&#x43C; &#x441;&#x43C;&#x44B;&#x441;&#x43B;&#x435;, &#x447;&#x442;&#x43E; &#x442;&#x435;&#x440;&#x43C; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x432;&#x441;&#x435;&#x433;&#x43E; &#x43E;&#x434;&#x438;&#x43D;, &#x438; &#x442;&#x43E;&#x433;&#x434;&#x430; &#x43D;&#x438;&#x43A;&#x430;&#x43A;&#x43E;&#x439; &#x430;&#x43F;&#x43F;&#x43B;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438; &#x43E;&#x43D; &#x43D;&#x435; &#x431;&#x443;&#x434;&#x435;&#x442;. &#x422;&#x430;&#x43A;&#x43E;&#x439; &#x442;&#x435;&#x440;&#x43C;, &#x43D;&#x435; &#x44F;&#x432;&#x43B;&#x44F;&#x44E;&#x449;&#x438;&#x439;&#x441;&#x44F; &#x430;&#x43F;&#x43F;&#x43B;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x435;&#x439;, &#x43C;&#x44B; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x43D;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x43D;&#x430;&#x442;&#x443;&#x440;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x43C; &#x442;&#x435;&#x440;&#x43C;&#x43E;&#x43C;:<br>&#x200C;&#x200C;\[&#x200C;&#x200C;<br>\begin{align*}&#x200C;&#x200C;<br>term &amp;::= {natural \, term}^n \\&#x200C;&#x200C;<br>natural \, term &amp;::= (term) | variable | abstraction&#x200C;&#x200C;<br>\end{align*}&#x200C;&#x200C;<br>\]&#x200C;&#x200C;<br>&#x41D;&#x430;&#x447;&#x43D;&#x435;&#x43C; &#x43D;&#x430;&#x448;&#x443; &#x438;&#x43C;&#x43F;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x446;&#x438;&#x44E; &#x441; &#x43F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x43D;&#x435;&#x43E;&#x431;&#x445;&#x43E;&#x434;&#x438;&#x43C;&#x44B;&#x445; &#x43C;&#x43E;&#x434;&#x443;&#x43B;&#x435;&#x439; &#x43F;&#x430;&#x440;&#x441;&#x438;&#x43D;&#x433;&#x430; (&#x437;&#x434;&#x435;&#x441;&#x44C; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D; &#x43C;&#x43E;&#x439; &#x43B;&#x44E;&#x431;&#x438;&#x43C;&#x44B;&#x439; <code>attoparsec</code>, &#x434;&#x43B;&#x44F; &#x43A;&#x43B;&#x430;&#x441;&#x441;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x43E;&#x433;&#x43E; <code>parsec</code> &#x438;&#x43B;&#x438; &#x43C;&#x43E;&#x434;&#x43D;&#x43E;&#x433;&#x43E;, &#x43D;&#x43E; &#x43C;&#x435;&#x434;&#x43B;&#x435;&#x43D;&#x43D;&#x43E;&#x433;&#x43E; <code>megaparsec</code> &#x432;&#x441;&#x435; &#x430;&#x43D;&#x430;&#x43B;&#x43E;&#x433;&#x438;&#x447;&#x43D;&#x43E;), &#x430; &#x442;&#x430;&#x43A;&#x436;&#x435; &#x43D;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x43D;&#x438;&#x44F; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x438;&#x445; &#x432;&#x441;&#x43F;&#x43E;&#x43C;&#x43E;&#x433;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x439;.</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">import           Control.Applicative ((&lt;$&gt;), (&lt;*&gt;), (&lt;|&gt;))
import           Control.Monad       (void)
import           Data.Text           (Text, pack)
import           Data.Attoparsec.Text

-- &#x41E;&#x434;&#x438;&#x43D; &#x438;&#x43B;&#x438; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43F;&#x440;&#x43E;&#x431;&#x435;&#x43B;&#x43E;&#x432; &#x43F;&#x43E;&#x434;&#x440;&#x44F;&#x434;
spaces :: Parser ()
spaces = void $ many&apos; space

-- &#x41F;&#x430;&#x440;&#x441;&#x438;&#x442; &#x432;&#x44B;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x435;, &#x441;&#x43E; &#x432;&#x441;&#x435;&#x43C;&#x438; &#x43F;&#x440;&#x43E;&#x431;&#x435;&#x43B;&#x430;&#x43C;&#x438; &#x43F;&#x43E;&#x441;&#x43B;&#x435; &#x43D;&#x435;&#x433;&#x43E;, &#x43F;&#x440;&#x43E;&#x431;&#x435;&#x43B;&#x44B; &#x43E;&#x43F;&#x443;&#x441;&#x43A;&#x430;&#x435;&#x442;.
spaced :: Parser a -&gt; Parser a
spaced x = x &lt;* spaces

-- &#x41F;&#x430;&#x440;&#x441;&#x438;&#x442; &#x43E;&#x434;&#x43D;&#x443; &#x442;&#x43E;&#x447;&#x43A;&#x443; &#x438; &#x43E;&#x43F;&#x443;&#x441;&#x43A;&#x430;&#x435;&#x442; &#x432;&#x44B;&#x432;&#x43E;&#x434; &#x43F;&#x430;&#x440;&#x441;&#x435;&#x440;&#x430;.
dot :: Parser ()
dot = void $ spaced (char &apos;.&apos;)

-- &#x41F;&#x430;&#x440;&#x441;&#x438;&#x442; &#x441;&#x438;&#x43C;&#x432;&#x43E;&#x43B; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x44B; &#x438;&#x43B;&#x438; \\ &#x438;&#x43B;&#x438; L &#x438; &#x43E;&#x43F;&#x443;&#x441;&#x43A;&#x430;&#x435;&#x442; &#x432;&#x44B;&#x432;&#x43E;&#x434; &#x43F;&#x430;&#x440;&#x441;&#x435;&#x440;&#x430;.
lambda :: Parser ()
lambda = void $ spaced (char &apos;\\&apos; &lt;|&gt; char &apos;&#x3BB;&apos; &lt;|&gt; char &apos;L&apos;)

-- &#x41F;&#x430;&#x440;&#x441;&#x438;&#x442; &#x432;&#x44B;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x43E;&#x43A;&#x440;&#x443;&#x436;&#x435;&#x43D;&#x43D;&#x43E;&#x435; &#x441;&#x43A;&#x43E;&#x431;&#x43A;&#x430;&#x43C;&#x438;; &#x43F;&#x435;&#x440;&#x435;&#x434; &#x43E;&#x442;&#x43A;&#x440;&#x44B;&#x432;&#x430;&#x44E;&#x449;&#x435;&#x439; &#x438;
-- &#x43F;&#x43E;&#x441;&#x43B;&#x435; &#x437;&#x430;&#x43A;&#x440;&#x44B;&#x432;&#x430;&#x430;&#x44E;&#x449;&#x435;&#x439; &#x441;&#x43A;&#x43E;&#x431;&#x43E;&#x43A; &#x43C;&#x43E;&#x433;&#x443;&#x442; &#x438;&#x434;&#x442;&#x438; &#x43F;&#x440;&#x43E;&#x431;&#x435;&#x43B;&#x44B;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x431;&#x443;&#x434;&#x443;&#x442; &#x441;&#x44A;&#x435;&#x434;&#x435;&#x43D;&#x44B;.
parens :: Parser a -&gt; Parser a
parens x = spaced (char &apos;(&apos;) *&gt; x &lt;* spaced (char &apos;)&apos;)

-- &#x41F;&#x430;&#x440;&#x441;&#x438;&#x442; &#x441;&#x442;&#x440;&#x43E;&#x43A;&#x443;, &#x43D;&#x430;&#x447;&#x438;&#x43D;&#x430;&#x44E;&#x449;&#x443;&#x44E;&#x441;&#x44F; &#x441; &#x441;&#x438;&#x43C;&#x432;&#x43E;&#x43B;&#x43E;&#x432; &#x43B;&#x430;&#x442;&#x438;&#x43D;&#x441;&#x43A;&#x43E;&#x433;&#x43E; &#x430;&#x43B;&#x444;&#x430;&#x432;&#x438;&#x442;&#x430; &#x438;
-- &#x441;&#x43E;&#x434;&#x435;&#x440;&#x436;&#x430;&#x449;&#x443;&#x44E; &#x43B;&#x430;&#x442;&#x438;&#x43D;&#x441;&#x43A;&#x438;&#x435; &#x441;&#x438;&#x43C;&#x432;&#x43E;&#x43B;&#x44B;, &#x446;&#x438;&#x444;&#x440;&#x44B; &#x438; &#x441;&#x438;&#x43C;&#x432;&#x43E;&#x43B; &apos;.
name :: Parser Text
name = (pack .) . (:) &lt;$&gt; oneOf [&apos;a&apos;..&apos;z&apos;] &lt;*&gt; many&apos; (letter &lt;|&gt; digit &lt;|&gt; char &apos;\&apos;&apos;)
  where
    oneOf = choice . (char &lt;$&gt;)
</code></pre>
<!--kg-card-end: markdown--><p>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x431;&#x443;&#x434;&#x443;&#x442; &#x43F;&#x440;&#x43E;&#x447;&#x438;&#x442;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x442;&#x435;&#x440;&#x43C; &#x438; &#x43D;&#x430;&#x442;&#x443;&#x440;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x442;&#x435;&#x440;&#x43C; &#x432; &#x444;&#x43E;&#x440;&#x43C;&#x443;&#x43B;&#x438;&#x440;&#x43E;&#x432;&#x43A;&#x430;&#x445;, &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x432;&#x44B;&#x448;&#x435;:</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">-- &#x41F;&#x440;&#x43E;&#x447;&#x438;&#x442;&#x44B;&#x432;&#x430;&#x435;&#x442; &#x43D;&#x435; &#x43C;&#x435;&#x43D;&#x435;&#x435; &#x43E;&#x434;&#x43D;&#x43E;&#x433;&#x43E; &#x43D;&#x430;&#x442;&#x443;&#x440;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x433;&#x43E; &#x442;&#x435;&#x440;&#x43C;&#x430;; &#x432; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435;
-- &#x435;&#x441;&#x43B;&#x438; &#x438;&#x445; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435; &#x43E;&#x434;&#x43D;&#x43E;&#x439;, &#x441;&#x43E;&#x435;&#x434;&#x438;&#x43D;&#x44F;&#x435;&#x442; &#x438;&#x445; &#x432; &#x43E;&#x434;&#x438;&#x43D; &#x441; &#x43F;&#x43E;&#x43C;&#x43E;&#x449;&#x44C;&#x44E; &#x430;&#x43F;&#x43F;&#x43B;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438;
-- &#x43F;&#x43E; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x430;&#x43C; &#x43B;&#x435;&#x432;&#x43E;&#x439; &#x430;&#x441;&#x441;&#x43E;&#x446;&#x438;&#x430;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x441;&#x442;&#x438;.
term :: Parser Term
term = foldl1 App &lt;$&gt; many1 (spaced naturalTerm)

-- &#x41F;&#x440;&#x43E;&#x447;&#x438;&#x442;&#x44B;&#x432;&#x430;&#x435;&#x442; &#x442;&#x435;&#x440;&#x43C;, &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x441;&#x43E;&#x434;&#x435;&#x440;&#x436;&#x430;&#x449;&#x438;&#x439; &#x430;&#x43F;&#x43F;&#x43B;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x44E;, &#x432; &#x441;&#x43A;&#x43E;&#x431;&#x43A;&#x430;&#x445;,
-- &#x43B;&#x438;&#x431;&#x43E; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x443;&#x44E;, &#x43B;&#x438;&#x431;&#x43E; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x430;&#x431;&#x441;&#x442;&#x440;&#x430;&#x43A;&#x446;&#x438;&#x44E;.
naturalTerm :: Parser Term
naturalTerm = parens term &lt;|&gt; variable &lt;|&gt; abstraction 
</code></pre>
<!--kg-card-end: markdown--><p>&#x41E;&#x441;&#x442;&#x430;&#x43B;&#x43E;&#x441;&#x44C; &#x43D;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x432;&#x441;&#x435;&#x433;&#x43E; &#x434;&#x432;&#x430; &#x43F;&#x430;&#x440;&#x441;&#x435;&#x440;&#x430;: &#x434;&#x43B;&#x44F; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x445; &#x438; &#x430;&#x431;&#x441;&#x442;&#x440;&#x430;&#x43A;&#x446;&#x438;&#x438;. &#x418;&#x445; &#x432;&#x438;&#x434; &#x441;&#x442;&#x43E;&#x43B;&#x44C; &#x436;&#x435; &#x442;&#x440;&#x438;&#x432;&#x438;&#x430;&#x43B;&#x435;&#x43D;, &#x447;&#x442;&#x43E; &#x438; &#x443; &#x43F;&#x430;&#x440;&#x441;&#x435;&#x440;&#x43E;&#x432; &#x432;&#x44B;&#x448;&#x435;:</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">-- &#x41F;&#x430;&#x440;&#x441;&#x438;&#x442; &#x43E;&#x434;&#x43D;&#x443; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x443;&#x44E;.
variable :: Parser Term
variable = Var &lt;$&gt; name

-- &#x41F;&#x430;&#x440;&#x441;&#x438;&#x442; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x430;&#x431;&#x441;&#x442;&#x440;&#x430;&#x43A;&#x446;&#x438;&#x44E;, &#x43A;&#x430;&#x43A; &#x441;&#x438;&#x43C;&#x432;&#x43E;&#x43B; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x44B;, &#x43D;&#x435; &#x43C;&#x435;&#x43D;&#x435;&#x435; 1 &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x43E;&#x439;,
-- &#x442;&#x43E;&#x447;&#x43A;&#x443; &#x438; &#x442;&#x435;&#x440;&#x43C;, &#x44F;&#x432;&#x43B;&#x44F;&#x44E;&#x449;&#x438;&#x439;&#x441;&#x44F; &#x442;&#x435;&#x43B;&#x43E;&#x43C; &#x430;&#x431;&#x441;&#x442;&#x440;&#x430;&#x43A;&#x446;&#x438;&#x438;; &#x441;&#x432;&#x43E;&#x440;&#x430;&#x447;&#x438;&#x432;&#x430;&#x435;&#x442; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x435;
-- &#x432;&#x43E; &#x432;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x43D;&#x44B;&#x435; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x430;&#x431;&#x441;&#x442;&#x440;&#x430;&#x43A;&#x446;&#x438;&#x438; &#x43F;&#x43E; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x443; &#x43F;&#x440;&#x430;&#x432;&#x43E;&#x439; &#x430;&#x441;&#x441;&#x43E;&#x446;&#x438;&#x430;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x441;&#x442;&#x438;.
abstraction :: Parser Term
abstraction = do lambda
                 vars &lt;- many1 (spaced name)
                 dot
                 expr &lt;- term
                 pure $ foldr Lam expr vars
</code></pre>
<!--kg-card-end: markdown--><p>&#x41F;&#x440;&#x43E;&#x442;&#x435;&#x441;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43D;&#x430;&#x448;&#x438; &#x43F;&#x430;&#x440;&#x441;&#x435;&#x440;&#x44B; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x441; &#x43F;&#x43E;&#x43C;&#x43E;&#x449;&#x44C;&#x44E; &#x442;&#x430;&#x43A;&#x43E;&#x439; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438;:</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">parseTerm :: Text -&gt; Either String Term
parseTerm = parseOnly term
</code></pre>
<!--kg-card-end: markdown--><p>&#x412; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x43F;&#x440;&#x435;&#x442;&#x430;&#x442;&#x43E;&#x440;&#x435; &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x438;&#x43C;, &#x447;&#x442;&#x43E; &#x432;&#x441;&#x435; &#x447;&#x438;&#x442;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x432;&#x435;&#x440;&#x43D;&#x43E;:</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">ghci&gt; :set -XOverloadedStrings
ghci&gt; Right t = parseTerm &quot;&#x3BB;x y.plus (pow x two) (prod tree y)&quot;
ghci&gt; t
Lam &quot;x&quot; (Lam &quot;y&quot; (App (App (Var &quot;plus&quot;) (App (App (Var &quot;pow&quot;) (Var &quot;x&quot;)) (Var &quot;two&quot;))) (App (App (Var &quot;prod&quot;) (Var &quot;tree&quot;)) (Var &quot;y&quot;))))
ghci&gt; pretty t
&#x3BB;x y.plus (pow x two) (prod tree y)
</code></pre>
<!--kg-card-end: markdown--><h2 id="--2">&#x41D;&#x430;&#x43F;&#x43E;&#x43B;&#x43D;&#x435;&#x43D;&#x438;&#x435; &#x441;&#x43C;&#x44B;&#x441;&#x43B;&#x43E;&#x43C;</h2><p>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43F;&#x440;&#x438;&#x448;&#x43B;&#x43E; &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x43D;&#x430;&#x43F;&#x43E;&#x43B;&#x43D;&#x438;&#x442;&#x44C; &#x43D;&#x430;&#x448;&#x435; &#x438;&#x441;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x441;&#x43C;&#x44B;&#x441;&#x43B;&#x43E;&#x43C;. &#x414;&#x43B;&#x44F; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x432;&#x432;&#x435;&#x441;&#x442;&#x438; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x43C; &#x43F;&#x435;&#x440;&#x435;&#x43F;&#x438;&#x441;&#x44B;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x43E;&#x434;&#x43D;&#x438;&#x445; &#x442;&#x435;&#x440;&#x43C;&#x43E;&#x432; &#x432; &#x434;&#x440;&#x443;&#x433;&#x438;&#x435;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x43C;&#x44B; &#x438; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x441;&#x447;&#x438;&#x442;&#x430;&#x442;&#x44C; &#x432;&#x44B;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x44F;&#x43C;&#x438;.</p><p>&#x41F;&#x440;&#x435;&#x436;&#x434;&#x435; &#x447;&#x435;&#x43C; &#x43D;&#x430;&#x447;&#x430;&#x442;&#x44C;, &#x432;&#x432;&#x435;&#x434;&#x435;&#x43C; &#x43F;&#x430;&#x440;&#x443; &#x43E;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x435;&#x43D;&#x438;&#x439;. &#x412; &#x437;&#x430;&#x432;&#x438;&#x441;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x438; &#x43E;&#x442; &#x43F;&#x440;&#x438;&#x441;&#x443;&#x442;&#x441;&#x442;&#x432;&#x438;&#x44F; &#x438;&#x43B;&#x438; &#x43E;&#x442;&#x441;&#x443;&#x442;&#x441;&#x442;&#x432;&#x438;&#x44F; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x43E;&#x439; &#x43F;&#x43E;&#x434; &#x441;&#x438;&#x43C;&#x432;&#x43E;&#x43B;&#x43E;&#x43C; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x44B; &#x432; &#x430;&#x431;&#x441;&#x442;&#x440;&#x430;&#x43A;&#x446;&#x438;&#x438; &#x43C;&#x44B; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x434;&#x435;&#x43B;&#x438;&#x442;&#x44C; &#x432;&#x441;&#x435; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x435; &#x43D;&#x430; &#x441;&#x432;&#x43E;&#x431;&#x43E;&#x434;&#x43D;&#x44B;&#x435; &#x438; &#x441;&#x432;&#x44F;&#x437;&#x430;&#x43D;&#x43D;&#x44B;&#x435;. &#x41D;&#x430;&#x447;&#x43D;&#x435;&#x43C; &#x441; &#x438;&#x43D;&#x442;&#x443;&#x442;&#x438;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x433;&#x43E; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;&#x430;:&#x200C;&#x200C;<br>\[&#x200C;&#x200C;<br>(\lambda \color{red}x \color{black}. (\lambda \color{green}x \color{black}. \color{green}x \color{black} \, y) \, \color{red}x \color{black}) \, \color{blue}x&#x200C;&#x200C;<br>\]&#x200C;&#x200C;<br>&#x418;&#x43A;&#x441;&#x44B; &#x440;&#x430;&#x437;&#x43D;&#x43E;&#x433;&#x43E; &#x446;&#x432;&#x435;&#x442;&#x430; &#x43A;&#x430;&#x43A; &#x431;&#x44B; &quot;&#x441;&#x432;&#x44F;&#x437;&#x44B;&#x432;&#x430;&#x44E;&#x442;&#x441;&#x44F;&quot; &#x440;&#x430;&#x437;&#x43D;&#x44B;&#x43C;&#x438; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;&#x43C;&#x438;. &#x41F;&#x440;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x438;&#x442;&#x44C; &#x438;&#x43D;&#x442;&#x443;&#x438;&#x442;&#x438;&#x432;&#x43D;&#x43E; &#x44D;&#x442;&#x43E; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x43C; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x43C;, &#x441;&#x43D;&#x438;&#x43C;&#x430;&#x44F; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x443;&#x44E; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x443; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &quot;&#x43E;&#x441;&#x432;&#x43E;&#x431;&#x43E;&#x434;&#x438;&#x442;&#x44C;&quot; &#x442;&#x443; &#x438;&#x43B;&#x438; &#x438;&#x43D;&#x443;&#x44E; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x443;&#x44E;, &#x43F;&#x43E;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x443; &#x435;&#x451; &#x438;&#x43C;&#x44F; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435; &#x43D;&#x435; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43E;&#x437;&#x43D;&#x430;&#x447;&#x430;&#x442;&#x44C;, &#x447;&#x442;&#x43E; &#x43E;&#x43D;&#x430; &#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x430;&#x440;&#x433;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x43E;&#x43C; &#x43A;&#x430;&#x43A;&#x43E;&#x439;-&#x43B;&#x438;&#x431;&#x43E; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438;. &#x41F;&#x43E;&#x441;&#x43B;&#x435; &#x441;&#x442;&#x43E;&#x43B;&#x44C; &#x432;&#x43E;&#x434;&#x44F;&#x43D;&#x438;&#x441;&#x442;&#x43E;&#x433;&#x43E; &#x43F;&#x43E;&#x44F;&#x441;&#x43D;&#x435;&#x43D;&#x438;&#x44F; &#x434;&#x430;&#x434;&#x438;&#x43C; &#x43D;&#x43E;&#x440;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x435; &#x43E;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x435;&#x43D;&#x438;&#x435;:&#x200C;&#x200C;&#x414;&#x43B;&#x44F; &#x43F;&#x440;&#x43E;&#x438;&#x437;&#x432;&#x43E;&#x43B;&#x44C;&#x43D;&#x43E;&#x433;&#x43E; &#x442;&#x435;&#x440;&#x43C;&#x430; \( t \) &#x43C;&#x43D;&#x43E;&#x436;&#x435;&#x441;&#x442;&#x432;&#x43E;&#x43C; &#x435;&#x433;&#x43E; <strong>&#x441;&#x432;&#x43E;&#x431;&#x43E;&#x434;&#x43D;&#x44B;&#x445; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x445;</strong> \( FV(t) \) &#x43D;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x44E;&#x442; &#x43C;&#x43D;&#x43E;&#x436;&#x435;&#x441;&#x442;&#x432;&#x43E;, &#x441;&#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x43E;&#x435; &#x43F;&#x43E; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x43C; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x430;&#x43C; (&#x434;&#x430;&#x43B;&#x435;&#x435; &#x43F;&#x43E;&#x434;&#x440;&#x430;&#x437;&#x443;&#x43C;&#x435;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F;, &#x447;&#x442;&#x43E; \( x \in V, \, M, N \in \Lambda \)):&#x200C;&#x200C;<br>\[<br>&#x200C;&#x200C;\begin{align*}&#x200C;&#x200C;<br>FV(x) &amp;= \{x\} \\&#x200C;&#x200C;<br>FV(M \, N) &amp;= FV(M) \cup FV(N) \\&#x200C;&#x200C;<br>FV(\lambda x. M) &amp;= FM(M) \backslash \{x\}&#x200C;&#x200C;<br>\end{align*}&#x200C;&#x200C;<br>\]<br>&#x200C;&#x200C;&#x410;&#x43D;&#x430;&#x43B;&#x43E;&#x433;&#x438;&#x447;&#x43D;&#x43E; &#x437;&#x430;&#x434;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x43C;&#x43D;&#x43E;&#x436;&#x435;&#x441;&#x442;&#x432;&#x43E; \( BV(t) \) <strong>&#x441;&#x432;&#x44F;&#x437;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x445;</strong>:&#x200C;&#x200C;<br>\[&#x200C;&#x200C;<br>\begin{align*}&#x200C;&#x200C;<br>BV(x) &amp;= \varnothing \\&#x200C;&#x200C;<br>BV(M \, N) &amp;= FV(M) \cup FV(N) \\<br>&#x200C;&#x200C;BV(\lambda x. M) &amp;= BV(M) \cup \{x\}&#x200C;&#x200C;<br>\end{align*}&#x200C;&#x200C;<br>\]<br>&#x200C;&#x200C;&#x421;&#x43E;&#x43E;&#x442;&#x432;&#x435;&#x442;&#x441;&#x442;&#x432;&#x443;&#x44E;&#x449;&#x438;&#x435; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; &#x43D;&#x430; Haskell &#x431;&#x443;&#x434;&#x443;&#x442; &#x432; &#x442;&#x43E;&#x447;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x43F;&#x43E;&#x432;&#x442;&#x43E;&#x440;&#x44F;&#x442;&#x44C; &#x43E;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x435;&#x43D;&#x438;&#x435;:</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">import Data.Set (Set, delete, empty,
                 insert, singleton, union)
                 
free :: Term -&gt; Set Name
free (Var var)      = singleton var
free (App algo arg) = free algo `union` free arg
free (Lam var body) = var `delete` free body

bound :: Term -&gt; Set Name
bound (Var var)      = empty
bound (App algo arg) = bound algo `union` bound arg
bound (Lam var body) = var `insert` free body
</code></pre>
<!--kg-card-end: markdown--><p>&#x412; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x438;&#x441;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x438; &#x441;&#x443;&#x449;&#x435;&#x441;&#x442;&#x432;&#x443;&#x435;&#x442; &#x435;&#x434;&#x438;&#x43D;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x430;&#x44F; &#x43D;&#x435;&#x442;&#x440;&#x438;&#x432;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x430;&#x44F; &#x430;&#x43A;&#x441;&#x438;&#x43E;&#x43C;&#x430; &#x2014; &#x434;&#x432;&#x430; &#x442;&#x435;&#x440;&#x43C;&#x430; &#x44F;&#x432;&#x43B;&#x44F;&#x44E;&#x442;&#x441;&#x44F; &#x440;&#x430;&#x432;&#x43D;&#x44B;&#x43C;&#x438;, &#x435;&#x441;&#x43B;&#x438; &#x43E;&#x43D;&#x438; &#x440;&#x430;&#x432;&#x43D;&#x44B; &#x441; &#x442;&#x43E;&#x447;&#x43D;&#x43E;&#x441;&#x442;&#x44C;&#x44E; &#x434;&#x43E; &#x43F;&#x435;&#x440;&#x435;&#x438;&#x43C;&#x435;&#x43D;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x441;&#x432;&#x44F;&#x437;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x445;. &#x422;&#x430;&#x43A;&#x438;&#x43C; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x43C;, &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x435; &#x442;&#x435;&#x440;&#x43C;&#x44B; &#x440;&#x430;&#x432;&#x43D;&#x44B;:<br>&#x200C;&#x200C;\[&#x200C;&#x200C;<br>\lambda \color{red}x \color{black} \, \color{green}y \color{black} . \color{red} x \color{black} = \lambda \color{red}z \color{black} \, \color{green}w \color{black} . \color{red} z \color{black} = \lambda \color{red}y \color{black} \, \color{green}x \color{black} . \color{red} y \color{black}<br>&#x200C;&#x200C;\]&#x200C;&#x200C;<br>&#x420;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x443;&#x435;&#x43C; &#x44D;&#x442;&#x43E;, &#x441;&#x434;&#x435;&#x43B;&#x430;&#x432; &#x43D;&#x430;&#x448;&#x438; &#x442;&#x435;&#x440;&#x43C;&#x44B; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x438;&#x442;&#x435;&#x43B;&#x435;&#x43C; &#x43A;&#x43B;&#x430;&#x441;&#x441;&#x43E;&#x432; &#x442;&#x438;&#x43F;&#x43E;&#x432; <code>Eq</code> &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x43C; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x43C;:</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">instance Eq Term where
  Var a == Var b        = a == b
  App a b == App a&apos; b&apos;  = a == a&apos; &amp;&amp; b == b&apos;
  Lam v b == Lam v&apos; b&apos;  = b == substitute b&apos; v&apos; (Var v)
  _ == _                = False
</code></pre>
<!--kg-card-end: markdown--><p>&#x417;&#x434;&#x435;&#x441;&#x44C; &#x43D;&#x430;&#x43C; &#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x434;&#x43E;&#x43F;&#x43E;&#x43B;&#x43D;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x443;&#x44E; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E; &#x43F;&#x43E;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43D;&#x43E;&#x432;&#x43A;&#x438;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x431;&#x44B; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x438;&#x43B;&#x430; &#x437;&#x430;&#x43C;&#x435;&#x43D;&#x44F;&#x442;&#x44C; &#x438;&#x43C;&#x435;&#x43D;&#x430; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x445;. &#x41D;&#x430; &#x441;&#x430;&#x43C;&#x43E;&#x43C; &#x434;&#x435;&#x43B;&#x435; &#x43C;&#x44B; &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x443;&#x435;&#x43C; &#x433;&#x43E;&#x440;&#x430;&#x437;&#x434;&#x43E; &#x431;&#x43E;&#x43B;&#x435;&#x435; &#x441;&#x438;&#x43B;&#x44C;&#x43D;&#x443;&#x44E; &#x432;&#x435;&#x440;&#x441;&#x438;&#x44E; &#x43F;&#x43E;&#x434;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x43A;&#x438;, &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x44E;&#x449;&#x443;&#x44E; &#x43F;&#x43E;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x44F;&#x442;&#x44C; &#x432;&#x43C;&#x435;&#x441;&#x442;&#x43E; &#x432;&#x441;&#x435;&#x445; &#x441;&#x432;&#x43E;&#x431;&#x43E;&#x434;&#x43D;&#x44B;&#x445; &#x432;&#x445;&#x43E;&#x436;&#x434;&#x435;&#x43D;&#x438;&#x439; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x43E;&#x439; &#x43F;&#x440;&#x43E;&#x438;&#x437;&#x432;&#x43E;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x442;&#x435;&#x440;&#x43C;. &#x414;&#x43B;&#x44F; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x432; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x438;&#x441;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x438; &#x435;&#x441;&#x442;&#x44C; &#x43F;&#x440;&#x438;&#x43D;&#x44F;&#x442;&#x43E;&#x435; &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x435; &#x43E;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x43F;&#x43E;&#x434;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x43A;&#x438;.</p><p><strong>&#x41F;&#x43E;&#x434;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x43A;&#x43E;&#x439;</strong> \( M[x:=N] \) &#x442;&#x435;&#x440;&#x43C;&#x430; \( N \) &#x432;&#x43C;&#x435;&#x441;&#x442;&#x43E; &#x432;&#x441;&#x435;&#x445; &#x441;&#x432;&#x43E;&#x431;&#x43E;&#x434;&#x43D;&#x44B;&#x445; &#x432;&#x445;&#x43E;&#x436;&#x434;&#x435;&#x43D;&#x438;&#x439; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x43E;&#x439; \( x \) &#x432; &#x442;&#x435;&#x440;&#x43C; \( M \) &#x43D;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x44E;&#x442; &#x442;&#x435;&#x440;&#x43C;, &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x44B;&#x439; &#x43F;&#x43E; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x43C; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x430;&#x43C; (&#x43A;&#x430;&#x43A; &#x43E;&#x431;&#x44B;&#x447;&#x43D;&#x43E;, \( x \in V, \, M, N, P, Q \in \Lambda \)):<br>&#x200C;&#x200C;\[<br>&#x200C;&#x200C;\begin{align*}&#x200C;&#x200C;<br>x[x:=N] &amp;= N \\&#x200C;&#x200C;<br>y[x:=N] &amp;= y \\&#x200C;&#x200C;<br>(P \, Q)[x:=N] &amp;= (P[x:=N]) \, (Q[x:=N]) \\&#x200C;&#x200C;<br>(\lambda x. M)[x:=N] &amp;= \lambda x. M \\&#x200C;&#x200C;<br>(\lambda y. M)[x:=N] &amp;= \lambda y. (M[x:=N]), \text{ &#x435;&#x441;&#x43B;&#x438; } x \not\in FV(N)&#x200C;<br>\end{align*}&#x200C;&#x200C;<br>\]<br>&#x200C;&#x200C;&#x412; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x435;&#x43C; &#x43F;&#x443;&#x43D;&#x43A;&#x442;&#x435; &#x435;&#x441;&#x442;&#x44C; &#x434;&#x43E;&#x43F;&#x43E;&#x43B;&#x43D;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x435; &#x443;&#x441;&#x43B;&#x43E;&#x432;&#x438;&#x435;. &#x415;&#x441;&#x43B;&#x438; &#x435;&#x433;&#x43E; &#x43D;&#x435; &#x441;&#x43E;&#x431;&#x43B;&#x44E;&#x434;&#x430;&#x442;&#x44C;, &#x442;&#x43E; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x43F;&#x43E;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43D;&#x43E;&#x432;&#x43A;&#x438; &#x431;&#x443;&#x434;&#x443;&#x442; &#x43F;&#x440;&#x438;&#x432;&#x43E;&#x434;&#x438;&#x442;&#x44C; &#x43A; &#x43D;&#x435;&#x43F;&#x440;&#x438;&#x44F;&#x442;&#x43D;&#x44B;&#x43C; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x441;&#x442;&#x432;&#x438;&#x44F;&#x43C;, &#x430; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x438;&#x437;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x44E; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x442;&#x435;&#x440;&#x43C;&#x430;, &#x43D;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x435;&#x43C;&#x43E;&#x439; <strong>&#x437;&#x430;&#x445;&#x432;&#x430;&#x442;&#x43E;&#x43C; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x43E;&#x439;</strong>:&#x200C;&#x200C;<br>\[&#x200C;&#x200C;<br>(\lambda x.y)[y:=x] = \lambda x.x \, \color{red}\text{(&#x44D;&#x442;&#x43E; &#x43D;&#x435;&#x43F;&#x440;&#x430;&#x432;&#x434;&#x430;!)}&#x200C;&#x200C;<br>\]</p><p>&#x414;&#x43B;&#x44F; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44F; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x44B; &#x437;&#x430;&#x445;&#x432;&#x430;&#x442;&#x430; &#x441;&#x443;&#x449;&#x435;&#x441;&#x442;&#x432;&#x443;&#x435;&#x442; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x439;:</p><ol><li>&#x418;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x434;&#x43B;&#x44F; &#x441;&#x432;&#x44F;&#x437;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x438; &#x441;&#x432;&#x43E;&#x431;&#x43E;&#x434;&#x43D;&#x44B;&#x445; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x445; &#x441;&#x438;&#x43C;&#x432;&#x43E;&#x43B;&#x44B; &#x438;&#x437; &#x440;&#x430;&#x437;&#x43B;&#x438;&#x447;&#x43D;&#x43E;&#x433;&#x43E; &#x430;&#x43B;&#x444;&#x430;&#x432;&#x438;&#x442;&#x430; (&#x441;&#x43E;&#x433;&#x43B;&#x430;&#x448;&#x435;&#x43D;&#x438;&#x435; &#x411;&#x430;&#x440;&#x440;&#x435;&#x43D;&#x434;&#x440;&#x435;&#x433;&#x442;&#x430;). &#x418;&#x434;&#x435;&#x44F; &#x431;&#x43E;&#x433;&#x430;&#x442;&#x430;&#x44F;, &#x43D;&#x43E; &#x43C;&#x430;&#x43B;&#x43E; &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x443;&#x435;&#x43C;&#x430;&#x44F; &#x43D;&#x430; &#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x43A;&#x435;.<br>\[<br>(\lambda \color{red}x&apos; \color{black}. (\lambda \color{green}y&apos; \color{black}. \color{green}y&apos; \color{black} \, \color{red}x&apos; \color{black}) \, \color{red}x&apos; \color{black}) \, \color{blue}x&#x200C;&#x200C;<br>\]</li><li>&#x423;&#x431;&#x440;&#x430;&#x442;&#x44C; &#x432;&#x441;&#x435; &#x438;&#x43C;&#x435;&#x43D;&#x430; &#x441;&#x432;&#x44F;&#x437;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x445;, &#x437;&#x430;&#x43C;&#x435;&#x43D;&#x438;&#x432; &#x438;&#x445; &#x43D;&#x43E;&#x43C;&#x435;&#x440;&#x430;&#x43C;&#x438;, &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x44E;&#x449;&#x438;&#x43C;&#x438;, &#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43B;&#x44F;&#x43C;&#x431;&#x434; &#x43D;&#x430;&#x437;&#x430;&#x434; &#x43E;&#x43D;&#x438; &#x431;&#x44B;&#x43B;&#x438; &#x441;&#x432;&#x44F;&#x437;&#x430;&#x43D;&#x44B;. &#x422;&#x430;&#x43A;&#x43E;&#x439; &#x441;&#x43F;&#x43E;&#x441;&#x43E;&#x431; &#x43D;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x438;&#x43D;&#x434;&#x435;&#x43A;&#x441;&#x430;&#x43C;&#x438; (&#x43D;&#x43E;&#x442;&#x430;&#x446;&#x438;&#x435;&#x439;) &#x434;&#x435; &#x411;&#x440;&#x430;&#x443;&#x43D;&#x430; &#x438; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x432; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x438;&#x43D;&#x441;&#x442;&#x432;&#x435; &#x44F;&#x437;&#x44B;&#x43A;&#x43E;&#x432; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x431;&#x43B;&#x430;&#x433;&#x43E;&#x434;&#x430;&#x440;&#x44F; &#x441;&#x432;&#x43E;&#x435;&#x439; &#x432;&#x44B;&#x447;&#x438;&#x441;&#x43B;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x44D;&#x444;&#x444;&#x435;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x441;&#x442;&#x438;.<br>\[<br>(\lambda (\lambda \color{green}1\color{black} \, \color{red}2\color{black}) \, \color{red}1 \color{black}) \, \color{blue}x&#x200C;&#x200C;<br>\]</li><li>&#x41C;&#x44B; &#x436;&#x435; &#x43F;&#x43E;&#x439;&#x434;&#x435;&#x43C; &#x442;&#x440;&#x435;&#x442;&#x438;&#x43C; &#x43F;&#x443;&#x442;&#x435;&#x43C;: &#x43A;&#x430;&#x436;&#x434;&#x44B;&#x439; &#x440;&#x430;&#x437;, &#x432;&#x441;&#x442;&#x440;&#x435;&#x447;&#x430;&#x44F; &#x43A;&#x43E;&#x43D;&#x444;&#x43B;&#x438;&#x43A;&#x442; &#x43F;&#x440;&#x438; &#x43F;&#x43E;&#x434;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x43A;&#x435;, &#x43C;&#x44B; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x43E;&#x441;&#x443;&#x449;&#x435;&#x441;&#x442;&#x432;&#x43B;&#x44F;&#x442;&#x44C; &#x43F;&#x435;&#x440;&#x435;&#x438;&#x43C;&#x435;&#x43D;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x441;&#x432;&#x44F;&#x437;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x445; &#x432; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x435;&#x449;&#x435; &#x43D;&#x435; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x438;&#x43C;&#x435;&#x43D;&#x430;. &#x42D;&#x442;&#x43E; &#x43D;&#x435; &#x442;&#x430;&#x43A; &#x44D;&#x444;&#x444;&#x435;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E;, &#x437;&#x430;&#x442;&#x43E; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x43F;&#x43E;&#x445;&#x43E;&#x436;&#x435; &#x43D;&#x430; &#x442;&#x43E;, &#x447;&#x442;&#x43E; &#x434;&#x435;&#x43B;&#x430;&#x435;&#x442; &#x447;&#x435;&#x43B;&#x43E;&#x432;&#x435;&#x43A;, &#x43E;&#x43F;&#x435;&#x440;&#x438;&#x440;&#x443;&#x44F; &#x432;&#x440;&#x443;&#x447;&#x43D;&#x443;&#x44E; &#x441; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x438;&#x441;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x435;&#x43C;.</li></ol><p>&#x414;&#x43B;&#x44F; &#x43D;&#x430;&#x447;&#x430;&#x43B;&#x430; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x434;&#x438;&#x43C; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x438;&#x442; &#x43D;&#x430;&#x43C; &#x433;&#x435;&#x43D;&#x435;&#x440;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43D;&#x43E;&#x432;&#x43E;&#x435; &#x438;&#x43C;&#x44F;, &#x43D;&#x435; &#x43A;&#x43E;&#x43D;&#x444;&#x43B;&#x438;&#x43A;&#x442;&#x443;&#x44E;&#x449;&#x435;&#x435; &#x43D;&#x438; &#x441; &#x43A;&#x430;&#x43A;&#x438;&#x43C; &#x438;&#x437; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x43D;&#x44B;&#x445;. &#x414;&#x43B;&#x44F; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x432;&#x430;&#x442;&#x44C; &#x43C;&#x43D;&#x43E;&#x436;&#x435;&#x441;&#x442;&#x432;&#x43E; &#x43F;&#x43E;&#x442;&#x435;&#x43D;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x43A;&#x43E;&#x43D;&#x444;&#x43B;&#x438;&#x43A;&#x442;&#x43E;&#x432; &#x432; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x435; &#x430;&#x440;&#x433;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430;.</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">import Data.Text (Text, pack)
import Data.Set  (Set, member)

-- &#x413;&#x435;&#x43D;&#x435;&#x440;&#x438;&#x440;&#x443;&#x435;&#x43C; &#x431;&#x435;&#x441;&#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x44B;&#x439; &#x441;&#x43F;&#x438;&#x441;&#x43E;&#x43A; &#x43F;&#x440;&#x435;&#x434;&#x43B;&#x430;&#x433;&#x430;&#x435;&#x43C;&#x44B;&#x445; &#x438;&#x43C;&#x435;&#x43D; &#x438; &#x431;&#x435;&#x440;&#x435;&#x43C; &#x43F;&#x435;&#x440;&#x432;&#x43E;&#x435;,
-- &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x435; &#x43F;&#x43E;&#x43A;&#x430; &#x43D;&#x435; &#x432;&#x441;&#x442;&#x440;&#x435;&#x442;&#x438;&#x43B;&#x43E;&#x441;&#x44C; &#x432; &#x441;&#x43F;&#x438;&#x441;&#x43A;&#x435;.
fresh :: Set Text -&gt; Text
fresh conflicts = head . dropWhile (`member` conflicts) $ names
  where
    -- &#x41F;&#x440;&#x43E;&#x441;&#x442;&#x44B;&#x435; &#x438;&#x43C;&#x435;&#x43D;&#x430; &#x2014; &#x44D;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; &#x43C;&#x430;&#x43B;&#x44B;&#x435; &#x431;&#x443;&#x43A;&#x432;&#x44B; &#x43B;&#x430;&#x442;&#x438;&#x43D;&#x441;&#x43A;&#x43E;&#x433;&#x43E; &#x430;&#x43B;&#x444;&#x430;&#x432;&#x438;&#x442;&#x430;
    primitiveNames = map (:[]) letters
    -- &#x421;&#x43E;&#x441;&#x442;&#x430;&#x432;&#x43D;&#x44B;&#x435; &#x438;&#x43C;&#x435;&#x43D;&#x430; &#x441;&#x43E;&#x441;&#x442;&#x43E;&#x44F;&#x442; &#x438;&#x437; &#x431;&#x443;&#x43A;&#x432;&#x44B; &#x438; &#x446;&#x438;&#x444;&#x440;&#x44B;
    complexNames = [(l:n) | n &lt;- numbers, l &lt;- letters]
    -- &#x41F;&#x43E;&#x43B;&#x43D;&#x44B;&#x439; &#x441;&#x43F;&#x438;&#x441;&#x43E;&#x43A; &#x438;&#x43C;&#x435;&#x43D;
    names = map pack $ primitiveNames ++ complexNames
    -- &#x418;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x43C;&#x44B;&#x435; &#x431;&#x443;&#x43A;&#x432;&#x44B; &#x438; &#x447;&#x438;&#x441;&#x43B;&#x430;
    letters = [&apos;a&apos; .. &apos;z&apos;]
    numbers = map show [1..]
</code></pre>
<!--kg-card-end: markdown--><p>&#x418;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x44F; &#x44D;&#x442;&#x443; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E;, &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x435;&#x449;&#x435; &#x43E;&#x434;&#x43D;&#x443;, &#x437;&#x430;&#x43C;&#x435;&#x43D;&#x44F;&#x44E;&#x449;&#x443;&#x44E; &#x432;&#x441;&#x435; &#x438;&#x43C;&#x435;&#x43D;&#x430; &#x441;&#x432;&#x44F;&#x437;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x445; &#x442;&#x430;&#x43A;, &#x447;&#x442;&#x43E;&#x431; &#x43E;&#x43D;&#x438; &#x43D;&#x435; &#x432;&#x445;&#x43E;&#x434;&#x438;&#x43B;&#x438; &#x432; &#x441;&#x43F;&#x438;&#x441;&#x43E;&#x43A; &#x43A;&#x43E;&#x43D;&#x444;&#x43B;&#x438;&#x43A;&#x442;&#x43D;&#x44B;&#x445; &#x438;&#x43C;&#x435;&#x43D;. &#x422;&#x430;&#x43A;&#x43E;&#x435; &#x43F;&#x440;&#x435;&#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x438;&#x43C;&#x435;&#x43D; &#x441;&#x432;&#x44F;&#x437;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x445; &#x43D;&#x438;&#x43A;&#x430;&#x43A; &#x43D;&#x435; &#x43C;&#x435;&#x43D;&#x44F;&#x435;&#x442; &#x441;&#x430;&#x43C; &#x442;&#x435;&#x440;&#x43C; &#x438; &#x43D;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F; <strong>\(\alpha\)-&#x43F;&#x440;&#x435;&#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435;&#x43C;</strong>:</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">alpha :: Set Text -&gt; Term -&gt; Term
alpha conflicts var@(Var _)    = var
alpha conflicts (App algo arg) = App (alpha conflicts algo) (alpha conflicts arg)
alpha conflicts (Lam var body) = if hasConflict then renamed_lam else alpha_lam
  where  
    hasConflict = var `member` conflicts
    alpha_lam   = Lam var (alpha conflicts body)
    renamed_lam = Lam new_var new_body
    new_var     = fresh $ conflicts `union` free body
    new_body    = substitute body var (Var new_var)
</code></pre>
<!--kg-card-end: markdown--><p>&#x414;&#x43B;&#x44F; &#x43D;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x43D;&#x438;&#x44F; &#x44D;&#x442;&#x43E;&#x439; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; &#x43D;&#x430;&#x43C; &#x432;&#x43D;&#x43E;&#x432;&#x44C; &#x43F;&#x440;&#x438;&#x448;&#x43B;&#x43E;&#x441;&#x44C; &#x43F;&#x440;&#x438;&#x431;&#x435;&#x433;&#x43D;&#x443;&#x442;&#x44C; &#x43A; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; substitute, &#x43F;&#x43E;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x443; &#x43F;&#x440;&#x438; &#x441;&#x43C;&#x435;&#x43D;&#x435; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x43E;&#x439; &#x43F;&#x43E;&#x434; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x43E;&#x439; &#x43D;&#x430;&#x43C; &#x43F;&#x43E;&#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x437;&#x430;&#x43C;&#x435;&#x43D;&#x438;&#x442;&#x44C; &#x432;&#x441;&#x435; &#x435;&#x451; &#x443;&#x43F;&#x43E;&#x43C;&#x438;&#x43D;&#x430;&#x43D;&#x438;&#x435; &#x432; &#x442;&#x435;&#x43B;&#x435; &#x430;&#x431;&#x441;&#x442;&#x440;&#x430;&#x446;&#x438;&#x438;. &#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x443; &#x43D;&#x430;&#x441; &#x435;&#x441;&#x442;&#x44C; &#x432;&#x441;&#x435;, &#x447;&#x442;&#x43E;&#x431; &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x44D;&#x442;&#x443; &#x432;&#x43E;&#x43B;&#x448;&#x435;&#x431;&#x43D;&#x443;&#x44E; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E;:</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">substitute :: Term -&gt; Text -&gt; Term -&gt; Term
substitute var@(Var var&apos;)     name expr = if var&apos; == name then expr else var
substitute     (App algo arg) name expr = App (substitute algo name expr) (substitute arg name expr)
substitute lam@(Lam var body) name expr = if var == name then lam else new_lam
  where
    alpha_lam = alpha (free expr) lam
    new_body  = substitute body name expr
    new_lam   = if var `member` free expr then substitute alpha_lam name expr
                                          else Lam var new_body
</code></pre>
<!--kg-card-end: markdown--><h2 id="--3">&#x420;&#x435;&#x434;&#x443;&#x43A;&#x446;&#x438;&#x44F;</h2><p>&#x412; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x432;&#x44B;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x438; &#x43C;&#x44B; &#x434;&#x43E;&#x43F;&#x443;&#x441;&#x43A;&#x430;&#x435;&#x43C; &#x434;&#x432;&#x430; &#x432;&#x438;&#x434;&#x430; &#x440;&#x435;&#x434;&#x443;&#x43A;&#x446;&#x438;&#x438; &#x2014; &#x43E;&#x434;&#x43D;&#x43E;&#x441;&#x442;&#x43E;&#x440;&#x43E;&#x43D;&#x43D;&#x435;&#x433;&#x43E; &#x43F;&#x440;&#x435;&#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x438;&#x43B;&#x438; &quot;&#x443;&#x43F;&#x440;&#x43E;&#x449;&#x435;&#x43D;&#x438;&#x44F;&quot;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x435; &#x438; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x44F;&#x442;&#x44C; &#x432;&#x44B;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x435;. &#x41F;&#x435;&#x440;&#x432;&#x44B;&#x439; &#x442;&#x430;&#x43A;&#x43E;&#x439; &#x432;&#x438;&#x434; &#x440;&#x435;&#x434;&#x443;&#x43A;&#x446;&#x438;&#x438; &#x442;&#x440;&#x438;&#x432;&#x438;&#x430;&#x43B;&#x435;&#x43D; &#x438; &#x43D;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F; <strong>\(\eta\)-&#x43F;&#x440;&#x435;&#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435;&#x43C;</strong>:<br>\[<br>\lambda x. M \, x = M<br>\]<br>&#x41E;&#x43D;&#x43E; &#x432;&#x44B;&#x432;&#x43E;&#x434;&#x438;&#x442;&#x441;&#x44F; &#x438;&#x437; &#x442;&#x440;&#x438;&#x432;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x441;&#x43E;&#x43E;&#x431;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x439;, &#x43E; &#x447;&#x435;&#x43C; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x43E;&#x447;&#x438;&#x442;&#x430;&#x442;&#x44C; &#x443; &#x442;&#x43E;&#x433;&#x43E; &#x436;&#x435; &#x411;&#x430;&#x440;&#x440;&#x435;&#x43D;&#x434;&#x440;&#x435;&#x433;&#x442;&#x430;. &#x420;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x43E;&#x43D;&#x43E; &#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438; &#x441;&#x442;&#x43E;&#x43B;&#x44C; &#x436;&#x435; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;:</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">eta :: Term -&gt; Term
eta (Lam var body) = case body of
                       App algo (Var v)
                         | var == v &amp;&amp; v `notMember` free algo = algo
                       _                                       = Lam var (eta body)
eta (App algo arg) = App (eta algo) (eta arg)
eta var            = var
</code></pre>
<!--kg-card-end: markdown--><p>&#x413;&#x43B;&#x430;&#x432;&#x43D;&#x43E;&#x435; &#x436;&#x435; &#x43F;&#x440;&#x435;&#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x2014; &#x44D;&#x442;&#x43E; &#x435;&#x434;&#x438;&#x43D;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x43E;&#x435; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x43E; &#x432;&#x44B;&#x432;&#x43E;&#x434;&#x430; &#x432; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x438;&#x441;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x438; &#x2014; <strong>\(\beta\)-&#x43F;&#x440;&#x435;&#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435;</strong>:<br>\[<br>(\lambda x.M) \, N = M[x:=N]<br>\]<br>&#x422;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x43B;&#x44E;&#x431;&#x43E;&#x435; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x435; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x430;&#x431;&#x441;&#x442;&#x440;&#x430;&#x43A;&#x446;&#x438;&#x438; &#x43A; &#x43A;&#x430;&#x43A;&#x43E;&#x43C;&#x443;-&#x43B;&#x438;&#x431;&#x43E; &#x442;&#x435;&#x440;&#x43C;&#x443; &#x432;&#x44B;&#x43F;&#x43E;&#x43B;&#x43D;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x43F;&#x443;&#x442;&#x435;&#x43C; &#x437;&#x430;&#x43C;&#x435;&#x43D;&#x44B; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x43E;&#x439; &#x430;&#x431;&#x441;&#x442;&#x440;&#x430;&#x43A;&#x446;&#x438;&#x438; (&#x430;&#x440;&#x433;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430;) &#x43D;&#x430; &#x43A;&#x43E;&#x43D;&#x43A;&#x440;&#x435;&#x442;&#x43D;&#x43E;&#x435; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x435;. &#x41D;&#x430; &#x431;&#x430;&#x437;&#x435; &#x442;&#x430;&#x43A;&#x43E;&#x433;&#x43E; &#x43F;&#x440;&#x435;&#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43D;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x430; <strong>&#x43E;&#x434;&#x43D;&#x43E;&#x448;&#x430;&#x433;&#x43E;&#x432;&#x43E;&#x439;</strong> <strong>\(\beta\)-&#x440;&#x435;&#x434;&#x443;&#x43A;&#x446;&#x438;&#x438;</strong> \( M \rightarrow_{\beta} N\). &#x41E;&#x43D;&#x430; &#x43F;&#x440;&#x43E;&#x432;&#x43E;&#x434;&#x438;&#x442;&#x441;&#x44F; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x43C; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x43C;:</p><ol><li>\( (\lambda x.M) \, N = M[x:=N] \), &#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x44B;&#x43C; \(\beta\)-&#x43F;&#x440;&#x435;&#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435;&#x43C;;</li><li>\( M \rightarrow_{\beta} N \Rightarrow M \, Z \Rightarrow N \, Z \), &#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x440;&#x435;&#x434;&#x443;&#x43A;&#x446;&#x438;&#x44F; &#x432; &#x43F;&#x435;&#x440;&#x432;&#x43E;&#x43C; &#x442;&#x435;&#x440;&#x43C;&#x435; (&#x430;&#x43B;&#x433;&#x43E;&#x440;&#x438;&#x442;&#x43C;&#x435;) &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x44F;.</li><li>\( M \rightarrow_{\beta} N \Rightarrow Z \, M \Rightarrow Z \, N \), &#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x440;&#x435;&#x434;&#x443;&#x43A;&#x446;&#x438;&#x44F; &#x432;&#x43E; &#x432;&#x442;&#x43E;&#x440;&#x43E;&#x43C; &#x442;&#x435;&#x440;&#x43C;&#x435; (&#x430;&#x440;&#x433;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x435;) &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x44F;.</li><li>\( M \rightarrow_{\beta} N \Rightarrow \lambda x. M \Rightarrow \lambda x. N \), &#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x440;&#x435;&#x434;&#x443;&#x43A;&#x446;&#x438;&#x44F; &#x432; &#x442;&#x435;&#x43B;&#x435; &#x430;&#x431;&#x441;&#x442;&#x440;&#x430;&#x43A;&#x446;&#x438;&#x438;.</li></ol><p>&#x420;&#x435;&#x43B;&#x438;&#x437;&#x443;&#x435;&#x43C; &#x44D;&#x442;&#x43E; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x43C; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x43C;:</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">beta :: Term -&gt; Term
beta var@(Var _)        = var
beta     (Lam var body) = Lam var (beta body)
beta     (App algo arg) = case algo of
                            Lam var body -&gt; substitute body var arg
                            _            -&gt; if algo /= algo&apos; then App algo&apos; arg
                                                             else App algo arg&apos;
  where
    algo&apos; = beta algo
    arg&apos;  = beta arg
</code></pre>
<!--kg-card-end: markdown--><p>&#x41D;&#x430; &#x44D;&#x442;&#x43E;&#x43C; &#x432;&#x441;&#x435;! &#x423; &#x43D;&#x430;&#x441; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x43B;&#x441;&#x44F; &#x43F;&#x43E;&#x43B;&#x43D;&#x44B;&#x439; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x43A;&#x430;&#x43B;&#x44C;&#x43A;&#x443;&#x43B;&#x44F;&#x442;&#x43E;&#x440; &#x441; &#x43F;&#x430;&#x440;&#x441;&#x435;&#x440;&#x43E;&#x43C;, &#x43A;&#x440;&#x430;&#x441;&#x438;&#x432;&#x44B;&#x43C; &#x432;&#x44B;&#x432;&#x43E;&#x434;&#x43E;&#x43C; &#x438; &#x440;&#x430;&#x437;&#x43D;&#x44B;&#x43C;&#x438; &#x432;&#x438;&#x434;&#x430;&#x43C;&#x438; &#x440;&#x435;&#x434;&#x443;&#x43A;&#x446;&#x438;&#x438;. &#x41F;&#x440;&#x435;&#x432;&#x440;&#x430;&#x449;&#x430;&#x442;&#x44C; &#x43B;&#x44E;&#x431;&#x43E;&#x439; &#x442;&#x435;&#x440;&#x43C; &#x432; &#x43D;&#x43E;&#x440;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x443;&#x44E; &#x444;&#x43E;&#x440;&#x43C;&#x443;, &#x43F;&#x440;&#x438; &#x435;&#x451; &#x43D;&#x430;&#x43B;&#x438;&#x447;&#x438;&#x438;, &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x43E;&#x434;&#x43E;&#x431;&#x43D;&#x43E;&#x439; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;&#x439; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x435;&#x439;:</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">reduce :: Term -&gt; Term
reduce term | beta term == term = eta term
            | otherwise         = reduce (beta term)
</code></pre>
<!--kg-card-end: markdown--><p>&#x41D;&#x443;, &#x430; &#x43F;&#x43E;&#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x43A;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x432; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x438; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x438;&#x441;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x43C;&#x43E;&#x436;&#x43D;&#x43E;, &#x43D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, &#x43D;&#x430; &#x43A;&#x43E;&#x434;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x438; &#x43D;&#x430;&#x442;&#x443;&#x440;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x438; &#x446;&#x435;&#x43B;&#x44B;&#x445; &#x447;&#x438;&#x441;&#x435;&#x43B;, &#x43A;&#x430;&#x43A; &#x44D;&#x442;&#x43E; <a href="https://en.wikipedia.org/wiki/Church_encoding?ref=yakovlev.me">&#x43E;&#x43F;&#x438;&#x441;&#x430;&#x43D;&#x43E; &#x432; &#x412;&#x438;&#x43A;&#x438;&#x43F;&#x435;&#x434;&#x438;&#x438;</a>.</p><p>&#x42F; &#x436;&#x435; &#x43D;&#x430;&#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x43A; &#x43F;&#x440;&#x438;&#x432;&#x435;&#x434;&#x443; &#x43F;&#x43E;&#x43B;&#x43D;&#x44B;&#x439; &#x43B;&#x438;&#x441;&#x442;&#x438;&#x43D;&#x433; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x432;&#x448;&#x435;&#x433;&#x43E;&#x441;&#x44F;:</p><!--kg-card-begin: markdown--><pre><code class="language-haskell">module UntypedLambda where

import           Control.Applicative  ((&lt;$&gt;), (&lt;*&gt;), (&lt;|&gt;))
import           Control.Monad        (void)
import           Data.Text            (Text, pack)
import           Data.Attoparsec.Text
import           Data.Set             (Set, delete, empty,
                                       insert, singleton, union,
                                       member, notMember)

data Term = Var Text       -- &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x435;
          | App Term Term  -- &#x430;&#x43F;&#x43F;&#x43B;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x44F;
          | Lam Text Term  -- &#x430;&#x431;&#x441;&#x442;&#x440;&#x430;&#x43A;&#x446;&#x438;&#x44F;
    deriving (Show)

-- Pretty Print

data Position = AppAlgo | AppArg | LamBody | Other

pretty :: Term -&gt; Text
pretty = pretty&apos; Other
    where
    prettyLB :: Term -&gt; Text
    prettyLB (Lam var body) = var &lt;&gt; pretty&apos; LamBody body
    prettyLB _              = undefined
    
    pretty&apos; :: Position -&gt; Term -&gt; Text
    pretty&apos; LamBody lam@(Lam _ _)  = &quot; &quot; &lt;&gt; prettyLB lam
    pretty&apos; AppAlgo lam@(Lam _ _)  = &quot;(&quot; &lt;&gt; pretty&apos; Other lam &lt;&gt; &quot;)&quot;
    pretty&apos; _       lam@(Lam _ _)  = &quot;&#x3BB;&quot; &lt;&gt; prettyLB lam
    pretty&apos; LamBody term           = &quot;.&quot; &lt;&gt; pretty&apos; Other term
    pretty&apos; _       (Var name)     = name
    pretty&apos; AppArg  app@(App _ _)  = &quot;(&quot; &lt;&gt; pretty&apos; Other app &lt;&gt; &quot;)&quot;
    pretty&apos; _       (App algo arg) = pretty&apos; AppAlgo algo &lt;&gt; &quot; &quot; &lt;&gt; pretty&apos; AppArg arg 

-- Parsing

spaces :: Parser ()
spaces = void $ many&apos; space

-- &#x41F;&#x430;&#x440;&#x441;&#x438;&#x442; &#x432;&#x44B;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x435;, &#x441;&#x43E; &#x432;&#x441;&#x435;&#x43C;&#x438; &#x43F;&#x440;&#x43E;&#x431;&#x435;&#x43B;&#x430;&#x43C;&#x438; &#x43F;&#x43E;&#x441;&#x43B;&#x435; &#x43D;&#x435;&#x433;&#x43E;, &#x43F;&#x440;&#x43E;&#x431;&#x435;&#x43B;&#x44B; &#x43E;&#x43F;&#x443;&#x441;&#x43A;&#x430;&#x435;&#x442;.
spaced :: Parser a -&gt; Parser a
spaced x = x &lt;* spaces

-- &#x41F;&#x430;&#x440;&#x441;&#x438;&#x442; &#x43E;&#x434;&#x43D;&#x443; &#x442;&#x43E;&#x447;&#x43A;&#x443; &#x438; &#x43E;&#x43F;&#x443;&#x441;&#x43A;&#x430;&#x435;&#x442; &#x432;&#x44B;&#x432;&#x43E;&#x434; &#x43F;&#x430;&#x440;&#x441;&#x435;&#x440;&#x430;.
dot :: Parser ()
dot = void $ spaced (char &apos;.&apos;)

-- &#x41F;&#x430;&#x440;&#x441;&#x438;&#x442; &#x441;&#x438;&#x43C;&#x432;&#x43E;&#x43B; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x44B; &#x438;&#x43B;&#x438; \\ &#x438;&#x43B;&#x438; L &#x438; &#x43E;&#x43F;&#x443;&#x441;&#x43A;&#x430;&#x435;&#x442; &#x432;&#x44B;&#x432;&#x43E;&#x434; &#x43F;&#x430;&#x440;&#x441;&#x435;&#x440;&#x430;.
lambda :: Parser ()
lambda = void $ spaced (char &apos;\\&apos; &lt;|&gt; char &apos;&#x3BB;&apos; &lt;|&gt; char &apos;L&apos;)

-- &#x41F;&#x430;&#x440;&#x441;&#x438;&#x442; &#x432;&#x44B;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x43E;&#x43A;&#x440;&#x443;&#x436;&#x435;&#x43D;&#x43D;&#x43E;&#x435; &#x441;&#x43A;&#x43E;&#x431;&#x43A;&#x430;&#x43C;&#x438;; &#x43F;&#x435;&#x440;&#x435;&#x434; &#x43E;&#x442;&#x43A;&#x440;&#x44B;&#x432;&#x430;&#x44E;&#x449;&#x435;&#x439; &#x438;
-- &#x43F;&#x43E;&#x441;&#x43B;&#x435; &#x437;&#x430;&#x43A;&#x440;&#x44B;&#x432;&#x430;&#x430;&#x44E;&#x449;&#x435;&#x439; &#x441;&#x43A;&#x43E;&#x431;&#x43E;&#x43A; &#x43C;&#x43E;&#x433;&#x443;&#x442; &#x438;&#x434;&#x442;&#x438; &#x43F;&#x440;&#x43E;&#x431;&#x435;&#x43B;&#x44B;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x431;&#x443;&#x434;&#x443;&#x442; &#x441;&#x44A;&#x435;&#x434;&#x435;&#x43D;&#x44B;.
parens :: Parser a -&gt; Parser a
parens x = spaced (char &apos;(&apos;) *&gt; x &lt;* spaced (char &apos;)&apos;)

-- &#x41F;&#x430;&#x440;&#x441;&#x438;&#x442; &#x441;&#x442;&#x440;&#x43E;&#x43A;&#x443;, &#x43D;&#x430;&#x447;&#x438;&#x43D;&#x430;&#x44E;&#x449;&#x443;&#x44E;&#x441;&#x44F; &#x441; &#x441;&#x438;&#x43C;&#x432;&#x43E;&#x43B;&#x43E;&#x432; &#x43B;&#x430;&#x442;&#x438;&#x43D;&#x441;&#x43A;&#x43E;&#x433;&#x43E; &#x430;&#x43B;&#x444;&#x430;&#x432;&#x438;&#x442;&#x430; &#x438;
-- &#x441;&#x43E;&#x434;&#x435;&#x440;&#x436;&#x430;&#x449;&#x443;&#x44E; &#x43B;&#x430;&#x442;&#x438;&#x43D;&#x441;&#x43A;&#x438;&#x435; &#x441;&#x438;&#x43C;&#x432;&#x43E;&#x43B;&#x44B;, &#x446;&#x438;&#x444;&#x440;&#x44B; &#x438; &#x441;&#x438;&#x43C;&#x432;&#x43E;&#x43B; &apos;.
name :: Parser Text
name = (pack .) . (:) &lt;$&gt; oneOf [&apos;a&apos;..&apos;z&apos;] &lt;*&gt; many&apos; (letter &lt;|&gt; digit &lt;|&gt; char &apos;\&apos;&apos;)
  where
    oneOf = choice . (char &lt;$&gt;)

-- &#x41F;&#x440;&#x43E;&#x447;&#x438;&#x442;&#x44B;&#x432;&#x430;&#x435;&#x442; &#x43D;&#x435; &#x43C;&#x435;&#x43D;&#x435;&#x435; &#x43E;&#x434;&#x43D;&#x43E;&#x433;&#x43E; &#x43D;&#x430;&#x442;&#x443;&#x440;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x433;&#x43E; &#x442;&#x435;&#x440;&#x43C;&#x430;; &#x432; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435;
-- &#x435;&#x441;&#x43B;&#x438; &#x438;&#x445; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435; &#x43E;&#x434;&#x43D;&#x43E;&#x439;, &#x441;&#x43E;&#x435;&#x434;&#x438;&#x43D;&#x44F;&#x435;&#x442; &#x438;&#x445; &#x432; &#x43E;&#x434;&#x438;&#x43D; &#x441; &#x43F;&#x43E;&#x43C;&#x43E;&#x449;&#x44C;&#x44E; &#x430;&#x43F;&#x43F;&#x43B;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438;
-- &#x43F;&#x43E; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x430;&#x43C; &#x43B;&#x435;&#x432;&#x43E;&#x439; &#x430;&#x441;&#x441;&#x43E;&#x446;&#x438;&#x430;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x441;&#x442;&#x438;.
term :: Parser Term
term = foldl1 App &lt;$&gt; many1 (spaced naturalTerm)

-- &#x41F;&#x440;&#x43E;&#x447;&#x438;&#x442;&#x44B;&#x432;&#x430;&#x435;&#x442; &#x442;&#x435;&#x440;&#x43C;, &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x441;&#x43E;&#x434;&#x435;&#x440;&#x436;&#x430;&#x449;&#x438;&#x439; &#x430;&#x43F;&#x43F;&#x43B;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x44E;, &#x432; &#x441;&#x43A;&#x43E;&#x431;&#x43A;&#x430;&#x445;,
-- &#x43B;&#x438;&#x431;&#x43E; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x443;&#x44E;, &#x43B;&#x438;&#x431;&#x43E; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x430;&#x431;&#x441;&#x442;&#x440;&#x430;&#x43A;&#x446;&#x438;&#x44E;.
naturalTerm :: Parser Term
naturalTerm = parens term &lt;|&gt; variable &lt;|&gt; abstraction 

-- &#x41F;&#x430;&#x440;&#x441;&#x438;&#x442; &#x43E;&#x434;&#x43D;&#x443; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x443;&#x44E;.
variable :: Parser Term
variable = Var &lt;$&gt; name

-- &#x41F;&#x430;&#x440;&#x441;&#x438;&#x442; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x430;&#x431;&#x441;&#x442;&#x440;&#x430;&#x43A;&#x446;&#x438;&#x44E;, &#x43A;&#x430;&#x43A; &#x441;&#x438;&#x43C;&#x432;&#x43E;&#x43B; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x44B;, &#x43D;&#x435; &#x43C;&#x435;&#x43D;&#x435;&#x435; 1 &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x43E;&#x439;,
-- &#x442;&#x43E;&#x447;&#x43A;&#x443; &#x438; &#x442;&#x435;&#x440;&#x43C;, &#x44F;&#x432;&#x43B;&#x44F;&#x44E;&#x449;&#x438;&#x439;&#x441;&#x44F; &#x442;&#x435;&#x43B;&#x43E;&#x43C; &#x430;&#x431;&#x441;&#x442;&#x440;&#x430;&#x43A;&#x446;&#x438;&#x438;; &#x441;&#x432;&#x43E;&#x440;&#x430;&#x447;&#x438;&#x432;&#x430;&#x435;&#x442; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x435;
-- &#x432;&#x43E; &#x432;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x43D;&#x44B;&#x435; &#x43B;&#x44F;&#x43C;&#x431;&#x434;&#x430;-&#x430;&#x431;&#x441;&#x442;&#x440;&#x430;&#x43A;&#x446;&#x438;&#x438; &#x43F;&#x43E; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x443; &#x43F;&#x440;&#x430;&#x432;&#x43E;&#x439; &#x430;&#x441;&#x441;&#x43E;&#x446;&#x438;&#x430;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x441;&#x442;&#x438;.
abstraction :: Parser Term
abstraction = do lambda
                 vars &lt;- many1 (spaced name)
                 dot
                 expr &lt;- term
                 pure $ foldr Lam expr vars

parseTerm :: Text -&gt; Either String Term
parseTerm = parseOnly term

-- Logic

free :: Term -&gt; Set Text
free (Var var)      = singleton var
free (App algo arg) = free algo `union` free arg
free (Lam var body) = var `delete` free body

bound :: Term -&gt; Set Text
bound (Var var)      = empty
bound (App algo arg) = bound algo `union` bound arg
bound (Lam var body) = var `insert` free body

instance Eq Term where
    Var a == Var b       = a == b
    App a b == App a&apos; b&apos; = a == a&apos; &amp;&amp; b == b&apos;
    Lam v b == Lam v&apos; b&apos; = b == substitute b&apos; v&apos; (Var v)
    _ == _               = False

-- &#x413;&#x435;&#x43D;&#x435;&#x440;&#x438;&#x440;&#x443;&#x435;&#x43C; &#x431;&#x435;&#x441;&#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x44B;&#x439; &#x441;&#x43F;&#x438;&#x441;&#x43E;&#x43A; &#x43F;&#x440;&#x435;&#x434;&#x43B;&#x430;&#x433;&#x430;&#x435;&#x43C;&#x44B;&#x445; &#x438;&#x43C;&#x435;&#x43D; &#x438; &#x431;&#x435;&#x440;&#x435;&#x43C; &#x43F;&#x435;&#x440;&#x432;&#x43E;&#x435;,
-- &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x435; &#x43F;&#x43E;&#x43A;&#x430; &#x43D;&#x435; &#x432;&#x441;&#x442;&#x440;&#x435;&#x442;&#x438;&#x43B;&#x43E;&#x441;&#x44C; &#x432; &#x441;&#x43F;&#x438;&#x441;&#x43A;&#x435;.
fresh :: Set Text -&gt; Text
fresh conflicts = head . dropWhile (`member` conflicts) $ names
  where
    -- &#x41F;&#x440;&#x43E;&#x441;&#x442;&#x44B;&#x435; &#x438;&#x43C;&#x435;&#x43D;&#x430; &#x2014; &#x44D;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; &#x43C;&#x430;&#x43B;&#x44B;&#x435; &#x431;&#x443;&#x43A;&#x432;&#x44B; &#x43B;&#x430;&#x442;&#x438;&#x43D;&#x441;&#x43A;&#x43E;&#x433;&#x43E; &#x430;&#x43B;&#x444;&#x430;&#x432;&#x438;&#x442;&#x430;
    primitiveNames = map (:[]) letters
    -- &#x421;&#x43E;&#x441;&#x442;&#x430;&#x432;&#x43D;&#x44B;&#x435; &#x438;&#x43C;&#x435;&#x43D;&#x430; &#x441;&#x43E;&#x441;&#x442;&#x43E;&#x44F;&#x442; &#x438;&#x437; &#x431;&#x443;&#x43A;&#x432;&#x44B; &#x438; &#x446;&#x438;&#x444;&#x440;&#x44B;
    complexNames = [(l:n) | n &lt;- numbers, l &lt;- letters]
    -- &#x41F;&#x43E;&#x43B;&#x43D;&#x44B;&#x439; &#x441;&#x43F;&#x438;&#x441;&#x43E;&#x43A; &#x438;&#x43C;&#x435;&#x43D;
    names = map pack $ primitiveNames ++ complexNames
    -- &#x418;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x43C;&#x44B;&#x435; &#x431;&#x443;&#x43A;&#x432;&#x44B; &#x438; &#x447;&#x438;&#x441;&#x43B;&#x430;
    letters = [&apos;a&apos; .. &apos;z&apos;]
    numbers = map show [1..]

alpha :: Set Text -&gt; Term -&gt; Term
alpha conflicts var@(Var _)    = var
alpha conflicts (App algo arg) = App (alpha conflicts algo) (alpha conflicts arg)
alpha conflicts (Lam var body) = if hasConflict then renamed_lam else alpha_lam
  where  
    hasConflict = var `member` conflicts
    alpha_lam   = Lam var (alpha conflicts body)
    renamed_lam = Lam new_var new_body
    new_var     = fresh $ conflicts `union` free body
    new_body    = substitute body var (Var new_var)

substitute :: Term -&gt; Text -&gt; Term -&gt; Term
substitute var@(Var var&apos;)     name expr = if var&apos; == name then expr else var
substitute     (App algo arg) name expr = App (substitute algo name expr) (substitute arg name expr)
substitute lam@(Lam var body) name expr = if var == name then lam else new_lam
  where
    alpha_lam = alpha (free expr) lam
    new_body  = substitute body name expr
    new_lam   = if var `member` free expr then substitute alpha_lam name expr
                                            else Lam var new_body

-- Evaluation

eta :: Term -&gt; Term
eta (Lam var body) = case body of
                       App algo (Var v)
                         | var == v &amp;&amp; (v `notMember` free algo) -&gt; algo
                       _                                         -&gt; Lam var (eta body)
eta (App algo arg) = App (eta algo) (eta arg)
eta var            = var

beta :: Term -&gt; Term
beta var@(Var _)        = var
beta     (Lam var body) = Lam var (beta body)
beta     (App algo arg) = case algo of
                            Lam var body -&gt; substitute body var arg
                            _            -&gt; if algo /= algo&apos; then App algo&apos; arg
                                                             else App algo arg&apos;
  where
    algo&apos; = beta algo
    arg&apos;  = beta arg

reduce :: Term -&gt; Term
reduce term | beta term == term = eta term
            | otherwise         = reduce (beta term)
</code></pre>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Как мы нашли белок]]></title><description><![CDATA[С 30 апреля по 4 мая проходила моя любимая ежегодная конференция PEGS Boston. На протяжении 14 лет в дизайне логотипа и всех сопутствующих материалов этой конференции используется изображение одного и того же белка, и вот уже 13 лет подряд организаторы конференции задают вопрос: что это за белок?]]></description><link>https://yakovlev.me/kak-my-nashli-bielok/</link><guid isPermaLink="false">62a9a65d27b7ab000134c249</guid><category><![CDATA[biology]]></category><dc:creator><![CDATA[Pavel Yakovlev]]></dc:creator><pubDate>Tue, 01 May 2018 19:48:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p><img src="https://yakovlev.me/content/images/2018/05/PEGS-Boston-2.png" alt="&#x41B;&#x43E;&#x433;&#x43E;&#x442;&#x438;&#x43F; &#x43A;&#x43E;&#x43D;&#x444;&#x435;&#x440;&#x435;&#x43D;&#x446;&#x438;&#x438; PEGS Boston" loading="lazy"><br>
&#x421; 30 &#x430;&#x43F;&#x440;&#x435;&#x43B;&#x44F; &#x43F;&#x43E; 4 &#x43C;&#x430;&#x44F; &#x43F;&#x440;&#x43E;&#x445;&#x43E;&#x434;&#x438;&#x43B;&#x430; &#x43C;&#x43E;&#x44F; &#x43B;&#x44E;&#x431;&#x438;&#x43C;&#x430;&#x44F; &#x435;&#x436;&#x435;&#x433;&#x43E;&#x434;&#x43D;&#x430;&#x44F; &#x43A;&#x43E;&#x43D;&#x444;&#x435;&#x440;&#x435;&#x43D;&#x446;&#x438;&#x44F; <a href="http://www.pegsummit.com/?ref=yakovlev.me">PEGS Boston</a>. &#x41D;&#x430; &#x43F;&#x440;&#x43E;&#x442;&#x44F;&#x436;&#x435;&#x43D;&#x438;&#x438; 14 &#x43B;&#x435;&#x442; &#x432; &#x434;&#x438;&#x437;&#x430;&#x439;&#x43D;&#x435; &#x43B;&#x43E;&#x433;&#x43E;&#x442;&#x438;&#x43F;&#x430; &#x438; &#x432;&#x441;&#x435;&#x445; &#x441;&#x43E;&#x43F;&#x443;&#x442;&#x441;&#x442;&#x432;&#x443;&#x44E;&#x449;&#x438;&#x445; &#x43C;&#x430;&#x442;&#x435;&#x440;&#x438;&#x430;&#x43B;&#x43E;&#x432; &#x44D;&#x442;&#x43E;&#x439; &#x43A;&#x43E;&#x43D;&#x444;&#x435;&#x440;&#x435;&#x43D;&#x446;&#x438;&#x438; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x438;&#x437;&#x43E;&#x431;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x43E;&#x434;&#x43D;&#x43E;&#x433;&#x43E; &#x438; &#x442;&#x43E;&#x433;&#x43E; &#x436;&#x435; &#x431;&#x435;&#x43B;&#x43A;&#x430;, &#x438; &#x432;&#x43E;&#x442; &#x443;&#x436;&#x435; 13 &#x43B;&#x435;&#x442; &#x43F;&#x43E;&#x434;&#x440;&#x44F;&#x434; &#x43E;&#x440;&#x433;&#x430;&#x43D;&#x438;&#x437;&#x430;&#x442;&#x43E;&#x440;&#x44B; &#x43A;&#x43E;&#x43D;&#x444;&#x435;&#x440;&#x435;&#x43D;&#x446;&#x438;&#x438; &#x437;&#x430;&#x434;&#x430;&#x44E;&#x442; &#x432;&#x43E;&#x43F;&#x440;&#x43E;&#x441;: &#x447;&#x442;&#x43E; &#x44D;&#x442;&#x43E; &#x437;&#x430; &#x431;&#x435;&#x43B;&#x43E;&#x43A;? &#x412; &#x44D;&#x442;&#x43E;&#x43C; &#x433;&#x43E;&#x434;&#x443; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x430; &#x414;&#x412;&#x411; &#x432;&#x43F;&#x435;&#x440;&#x432;&#x44B;&#x435; &#x43E;&#x442;&#x432;&#x435;&#x442;&#x438;&#x43B;&#x430; &#x43D;&#x430; &#x44D;&#x442;&#x43E;&#x442; &#x432;&#x43E;&#x43F;&#x440;&#x43E;&#x441;. &#x418; &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x433;&#x43B;&#x430;&#x432;&#x43D;&#x44B;&#x439; &#x432;&#x43E;&#x43F;&#x440;&#x43E;&#x441;: &#x43A;&#x430;&#x43A;?</p>
<p>&#x412; &#x43F;&#x435;&#x440;&#x432;&#x443;&#x44E; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x434;&#x430;&#x432;&#x430;&#x439;&#x442;&#x435; &#x43E;&#x431;&#x440;&#x430;&#x442;&#x438;&#x43C; &#x432;&#x43D;&#x438;&#x43C;&#x430;&#x43D;&#x438;&#x435; &#x43D;&#x430; &#x438;&#x437;&#x43E;&#x431;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x435;. &#x42D;&#x442;&#x43E; <a href="https://en.wikipedia.org/wiki/Ribbon_diagram?ref=yakovlev.me">cartoon</a>-&#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x431;&#x435;&#x43B;&#x43A;&#x430;, &#x432; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x43C; &#x430;&#x43B;&#x44C;&#x444;&#x430;-&#x441;&#x43F;&#x438;&#x440;&#x430;&#x43B;&#x438; &#x437;&#x430;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x44B; &#x43D;&#x430; &#x446;&#x438;&#x43B;&#x438;&#x43D;&#x434;&#x440;&#x44B;. &#x412; PyMOL &#x43F;&#x43E;&#x434;&#x43E;&#x431;&#x43D;&#x43E;&#x433;&#x43E; &#x43F;&#x43E;&#x432;&#x435;&#x434;&#x435;&#x43D;&#x438;&#x44F; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x434;&#x43E;&#x431;&#x438;&#x442;&#x44C;&#x441;&#x44F; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x43C;&#x438; &#x43D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x439;&#x43A;&#x430;&#x43C;&#x438;:</p>
<pre><code class="language-pymol">show_as cartoon, all
set cartoon_fancy_helices, 0
set cartoon_cylindrical_helices, 1
</code></pre>
<p>&#x422;&#x430;&#x43A;&#x436;&#x435; &#x431;&#x435;&#x43B;&#x43E;&#x43A; &#x43F;&#x43E;&#x43A;&#x440;&#x430;&#x448;&#x435;&#x43D; &#x432; &#x440;&#x435;&#x436;&#x438;&#x43C;&#x435; &#x441;&#x43F;&#x435;&#x43A;&#x442;&#x440;&#x430;, &#x440;&#x430;&#x441;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x435;&#x43D;&#x43D;&#x43E;&#x433;&#x43E; &#x43F;&#x43E; &#x434;&#x43B;&#x438;&#x43D;&#x435; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x438;. &#x421;&#x430;&#x43C;&#x430;&#x44F; &#x43F;&#x435;&#x440;&#x432;&#x430;&#x44F; &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442;&#x430; &#x43F;&#x43E;&#x43A;&#x440;&#x430;&#x448;&#x435;&#x43D;&#x430; &#x432; &#x444;&#x438;&#x43E;&#x43B;&#x435;&#x442;&#x43E;&#x432;&#x44B;&#x439;, &#x430; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x44F;&#x44F; &#x432; &#x43A;&#x440;&#x430;&#x441;&#x43D;&#x44B;&#x439;. &#x414;&#x435;&#x43B;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x44D;&#x442;&#x43E; &#x435;&#x449;&#x435; &#x43E;&#x434;&#x43D;&#x43E;&#x439; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;&#x439; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x43E;&#x439;:</p>
<pre><code>spectrum count, rainbow
</code></pre>
<p>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x43F;&#x440;&#x435;&#x432;&#x440;&#x430;&#x442;&#x438;&#x442;&#x44C; &#x441;&#x442;&#x430;&#x43D;&#x434;&#x430;&#x440;&#x442;&#x43D;&#x43E;&#x435; &#x43F;&#x43E;&#x43B;&#x43D;&#x43E;&#x430;&#x442;&#x43E;&#x43C;&#x43D;&#x43E;&#x435; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435;<br>
<img src="https://yakovlev.me/content/images/2018/05/1g72_atoms.png" alt="&#x411;&#x435;&#x43B;&#x43E;&#x43A; &#x432; &#x43F;&#x43E;&#x43B;&#x43D;&#x43E;&#x430;&#x442;&#x43E;&#x43C;&#x43D;&#x43E;&#x43C; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x438;" loading="lazy"><br>
&#x432; &#x441;&#x438;&#x43C;&#x43F;&#x430;&#x442;&#x438;&#x447;&#x43D;&#x44B;&#x439; &#x432;&#x438;&#x434; &#x430;-&#x43B;&#x44F; PEGS<br>
<img src="https://yakovlev.me/content/images/2018/05/1g72_cartoon.png" alt="&#x411;&#x435;&#x43B;&#x43E;&#x43A; &#x432; cartoon-&#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x438;" loading="lazy"></p>
<p>&#x41D;&#x430;&#x448;&#x430; &#x43F;&#x435;&#x440;&#x432;&#x430;&#x44F; &#x438;&#x434;&#x435;&#x44F; &#x441;&#x43E;&#x441;&#x442;&#x43E;&#x44F;&#x43B;&#x430; &#x432; &#x442;&#x43E;&#x43C;, &#x447;&#x442;&#x43E; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43D;&#x430;&#x433;&#x435;&#x43D;&#x435;&#x440;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x438;&#x437;&#x43E;&#x431;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x439; &#x438;&#x437; <a href="https://www.rcsb.org/?ref=yakovlev.me">Protein DataBank</a> &#x438; &#x441;&#x440;&#x430;&#x432;&#x43D;&#x438;&#x442;&#x44C; &#x438;&#x445; &#x441; &#x43D;&#x430;&#x448;&#x438;&#x43C; &#x438;&#x437;&#x43E;&#x431;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x435;&#x43C;, &#x43D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, 2D-&#x425;&#x44D;&#x43C;&#x43C;&#x438;&#x43D;&#x433;&#x43E;&#x43C;. &#x412;&#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x441;&#x442;&#x432;&#x438;&#x438; &#x43C;&#x44B; &#x43E;&#x442;&#x43A;&#x430;&#x437;&#x430;&#x43B;&#x438;&#x441;&#x44C; &#x43E;&#x442; &#x44D;&#x442;&#x43E;&#x439; &#x438;&#x434;&#x435;&#x438; (&#x430; &#x437;&#x440;&#x44F;!), &#x43D;&#x43E; &#x441;&#x43A;&#x440;&#x438;&#x43F;&#x442; &#x433;&#x435;&#x43D;&#x435;&#x440;&#x430;&#x446;&#x438;&#x438; &#x443; &#x43D;&#x430;&#x441; &#x43F;&#x43E;&#x44F;&#x432;&#x438;&#x43B;&#x441;&#x44F;:</p>
<pre><code class="language-python">from pymol import cmd
import os

DIR = &apos;/path/to/locate/pdbs&apos;
IMG = &apos;/path/to/store/images&apos;

if not os.path.exists(IMG):
    os.mkdir(IMG)

for ent in os.listdir(DIR):
    filename = os.path.join(IMG, &quot;%s.png&quot; % ent)
    if os.path.exists(filename):
        continue
    cmd.load(os.path.join(DIR, ent))
    cmd.show_as(&apos;cartoon&apos;, &apos;all&apos;)
    cmd.set(&apos;cartoon_fancy_helices&apos;, 0)
    cmd.set(&apos;cartoon_cylindrical_helices&apos;, 1)
    cmd.spectrum(&apos;count&apos;, &apos;rainbow&apos;)
    cmd.orient()
    cmd.save(filename)
    cmd.reinitialize()
</code></pre>
<p>&#x417;&#x430;&#x43F;&#x443;&#x441;&#x43A; &#x447;&#x435;&#x440;&#x435;&#x437; &#x43A;&#x43E;&#x43D;&#x441;&#x43E;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x440;&#x435;&#x436;&#x438;&#x43C; PyMOL &#x434;&#x435;&#x43B;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x442;&#x43E;&#x436;&#x435; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;:</p>
<pre><code class="language-bash">pymol -qc make_images.py
</code></pre>
<p>&#x41E;&#x442;&#x43A;&#x430;&#x437;&#x430;&#x43B;&#x438;&#x441;&#x44C; &#x43C;&#x44B; &#x43E;&#x442; &#x44D;&#x442;&#x43E;&#x439; &#x438;&#x434;&#x435;&#x438; &#x43F;&#x43E; &#x43F;&#x440;&#x438;&#x447;&#x438;&#x43D;&#x435; &#x442;&#x43E;&#x433;&#x43E;, &#x447;&#x442;&#x43E; &#x430;&#x43A;&#x442;&#x443;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; PDB &#x438;&#x43C;&#x435;&#x435;&#x442; &#x443;&#x436; &#x441;&#x43B;&#x438;&#x448;&#x43A;&#x43E;&#x43C; &#x43C;&#x43D;&#x43E;&#x433;&#x43E; &#x437;&#x430;&#x43F;&#x438;&#x441;&#x435;&#x439;. &#x41D;&#x430; &#x43C;&#x43E;&#x43C;&#x435;&#x43D;&#x442; &#x43D;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x43D;&#x438;&#x44F; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43F;&#x43E;&#x441;&#x442;&#x430; &#x441;&#x442;&#x430;&#x442;&#x438;&#x441;&#x442;&#x438;&#x43A;&#x430; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x430;&#x44F;:</p>
<table cellspacing="0" width="100%" role="grid" style="width: 100%;">
    <thead>
        <tr role="row">
            <th tabindex="0" rowspan="1" colspan="1" style="width: 270px;">Experimental Method</th>
            <th tabindex="0" rowspan="1" colspan="1" style="width: 117px;">Proteins</th>
            <th tabindex="0" rowspan="1" colspan="1" style="width: 180px;">Nucleic Acids</th>
            <th tabindex="0" rowspan="1" colspan="1" style="width: 259px;">Protein/NA Complex</th>
            <th tabindex="0" rowspan="1" colspan="1" style="width: 86px;">Other</th>
            <th tabindex="0" rowspan="1" colspan="1" style="width: 76px;">Total</th>
        </tr>
    </thead>
    <tbody>
        <tr role="row">
            <td tabindex="0">X-Ray</td>
            <td>117481</td>
            <td>1919</td>
            <td>6011</td>
            <td>10</td>
            <td>125421</td>
        </tr>
        <tr role="row">
            <td tabindex="0">NMR</td>
            <td>10708</td>
            <td>1243</td>
            <td>249</td>
            <td>8</td>
            <td>12208</td>
        </tr>
        <tr role="row">
            <td tabindex="0">Electron Microscopy</td>
            <td>1546</td>
            <td>31</td>
            <td>542</td>
            <td>0</td>
            <td>2119</td>
        </tr>
        <tr role="row">
            <td tabindex="0">Other</td>
            <td>215</td>
            <td>4</td>
            <td>6</td>
            <td>13</td>
            <td>238</td>
        </tr>
        <tr role="row">
            <td tabindex="0">Multi Method</td>
            <td>116</td>
            <td>4</td>
            <td>2</td>
            <td>1</td>
            <td>123</td>
        </tr>
    </tbody>
    <tfoot>
        <tr>
            <td rowspan="1" colspan="1">Total</td>
            <td rowspan="1" colspan="1">130066</td>
            <td rowspan="1" colspan="1">3201</td>
            <td rowspan="1" colspan="1">6810</td>
            <td rowspan="1" colspan="1">32</td>
            <td rowspan="1" colspan="1">140109</td>
        </tr>
    </tfoot>
</table>
&#x41F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x44C;&#x43D;&#x430;&#x44F; &#x436;&#x435; &#x43E;&#x440;&#x438;&#x435;&#x43D;&#x442;&#x430;&#x446;&#x438;&#x44F; &#x431;&#x435;&#x43B;&#x43A;&#x430; &#x43D;&#x430;&#x43C; &#x43D;&#x435;&#x438;&#x437;&#x432;&#x435;&#x441;&#x442;&#x43D;&#x430; &#x438;, &#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;, &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x441;&#x438;&#x43B;&#x44C;&#x43D;&#x43E; &#x43E;&#x442;&#x43B;&#x438;&#x447;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x43E;&#x442; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x43D;&#x43E;&#x439; &#x432; &#x43B;&#x43E;&#x433;&#x43E;&#x442;&#x438;&#x43F;&#x435; &#x2014; &#x432;&#x435;&#x434;&#x44C; &#x43D;&#x430;&#x432;&#x435;&#x440;&#x43D;&#x44F;&#x43A;&#x430; &#x434;&#x438;&#x437;&#x430;&#x439;&#x43D;&#x435;&#x440;&#x44B; &#x43A;&#x43E;&#x43D;&#x444;&#x435;&#x440;&#x435;&#x43D;&#x446;&#x438;&#x438; &#x43F;&#x43E;&#x432;&#x435;&#x440;&#x43D;&#x443;&#x43B;&#x438; &#x435;&#x433;&#x43E;. &#x412; &#x441;&#x432;&#x44F;&#x437;&#x438; &#x441; &#x44D;&#x442;&#x438;&#x43C; &#x43C;&#x44B; &#x440;&#x435;&#x448;&#x438;&#x43B;&#x438; &#x43D;&#x430;&#x447;&#x430;&#x442;&#x44C; &#x444;&#x438;&#x43B;&#x44C;&#x442;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x438;&#x437;&#x43E;&#x431;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x43F;&#x43E; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x43C; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x44B;&#x43C; &#x43F;&#x440;&#x438;&#x437;&#x43D;&#x430;&#x43A;&#x430;&#x43C;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x43C;&#x44B; &#x441;&#x43C;&#x43E;&#x433;&#x43B;&#x438; &#x443;&#x432;&#x438;&#x434;&#x435;&#x442;&#x44C; &#x433;&#x43B;&#x44F;&#x434;&#x44F; &#x43D;&#x430; &#x43A;&#x430;&#x440;&#x442;&#x438;&#x43D;&#x43A;&#x443; &#x433;&#x43B;&#x430;&#x437;&#x430;&#x43C;&#x438;.
<p>&#x412; &#x44D;&#x442;&#x43E;&#x43C; &#x43D;&#x430;&#x43C; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x43F;&#x43E;&#x43C;&#x43E;&#x433;&#x43B;&#x43E;, &#x447;&#x442;&#x43E; &#x421;&#x430;&#x448;&#x430; &#x41D;&#x430;&#x434;&#x43E;&#x43B;&#x438;&#x43D;&#x441;&#x43A;&#x438;&#x439; &#x443;&#x437;&#x43D;&#x430;&#x43B; <a href="http://www.joerogoz.com/?ref=yakovlev.me#/pegs-brand/">&#x430;&#x432;&#x442;&#x43E;&#x440;&#x430; &#x438;&#x437;&#x43E;&#x431;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x44F;</a> &#x438; &#x43D;&#x430;&#x448;&#x435;&#x43B; &#x43D;&#x430; &#x435;&#x433;&#x43E; &#x441;&#x430;&#x439;&#x442;&#x435; &#x43A;&#x430;&#x440;&#x442;&#x438;&#x43D;&#x43A;&#x443; &#x432;&#x44B;&#x441;&#x43E;&#x43A;&#x43E;&#x433;&#x43E; &#x440;&#x430;&#x437;&#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44F;. &#x418;&#x437; &#x43D;&#x435;&#x435; &#x43C;&#x44B; &#x43F;&#x440;&#x438;&#x448;&#x43B;&#x438; &#x43A; &#x432;&#x44B;&#x432;&#x43E;&#x434;&#x443;, &#x447;&#x442;&#x43E; &#x438;&#x441;&#x43A;&#x430;&#x442;&#x44C; &#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x431;&#x435;&#x43B;&#x43E;&#x43A; &#x441; &#x43E;&#x434;&#x43D;&#x43E;&#x439; &#x446;&#x435;&#x43F;&#x44C;&#x44E;, &#x432; &#x441;&#x43E;&#x441;&#x442;&#x430;&#x432; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x433;&#x43E; &#x432;&#x445;&#x43E;&#x434;&#x438;&#x442; &#x43D;&#x435; &#x43C;&#x435;&#x43D;&#x435;&#x435; 30 &#x430;&#x43B;&#x44C;&#x444;&#x430;-&#x441;&#x43F;&#x438;&#x440;&#x430;&#x43B;&#x435;&#x439;, &#x43D;&#x435; &#x43C;&#x435;&#x43D;&#x435;&#x435; 17 &#x438;&#x437; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x445; &#x438;&#x43C;&#x435;&#x44E; &#x434;&#x43B;&#x438;&#x43D;&#x443; 5 &#x438; &#x43C;&#x435;&#x43D;&#x435;&#x435; &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442;. &#x422;&#x430;&#x43A;&#x436;&#x435; &#x43C;&#x44B; &#x43E;&#x431;&#x440;&#x430;&#x442;&#x438;&#x43B;&#x438; &#x432;&#x43D;&#x438;&#x43C;&#x430;&#x43D;&#x438;&#x435;, &#x447;&#x442;&#x43E; &#x432; &#x43D;&#x430;&#x447;&#x430;&#x43B;&#x435; &#x446;&#x435;&#x43F;&#x438; &#x438;&#x434;&#x435;&#x442; &#x430;&#x43B;&#x44C;&#x444;&#x430;-&#x441;&#x43F;&#x438;&#x440;&#x430;&#x43B;&#x44C;, &#x442;&#x430;&#x43A; &#x447;&#x442;&#x43E; &#x43C;&#x44B; &#x440;&#x435;&#x448;&#x438;&#x43B;&#x438; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x438;&#x442;&#x44C; &#x44D;&#x442;&#x43E; &#x437;&#x43D;&#x430;&#x43D;&#x438;&#x435; &#x432; &#x43D;&#x430;&#x448;&#x438; &#x444;&#x438;&#x43B;&#x44C;&#x442;&#x440;&#x44B;. &#x415;&#x434;&#x438;&#x43D;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x43E;&#x435;, &#x43C;&#x44B; &#x43D;&#x435; &#x431;&#x44B;&#x43B;&#x438; &#x443;&#x432;&#x435;&#x440;&#x435;&#x43D;&#x44B;, &#x447;&#x442;&#x43E; &#x440;&#x430;&#x441;&#x43A;&#x440;&#x430;&#x441;&#x43A;&#x430; &#x446;&#x435;&#x43F;&#x438; &#x43A;&#x430;&#x43D;&#x43E;&#x43D;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x430;&#x44F; &#x43E;&#x442; &#x441;&#x438;&#x43D;&#x435;&#x433;&#x43E; &#x43A; &#x43A;&#x440;&#x430;&#x441;&#x43D;&#x43E;&#x43C;&#x443;, &#x43F;&#x43E;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x443; &#x43F;&#x43E;&#x43C;&#x438;&#x43C;&#x43E; &#x43A;&#x43B;&#x430;&#x441;&#x441;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x43E;&#x433;&#x43E; &#x440;&#x435;&#x436;&#x438;&#x43C;&#x430; <code>rainbow</code> &#x441;&#x443;&#x449;&#x435;&#x441;&#x442;&#x432;&#x443;&#x435;&#x442; &#x442;&#x430;&#x43A;&#x436;&#x435; <code>rainbow_rev</code>, &#x432; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x43C; &#x432;&#x441;&#x435; &#x440;&#x43E;&#x432;&#x43D;&#x43E; &#x43D;&#x430;&#x43E;&#x431;&#x43E;&#x440;&#x43E;&#x442;. &#x421; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x439; &#x441;&#x442;&#x43E;&#x440;&#x43E;&#x43D;&#x44B; &#x431;&#x435;&#x43B;&#x43A;&#x430; &#x442;&#x430;&#x43A;&#x436;&#x435; &#x43F;&#x440;&#x438;&#x441;&#x443;&#x442;&#x441;&#x442;&#x432;&#x43E;&#x432;&#x430;&#x43B;&#x430; &#x441;&#x43F;&#x438;&#x440;&#x430;&#x43B;&#x44C;, &#x43D;&#x43E; &#x43D;&#x435; &#x441; &#x441;&#x430;&#x43C;&#x43E;&#x433;&#x43E; &#x43D;&#x430;&#x447;&#x430;&#x43B;&#x430;. &#x412; &#x441;&#x432;&#x44F;&#x437;&#x438; &#x441; &#x44D;&#x442;&#x438;&#x43C; &#x43C;&#x44B; &#x440;&#x435;&#x448;&#x438;&#x43B;&#x438; &#x43F;&#x435;&#x440;&#x435;&#x441;&#x442;&#x440;&#x430;&#x445;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x438; &#x441;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C;, &#x447;&#x442;&#x43E; 3 &#x43F;&#x43E;&#x437;&#x438;&#x446;&#x438;&#x44F; &#x434;&#x43E;&#x43B;&#x436;&#x43D;&#x430; &#x43F;&#x43E;&#x43A;&#x440;&#x44B;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x441;&#x43F;&#x438;&#x440;&#x430;&#x43B;&#x44C;&#x44E;.<br>
&#x420;&#x430;&#x437;&#x443;&#x43C;&#x435;&#x435;&#x442;&#x441;&#x44F;, &#x433;&#x43B;&#x430;&#x432;&#x43D;&#x44B;&#x43C; &#x43A;&#x440;&#x438;&#x442;&#x435;&#x440;&#x438;&#x435;&#x43C; &#x43E;&#x442;&#x441;&#x435;&#x432;&#x430; &#x431;&#x44B;&#x43B;&#x430; &#x434;&#x430;&#x442;&#x430;: &#x43F;&#x435;&#x440;&#x432;&#x44B;&#x439; PEGS &#x43F;&#x440;&#x43E;&#x432;&#x43E;&#x434;&#x438;&#x43B;&#x441;&#x44F; &#x432; 2005 &#x433;&#x43E;&#x434;&#x443;, &#x430; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442; &#x431;&#x435;&#x43B;&#x43E;&#x43A; &#x434;&#x43E;&#x43B;&#x436;&#x435;&#x43D; &#x431;&#x44B;&#x43B; &#x431;&#x44B;&#x442;&#x44C; &#x43A;&#x440;&#x438;&#x441;&#x442;&#x430;&#x43B;&#x43B;&#x438;&#x437;&#x43E;&#x432;&#x430;&#x43D; &#x440;&#x430;&#x43D;&#x435;&#x435;. &#x415;&#x441;&#x43B;&#x438; &#x43F;&#x43E;&#x441;&#x43C;&#x43E;&#x442;&#x440;&#x435;&#x442;&#x44C; &#x43D;&#x430; <a href="https://www.rcsb.org/stats/growth/overall?ref=yakovlev.me">&#x433;&#x440;&#x430;&#x444;&#x438;&#x43A; &#x440;&#x43E;&#x441;&#x442;&#x430; &#x440;&#x430;&#x437;&#x43C;&#x435;&#x440;&#x430; Protein DataBank</a>, &#x432;&#x438;&#x434;&#x43D;&#x43E;, &#x447;&#x442;&#x43E; &#x44D;&#x442;&#x43E; &#x434;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x43C;&#x43E;&#x449;&#x43D;&#x435;&#x439;&#x448;&#x438;&#x439; &#x444;&#x438;&#x43B;&#x44C;&#x442;&#x440; &#x438;&#x437; &#x432;&#x441;&#x435;&#x445;.<br>
<img src="https://yakovlev.me/content/images/2018/05/rcsb_years.png" alt="rcsb_years" loading="lazy"></p>
<p>&#x418;&#x442;&#x430;&#x43A;, &#x43F;&#x43E;&#x435;&#x445;&#x430;&#x43B;&#x438;. &#x41F;&#x440;&#x435;&#x434;&#x432;&#x430;&#x440;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x441;&#x43A;&#x430;&#x447;&#x430;&#x442;&#x44C; &#x432;&#x435;&#x441;&#x44C; Protein DataBank (&#x443; &#x43D;&#x430;&#x441; &#x43E;&#x43D; &#x431;&#x44B;&#x43B; &#x443;&#x436;&#x435; &#x441;&#x43A;&#x430;&#x447;&#x430;&#x43D; &#x440;&#x430;&#x43D;&#x435;&#x435;). &#x41A;&#x430;&#x43A; &#x44D;&#x442;&#x43E; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C;, &#x43F;&#x43E;&#x434;&#x440;&#x43E;&#x431;&#x43D;&#x43E; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x440;&#x43E;&#x447;&#x438;&#x442;&#x430;&#x442;&#x44C; <a href="https://www.rcsb.org/pages/download/ftp?ref=yakovlev.me">&#x437;&#x434;&#x435;&#x441;&#x44C;</a>, &#x442;&#x430;&#x43C; &#x436;&#x435; &#x434;&#x430;&#x43D; &#x443;&#x434;&#x43E;&#x431;&#x43D;&#x44B;&#x439; &#x441;&#x43A;&#x440;&#x438;&#x43F;&#x442; &#x434;&#x43B;&#x44F; &#x441;&#x43A;&#x430;&#x447;&#x438;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x432;&#x441;&#x435;&#x433;&#x43E; &#x434;&#x43E;&#x431;&#x440;&#x430; &#x447;&#x435;&#x440;&#x435;&#x437; <code>rsync</code>. &#x41C;&#x44B; &#x436;&#x435; &#x432;&#x43E;&#x437;&#x44C;&#x43C;&#x435;&#x43C; &#x438;&#x437; &#x43D;&#x435;&#x433;&#x43E; &#x43E;&#x434;&#x43D;&#x443; &#x441;&#x442;&#x440;&#x43E;&#x447;&#x43A;&#x443;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x441;&#x43A;&#x430;&#x447;&#x430;&#x435;&#x442; &#x43D;&#x430;&#x43C; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x43F;&#x43E; &#x43F;&#x430;&#x43F;&#x43E;&#x447;&#x43A;&#x430;&#x43C;:</p>
<pre><code class="language-bash">$&gt; rsync -rlpt -v -z --delete --port=33444 rsync.wwpdb.org::ftp/data/structures/divided/pdb/ /path/to/your/local/dir &gt; /tmp/pdb-download.log 2&gt; /dev/null
</code></pre>
<p>&#x422;&#x430;&#x43A;&#x438;&#x43C; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x43C; &#x43C;&#x44B; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x430;&#x435;&#x43C; &#x432;&#x441;&#x435; 130+ &#x442;&#x44B;&#x441;&#x44F;&#x447; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440; &#x438;&#x437; RCSB PDB. &#x41A;&#x430;&#x436;&#x435;&#x442;&#x441;&#x44F;, &#x447;&#x442;&#x43E; &#x44D;&#x442;&#x43E; &#x43E;&#x433;&#x440;&#x43E;&#x43C;&#x43D;&#x44B;&#x435; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x435;, &#x43D;&#x43E; &#x43C;&#x44B; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x442;&#x44C; &#x441; &#x43D;&#x438;&#x43C;&#x438; &#x43B;&#x438;&#x448;&#x44C; &#x43F;&#x440;&#x438;&#x43C;&#x438;&#x442;&#x438;&#x432;&#x43D;&#x44B;&#x43C;&#x438; &#x438;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x43C;&#x438; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x43D;&#x43E;&#x439; &#x441;&#x442;&#x440;&#x43E;&#x43A;&#x438;, &#x447;&#x442;&#x43E;&#x431; &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C; &#x43E;&#x431;&#x440;&#x430;&#x442;&#x43D;&#x43E;&#x435;. &#x412; &#x43F;&#x435;&#x440;&#x432;&#x443;&#x44E; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x43E;&#x442;&#x431;&#x435;&#x440;&#x435;&#x43C; &#x432;&#x441;&#x435; &#x431;&#x435;&#x43B;&#x43A;&#x438; &#x434;&#x43E; 2005 &#x433;&#x43E;&#x434;&#x430;.</p>
<pre><code class="language-bash">$&gt; for filename in $(ls pdbs/*/*); do awk &apos;$1 == &quot;HEADER&quot; {split($(NF-1),a,&quot;-&quot;); if (a[3] &lt; 5 || a[3] &gt; 18) {print FILENAME}}&apos; $filename; done &gt; pdbs_prior_2005.txt
</code></pre>
<p>&#x41D;&#x430; &#x441;&#x430;&#x43C;&#x43E;&#x43C; &#x434;&#x435;&#x43B;&#x435; &#x442;&#x43E;&#x442; &#x436;&#x435; &#x43A;&#x43E;&#x434; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x443;&#x441;&#x43A;&#x43E;&#x440;&#x438;&#x442;&#x44C;, &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x44F; <code>grep</code> &#x438;&#x43B;&#x438; <a href="https://github.com/ggreer/the_silver_searcher?ref=yakovlev.me">ag</a> &#x434;&#x43B;&#x44F; &#x43D;&#x430;&#x447;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x444;&#x438;&#x43B;&#x44C;&#x442;&#x440;&#x430;&#x446;&#x438;&#x438;:</p>
<pre><code class="language-bash">$&gt; ag &apos;^HEADER&apos; pdbs | awk &apos;{split($0,a,&quot;:&quot;); split($(NF-1),b,&quot;-&quot;); if (b[3] &lt; 5 || b[3] &gt; 18) {print a[1]}}&apos; &gt; pdbs_prior_2005.txt
</code></pre>
<p>&#x41D;&#x430; &#x43C;&#x430;&#x43B;&#x435;&#x43D;&#x44C;&#x43A;&#x43E;&#x43C; &#x43C;&#x43D;&#x43E;&#x436;&#x435;&#x441;&#x442;&#x432;&#x435; &#x432; 1000 &#x444;&#x430;&#x439;&#x43B;&#x43E;&#x432; &#x440;&#x430;&#x437;&#x43D;&#x438;&#x446;&#x430; &#x432;&#x43E;&#x442; &#x442;&#x430;&#x43A;&#x430;&#x44F;:</p>
<pre><code class="language-bash">$&gt; time (for filename in $(ls pdbs/*/*); do awk &apos;$1 == &quot;HEADER&quot; {split($(NF-1),a,&quot;-&quot;); if (a[3] &lt; 5 || a[3] &gt; 18) {print FILENAME}}&apos; $filename; done &gt; /dev/null)
3,45s user 1,84s system 98% cpu 56,206 total

$&gt; time (grep -e &apos;^HEADER&apos; pdbs/* | awk &apos;{split($0,a,&quot;:&quot;); split($(NF-1),b,&quot;-&quot;); if (b[3] &lt; 5 || b[3] &gt; 18) {print a[1]}}&apos; &gt; /dev/null)
7,34s user 0,19s system 100% cpu 7,530 total

$&gt; time (ag &apos;^HEADER&apos; pdbs | awk &apos;{split($0,a,&quot;:&quot;); split($(NF-1),b,&quot;-&quot;); if (b[3] &lt; 5 || b[3] &gt; 18) {print a[1]}}&apos; &gt; /dev/null)
0,70s user 0,30s system 278% cpu 0,358 total
</code></pre>
<p>&#x41E;&#x447;&#x435;&#x432;&#x438;&#x434;&#x43D;&#x43E;, &#x43D;&#x430; &#x432;&#x44B;&#x431;&#x43E;&#x440;&#x43A;&#x435; &#x432; 130+ &#x442;&#x44B;&#x441;&#x44F;&#x447; &#x441;&#x442;&#x43E;&#x438;&#x442; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; <code>ag</code> &#x1F609;. &#x422;&#x430;&#x43A; &#x438;&#x43B;&#x438; &#x438;&#x43D;&#x430;&#x447;&#x435;, &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x443; &#x43D;&#x430;&#x441; &#x435;&#x441;&#x442;&#x44C; &#x444;&#x430;&#x439;&#x43B; <code>pdbs_prior_2005.txt</code>, &#x441;&#x43E;&#x434;&#x435;&#x440;&#x436;&#x430;&#x449;&#x438;&#x439; &#x43F;&#x443;&#x442;&#x438; &#x434;&#x43E; &#x432;&#x441;&#x435;&#x445; &#x444;&#x430;&#x439;&#x43B;&#x43E;&#x432;, &#x447;&#x44C;&#x44F; &#x434;&#x430;&#x442;&#x430; &#x437;&#x430;&#x433;&#x440;&#x443;&#x437;&#x43A;&#x438; &#x432; Protein DataBank &#x440;&#x430;&#x43D;&#x44C;&#x448;&#x435;, &#x447;&#x435;&#x43C; 2005 &#x433;&#x43E;&#x434;. &#x41A;&#x430;&#x43A; &#x438; &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x43E; &#x43D;&#x430; &#x433;&#x440;&#x430;&#x444;&#x438;&#x43A;&#x435; &#x432;&#x44B;&#x448;&#x435;, &#x442;&#x430;&#x43A;&#x438;&#x445; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440; &#x2014;</p>
<p>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43D;&#x430;&#x447;&#x43D;&#x435;&#x43C; &#x43E;&#x442;&#x431;&#x438;&#x440;&#x430;&#x442;&#x44C; &#x43F;&#x43E; &#x43A;&#x43E;&#x43B;&#x438;&#x447;&#x435;&#x441;&#x442;&#x432;&#x443; &#x430;&#x43B;&#x44C;&#x444;&#x430;-&#x441;&#x43F;&#x438;&#x440;&#x430;&#x43B;&#x435;&#x439;. &#x412; &#x43F;&#x435;&#x440;&#x432;&#x443;&#x44E; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x432;&#x43E;&#x437;&#x44C;&#x43C;&#x435;&#x43C; &#x432;&#x441;&#x435; &#x431;&#x435;&#x43B;&#x43A;&#x438; &#x441; 30 &#x438; &#x431;&#x43E;&#x43B;&#x435;&#x435; &#x441;&#x43F;&#x438;&#x440;&#x430;&#x43B;&#x44F;&#x43C;&#x438;. &#x41D;&#x430; &#x44D;&#x442;&#x43E;&#x442; &#x440;&#x430;&#x437; &#x441;&#x440;&#x430;&#x437;&#x443; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x435;&#x43C; &#x44D;&#x442;&#x43E; &#x44D;&#x444;&#x444;&#x435;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E;:</p>
<pre><code class="language-bash">$&gt; cat pdbs_prior_2005.txt | xargs ag &quot;^HELIX   30&quot; | awk &apos;{split($0,a,&quot;:&quot;); print a[1]}&apos; &gt; pdbs_p2005_h30.txt
</code></pre>
<p>&#x421;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x430;&#x44F; &#x437;&#x430;&#x434;&#x430;&#x447;&#x430;: &#x43D;&#x430;&#x439;&#x442;&#x438; 17 &#x441;&#x43F;&#x438;&#x440;&#x430;&#x43B;&#x435;&#x439; &#x434;&#x43B;&#x438;&#x43D;&#x43E;&#x439; &#x43D;&#x435; &#x431;&#x43E;&#x43B;&#x435;&#x435; 5 &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442;. &#x418; &#x432;&#x43D;&#x43E;&#x432;&#x44C; <code>awk</code> &#x441;&#x43F;&#x430;&#x441;&#x435;&#x442; &#x43D;&#x430;&#x441;, &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x431;&#x43B;&#x430;&#x433;&#x43E;&#x434;&#x430;&#x440;&#x44F; &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x432;&#x44B;&#x43F;&#x43E;&#x43B;&#x43D;&#x435;&#x43D;&#x438;&#x44F; &#x430;&#x440;&#x438;&#x444;&#x43C;&#x435;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x445; &#x43E;&#x43F;&#x435;&#x440;&#x430;&#x446;&#x438;&#x439;:</p>
<pre><code class="language-bash">$&gt; for filename in $(cat pdbs_p2005_h30.txt);do ag &quot;^HELIX&quot; $filename | awk &apos;BEGIN{i=0}{ if ($9-$6 &lt; 6) {i++} }END{ if (i &gt; 16) { print &quot;&apos;$filename&apos;&quot; } }&apos;; done &gt; pdbs_ph_h17.txt
</code></pre>
<p>&#x427;&#x442;&#x43E; &#x436;&#x435; &#x443; &#x43D;&#x430;&#x441; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x43B;&#x43E;&#x441;&#x44C; &#x43A; &#x442;&#x435;&#x43A;&#x443;&#x449;&#x435;&#x43C;&#x443; &#x43C;&#x43E;&#x43C;&#x435;&#x43D;&#x442;&#x443;?</p>
<pre><code class="language-bash">$&gt; wc -l pdbs_ph_h17.txt
2537 pdbs_ph_h17.txt
</code></pre>
<p>&#x420;&#x430;&#x437;&#x43C;&#x435;&#x440; &#x444;&#x430;&#x439;&#x43B;&#x430; &#x443;&#x436;&#x435; &#x434;&#x43E;&#x441;&#x442;&#x430;&#x442;&#x43E;&#x447;&#x43D;&#x43E; &#x440;&#x430;&#x437;&#x443;&#x43C;&#x43D;&#x44B;&#x439;, &#x432;&#x441;&#x435;&#x433;&#x43E; <strong>2537</strong> &#x437;&#x430;&#x43F;&#x438;&#x441;&#x435;&#x439;, &#x43E;&#x434;&#x43D;&#x430;&#x43A;&#x43E; &#x44D;&#x442;&#x43E; &#x432;&#x441;&#x451; &#x435;&#x449;&#x435; &#x441;&#x43B;&#x438;&#x448;&#x43A;&#x43E;&#x43C; &#x43C;&#x43D;&#x43E;&#x433;&#x43E;, &#x447;&#x442;&#x43E;&#x431; &#x43E;&#x442;&#x441;&#x43C;&#x430;&#x442;&#x440;&#x438;&#x432;&#x430;&#x442;&#x44C; &#x433;&#x43B;&#x430;&#x437;&#x430;&#x43C;&#x438;. &#x414;&#x43E;&#x431;&#x430;&#x432;&#x438;&#x43C; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x43E; &#x43F;&#x440;&#x43E; &#x442;&#x440;&#x435;&#x442;&#x44C;&#x44E; &#x430;&#x43C;&#x438;&#x43D;&#x43E;&#x43A;&#x438;&#x441;&#x43B;&#x43E;&#x442;&#x443; &#x432; &#x430;&#x43B;&#x44C;&#x444;&#x430;-&#x441;&#x43F;&#x438;&#x440;&#x430;&#x43B;&#x438;:</p>
<pre><code class="language-bash">$&gt; cat pdbs_ph_h17.txt | xargs ag &quot;^HELIX    1&quot; | awk &apos;($6 &lt; 3) { split($1,a,&quot;:&quot;); print a[1] }&apos; &gt; pdbs_phh_aa3.txt
$&gt; wc -l pdbs_phh_aa3.txt
142 pdbs_phh_aa3.txt
</code></pre>
<p>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x443; &#x43D;&#x430;&#x441; &#x435;&#x441;&#x442;&#x44C; &#x432;&#x441;&#x435;&#x433;&#x43E; <strong>142</strong> &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B;!<br>
&#x41F;&#x440;&#x43E;&#x441;&#x43C;&#x43E;&#x442;&#x440;&#x435;&#x432; &#x438;&#x445; &#x432;&#x441;&#x435; &#x433;&#x43B;&#x430;&#x437;&#x430;&#x43C;&#x438;, &#x43C;&#x44B; &#x441;&#x43C;&#x43E;&#x433;&#x43B;&#x438; &#x438;&#x434;&#x435;&#x43D;&#x442;&#x438;&#x444;&#x438;&#x446;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43D;&#x443;&#x436;&#x43D;&#x443;&#x44E; &#x2014; <a href="http://www.rcsb.org/structure/1G72?ref=yakovlev.me">1G72</a> (&#x43E;&#x43D;&#x430; &#x431;&#x44B;&#x43B;&#x430; 117 &#x432; &#x441;&#x43F;&#x438;&#x441;&#x43A;&#x435;). &#x41A;&#x430;&#x43A; &#x43E;&#x43A;&#x430;&#x437;&#x430;&#x43B;&#x43E;&#x441;&#x44C;, &#x435;&#x451; &#x438;&#x437;&#x43E;&#x431;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x43D;&#x430; &#x441;&#x430;&#x439;&#x442;&#x435; RCSB &#x43D;&#x430;&#x445;&#x43E;&#x434;&#x438;&#x442;&#x441;&#x44F; &#x440;&#x43E;&#x432;&#x43D;&#x43E; &#x432; &#x442;&#x43E;&#x439; &#x436;&#x435; &#x43E;&#x440;&#x438;&#x435;&#x43D;&#x442;&#x430;&#x446;&#x438;&#x438;, &#x447;&#x442;&#x43E; &#x438; &#x43D;&#x430; &#x43B;&#x43E;&#x433;&#x43E;&#x442;&#x438;&#x43F;&#x435;, &#x430; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442; &#x438;&#x441;&#x445;&#x43E;&#x434;&#x43D;&#x430;&#x44F; &#x438;&#x434;&#x435;&#x44F; &#x441; &#x425;&#x44D;&#x43C;&#x43C;&#x438;&#x43D;&#x433;&#x43E;&#x43C; &#x43E;&#x442;&#x43B;&#x438;&#x447;&#x43D;&#x43E; &#x431;&#x44B; &#x441;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x43B;&#x430;. &#x41D;&#x43E; &#x44D;&#x442;&#x43E; &#x431;&#x44B;&#x43B;&#x430; &#x437;&#x430;&#x43C;&#x435;&#x447;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x430;&#x44F; &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x43F;&#x43E;&#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x43A;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x432; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x435; &#x441; &#x438;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x43C;&#x438; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x43D;&#x43E;&#x439; &#x441;&#x442;&#x440;&#x43E;&#x43A;&#x438; &#x43D;&#x430;&#x434; &quot;&#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x438;&#x43C;&#x438;&quot; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x43C;&#x438;.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Bayesian optimization for small molecule hit generation]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>&#x412;&#x44B;&#x441;&#x442;&#x443;&#x43F;&#x438;&#x43B; &#x43D;&#x430; &#x437;&#x438;&#x43C;&#x43D;&#x435;&#x439; &#x448;&#x43A;&#x43E;&#x43B;&#x435; Future Biotech &#x43F;&#x440;&#x43E; &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x44B; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x44B; &#x441; &#x43C;&#x430;&#x43B;&#x44B;&#x43C;&#x438; &#x43C;&#x43E;&#x43B;&#x435;&#x43A;</p>]]></description><link>https://yakovlev.me/bayesian-optimization-for-small-molecule-hit-generation/</link><guid isPermaLink="false">62a9a65d27b7ab000134c246</guid><category><![CDATA[talk]]></category><category><![CDATA[small molecules]]></category><category><![CDATA[biocad]]></category><dc:creator><![CDATA[Pavel Yakovlev]]></dc:creator><pubDate>Wed, 24 Jan 2018 11:47:54 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>&#x412;&#x44B;&#x441;&#x442;&#x443;&#x43F;&#x438;&#x43B; &#x43D;&#x430; &#x437;&#x438;&#x43C;&#x43D;&#x435;&#x439; &#x448;&#x43A;&#x43E;&#x43B;&#x435; Future Biotech &#x43F;&#x440;&#x43E; &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x44B; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x44B; &#x441; &#x43C;&#x430;&#x43B;&#x44B;&#x43C;&#x438; &#x43C;&#x43E;&#x43B;&#x435;&#x43A;&#x443;&#x43B;&#x430;&#x43C;&#x438;. &#x422;&#x430;&#x43A; &#x43A;&#x430;&#x43A; &#x432;&#x435;&#x43B;&#x430;&#x441;&#x44C; &#x43F;&#x440;&#x44F;&#x43C;&#x430;&#x44F; &#x442;&#x440;&#x430;&#x43D;&#x441;&#x43B;&#x44F;&#x446;&#x438;&#x44F;, &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x441;&#x440;&#x430;&#x437;&#x443; &#x432;&#x44B;&#x43B;&#x43E;&#x436;&#x438;&#x442;&#x44C; &#x432;&#x438;&#x434;&#x435;&#x43E;.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/rMnjQWWfif4?rel=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
<p>&#x421;&#x43B;&#x430;&#x439;&#x434;&#x44B; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x43E;&#x441;&#x43C;&#x43E;&#x442;&#x440;&#x435;&#x442;&#x44C; &#x438; &#x441;&#x43A;&#x430;&#x447;&#x430;&#x442;&#x44C; <a href="https://f1000research.com/slides/7-104?ref=yakovlev.me">&#x43D;&#x430; F1000</a>.</p>
<iframe id="f1r-viewer-0" allowtransparency="true" allowfullscreen="true" frameborder="0" src="//api.accusoft.com/v1/viewer/?key=aIAHEk1WtoJas0JtfMsvfRTwAP3ApQikUG4NnwM3RzGuKnHIty0UftIkfzzFE6XS&amp;viewertype=html5&amp;document=https://d1hiluowqo0t4b.cloudfront.net/posters/docs/f1000research-191938.pdf&amp;viewerHeight=550&amp;viewerWidth=100%&amp;upperToolbarColor=373e46&amp;lowerToolbarColor=eeeeee&amp;bottomToolbarColor=373e46&amp;backgroundColor=f7f6f5&amp;fontColor=ffffff&amp;buttonColor=black&amp;hidden=selectText,download,panTool,magnifyTool,rotateDocument,rotatePage,fullScreen,print,pageInfo,redact,esign" height="550" width="100%" class="viewer"></iframe>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Наивный Байесовский классификатор]]></title><description><![CDATA[Потребовалось тут для проверки одной идеи быстро сделать Байесовскую классификацию, а тащить ничего большого из hackage не хотелось. Если у кого-то будет схожая ситуация, ниже код.]]></description><link>https://yakovlev.me/naive-bayes-classifier/</link><guid isPermaLink="false">62a9a65d27b7ab000134c245</guid><category><![CDATA[haskell]]></category><category><![CDATA[machine learning]]></category><dc:creator><![CDATA[Pavel Yakovlev]]></dc:creator><pubDate>Tue, 23 Jan 2018 20:56:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>(&#x41F;&#x435;&#x440;&#x435;&#x43D;&#x43E;&#x441; &#x43F;&#x43E;&#x441;&#x442;&#x430; &#x441;&#x43E; &#x441;&#x442;&#x430;&#x440;&#x43E;&#x433;&#x43E; &#x441;&#x430;&#x439;&#x442;&#x430; &#x43E;&#x442; 22 &#x438;&#x44E;&#x43D;&#x44F; 2016 &#x433;&#x43E;&#x434;&#x430;)</p>
<p>&#x41F;&#x43E;&#x442;&#x440;&#x435;&#x431;&#x43E;&#x432;&#x430;&#x43B;&#x43E;&#x441;&#x44C; &#x442;&#x443;&#x442; &#x434;&#x43B;&#x44F; &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x43A;&#x438; &#x43E;&#x434;&#x43D;&#x43E;&#x439; &#x438;&#x434;&#x435;&#x438; &#x431;&#x44B;&#x441;&#x442;&#x440;&#x43E; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x411;&#x430;&#x439;&#x435;&#x441;&#x43E;&#x432;&#x441;&#x43A;&#x443;&#x44E; &#x43A;&#x43B;&#x430;&#x441;&#x441;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x44E;, &#x430; &#x442;&#x430;&#x449;&#x438;&#x442;&#x44C; &#x43D;&#x438;&#x447;&#x435;&#x433;&#x43E; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x43E;&#x433;&#x43E; &#x438;&#x437; hackage &#x43D;&#x435; &#x445;&#x43E;&#x442;&#x435;&#x43B;&#x43E;&#x441;&#x44C;. &#x415;&#x441;&#x43B;&#x438; &#x443; &#x43A;&#x43E;&#x433;&#x43E;-&#x442;&#x43E; &#x431;&#x443;&#x434;&#x435;&#x442; &#x441;&#x445;&#x43E;&#x436;&#x430;&#x44F; &#x441;&#x438;&#x442;&#x443;&#x430;&#x446;&#x438;&#x44F;, &#x43D;&#x438;&#x436;&#x435; &#x43A;&#x43E;&#x434;:</p>
<pre><code class="language-haskell">module Bayes where
 
import Data.Map.Strict (Map(..), (!), elems)
 
newtype Classifier c s = Classifier { getClass :: Map c [s] }
 
count :: Eq a =&gt; a -&gt; [a] -&gt; Int
count y = foldl (\acc x -&gt; if y == x then acc + 1 else acc) 0
 
classSize :: Ord c =&gt; Classifier c s -&gt; c -&gt; Int
classSize cl = length . (getClass cl !)
 
totalSize :: Classifier c s -&gt; Int
totalSize = length . concat . elems . getClass
 
sampleCount :: Eq s =&gt; Classifier c s -&gt; s -&gt; Int
sampleCount cl s = count s . concat . elems . getClass $ cl
 
sampleCountInClass :: (Ord c, Eq s) =&gt; Classifier c s -&gt; s -&gt; c -&gt; Int
sampleCountInClass cl s = count s . (getClass cl !)
 
-- P(C)
prior :: Ord c =&gt; Classifier c s -&gt; c -&gt; Double
prior cl c = if tot == 0 then 0 else tr / fromIntegral tot
  where tr = fromIntegral $ classSize cl c
        tot = totalSize cl
 
-- P(D|C)
likelihood :: (Ord c, Eq s) =&gt; Classifier c s -&gt; s -&gt; c -&gt; Double
likelihood cl s c = if tr == 0 then 0 else ss / fromIntegral tr
  where ss = fromIntegral $ sampleCountInClass cl s c
        tr = classSize cl c
 
-- P (D)
evidance :: Eq s =&gt; Classifier c s -&gt; s -&gt; Double
evidance cl s = if tot == 0 then 0 else sam / fromIntegral tot
  where sam = fromIntegral $ sampleCount cl s
        tot = totalSize cl
 
-- P(C|D) = P(D|C) * P(C) / P(D)
posterior :: (Ord c, Eq s) =&gt; Classifier c s -&gt; c -&gt; s -&gt; Double
posterior cl c s = l * p / e
  where p = prior cl c
        l = likelihood cl s c
        e = evidance cl s
 
-- ln $ P(C|D) / P(not-C|D)
logLike :: (Ord c, Eq s) =&gt; Classifier c s -&gt; c -&gt; s -&gt; Double
logLike cl c s = log $ p / (1 - p)
  where p = posterior cl c s
</code></pre>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Haskell Foldable Wats]]></title><description><![CDATA[Знаете ли вы, что произойдет, если поинтересоваться у Haskell минимальным значением кортежа из двух элементов?]]></description><link>https://yakovlev.me/haskell-foldable-wats/</link><guid isPermaLink="false">62a9a65d27b7ab000134c244</guid><category><![CDATA[haskell]]></category><category><![CDATA[wats]]></category><dc:creator><![CDATA[Pavel Yakovlev]]></dc:creator><pubDate>Tue, 23 Jan 2018 20:55:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>(&#x41F;&#x435;&#x440;&#x435;&#x43D;&#x43E;&#x441; &#x43F;&#x43E;&#x441;&#x442;&#x430; &#x441;&#x43E; &#x441;&#x442;&#x430;&#x440;&#x43E;&#x433;&#x43E; &#x441;&#x430;&#x439;&#x442;&#x430; &#x43E;&#x442; 21 &#x43C;&#x430;&#x44F; 2016 &#x433;&#x43E;&#x434;&#x430;)</p>
<p><em>&#x41F;&#x43E; &#x43C;&#x43E;&#x442;&#x438;&#x432;&#x430;&#x43C; <a href="https://mail.haskell.org/pipermail/libraries/2016-February/026678.html?ref=yakovlev.me">Haskell Foldable Wats</a> &#x432; Haskell Mailing Lists.</em></p>
<p>&#x417;&#x43D;&#x430;&#x435;&#x442;&#x435; &#x43B;&#x438; &#x432;&#x44B;, &#x447;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x438;&#x437;&#x43E;&#x439;&#x434;&#x435;&#x442;, &#x435;&#x441;&#x43B;&#x438; &#x43F;&#x43E;&#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x443; Haskell &#x43C;&#x438;&#x43D;&#x438;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x43C; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x435;&#x43C; &#x43A;&#x43E;&#x440;&#x442;&#x435;&#x436;&#x430; &#x438;&#x437; &#x434;&#x432;&#x443;&#x445; &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x43E;&#x432;?</p>
<pre><code class="language-haskell">Prelude&gt; minimum (1,2)
2
</code></pre>
<p>&#x41D;&#x435; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x438;&#x43D;&#x442;&#x443;&#x438;&#x442;&#x438;&#x432;&#x43D;&#x43E;, &#x43F;&#x440;&#x430;&#x432;&#x434;&#x430;? &#x414;&#x430;&#x432;&#x430;&#x439;&#x442;&#x435; &#x440;&#x430;&#x437;&#x431;&#x438;&#x440;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x43F;&#x43E;&#x447;&#x435;&#x43C;&#x443; &#x442;&#x430;&#x43A; &#x43F;&#x440;&#x43E;&#x438;&#x441;&#x445;&#x43E;&#x434;&#x438;&#x442;.</p>
<p>&#x414;&#x43B;&#x44F; &#x43D;&#x430;&#x447;&#x430;&#x43B;&#x430; &#x43F;&#x43E;&#x439;&#x43C;&#x435;&#x43C;, &#x43A;&#x430;&#x43A; &#x44D;&#x442;&#x43E;&#x442; &#x441;&#x430;&#x43C;&#x44B;&#x439; <code>minimum</code> &#x443;&#x441;&#x442;&#x440;&#x43E;&#x435;&#x43D;. &#x412;&#x43E;&#x43F;&#x440;&#x43E;&#x441; &#x43A; Hoogle &#x434;&#x430;&#x435;&#x442; <a href="https://www.haskell.org/hoogle/?hoogle=minimum&amp;ref=yakovlev.me">&#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x439; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;</a>:</p>
<pre><code class="language-haskell">minimum :: Ord a =&gt; [a] -&gt; a
</code></pre>
<p>&#x422;&#x430;&#x43A;&#x430;&#x44F; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44F; &#x442;&#x43E;&#x447;&#x43D;&#x43E; &#x43D;&#x435; &#x43F;&#x43E;&#x434;&#x43E;&#x439;&#x434;&#x435;&#x442; &#x434;&#x43B;&#x44F; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x44B; &#x441; &#x43A;&#x43E;&#x440;&#x442;&#x435;&#x436;&#x435;&#x43C;, &#x43F;&#x43E;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x443; &#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442; &#x441;&#x43F;&#x438;&#x441;&#x43E;&#x43A; &#x432; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x435; &#x430;&#x440;&#x433;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430;. GHCi &#x43F;&#x440;&#x435;&#x434;&#x43B;&#x430;&#x433;&#x430;&#x435;&#x442; &#x43D;&#x430;&#x43C; &#x430;&#x43B;&#x44C;&#x442;&#x435;&#x440;&#x43D;&#x430;&#x442;&#x438;&#x432;&#x43D;&#x443;&#x44E;, &#x431;&#x43E;&#x43B;&#x435;&#x435; &#x43E;&#x431;&#x449;&#x443;&#x44E; &#x432;&#x435;&#x440;&#x441;&#x438;&#x44E;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x438; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x432; base (&#x443; Hoogle, &#x43F;&#x43E; &#x432;&#x441;&#x435;&#x439; &#x432;&#x438;&#x434;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x438;, &#x441;&#x432;&#x435;&#x434;&#x435;&#x43D;&#x438;&#x44F; &#x443;&#x441;&#x442;&#x430;&#x440;&#x435;&#x432;&#x448;&#x438;&#x435;):</p>
<pre><code class="language-haskell">Prelude&gt; :t minimum
minimum :: (Ord a, Foldable t) =&gt; t a -&gt; a
</code></pre>
<p>&#x412; &#x438;&#x441;&#x445;&#x43E;&#x434;&#x43D;&#x438;&#x43A;&#x430;&#x445; <a href="http://hackage.haskell.org/package/base-4.5.0.0/docs/src/Data-Foldable.html?ref=yakovlev.me">Data.Foldable</a> &#x43C;&#x44B;, &#x43D;&#x430;&#x43A;&#x43E;&#x43D;&#x435;&#x446;, &#x43D;&#x430;&#x445;&#x43E;&#x434;&#x438;&#x43C; &#x432;&#x438;&#x43D;&#x43E;&#x432;&#x43D;&#x438;&#x43A;&#x430; &#x43D;&#x430;&#x448;&#x435;&#x433;&#x43E; &#x431;&#x435;&#x441;&#x43F;&#x43E;&#x43A;&#x43E;&#x439;&#x441;&#x442;&#x432;&#x430;:</p>
<pre><code class="language-haskell">-- | The least element of a non-empty structure.
minimum :: (Foldable t, Ord a) =&gt; t a -&gt; a
minimum = foldr1 min
</code></pre>
<p>&#x41F;&#x440;&#x430;&#x432;&#x430;&#x44F; &#x441;&#x432;&#x435;&#x440;&#x442;&#x43A;&#x430; &#x441; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x435;&#x439; <code>min</code> &#x43D;&#x430; &#x43A;&#x430;&#x436;&#x434;&#x43E;&#x43C; &#x448;&#x430;&#x433;&#x435; &#x431;&#x443;&#x434;&#x435;&#x442; &#x431;&#x440;&#x430;&#x442;&#x44C; &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442; &#x432; &#x430;&#x43A;&#x43A;&#x443;&#x43C;&#x443;&#x43B;&#x44F;&#x442;&#x43E;&#x440;&#x435; &#x438; &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442; &#x438;&#x437; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; (&#x432; &#x43D;&#x430;&#x448;&#x435;&#x43C; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435; &#x2014; &#x43A;&#x43E;&#x440;&#x442;&#x435;&#x436;&#x430;), &#x441;&#x440;&#x430;&#x432;&#x43D;&#x438;&#x432;&#x430;&#x442;&#x44C; &#x438;&#x445; &#x438; &#x43E;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x44F;&#x442;&#x44C; &#x432; &#x430;&#x43A;&#x43A;&#x443;&#x43C;&#x443;&#x43B;&#x44F;&#x442;&#x43E;&#x440;&#x435; &#x43C;&#x438;&#x43D;&#x438;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439;. &#x427;&#x442;&#x43E;&#x431;&#x44B; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44F; &#x431;&#x44B;&#x43B;&#x430; &#x43F;&#x43E;&#x43B;&#x438;&#x43C;&#x43E;&#x440;&#x444;&#x43D;&#x430;, &#x43D;&#x430;&#x447;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x435; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x435; &#x430;&#x43A;&#x43A;&#x443;&#x43C;&#x443;&#x43B;&#x44F;&#x442;&#x43E;&#x440;&#x430; &#x43D;&#x435; &#x437;&#x430;&#x434;&#x430;&#x435;&#x442;&#x441;&#x44F;, &#x430; &#x431;&#x435;&#x440;&#x435;&#x442;&#x441;&#x44F; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; &#x43F;&#x435;&#x440;&#x432;&#x43E;&#x435; &#x438;&#x437; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B;. &#x42D;&#x442;&#x443; &#x43B;&#x43E;&#x433;&#x438;&#x43A;&#x443; &#x43E;&#x431;&#x435;&#x441;&#x43F;&#x435;&#x447;&#x438;&#x432;&#x430;&#x435;&#x442; <code>foldr1</code> &#x2014; &#x432;&#x430;&#x440;&#x438;&#x430;&#x43D;&#x442; &#x43F;&#x440;&#x430;&#x432;&#x43E;&#x439; &#x441;&#x432;&#x435;&#x440;&#x442;&#x43A;&#x438; &#x43D;&#x430;&#x434; &#x43D;&#x435;&#x43F;&#x443;&#x441;&#x442;&#x44B;&#x43C; <code>Foldable</code> &#x442;&#x438;&#x43F;&#x43E;&#x43C;:</p>
<pre><code class="language-haskell">-- | A variant of &apos;foldr&apos; that has no base case,
-- and thus may only be applied to non-empty structures.
--
-- @&apos;foldr1&apos; f = &apos;Prelude.foldr1&apos; f . &apos;toList&apos;@
foldr1 :: (a -&gt; a -&gt; a) -&gt; t a -&gt; a
foldr1 f xs = fromMaybe (error &quot;foldr1: empty structure&quot;)
                (foldr mf Nothing xs)
  where
    mf x m = Just (case m of
                     Nothing -&gt; x
                     Just y  -&gt; f x y)
</code></pre>
<p>&#x415;&#x441;&#x43B;&#x438; &#x441;&#x432;&#x43E;&#x440;&#x430;&#x447;&#x438;&#x432;&#x430;&#x435;&#x43C;&#x430;&#x44F; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x430; &#x43F;&#x443;&#x441;&#x442;&#x430;, <code>foldr</code> &#x432;&#x435;&#x440;&#x43D;&#x435;&#x442; <strong>Nothing</strong>, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439;, &#x43D;&#x435; &#x43F;&#x440;&#x43E;&#x439;&#x434;&#x44F; &#x431;&#x430;&#x440;&#x44C;&#x435;&#x440; <code>fromMaybe</code>, &#x432;&#x44B;&#x437;&#x43E;&#x432;&#x435;&#x442; &#x43E;&#x448;&#x438;&#x431;&#x43A;&#x443;. &#x412; &#x438;&#x43D;&#x43E;&#x43C; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435;, &#x435;&#x441;&#x43B;&#x438; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x430; &#x43D;&#x435;&#x43F;&#x443;&#x441;&#x442;&#x430;, &#x43D;&#x430; &#x43F;&#x435;&#x440;&#x432;&#x43E;&#x43C; &#x448;&#x430;&#x433;&#x435; &#x441;&#x432;&#x435;&#x440;&#x442;&#x43A;&#x438; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44F; <code>mf</code> &#x443;&#x43F;&#x430;&#x43A;&#x443;&#x435;&#x442; &#x432; <strong>Just</strong> &#x43F;&#x435;&#x440;&#x432;&#x43E;&#x435; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x435; &#x432; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x435;, &#x430; &#x434;&#x430;&#x43B;&#x435;&#x435; &#x441;&#x432;&#x435;&#x440;&#x442;&#x43A;&#x430; &#x43F;&#x43E;&#x439;&#x434;&#x435;&#x442; &#x43A;&#x430;&#x43A; &#x43E;&#x431;&#x44B;&#x447;&#x43D;&#x43E;. &#x415;&#x441;&#x43B;&#x438; &#x441;&#x447;&#x438;&#x442;&#x430;&#x442;&#x44C;, &#x447;&#x442;&#x43E; &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x44B; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x43A;&#x43E;&#x440;&#x442;&#x435;&#x436;&#x430; &#x2014; &#x44D;&#x442;&#x43E; &#x43F;&#x435;&#x440;&#x432;&#x43E;&#x435; &#x438; &#x432;&#x442;&#x43E;&#x440;&#x43E;&#x435; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x435; &#x43A;&#x43E;&#x440;&#x442;&#x435;&#x436;&#x430;, &#x442;&#x43E; &#x432;&#x441;&#x435; &#x434;&#x43E;&#x43B;&#x436;&#x43D;&#x43E; &#x43E;&#x442;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x442;&#x44C; &#x43A;&#x430;&#x43A; &#x43D;&#x443;&#x436;&#x43D;&#x43E;, &#x438; &#x43C;&#x438;&#x43D;&#x438;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x43C; &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x43E;&#x43C; <code>(1,2)</code> &#x434;&#x43E;&#x43B;&#x436;&#x43D;&#x430; &#x431;&#x44B;&#x442;&#x44C; &#x435;&#x434;&#x438;&#x43D;&#x438;&#x446;&#x430;.</p>
<p>&#x41E;&#x441;&#x442;&#x430;&#x43B;&#x43E;&#x441;&#x44C; &#x432;&#x441;&#x43F;&#x43E;&#x43C;&#x43D;&#x438;&#x442;&#x44C; &#x432;&#x438;&#x434; <code>foldr</code> &#x434;&#x43B;&#x44F; &#x43A;&#x43E;&#x440;&#x442;&#x435;&#x436;&#x430; &#x2014; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x430; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x43A;&#x440;&#x44B;&#x442;&#x44C;&#x441;&#x44F; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x432; &#x43D;&#x435;&#x43C;. &#x422;&#x430;&#x43A; &#x438; &#x435;&#x441;&#x442;&#x44C;:</p>
<pre><code class="language-haskell">instance Foldable ((,) a) where
    foldMap f (_, y) = f y
 
    foldr f z (_, y) = f y z
</code></pre>
<p>&#x418;&#x442;&#x430;&#x43A;, &#x43F;&#x440;&#x430;&#x432;&#x430;&#x44F; &#x441;&#x432;&#x435;&#x440;&#x442;&#x43A;&#x430; &#x43D;&#x430; &#x43A;&#x43E;&#x440;&#x442;&#x435;&#x436;&#x430;&#x445; &#x438;&#x437; &#x434;&#x432;&#x443;&#x445; &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x43E;&#x432; &#x438;&#x433;&#x43D;&#x43E;&#x440;&#x438;&#x440;&#x443;&#x435;&#x442; &#x43F;&#x435;&#x440;&#x432;&#x44B;&#x439; &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442; &#x43A;&#x43E;&#x440;&#x442;&#x435;&#x436;&#x430; &#x438; &#x432;&#x44B;&#x43F;&#x43E;&#x43B;&#x43D;&#x44F;&#x435;&#x442; &#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x43D;&#x43D;&#x443;&#x44E; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E; <code>f</code> &#x43D;&#x430; &#x432;&#x442;&#x43E;&#x440;&#x43E;&#x43C; &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x435; &#x43A;&#x43E;&#x440;&#x442;&#x435;&#x436;&#x430; &#x438; &#x43D;&#x430;&#x447;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x43C; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x438;. <em>&#x422;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x43A;&#x43E;&#x440;&#x442;&#x435;&#x436; &#x438;&#x437; &#x434;&#x432;&#x443;&#x445; &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x43E;&#x432; &#x2014; &#x44D;&#x442;&#x43E; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x439;&#x43D;&#x435;&#x440;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x445;&#x440;&#x430;&#x43D;&#x438;&#x442; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x441;&#x432;&#x43E;&#x439; &#x432;&#x442;&#x43E;&#x440;&#x43E;&#x439; &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;.</em> &#x42D;&#x442;&#x43E; &#x43B;&#x43E;&#x433;&#x438;&#x447;&#x43D;&#x43E;&#x435; &#x43F;&#x43E;&#x432;&#x435;&#x434;&#x435;&#x43D;&#x438;&#x435;, &#x43F;&#x43E;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x443; &#x443; &#x43D;&#x430;&#x441; &#x43D;&#x435;&#x442; &#x43D;&#x438;&#x43A;&#x430;&#x43A;&#x438;&#x445; &#x433;&#x430;&#x440;&#x430;&#x43D;&#x442;&#x438;&#x439; &#x43E;&#x442;&#x43D;&#x43E;&#x441;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x441;&#x43E;&#x433;&#x43B;&#x430;&#x441;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x442;&#x438;&#x43F;&#x43E;&#x432; &#x43F;&#x435;&#x440;&#x432;&#x43E;&#x433;&#x43E; &#x438; &#x432;&#x442;&#x43E;&#x440;&#x43E;&#x433;&#x43E; &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x430;. &#x41D;&#x43E;, &#x43A;&#x430;&#x43A; &#x438;&#x442;&#x43E;&#x433;, &#x43F;&#x440;&#x430;&#x432;&#x430;&#x44F; &#x441;&#x432;&#x435;&#x440;&#x442;&#x43A;&#x430; &#x431;&#x435;&#x437; &#x43D;&#x430;&#x447;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x433;&#x43E; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x438; &#x432;&#x43E;&#x432;&#x441;&#x435; &#x43D;&#x435; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43E;&#x431;&#x440;&#x430;&#x449;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x43A; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438;, &#x430; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; &#x432;&#x435;&#x440;&#x43D;&#x435;&#x442; &#x432;&#x442;&#x43E;&#x440;&#x43E;&#x439; &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442; &#x43A;&#x43E;&#x440;&#x442;&#x435;&#x436;&#x430;!</p>
<pre><code class="language-haskell">Prelude&gt; foldr1 min (1,2)
2
Prelude&gt; foldr1 (*) (1,2)
2
Prelude&gt; foldr1 (+) (1,2)
2
</code></pre>
<p>&#x411;&#x43B;&#x430;&#x433;&#x43E;&#x434;&#x430;&#x440;&#x44F; &#x43B;&#x435;&#x43D;&#x438;&#x432;&#x43E;&#x439; &#x441;&#x435;&#x43C;&#x430;&#x43D;&#x442;&#x438;&#x43A;&#x435; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x442;&#x44C; &#x431;&#x443;&#x434;&#x435;&#x442; &#x434;&#x430;&#x436;&#x435;:</p>
<pre><code class="language-haskell">Prelude&gt; foldr1 (+) (undefined,2)
2
Prelude&gt; foldr1 undefined (undefined,2)
2
</code></pre>
<p>&#x422;&#x43E;&#x447;&#x43D;&#x43E; &#x442;&#x430;&#x43A; &#x436;&#x435; &#x438; &#x432;&#x441;&#x435; &#x431;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x447;&#x43D;&#x44B;&#x435; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438;, &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x44E;&#x449;&#x438;&#x435; &#x43F;&#x440;&#x430;&#x432;&#x443;&#x44E; &#x441;&#x432;&#x435;&#x440;&#x442;&#x43A;&#x443;, &#x431;&#x443;&#x434;&#x443;&#x442; &#x434;&#x430;&#x432;&#x430;&#x442;&#x44C; &#x43D;&#x435;&#x438;&#x43D;&#x442;&#x443;&#x438;&#x442;&#x438;&#x432;&#x43D;&#x44B;&#x439; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442; &#x434;&#x43B;&#x44F; &#x43B;&#x44E;&#x434;&#x435;&#x439;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43D;&#x430;&#x447;&#x430;&#x43B;&#x438; &#x441;&#x432;&#x44F;&#x437;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x441;&#x432;&#x43E;&#x44E; &#x436;&#x438;&#x437;&#x43D;&#x44C; &#x441; Haskell.</p>
<pre><code class="language-haskell">Prelude&gt; sum (3,2)
2
Prelude&gt; prod (3,2)
2
Prelude&gt; or (True,False)
False
</code></pre>
<p>&#x41F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x430; &#x43D;&#x435; &#x431;&#x44B;&#x43B;&#x430; &#x431;&#x44B; &#x441;&#x442;&#x43E;&#x43B;&#x44C; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x43C;&#x430;, &#x435;&#x441;&#x43B;&#x438; &#x431;&#x44B; &#x43D;&#x435; &#x43F;&#x43E;&#x432;&#x430;&#x43B;&#x44C;&#x43D;&#x430;&#x44F; &#x43F;&#x440;&#x438;&#x432;&#x44B;&#x447;&#x43A;&#x430; &#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x447;&#x442;&#x43E;-&#x442;&#x43E; &#x442;&#x438;&#x43F;&#x430;:</p>
<pre><code class="language-haskell">type MyComplex = (Double,Double)
</code></pre>
<p>&#x410; &#x43F;&#x43E;&#x442;&#x43E;&#x43C; &#x43B;&#x44E;&#x434;&#x438; &#x43D;&#x435;&#x434;&#x43E;&#x443;&#x43C;&#x435;&#x432;&#x430;&#x44E;&#x442;, &#x447;&#x442;&#x43E; &#x436;&#x435; &#x43F;&#x440;&#x43E;&#x438;&#x441;&#x445;&#x43E;&#x434;&#x438;&#x442; &#x441; &#x438;&#x445; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x430;&#x43C;&#x438;. &#x412; &#x43F;&#x440;&#x438;&#x432;&#x435;&#x434;&#x435;&#x43D;&#x43D;&#x43E;&#x439; &#x432; &#x43D;&#x430;&#x447;&#x430;&#x43B;&#x435; &#x441;&#x442;&#x430;&#x442;&#x44C;&#x438; &#x441;&#x441;&#x44B;&#x43B;&#x43A;&#x435; &#x438;&#x434;&#x435;&#x442; &#x436;&#x430;&#x440;&#x43A;&#x430;&#x44F; &#x434;&#x438;&#x441;&#x43A;&#x443;&#x441;&#x441;&#x438;&#x44F; &#x43E;&#x442;&#x43D;&#x43E;&#x441;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x442;&#x43E;&#x433;&#x43E;, <em>&#x201C;&#x43A;&#x430;&#x43A; &#x43C;&#x44B; &#x434;&#x43E;&#x448;&#x43B;&#x438; &#x434;&#x43E; &#x436;&#x438;&#x437;&#x43D;&#x438; &#x442;&#x430;&#x43A;&#x43E;&#x439;&#x201D;</em>, <em>&#x201C;&#x440;&#x430;&#x43D;&#x44C;&#x448;&#x435; [haskell98] &#x442;&#x430;&#x43A;&#x43E;&#x439; &#x444;&#x438;&#x433;&#x43D;&#x438; &#x43D;&#x435; &#x431;&#x44B;&#x43B;&#x43E;&#x201D;</em> &#x438; &#x43F;&#x440;&#x43E;&#x447;&#x435;&#x435;. &#x41F;&#x43E;&#x447;&#x438;&#x442;&#x430;&#x442;&#x44C; &#x432;&#x435;&#x441;&#x44C;&#x43C;&#x430; &#x437;&#x430;&#x43D;&#x438;&#x43C;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;. &#x412; &#x441;&#x438;&#x442;&#x443;&#x430;&#x446;&#x438;&#x44E; &#x443;&#x436;&#x435; &#x432;&#x43C;&#x435;&#x448;&#x430;&#x43B;&#x441;&#x44F; SPJ (&#x43D;&#x430; &#x441;&#x442;&#x43E;&#x440;&#x43E;&#x43D;&#x435; &#x442;&#x435;&#x445;, &#x43A;&#x442;&#x43E; &#x432;&#x44B;&#x441;&#x442;&#x443;&#x43F;&#x430;&#x435;&#x442; &#x437;&#x430; &#x443;&#x43D;&#x438;&#x447;&#x442;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435; <code>Foldable (,) a</code>), &#x442;&#x430;&#x43A; &#x447;&#x442;&#x43E; &#x43A;&#x430;&#x43A;-&#x43D;&#x438;&#x431;&#x443;&#x434;&#x44C; &#x43E;&#x43D;&#x43E; &#x434;&#x430; &#x440;&#x430;&#x437;&#x440;&#x435;&#x448;&#x438;&#x442;&#x441;&#x44F;. &#x41D;&#x443; &#x430; &#x43C;&#x44B; &#x43F;&#x43E;&#x43A;&#x430; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x442;&#x440;&#x438; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x44B;&#x445; &#x432;&#x44B;&#x432;&#x43E;&#x434;&#x430;:</p>
<ol>
<li>&#x41F;&#x43E;&#x432;&#x430;&#x43B;&#x44C;&#x43D;&#x430;&#x44F; &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x430;&#x446;&#x438;&#x44F; &#x432;&#x441;&#x435;&#x433;&#x43E; &#x438; &#x432;&#x441;&#x44F; &#x447;&#x435;&#x440;&#x435;&#x437; <code>Foldable</code> &#x445;&#x43E;&#x440;&#x43E;&#x448;&#x430; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x442;&#x43E;&#x433;&#x434;&#x430;, &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x432;&#x441;&#x435; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x438;&#x442;&#x435;&#x43B;&#x438; <code>Foldable</code> &#x440;&#x430;&#x437;&#x443;&#x43C;&#x43D;&#x44B;, &#x430; &#x43D;&#x435; &#x43A;&#x43E;&#x440;&#x442;&#x435;&#x436;&#x438;.</li>
<li>&#x41A;&#x43E;&#x440;&#x442;&#x435;&#x436;&#x438; &#x441;&#x442;&#x43E;&#x438;&#x442; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x434;&#x43B;&#x44F; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x445; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x439;, &#x430; &#x43D;&#x435; &#x43A;&#x430;&#x43A; &#x43E;&#x434;&#x438;&#x43D; &#x438;&#x437; &#x432;&#x430;&#x436;&#x43D;&#x44B;&#x445; &#x442;&#x438;&#x43F;&#x43E;&#x432; &#x432; &#x43B;&#x43E;&#x433;&#x438;&#x43A;&#x435; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x44B;.</li>
<li>&#x421;&#x442;&#x43E;&#x438;&#x442; &#x432;&#x441;&#x435;&#x433;&#x434;&#x430; &#x43F;&#x440;&#x435;&#x434;&#x43F;&#x43E;&#x447;&#x438;&#x442;&#x430;&#x442;&#x44C; &#x43A;&#x43E;&#x440;&#x442;&#x435;&#x436;&#x443; &#x441;&#x43E;&#x431;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x44B;&#x439; &#x442;&#x438;&#x43F;-&#x437;&#x430;&#x43F;&#x438;&#x441;&#x44C;.</li>
</ol>
<!--kg-card-end: markdown-->]]></content:encoded></item></channel></rss>