<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<feed xmlns="http://www.w3.org/2005/Atom">

	<title>Russian Lambda Planet</title>
	<link rel="self" href="http://fprog.ru/planet/atom.xml"/>
	<link href="http://fprog.ru/planet/"/>
	<id>http://fprog.ru/planet/atom.xml</id>
	<updated>2022-02-06T00:00:39+00:00</updated>
	<generator uri="http://www.planetplanet.org/">Planet/2.0 +http://www.planetplanet.org</generator>

	<entry>
		<title type="html"></title>
		<link href="http://turtle-bazon.blogspot.com/2020/01/cl-maxminddb-maxmind.html"/>
		<id>tag:blogger.com,1999:blog-580366472652257422.post-5873833782209215040</id>
		<updated>2020-01-24T13:13:38+00:00</updated>
		<content type="html">&lt;div dir=&quot;ltr&quot;&gt;&lt;h2&gt;&lt;b&gt;cl-maxminddb&lt;/b&gt;&lt;/h2&gt;&lt;div&gt;В общем, нужно было делать запрос к базам &lt;a href=&quot;https://maxmind.github.io/MaxMind-DB/&quot;&gt;MaxMind&lt;/a&gt;. Не нашёл ничего вменяемого под CL. Хотел было быстренько сделать биндинги к си библиотеке, но там были передачи значений на стеке, что-то я запутался и подумал, что можно и нативно налабать. В общем, накидал. Читает, правда без всякой обработки ошибок в том плане, что версия БД и т.д. прочие вещи, которые можно было бы сделать. Но он работает. :) Вот &lt;a href=&quot;https://github.com/turtle-bazon/cl-maxminddb&quot;&gt;код&lt;/a&gt;. Собственно, небольшой пример:&lt;/div&gt;&lt;br /&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;&lt;pre&gt;&lt;span&gt;&amp;gt; (with-mmdb (mmdb &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;/var/lib/GeoIP/GeoLite2-City.mmdb&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;)&lt;br /&gt;    (mmdb-query mmdb &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;8.8.8.8&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;))&lt;br /&gt;&lt;br /&gt;((&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;continent&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;code&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;NA&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;) (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;geoname_id&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-c1&quot;&gt;6255149&lt;/span&gt;)&lt;br /&gt;  (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;names&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;de&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;Nordamerika&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;) (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;en&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;North America&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;)&lt;br /&gt;   (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;es&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;Norteamérica&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;) (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;fr&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;Amérique du Nord&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;) (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;ja&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;北アメリカ&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;)&lt;br /&gt;   (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;pt-BR&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;América do Norte&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;) (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;ru&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;Северная Америка&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;)&lt;br /&gt;   (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;zh-CN&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;北美洲&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;)))&lt;br /&gt; (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;country&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;geoname_id&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-c1&quot;&gt;6252001&lt;/span&gt;) (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;iso_code&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;US&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;)&lt;br /&gt;  (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;names&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;de&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;USA&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;) (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;en&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;United States&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;) (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;es&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;Estados Unidos&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;)&lt;br /&gt;   (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;fr&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;États-Unis&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;) (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;ja&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;アメリカ合衆国&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;) (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;pt-BR&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;Estados Unidos&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;)&lt;br /&gt;   (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;ru&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;США&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;) (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;zh-CN&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;美国&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;)))&lt;br /&gt; (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;location&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;accuracy_radius&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-c1&quot;&gt;1000&lt;/span&gt;) (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;latitude&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-c1&quot;&gt;37.&lt;/span&gt;751d0)&lt;br /&gt;  (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;longitude&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . -&lt;span class=&quot;pl-c1&quot;&gt;97.&lt;/span&gt;822d0) (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;time_zone&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;America/Chicago&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;))&lt;br /&gt; (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;registered_country&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;geoname_id&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-c1&quot;&gt;6252001&lt;/span&gt;) (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;iso_code&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;US&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;)&lt;br /&gt;  (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;names&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;de&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;USA&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;) (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;en&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;United States&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;) (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;es&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;Estados Unidos&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;)&lt;br /&gt;   (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;fr&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;États-Unis&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;) (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;ja&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;アメリカ合衆国&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;) (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;pt-BR&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;Estados Unidos&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;)&lt;br /&gt;   (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;ru&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;США&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;) (&lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;zh-CN&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; . &lt;span class=&quot;pl-s&quot;&gt;&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;美国&lt;span class=&quot;pl-pds&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;))))&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;/div&gt;</content>
		<author>
			<name>turtle</name>
			<email>noreply@blogger.com</email>
			<uri>http://turtle-bazon.blogspot.com/search/label/lisp</uri>
		</author>
		<source>
			<title type="html">Turtle//BAZON</title>
			<link rel="self" href="http://turtle-bazon.blogspot.com/feeds/posts/default/-/lisp"/>
			<id>tag:blogger.com,1999:blog-580366472652257422</id>
			<updated>2021-12-05T03:30:09+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Guile 2.0 и парсинг xml в несколько потоков</title>
		<link href="http://turtle-bazon.blogspot.com/2019/04/guile-20-xml.html"/>
		<id>tag:blogger.com,1999:blog-580366472652257422.post-6786999940402501000</id>
		<updated>2019-04-05T11:46:26+00:00</updated>
		<content type="html">&lt;div dir=&quot;ltr&quot;&gt;&lt;div&gt;Вчера столкнулся с ещё одной странностью в guile. При использовании библиотеки sxml для парсинга xml, соотвественно, всё кажется нормальным, пока парсинг идёт в одном потоке. Но как только потоков несколько, то сразу начинается веселье - xml не парсятся, жалуются на отсутствие нужных закрывающих тегов и прочая ерунда, которая говорит о том, что входные данные неправильные. Это в версии 2.0. Версию 2.2 не проверял из-за того, что её как-то геморнее устанавливать и непонятно надо ли. Пришлось на процесс парсинга делать мютекс и захватывать его на время парсинга. Но что-то какое ощущение, что поделка сугубо студенческая.&lt;/div&gt;&lt;/div&gt;</content>
		<author>
			<name>turtle</name>
			<email>noreply@blogger.com</email>
			<uri>http://turtle-bazon.blogspot.com/search/label/lisp</uri>
		</author>
		<source>
			<title type="html">Turtle//BAZON</title>
			<link rel="self" href="http://turtle-bazon.blogspot.com/feeds/posts/default/-/lisp"/>
			<id>tag:blogger.com,1999:blog-580366472652257422</id>
			<updated>2021-12-05T03:30:09+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html"></title>
		<link href="http://turtle-bazon.blogspot.com/2019/02/racket.html"/>
		<id>tag:blogger.com,1999:blog-580366472652257422.post-6989101571348598706</id>
		<updated>2019-02-27T11:02:06+00:00</updated>
		<content type="html">&lt;div dir=&quot;ltr&quot;&gt;&lt;div&gt;Если хочется какой-то вменяемой разработки на схеме, то лучше брать Racket. Он значительно удобнее и проще. Опыт использования guile показал мне только боль и печаль. Причём сам он неплох, но нужно использовать свежие версии, а свежих версий в Debian Stable нет. Там 2.0 только. А в 2.0 guile, грёбаный стыд, нельзя сделать https запрос. И с 2.0 версией не работает емаксовый плагин. :( В общем, кто будет что начинать на схеме - только Racket. Там всё более развито. А если так смотреть, то вместо схемы лучше взять Common Lisp. Он как-то ближе и проще. :)&lt;/div&gt;&lt;/div&gt;</content>
		<author>
			<name>turtle</name>
			<email>noreply@blogger.com</email>
			<uri>http://turtle-bazon.blogspot.com/search/label/lisp</uri>
		</author>
		<source>
			<title type="html">Turtle//BAZON</title>
			<link rel="self" href="http://turtle-bazon.blogspot.com/feeds/posts/default/-/lisp"/>
			<id>tag:blogger.com,1999:blog-580366472652257422</id>
			<updated>2021-12-05T03:30:09+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">arXiv:1808.06351 [cs.LO]</title>
		<link href="https://codedot.dreamwidth.org/182952.html"/>
		<id>tag:dreamwidth.org,2013-01-03:1881992:182952</id>
		<updated>2018-08-21T04:58:01+00:00</updated>
		<content type="html">&lt;a href=&quot;https://arxiv.org/abs/1808.06351&quot;&gt;https://arxiv.org/abs/1808.06351&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Lambda Calculus with Explicit Read-back&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This paper introduces a new term rewriting system that is similar to the embedded read-back mechanism for interaction nets presented in our previous work, but is easier to follow than in the original setting and thus to analyze its properties. Namely, we verify that it correctly represents the lambda calculus. Further, we show that there is exactly one reduction sequence that starts with any term in our term rewriting system. Finally, we represent the leftmost strategy which is known to be normalizing.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=182952&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; /&gt; comments</content>
		<author>
			<name>Anton Salikhmetov</name>
			<uri>https://codedot.dreamwidth.org/</uri>
		</author>
		<source>
			<title type="html">Anton Salikhmetov</title>
			<subtitle type="html">Anton Salikhmetov</subtitle>
			<link rel="self" href="http://codedot.dreamwidth.org/data/atom?tag=lambda+calculus"/>
			<id>tag:dreamwidth.org,2013-01-03:1881992</id>
			<updated>2019-01-15T07:00:04+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Missing equivalence in the interaction calculus</title>
		<link href="https://codedot.dreamwidth.org/182592.html"/>
		<id>tag:dreamwidth.org,2013-01-03:1881992:182592</id>
		<updated>2018-07-04T08:55:19+00:00</updated>
		<content type="html">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; /&gt; comments</content>
		<author>
			<name>Anton Salikhmetov</name>
			<uri>https://codedot.dreamwidth.org/</uri>
		</author>
		<source>
			<title type="html">Anton Salikhmetov</title>
			<subtitle type="html">Anton Salikhmetov</subtitle>
			<link rel="self" href="http://codedot.dreamwidth.org/data/atom?tag=lambda+calculus"/>
			<id>tag:dreamwidth.org,2013-01-03:1881992</id>
			<updated>2019-01-15T07:00:04+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">arXiv:1806.07275 [cs.LO]</title>
		<link href="https://codedot.dreamwidth.org/182141.html"/>
		<id>tag:dreamwidth.org,2013-01-03:1881992:182141</id>
		<updated>2018-06-29T04:35:31+00:00</updated>
		<content type="html">&lt;a href=&quot;https://arxiv.org/abs/1806.07275&quot;&gt;https://arxiv.org/abs/1806.07275&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Upward confluence in the interaction calculus&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The lambda calculus is not upward confluent, one of counterexamples being known due to Plotkin. This paper explores upward confluence in the interaction calculus. Can an interaction system have this property? We positively answer this question and also provide a necessary and sufficient condition for stronger one-step upward confluence. However, the provided condition is not necessary for upward confluence as we prove that the interaction system of the linear lambda calculus is upward confluent.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=182141&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; /&gt; comments</content>
		<author>
			<name>Anton Salikhmetov</name>
			<uri>https://codedot.dreamwidth.org/</uri>
		</author>
		<source>
			<title type="html">Anton Salikhmetov</title>
			<subtitle type="html">Anton Salikhmetov</subtitle>
			<link rel="self" href="http://codedot.dreamwidth.org/data/atom?tag=lambda+calculus"/>
			<id>tag:dreamwidth.org,2013-01-03:1881992</id>
			<updated>2019-01-15T07:00:04+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Обратное свойство ромба</title>
		<link href="https://codedot.dreamwidth.org/182004.html"/>
		<id>tag:dreamwidth.org,2013-01-03:1881992:182004</id>
		<updated>2018-06-03T09:40:36+00:00</updated>
		<content type="html">Я тут задумался об &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; /&gt; comments</content>
		<author>
			<name>Anton Salikhmetov</name>
			<uri>https://codedot.dreamwidth.org/</uri>
		</author>
		<source>
			<title type="html">Anton Salikhmetov</title>
			<subtitle type="html">Anton Salikhmetov</subtitle>
			<link rel="self" href="http://codedot.dreamwidth.org/data/atom?tag=lambda+calculus"/>
			<id>tag:dreamwidth.org,2013-01-03:1881992</id>
			<updated>2019-01-15T07:00:04+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Cofree Will Tear Us Apart</title>
		<link href="https://ruhaskell.org/posts/packages/2018/05/23/cofree-will-tear-us-apart.html"/>
		<id>https://ruhaskell.org/posts/packages/2018/05/23/cofree-will-tear-us-apart.html</id>
		<updated>2018-05-23T00:00:00+00:00</updated>
		<content type="html">Речь пойдет о том, как всего одна несущая алгебраическая конструкция позволила решить задачу рециркулирующих данных в общем виде.</content>
		<author>
			<name>ruhaskell.org</name>
			<uri>https://ruhaskell.org</uri>
		</author>
		<source>
			<title type="html">ruHaskell</title>
			<subtitle type="html">Русскоязычное сообщество Haskell-разработчиков</subtitle>
			<link rel="self" href="http://ruhaskell.org/feed.xml"/>
			<id>http://ruhaskell.org/feed.xml</id>
			<updated>2018-09-06T16:30:28+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Haskell + Raspberry Pi Zero W = шаг в embedded-мир</title>
		<link href="https://ruhaskell.org/posts/projects/2018/05/19/haskell-on-raspberry-pi.html"/>
		<id>https://ruhaskell.org/posts/projects/2018/05/19/haskell-on-raspberry-pi.html</id>
		<updated>2018-05-19T00:00:00+00:00</updated>
		<content type="html">Haskell универсален, не так ли? А запустим-ка его на новеньком Raspberry Pi Zero W.</content>
		<author>
			<name>ruhaskell.org</name>
			<uri>https://ruhaskell.org</uri>
		</author>
		<source>
			<title type="html">ruHaskell</title>
			<subtitle type="html">Русскоязычное сообщество Haskell-разработчиков</subtitle>
			<link rel="self" href="http://ruhaskell.org/feed.xml"/>
			<id>http://ruhaskell.org/feed.xml</id>
			<updated>2018-09-06T16:30:28+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Слышь, у тебя функциональщина в репе есть? А если найду?!</title>
		<link href="https://nponeccop.livejournal.com/588340.html"/>
		<id>urn:lj:livejournal.com:atom1:nponeccop:588340</id>
		<updated>2018-03-12T19:37:55+00:00</updated>
		<content type="html">&lt;a href=&quot;http://qr.ae/TU801T&quot; rel=&quot;nofollow&quot;&gt;What are the criteria for a programming to be called functional?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Я там предложил определять критерий самостоятельно в зависимости от того что любишь, а что хейтишь. Забавно, что другой ответ на кворе про ленивость вписывается в эту концепцию :)</content>
		<author>
			<name>Andy Melnikov</name>
			<uri>https://nponeccop.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Дважды мудак</title>
			<subtitle type="html">Почти исключительно о функциональном</subtitle>
			<link rel="self" href="http://nponeccop.livejournal.com/data/atom?tag=fp"/>
			<id>urn:lj:livejournal.com:atom1:nponeccop</id>
			<updated>2018-03-14T11:00:40+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Тьюринг-полнота говно и у неё нет пиписьки</title>
		<link href="https://nponeccop.livejournal.com/588087.html"/>
		<id>urn:lj:livejournal.com:atom1:nponeccop:588087</id>
		<updated>2018-03-03T23:30:28+00:00</updated>
		<content type="html">Теперь и на кворе: &lt;a href=&quot;http://qr.ae/TU8m84&quot; rel=&quot;nofollow&quot;&gt;http://qr.ae/TU8m84&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Попытался там насрать своими старыми идеями о том что тьюринг-полнота &amp;mdash; это совершенно бесполезное свойство. Интересно, кстати, что если налетят любители идеи, что С неполон (я считаю, что он неполон &quot;на самом деле&quot;), у меня для них есть домашняя заготовка.</content>
		<author>
			<name>Andy Melnikov</name>
			<uri>https://nponeccop.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Дважды мудак</title>
			<subtitle type="html">Почти исключительно о функциональном</subtitle>
			<link rel="self" href="http://nponeccop.livejournal.com/data/atom?tag=fp"/>
			<id>urn:lj:livejournal.com:atom1:nponeccop</id>
			<updated>2018-03-14T11:00:40+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Лекции по функциональному программированию на Haskell</title>
		<link href="https://alexey-rom.livejournal.com/58840.html"/>
		<id>urn:lj:livejournal.com:atom1:alexey_rom:58840</id>
		<updated>2018-03-03T19:33:18+00:00</updated>
		<content type="html">В этом году наконец решил, как давно планировал, не просто писать лекции по Haskell на доске, а сделать нормальные слайды.&lt;br /&gt;&lt;br /&gt;Первые 4 лекции выложены на &lt;a href=&quot;https://github.com/alexeyr/miet-haskell-course/&quot; rel=&quot;nofollow&quot;&gt;https://github.com/alexeyr/miet-haskell-course/&lt;/a&gt;, остальные будут по ходу семестра.</content>
		<author>
			<name>alexey_rom</name>
			<uri>https://alexey-rom.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Alexey Romanov</title>
			<subtitle type="html">Logic, Programming and Everything</subtitle>
			<link rel="self" href="http://alexey-rom.livejournal.com/data/atom?tag=haskell,erlang,coq,declarative,scala,%D0%A4%D0%9F"/>
			<id>urn:lj:livejournal.com:atom1:alexey_rom</id>
			<updated>2018-03-14T16:00:24+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Полезным идиотам хуёиды нинужны!</title>
		<link href="https://nponeccop.livejournal.com/586882.html"/>
		<id>urn:lj:livejournal.com:atom1:nponeccop:586882</id>
		<updated>2018-02-16T23:38:11+00:00</updated>
		<content type="html">&lt;a href=&quot;https://www.quora.com/Why-do-people-count-from-0-in-computer-science-Is-that-a-natural-choice&quot; rel=&quot;nofollow&quot;&gt;https://www.quora.com/Why-do-people-count-from-0-in-computer-science-Is-that-a-natural-choice&lt;/a&gt;</content>
		<author>
			<name>Andy Melnikov</name>
			<uri>https://nponeccop.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Дважды мудак</title>
			<subtitle type="html">Почти исключительно о функциональном</subtitle>
			<link rel="self" href="http://nponeccop.livejournal.com/data/atom?tag=fp"/>
			<id>urn:lj:livejournal.com:atom1:nponeccop</id>
			<updated>2018-03-14T11:00:40+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Exhausting Combinators</title>
		<link href="https://codedot.dreamwidth.org/181371.html"/>
		<id>tag:dreamwidth.org,2013-01-03:1881992:181371</id>
		<updated>2018-02-08T18:06:50+00:00</updated>
		<content type="html">&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)'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; /&gt; comments</content>
		<author>
			<name>Anton Salikhmetov</name>
			<uri>https://codedot.dreamwidth.org/</uri>
		</author>
		<source>
			<title type="html">Anton Salikhmetov</title>
			<subtitle type="html">Anton Salikhmetov</subtitle>
			<link rel="self" href="http://codedot.dreamwidth.org/data/atom?tag=lambda+calculus"/>
			<id>tag:dreamwidth.org,2013-01-03:1881992</id>
			<updated>2019-01-15T07:00:04+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">ну всё теперь</title>
		<link href="https://thedeemon.livejournal.com/124680.html"/>
		<id>urn:lj:livejournal.com:atom1:thedeemon:124680</id>
		<updated>2018-01-29T05:18:14+00:00</updated>
		<content type="html">&lt;img src=&quot;https://screenshotscdn.firefoxusercontent.com/images/aed1dc39-2c69-42e6-bfe1-242b07d69137.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;(сам внезапно набирающий популярность ответ &lt;a href=&quot;https://www.quora.com/When-should-I-use-OCaml-over-Haskell/answer/Dmitry-Popov-6&quot; rel=&quot;nofollow&quot;&gt;здесь&lt;/a&gt;)</content>
		<author>
			<name>Dmitry Popov</name>
			<uri>https://thedeemon.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Dee Mon. Былое и думы</title>
			<subtitle type="html">Dmitry Popov</subtitle>
			<link rel="self" href="http://thedeemon.livejournal.com/data/atom?tag=fp,ocaml,haskell,icfpc"/>
			<id>urn:lj:livejournal.com:atom1:thedeemon</id>
			<updated>2018-03-14T14:00:14+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">State of the Haskell ecosystem</title>
		<link href="https://nponeccop.livejournal.com/585864.html"/>
		<id>urn:lj:livejournal.com:atom1:nponeccop:585864</id>
		<updated>2018-01-27T22:42:38+00:00</updated>
		<content type="html">Гонзалес тут написал мегаобзор того, что в х-е работает, а что написано академиками и школотой:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/Gabriel439/post-rfc/blob/master/sotu.md&quot; rel=&quot;nofollow&quot;&gt;https://github.com/Gabriel439/post-rfc/blob/master/sotu.md&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Шлите ему PRs если он чего упустил!</content>
		<author>
			<name>Andy Melnikov</name>
			<uri>https://nponeccop.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Дважды мудак</title>
			<subtitle type="html">Почти исключительно о функциональном</subtitle>
			<link rel="self" href="http://nponeccop.livejournal.com/data/atom?tag=fp"/>
			<id>urn:lj:livejournal.com:atom1:nponeccop</id>
			<updated>2018-03-14T11:00:40+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">В копилку универсальных шаблонов</title>
		<link href="https://nponeccop.livejournal.com/585658.html"/>
		<id>urn:lj:livejournal.com:atom1:nponeccop:585658</id>
		<updated>2018-01-24T15:25:10+00:00</updated>
		<content type="html">&lt;a href=&quot;https://nponeccop.livejournal.com/585243.html?thread=5156123#t5156123&quot;&gt;https://nponeccop.livejournal.com/585243.html?thread=5156123#t5156123&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Вот поэтому в отличии от X (который заточен для решения практических задач, а не для дрочьбы вприсядку) оно и не взлетело. А для того, чтобы дрочить вприсядку, сейчас пилят Y, такие же наркоманы. Потом, когда на Y хер уже не будет стоять достаточно твердо, придумают еще что-нибудь. Это такой бесконечный круговорот наркомании.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://nponeccop.livejournal.com/585243.html?thread=5159707#t5159707&quot;&gt;https://nponeccop.livejournal.com/585243.html?thread=5159707#t5159707&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&amp;gt; почему X не относится к легаси?&lt;br /&gt;&lt;br /&gt;На нём делают новые проекты - т.е. он не из серии «я не помню статей &quot;для нашего нового проекта мы выбрали X....&quot;»</content>
		<author>
			<name>Andy Melnikov</name>
			<uri>https://nponeccop.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Дважды мудак</title>
			<subtitle type="html">Почти исключительно о функциональном</subtitle>
			<link rel="self" href="http://nponeccop.livejournal.com/data/atom?tag=fp"/>
			<id>urn:lj:livejournal.com:atom1:nponeccop</id>
			<updated>2018-03-14T11:00:40+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Обзор языков - 2018</title>
		<link href="https://nponeccop.livejournal.com/585243.html"/>
		<id>urn:lj:livejournal.com:atom1:nponeccop:585243</id>
		<updated>2018-01-23T20:04:18+00:00</updated>
		<content type="html">Если писать не о чем - напишите обзор ЯП на основе какого-нибудь измерения пиписек в попугаях!&lt;br /&gt;&lt;br /&gt;Берем Tiobe index и группируем &quot;по семействам&quot;. Получаем:&lt;br /&gt;&lt;br /&gt;- Нестыдные языки для промышленных зрелых практиков с кредитом и детьми. На собеседовании ничего объяснять не надо: Java/C++/С/C#/Python/Javascript/PHP/Ruby/SQL&lt;br /&gt;&lt;br /&gt;- Нишевые языки, надо объяснять что это за язык и что за ниша и что это не такая и экзотика: R/ Swift/Objective-C/Matlab/Scratch/asm/Go&lt;br /&gt;- Лигаси языки: VB.net, Perl, Delphi&lt;br /&gt;&lt;br /&gt;Из нестыдных можно вычеркнуть языки, вместо которых можно учить аналогичные: C, C#, PHP, Ruby учить не нужно. Получается, что нужно: Java, C++, Python, Javascript, SQL. Причём имеет смысл учить комплектами:&lt;br /&gt;&lt;br /&gt;- С++ самодостаточен&lt;br /&gt;- Java+Javascript&lt;br /&gt;- Python+Javascript&lt;br /&gt;&lt;br /&gt;SQL это как бы не &quot;язык&quot;, а &quot;технология&quot;, наряду с noSQL и ORM и даже (с натяжкой) мессаджингом и прочим миддлваре. Аналогично HTML/CSS/DOM. Короче они в отдельном от языков списке изучения идут, примерно в том же, где и алгоритмы с проектированием.&lt;br /&gt;&lt;br /&gt;В-общем, ничего нового, этот список (С++, Java, Python, Javascript, SQL) не менялся наверное последние лет 10. В 1998 был бы скорее С++, Perl, Scheme, SQL.&lt;br /&gt;&lt;br /&gt;Кроме этого списка есть список 9 языков, на которых можно начинать новые проекты в 2018, который я составил, используя modulecounts.com:&lt;br /&gt;&lt;br /&gt;Первый эшелон (либ больше чем в перле): Java, C#, Python, Ruby, NodeJS, PHP&lt;br /&gt;Второй эшелон (либ меньше чем в перле): Clojure, Go, Rust&lt;br /&gt;Эшелон упоротых (либ меньше чем в расте но хоть сколько-то): Haskell, R и Erlang.&lt;br /&gt;Эшелон альтернативно упоротых (там совсем по-другому): С, C++&lt;br /&gt;&lt;br /&gt;Причём Раст догнал и перегнал хаскель (идущий в ногу с R) за последний год. А в Эрланге в 3 раза меньше пекеджей чем в х-е (&quot;по версии modulescount&quot;)&lt;br /&gt;&lt;br /&gt;Ещё можно составить список &quot;почётных провалов&quot;:&lt;br /&gt;- idris, coq/ocaml, ats&lt;br /&gt;- elm, purescript, typescript&lt;br /&gt;- D, lua, scala, kotlin, julia&lt;br /&gt;&lt;br /&gt;Если вычесть из списка топ-50 языков тиобе вышеперечисленные, то останутся:&lt;br /&gt;&lt;br /&gt;Странные &quot;проприетарные&quot; языки: Apex, SAS, Codesys&lt;br /&gt;Матерые старички: Lisp, Bash, Prolog, Tcl, VHDL, ActionScript, COBOL, ABAP, Logo, Ada, REXX, Fortran, LabVIEW&lt;br /&gt;Всякие невыстрелившие: F#, Groovy, Hack, Dart, Alice&lt;br /&gt;&lt;br /&gt;Призы зрительских симпатий уходят ноде, тайпскрипту, элму, расту, го, haxe, flow, codesys, перлу, vb.net и котлину!&lt;br /&gt;&lt;br /&gt;Кстати, есть ещё языки, на которых (в определённых кругах) писать нельзя. Это:&lt;br /&gt;&lt;br /&gt;- лиспы (скобочки!)&lt;br /&gt;- перл, с++, javascript (большие неконсистентные языки)&lt;br /&gt;- С, С++, D, Rust (нет gc или безопасности памяти)&lt;br /&gt;- haskell (avoid success, ленивость, утечки, баги, борьба с тайпчекером, отсутствие инструментов)&lt;br /&gt;- С, С++, С#, Java, Python, Delphi (низкоуровнево). Даже х-ь иногда (от любителей кдб, например)&lt;br /&gt;- Python (кривые замыкания)&lt;br /&gt;- все языки за пределами нестыдных (по причине стыдности)&lt;br /&gt;- нода (т.к. евент дривен и жабоскрипт и либы написаны идиотами)&lt;br /&gt;- руби, го (хипсторы и подвороты)&lt;br /&gt;- похапе&lt;br /&gt;- Rust (надо писать на Go)&lt;br /&gt;- Go (gc же богомерзкий)&lt;br /&gt;- Typescript (негодная система типов, надо писать на flow)&lt;br /&gt;- Flow (он не развивается, надо писать на тайпскрипте)&lt;br /&gt;&lt;br /&gt;В-общем, в зависимости от того, кого вы спрашиваете, нельзя писать вообще ни на чём!&lt;br /&gt;&lt;br /&gt;Upd: тут подбросили ссылку на DOU: &lt;a href=&quot;https://dou.ua/lenta/articles/language-rating-jan-2018/&quot; rel=&quot;nofollow&quot;&gt;https://dou.ua/lenta/articles/language-rating-jan-2018/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ну и там неприятные новости для упоротых:&lt;br /&gt;&lt;br /&gt;- оставьте С для эмбеддеда, низкоуровневых либ и иных спецприменений: только С++, только хардкор!&lt;br /&gt;- Python и PHP живее всех живых&lt;br /&gt;- С#, притом это вовсе не емакс и моно, - 15% всей работы и 3-е место после жабы и жс&lt;br /&gt;- в топе святая шестерка - Java/C#, Javascript/Python/PHP, C++ (и там же SQL на самом деле&amp;trade;)&lt;br /&gt;- хотите промышленной зрелой экзотики - добро пожаловать в Typescript, Go, Ruby, Scala&lt;br /&gt;- мобло - это Swift и внезапно Kotlin, причем если про котлин не совсем понятно - то Swift опередил Objective-C&lt;br /&gt;- Delphi и 1C ещё встречаются&lt;br /&gt;- в &quot;совсем уж экзотике&quot; в Украине значатся Closure и R&lt;br /&gt;- из лигасёвого лигаси только перл&lt;br /&gt;&lt;br /&gt;Upd2: Scala, Typescript и Kotlin - внезапно не провалы</content>
		<author>
			<name>Andy Melnikov</name>
			<uri>https://nponeccop.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Дважды мудак</title>
			<subtitle type="html">Почти исключительно о функциональном</subtitle>
			<link rel="self" href="http://nponeccop.livejournal.com/data/atom?tag=fp"/>
			<id>urn:lj:livejournal.com:atom1:nponeccop</id>
			<updated>2018-03-14T11:00:40+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Эффекты в Haskell</title>
		<link href="https://ruhaskell.org/posts/theory/2018/01/18/effects-haskell.html"/>
		<id>https://ruhaskell.org/posts/theory/2018/01/18/effects-haskell.html</id>
		<updated>2018-01-18T00:00:00+00:00</updated>
		<content type="html">Реализация эффектов в Haskell.</content>
		<author>
			<name>ruhaskell.org</name>
			<uri>https://ruhaskell.org</uri>
		</author>
		<source>
			<title type="html">ruHaskell</title>
			<subtitle type="html">Русскоязычное сообщество Haskell-разработчиков</subtitle>
			<link rel="self" href="http://ruhaskell.org/feed.xml"/>
			<id>http://ruhaskell.org/feed.xml</id>
			<updated>2018-09-06T16:30:28+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Обращение в будущее</title>
		<link href="http://dsorokin.blogspot.com/2018/01/blog-post.html"/>
		<id>tag:blogger.com,1999:blog-8641042312683198534.post-1175321397061754050</id>
		<updated>2018-01-13T08:11:02+00:00</updated>
		<content type="html">&lt;div dir=&quot;ltr&quot;&gt;Убедительная просьба к тем, кто будет создавать следующий язык программирования, скажем, Java Pro или Scala ++. Пожалуйста, добавьте синтаксический сахар для монад, например, похожий на вычислительные выражения F#. Порою очень не хватает&lt;/div&gt;</content>
		<author>
			<name>dsorokin</name>
			<email>noreply@blogger.com</email>
			<uri>http://dsorokin.blogspot.com/search/label/fp</uri>
		</author>
		<source>
			<title type="html">Давид Сорокин</title>
			<link rel="self" href="http://dsorokin.blogspot.com/feeds/posts/default/-/fp"/>
			<id>tag:blogger.com,1999:blog-8641042312683198534</id>
			<updated>2021-12-10T21:30:10+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Эффекты и чистые функции</title>
		<link href="https://ruhaskell.org/posts/theory/2018/01/10/effects.html"/>
		<id>https://ruhaskell.org/posts/theory/2018/01/10/effects.html</id>
		<updated>2018-01-10T00:00:00+00:00</updated>
		<content type="html">Попытка объяснить эффекты без монад.</content>
		<author>
			<name>ruhaskell.org</name>
			<uri>https://ruhaskell.org</uri>
		</author>
		<source>
			<title type="html">ruHaskell</title>
			<subtitle type="html">Русскоязычное сообщество Haskell-разработчиков</subtitle>
			<link rel="self" href="http://ruhaskell.org/feed.xml"/>
			<id>http://ruhaskell.org/feed.xml</id>
			<updated>2018-09-06T16:30:28+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Программировал в прошлом году - отчитайся</title>
		<link href="https://rssh.livejournal.com/235440.html"/>
		<id>urn:lj:livejournal.com:atom1:rssh:235440</id>
		<updated>2018-01-03T10:15:13+00:00</updated>
		<content type="html">&lt;p&gt;Не забудьте &amp;nbsp;заполнить форму о используемых языках программирования в 2017&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://dou.ua/lenta/sitenews/programming-languages-survey-2018/&quot; rel=&quot;nofollow&quot;&gt;https://dou.ua/lenta/sitenews/programming-languages-survey-2018/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;//боже мой, я это делаю уже 9 лет&lt;/p&gt;</content>
		<author>
			<name>rssh</name>
			<uri>https://rssh.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">rssh</title>
			<subtitle type="html">rssh</subtitle>
			<link rel="self" href="http://rssh.livejournal.com/data/atom?tag=scala,fprog,kiev%3A%3Afprog"/>
			<id>urn:lj:livejournal.com:atom1:rssh</id>
			<updated>2018-03-14T17:00:44+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Нестандартные запросы в Slick.</title>
		<link href="https://ru-scala.livejournal.com/65410.html"/>
		<id>urn:lj:livejournal.com:atom1:ru_scala:65410</id>
		<updated>2017-12-25T16:33:26+00:00</updated>
		<content type="html">Можно ли в Slick сформировать запрос, аналогичный такому?&lt;br /&gt;&lt;pre&gt;select * from jr
       where (id1, id2) in (
         ('000002e4-6b99-45ac-9187-4d00b7b457fc', 'a1c4fa6f-370c-11e6-bb37-f832e4bd9ad8'),
         ('00011eaf-f65d-42a7-ae54-3b16dff65f22','4834f6b6-af4a-4cc5-88d6-924a84f0ef31'));&lt;/pre&gt;&lt;br /&gt;Стардарт SQL такое не поддерживает, но и MySQL, и Postgres его выполняют. Но в Slick как сделать из двух slick.lifted.Rep[String] одну slick.lifted.Rep[(String,String)] я не нашел. Это вообще возможно?</content>
		<author>
			<name>Mike Potanin</name>
			<email>mpotanin@gmail.com</email>
			<uri>https://ru-scala.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Язык программирования Scala</title>
			<subtitle type="html">Язык программирования Scala</subtitle>
			<link rel="self" href="http://ru-scala.livejournal.com/data/atom"/>
			<id>urn:lj:livejournal.com:atom1:ru_scala</id>
			<updated>2018-03-14T16:00:46+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Програмологія: Розслідування фальшивих академіків НАН</title>
		<link href="https://maxim.livejournal.com/525767.html"/>
		<id>urn:lj:livejournal.com:atom1:maxim:525767</id>
		<updated>2017-12-21T08:04:32+00:00</updated>
		<content type="html">Поки ми готуємо документи, якими ми намагатимемось бомбардувати наші корумповані прикордонні служби, прокуратуру та інші установи, на які тільки у нас вистачить грошей, у зв'язку з недопуском в Україну видатного математика-педагога, дійсного члена комітету по стандартизації мови Haskell, я вирішив поцікавитися, а які у Українців є опції, якщо не Брагілєвскьий, то хто в Україні претендує на звання спеціаліста з поєднання логіки та математики? Результати мене надзвичайно здивували, виявляється у нас є академік НАН України, який є прямим конкурентом Хаскеля Карі, Філіпа Вадлера, Стівена Кліні, Хенка Барендрехта та інших. Однак, що дивно, у списку його праць жодним чином немає згадок про його закордонних колег. Я вирішив провести розслідування і детальний аналіз цього академіка разом з його працями, аби з'ясувати, яке майбутнє чекає Україну в контексті приходу алгебраїчних мов програмування у повсякденну інженерну практику (перш за все я маю на увазі функціональні мови програмування, які ви всі добре знаєте: ML, Haskell, Scala, Erlang, Clojure).&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://uk.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B4%D1%8C%D0%BA%D0%BE_%D0%92%D0%BE%D0%BB%D0%BE%D0%B4%D0%B8%D0%BC%D0%B8%D1%80_%D0%9D%D0%B8%D0%BA%D0%B8%D1%84%D0%BE%D1%80%D0%BE%D0%B2%D0%B8%D1%87&quot; rel=&quot;nofollow&quot;&gt;Редько Володимир Никифорович&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Граматика&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Почнему з базової елементарної освіти 1—9 класів. Зайдемо на сайт &lt;a href=&quot;http://ttp.unicyb.kiev.ua/%d0%bd%d0%b0%d1%83%d0%ba%d0%be%d0%b2%d0%b0-%d1%80%d0%be%d0%b1%d0%be%d1%82%d0%b0/%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82%d0%b8/&quot; rel=&quot;nofollow&quot;&gt;Кафедра теорії та технології програмування&lt;/a&gt;, читаємо:&lt;br /&gt;&lt;br /&gt;&quot;Повні класи вичіслімих функцій різних рівнів абстракції були описані.&quot; — формулювання речень у стилі магістра Йоди з граматичними помилками.&lt;br /&gt;&quot;Мета проекту: 	автоматизації математичних відрахувань до різних областях&quot; — взагалі незрозуміло про що йде мова.&lt;br /&gt;&quot;Деякі програми САД є:&lt;br /&gt;    розподілених автоматизованих докази теорем&lt;br /&gt;    верифікації математичних текстів&lt;br /&gt;    дистанційного навчання в математичних дисциплін&lt;br /&gt;    будівництво баз даних для математичних теорій&lt;br /&gt;&quot; — таке враження, що перекладали translate.google.com, але якщо подумати над суттю, то вийде, що максимально, що тут можна собі уявити — це &quot;блокчейн з теоремами&quot;, рівень магістерських робіт на заході.&lt;br /&gt;&lt;br /&gt;&quot;Розробка програмних засобів для Склад називному Мови (CNL)&lt;br /&gt;Короткий опис: 	Є розробки програмних засобів для підтримки не менше трьох CNL:&lt;br /&gt;    Бекон (Основні CNL)&lt;br /&gt;    DECON (Описова CNL = Бекон + описові вирази нових складів через основні з них)&lt;br /&gt;    Recon (Рекурсивні CNL = DECON + рекурсивного вираження нових складів через основні з них)&lt;br /&gt;&quot; — тут я так розумію Бекон, Декон та Рекон, це щось накшталт Relux, Redux та React, торгові марки університету, які вочевидь є темами захисту докторських дисертації в Національному Університеті України ім. Тараса Шевченка. Направді абсолютно синтетичні, надумані теорії які немають жодного зв'язку з реальністю.&lt;br /&gt;&quot;беконом і DECON знаходяться в бета-версії стадії тестування&quot; — речення побудоване роботами-дибілами.&lt;br /&gt;&quot;Хід об’єкту: перша версія готова&quot; — посилання не працює, в rar файлах вірогідність відшукати щось працююче хоча б на Delphi дорівнює нулю.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Аналіз програмології, як конкретної науки&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Я буду називати це спробою аналізу, тому, що заглиблюватися в цей божевільний світ маразму у мене немає часу та можливостей. Почнемо зі &lt;a href=&quot;http://ttp.unicyb.kiev.ua/%d0%bd%d0%b0%d1%83%d0%ba%d0%be%d0%b2%d0%b0-%d1%80%d0%be%d0%b1%d0%be%d1%82%d0%b0/%d0%bf%d1%83%d0%b1%d0%bb%d1%96%d0%ba%d0%b0%d1%86%d1%96%d1%97/&quot; rel=&quot;nofollow&quot;&gt;списку праць&lt;/a&gt; нешанованого академіка, та вікіпедії.&lt;br /&gt;&lt;br /&gt;&quot;Неоклассические логики предикатов&quot; — неокласичні, ну добре, про Хаскеля Карі забули, а вже в неокласики.&lt;br /&gt;&quot;Композиционно-номинативный подход к уточнению понятия программы&quot; — 1999 рік, у той час коли на заході вже верифікували процесори за допомогою ACL2, Coq та HOL.&lt;br /&gt;&quot;Композитционные базы данных&quot; — орфографія збережена, учень цього академіка Буй полюбляє бази даних, тому наукові роботи пестрять CASE системами та SQL моделями на Delphi.&lt;br /&gt;&lt;br /&gt;Ось ці теми дуже вражають своєю теоретичністю:&lt;br /&gt;&quot;Базы данных и информационные системы&quot; — тут вчать писати INNER JOIN.&lt;br /&gt;&quot;Введение в операционные системы&quot; — цікаво чи інститут Шевченко зробив хоч одну операційну систему, яка була проваджена виробництво (відповідь очевидна, ні)&lt;br /&gt;&quot;Неподвижные точки и операторы замыкания: программологические аспекты&quot; — тут йдеться мова очевидно про фікспойнти, F-алгебри, однак згадки про Філіпа Вадлера, та Вармо Вене ви там не знайдете. А коли відриєте дисертацію на цю тему то у вас випаде останнє волосся.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Наукові зв'язки&lt;/b&gt;&lt;br /&gt;&quot;Кафедра теорії та технології програмування має наукові зв’язки з провідними учбовими та науковими установами у багатьох країнах світу: Данія, Макао, Молдова, Латвія, Нідерланди, Німеччина, Польща, Росія, США, Фінляндія, Франція, Чехія&quot; — очевидно ніяких посилань, я впевнений якщо запитати з ким вони там зв'язуються то виявиться що половина неправда, а інша половина це їхні студенти які влаштувалися там з &quot;програмологією&quot; в Макао.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Приклади робіт учнів цього академіка&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Омельчук Людмила Леонідівна УДК 681.3 АКСІОМАТИЧНІ СИСТЕМИ СПЕЦИФІКАЦІЙ ПРОГРАМ НАД НОМІНАТИВНИМИ ДАНИМИ&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://ic.pics.livejournal.com/maxim/670251/43018/43018_900.png&quot; alt=&quot;&quot; title=&quot;&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Дослідження декартових добутків, транзитивності. Нагадую — це не реферат, а дисертація на здобуття кандидата! Ви думаеєте, що це одна стаття така? Будь-яку берете, розбираєте на атоми і впевнюєтеся, що це якшо не шизофренія, то просто балаболство і накидання математичних термінів для вигляду у журнал &quot;Мурзілка&quot;.&lt;br /&gt;&lt;br /&gt;УДК 681.3.06 Бойко Б. I. СТРУКТУРА  ІМЕНУВАНЬ  У  ПРОГРАМУВАННІ&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://ic.pics.livejournal.com/maxim/670251/43373/43373_900.png&quot; alt=&quot;&quot; title=&quot;&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Робота Бойко присвячена тому, як називати змінні в мові програмування Delphi, і приклад як роботи запити на мові Delphi в базу даних SQL.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Список людей які захищалися&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Однак сам академік, який придумав &quot;Програмологію&quot; це гідра, яка генерує своїх клонів: Редько, Нікітченко, Буй, син Редька (очевидно, що корупція),  та інші менш значущі доцентіки. Усі вони начебто займаються математичною логікою та відносять себе до мінжародної школи &quot;Програмології&quot; яку вигадав Редько і про яку більше ніхто крім цього гадюшніка не знає.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://science.univ.kiev.ua/research/scientific_school/programologiya-ta-yiyi-zastosuvannya/&quot; rel=&quot;nofollow&quot;&gt;http://science.univ.kiev.ua/research/scientific_school/programologiya-ta-yiyi-zastosuvannya/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;P.S. Стаття буде наповнюватися новими прикладами математичного аферизму та шизофренії в КНУ ім. Шевченка та академіків НАН.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Список літератури для аналізу&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;[1] &lt;a href=&quot;http://dspace.nbuv.gov.ua/bitstream/handle/123456789/86588/08-Redko.pdf?sequence=1&quot; rel=&quot;nofollow&quot;&gt;http://dspace.nbuv.gov.ua/bitstream/handle/123456789/86588/08-Redko.pdf?sequence=1&lt;/a&gt;&lt;br /&gt;[2] &lt;a href=&quot;http://dspace.nbuv.gov.ua/bitstream/handle/123456789/1530/08-Redko.pdf?sequence=1&quot; rel=&quot;nofollow&quot;&gt;http://dspace.nbuv.gov.ua/bitstream/handle/123456789/1530/08-Redko.pdf?sequence=1&lt;/a&gt;&lt;br /&gt;[3] &lt;a href=&quot;http://knutd.edu.ua/publications/pdf/Visnyk/2012-5/34_42.pdf&quot; rel=&quot;nofollow&quot;&gt;http://knutd.edu.ua/publications/pdf/Visnyk/2012-5/34_42.pdf&lt;/a&gt;&lt;br /&gt;[4] &lt;a href=&quot;http://dspace.nbuv.gov.ua/bitstream/handle/123456789/1454/%E2%84%962-3_2008_Zybenko.pdf?sequence=1&quot; rel=&quot;nofollow&quot;&gt;http://dspace.nbuv.gov.ua/bitstream/handle/123456789/1454/%E2%84%962-3_2008_Zybenko.pdf?sequence=1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Прошу долучатися та додавати ті дисертації які заслуговують Фрунзе 103 на вашу думку. Фактично будь-яка робота, якщо детально її проаналізувати це мімікрія під головного Програмолога України.</content>
		<author>
			<name>Namdak Tonpa</name>
			<uri>https://maxim.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Старая Школа</title>
			<subtitle type="html">Сущность Пространства</subtitle>
			<link rel="self" href="http://maxim.livejournal.com/data/atom?tag=cs"/>
			<id>urn:lj:livejournal.com:atom1:maxim</id>
			<updated>2018-03-14T16:00:45+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">конец хаскеля</title>
		<link href="https://thedeemon.livejournal.com/124394.html"/>
		<id>urn:lj:livejournal.com:atom1:thedeemon:124394</id>
		<updated>2017-12-19T17:00:58+00:00</updated>
		<content type="html">Свежее выступление Майкла Сноймана:&lt;br /&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=KZIN9f9rI34&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=KZIN9f9rI34&lt;/a&gt;&lt;br /&gt;&quot;Вот посмотрим на простейшие монадные трансформеры. Тут фигня, и тут фигня. Тут не срастается. Тут не работает. Тут данные теряются. Тут опять фигня. Мой совет: не вы#$%йтесь, используйте мутабельные переменные, кидайте рантайм исключения.&quot;</content>
		<author>
			<name>Dmitry Popov</name>
			<uri>https://thedeemon.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Dee Mon. Былое и думы</title>
			<subtitle type="html">Dmitry Popov</subtitle>
			<link rel="self" href="http://thedeemon.livejournal.com/data/atom?tag=fp,ocaml,haskell,icfpc"/>
			<id>urn:lj:livejournal.com:atom1:thedeemon</id>
			<updated>2018-03-14T14:00:14+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">fooling people with theorem provers</title>
		<link href="https://thedeemon.livejournal.com/123949.html"/>
		<id>urn:lj:livejournal.com:atom1:thedeemon:123949</id>
		<updated>2017-12-18T12:32:00+00:00</updated>
		<content type="html">Занятный доклад на свежем FP Conf про equational reasoning и теорем пруверы:&lt;br /&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=TRAPqhRdAH0&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=TRAPqhRdAH0&lt;/a&gt;&lt;br /&gt;Докладчик рассказал, почему Liquid Haskell и F* пока не годятся, потом показал как он на Isabelle верифицировал вывод radix sort'a из tree sort'a, взятый из старинной статьи Gibbons'a. Типа, вот у нас реализация сортировки через построение дерева, вот мы тут колдуем-колдуем с эквивалентными преобразованиями кода и вот свели сортировку к foldr по списку, получился радикс сорт, сортирует за один проход, красота. &lt;br /&gt;Только это все неправда.&lt;br /&gt;То, что там названо treesort'ом, внутри себя уже реализует принципы радикссорта. Идея такая. Вот есть у нас список, условно, коротких строк ограниченной длины, [a]. И есть функции извлечения &quot;букв&quot; a -&amp;gt; b, где тип &quot;букв&quot; b принадлежит классам Bounded и Enum, т.е. все его возможные значения можно перечислить по порядку списком &lt;br /&gt;&lt;code&gt;rng =  [minBound .. maxBound]&lt;/code&gt;&lt;br /&gt;Тогда входной список &quot;строк&quot; можно разбить на подпоследовательности / бакеты - по одной для каждого значения &quot;буквы&quot;. Partitioning function:&lt;br /&gt;&lt;pre&gt;ptn :: (Bounded b, Enum b) =&amp;gt; (a-&amp;gt;b) -&amp;gt; [a] -&amp;gt; [[a]]
ptn d xs = [ filter ((m==) . d) xs | m &amp;lt;- rng ]&lt;/pre&gt;&lt;br /&gt;Здесь d - функция извлечения &quot;буквы&quot; b из &quot;строки&quot; a.&lt;br /&gt;Тогда возьмем набор функций [a-&amp;gt;b] по извлечению из условной строки первой буквы, второй буквы, третьей... Разобьем входные данные на бакеты по первой букве, каждый из них - на бакеты по второй, те - по третьей и т.д., получим дерево списков. В каждом узле дерева бакеты идут по порядку возрастания &quot;букв&quot;, так что в итоговом дереве все окажется уже отсортированным, останется лишь его сплющить в один выходной список.&lt;br /&gt;&lt;pre&gt;data Tree a = Leaf a | Node [Tree a]

mktree :: (Bounded b, Enum b) =&amp;gt; [a-&amp;gt;b] -&amp;gt; [a] -&amp;gt; Tree [a]
mktree [] xs = Leaf xs
mktree (d:ds) xs = Node (map (mktree ds) (ptn d xs))

treesort :: (Bounded b, Enum b) =&amp;gt; [a-&amp;gt;b] -&amp;gt; [a] -&amp;gt; [a]
treesort ds xs = flatten (mktree ds xs)&lt;/pre&gt;&lt;br /&gt;Тут важно, что mktree принимает два списка, ds и xs, первый это короткий список функций по извлечению &quot;букв&quot;, второй - сами данные, которые уже будем сортировать, и организована mktree индукцией по списку функций. И flatten имеет очевидное устройство тоже индукцией по дереву. Ну и вот, дальше Gibbons и вслед за ним наш докладчик просто берут эти mktree и flatten и выражают их через foldr, заменяют явную рекурсию стандартным катаморфизмом, плюс избавляются от промежуточной структуры дерева, т.к. собранное mktree дерево тут же flatten'ом разбирается обратно. И, собственнно, весь equational reasoning и вся верификация на Isabelle сводятся к тому, чтобы показать, что реализация на foldr равна процитированной тут реализации на явной рекурсии. Это дело чистой механики и переписывания термов, сам алгоритм там не меняется ни сколько. Получается &lt;br /&gt;&lt;pre&gt;radixsort :: (Bounded b, Enum b) =&amp;gt; [a-&amp;gt;b] -&amp;gt; [a] -&amp;gt; [a]
radixsort = foldr ft id
  where ft d g = concat . ptn d . g&lt;/pre&gt;&lt;br /&gt;Вот он, один проход по списку, но это проход по списку функций извлечения &quot;букв&quot;, а не по входным данным! А вот по входным данным мы будем елозить внутри ptn, в каждом узле дерева входной список данных будет пройден L раз, где L - размер алфавита. Причем Gibbons в статье это понимает и честно отмечает, предлагая в конце альтернативную реализацию функции раскидывания по бакетам ptn. Но исходные рассуждения и доказательства проводятся не с ней, а с наивным вариантом. Докладчик с FPConf же то ли честно не понимал, что делает, то ли решил публику обмануть ради пущего эффекта. Вот, говорит, сортировка за один проход списка foldr'ом. А что совсем не того списка - не сказал. :) Ну и &quot;доказал корректность&quot; довольно простой тавтологии (radixsort == treesort), молодец.</content>
		<author>
			<name>Dmitry Popov</name>
			<uri>https://thedeemon.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Dee Mon. Былое и думы</title>
			<subtitle type="html">Dmitry Popov</subtitle>
			<link rel="self" href="http://thedeemon.livejournal.com/data/atom?tag=fp,ocaml,haskell,icfpc"/>
			<id>urn:lj:livejournal.com:atom1:thedeemon</id>
			<updated>2018-03-14T14:00:14+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Выучить от сих до сих!</title>
		<link href="https://nponeccop.livejournal.com/583694.html"/>
		<id>urn:lj:livejournal.com:atom1:nponeccop:583694</id>
		<updated>2017-12-11T07:30:51+00:00</updated>
		<content type="html">Отседова: &lt;a href=&quot;https://github.com/mpickering/apply-refact/blob/master/src/Refact/Fixity.hs#L115-L155&quot; rel=&quot;nofollow&quot;&gt;https://github.com/mpickering/apply-refact/blob/master/src/Refact/Fixity.hs#L115-L155&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;-- | All fixities defined in the Prelude.
preludeFixities :: [(String, Fixity)]
preludeFixities = concat
    [infixr_ 9  [&quot;.&quot;]
    ,infixl_ 9  [&quot;!!&quot;]
    ,infixr_ 8  [&quot;^&quot;,&quot;^^&quot;,&quot;**&quot;]
    ,infixl_ 7  [&quot;*&quot;,&quot;/&quot;,&quot;quot&quot;,&quot;rem&quot;,&quot;div&quot;,&quot;mod&quot;,&quot;:%&quot;,&quot;%&quot;]
    ,infixl_ 6  [&quot;+&quot;,&quot;-&quot;]
    ,infixr_ 5  [&quot;:&quot;,&quot;++&quot;]
    ,infix_  4  [&quot;==&quot;,&quot;/=&quot;,&quot;&amp;lt;&quot;,&quot;&amp;lt;=&quot;,&quot;&amp;gt;=&quot;,&quot;&amp;gt;&quot;,&quot;elem&quot;,&quot;notElem&quot;]
    ,infixr_ 3  [&quot;&amp;amp;&amp;amp;&quot;]
    ,infixr_ 2  [&quot;||&quot;]
    ,infixl_ 1  [&quot;&amp;gt;&amp;gt;&quot;,&quot;&amp;gt;&amp;gt;=&quot;]
    ,infixr_ 1  [&quot;=&amp;lt;&amp;lt;&quot;]
    ,infixr_ 0  [&quot;$&quot;,&quot;$!&quot;,&quot;seq&quot;]
    ]

-- | All fixities defined in the base package.
--
--   Note that the @+++@ operator appears in both Control.Arrows and
--   Text.ParserCombinators.ReadP. The listed precedence for @+++@ in
--   this list is that of Control.Arrows.
baseFixities :: [(String, Fixity)]
baseFixities = preludeFixities ++ concat
    [infixl_ 9 [&quot;!&quot;,&quot;//&quot;,&quot;!:&quot;]
    ,infixl_ 8 [&quot;shift&quot;,&quot;rotate&quot;,&quot;shiftL&quot;,&quot;shiftR&quot;,&quot;rotateL&quot;,&quot;rotateR&quot;]
    ,infixl_ 7 [&quot;.&amp;amp;.&quot;]
    ,infixl_ 6 [&quot;xor&quot;]
    ,infix_  6 [&quot;:+&quot;]
    ,infixl_ 5 [&quot;.|.&quot;]
    ,infixr_ 5 [&quot;+:+&quot;,&quot;&amp;lt;++&quot;,&quot;&amp;lt;+&amp;gt;&quot;] -- fixity conflict for +++ between ReadP and Arrow
    ,infix_  5 [&quot;\\\\&quot;]
    ,infixl_ 4 [&quot;&amp;lt;$&amp;gt;&quot;,&quot;&amp;lt;$&quot;,&quot;&amp;lt;*&amp;gt;&quot;,&quot;&amp;lt;*&quot;,&quot;*&amp;gt;&quot;,&quot;&amp;lt;**&amp;gt;&quot;]
    ,infix_  4 [&quot;elemP&quot;,&quot;notElemP&quot;]
    ,infixl_ 3 [&quot;&amp;lt;|&amp;gt;&quot;]
    ,infixr_ 3 [&quot;&amp;amp;&amp;amp;&amp;amp;&quot;,&quot;***&quot;]
    ,infixr_ 2 [&quot;+++&quot;,&quot;|||&quot;]
    ,infixr_ 1 [&quot;&amp;lt;=&amp;lt;&quot;,&quot;&amp;gt;=&amp;gt;&quot;,&quot;&amp;gt;&amp;gt;&amp;gt;&quot;,&quot;&amp;lt;&amp;lt;&amp;lt;&quot;,&quot;^&amp;lt;&amp;lt;&quot;,&quot;&amp;lt;&amp;lt;^&quot;,&quot;^&amp;gt;&amp;gt;&quot;,&quot;&amp;gt;&amp;gt;^&quot;]
    ,infixl_ 0 [&quot;on&quot;]
    ,infixr_ 0 [&quot;par&quot;,&quot;pseq&quot;]
    ]&lt;/pre&gt;Это вам не таблички &quot;как работает == в джаваскрипте&quot; по карманам тырить!</content>
		<author>
			<name>Andy Melnikov</name>
			<uri>https://nponeccop.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Дважды мудак</title>
			<subtitle type="html">Почти исключительно о функциональном</subtitle>
			<link rel="self" href="http://nponeccop.livejournal.com/data/atom?tag=fp"/>
			<id>urn:lj:livejournal.com:atom1:nponeccop</id>
			<updated>2018-03-14T11:00:40+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Статус HaLVM (годичной давности)</title>
		<link href="https://nponeccop.livejournal.com/582773.html"/>
		<id>urn:lj:livejournal.com:atom1:nponeccop:582773</id>
		<updated>2017-12-03T02:32:33+00:00</updated>
		<content type="html">&lt;a href=&quot;http://uhsure.com/halvm3.html&quot; rel=&quot;nofollow&quot;&gt;http://uhsure.com/halvm3.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Мне вот кажется изначально дебильной эта задача &quot;стать совместимыми с Hackage-либами юзающими Си&quot;</content>
		<author>
			<name>Andy Melnikov</name>
			<uri>https://nponeccop.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Дважды мудак</title>
			<subtitle type="html">Почти исключительно о функциональном</subtitle>
			<link rel="self" href="http://nponeccop.livejournal.com/data/atom?tag=fp"/>
			<id>urn:lj:livejournal.com:atom1:nponeccop</id>
			<updated>2018-03-14T11:00:40+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Верифицированный лигаси-фри стек в пару рыл за 20 лет</title>
		<link href="https://nponeccop.livejournal.com/582438.html"/>
		<id>urn:lj:livejournal.com:atom1:nponeccop:582438</id>
		<updated>2017-12-03T02:11:30+00:00</updated>
		<content type="html">Всех, кто обладает квалификацией, чтобы пиздануть что-то уместное по этой теме, я знаю поимённо, но они молчат - т.е. скорее всего просто эти мои помои не читают. Ну, вы понели, это дисклеймер о том, что писать о нинужности/невозможности/непромышленности или спрашивать буквари не стоит.&lt;br /&gt;&lt;br /&gt;Итак, смотрим что можно сделать относительно реалистичного.&lt;br /&gt;&lt;br /&gt;POSIX-говно выбросить проще простого - роль BIOS играют коммерческие гипервизоры, которые со временем верифицируются, особенно Type 1 типа Hyper-V, &lt;s&gt;ESXi и Xen&lt;/s&gt;; роль libc - интерфейс гиперколлов. В KVM virtio, впрочем, гиперколлов нет, а паравиртуализированные устройства - это обычные PCI-устройства, просто с менее дебильным интерфейсом. Минимально нужен APIC, Baloon, PCI (configuration space etc) и сеть. Процессы, полноценный IP-стек и юзермод не нужны - пусть будет 1 поток per VM c одним &quot;raw сокетом&quot;, на таком &quot;node.rs for DOS&quot; можно налепить юзермод-TCP и остальные ф-ции получать через p9-образный протокол от сервера на Linux-виртуалке, играющего роль микроядра.&lt;br /&gt;&lt;br /&gt;Далее нам надо какой-то рантайм, который не требует реализации позикс-говна. Как ни странно, таких рантаймов 3 - это Си, С++ и rust. Си нам понадобится в хардкорных местах, в-основном же хватит Rust LibCore.&lt;br /&gt;&lt;br /&gt;Если мы берём Rust - то есть достаточно прямолинейный вариант с RumpRun Rust. Это Rust unikernel на основе кодобазы netbsd, позволяющий запускать &quot;полный&quot; Rust std (даже не core). Дальше есть хардкорные (aka нерабочие) кодобазы rustboot и robigalia, из которых можно слепить &quot;совершенно пустой юникернел&quot; (т.е. без netbsd-кода) с памятью, APIC и PCI, и заняться портированием virtio на раст (дабы не было соблазна делать всё юникс-вэй можно взять нейтральный сюжет, рекомендованный детям дошкольного возраста - виндовые дрова). Понятно что хороший программист сделает себе позикс над любым системным апи, но это лечится административными пиздюлями aka code review. Нет сомнений, что в результате получится говно. Но зато _маленькое_ говно!&lt;br /&gt;&lt;br /&gt;После virtio-net мы можем уже сделать дебильный недо-tcp, даже не сделав arp и демультиплексор, и тестить концептуальный клиент-сервер.&lt;br /&gt;&lt;br /&gt;Ну а дальше задача скрестить ежа с этим недоужом. Т.е. сделать некий рантайм на расте, в пределе GHC-подобный в плане зеленых потоков, со сборкой мусора, и компилить под него из ФЯ с опциональной верификацией. А если не делать, а найдется готовый - то можно и на сях, главное чтобы был достаточно изолированный от POSIX-анахронизмов и весь из себя по-хипсторски бородатый!</content>
		<author>
			<name>Andy Melnikov</name>
			<uri>https://nponeccop.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Дважды мудак</title>
			<subtitle type="html">Почти исключительно о функциональном</subtitle>
			<link rel="self" href="http://nponeccop.livejournal.com/data/atom?tag=fp"/>
			<id>urn:lj:livejournal.com:atom1:nponeccop</id>
			<updated>2018-03-14T11:00:40+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Bitcoin Proof of Work in Pure Lambda Calculus</title>
		<link href="https://codedot.dreamwidth.org/181057.html"/>
		<id>tag:dreamwidth.org,2013-01-03:1881992:181057</id>
		<updated>2017-12-01T17:33:11+00:00</updated>
		<content type="html">From &lt;a href=&quot;https://codedot.dreamwidth.org/158739.html&quot;&gt;command line&lt;/a&gt; to MLC:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;$&lt;/span&gt; npm i -g &lt;a href=&quot;https://www.npmjs.com/package/@alexo/lambda&quot;&gt;@alexo/lambda&lt;/a&gt;
&lt;span&gt;└── @alexo/lambda@0.3.6&lt;/span&gt;

&lt;span&gt;$&lt;/span&gt; node work2mlc.js getwork.json 381353fa | tee test.mlc
&lt;span&gt;Mid = x: x&lt;/span&gt;
&lt;span&gt;        hex(24e39e50)&lt;/span&gt;
&lt;span&gt;        hex(1efebbc8)&lt;/span&gt;
&lt;span&gt;        hex(fb545b91)&lt;/span&gt;
&lt;span&gt;        hex(db1ff3ca)&lt;/span&gt;
&lt;span&gt;        hex(a66f356d)&lt;/span&gt;
&lt;span&gt;        hex(7482c0f3)&lt;/span&gt;
&lt;span&gt;        hex(acc0caa8)&lt;/span&gt;
&lt;span&gt;        hex(00f10dad);&lt;/span&gt;

&lt;span&gt;Data = x: x&lt;/span&gt;
&lt;span&gt;        hex(a7f5f990)&lt;/span&gt;
&lt;span&gt;        hex(fd270c51)&lt;/span&gt;
&lt;span&gt;        hex(378a0e1c);&lt;/span&gt;

&lt;span&gt;Nonce = hex(381353fa);&lt;/span&gt;

&lt;span&gt;Zero32 (Pop 8 (RunHash Mid Data Nonce))&lt;/span&gt;
&lt;span&gt;$&lt;/span&gt; lambda -pem lib.mlc -f test.mlc
&lt;span&gt;3335648(653961), 17837 ms&lt;/span&gt;
&lt;span&gt;v1, v2: v1&lt;/span&gt;
&lt;span&gt;$&lt;/span&gt; 
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href=&quot;https://gist.github.com/codedot/721469173df8dd197ba5bddbe022c487&quot;&gt;https://gist.github.com/codedot/721469173df8dd197ba5bddbe022c487&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=181057&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; /&gt; comments</content>
		<author>
			<name>Anton Salikhmetov</name>
			<uri>https://codedot.dreamwidth.org/</uri>
		</author>
		<source>
			<title type="html">Anton Salikhmetov</title>
			<subtitle type="html">Anton Salikhmetov</subtitle>
			<link rel="self" href="http://codedot.dreamwidth.org/data/atom?tag=lambda+calculus"/>
			<id>tag:dreamwidth.org,2013-01-03:1881992</id>
			<updated>2019-01-15T07:00:04+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Implementation of SHA-256 in Macro Lambda Calculus</title>
		<link href="https://codedot.dreamwidth.org/180914.html"/>
		<id>tag:dreamwidth.org,2013-01-03:1881992:180914</id>
		<updated>2017-11-24T21:18:18+00:00</updated>
		<content type="html">&lt;a href=&quot;https://gist.github.com/codedot/721469173df8dd197ba5bddbe022c487&quot;&gt;https://gist.github.com/codedot/721469173df8dd197ba5bddbe022c487&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;$&lt;/span&gt; npm i -g &lt;a href=&quot;https://www.npmjs.com/package/@alexo/lambda&quot;&gt;@alexo/lambda&lt;/a&gt;
&lt;span&gt;└── @alexo/lambda@0.3.6&lt;/span&gt;

&lt;span&gt;$&lt;/span&gt; make
&lt;span&gt;	shasum -a 256 /dev/null&lt;/span&gt;
&lt;span&gt;e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  /dev/null&lt;/span&gt;
&lt;span&gt;	lambda -pem lib.mlc 'Pri32 hex(e3b0c442)'&lt;/span&gt;
&lt;span&gt;857(230), 19 ms&lt;/span&gt;
&lt;span&gt;_1 _1 _1 _0 _0 _0 _1 _1 _1 _0 _1 _1 _0 _0 _0 _0 _1 _1 _0 _0 _0 _1 _0 _0 _0 _1 _0 _0 _0 _0 _1 _0&lt;/span&gt;
&lt;span&gt;	lambda -pem lib.mlc 'Pri32 (Shift 8 (Hash1 NullMsg))'&lt;/span&gt;
&lt;span&gt;3247721(688463), 17211 ms&lt;/span&gt;
&lt;span&gt;_1 _1 _1 _0 _0 _0 _1 _1 _1 _0 _1 _1 _0 _0 _0 _0 _1 _1 _0 _0 _0 _1 _0 _0 _0 _1 _0 _0 _0 _0 _1 _0&lt;/span&gt;
&lt;span&gt;	shasum -a 256 &amp;lt;/dev/null | xxd -r -p | shasum -a 256&lt;/span&gt;
&lt;span&gt;5df6e0e2761359d30a8275058e299fcc0381534545f55cf43e41983f5d4c9456  -&lt;/span&gt;
&lt;span&gt;	lambda -pem lib.mlc 'Pri32 hex(5df6e0e2)'&lt;/span&gt;
&lt;span&gt;856(230), 15 ms&lt;/span&gt;
&lt;span&gt;_0 _1 _0 _1 _1 _1 _0 _1 _1 _1 _1 _1 _0 _1 _1 _0 _1 _1 _1 _0 _0 _0 _0 _0 _1 _1 _1 _0 _0 _0 _1 _0&lt;/span&gt;
&lt;span&gt;	lambda -pem lib.mlc 'Pri32 (Shift 8 (Hash2 NullMsg))'&lt;/span&gt;
&lt;span&gt;6448027(1373506), 38750 ms&lt;/span&gt;
&lt;span&gt;_0 _1 _0 _1 _1 _1 _0 _1 _1 _1 _1 _1 _0 _1 _1 _0 _1 _1 _1 _0 _0 _0 _0 _0 _1 _1 _1 _0 _0 _0 _1 _0&lt;/span&gt;
&lt;span&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=180914&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; /&gt; comments</content>
		<author>
			<name>Anton Salikhmetov</name>
			<uri>https://codedot.dreamwidth.org/</uri>
		</author>
		<source>
			<title type="html">Anton Salikhmetov</title>
			<subtitle type="html">Anton Salikhmetov</subtitle>
			<link rel="self" href="http://codedot.dreamwidth.org/data/atom?tag=lambda+calculus"/>
			<id>tag:dreamwidth.org,2013-01-03:1881992</id>
			<updated>2019-01-15T07:00:04+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">&quot;Зависимые&quot; &quot;типы&quot;</title>
		<link href="https://nponeccop.livejournal.com/581498.html"/>
		<id>urn:lj:livejournal.com:atom1:nponeccop:581498</id>
		<updated>2017-11-21T05:32:23+00:00</updated>
		<content type="html">У хаскелистов есть локальный мем о том, что монады надо было назвать менее пугающе, какими-нибудь &quot;теплыми и пушистыми штуками&quot;. Вот я думаю что с зависимыми типами та же история. И не только с типами, а вообще с функциональщиной.&lt;br /&gt;&lt;br /&gt;Слово &quot;типы&quot; зашкварилось тогда, когда Рассел его забыл запатентовать, и его начали использовать для чего попало. Слово &quot;лямбда&quot; зашкварилось, когда Маккарти его украл у Чёрча, забывшего запатентовать. Даже слово &quot;рекурсия&quot; имхо зашкварено рекурсивными программами, т.к. Гёдель его забыл запатентовать. Более свежие зашквары - &quot;нетотальность&quot; зашкварена своим применением для обозначения чего попало. Слово &quot;исчисление&quot; законтачено интегральным исчислением, причём это редкий случай, когда в английском хуже, чем в русском.&lt;br /&gt;&lt;br /&gt;Короче, туториалы по непонятным вещам ака НЁХ надо писать такими словами, чтобы не вызывать ложных аллюзий. Где-то видел пародийное объяснение устройства Saturn V словами, понятными ребёнку.&lt;br /&gt;&lt;br /&gt;В-общем, пусть вместо &quot;теория зависимых типов&quot; будет &quot;игра в подстановки&quot;. Слово &quot;игра&quot; тоже законтачено теорией игр, а подстановка - группами подстановок, но это лучшее, что мне получилось придумать.&lt;br /&gt;&lt;br /&gt;Далее, учебник по завтипам надо строить в обратную сторону - от верификации императивщины. Вообще, слово &quot;программа&quot; законтачено, по моему опыту в голове у людей под &quot;программой&quot; подразумевается одно из трёх:&lt;br /&gt;&lt;br /&gt;- &quot;семантический паскаль&quot;&lt;br /&gt;- &quot;семантическая джава&quot;&lt;br /&gt;- &quot;семантическая луа&quot;&lt;br /&gt;&lt;br /&gt;Надо сразу сказать, что луами занимаются структурные типы (см. тайпскрипт), джавами овнершип типы (см. rust), а мы начнём с того же с чего начали Ada Spark - с даже не семантического паскаля, а семантического ершова: с присваиванием, но без кучи, рекурсии и внешнего мира. Но дополненного эйфелеобразными контрактами - обычными ассертами и ассертами на пре- и постусловия.&lt;br /&gt;&lt;br /&gt;Наша игра в подстановки - это не футбол, не дота и не шахматы, а скорее пасьянс, причём ближе к пауку с 4 мастями, которого почему-то все боятся. Программа на семантическом ершове играет роль колоды. Далее компьютер раскладывает эту колоду на игровом поле, а задача человека её сложить. Компьютер, как и в обычном пауке, следит за правилами и дает нам &quot;читы&quot; вроде возможности откатить и переиграть с любого места. Причём если получилось - то у нас не салют, а гарантия того, что в исходном ершове ни один ассерт не сработает. Это не так много, но считается, что этого достаточно, чтобы самолёты не убирали шасси стоя на земле и спутники не отворачивали антенны. &lt;br /&gt;&lt;br /&gt;Педагогическая польза этой белиберды в том, что мы заявляем, что паук - это не язык программирования и не язык спецификаций, а некая логика/inference system. Что позволяет абстрагироваться от понятия компайл-рантайма, типов-значений, переменных, времени и т.п. и сосредоточиться на soundness. Т.е. сразу отметаются идеи &quot;добавить в паук присваивание&quot;, т.к. любая модификация должна сохранять нашу гарантию.&lt;br /&gt;&lt;br /&gt;А также, самое главное, отметаются идеи о том, что &quot;типы зависят от значений&quot; и связанные с этим парадоксы и нубские мучения. Концептуально, в пауке &quot;рантайма&quot; вообще нет, а &quot;в типах сидят&quot; не рантайм-значения и не &quot;рантайм-типы&quot; вовсе, а совершенно другие конструкции, некие рандомные куски текста исходной программы, которые перетасовал наш пасьянс-движок.&lt;br /&gt;&lt;br /&gt;Причём совершенно объяснимо становится, почему при трансляции эффектов используется система эффектов, которая гадит своими континюэйшенами, и почему без неё никак - soundness с самого начала проходит красной нитью по всему, что мы делаем.&lt;br /&gt;&lt;br /&gt;И понятно, что формальная система паука не должна в общем случае походить на язык программирования - скажем, discharge of proof obligations by an smt solver or a non-constructive prover достаточно сильно не похоже на чисто функциональную трансляцию исходного ершова.&lt;br /&gt;&lt;br /&gt;Далее, мы фокусируемся исключительно на статической семантике паука. И считаем, что у нас просто такое компайл-тайм перекладывание кусков текста программы на языке Ершова, т.е. у нас смешаны не типы и значения, а вспомогательные конструкции паука и фрагменты текста.&lt;br /&gt;&lt;br /&gt;То есть к примеру, мы говорим студенту, что сигма-тип - это не тапл, тип второго элемента которого зависит от рантайм-значения содержащегося в первом элементе, а просто такая хитрая синтаксическая подстановка. Т.е. вот у нас есть (x: A) * B x и это просто 2 куска текста, в котором есть &quot;локальный&quot; кусок, обозначенный &quot;буквой&quot; x, который фигурирует (т.е. &quot;подставлен&quot;) сразу во многих местах (подстановка B может быть &quot;сколь угодно нелинейной&quot;). И что эта конструкция нужна, чтобы &quot;давать хинты&quot; движку &quot;пасьянса&quot;, какие синтаксические куски у нас &quot;текстуально равны&quot;, чтобы ему было легче следить за правилами.&lt;br /&gt;&lt;br /&gt;С пями та же самая история но в профиль, а лямбды \(x: A) -&amp;gt; ... - это просто способ изготавливать вторые компоненты-подстановки в сигмах (x: A) * B x и пях (x: A) -&amp;gt; B x&lt;br /&gt;&lt;br /&gt;Также понятно, что нам вовсе не обязательно делать, чтобы эти текстуальные манипуляции были похожи на паскаль по деталям реализации - т.е. лямбды не обязаны быть &quot;функциями&quot; с &quot;аргументами на стеке&quot;, а если нет зашкваренных функций - то и не будет (имхо) у студентов этой зацикленности на транслируемости паука в нейтив.&lt;br /&gt;&lt;br /&gt;C индуктивными типами при таком педагогическом подходе тоже становится понятнее. Нам вообще плевать что у нас есть натуральные которые демонстрируют вычислительную мощь натуральных. Нам важно, что мы можем использовать мощь индукции при манипуляциях в пасьянсе. То есть, нам плевать на обычные элиминаторы, но критически важно (soundness all the way down!), чтобы были индуктивные элиминаторы, традиционно зашкваренно называемые &quot;зависимыми&quot;. То есть, чтобы у нас была _доказательная_ мощь _аксиоматической теории_ натуральных, а на вычисление тотальных функций между натуральными нам по большому счёту плевать (и &quot;в самолётах&quot;/ершове натуральных всё равно нету, ибо анальное рабство хард реалтайма и всё преаллоцировано)</content>
		<author>
			<name>Andy Melnikov</name>
			<uri>https://nponeccop.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Дважды мудак</title>
			<subtitle type="html">Почти исключительно о функциональном</subtitle>
			<link rel="self" href="http://nponeccop.livejournal.com/data/atom?tag=fp"/>
			<id>urn:lj:livejournal.com:atom1:nponeccop</id>
			<updated>2018-03-14T11:00:40+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Паттерн Model-Update-View и зависимые типы</title>
		<link href="https://potan.livejournal.com/229926.html"/>
		<id>urn:lj:livejournal.com:atom1:potan:229926</id>
		<updated>2017-11-20T10:56:32+00:00</updated>
		<content type="html">Написал &lt;a href=&quot;https://habrahabr.ru/post/341988/&quot; rel=&quot;nofollow&quot;&gt;статью на Хабре&lt;/a&gt; о том, чего нет в Elm.&lt;br /&gt;Кто не может комментировать там, могут комментировать здесь.</content>
		<author>
			<name>Mike Potanin</name>
			<email>mpotanin@gmail.com</email>
			<uri>https://potan.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Mike Potanin</title>
			<subtitle type="html">Mike Potanin</subtitle>
			<link rel="self" href="http://potan.livejournal.com/data/atom?tag=fp,haskell,ocaml,lisp"/>
			<id>urn:lj:livejournal.com:atom1:potan</id>
			<updated>2018-03-14T17:00:09+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">binnat.ctt</title>
		<link href="https://maxim.livejournal.com/525557.html"/>
		<id>urn:lj:livejournal.com:atom1:maxim:525557</id>
		<updated>2017-11-20T00:32:59+00:00</updated>
		<content type="html">&lt;span class=&quot;ljuser  i-ljuser  i-ljuser-type-P     &quot;&gt;&lt;a href=&quot;https://nponeccop.livejournal.com/profile&quot; target=&quot;_self&quot; class=&quot;i-ljuser-profile&quot;&gt;&lt;img class=&quot;i-ljuser-userhead&quot; src=&quot;https://l-stat.livejournal.net/img/userinfo_v8.png?v=17080?v=228.1&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://nponeccop.livejournal.com/&quot; class=&quot;i-ljuser-username&quot; target=&quot;_self&quot;&gt;&lt;b&gt;nponeccop&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; импортнул, я померял.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
data binN = binN0 | binNpos (p : pos)

NtoBinN : nat -&amp;gt; binN = split
  zero  -&amp;gt; binN0
  suc n -&amp;gt; binNpos (NtoPos (suc n))

doublesN : nat -&amp;gt; nat -&amp;gt; nat = split
  zero  -&amp;gt; \(m:nat) -&amp;gt; m
  suc n -&amp;gt; \(m:nat) -&amp;gt; doublesN n (doubleN m)
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Это мгновенно (транспортная decode):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
&amp;gt; let a: binN = NtoBinN (doublesN n10 n10) in a
Checking: a
EVAL: binNpos (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x1 (x0 pos1)))))))))))))
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Это долго (минуты, через isoPath):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
&amp;gt; let a: binN = transNeg binN nat PathbinNN (doublesN n10 n10) in a
Checking: a
EVAL: binNpos (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x1 (x0 pos1)))))))))))))
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Доказательство, что 2^20 * e = 2^5 * (2^15 * e), мгновенно.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
data Double =
  D (A : U)            -- carrier
    (double : A -&amp;gt; A)  -- doubling function computing 2 * x
    (elt : A)          -- element to double

carrier : Double -&amp;gt; U = split D c _ _ -&amp;gt; c

iter (A : U) : nat -&amp;gt; (A -&amp;gt; A) -&amp;gt; A -&amp;gt; A = split
  zero  -&amp;gt; \(f:A-&amp;gt;A) (z:A) -&amp;gt; z
  suc n -&amp;gt; \(f:A-&amp;gt;A) (z:A) -&amp;gt; f (iter A n f z)

double : (D : Double) -&amp;gt; (carrier D -&amp;gt; carrier D)
 = split D _ op _ -&amp;gt; op

doubles (D : Double) (n : nat) (x : carrier D) : carrier D =
  iter (carrier D) n (double D) x

propDouble (D : Double) : U
 = Path (carrier D) (doubles D n20 (elt D))
                    (doubles D n5 (doubles D n15 (elt D)))

bin1024 : binN = binNpos (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 pos1))))))))))

doublesBinN : nat -&amp;gt; binN -&amp;gt; binN = split
  zero  -&amp;gt; \(m:binN) -&amp;gt; m
  suc n -&amp;gt; \(m:binN) -&amp;gt; doublesBinN n (doubleBinN m)

DoubleBinN : Double = D binN doubleBinN bin1024

propBin : propDouble DoubleBinN = _&gt; doublesBinN n20 (elt DoubleBinN)

&amp;gt; :n propDouble
NORMEVAL: \(D : Double) -&amp;gt; PathP ( carrier D) (double D (double D (double D (double D (double D (double D (double D (double D (double D (double D (double D (double D (double D (double D (double D (double D (double D (double D (double D (double D (elt D))))))))))))))))))))) (double D (double D (double D (double D (double D (double D (double D (double D (double D (double D (double D (double D (double D (double D (double D (double D (double D (double D (double D (double D (elt D)))))))))))))))))))))

&amp;gt; :n propBin
NORMEVAL:  binNpos (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 (x0 pos1))))))))))))))))))))))))))))))
&lt;/pre&gt;</content>
		<author>
			<name>Namdak Tonpa</name>
			<uri>https://maxim.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Старая Школа</title>
			<subtitle type="html">Сущность Пространства</subtitle>
			<link rel="self" href="http://maxim.livejournal.com/data/atom?tag=cs"/>
			<id>urn:lj:livejournal.com:atom1:maxim</id>
			<updated>2018-03-14T16:00:45+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Книга про моделирование и Haskell</title>
		<link href="http://dsorokin.blogspot.com/2017/11/haskell.html"/>
		<id>tag:blogger.com,1999:blog-8641042312683198534.post-3235187066824500818</id>
		<updated>2017-11-11T13:52:54+00:00</updated>
		<content type="html">&lt;div dir=&quot;ltr&quot;&gt;Здесь тоже поделюсь. Написал книгу про имитационное моделирование с той точки зрения, как я это реализовал на языке Haskell в своем комплексе программных библиотек Айвика. Книгу назвал &lt;i&gt;«Aivika: Computation-based Modeling and Simulation in Haskell»&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Скачать можно по любой из двух следующих ссылок, которые обе ведут на один источник, но вторая ссылка точно должна работать:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://aivikasoft.com/downloads/aivika/aivika.pdf&quot;&gt;http://aivikasoft.com/downloads/aivika/aivika.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/dsorokin/dsorokin.github.io/blob/master/downloads/aivika/aivika.pdf&quot;&gt;https://github.com/dsorokin/dsorokin.github.io/blob/master/downloads/aivika/aivika.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Книга охватывает последовательное моделирование, параллельное и распределенное моделирование, а также вложенное моделирование. Фокус на дискретно-событийном моделировании, прежде всего, процесс-ориентированной парадигме, которая сводится на уровне реализации к событийно-ориентированной.&lt;br /&gt;&lt;br /&gt;Начну представлять книгу с конца.&lt;br /&gt;&lt;br /&gt;В самом конце книги описан мой эксперимент по вложенному моделированию, который можно применить, например, к финансовому моделированию. Так, в узлах решетки я запускаю вложенные имитации для эмуляции некоторого случайного процесса, который потом можно оценить. Мне кажется, что это может быть очень интересным расширением известной биномиальной модели, которая широко применяется для оценки опционов и контрактов. Я же позволяю случайные процессы описывать еще в терминах дискретных событий и дискретных процессов, да того же GPSS.&lt;br /&gt;&lt;br /&gt;Середина книги посвящена моей реализации параллельного и распределенного моделирования на основе оптимистичного метода деформации времени. Описано, как создавать такие модели, как запускать, как мониторить, как работать с вводом-выводом в условиях распределенной имитации с откатами, какие есть нюансы, например, при определении пороговых значений очередей для эффективного задания горизонта моделирования.&lt;br /&gt;&lt;br /&gt;Главная же часть книги описывает основные концепции дискретно-событийного моделирования применительно к последовательной имитации. Дискретные события, дискретные процессы, ресурсы, вытеснение ресурса, очереди и т.д. Но очень важно заметить, что практически все это работает и в случае распределенного моделирования, и вложенного моделирования, включая GPSS-подобный предметно-ориентированный язык, который тоже бегло описан.&lt;br /&gt;&lt;br /&gt;Книга снабжена графиками и гистограммами, которые создала сама Айвика во время имитационных экспериментов. Вы их также можете запрограммировать. Готовые отчеты с результатами моделирования Айвика умеет создавать автоматически. Поддерживается метод Монте-Карло. Можно проводить анализ чувствительности относительно случайных внешних параметров. Легко запустить имитацию с тысячами параллельных прогонов.&lt;br /&gt;&lt;br /&gt;При всем этом мы можем с помощью довольно высокоуровневых вычислений просто определять довольно сложные имитационные модели, где в иных условиях пришлось бы прибегнуть к помощи дорогущих и сложных систем визуального моделирования.&lt;br /&gt;&lt;br /&gt;В общем, приглашаю к прочтению. Книга о том, как можно использовать мой комплекс библиотек Айвика для решения самых разных задач имитационного моделирования. Есть только один нюанс. Для охвата более широкой аудитории я решил написать книгу на английском языке.&lt;br /&gt;&lt;br /&gt;И добавлю еще, что на мой взгляд скорость моделирования получилась очень хорошей. Постоянно делаю замеры.&lt;/div&gt;</content>
		<author>
			<name>dsorokin</name>
			<email>noreply@blogger.com</email>
			<uri>http://dsorokin.blogspot.com/search/label/fp</uri>
		</author>
		<source>
			<title type="html">Давид Сорокин</title>
			<link rel="self" href="http://dsorokin.blogspot.com/feeds/posts/default/-/fp"/>
			<id>tag:blogger.com,1999:blog-8641042312683198534</id>
			<updated>2021-12-10T21:30:10+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Унивалентность на кубических типах</title>
		<link href="https://nponeccop.livejournal.com/581276.html"/>
		<id>urn:lj:livejournal.com:atom1:nponeccop:581276</id>
		<updated>2017-11-08T05:08:32+00:00</updated>
		<content type="html">&lt;a href=&quot;https://github.com/mortberg/cubicaltt/tree/master/lectures&quot; rel=&quot;nofollow&quot;&gt;https://github.com/mortberg/cubicaltt/tree/master/lectures&lt;/a&gt; (там же чекер на х-е) позволяет понять, как примерно будет выглядеть обещанное Воеводским счастье (&quot;his vision of a foundational system for mathematics in which the basic objects are homotopy types, based on a type theory satisfying the univalence axiom, and formalized in a computer proof assistant&quot;)&lt;br /&gt;&lt;br /&gt;Идея заключается в том, чтобы усилить identity type так, чтобы больше вещей можно было доказать &quot;в одно действие&quot; через аналог идрисовского replace (названный в лекциях subst):&lt;br /&gt;&lt;br /&gt;replace : {a:_} -&amp;gt; {x:_} -&amp;gt; {y:_} -&amp;gt; {P : a -&amp;gt; Type} -&amp;gt; x = y -&amp;gt; P x -&amp;gt; P y&lt;br /&gt;&lt;br /&gt;Для этого из &lt;s&gt;гомосексуальных&lt;/s&gt; гомологических примитивов собирается тип Path X a b, играющий роль {X} -&amp;gt; (a: X) = (b: X), который можно населить:&lt;br /&gt;&lt;br /&gt;- &quot;рефлом&quot;, т.е. definitionally equal terms&lt;br /&gt;&lt;br /&gt;refl (A : U) (a : A) : Path A a a&lt;br /&gt;&lt;br /&gt;- экстенсионально равными функциями (версия для dependent product тоже есть)&lt;br /&gt;&lt;br /&gt;funExtNonDep (A B: U) (f g : A -&amp;gt; B) (p : (x : A) -&amp;gt; Path B (f x) (g x)) : Path (A -&amp;gt; B) f g&lt;br /&gt;&lt;br /&gt;- изоморфными типами (т.е. если у нас есть функция между значениями типов A и B с левой и правой обратной - то типы &quot;равны&quot;):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;isoPath (A B : U) (f : A -&amp;gt; B) (g : B -&amp;gt; A)
      (s : (y : B) -&amp;gt; Path B (f (g y)) y)
      (t : (x : A) -&amp;gt; Path A (g (f x)) x) : Path U A B&lt;/pre&gt;Интересно, что всё это работает и с функциями уровня типов.&lt;br /&gt;&lt;br /&gt;В результате можно написать такую функцию:&lt;pre&gt;functor_transport (F G: U -&amp;gt; U) (p: Path (U -&amp;gt; U) F G) (f: functor F): functor G
  = subst (U -&amp;gt; U) functor F G p f&lt;/pre&gt;То есть, для изоморфных типов F и G (с кайндами * -&amp;gt; * в терминах х-я) по инстансу функтора для F можно родить инстанс для G, при этом тело и сигнатуры fmap и теоремы о соблюдении законов функтора переписываются &quot;автомагически&quot;.&lt;br /&gt;&lt;br /&gt;Ну а дальше оказывается, что изоморфизмы у нас повсеместно. Скажем, таплы у самоизоморфны - т.е. есть Path U (A, B) (B, A), ну и из (first, fst, functorForA) &quot;в одно действие&quot; получаются (second, snd, functorForB). А дальше из (first, fst, functorForA, second, snd, functorForB) &quot;в одно действие&quot; получается реализация 6 функций и док-во 4 теорем (1 ф-ция и 2 теоремы внутри functorA/B сидят) для пар в кодировках чёрча и остальных over 9000 возможных представлений пар.&lt;br /&gt;&lt;br /&gt;Ну, на самом деле требуется доказать в каждом случае соответствующий Path, но это проще чем передоказывать теоремы.&lt;br /&gt;&lt;br /&gt;Кроме того, есть техника метапрограммирования: есть изоморфизм bool самого с собой (через not). И мы можем написать функцию, автомагически заменяющую все булы в любом терме вида F bool на их отрицания (и функции что самое смешное тоже переписываются). Типа&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;data food = cheese | beef | chicken

-- Predicate encoding which food someone eats
eats (X : U) : U = list (and food X)

anders : eats bool = cons (cheese,true)
                    (cons (beef,false)
                    (cons (chicken,false) nil))

-- Cyril eats the complement of Anders
cyril : eats bool = substEquiv eats bool bool notEquiv anders&lt;/pre&gt;notEquiv тут как раз доказательство изоморфизма. Ну и понятно что заменяются не все вхождения Bool, а &quot;все вхождения в позициях, отмеченных Х&quot;. Любопытно, что код ничего не знает о том как обходить списки - у нас нету fmap для eats :)&lt;br /&gt;&lt;br /&gt;Дебильные комментарии, комментарии &quot;практиков&quot; и школьников - как обычно, скринятся. RTFM, do you homework, пиши развёрнуто и конструктивно! &lt;a href=&quot;https://t.me/groupoid&quot; rel=&quot;nofollow&quot;&gt;https://t.me/groupoid&lt;/a&gt; (но там банхаммер, так что лучше сюда)</content>
		<author>
			<name>Andy Melnikov</name>
			<uri>https://nponeccop.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Дважды мудак</title>
			<subtitle type="html">Почти исключительно о функциональном</subtitle>
			<link rel="self" href="http://nponeccop.livejournal.com/data/atom?tag=fp"/>
			<id>urn:lj:livejournal.com:atom1:nponeccop</id>
			<updated>2018-03-14T11:00:40+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Cubical Parser in Erlang</title>
		<link href="https://maxim.livejournal.com/525197.html"/>
		<id>urn:lj:livejournal.com:atom1:maxim:525197</id>
		<updated>2017-11-07T21:08:04+00:00</updated>
		<content type="html">Сделано все, кроме гомотопических прититивов &amp;lt;&amp;gt; @ []. Вернулись на позапрошлогодний уровень EXE. Пришлось сделать case аналисис в стиле ML языков (с палками), так как, говорят 2D синтаксис голым эрланговским LALR не возьмешь. С where тоже проблемы, пришлось делать карированую версию where. Оно и логично — в минималистичных ядрах должно быть все карированое. YECC файл занимает ровно 50 строчек, в отличие от 261 строки для EXE. В примере показан Хрономирфизм и Категорная Семантика односвязного списка&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
module lam1 where

listCategory (A: U) (o: listObject A): U = undefined

histo (A:U) (F: U -&amp;gt; U) (X: functor F) (f: F (cofree F A) -&amp;gt; A) (z: fix F): A
  = extract A F ((cata (cofree F A) F X (\(x: F (cofree F A)) -&amp;gt; CoFree (Fix (CoBindF (f x) ((X.1 (cofree F A) (fix (cofreeF F A)) (uncofree A F) x)))))) z) where
  extract (A: U) (F: U -&amp;gt; U): cofree F A -&amp;gt; A = split
    | CoFree f -&amp;gt; unpack_fix f where
  unpack_fix: fix (cofreeF F A) -&amp;gt; A = split
    | Fix f -&amp;gt; unpack_cofree f where
  unpack_cofree: cofreeF F A (fix (cofreeF F A)) -&amp;gt; A = split
    | CoBindF a -&amp;gt; a

futu (A: U) (F: U -&amp;gt; U) (X: functor F) (f: A -&amp;gt; F (free F A)) (a: A): fix F
  = Fix (X.1 (free F A) (fix F) (\(z: free F A) -&amp;gt; w z) (f a)) where
  w: free F A -&amp;gt; fix F = split
    | Free x -&amp;gt; unpack x where
  unpack_free: freeF F A (fix (freeF F A)) -&amp;gt; fix F = split
    | ReturnF x -&amp;gt; futu A F X f x
    | BindF g -&amp;gt; Fix (X.1 (fix (freeF F A)) (fix F) (\(x: fix (freeF F A)) -&amp;gt; w (Free x)) g) where
  unpack: fix (freeF F A) -&amp;gt; fix F = split
    | Fix x -&amp;gt; unpack_free x

chrono (A B: U) (F: U -&amp;gt; U) (X: functor F)
       (f: F (cofree F B) -&amp;gt; B)
       (g: A -&amp;gt; F (free F A))
       (a: A): B = histo B F X f (futu A F X g a)

listAlg (A : U) : U
    = (X: U)
    * (nil: X)
    * (cons: A -&amp;gt; X -&amp;gt; X)
    * Unit

listMor (A: U) (x1 x2: listAlg A) : U
    = (map: x1.1 -&amp;gt; x2.1)
    * (mapNil: Path x2.1 (map (x1.2.1)) (x2.2.1))
    * (mapCons: (a:A) (x: x1.1) -&amp;gt; Path x2.1 (map (x1.2.2.1 a x)) (x2.2.2.1 a (map x)))
    * Unit

listObject (A: U) : U
    = (point: (x: listAlg A) -&amp;gt; x.1)
    * (map: (x1 x2: listAlg A)
            (m: listMor A x1 x2) -&amp;gt;
            Path x2.1 (m.1 (point x1)) (point x2))
    * Unit
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
{module,{id,1,&quot;lam1&quot;},
        {where,1},
        [],
        [{def,{id,5,&quot;listCategory&quot;},
              {tele,[{id,5,&quot;A&quot;}],
                    {id,5,&quot;U&quot;},
                    {tele,[{id,5,&quot;o&quot;}],{app,{id,5,&quot;listObject&quot;},{id,5,&quot;A&quot;}},[]}},
              {id,5,&quot;U&quot;},
              {id,5,&quot;undefined&quot;}},
         {def,{id,7,&quot;histo&quot;},
              {tele,[{id,7,&quot;A&quot;}],
                    {id,7,&quot;U&quot;},
                    {tele,[{id,7,&quot;F&quot;}],
                          {pi,{id,7,&quot;U&quot;},{id,7,&quot;U&quot;}},
                          {tele,[{id,7,&quot;X&quot;}],
                                {app,{id,7,&quot;functor&quot;},{id,7,&quot;F&quot;}},
                                {tele,[{id,7,[...]}],
                                      {pi,{app,...},{...}},
                                      {tele,[...],...}}}}},
              {id,7,&quot;A&quot;},
              {app,{app,{app,{id,8,&quot;extract&quot;},{id,8,&quot;A&quot;}},{id,8,&quot;F&quot;}},
                   {app,{app,{app,{app,{app,{id,8,[...]},{app,{...},...}},
                                       {id,8,&quot;F&quot;}},
                                  {id,8,&quot;X&quot;}},
                             {app,{lam,{tele,[{id,...}],{app,...},[]},{id,8,[...]}},
                                  {app,{id,8,[...]},{app,{...},...}}}},
                        {id,8,&quot;z&quot;}}},
              {def,{id,9,&quot;extract&quot;},
                   {tele,[{id,9,&quot;A&quot;}],
                         {id,9,&quot;U&quot;},
                         {tele,[{id,9,&quot;F&quot;}],{pi,{id,9,[...]},{id,9,...}},[]}},
                   {pi,{app,{app,{id,9,&quot;cofree&quot;},{id,9,&quot;F&quot;}},{id,9,&quot;A&quot;}},
                       {id,9,&quot;A&quot;}},
                   {split,[{br,[{id,10,&quot;CoFree&quot;},{id,10,[...]}],
                               {app,{id,10,...},{id,...}}}]},
                   {def,{id,11,&quot;unpack_fix&quot;},
                        [],
                        {pi,{app,{id,...},{...}},{id,11,...}},
                        {split,[{br,...}]},
                        {def,{id,...},[],...}}}},
         {def,{id,16,&quot;futu&quot;},
              {tele,[{id,16,&quot;A&quot;}],
                    {id,16,&quot;U&quot;},
                    {tele,[{id,16,&quot;F&quot;}],
                          {pi,{id,16,&quot;U&quot;},{id,16,&quot;U&quot;}},
                          {tele,[{id,16,&quot;X&quot;}],
                                {app,{id,16,&quot;functor&quot;},{id,16,[...]}},
                                {tele,[{id,16,...}],{app,{...},...},{tele,...}}}}},
              {app,{id,16,&quot;fix&quot;},{id,16,&quot;F&quot;}},
              {app,{id,17,&quot;Fix&quot;},
                   {app,{app,{app,{app,{fst,{id,17,...}},{app,{app,...},{...}}},
                                  {app,{id,17,[...]},{id,17,...}}},
                             {lam,{tele,[{id,17,...}],{app,{...},...},[]},
                                  {app,{id,17,...},{id,...}}}},
                        {app,{id,17,&quot;f&quot;},{id,17,&quot;a&quot;}}}},
              {def,{id,18,&quot;w&quot;},
                   [],
                   {pi,{app,{app,{id,18,&quot;free&quot;},{id,18,[...]}},{id,18,&quot;A&quot;}},
                       {app,{id,18,&quot;fix&quot;},{id,18,&quot;F&quot;}}},
                   {split,[{br,[{id,19,[...]},{id,19,...}],
                               {app,{id,...},{...}}}]},
                   {def,{id,20,&quot;unpack_free&quot;},
                        [],
                        {pi,{app,{...},...},{app,...}},
                        {app,{split,...},{...}},
                        {def,{...},...}}}},
         {def,{id,26,&quot;chrono&quot;},
              {tele,[{id,26,&quot;B&quot;},{id,26,&quot;A&quot;}],
                    {id,26,&quot;U&quot;},
                    {tele,[{id,26,&quot;F&quot;}],
                          {pi,{id,26,&quot;U&quot;},{id,26,&quot;U&quot;}},
                          {tele,[{id,26,&quot;X&quot;}],
                                {app,{id,26,[...]},{id,26,...}},
                                {tele,[{id,...}],{pi,...},{...}}}}},
              {id,29,&quot;B&quot;},
              {app,{app,{app,{app,{app,{id,29,&quot;histo&quot;},{id,29,[...]}},
                                  {id,29,&quot;F&quot;}},
                             {id,29,&quot;X&quot;}},
                        {id,29,&quot;f&quot;}},
                   {app,{app,{app,{app,{app,{id,...},{...}},{id,29,...}},
                                  {id,29,&quot;X&quot;}},
                             {id,29,&quot;g&quot;}},
                        {id,29,&quot;a&quot;}}}},
         {def,{id,31,&quot;listAlg&quot;},
              {tele,[{id,31,&quot;A&quot;}],{id,31,&quot;U&quot;},[]},
              {id,31,&quot;U&quot;},
              {sigma,{tele,[{id,32,&quot;X&quot;}],{id,32,&quot;U&quot;},[]},
                     {sigma,{tele,[{id,33,&quot;nil&quot;}],{id,33,&quot;X&quot;},[]},
                            {sigma,{tele,[{id,34,...}],{pi,{...},...},[]},
                                   {id,35,&quot;Unit&quot;}}}}},
         {def,{id,37,&quot;listMor&quot;},
              {tele,[{id,37,&quot;A&quot;}],
                    {id,37,&quot;U&quot;},
                    {tele,[{id,37,&quot;x2&quot;},{id,37,&quot;x1&quot;}],
                          {app,{id,37,&quot;listAlg&quot;},{id,37,&quot;A&quot;}},
                          []}},
              {id,37,&quot;U&quot;},
              {sigma,{tele,[{id,38,&quot;map&quot;}],
                           {pi,{fst,{id,38,[...]}},{fst,{id,38,...}}},
                           []},
                     {sigma,{tele,[{id,39,&quot;mapNil&quot;}],
                                  {app,{app,{...},...},{fst,...}},
                                  []},
                            {sigma,{tele,[{id,...}],{app,...},[]},{id,41,[...]}}}}},
         {def,{id,43,&quot;listObject&quot;},
              {tele,[{id,43,&quot;A&quot;}],{id,43,&quot;U&quot;},[]},
              {id,43,&quot;U&quot;},
              {sigma,{tele,[{id,44,&quot;point&quot;}],
                           {pi,{tele,[{id,...}],{app,...},[]},{fst,{id,...}}},
                           []},
                     {sigma,{tele,[{id,45,[...]}],{app,{app,...},{...}},[]},
                            {id,48,&quot;Unit&quot;}}}}]}
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;В тред приглашаются специалисты по LALR парсерам.&lt;br /&gt;_______________&lt;br /&gt;[1]. &lt;a href=&quot;https://github.com/groupoid/infinity/blob/master/src/cub_parser.yrl&quot; rel=&quot;nofollow&quot;&gt;https://github.com/groupoid/infinity/blob/master/src/cub_parser.yrl&lt;/a&gt;</content>
		<author>
			<name>Namdak Tonpa</name>
			<uri>https://maxim.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Старая Школа</title>
			<subtitle type="html">Сущность Пространства</subtitle>
			<link rel="self" href="http://maxim.livejournal.com/data/atom?tag=cs"/>
			<id>urn:lj:livejournal.com:atom1:maxim</id>
			<updated>2018-03-14T16:00:45+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Любые имена и ключ -m в MLC</title>
		<link href="https://codedot.dreamwidth.org/180678.html"/>
		<id>tag:dreamwidth.org,2013-01-03:1881992:180678</id>
		<updated>2017-11-04T02:06:59+00:00</updated>
		<content type="html">&lt;a href=&quot;https://www.npmjs.com/package/@alexo/lambda&quot;&gt;Лямбда&lt;/a&gt; стала веселее!&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;$&lt;/span&gt; npm i -g @alexo/lambda@0.2.8
&lt;span&gt;└── @alexo/lambda@0.2.8 &lt;/span&gt;

&lt;span&gt;$&lt;/span&gt; cat фубля.mlc 
&lt;span&gt;I = x: x;&lt;/span&gt;
&lt;span&gt;K = x, y: x;&lt;/span&gt;
&lt;span&gt;T = K;&lt;/span&gt;
&lt;span&gt;F = K I;&lt;/span&gt;
&lt;span&gt;NOT = p, a, b: p b a;&lt;/span&gt;
&lt;span&gt;+ = m, n: f, x: m f (n f x);&lt;/span&gt;
&lt;span&gt;* = m, n: f: m (n f);&lt;/span&gt;
&lt;span&gt;^ = m, n: n m;&lt;/span&gt;
&lt;span&gt;0 = F;&lt;/span&gt;
&lt;span&gt;1 = I;&lt;/span&gt;
&lt;span&gt;2 = + 1 1;&lt;/span&gt;
&lt;span&gt;3 = + 1 2;&lt;/span&gt;
&lt;span&gt;4 = ^ 2 2;&lt;/span&gt;
&lt;span&gt;5 = + 2 3;&lt;/span&gt;
&lt;span&gt;6 = * 2 3;&lt;/span&gt;
&lt;span&gt;7 = + 3 4;&lt;/span&gt;
&lt;span&gt;8 = ^ 2 3;&lt;/span&gt;
&lt;span&gt;9 = ^ 3 2;&lt;/span&gt;
&lt;span&gt;10 = * 2 5;&lt;/span&gt;
&lt;span&gt;1000 = ^ 10 3;&lt;/span&gt;
&lt;span&gt;четно = n: n NOT T;&lt;/span&gt;
&lt;span&gt;$&lt;/span&gt; &lt;span&gt;alias&lt;/span&gt; лямбда&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;lambda -pm фубля.mlc&amp;quot;&lt;/span&gt;
&lt;span&gt;$&lt;/span&gt; лямбда &lt;span&gt;'четно (^ 9 1000) да. нет. и чо?'&lt;/span&gt;
&lt;span&gt;48363(8123), 324 ms&lt;/span&gt;
&lt;span&gt;нет. и чо?&lt;/span&gt;
&lt;span&gt;$&lt;/span&gt; лямбда &lt;span&gt;'четно (^ 10 1000) да. нет. и чо?'&lt;/span&gt;
&lt;span&gt;55403(10146), 384 ms&lt;/span&gt;
&lt;span&gt;да. и чо?&lt;/span&gt;
&lt;span&gt;$&lt;/span&gt; 
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Вот так играешься, играешься, и доиграешься до &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.52.1414&amp;rep=rep1&amp;type=pdf&quot;&gt;P = NP&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=180678&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; /&gt; comments</content>
		<author>
			<name>Anton Salikhmetov</name>
			<uri>https://codedot.dreamwidth.org/</uri>
		</author>
		<source>
			<title type="html">Anton Salikhmetov</title>
			<subtitle type="html">Anton Salikhmetov</subtitle>
			<link rel="self" href="http://codedot.dreamwidth.org/data/atom?tag=lambda+calculus"/>
			<id>tag:dreamwidth.org,2013-01-03:1881992</id>
			<updated>2019-01-15T07:00:04+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">List Eliminator and Case Analysis in Pure Functions</title>
		<link href="https://maxim.livejournal.com/524254.html"/>
		<id>urn:lj:livejournal.com:atom1:maxim:524254</id>
		<updated>2017-10-31T12:00:14+00:00</updated>
		<content type="html">&lt;pre&gt;
-- List/@
  λ (A : *)
→ ∀ (List: *)
→ ∀ (Cons: A → List → List)
→ ∀ (Nil: List)
→ List

-- List/Cons
  λ (A: *)
→ λ (Head: A)
→ λ (Tail:
    ∀ (List: *)
  → ∀ (Cons: A -&amp;gt; List -&amp;gt; List)
  → ∀ (Nil: List)
  → List)
→ λ (List: *)
→ λ (Cons: A -&amp;gt; List -&amp;gt; List)
→ λ (Nil: List)
→ Cons Head (Tail List Cons Nil)

-- List/Nil
  λ (A: *)
→ λ (List: *)
→ λ (Cons: A -&amp;gt; List -&amp;gt; List)
→ λ (Nil: List)
→ Nil

-- List/cond
   \ (a : *)
-&amp;gt; \ (x: \/ (r : *) -&amp;gt; (a -&amp;gt; r -&amp;gt; r) -&amp;gt; r -&amp;gt; r)
-&amp;gt; x

-- List/match
   \ (A: *)
-&amp;gt; \ (value: #List/@ A)
-&amp;gt; \ (ret: *)
-&amp;gt; \ (cons_branch: ret)
-&amp;gt; \ (nil_branch: ret)
-&amp;gt; #List/cond A value ret
              (\(_:A)-&amp;gt;\(_:ret)-&amp;gt; cons_branch)
              nil_branch

-- List/match.test
#List/match #Nat/@ (#List/Nil #Nat/@)
            #Nat/@ #Nat/Two #Nat/Five

-- List/match.test2
#List/match #Nat/@ (#List/Cons #Nat/@ #Nat/Zero (#List/Nil #Nat/@))
            #Nat/@ #Nat/Two #Nat/Five

&amp;gt; ch:unnat('List':'match.test2'()).
2
&amp;gt; ch:unnat('List':'match.test'()).
5

&lt;/pre&gt;</content>
		<author>
			<name>Namdak Tonpa</name>
			<uri>https://maxim.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Старая Школа</title>
			<subtitle type="html">Сущность Пространства</subtitle>
			<link rel="self" href="http://maxim.livejournal.com/data/atom?tag=cs"/>
			<id>urn:lj:livejournal.com:atom1:maxim</id>
			<updated>2018-03-14T16:00:45+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Доказательство коммутативности в кубике</title>
		<link href="https://maxim.livejournal.com/523057.html"/>
		<id>urn:lj:livejournal.com:atom1:maxim:523057</id>
		<updated>2017-10-31T04:51:42+00:00</updated>
		<content type="html">Если кратно, то индукция, индуктивные типы с приходом гомотопических пруверов кажутся уж не таким и сильными инструментами. Покажем на примере коммутативности сложения для двух и трех аргументов.&lt;br /&gt;&lt;br /&gt;Доказательство коммутативности сложения курильщика&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
Theorem plus_comm : forall n m : nat, n + m = m + n.
Proof.
  intros n m.
  induction n as [| n' Sn' ].
  - simpl. rewrite &amp;lt;- plus_n_0. reflexivity.
  - simpl. rewrite &amp;lt;- plus_n_Sm. rewrite &amp;lt;- Sn'. reflexivity.
Qed.

Theorem plus_assoc : forall n m p : nat, n + (m + p) = (n + m) + p.
Proof.
  intros n m p.
  induction n as [| n' Sn' ].
  - simpl. reflexivity.
  - simpl. rewrite &amp;lt;- Sn'. reflexivity.
Qed.
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Доказательство коммутативностит сложения нормального человека&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
add_comm (a : nat) : (n : nat) -&amp;gt; Path nat (add a n) (add n a) = split
  zero  -&amp;gt; &amp;lt;i&amp;gt; add_zero a @ -i
  suc m -&amp;gt; &amp;lt;i&amp;gt; comp (&amp;lt;_&amp;gt; nat) (suc (add_comm a m @ i))
                    [ (i = 0) -&amp;gt; &amp;lt;j&amp;gt; suc (add a m)
                    , (i = 1) -&amp;gt; &amp;lt;j&amp;gt; add_suc m a @ -j ]

add_comm3 (a b c : nat) : Path nat (add a (add b c)) (add c (add b a)) =
 let r: Path nat (add a (add b c)) (add a (add c b)) = &amp;lt;i&amp;gt; add a (add_comm b c @ i)
  in &amp;lt;i&amp;gt; comp (&amp;lt;_&amp;gt; nat) ((add_comm a (add c b)) @ i)
              [ (i = 0) -&amp;gt; &amp;lt;j&amp;gt; r @ -j,
                (i = 1) -&amp;gt; (&amp;lt;z&amp;gt; assocAdd c b a @ -z) ]
&lt;/pre&gt;</content>
		<author>
			<name>Namdak Tonpa</name>
			<uri>https://maxim.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Старая Школа</title>
			<subtitle type="html">Сущность Пространства</subtitle>
			<link rel="self" href="http://maxim.livejournal.com/data/atom?tag=cs"/>
			<id>urn:lj:livejournal.com:atom1:maxim</id>
			<updated>2018-03-14T16:00:45+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Клон N2O.hs</title>
		<link href="https://nponeccop.livejournal.com/580871.html"/>
		<id>urn:lj:livejournal.com:atom1:nponeccop:580871</id>
		<updated>2017-10-30T18:09:36+00:00</updated>
		<content type="html">&lt;a href=&quot;http://hackage.haskell.org/package/threepenny-gui&quot; rel=&quot;nofollow&quot;&gt;http://hackage.haskell.org/package/threepenny-gui&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Идея та же - вебсокет-сервер с RPC в обратную сторону, т.е. из х-я в б-р.&lt;br /&gt;&lt;br /&gt;Причем даже через eval:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/js/ffi.js#L78&quot; rel=&quot;nofollow&quot;&gt;https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/js/ffi.js#L78&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Оно там на говне и палках, но можно понадергать идей и кода и постепенно унифицировать.</content>
		<author>
			<name>Andy Melnikov</name>
			<uri>https://nponeccop.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Дважды мудак</title>
			<subtitle type="html">Почти исключительно о функциональном</subtitle>
			<link rel="self" href="http://nponeccop.livejournal.com/data/atom?tag=fp"/>
			<id>urn:lj:livejournal.com:atom1:nponeccop</id>
			<updated>2018-03-14T11:00:40+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Contracts first</title>
		<link href="https://nponeccop.livejournal.com/580774.html"/>
		<id>urn:lj:livejournal.com:atom1:nponeccop:580774</id>
		<updated>2017-10-30T12:07:56+00:00</updated>
		<content type="html">Тут из &lt;a href=&quot;http://www.spark-2014.org/about&quot; rel=&quot;nofollow&quot;&gt;альтернативной вселенной&lt;/a&gt; сообщают, что завтипы говно и не нужны.&lt;br /&gt;&lt;br /&gt;Вместо этого берете язык с простыми типами и контрактами в стиле Eiffel &lt;a href=&quot;https://www.eiffel.com/values/design-by-contract/introduction/&quot; rel=&quot;nofollow&quot;&gt;https://www.eiffel.com/values/design-by-contract/introduction/&lt;/a&gt; и скармливаете статик ассерты в &lt;a href=&quot;http://why3.lri.fr/#users&quot; rel=&quot;nofollow&quot;&gt;http://why3.lri.fr/#users&lt;/a&gt; которая дальше их скармливает пруверам из списка &lt;a href=&quot;http://why3.lri.fr/#provers&quot; rel=&quot;nofollow&quot;&gt;http://why3.lri.fr/#provers&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Оно и в кок конечно умеет скармливать, но пруверы для конечных теорий (типа SMT FixedSizeBitVectors) по понятным причинам и работают лучше, и точнее моделируют машинное представление.</content>
		<author>
			<name>Andy Melnikov</name>
			<uri>https://nponeccop.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Дважды мудак</title>
			<subtitle type="html">Почти исключительно о функциональном</subtitle>
			<link rel="self" href="http://nponeccop.livejournal.com/data/atom?tag=fp"/>
			<id>urn:lj:livejournal.com:atom1:nponeccop</id>
			<updated>2018-03-14T11:00:40+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Pure Sigma</title>
		<link href="https://maxim.livejournal.com/522901.html"/>
		<id>urn:lj:livejournal.com:atom1:maxim:522901</id>
		<updated>2017-10-29T23:27:58+00:00</updated>
		<content type="html">Кто-то на гиттер канале просил год назад, чтобы ему Сигму закодировали в чистых функциях. Я тогда не смог это сделать, но вот недавно формировал домашки и решил поставить такое задание в качестве домашки. Мне вроде говорили, что Альтенкирх где-то писал что это невозможно или по крайней мере это не обладает достаточно хорошими вычислительными характеристиками.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
-- Sigma/@
   \ (A: *)
-&amp;gt; \ (P: A -&amp;gt; *)
-&amp;gt; \ (n: A)
-&amp;gt; \/ (Exists: *)
-&amp;gt; \/ (Intro: A -&amp;gt; P n -&amp;gt; Exists)
-&amp;gt; Exists

-- Sigma/Intro
   \ (A: *)
-&amp;gt; \ (P: A -&amp;gt; *)
-&amp;gt; \ (x: A)
-&amp;gt; \ (y: P x)
-&amp;gt; \ (Exists: *)
-&amp;gt; \ (Intro: A -&amp;gt; P x -&amp;gt; Exists)
-&amp;gt; Intro x y

-- Sigma/fst
   \ (A: *)
-&amp;gt; \ (B: A -&amp;gt; *)
-&amp;gt; \ (n: A)
-&amp;gt; \ (S: #Sigma/@ A B n)
-&amp;gt; S A ( \(x: A) -&amp;gt; \(_: B n) -&amp;gt; x )

-- Sigma/snd
   \ (A: *)
-&amp;gt; \ (B: A -&amp;gt; *)
-&amp;gt; \ (n: A)
-&amp;gt; \ (S: #Sigma/@ A B n)
-&amp;gt; S (B n) ( \(_: A) -&amp;gt; \(y: B n) -&amp;gt; y )

-- Sigma/test
-- P: nat -&amp;gt; U = (\(_:nat) -&amp;gt; list nat)
-- mk nat P n5 nil
#Sigma/Intro #Nat/@
             (\(n: #Nat/@) -&amp;gt; #List/@ #Nat/@)
             #Nat/Five
             (#List/replicate #Nat/@ #Nat/Five #Nat/Zero)

-- Sigma/test.fst
-- fst nat P zero test
#Sigma/fst #Nat/@
           (\(n: #Nat/@) -&amp;gt; #List/@ #Nat/@)
           #Nat/Zero
           #Sigma/test

-- Sigma/test.snd
-- snd nat P zero test
#Sigma/snd #Nat/@
           (\(n: #Nat/@) -&amp;gt; #List/@ #Nat/@)
           #Nat/Zero
           #Sigma/test
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;В тестах создание тапла (nat, list nat) = (5, [0,0,0,0,0]) и взятие у него первой и второй проекции:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
1&amp;gt; om:fst(om:erase(om:norm(om:a(&quot;#Sigma/test.snd&quot;))))
== om:fst(om:erase(om:norm(om:a(&quot;(#List/replicate #Nat/@ #Nat/Five #Nat/Zero)&quot;)))).
true
2&amp;gt; om:fst(om:erase(om:norm(om:a(&quot;#Sigma/test.fst&quot;))))
== om:fst(om:erase(om:norm(om:a(&quot;#Nat/Five&quot;)))).
true
3&amp;gt; om:type(om:type(om:a(&quot;#Sigma/snd&quot;))).
{star,1}
4&amp;gt; om:type(om:type(om:a(&quot;#Sigma/fst&quot;))).
{star,1}
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Трюк заключается в протаскивании первого элемента в базу, все равно конструктор один и он же принимает его. Т.е. классическое индуктивное определение&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
data Sigma (A: Type) (P: A -&amp;gt; Type): Type
   = (intro: (x:A) (y:P x) -&amp;gt; Sigma A P)
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;сменяется на следующее:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
data Sigma (A: Type) (P: A -&amp;gt; Type) (x:A): Type
   = (intro: (y:P x) -&amp;gt; Sigma A P)
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Наверн проблемы начнутся как с pred, когда придется закодировать N-тапл из сигм и переносить все кроме последнего в базу, но тоже вроде все законно. Единственное к чему тут можно предъявить претензии — это дополнительный параметр пустышка &lt;a href=&quot;https://www.livejournal.com/rsearch/?tags=%23Nat&quot;&gt;#Nat&lt;/a&gt;/Zero который передается в примерах в качестве (x:A) при вызове элиминаторов, он нужен для совместимости типов, но как видно из примера, экстрактятся из сконструированного тапла &lt;a href=&quot;https://www.livejournal.com/rsearch/?tags=%23Sigma&quot;&gt;#Sigma&lt;/a&gt;/Intro настоящие значения (fst test = 5 и snd test = [0,0,0,0,0]). Другими словами это означает что первый элемент типовой пары должен быть как минимум стягиваемым пространством, что в принципе в духе Сигмы и квантора существования. Что думают по этому поводу типовые теоретики?&lt;br /&gt;&lt;br /&gt;P.S. Модель в cubicaltt, для тех, кто не доверяет Ом.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
module puresigma where
import nat
import list

P: nat -&amp;gt; U = (\(_:nat) -&amp;gt; list nat)
sig (A:U)(P:A-&amp;gt;U)(x:A): U = (e:U)-&amp;gt;(i:A-&amp;gt;P x-&amp;gt;e)-&amp;gt;e
mk  (A:U)(P:A-&amp;gt;U)(x:A)(y:P x)(e:U)(i:A-&amp;gt;P x-&amp;gt;e):e=i x y
fst (A:U)(P:A-&amp;gt;U)(x:A)(s:sig A P x):A=s A(\(z:A)(y:P x)-&amp;gt;z)
snd (A:U)(P:A-&amp;gt;U)(x:A)(s:sig A P x):P x=s(P x)(\(z:A)(y:P x)-&amp;gt;y)

test: sig nat P n5 = mk nat P n5 nil
test_pr1: nat = fst nat P zero test
test_pr2: list nat = snd nat P zero test

&amp;gt; test_pr2
EVAL: nil
&amp;gt; test_pr1
EVAL: suc (suc (suc (suc (suc zero))))

&lt;/pre&gt;Тут мне подсказывают, что писал Thorsten Altenkirch:&lt;br /&gt;&lt;br /&gt;Ok, when we think of homogenous tuples AxA then this can also be understood as a function 2 -&amp;gt; A. This also works for heterogenous tuples like AxB using dependent functions Pi x:2.if x then A else B. However the next logical step is Sigma x:A.B x, which have no good representations as functions (unless we accept very dependent functions which in my mind goes against the spirit of type theory). For this reason it seems to me that the generalisation from -&amp;gt; to Pi and from x to Sigma is the primary one, and the fact that tuples can be represented as functions is secondary.&lt;br /&gt;&lt;br /&gt;Позволю себе не согласиться с Торстеном,Альтенкирхом: на мой взгляд, именно Черч кодировка и показывает скрытую категорную стркутуру теории типов обнажая ее самантику, она ни как не может идти в разрез духа тетории типов, которым как раз и является теория категорий.&lt;br /&gt;&lt;br /&gt;Существует и другая более общая связь между Пи и Сигмой. Сигму можно интерпретировать как тотальное пространство расслоения B -&amp;gt; A над A. Где расслоение — это терм&lt;br /&gt;&lt;pre&gt;section (A B : U) (p : A -&amp;gt; B) (s : B -&amp;gt; A) : U = (y : B) -&amp;gt; Path B (p (s y)) y&lt;/pre&gt;А элементы Пи или лямбды — это сечения тривиального расслоения A -&amp;gt; A x B. Симметричной функцией является ретракт:&lt;br /&gt;&lt;pre&gt;retract (A B : U) (f : A -&amp;gt; B) (g : B -&amp;gt; A) : U = (a : A) -&amp;gt; Path A (g (f a)) a&lt;/pre&gt;Не могу к сожалению (пока) понять, как устроены йоги Гротендика, но это устройство связи Пи и Сигмы помоему две из них и есть.&lt;br /&gt;&lt;br /&gt;Надо переписать на кубикал, кто возьмется?&lt;br /&gt;&lt;pre&gt;
Prerequisites:

_⋔_ : ∀ {a b} → Set a → Set b → Set (a ⊔ b)
_⋔_ A B = A → B

_⊗_ : ∀ {a b} → Set a → Set b → Set (a ⊔ b)
_⊗_ A B = A × B

∫↓ : ∀ {a b} {X : Set a} → (X → X → Set b) → Set (a ⊔ b)
∫↓ {X = X} P = ∀ {x} → P x x

∫↑ : ∀ {a b} {X : Set a} → (X → X → Set b) → Set (a ⊔ b)
∫↑ {X = X} P = ∐ [ x ∶ X ] P x x
&lt;/pre&gt;Левое и правое расширения Кана:&lt;pre&gt;
Ran : ∀ {x c v u p} {𝔵 : Set x} {𝔠 : Set c} {𝔳 : Set v}
  → (𝒸 : 𝔠 → 𝔠 → Set u)
  → (_⋔_ : Set u → 𝔳 → Set p)
  → (G : 𝔵 → 𝔠)
  → (H : 𝔵 → 𝔳)
  → (𝔠 → Set (p ⊔ x)) = 𝒸 _⋔_ G H A = ∫↓ λ x y → 𝒸 A (G x) ⋔ H y

Lan : ∀ {x c v u p} {𝔵 : Set x} {𝔠 : Set c} {𝔳 : Set v}
  → (𝒸 : 𝔠 → 𝔠 → Set u)
  → (_⊗_ : 𝔳 → Set u → Set p)
  → (G : 𝔵 → 𝔠)
  → (H : 𝔵 → 𝔳)
  → (𝔠 → Set (p ⊔ x)) = 𝒸 _⊗_ G H A = ∫↑ λ x y → H x ⊗ 𝒸 (G y) A
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;По сигнатуре видно, что Пи и Сигма — элементы одного пространства.&lt;br /&gt;&lt;pre&gt;
Sigma: ∀ {x y} {X : Set x} {Y : Set y} → (X → Y) → 𝒫 x X → 𝒫 (x ⊔ y) Y = Ran _≡_ _⋔_ f

Pi:    ∀ {x y} {X : Set x} {Y : Set y} → (X → Y) → 𝒫 x X → 𝒫 (x ⊔ y) Y = Lan _≡_ _⊗_ f
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://ic.pics.livejournal.com/maxim/670251/41756/41756_800.png&quot; alt=&quot;&quot; title=&quot;&quot; /&gt;&lt;br /&gt;&lt;img src=&quot;https://ic.pics.livejournal.com/maxim/670251/41429/41429_800.png&quot; alt=&quot;&quot; title=&quot;&quot; /&gt;&lt;br /&gt;&lt;img src=&quot;https://ic.pics.livejournal.com/maxim/670251/41512/41512_800.png&quot; alt=&quot;&quot; title=&quot;&quot; /&gt;&lt;br /&gt;&lt;br /&gt;___________&lt;br /&gt;[1]. Расширения Кана Бартоша &lt;a href=&quot;https://henrychern.files.wordpress.com/2017/10/27.pdf&quot; rel=&quot;nofollow&quot;&gt;https://henrychern.files.wordpress.com/2017/10/27.pdf&lt;/a&gt;</content>
		<author>
			<name>Namdak Tonpa</name>
			<uri>https://maxim.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Старая Школа</title>
			<subtitle type="html">Сущность Пространства</subtitle>
			<link rel="self" href="http://maxim.livejournal.com/data/atom?tag=cs"/>
			<id>urn:lj:livejournal.com:atom1:maxim</id>
			<updated>2018-03-14T16:00:45+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Зависимые типы и high kind types.</title>
		<link href="https://ru-deptypes.livejournal.com/12247.html"/>
		<id>urn:lj:livejournal.com:atom1:ru_deptypes:12247</id>
		<updated>2017-10-27T08:55:20+00:00</updated>
		<content type="html">Есть вполне полезные языки, не поддерживаюшие HKT - Rust, Elm. Возможно ли (и осмысленно) в подобных языках делать поддержку зависимых типов? Например, Elm справедливо требует тотальности кода, но из-за этого приходится описывать и обрабатывать невозможные ситуации, например когда пользователь еще не залогинился, а уже разлогинивается. Зависимые типы позволяют описать невозможность такого события.</content>
		<author>
			<name>Mike Potanin</name>
			<email>mpotanin@gmail.com</email>
			<uri>https://ru-deptypes.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Программирование с зависимыми типами</title>
			<subtitle type="html">Программирование с зависимыми типами</subtitle>
			<link rel="self" href="http://ru-deptypes.livejournal.com/data/atom"/>
			<id>urn:lj:livejournal.com:atom1:ru_deptypes</id>
			<updated>2018-03-14T13:01:14+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">arXiv:1710.07516 [cs.LO]</title>
		<link href="https://codedot.dreamwidth.org/180422.html"/>
		<id>tag:dreamwidth.org,2013-01-03:1881992:180422</id>
		<updated>2017-10-23T02:13:22+00:00</updated>
		<content type="html">&lt;a href=&quot;https://arxiv.org/abs/1710.07516&quot;&gt;https://arxiv.org/abs/1710.07516&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;An impure solution to the problem of matching fans&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;We present an algorithm to solve the problem of matching fans in interaction net implementations of optimal reduction for the pure untyped lambda calculus without use of any additional agent types. The algorithm relies upon a specific interaction nets reduction strategy and involves side effects in one of interaction rules.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=180422&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; /&gt; comments</content>
		<author>
			<name>Anton Salikhmetov</name>
			<uri>https://codedot.dreamwidth.org/</uri>
		</author>
		<source>
			<title type="html">Anton Salikhmetov</title>
			<subtitle type="html">Anton Salikhmetov</subtitle>
			<link rel="self" href="http://codedot.dreamwidth.org/data/atom?tag=lambda+calculus"/>
			<id>tag:dreamwidth.org,2013-01-03:1881992</id>
			<updated>2019-01-15T07:00:04+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Фронт с роботами.</title>
		<link href="https://potan.livejournal.com/229618.html"/>
		<id>urn:lj:livejournal.com:atom1:potan:229618</id>
		<updated>2017-10-20T15:59:59+00:00</updated>
		<content type="html">В порядке паралельного изучения ELM и ROS &lt;a href=&quot;https://habrahabr.ru/post/340534/&quot; rel=&quot;nofollow&quot;&gt;состыковал одно с другим&lt;/a&gt;.&lt;br /&gt;Хотя в ELM не хватает тайпклассов и макросов, UI на нем пишется поразительно быстро и легко. Я уже просто не понимаю, зачем делать фронтенд на чем либо еще.</content>
		<author>
			<name>Mike Potanin</name>
			<email>mpotanin@gmail.com</email>
			<uri>https://potan.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Mike Potanin</title>
			<subtitle type="html">Mike Potanin</subtitle>
			<link rel="self" href="http://potan.livejournal.com/data/atom?tag=fp,haskell,ocaml,lisp"/>
			<id>urn:lj:livejournal.com:atom1:potan</id>
			<updated>2018-03-14T17:00:09+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">My Dream Comes True</title>
		<link href="https://codedot.dreamwidth.org/180191.html"/>
		<id>tag:dreamwidth.org,2013-01-03:1881992:180191</id>
		<updated>2017-10-19T01:54:10+00:00</updated>
		<content type="html">Optimal reduction without oracle finally shows its ugly face.&lt;br /&gt;&lt;br /&gt;I found an impure solution to the problem of matching fans, playing around the ideas from &lt;a href=&quot;https://arxiv.org/abs/1701.04691v2&quot;&gt;arXiv:1701.04691v2&lt;/a&gt;. The solution heavily relies on &lt;a href=&quot;https://arxiv.org/abs/1702.06092&quot;&gt;needed reduction&lt;/a&gt;. The trick is to use nonces and a global hash table. The default algorithm in MLC is &lt;code&gt;abstract&lt;/code&gt; now, but the only good thing about it is that it is damn fast:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://codedot.github.io/lambda/&quot;&gt;&lt;img src=&quot;https://codedot.dreamwidth.org/file/696.png&quot; alt=&quot;MLC&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Next up, I need to decide if and how I should describe this hack in a paper.&lt;br /&gt;&lt;br /&gt;P. S. Why did I think it would be more exciting?&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=codedot&amp;ditemid=180191&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; /&gt; comments</content>
		<author>
			<name>Anton Salikhmetov</name>
			<uri>https://codedot.dreamwidth.org/</uri>
		</author>
		<source>
			<title type="html">Anton Salikhmetov</title>
			<subtitle type="html">Anton Salikhmetov</subtitle>
			<link rel="self" href="http://codedot.dreamwidth.org/data/atom?tag=lambda+calculus"/>
			<id>tag:dreamwidth.org,2013-01-03:1881992</id>
			<updated>2019-01-15T07:00:04+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Дно двунаправленности пробито</title>
		<link href="https://nponeccop.livejournal.com/579999.html"/>
		<id>urn:lj:livejournal.com:atom1:nponeccop:579999</id>
		<updated>2017-10-11T02:08:26+00:00</updated>
		<content type="html">&lt;pre&gt;import System.IO.Streams (contramap)
quux x = do
   foo &amp;lt;- contramap show x
   bar &amp;lt;- contramap Just foo
   return bar&lt;/pre&gt;Все мы помним State-монаду, в которой состояние движется в другую сторону и взбирается по ду-нотации вверх. Сегодня я столкнулся с продвижением контрол-флоу против стрелок обычной монады IO.&lt;br /&gt;&lt;br /&gt;Т.е. у нас &quot;вход&quot; как бы снизу, а x - это &quot;выход&quot;. return bar отправляет этот вход в bar, дальше он проходит Just и отправляется в foo, а оттуда проходит через show и попадает в x&lt;br /&gt;&lt;br /&gt;Тип соответствующий:&lt;pre&gt;quux :: Show a =&amp;gt; OutputStream String -&amp;gt; IO (OutputStream a)&lt;/pre&gt;a &quot;на входе&quot;, затем Just делает Maybe a, и show делает строку.</content>
		<author>
			<name>Andy Melnikov</name>
			<uri>https://nponeccop.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Дважды мудак</title>
			<subtitle type="html">Почти исключительно о функциональном</subtitle>
			<link rel="self" href="http://nponeccop.livejournal.com/data/atom?tag=fp"/>
			<id>urn:lj:livejournal.com:atom1:nponeccop</id>
			<updated>2018-03-14T11:00:40+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">neovim + haskell-ide-engine</title>
		<link href="https://nponeccop.livejournal.com/579835.html"/>
		<id>urn:lj:livejournal.com:atom1:nponeccop:579835</id>
		<updated>2017-10-10T07:48:42+00:00</updated>
		<content type="html">Всё как обычно.&lt;br /&gt;&lt;br /&gt;1. Даже не билдится (happy не находит). Билдится после доводки напильником. Инструкция по сборке на сайте не тестировалась.&lt;br /&gt;&lt;br /&gt;2. После сборки всё запускается и стартует (в pstree виден hie), но ничего не происходит. Один раз как-то получилось от него ошибку компиляции получить.&lt;br /&gt;&lt;br /&gt;Надо разбираться дальше.</content>
		<author>
			<name>Andy Melnikov</name>
			<uri>https://nponeccop.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Дважды мудак</title>
			<subtitle type="html">Почти исключительно о функциональном</subtitle>
			<link rel="self" href="http://nponeccop.livejournal.com/data/atom?tag=fp"/>
			<id>urn:lj:livejournal.com:atom1:nponeccop</id>
			<updated>2018-03-14T11:00:40+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">концепция итераторов</title>
		<link href="https://rvp74.livejournal.com/204258.html"/>
		<id>urn:lj:livejournal.com:atom1:rvp74:204258</id>
		<updated>2017-10-07T10:54:15+00:00</updated>
		<content type="html">Попытался разобраться с Traversable в Хаскелле. Но понял что надо начать хотя бы с &amp;quot;Аппликативных функторов&amp;quot;. Начал смотреть последних и набрел на следующую статью:&lt;br /&gt;&lt;br /&gt;&amp;quot;The Essence of the Iterator Pattern&amp;quot;,&lt;br /&gt;Jeremy Gibbons and Bruno C. d. S.&lt;br /&gt;Oliveira Oxford University Computing Laboratory&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;В общем, если вы думали что итераторы это просто. Обязательно почитайте эту статью. Взрыв мозга гарантирован.</content>
		<author>
			<name>Vadim Radionov</name>
			<uri>https://rvp74.livejournal.com/</uri>
		</author>
		<source>
			<title type="html">Vadim Radionov</title>
			<subtitle type="html">Vadim Radionov</subtitle>
			<link rel="self" href="http://rvp74.livejournal.com/data/atom?tag=haskell,ghc,lisp,monad,sicp,scheme"/>
			<id>urn:lj:livejournal.com:atom1:rvp74</id>
			<updated>2018-03-14T17:00:44+00:00</updated>
		</source>
	</entry>

</feed>
