<?xml version='1.0' encoding='utf-8' ?>

<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:atom10='http://www.w3.org/2005/Atom'>
<channel>
  <title>Anton Salikhmetov</title>
  <link>https://codedot.dreamwidth.org/</link>
  <description>Anton Salikhmetov - Dreamwidth Studios</description>
  <lastBuildDate>Thu, 08 Nov 2018 23:03:08 GMT</lastBuildDate>
  <generator>LiveJournal / Dreamwidth Studios</generator>
  <lj:journal>codedot</lj:journal>
  <lj:journaltype>personal</lj:journaltype>
<item>
  <guid isPermaLink='true'>https://codedot.dreamwidth.org/183222.html</guid>
  <pubDate>Thu, 08 Nov 2018 23:03:08 GMT</pubDate>
  <title>Elementary Microeconomics of the Talmudic Rule</title>
  <link>https://codedot.dreamwidth.org/183222.html</link>
  <description>&lt;a href=&quot;https://dx.doi.org/10.2139/ssrn.3271944&quot;&gt;https://dx.doi.org/10.2139/ssrn.3271944&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This paper takes a look at the Talmudic rule aka the 1/N rule aka the uniform investment strategy from the viewpoint of elementary microeconomics. Specifically, we derive the cardinal utility function for a Talmud-obeying agent which happens to have the Cobb-Douglas form. Further, we investigate individual supply and demand due to rebalancing and compare them to market depth of an exchange. Finally, we discuss how operating as a liquidity provider can benefit the Talmud-obeying agent with every exchange transaction in terms of the identified utility function.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=183222&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://codedot.dreamwidth.org/183222.html</comments>
  <category>elementary mathematics</category>
  <category>ideas</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://codedot.dreamwidth.org/182592.html</guid>
  <pubDate>Wed, 04 Jul 2018 08:55:19 GMT</pubDate>
  <title>Missing equivalence in the interaction calculus</title>
  <link>https://codedot.dreamwidth.org/182592.html</link>
  <description>Configuration&lt;br /&gt;&lt;br /&gt;&amp;lt;... | x = α(...y...), y = β(...x...)&amp;gt;&lt;br /&gt;&lt;br /&gt;can be reduced to both&lt;br /&gt;&lt;br /&gt;&amp;lt;... | x = α(...β(...x...)...)&amp;gt;&lt;br /&gt;&lt;br /&gt;and&lt;br /&gt;&lt;br /&gt;&amp;lt;... | y = β(...α(...y...)...)&amp;gt;,&lt;br /&gt;&lt;br /&gt;which syntactically appears as a counterexample to strong confluence, while essentially representing the same configuration.&lt;br /&gt;&lt;br /&gt;Is there a way to formalize equivalence between those two normal forms?&lt;br /&gt;&lt;br /&gt;I think there is:&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/DhP8KA0WkAASGdK.jpg:large&quot; alt=&quot;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=182592&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://codedot.dreamwidth.org/182592.html</comments>
  <category>lambda calculus</category>
  <category>ideas</category>
  <category>elementary mathematics</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://codedot.dreamwidth.org/182004.html</guid>
  <pubDate>Thu, 31 May 2018 13:13:07 GMT</pubDate>
  <title>Обратное свойство ромба</title>
  <link>https://codedot.dreamwidth.org/182004.html</link>
  <description>Я тут задумался об &lt;a href=&quot;https://en.wikipedia.org/wiki/Reversible_computing&quot;&gt;обратимых вычислениях&lt;/a&gt;. Как они могли бы выглядеть в &lt;a href=&quot;https://en.wikipedia.org/wiki/Interaction_nets&quot;&gt;сетях взаимодействия&lt;/a&gt;? Но прежде всего, в каком смысле надо понимать обратимость, если отношение редукции обладает свойством ромба? И что из этого будет следовать?&lt;br /&gt;&lt;br /&gt;Пока у меня ничего толком не устоялось, рабочее определение &lt;i&gt;обратимой системы взаимодействия&lt;/i&gt; такое: 1) для любой подсети Ν должно быть не более одной активной пары α&amp;gt;&amp;lt;β, которая редуцируется к N, и 2) если две подсети M и N - результы взаимодействия активных пар α&amp;gt;&amp;lt;β и γ&amp;gt;&amp;lt;δ, соответственно, то M и N не пересекаются. Речь идет лишь о подсетях и активных парах, так как об обратимости конфигураций говорить нельзя, когда в сети больше одной активной пары. Не уверен, что это исчерпывающий список условий, но уже их достаточно, чтобы заметить пару-тройку следствий.&lt;br /&gt;&lt;br /&gt;Одно из следствий такого определения немедленно накладывает ограничения на правила взаимодействия. В частности, правая часть каждого правила обязана быть связной сетью. Доказательство от противного: строим простой контрпример с двумя одинаковыми активными парами, взаимодействие которых приводит к двум неразличимым сверткам для каждой активной пары, нарушая условие (2). Также потребуется асимметрия правой части правила для α&amp;gt;&amp;lt;β, если α и β различны. Продолжу думать в этом направлении позже, хотя уже предчувствую трудности с интерпретацией обратимых систем взаимодействия в исчислении взаимодействия. Например, придется как-то выкручиваться с разыменованием (indirection), применение которого сугубо неоднозначно.&lt;br /&gt;&lt;br /&gt;Но самое интересное свойство обратимых систем взаимодействия - это, наверное, обратное свойство ромба. Получается, если такие системы вообще существуют, они одновременно будут обладать и прямым (strong confluence), и обратным (strong upward confluence) свойствами ромба. Это, конечно, мне напомнило об упражнении 3.5.11 (vii) у Барендрегта. Когда я бегло проходил по упражнениям к нескольким главам три года назад, мне не удалось быстро его решить. Было &lt;a href=&quot;https://codedot.dreamwidth.org/172360.html&quot;&gt;обидно&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Задача была показать, что для термов (λx.b x (b c)) c и (λx.x x) (b c), принадлежащих Плоткину, не существует общей β-экспансии, хотя они оба редуцируются к b c (b c). Эти два терма служат контрпримером для &quot;обратного свойства Черча-Россера&quot; β-редукции. Сегодня я решил поискать, как именно выводить противоречие из существования их общей β-экспансии, и нашел &lt;a href=&quot;https://pdfs.semanticscholar.org/c179/a23274c06aaca4865a2e3c66a45612c38aa0.pdf&quot;&gt;&quot;An Easy Expansion Exercise&quot;&lt;/a&gt; (Vincent van Oostrom). Там предлагается использовать теорему о стандартизации. Правда, я не очень понял, как ограничиться материалом конкретно третьей главы.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update.&lt;/b&gt; In a reversible interaction system (RIS), the right-hand side (RHS) of each rule needs to include at least one agent, that is RHS cannot be a wiring: RHS of α[x, x]&amp;gt;&amp;lt;β is ambiguous, α[x]&amp;gt;&amp;lt;α[x] violates condition (1) in the definition of RIS, and more than one wire make a disconnected net, violating condition (2). As a consequence, in the interaction calculus, each name in an interaction rule needs to have at least one of its two occurrences in a term that is not a name; otherwise we have a disconnected subnet in its RHS. Now it is easy to see strong upward confluence in RIS.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=182004&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://codedot.dreamwidth.org/182004.html</comments>
  <category>lambda calculus</category>
  <category>ideas</category>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://codedot.dreamwidth.org/181371.html</guid>
  <pubDate>Sun, 04 Feb 2018 14:23:23 GMT</pubDate>
  <title>Exhausting Combinators</title>
  <link>https://codedot.dreamwidth.org/181371.html</link>
  <description>&lt;i&gt;Early this year, I made a &lt;a href=&quot;http://lambda-the-ultimate.org/node/5487&quot;&gt;post on LtU&lt;/a&gt; about the experimental &quot;abstract&quot; algorithm in &lt;a href=&quot;https://www.npmjs.com/package/@alexo/lambda&quot;&gt;MLC&lt;/a&gt;. Soon after that, &lt;a href=&quot;http://gallium.inria.fr/~scherer/&quot;&gt;Gabriel Scherer&lt;/a&gt; suggested doing exhaustive search through all possible inputs up to a particular size. Recently, I decided to conduct such an experiment. Here are&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Some results&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I managed to collect some results [1]. First of all, I had to pick a particular definition for &quot;size&quot; of a λ-term, because there are many. I chose the one that is used in A220894 [2]:&lt;br /&gt;&lt;br /&gt;size(x) = 0;&lt;br /&gt;size(λx.M) = 1 + size(M);&lt;br /&gt;size(M N) = 1 + size(M) + size(N).&lt;br /&gt;&lt;br /&gt;For sizes from 1 to 9, inclusively, there exist 5663121 closed λ-terms. I tested all of them against both &quot;abstract&quot; [3] and &quot;optimal&quot; [4] algorithms in MLC, with up to 250 interactions per term. The process took almost a day of CPU time. Then, I automatically compared them [5] using a simple awk(1) script (also available in [1]), looking for terms for which normal form or number of β-reductions using &quot;abstract&quot; would deviate from &quot;optimal&quot;.&lt;br /&gt;&lt;br /&gt;No such terms have been found this way. Surprisingly, there have been identified apparent Lambdascope counterexamples instead, the shortest of which is λx.(λy.y y) (λy.x (λz.y)) resulting in a fan that reaches the interaction net interface. I plan to look into this in near future.&lt;br /&gt;&lt;br /&gt;As for sizes higher than 9, testing quickly becomes unfeasible. For example, there are 69445532 closed terms of sizes from 1 to 10, inclusively, which takes a lot of time and space just to generate and save them. [6] is a 200MB gzip(1)&apos;ed tarball (4GB unpacked) with all these terms split into 52 files with 1335491 terms each. In my current setting, it is unfeasible to test them.&lt;br /&gt;&lt;br /&gt;I may come up with optimizations at some point to make it possible to process terms of sizes up to 10, but 11 and higher look completely hopeless to me.&lt;br /&gt;&lt;br /&gt;[1] &lt;a href=&quot;https://gist.github.com/codedot/3b99edd504678e160999f12cf30da420&quot;&gt;https://gist.github.com/codedot/3b99edd504678e160999f12cf30da420&lt;/a&gt;&lt;br /&gt;[2] &lt;a href=&quot;http://oeis.org/A220894&quot;&gt;http://oeis.org/A220894&lt;/a&gt;&lt;br /&gt;[3] &lt;a href=&quot;https://drive.google.com/open?id=1O2aTULUXuLIl3LArehMtwmoQiIGB62-A&quot;&gt;https://drive.google.com/open?id=1O2aTULUXuLIl3LArehMtwmoQiIGB62-A&lt;/a&gt;&lt;br /&gt;[4] &lt;a href=&quot;https://drive.google.com/open?id=16W_HSmwlRB6EAW5XxwVb4MqvkEZPf9HN&quot;&gt;https://drive.google.com/open?id=16W_HSmwlRB6EAW5XxwVb4MqvkEZPf9HN&lt;/a&gt;&lt;br /&gt;[5] &lt;a href=&quot;https://drive.google.com/open?id=1ldxxnbzdxZDk5-9VMDzLvS7BouxwbCfH&quot;&gt;https://drive.google.com/open?id=1ldxxnbzdxZDk5-9VMDzLvS7BouxwbCfH&lt;/a&gt;&lt;br /&gt;[6] &lt;a href=&quot;https://drive.google.com/open?id=1XjEa-N40wSqmSWnesahnxz6SXVUzzBig&quot;&gt;https://drive.google.com/open?id=1XjEa-N40wSqmSWnesahnxz6SXVUzzBig&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=181371&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://codedot.dreamwidth.org/181371.html</comments>
  <category>lambda calculus</category>
  <category>howtos</category>
  <category>talks</category>
  <category>elementary mathematics</category>
  <category>programming</category>
  <category>ideas</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://codedot.dreamwidth.org/177163.html</guid>
  <pubDate>Tue, 21 Feb 2017 04:27:37 GMT</pubDate>
  <title>arXiv:1702.06092 [cs.LO]</title>
  <link>https://codedot.dreamwidth.org/177163.html</link>
  <description>&lt;a href=&quot;https://arxiv.org/abs/1702.06092&quot;&gt;https://arxiv.org/abs/1702.06092&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Parallel needed reduction for pure interaction nets&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Reducing interaction nets without any specific strategy benefits from constant time per step. On the other hand, a canonical reduction step for weak reduction to interface normal form is linear by depth of terms. In this paper, we refine the weak interaction calculus to reveal the actual cost of its reduction. As a result, we obtain a notion of needed reduction that can be implemented in constant time per step without allowing any free ports and without sacrificing parallelism.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=177163&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://codedot.dreamwidth.org/177163.html</comments>
  <category>lambda calculus</category>
  <category>ideas</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://codedot.dreamwidth.org/176096.html</guid>
  <pubDate>Sat, 03 Sep 2016 08:52:53 GMT</pubDate>
  <title>Interactive Tonnetz</title>
  <link>https://codedot.dreamwidth.org/176096.html</link>
  <description>&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Tonnetz&quot;&gt;Tonnetz&lt;/a&gt; is a lattice diagram representing tonal space. It can be used to visualize harmonic relationships in music. Each node in the diagram corresponds to one of the twelve tones and is connected to six adjacent tones that are related to it by a major third, a minor third, or by a perfect fifth, depending on their relative position in the diagram.&lt;/p&gt;

&lt;p&gt;I &lt;a href=&quot;https://github.com/codedot/tonnetz&quot;&gt;forked&lt;/a&gt; on GitHub the source code of &lt;a href=&quot;https://cifkao.github.io/tonnetz-viz/&quot;&gt;TonnetzViz&lt;/a&gt; created by Ondřej Cífka and implemented the following features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;zero configuration without any menus;&lt;/li&gt;
&lt;li&gt;Tonnetz-like keyboard layout;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Shepard_tone&quot;&gt;Shepard tones&lt;/a&gt; using &lt;a href=&quot;https://webaudio.github.io/web-audio-api/&quot;&gt;Web Audio&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;plug and play &lt;a href=&quot;https://webaudio.github.io/web-midi-api/&quot;&gt;Web MIDI&lt;/a&gt; support;&lt;/li&gt;
&lt;li&gt;blue minor and red major triads;&lt;/li&gt;
&lt;li&gt;Tonnetz bent to represent halftones;&lt;/li&gt;
&lt;li&gt;Shift key to sustain notes;&lt;/li&gt;
&lt;li&gt;and arrow keys to transpose.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now the live version is available at&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://codedot.github.io/tonnetz/&quot;&gt;https://codedot.github.io/tonnetz/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;https://pbs.twimg.com/media/CraoB7KWcAAYkC4.jpg&quot;&gt;&lt;/img&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=176096&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://codedot.dreamwidth.org/176096.html</comments>
  <category>programming</category>
  <category>ideas</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://codedot.dreamwidth.org/175648.html</guid>
  <pubDate>Wed, 25 May 2016 13:09:57 GMT</pubDate>
  <title>Еще одно введение в веревочковедение</title>
  <link>https://codedot.dreamwidth.org/175648.html</link>
  <description>&lt;i&gt;После конференции &lt;a href=&quot;http://www.win.tue.nl/~hzantema/tg.html&quot;&gt;TERMGRAPH&lt;/a&gt; в Эйндховене понял, что хорошо было бы иметь под рукой готовое быстрое введение одновременно в сети взаимодействия и исчисление взаимодействия. Вот что получилось из этой идеи.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Сети взаимодействия (interaction nets) - это структуры, подобные графам, состоящие из &lt;i&gt;агентов&lt;/i&gt; (agents) и дуг. Агент типа α&lt;br /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/CjQ22bvWYAEI-XB.jpg&quot;&gt;&lt;br /&gt;имеет арность ar(α) &amp;ge; 0. Если ar(α) = n, то агент α имеет n &lt;i&gt;дополнительных портов&lt;/i&gt; (auxiliary ports) x&lt;sub&gt;1&lt;/sub&gt;,..., x&lt;sub&gt;n&lt;/sub&gt; в дополнение к его &lt;i&gt;главному порту&lt;/i&gt; (principle port) x&lt;sub&gt;0&lt;/sub&gt;. Все типы агентов принадлежат множеству Σ, называемому &lt;i&gt;сигнатурой&lt;/i&gt; (signature). К любому порту можно присоединить не более одной дуги. Порты, которые не соединены ни одной дугой, называются &lt;i&gt;свободными&lt;/i&gt; (free ports). Совокупность всех свободных портов в сети называется ее &lt;i&gt;интерфейсом&lt;/i&gt;. &lt;i&gt;Разводка&lt;/i&gt; (wiring) ω&lt;br /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/CjQ22a0XEAISAQf.jpg&quot;&gt;&lt;br /&gt;состоит исключительно из дуг. Индуктивно определяемые &lt;i&gt;деревья&lt;/i&gt; (trees)&lt;br /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/CjQ22c8WYAA2qKh.jpg&quot;&gt;&lt;br /&gt;соответствуют &lt;i&gt;термам&lt;/i&gt; t &lt;code&gt;::=&lt;/code&gt; α(t&lt;sub&gt;1&lt;/sub&gt;,..., t&lt;sub&gt;n&lt;/sub&gt;) | x в исчислении взаимодействия (interaction calculus), где x называется &lt;i&gt;именем&lt;/i&gt; (name).&lt;br /&gt;&lt;br /&gt;С помощью разводок и деревьев любая сеть может быть представлена следующим образом:&lt;br /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/CjQ22fJW0AIb0SY.jpg&quot;&gt;&lt;br /&gt;что в исчислении взаимодействия будет соответствовать &lt;i&gt;конфигурации&lt;/i&gt; (configuration)&lt;br /&gt;&amp;lt;t&lt;sub&gt;1&lt;/sub&gt;,..., t&lt;sub&gt;m&lt;/sub&gt; | v&lt;sub&gt;1&lt;/sub&gt; = w&lt;sub&gt;1&lt;/sub&gt;,..., v&lt;sub&gt;n&lt;/sub&gt; = w&lt;sub&gt;n&lt;/sub&gt;&amp;gt;,&lt;br /&gt;где t&lt;sub&gt;i&lt;/sub&gt;, v&lt;sub&gt;i&lt;/sub&gt;, w&lt;sub&gt;i&lt;/sub&gt; - некоторые термы. Последовательность t&lt;sub&gt;1&lt;/sub&gt;,..., t&lt;sub&gt;m&lt;/sub&gt; называется &lt;i&gt;интерфейсом&lt;/i&gt; (interface), остальное же представляет собой мультимножество &lt;i&gt;уравнений&lt;/i&gt; (equations). Разводка ω транслируется в выбор имен, и каждое имя обязано иметь ровно два вхождения в конфигурации.&lt;br /&gt;&lt;br /&gt;Как и в λ-исчислении, в исчислении взаимодействия естественным образом определяются понятия α-конверсии и подстановки (substitution). Оба вхождения любого имени могут быть заменены на новое имя, если оно не участвует в данной конфигурации. Если терм t имеет ровно одно вхождение имени x, то &lt;i&gt;подстановка&lt;/i&gt; t[x := u] определяется как результат замены имени x в терме t некоторым термом u.&lt;br /&gt;&lt;br /&gt;Когда два агента соединены своими главными портами, они формируют &lt;i&gt;активную пару&lt;/i&gt; (active pair). Для активных пар можно ввести &lt;i&gt;правила взаимодействия&lt;/i&gt; (interaction rules), которые описывают, как активная пара будет заменена во время редукции сети взаимодействия. Графически любое правило взаимодействия можно преставить следующим образом:&lt;br /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/CjQ48X2WUAA5Dwd.jpg&quot;&gt;&lt;br /&gt;где α, β &amp;isin; Σ, а сеть N представлена с помощью разводок и деревьев в виде, пригодном для исчисления взаимодействия: в нотации Lafont это соответствует&lt;br /&gt;a[v&lt;sub&gt;1&lt;/sub&gt;,..., v&lt;sub&gt;m&lt;/sub&gt;] &amp;gt;&amp;lt; β[w&lt;sub&gt;1&lt;/sub&gt;,..., w&lt;sub&gt;n&lt;/sub&gt;].&lt;br /&gt;Говорят, что сеть без активных пар находится в &lt;i&gt;нормальной форме&lt;/i&gt; (normal form). Сигнатура и множество правил взаимодействия вместе задают &lt;i&gt;систему взаимодействия&lt;/i&gt; (interaction system).&lt;br /&gt;&lt;br /&gt;Теперь рассмотрим пример для введенных конструкций, в котором участвуют часто использующиеся агенты ε и δ. В нотации Lafont правила взаимодействия для удаляющего (erasing) агента ε&lt;br /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/CjQ48XxWkAEFXBN.jpg&quot;&gt;&lt;br /&gt;записываются как ε &amp;gt;&amp;lt; α[ε,..., ε], а правила для дублирующего (duplicating) агента δ&lt;br /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/CjQ48X4WgAAHrIW.jpg&quot;&gt;&lt;br /&gt;выглядят следующим образом:&lt;br /&gt;δ[α(x&lt;sub&gt;1&lt;/sub&gt;,..., x&lt;sub&gt;n&lt;/sub&gt;), α(y&lt;sub&gt;1&lt;/sub&gt;,..., y&lt;sub&gt;n&lt;/sub&gt;)] &amp;gt;&amp;lt; α[δ(x&lt;sub&gt;1&lt;/sub&gt;, y&lt;sub&gt;1&lt;/sub&gt;),..., δ(x&lt;sub&gt;n&lt;/sub&gt;, y&lt;sub&gt;n&lt;/sub&gt;)].&lt;br /&gt;В качестве примера сети, в которой участвуют правила удаления и дублирования, возьмем простую сеть которая не имеет нормальной формы и редуцируется к самой себе:&lt;br /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/CjQ48X4W0AIVWmP.jpg&quot;&gt;&lt;br /&gt;В исчислении взаимодействия такая сеть соответствует конфигурации&lt;br /&gt;&amp;lt;∅ | δ(ε, x) = γ(x, ε)&amp;gt; без интерфейса.&lt;br /&gt;&lt;br /&gt;Редукция для конфигураций определяется более подробно, чем для сетей. Если&lt;br /&gt;a[v&lt;sub&gt;1&lt;/sub&gt;,..., v&lt;sub&gt;m&lt;/sub&gt;] &amp;gt;&amp;lt; β[w&lt;sub&gt;1&lt;/sub&gt;,..., w&lt;sub&gt;n&lt;/sub&gt;], то следующая редукция:&lt;br /&gt;&amp;lt;... | α(t&lt;sub&gt;1&lt;/sub&gt;,..., t&lt;sub&gt;m&lt;/sub&gt;) = β(u&lt;sub&gt;1&lt;/sub&gt;,..., u&lt;sub&gt;n&lt;/sub&gt;), Δ&amp;gt; &amp;rarr; &amp;lt;... | t&lt;sub&gt;1&lt;/sub&gt; = v&lt;sub&gt;1&lt;/sub&gt;,..., t&lt;sub&gt;m&lt;/sub&gt; = v&lt;sub&gt;m&lt;/sub&gt;, u&lt;sub&gt;1&lt;/sub&gt; = w&lt;sub&gt;1&lt;/sub&gt;,..., u&lt;sub&gt;n&lt;/sub&gt; = w&lt;sub&gt;n&lt;/sub&gt;, Δ&amp;gt;&lt;br /&gt;называется &lt;i&gt;взаимодействием&lt;/i&gt; (interaction). Когда одно из уравнений имеет форму x = u, к конфигурации применимо &lt;i&gt;разыменование&lt;/i&gt; (indirection), в результате которого другое вхождение имени x в некотором терме t будет заменено на терм u:&lt;br /&gt;&amp;lt;...t... | x = u, Δ&amp;gt; &amp;rarr; &amp;lt;...t[x := u]... | Δ&amp;gt; или &amp;lt;... | x = u, t = w, Δ&amp;gt; &amp;rarr; &amp;lt;... | t[x := u] = w, Δ&amp;gt;.&lt;br /&gt;Уравнение t = x называется &lt;i&gt;тупиком&lt;/i&gt; (deadlock), если x имеет вхождение в t. Обычно рассматривают только сети, свободные от тупиков (deadlock-free). Вместе взаимодействие и разыменование задают отношение редукции на конфигурациях. Тот факт, что некоторая конфигурация c редуцируется к своей &lt;i&gt;нормальной форме&lt;/i&gt; c&apos;, где мультимножество уравнений пусто, обозначают через c &amp;darr; c&apos;.&lt;br /&gt;&lt;br /&gt;Если вернуться к примеру незавершающейся редукции сети, то бесконечная редукционная цепочка, начинающаяся с соответствующей конфигурации выглядит следующим образом:&lt;br /&gt;&amp;lt;∅ | δ(ε, x) = γ(x, ε)&amp;gt; &amp;rarr;&lt;br /&gt;&amp;lt;∅ | ε = γ(x&lt;sub&gt;1&lt;/sub&gt;, x&lt;sub&gt;2&lt;/sub&gt;), x = γ(y&lt;sub&gt;1&lt;/sub&gt;, y&lt;sub&gt;2&lt;/sub&gt;), x = δ(x&lt;sub&gt;1&lt;/sub&gt;, y&lt;sub&gt;1&lt;/sub&gt;), ε = δ(x&lt;sub&gt;2&lt;/sub&gt;, y&lt;sub&gt;2&lt;/sub&gt;)&amp;gt; &amp;rarr;&lt;sup&gt;*&lt;/sup&gt;&lt;br /&gt;&amp;lt;∅ | x&lt;sub&gt;1&lt;/sub&gt; = ε, x&lt;sub&gt;2&lt;/sub&gt; = ε, x = γ(y&lt;sub&gt;1&lt;/sub&gt;, y&lt;sub&gt;2&lt;/sub&gt;), x = δ(x&lt;sub&gt;1&lt;/sub&gt;, y&lt;sub&gt;1&lt;/sub&gt;), x&lt;sub&gt;2&lt;/sub&gt; = ε, y&lt;sub&gt;2&lt;/sub&gt; = ε&amp;gt; &amp;rarr;&lt;sup&gt;*&lt;/sup&gt;&lt;br /&gt;&amp;lt;∅ | δ(ε, x) = γ(x, ε)&amp;gt; &amp;rarr; ...&lt;br /&gt;&lt;br /&gt;На нашем языке программирования, который подобен yacc(1)/lex(1) по структуре и лексически близок к LaTeX-нотации для исчисления взаимодействия, тот же самый пример можно записать следующим образом:&lt;br /&gt;&lt;pre&gt;\epsilon {
        console.log(&quot;epsilon &amp;gt;&amp;lt; delta&quot;);
} \delta[\epsilon, \epsilon];

\epsilon {
        console.log(&quot;epsilon &amp;gt;&amp;lt; gamma&quot;);
} \gamma[\epsilon, \epsilon];

\delta[\gamma(x, y), \gamma(v, w)] {
        console.log(&quot;delta &amp;gt;&amp;lt; gamma&quot;);
} \gamma[\delta(x, v), \delta(y, w)];

$$

\delta(\epsilon, x) = \gamma(x, \epsilon);&lt;/pre&gt;Отметим, что наш язык программирования позволяет записывать побочные действия в императивном стиле, таким образом давая возможность исполнять произвольный код, включая ввод-вывод, а также условные множественные правила для пар вида α&lt;sub&gt;i&lt;/sub&gt; &amp;gt;&amp;lt; β&lt;sub&gt;j&lt;/sub&gt; в зависимости от значений i и j, которые могут быть произвольными данными, привязанными к агентам.&lt;br /&gt;&lt;br /&gt;Наша реализация этого языка программирования не полагается какую-либо внешнюю сборку мусора, так как не занимается контролем связности сети. Данное свойство является следствием того, что интерфейс сети предполагается пустым, а сети задаются исключительно через мультимножества уравнений. Чтобы записать в нашем языке некоторую сеть с непустым интерфейсом, необходимо сначала ее модифицировать, например, добавив агенты с нулевой арностью ко всем свободным портам.&lt;br /&gt;&lt;br /&gt;Сигнатура и арности агентов соответствующей системы взаимодействия автоматически выводятся при компиляции исходного кода программы на основе правил взаимодействия и начальной конфигурации. Правила взаимодействия вместе с их побочными действиями компилируются заранее, до начала редукции сети, при этом компилятор формирует таблицу для быстрого O(1)-поиска правил, соответствующих активным парам, во время последующего исполнения программы. После этого начальная конфигурация добавляется в FIFO-очередь уравнений, которая затем обрабатывается, пока она не станет пуста.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;P. S. Недавно адаптировал этот текст и дополнил им &lt;a href=&quot;https://en.wikipedia.org/wiki/Interaction_nets&quot;&gt;статью на Википедии&lt;/a&gt;.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=175648&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://codedot.dreamwidth.org/175648.html</comments>
  <category>lambda calculus</category>
  <category>ideas</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://codedot.dreamwidth.org/174955.html</guid>
  <pubDate>Tue, 20 Oct 2015 09:26:44 GMT</pubDate>
  <title>Token-Passing Net Implementation of Optimal Reduction</title>
  <link>https://codedot.dreamwidth.org/174955.html</link>
  <description>In the book &lt;a href=&quot;https://books.google.fi/books?id=Bod5HbPh-WwC&amp;amp;lpg=PA79&amp;amp;pg=PA41#v=onepage&amp;amp;q&amp;amp;f=false&quot;&gt;&quot;The Optimal Implementation of Functional Programming Languages&quot;&lt;/a&gt; by Andrea Asperti and Stefano Guerrini the initial encoding of a λ-term M into an interaction net is a configuration &amp;lt;x | x = [M]&lt;sub&gt;0&lt;/sub&gt;&amp;gt; where translation [M]&lt;sub&gt;n&lt;/sub&gt; is inductively defined by the following rules:&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/CRvxwj0UcAAUNxV.png&quot;&gt;&lt;br /&gt;&lt;br /&gt;The corresponding interaction rules consist of annihilation:&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/CRvxwj0UEAAq2WI.png&quot;&gt;&lt;br /&gt;&lt;br /&gt;and propagation:&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/CRvxwkPVAAEhtmF.png&quot;&gt;&lt;br /&gt;&lt;br /&gt;where i &amp;lt; j.&lt;br /&gt;&lt;br /&gt;The problem is that, in case of an arbitrary λK-term, reduction of such an interaction net has to avoid interactions in parts of the net that are disconnected from the interface; otherwise, it may not reach the normal form.&lt;br /&gt;&lt;br /&gt;It appears that in order to allow safe reduction without restricting evaluation strategy, it is sufficient to change initial encoding to &amp;lt;x | Eval(x) = [M]&lt;sub&gt;0&lt;/sub&gt;&amp;gt; and β-reduction to @&lt;sub&gt;i&lt;/sub&gt;[x, y]&amp;nbsp;&amp;gt;&amp;lt;&amp;nbsp;λ&lt;sub&gt;i&lt;/sub&gt;[Wait(z, Hold(z, x)), y], introducing additional agent types Eval, Wait, Hold, Call and Decide with the following interaction rules:&lt;br /&gt;&lt;br /&gt;Eval[λ&lt;sub&gt;i&lt;/sub&gt;(x, y)]&amp;nbsp;&amp;gt;&amp;lt;&amp;nbsp;λ&lt;sub&gt;i&lt;/sub&gt;[x, Eval(y)];&lt;br /&gt;Eval[δ&lt;sub&gt;i&lt;/sub&gt;(x, y)]&amp;nbsp;&amp;gt;&amp;lt;&amp;nbsp;δ&lt;sub&gt;i&lt;/sub&gt;[x, y];&lt;br /&gt;Eval[x]&amp;nbsp;&amp;gt;&amp;lt;&amp;nbsp;Wait[Eval(x), Call];&lt;br /&gt;Call&amp;nbsp;&amp;gt;&amp;lt;&amp;nbsp;Hold[x, Eval(x)];&lt;br /&gt;δ&lt;sub&gt;i&lt;/sub&gt;[Wait(x, Amb(y, Decide(z, v), v)), Wait(w, y)]&amp;nbsp;&amp;gt;&amp;lt;&amp;nbsp;Wait[δ&lt;sub&gt;i&lt;/sub&gt;(x, w), z];&lt;br /&gt;Call&amp;nbsp;&amp;gt;&amp;lt;&amp;nbsp;Decide[Call, ε];&lt;br /&gt;ε&amp;nbsp;&amp;gt;&amp;lt;&amp;nbsp;Decide[x, x];&lt;br /&gt;@&lt;sub&gt;i&lt;/sub&gt;[x, Wait(y, Hold(@&lt;sub&gt;i&lt;/sub&gt;(x, y), Wait(v, w)))]&amp;nbsp;&amp;gt;&amp;lt;&amp;nbsp;Wait[v, w];&lt;br /&gt;α[Wait(x, y)]&amp;nbsp;&amp;gt;&amp;lt;&amp;nbsp;Wait[α(x), y],&lt;br /&gt;&lt;br /&gt;where α is a bracket or a croissant, and Amb(x, y, z) is McCarthy&apos;s amb, x representing its second principle port.&lt;br /&gt;&lt;br /&gt;This token-passing net version of optimal reduction is implemented on the &lt;a href=&quot;https://github.com/codedot/lambda/tree/optimal&quot;&gt;&lt;code&gt;optimal&lt;/code&gt; branch&lt;/a&gt; of the MLC repository.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=174955&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://codedot.dreamwidth.org/174955.html</comments>
  <category>lambda calculus</category>
  <category>ideas</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://codedot.dreamwidth.org/174820.html</guid>
  <pubDate>Fri, 11 Sep 2015 15:04:39 GMT</pubDate>
  <title>Copy-on-Demand in Interaction Nets</title>
  <link>https://codedot.dreamwidth.org/174820.html</link>
  <description>Using McCarthy&apos;s amb agent:&lt;br /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/COoWj9IWUAAV7k4.png&quot;&gt;&lt;br /&gt;you can represent copy-on-demand in interaction nets:&lt;br /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/COoWj9oW8AEEeja.png&quot;&gt;&lt;br /&gt;with the following interaction rules:&lt;br /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/COoWj8uW8AAQO-b.png&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=174820&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://codedot.dreamwidth.org/174820.html</comments>
  <category>ideas</category>
  <category>lambda calculus</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://codedot.dreamwidth.org/168459.html</guid>
  <pubDate>Sat, 08 Feb 2014 10:00:34 GMT</pubDate>
  <title>Проект P2Pinet</title>
  <link>https://codedot.dreamwidth.org/168459.html</link>
  <description>В связи с идеей &lt;a href=&quot;http://codedot.dreamwidth.org/168278.html&quot;&gt;распределенных сетей взаимодействия&lt;/a&gt;, хотелось бы вернуться к проекту компилятора &lt;code&gt;inet&lt;/code&gt;, который используется в &lt;a href=&quot;https://github.com/euromake/mlc&quot;&gt;MLC&lt;/a&gt; для механизма read-back. Приложение было &lt;a href=&quot;https://github.com/euromake/inet&quot;&gt;реализовано&lt;/a&gt; уже после подготовки &lt;a href=&quot;http://codedot.dreamwidth.org/141368.html&quot;&gt;формального описания проекта&lt;/a&gt; и строго следуя проектной документации; имели место лишь мелкие уточнения и исправления по ходу работы.&lt;br /&gt;&lt;br /&gt;Как модифицировать компилятор &lt;code&gt;inet&lt;/code&gt;, чтобы получить вместо него распределенную универсальную P2P-сеть взаимодействия? Обозначим гипотетическую распределенную версию &lt;code&gt;inet&lt;/code&gt; как &lt;code&gt;p2pinet&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;P2P-сеть всегда основана на дублировании информации для случаев, когда одна из нод отключается от сети. Заметим, что стэк активных пар, используемый в проекте &lt;code&gt;inet&lt;/code&gt;, - это исчерпывающая информация о редуцируемой сети взаимодействия. Чаще всего (псевдо-)активная пара состоит не из двух агентов, а из агента и (псевдо-)агента &lt;code&gt;wire&lt;/code&gt;, который служит для разыменования. Последнее в случае P2P-сети служило бы простым запросом на дублирование информации.&lt;br /&gt;&lt;br /&gt;В &lt;code&gt;p2pinet&lt;/code&gt; активные пары технически нигде не хранятся в явном виде, и ноды могут даже не знать, активна ли данная конкретная связь между одним идентификатором (портом) и каким-то другим в сети. Обмен информацией и (неявное) создание новых активных пар произходило бы в такой сети с помощью операции разыменования, а собственно применение правил взаимодействия - локально на нодах ввиду нескольких причин.&lt;br /&gt;&lt;br /&gt;Во-первых, правила могут быть приватными для группы нод. Во-вторых, правила могут иметь побочные действия, как в проекте &lt;code&gt;inet&lt;/code&gt;. В-третьих, набор правил может быть бесконечным и очень сложным. Наконец, одно из правил может быть вычислительно затратно, например вычисление n-ного простого числа.&lt;br /&gt; &lt;br /&gt;Следует подчеркнуть, что сами по себе сети взаимодействия неэффективны с вычислительной точки зрения - существующие процессоры справляются с вычислительными задачами несравнимо лучше. Но оптимальная редукция, вопреки названию, вообще не рассматривает вопрос о том, как проводить собственно редукцию и не предлагает никаких решений на этот счет. Вместо этого, она предлагает стратегию для объединения работы (optimal sharing). Последнее и можно было бы позаимствовать от систем взаимодействия для оптимального разделения работы и данных между частями распределенной вычислительной системы.&lt;br /&gt;&lt;br /&gt;Конкретно эту задачу сети взаимодействия и решают на качественном уровне. Они служат своеобразным планировщиком задач, который уже, в свою очередь, управляет остальными процессорами как устройствами, чем-то похожим на OpenCL образом. Однако, в отличие от OpenCL (который тоже, в принципе, может быть использован в распределенной сети), сети взаимодействия позволили бы делать и само планирование децентрализованным, при этом избегая лишних обмена данных и дублирования работы.&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;Следующая схема иллюстрирует, как может быть представлена активная пара в распределенной децентрализованной сети взаимодействия (уникальные адреса и множество соединений вместо единого стека активных пар в случае компилятора &lt;code&gt;inet&lt;/code&gt;):&lt;br /&gt;&lt;br /&gt;[{нода x} (доп. порты) = α&lt;sub&gt;1&lt;/sub&gt; - (гл. порт)] | {сеть} | [(гл. порт) - α&lt;sub&gt;2&lt;/sub&gt; = (доп. порты) {нода y}], где&lt;br /&gt;&lt;br /&gt;x может совпадать с y;&lt;br /&gt;агенты α&lt;sub&gt;i&lt;/sub&gt; могут (и должны) быть продублированы (некоторыми) другими нодами;&lt;br /&gt;все главные порты, которые не соединены с доп. портами должны быть доступны в сети с уникальным идентификатором;&lt;br /&gt;связь между двумя дополнительными портами может быть представлена с помощью псевдо-агента &lt;code&gt;wire&lt;/code&gt; из проекта &lt;code&gt;inet&lt;/code&gt;;&lt;br /&gt;деревья с корнем в α&lt;sub&gt;i&lt;/sub&gt; могут храниться локально вне сети пока сеть не редуцирует соответствующую активную пару.&lt;br /&gt;&lt;br /&gt;В качестве базовой технологии можно было использовать приближающийся стандарт &lt;a href=&quot;http://www.webrtc.org/&quot;&gt;WebRTC&lt;/a&gt;, который уже, впрочем, работает в большинстве браузеров. Он был задумал для прямого видео/аудио-общения между пользователями без нагрузки на серверы, но также позволяет обмениваться произвольными данными между браузерами.&lt;br /&gt;&lt;br /&gt;По &lt;a href=&quot;http://codedot.dreamwidth.org/161576.html&quot;&gt;астрономо-арифметическим соображениям&lt;/a&gt;, одного килобита на адрес хватает навсегда, а два килобита на уникальный идентификатор дают абсолютную гарантию отсутствия коллизий.&lt;br /&gt;&lt;br /&gt;Такие длины идентификаторов напоминают характерные длины ключей RSA. Кстати, последний имеет &lt;a href=&quot;http://en.wikipedia.org/wiki/Homomorphic_encryption#Unpadded_RSA&quot;&gt;гомоморфизм относительно умножения&lt;/a&gt;, а потому мог бы быть использован для приватных вычислений на основе той же самой распределенной вычислительной сети.&lt;br /&gt;&lt;br /&gt;В принципе, сеть вообще могла бы функционировать редко или вовсе не взаимодействующими (под)сетями, идентификаторы агентов которых зашифрованы, к примеру, группами пользователей.&lt;br /&gt;&lt;br /&gt;Формально на роль системы взаимодействия, на основе которой бы могла работать сеть, годятся, по крайней мере, следующие три варианта:&lt;br /&gt;&lt;br /&gt;а) комбинаторы взаимодействия;&lt;br /&gt;б) &lt;a href=&quot;http://arxiv.org/abs/1304.2290&quot;&gt;компактное представление λ-выражений&lt;/a&gt;;&lt;br /&gt;в) универсум.&lt;br /&gt;&lt;br /&gt;Последний предпочтительнее не только из-за неэффективности комбинаторов и функциональной чистоты λ-исчисления, но и из-за разных потребностей групп пользователей, а также возможности применить изоморфизм RSA-арифметику, используя, например, некоторые идентификаторы в качестве данных, что, в общем-то, логично, если учесть их сверх-избыточную длину.&lt;br /&gt;&lt;br /&gt;Понятно, что система взаимодействия может иметь бесконечные сигнатуру (множество типов агентов) и множество правил взаимодействия. С помощью простого дизъюнктного объединения всех возможных систем взаимодействия мы можем получить единую универсальную систему взаимодействия, чья сигнатура содержит все возможные типы агентов, а множество правил - все возможные взаимодействия.&lt;br /&gt;&lt;br /&gt;В обычной теории множеств это парадоксальная конструкция. Если ограничить множество систем взаимодействия только до тех, которые можно формализовать, то их становится счетное множество. А приняв во внимание астроно-арифметические соображения, то их вообще конечное множество с человеко-размерной длиной идентификаторов (килобит, в принципе, можно передать одним SMS).&lt;br /&gt;&lt;br /&gt;Остается неясным как именно должно происходить применение правил взаимодействия и редукция сети. В частности, непонятно, можно ли, а если можно - то как именно производить проверку работу сети. Связанный вопрос возникает по поводу дублирования работы отстающими нодами: как держать их число на оптимальном уровне. Похоже, что требуется какой-то компромисс между числом дублирующих нод для надежности сети и неоптимальностью суммарной работы.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=168459&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://codedot.dreamwidth.org/168459.html</comments>
  <category>elementary mathematics</category>
  <category>ideas</category>
  <category>lambda calculus</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://codedot.dreamwidth.org/164928.html</guid>
  <pubDate>Tue, 02 Jul 2013 13:24:57 GMT</pubDate>
  <title>Combinational Logic for SHA-256</title>
  <link>https://codedot.dreamwidth.org/164928.html</link>
  <description>&lt;a href=&quot;http://tinyurl.com/q7yhgjq&quot;&gt;http://tinyurl.com/q7yhgjq&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;background: #ffffff; overflow:auto;width:auto;color:black;background:white;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;&quot;&gt;&lt;pre style=&quot;margin: 0; line-height: 125%&quot;&gt;&lt;span style=&quot;font-weight: bold&quot;&gt;$&lt;/span&gt; make
iverilog -Wall -DSIM -o comb comb.v
./comb
0381353f9 0 b2e09fd28ea2916f526a8dbb3a92235f0ddb9b0b1ccd0e7d9b5786f91b62031e
0381353fa 1 00000000627d0f02061ce63584c20662272c527d21f17dfaffb20d7de340423d
0381353fb 0 c90dd726ebe7c2770808fe574e85aba7e90ba2aea8998c70bcb24781d4010955
&lt;span style=&quot;font-weight: bold&quot;&gt;$&lt;/span&gt; 
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=164928&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://codedot.dreamwidth.org/164928.html</comments>
  <category>howtos</category>
  <category>programming</category>
  <category>ideas</category>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://codedot.dreamwidth.org/164631.html</guid>
  <pubDate>Sat, 29 Jun 2013 08:31:24 GMT</pubDate>
  <title>Цветопередача с ошибками</title>
  <link>https://codedot.dreamwidth.org/164631.html</link>
  <description>Кто может скорректировать шестнадцатеричное число?&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 512%; background-color: #000000;&quot;&gt;&amp;nbsp;&lt;strong&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;A&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff0000;&quot;&gt;0&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;0&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #00ff00;&quot;&gt;B&lt;/span&gt;&lt;/strong&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Задействуйте свои проверочные колбочки!&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=164631&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://codedot.dreamwidth.org/164631.html</comments>
  <category>ideas</category>
  <category>humour</category>
  <category>elementary mathematics</category>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://codedot.dreamwidth.org/162528.html</guid>
  <pubDate>Thu, 13 Jun 2013 10:23:39 GMT</pubDate>
  <title>Мой второй кот на Verilog</title>
  <link>https://codedot.dreamwidth.org/162528.html</link>
  <description>&lt;div style=&quot;background: #ffffff; overflow:auto;width:auto;color:black;background:white;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;&quot;&gt;&lt;pre style=&quot;margin: 0; line-height: 125%&quot;&gt;&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;module&lt;/span&gt; brain (clk, sensor, effect);
	&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;parameter&lt;/span&gt; nbit &lt;span style=&quot;color: #303030&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;12&lt;/span&gt;;
	&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;parameter&lt;/span&gt; size &lt;span style=&quot;color: #303030&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;2&lt;/span&gt; &lt;span style=&quot;color: #303030&quot;&gt;**&lt;/span&gt; nbit;
 
	&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;input&lt;/span&gt; clk;
	&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;input&lt;/span&gt; [&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: #303030&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;0&lt;/span&gt;] sensor;
	&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;output&lt;/span&gt; [&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: #303030&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;0&lt;/span&gt;] effect;
 
	&lt;span style=&quot;color: #303090; font-weight: bold&quot;&gt;reg&lt;/span&gt; sig [&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #303030&quot;&gt;:&lt;/span&gt;size &lt;span style=&quot;color: #303030&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;1&lt;/span&gt;];
	&lt;span style=&quot;color: #303090; font-weight: bold&quot;&gt;reg&lt;/span&gt; trace [&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #303030&quot;&gt;:&lt;/span&gt;size &lt;span style=&quot;color: #303030&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;1&lt;/span&gt;];
	&lt;span style=&quot;color: #303090; font-weight: bold&quot;&gt;reg&lt;/span&gt; [nbit &lt;span style=&quot;color: #303030&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #303030&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;0&lt;/span&gt;] ram [&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #303030&quot;&gt;:&lt;/span&gt;size &lt;span style=&quot;color: #303030&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;1&lt;/span&gt;];
 
	&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;assign&lt;/span&gt; effect[&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #303030&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;0&lt;/span&gt;] &lt;span style=&quot;color: #303030&quot;&gt;=&lt;/span&gt; {sig[&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;3&lt;/span&gt;], sig[&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;2&lt;/span&gt;], sig[&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;1&lt;/span&gt;], sig[&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;0&lt;/span&gt;]};
	&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;assign&lt;/span&gt; effect[&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: #303030&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;4&lt;/span&gt;] &lt;span style=&quot;color: #303030&quot;&gt;=&lt;/span&gt; {sig[&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;7&lt;/span&gt;], sig[&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;6&lt;/span&gt;], sig[&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;5&lt;/span&gt;], sig[&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;4&lt;/span&gt;]};
 
	&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;integer&lt;/span&gt; i;
 
	&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;initial&lt;/span&gt; &lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;for&lt;/span&gt; (i &lt;span style=&quot;color: #303030&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;0&lt;/span&gt;; i &lt;span style=&quot;color: #303030&quot;&gt;&amp;lt;&lt;/span&gt; size; i &lt;span style=&quot;color: #303030&quot;&gt;=&lt;/span&gt; i &lt;span style=&quot;color: #303030&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;1&lt;/span&gt;) &lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;begin&lt;/span&gt;
		trace[i] &lt;span style=&quot;color: #303030&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;0&lt;/span&gt;;
		sig[i] &lt;span style=&quot;color: #303030&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;0&lt;/span&gt;;
		ram[i] &lt;span style=&quot;color: #303030&quot;&gt;=&lt;/span&gt; i;
	&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;end&lt;/span&gt;
 
	&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;always&lt;/span&gt; @(&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;posedge&lt;/span&gt; clk) &lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;begin&lt;/span&gt;
		&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;for&lt;/span&gt; (i &lt;span style=&quot;color: #303030&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;0&lt;/span&gt;; i &lt;span style=&quot;color: #303030&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;8&lt;/span&gt;; i &lt;span style=&quot;color: #303030&quot;&gt;=&lt;/span&gt; i &lt;span style=&quot;color: #303030&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;1&lt;/span&gt;)
			sig[ram[i]] &lt;span style=&quot;color: #303030&quot;&gt;&amp;lt;=&lt;/span&gt; sensor[i];
 
		&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;for&lt;/span&gt; (i &lt;span style=&quot;color: #303030&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;0&lt;/span&gt;; i &lt;span style=&quot;color: #303030&quot;&gt;&amp;lt;&lt;/span&gt; size; i &lt;span style=&quot;color: #303030&quot;&gt;=&lt;/span&gt; i &lt;span style=&quot;color: #303030&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;1&lt;/span&gt;) &lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;begin&lt;/span&gt;
			&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;case&lt;/span&gt; ({trace[i], sig[ram[i]]})
			&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;2&amp;#39;b00&lt;/span&gt;&lt;span style=&quot;color: #303030&quot;&gt;:&lt;/span&gt; ram[i] &lt;span style=&quot;color: #303030&quot;&gt;&amp;lt;=&lt;/span&gt; ram[i] &lt;span style=&quot;color: #303030&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;1&lt;/span&gt;;
			&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;2&amp;#39;b01&lt;/span&gt;&lt;span style=&quot;color: #303030&quot;&gt;:&lt;/span&gt; sig[i] &lt;span style=&quot;color: #303030&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;1&lt;/span&gt;;
			&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;2&amp;#39;b10&lt;/span&gt;&lt;span style=&quot;color: #303030&quot;&gt;:&lt;/span&gt; sig[i] &lt;span style=&quot;color: #303030&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;0&lt;/span&gt;;
			&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;2&amp;#39;b11&lt;/span&gt;&lt;span style=&quot;color: #303030&quot;&gt;:&lt;/span&gt; ram[i] &lt;span style=&quot;color: #303030&quot;&gt;&amp;lt;=&lt;/span&gt; ram[i] &lt;span style=&quot;color: #303030&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;1&lt;/span&gt;;
			&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;endcase&lt;/span&gt;
 
			trace[i] &lt;span style=&quot;color: #303030&quot;&gt;&amp;lt;=&lt;/span&gt; sig[ram[i]];
		&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;end&lt;/span&gt;
	&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;end&lt;/span&gt;
&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;endmodule&lt;/span&gt;
 
&lt;span style=&quot;color: #003060; font-weight: bold&quot;&gt;`ifdef&lt;/span&gt; &lt;span style=&quot;color: #003060; font-weight: bold&quot;&gt;SIM&lt;/span&gt;
&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;module&lt;/span&gt; sim;
	&lt;span style=&quot;color: #303090; font-weight: bold&quot;&gt;reg&lt;/span&gt; clk &lt;span style=&quot;color: #303030&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;0&lt;/span&gt;;
	&lt;span style=&quot;color: #303090; font-weight: bold&quot;&gt;reg&lt;/span&gt; [&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: #303030&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;0&lt;/span&gt;] key;
	&lt;span style=&quot;color: #303090; font-weight: bold&quot;&gt;wire&lt;/span&gt; [&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: #303030&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;0&lt;/span&gt;] led;
 
	brain core(clk, key, led);
 
	&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;integer&lt;/span&gt; c;
 
	&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;always&lt;/span&gt; &lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;begin&lt;/span&gt;
		c &lt;span style=&quot;color: #303030&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #F00000; background-color: #F0A0A0&quot;&gt;$&lt;/span&gt;fgetc(&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;32&amp;#39;h8000&lt;/span&gt;_0000);
		&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;if&lt;/span&gt; (&lt;span style=&quot;color: #303030&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color: #303030&quot;&gt;==&lt;/span&gt; c)
			&lt;span style=&quot;color: #007020&quot;&gt;$finish&lt;/span&gt;;
 
		key &lt;span style=&quot;color: #303030&quot;&gt;=&lt;/span&gt; c[&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: #303030&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;0&lt;/span&gt;];
		#&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;1&lt;/span&gt; clk &lt;span style=&quot;color: #303030&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #303030&quot;&gt;~&lt;/span&gt;clk;
		#&lt;span style=&quot;color: #005080; font-weight: bold&quot;&gt;1&lt;/span&gt; clk &lt;span style=&quot;color: #303030&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #303030&quot;&gt;~&lt;/span&gt;clk;
		&lt;span style=&quot;color: #F00000; background-color: #F0A0A0&quot;&gt;$&lt;/span&gt;displayb(led);
	&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;end&lt;/span&gt;
&lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;endmodule&lt;/span&gt;
&lt;span style=&quot;color: #003060; font-weight: bold&quot;&gt;`endif&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=162528&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://codedot.dreamwidth.org/162528.html</comments>
  <category>programming</category>
  <category>ideas</category>
  <category>elementary mathematics</category>
  <category>computers</category>
  <category>lambda calculus</category>
  <lj:security>public</lj:security>
  <lj:reply-count>7</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://codedot.dreamwidth.org/161576.html</guid>
  <pubDate>Wed, 29 May 2013 13:05:08 GMT</pubDate>
  <title>Tor-подобная килобитная RAM0</title>
  <link>https://codedot.dreamwidth.org/161576.html</link>
  <description>Килобит можно передать одним сообщением по SMS.&lt;br /&gt;&lt;br /&gt;При этом его достаточно, чтобы адресовать любую точку пространства-времени с точностью до &lt;a href=&quot;http://codedot.dreamwidth.org/150758.html&quot;&gt;планковских единиц измерения&lt;/a&gt; на протяжении 10&lt;sup&gt;27&lt;/sup&gt; лет, что в 10&lt;sup&gt;17&lt;/sup&gt; раз больше, чем уже прошло после момента Большого взрыва. Для сравнения, полкилобита адресуют около ста микросекунд. Для данной оценки использовался гиперобъем гиперконуса, который примерно равен гиперобъему гиперкуба со стороной, равной высоте этого гиперконуса.&lt;br /&gt;&lt;br /&gt;Таким образом, килобитных адресов хватает на любую мыслимую на сегодняшний день научную фантастику: с невероятным запасом покрываются нужды однозначной адресации для реализованных и доведенных до совершенства квантового компьютера, телепортации, машины времени и кротовых нор вместе взятых.&lt;br /&gt;&lt;br /&gt;Теперь предположим, что у нас есть хэш-функция F, похожая на &lt;a href=&quot;https://ru.wikipedia.org/wiki/SHA-2&quot;&gt;SHA-2&lt;/a&gt;, но с размером хэша и размером блока ровно в один килобит (вместо обычных 256 бит и 512-битных блоков), и способ адресации, подобный &lt;a href=&quot;http://en.wikipedia.org/wiki/.onion&quot;&gt;.onion-доменам для анонимных сервисов в сети Tor&lt;/a&gt;, причем каждый сервис хранит ровно одну килобитную ячейку памяти.&lt;br /&gt;&lt;br /&gt;Интересно было бы рассмотреть распределенную &lt;a href=&quot;http://codedot.dreamwidth.org/160095.html&quot;&gt;RAM0&lt;/a&gt;-подобную вычислительную сеть с семантикой команд, измененной следующим образом (предполагается отсутствие коллизиций на килобитных блоках):&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;background: #ffffff; overflow:auto;width:auto;color:black;background:white;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;&quot;&gt;&lt;pre style=&quot;margin: 0; line-height: 125%&quot;&gt;&lt;span style=&quot;color: #507090&quot;&gt;#define A	z = F(z)&lt;/span&gt;
&lt;span style=&quot;color: #507090&quot;&gt;#define L	z = recvkbit(z)&lt;/span&gt;
&lt;span style=&quot;color: #507090&quot;&gt;#define N	n = z&lt;/span&gt;
&lt;span style=&quot;color: #507090&quot;&gt;#define S	sendkbit(n, z)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=161576&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://codedot.dreamwidth.org/161576.html</comments>
  <category>lambda calculus</category>
  <category>computers</category>
  <category>ideas</category>
  <category>elementary mathematics</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://codedot.dreamwidth.org/160328.html</guid>
  <pubDate>Wed, 15 May 2013 13:29:27 GMT</pubDate>
  <title>Компиляция из MLC в RAM0</title>
  <link>https://codedot.dreamwidth.org/160328.html</link>
  <description>Программы на языке MLC (Macro Lambda Calculus) - пример &lt;a href=&quot;https://raw.github.com/euromake/mlc/master/example.mlc&quot;&gt;доступен&lt;/a&gt; на GitHub - имеют следующий вид:&lt;br /&gt;&lt;br /&gt;N1 = M1;&lt;br /&gt;...&lt;br /&gt;Nm = Mm;&lt;br /&gt;&lt;br /&gt;M0.&lt;br /&gt;&lt;br /&gt;Выражение M0 может содержать произвольное число вхождений имен макросов N1, ... , Nm, а также свободных переменных - обозначим их x1, ... , xn. Комбинатор M, нормальную форму которого мы фактически ищем, получается из программы следующим образом:&lt;br /&gt;&lt;br /&gt;M = x1, ... , xn: (N1, ... , Nm: M0) M1 ... Mm.&lt;br /&gt;&lt;br /&gt;Комбинатор M, в свою очередь, представим в &lt;a href=&quot;http://arxiv.org/abs/1304.1309&quot;&gt;исчислении взаимодействия&lt;/a&gt;, воспользовавшись направленной версией &lt;a href=&quot;http://arxiv.org/abs/1304.2290&quot;&gt;компактной кодировки λ-выражений&lt;/a&gt;. Заметим, что конфигурация &amp;lt;x | Γ(M, x)&amp;gt;, как можно видеть из определения, содержит только редексы по левому разыменованию. Следовательно, чтобы инициализировать нашу &lt;a href=&quot;http://codedot.dreamwidth.org/157570.html&quot;&gt;систему слепой перезаписи графов&lt;/a&gt;, достаточно все уравнения конфигурации положить в стек, соответствующий левому разыменованию.&lt;br /&gt;&lt;br /&gt;Полученную в результате структуру памяти можно восстановить некоторой последовательностью I инструкций Z, A, L, N и S машины &lt;a href=&quot;http://codedot.dreamwidth.org/160095.html&quot;&gt;RAM0&lt;/a&gt;. Основной цикл работы нашей системы слепой перезаписи графов, реализующей редукцию сетей взаимодействия, также может быть представлен некоторой последовательностью R инструкций Z, A, L, N и S, которая не зависит от вычисляемого выражения. Таким образом, исходный код на языке MLC может быть скомпилирован в следующую программу RAM0:&lt;br /&gt;&lt;br /&gt;I;&lt;br /&gt;loop: R;&lt;br /&gt;goto loop;&lt;br /&gt;&lt;br /&gt;Данная программа не содержит инструкцию C для условного перехода. Такие детали, как стратегия вычисления, остановка машины, обработка дна стеков и механизм &quot;read-back&quot; во время стягивания конфигурации, были здесь намеренно опущены, чтобы не нагромождать и без того уже объемное изложение.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=160328&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://codedot.dreamwidth.org/160328.html</comments>
  <category>ideas</category>
  <category>programming</category>
  <category>elementary mathematics</category>
  <category>lambda calculus</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://codedot.dreamwidth.org/158739.html</guid>
  <pubDate>Thu, 25 Apr 2013 10:48:47 GMT</pubDate>
  <title>Bitcoin Proof of Work in Command Line</title>
  <link>https://codedot.dreamwidth.org/158739.html</link>
  <description>&lt;div style=&quot;background: #ffffff; overflow:auto;width:auto;color:black;background:white;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;&quot;&gt;&lt;pre style=&quot;margin: 0; line-height: 125%&quot;&gt;&lt;span style=&quot;color: #c65d09; font-weight: bold&quot;&gt;$&lt;/span&gt; cat hex 
&lt;span style=&quot;color: #808080&quot;&gt;02000000&lt;/span&gt;
&lt;span style=&quot;color: #808080&quot;&gt;f40457b1&lt;/span&gt;
&lt;span style=&quot;color: #808080&quot;&gt;d005aeec&lt;/span&gt;
&lt;span style=&quot;color: #808080&quot;&gt;6e4fe577&lt;/span&gt;
&lt;span style=&quot;color: #808080&quot;&gt;f2a76dc3&lt;/span&gt;
&lt;span style=&quot;color: #808080&quot;&gt;73ef8901&lt;/span&gt;
&lt;span style=&quot;color: #808080&quot;&gt;220376b7&lt;/span&gt;
&lt;span style=&quot;color: #808080&quot;&gt;2b6de55a&lt;/span&gt;
&lt;span style=&quot;color: #808080&quot;&gt;00000000&lt;/span&gt;
&lt;span style=&quot;color: #808080&quot;&gt;bdcb52b0&lt;/span&gt;
&lt;span style=&quot;color: #808080&quot;&gt;9c48d2ee&lt;/span&gt;
&lt;span style=&quot;color: #808080&quot;&gt;26a513cb&lt;/span&gt;
&lt;span style=&quot;color: #808080&quot;&gt;cead7fb7&lt;/span&gt;
&lt;span style=&quot;color: #808080&quot;&gt;7daf4cef&lt;/span&gt;
&lt;span style=&quot;color: #808080&quot;&gt;9e2ab83b&lt;/span&gt;
&lt;span style=&quot;color: #808080&quot;&gt;bb9eb6b0&lt;/span&gt;
&lt;span style=&quot;color: #808080&quot;&gt;a7f5f990&lt;/span&gt;
&lt;span style=&quot;color: #808080&quot;&gt;fd270c51&lt;/span&gt;
&lt;span style=&quot;color: #808080&quot;&gt;378a0e1c&lt;/span&gt;
&lt;span style=&quot;color: #808080&quot;&gt;&lt;b&gt;381353fa&lt;/b&gt;&lt;/span&gt;
&lt;span style=&quot;color: #c65d09; font-weight: bold&quot;&gt;$&lt;/span&gt; xxd -r -p hex data
&lt;span style=&quot;color: #c65d09; font-weight: bold&quot;&gt;$&lt;/span&gt; shasum -a 256 data &amp;gt;hash1
&lt;span style=&quot;color: #c65d09; font-weight: bold&quot;&gt;$&lt;/span&gt; xxd -r -p hash1 bin
&lt;span style=&quot;color: #c65d09; font-weight: bold&quot;&gt;$&lt;/span&gt; shasum -a 256 bin
&lt;span style=&quot;color: #808080&quot;&gt;e340423dffb20d7d21f17dfa272c527d84c20662061ce635627d0f02&lt;b&gt;00000000&lt;/b&gt;  bin&lt;/span&gt;
&lt;span style=&quot;color: #c65d09; font-weight: bold&quot;&gt;$&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=158739&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://codedot.dreamwidth.org/158739.html</comments>
  <category>programming</category>
  <category>ideas</category>
  <category>howtos</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://codedot.dreamwidth.org/155332.html</guid>
  <pubDate>Tue, 09 Apr 2013 07:26:43 GMT</pubDate>
  <title>η-редукция в сетях взаимодействия</title>
  <link>https://codedot.dreamwidth.org/155332.html</link>
  <description>&lt;a href=&quot;http://mathoverflow.net/questions/126941/&quot;&gt;http://mathoverflow.net/questions/126941/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Существуют несколько способов представить λ-термы в &lt;a href=&quot;http://arxiv.org/pdf/1304.1309v2.pdf&quot;&gt;сетях взаимодействия&lt;/a&gt;; например, &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.90.2386&quot;&gt;алгоритм Лэмпинга для оптимальной редукции&lt;/a&gt; или &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.22.9699&quot;&gt;компиляция λ-исчисления в комбинаторы взаимодействия&lt;/a&gt;. Однако, все известные нам способы реализуют только β-редукцию, но не экстенсиональное λ-исчисление (где также есть η-редукция).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Можно ли представить λ-термы в сетях взаимодействия, реализовав βη-редукцию?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;(Нормальная форма сети для терма должна соответствовать его βη-нормальной форме.)&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=155332&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://codedot.dreamwidth.org/155332.html</comments>
  <category>ideas</category>
  <category>talks</category>
  <category>lambda calculus</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://codedot.dreamwidth.org/151273.html</guid>
  <pubDate>Wed, 27 Feb 2013 15:51:43 GMT</pubDate>
  <title>P^n_i из одной примитивной операции</title>
  <link>https://codedot.dreamwidth.org/151273.html</link>
  <description>Мы уже затрагивали переход от условного выражения к функциям-проекциям для конечных последовательностей, когда обсуждали &lt;a href=&quot;http://codedot.dreamwidth.org/116789.html&quot;&gt;логические операции без сравнений&lt;/a&gt;. Однако, теперь мы можем обобщить также условное выражение, реализованное с помощью &lt;i&gt;одной&lt;/i&gt; примитивной операции, а не двух, как раньше. Мы будем опираться на определения и обозначения, введенные при рассмотрении &lt;a href=&quot;http://codedot.dreamwidth.org/150288.html&quot;&gt;GRS из одной примитивной операции&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Благодаря незамысловатому разделению памяти, для представления всех функций-проекций для последовательностей длиной n или менее элементов, нам потребуется ровно n нод:&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://pbs.twimg.com/media/BEHuKBjCAAEyzNL.jpg&quot; alt=&quot;&quot;&gt;&lt;br /&gt;&lt;br /&gt;Заметим, что условное выражение B M N &quot;если B, то M, иначе N&quot;, где &quot;истина&quot; T = λxy.x и &quot;ложь&quot; F = λxy.y, является частным случаем конструкций выше.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=151273&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://codedot.dreamwidth.org/151273.html</comments>
  <category>lambda calculus</category>
  <category>ideas</category>
  <category>elementary mathematics</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://codedot.dreamwidth.org/150758.html</guid>
  <pubDate>Tue, 19 Feb 2013 03:25:53 GMT</pubDate>
  <title>Планковское машинное слово</title>
  <link>https://codedot.dreamwidth.org/150758.html</link>
  <description>Знаете ли вы, что 256 бит достаточно, чтобы хранить свыше 10&lt;sup&gt;16&lt;/sup&gt; возрастов Вселенной в планковских единицах измерения времени? Это наименьшая степень двойки, дающая достаточно места, чтобы хранить возраст, диаметр и массу Вселенной в планковских единицах измерения:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Planck_units&quot;&gt;http://en.wikipedia.org/wiki/Planck_units&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Предлагаю отныне не мелочиться, а выбрать машинное слово размером в 32 байта раз и навсегда.&lt;br /&gt;&lt;br /&gt;Тип &lt;code&gt;uint256_t&lt;/code&gt; - наше &lt;i&gt;все&lt;/i&gt;! В прямом смысле этого слова.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;background: #ffffff; overflow:auto;width:auto;color:black;background:white;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;&quot;&gt;&lt;pre style=&quot;margin: 0; line-height: 125%&quot;&gt;&lt;span style=&quot;color: #507090&quot;&gt;#include &amp;lt;inttypes.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #507090&quot;&gt;#include &amp;lt;stdint.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #507090&quot;&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #507090&quot;&gt;#include &amp;lt;time.h&amp;gt;&lt;/span&gt;

main()
{
        uint256_t age &lt;span style=&quot;color: #303030&quot;&gt;=&lt;/span&gt; getage();

        printf(&lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;Happy %&amp;quot;&lt;/span&gt; PRIu256 &lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot; Planck times!&lt;/span&gt;&lt;span style=&quot;color: #606060; font-weight: bold; background-color: #fff0f0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0&quot;&gt;&amp;quot;&lt;/span&gt;, age);

        &lt;span style=&quot;color: #008000; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000D0; font-weight: bold&quot;&gt;0&lt;/span&gt;;
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=150758&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://codedot.dreamwidth.org/150758.html</comments>
  <category>elementary mathematics</category>
  <category>humour</category>
  <category>ideas</category>
  <category>computers</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
</channel>
</rss>
