<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/static/pretty-feed-v3.xsl" type="text/xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel>
        <title>Owen's Blog</title>
        <link>https://owenlynch.org</link>
        <description><![CDATA[A personal blog; that means I don't have to stick to one thing. But expect math.]]></description>
        <atom:link href="https://owenlynch.org/rss.xml" rel="self"
                   type="application/rss+xml" />
        <lastBuildDate>Sat, 31 Dec 2022 00:00:00 UT</lastBuildDate>
        <item>
    <title>Wave Particle Duality and the Grothendieck Construction</title>
    <link>https://owenlynch.org/posts/2022-12-31-grothendieck-wave-particle</link>
    <description><![CDATA[<!doctype html>
<html lang="en">
  <head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>Wave Particle Duality and the Grothendieck Construction | Owen Lynch</title>
  <style type="text/css">
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="../../css/default.css" />
  <link rel="stylesheet" href="../../css/syntax.css" />
  <link rel="authorization_endpoint" href="https://indieauth.com/auth" />
  <link rel="webmention" href="https://webmention.io/owenlynch.org/webmention" />
  <link rel="pingback" href="https://webmention.io/owenlynch.org/xmlrpc" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/contrib/auto-render.min.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
        inlineElements = document.getElementsByClassName('math inline');
        displayElements = document.getElementsByClassName('math display');
        for (i = 0; i < inlineElements.length; i++) {
            e = inlineElements[i]
            try {
                katex.render(e.innerHTML, e, { displayMode: false });
            } catch (error) {
                console.error(error);
            }
        }
        for (i = 0; i < displayElements.length; i++) {
            e = displayElements[i]
            try {
              katex.render(e.innerHTML, e, { displayMode: true });
            } catch (error) {
                console.error(error)
            }
        }
    });
  </script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.css" />
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->


  </head>
  <body>
    <div class="container">
      <div class="menu">
        <div class="mainbar-links">
          <h2><a href="../../">Home</a> <a href="../../blog">Blog</a> <a href="../../output">Output</a></h2>
        </div>
        <div class="social-icons">
          <a href="https://github.com/olynch" rel="me"><img src="../../static/github-square.svg" class="icon" /></a>
          <a href="https://twitter.com/u_map_prop" rel="me"><img src="../../static/twitter-square.svg" class="icon" /></a>
          <a href="https://mathstodon.xyz/web/@olynch" rel="me"><img src="../../static/mastodon.svg" class="icon" /></a>
          <a href="https://www.youtube.com/channel/UCy1qDmvpYPmsYaHe51UzwIA" rel="me"><img src="../../static/youtube.svg" class="icon" /></a>
          <a href="../../rss.xml"><img src="../../static/rss.svg" class="icon" /></a>
        </div>
      </div>

      <hr />

      <div class="content main article">
        
<article class="h-entry">
    <h1>Wave Particle Duality and the Grothendieck Construction</h1>
    <div class="p-name" hidden>Wave Particle Duality and the Grothendieck Construction</div>

    <div class="info">
        Posted on <time class="dt-published" datetime="December 31, 2022">December 31, 2022</time>
        by <a class="p-author h-card" href="https://owenlynch.org">Owen Lynch</a>
    </div>

    <div class="e-content">
    <h2 id="discrete-waveparticle-duality">Discrete Wave/Particle Duality</h2>
<p>Traditionally, wave particle duality is considered a part of quantum mechanics. However, a similar phenomenum can show up in classical or probabilistic settings. In this blog post, we investigate this, and how it is related to the Grothendieck construction, which is a construction from category theory.</p>
<p>Imagine that you have <span class="math inline">m</span> boxes with balls in them. There are two ways of representing this mathematically. The first is by having a function from <span class="math inline">\{1,\ldots,m\} \to \mathbb{N}</span>, which sends the label of each box to the number of balls in that box. The second is by making a set of balls <span class="math inline">B</span> and then having a function <span class="math inline">B \to \{1,\ldots,m\}</span>, which sends each ball to the box that it lives in.</p>
<p>We call the first way of representing the situation the “wave” representation. Instead of keeping track of individual balls, we have a “distribution” of balls across boxes. We call the second way the “particle” representation, where we keep track of individual balls.</p>
<p>What’s the difference? One answer is that the particle representation has more symmetries. That is, there are many different assignments of boxes to <span class="math inline">B</span> that end up with the same number of balls in each box.</p>
<p>When we do probability theory, this is important, because the prior probability distribution for a variable <span class="math inline">Y</span> that ranges over a finite set that we know absolutely nothing about is uniform. But if <span class="math inline">Y = f(X)</span> for another variable <span class="math inline">X</span>, then an assignment of a uniform probability distribution to <span class="math inline">X</span> often produces a non-uniform probability distribution for <span class="math inline">Y</span>. Specifically, if <span class="math inline">Y = y</span> can happen “in more ways” than <span class="math inline">Y = y'</span>, we give it a higher probability. An example of this is that we assign a higher probability to 5 heads, 5 tails, than we do to 2 heads, 8 tails. So if the particle representation shows certain scenarios happening “in more ways” than the wave representation, then choosing between particle representation and wave representation changes the priors we assign!</p>
<p>Another difference is that if we now have a dynamical system of balls and boxes, then the particle representation can detect the difference between the following scenarios:</p>
<ol type="1">
<li>We move a ball from box 1 to box 2, and a ball from box 2 to box 1.</li>
<li>We do nothing.</li>
</ol>
<p>In both scenarios, the total number of balls in each box stays the same, so the wave representation detects no change. But in the particle representation, we have changed the assignments of boxes to balls.</p>
<p>A system in which the wave representation is constant, but the particle representation is not is often said to be in <a href="https://en.wikipedia.org/wiki/Dynamic_equilibrium">dynamic equilibrium</a>.</p>
<p>Now that we have the basic setup, we will discuss two logically distinct “branches”. The first branch has to do with extensions of the basic setup to statistical mechanics. The second branch has to do with the category theory of the basic setup.</p>
<h2 id="waveparticle-duality-in-statistical-mechanics">Wave/Particle Duality in Statistical Mechanics</h2>
<p>I have some understanding that what I am about to discuss often goes under the name of “field theory”, but I am not at all an expert on field theory; what follows are some concepts that have likely trickled down to me and slowly been repackaged into my own understanding. That is to say, there are likely textbooks that cover this in much better detail, but I don’t know which ones to cite and don’t particularly feel like doing a literature review for a blog post.</p>
<p>Anyways, we can “soup up” the previous wave particle duality to cover probabilistic waves/particles in the following way.</p>
<p>The “particle” point of view is that each ball <span class="math inline">b \in B</span> is assigned a random variable <span class="math inline">X_{b} \in \{1,\ldots,m\}</span> over boxes. The “wave” point of view is that each box <span class="math inline">i</span> is assigned a random variable <span class="math inline">N_{i} \in \mathbb{N}</span> over the number of balls in that box.</p>
<p>Note that I said “random variable” instead of “probability distribution”; this is because the different variables might have non-trivial correlations!</p>
<p>We can further extend this to the situation where the balls are distributed in space, i.e. in <span class="math inline">\mathbb{R}^{n}</span>. The particle point of view would be again to assign a variable <span class="math inline">X_{b}</span> taking values in <span class="math inline">\mathbb{R}^{n}</span> to each particle, and the wave point of view would be to assign a variable <span class="math inline">N_{U}</span> taking values in <span class="math inline">\mathbb{N}</span> to each open set <span class="math inline">U \subset \mathbb{R}^{n}</span>, satisfying certain laws such as <span class="math inline">N_{U} \leq N_{V}</span> whenever <span class="math inline">U \subset V</span> (because the particles in <span class="math inline">U</span> necessarily are also in <span class="math inline">V</span>).</p>
<p>These two points of view diverge even more significantly from before, because in the particle point of view the number of particles is fixed, but in the wave point of view it might vary. This could be remedied by first having a distribution over the number of particles, and then having a distribution on each particle that was conditional on the overall number of particles.</p>
<p>With this adjustment having been made, the essential differences between the two situations are quite similar to the classical case, and we will not discuss them more here to keep this post short. The main point that I wanted to make was in fact that although we normally think of waves as continuous, like the probability distributions are here, the wave particle duality in the continuous or discrete setup has similar characteristics.</p>
<h2 id="the-grothendieck-construction">The Grothendieck Construction</h2>
<p>The <a href="https://ncatlab.org/nlab/show/Grothendieck+construction">Grothendieck construction</a> is a very general idea in category theory; in this section we consider just a specific instance of it and show how it formalizes wave/particle duality. In this section, I assume that you know what a category is, what a functor is, and what a natural transformation is, but other concepts I will give definitions or references for.</p>
<div class="rmenv" title="Definition">
<p>Let <span class="math inline">\mathbb{F}</span> be the category where the objects are natural numbers, and a morphism from <span class="math inline">n</span> to <span class="math inline">m</span> is a function from <span class="math inline">\{1,\ldots,n\} \to \{1,\ldots,m\}</span>.</p>
</div>
<p>The particle point of view is expressed as the <em>slice category</em> <span class="math inline">\mathbb{F}/m</span>, defined below.</p>
<div class="rmenv" title="Definition">
<p>Let <span class="math inline">\mathsf{C}</span> be a category, and fix an object <span class="math inline">x \in \mathsf{C}</span>. Then the category <span class="math inline">\mathsf{C}/x</span>, called <strong>the slice category of <span class="math inline">\mathsf{C}</span> over <span class="math inline">x</span></strong> is defined in the following way.</p>
<ul>
<li>The objects of <span class="math inline">\mathsf{C}/x</span> are pairs <span class="math inline">(y \in \mathsf{C}, f \colon y \to x)</span></li>
<li>a morphism from <span class="math inline">(y,f)</span> to <span class="math inline">(z,g)</span> is a morphism <span class="math inline">h \colon y \to z</span> such that <span class="math inline">f = g \circ h</span>, or in other words the following triangle commutes: <br></li>
</ul>
<!-- https://q.uiver.app/?q=WzAsMyxbMCwwLCJ5Il0sWzIsMCwieiJdLFsxLDEsIngiXSxbMCwxLCJoIl0sWzAsMiwiZiIsMl0sWzEsMiwiZyJdXQ== -->
<iframe class="quiver-embed" src="https://q.uiver.app/?q=WzAsMyxbMCwwLCJ5Il0sWzIsMCwieiJdLFsxLDEsIngiXSxbMCwxLCJoIl0sWzAsMiwiZiIsMl0sWzEsMiwiZyJdXQ==&amp;embed" width="432" height="304" style="border-radius: 8px; border: none;">
</iframe>
</div>
<p>An object of <span class="math inline">\mathbb{F}/m</span> is a natural number <span class="math inline">N</span> along with a morphism <span class="math inline">N \to m</span>, which is a function <span class="math inline">\{1,\ldots,N\} \to \{1,\ldots,m\}</span>; one can see that this is precisely the particle point of view!</p>
<p>The wave point of view is expressed as the <em>product category</em> <span class="math inline">\mathbb{F}^{m}</span>, defined below.<a href="#fn1" class="footnote-ref" id="fnref1" role="doc-noteref"><sup>1</sup></a></p>
<div class="rmenv" title="Definition">
<p>Let <span class="math inline">\mathsf{C}</span> be a category, and <span class="math inline">m</span> be a natural number. Then the <strong>product category</strong> <span class="math inline">\mathsf{C}^{m}</span> is defined in the following way.</p>
<ul>
<li>The objects of <span class="math inline">\mathsf{C}^{m}</span> are functions <span class="math inline">p \colon \{1,\ldots,m\} \to \mathsf{C}_0</span>, where <span class="math inline">\mathsf{C}_{0}</span> is the collection of objects of <span class="math inline">\mathsf{C}</span></li>
<li>A morphism from <span class="math inline">p</span> to <span class="math inline">q</span> consists of a morphism <span class="math inline">\alpha_{i} \colon p(i) \to q(i)</span> for every <span class="math inline">i \in \{1,\ldots,m\}</span>.</li>
</ul>
</div>
<p>An object of <span class="math inline">\mathbb{F}^{m}</span> is a function from <span class="math inline">\{1,\ldots,m\}</span> to <span class="math inline">\mathbb{N}</span>, so it is precisely the wave point of view!</p>
<p>The Grothendieck construction is an <em>equivalence of categories</em> between <span class="math inline">\mathbb{F}^{m}</span> and <span class="math inline">\mathbb{F}/m</span>. Informally speaking this is saying that these categories <em>can be treated equivalently</em> as long as you stick to using them in a category theoretic way. I.e., clearly these are different categories. But as long as you stick to operations which are “defined categorically” (whatever that means), you can’t tell the difference between these two categories!</p>
<p>To fully define and prove this equivalence of categories would take more time than I want to spend here, but I will sketch the construction.</p>
<div class="rmenv" title="Definition">
<p>Let <span class="math inline">\mathsf{C}</span> and <span class="math inline">\mathsf{D}</span> be categories. Then an <strong>equivalence</strong> between them consists of:</p>
<ul>
<li>a functor <span class="math inline">F \colon \mathsf{C} \to \mathsf{D}</span></li>
<li>a functor <span class="math inline">G \colon \mathsf{D} \to \mathsf{C}</span></li>
<li>a natural isomorphism <span class="math inline">\alpha \colon G \circ F \cong 1_{C}</span></li>
<li>a natural isomorphism <span class="math inline">\beta \colon F \circ G \cong 1_{D}</span></li>
</ul>
</div>
<p>We now sketch an equivalence between <span class="math inline">\mathbb{F}/m</span> and <span class="math inline">\mathbb{F}^{m}</span>. Define a functor <span class="math inline">F \colon \mathbb{F}/m \to \mathbb{F}^{m}</span> on objects by sending an object <span class="math inline">p \colon N \to m</span> to the function <span class="math inline">f \colon m \to \mathbb{N}</span> sending <span class="math inline">i \in \{1,\ldots,m\}</span> to the size of the preimage of <span class="math inline">i</span> under <span class="math inline">p</span>, i.e. <span class="math inline">|p^{-1}(i)|</span>.</p>
<p>It is a little tricky to define <span class="math inline">F</span> on morphisms, but the basic idea is the following.</p>
<p>Recall that a morphism in <span class="math inline">\mathbb{F}/m</span> from <span class="math inline">p \colon N \to m</span> to <span class="math inline">q \colon M \to m</span> is a morphism <span class="math inline">r \colon N \to M</span> such that <span class="math inline">p = q \circ r</span>. This means that for all <span class="math inline">i \in \{1,\ldots,N\}</span>, <span class="math inline">q(r(i)) = p(i)</span>. Thus, for any <span class="math inline">b \in \{1,\ldots,m\}</span>, <span class="math inline">r</span> sends the <span class="math inline">p</span>-balls in <span class="math inline">b</span> to the <span class="math inline">q</span>-balls in <span class="math inline">b</span>, and so restricts to a function <span class="math inline">r_{b}</span> from <span class="math inline">p^{-1}(b)</span> to <span class="math inline">q^{-1}(b)</span>.</p>
<p>Now, we have a canonical isomorphism between <span class="math inline">p^{-1}(b)</span> and <span class="math inline">\{1,\ldots,|p^{-1}(b)|\}</span> given simply by ordering the balls in <span class="math inline">p^{-1}(b)</span> by their numbers (as <span class="math inline">p^{-1}(b) \subset \{1,\ldots,N\}</span>), and similarly we have a canonical isomorphism between <span class="math inline">q^{-1}(b)</span> and <span class="math inline">\{1,\ldots,|q^{-1}(b)|\}</span>. This means that we can take our function <span class="math inline">r_{b}</span> and treat it as a morphism <span class="math inline">F(p)(b) \to F(q)(b)</span> in <span class="math inline">\mathbb{F}</span>, and if we assign <span class="math inline">F(r)_{b} = r_{b}</span> for every <span class="math inline">b \in \{1,\ldots,m\}</span>, then <span class="math inline">F(r)</span> is a morphism in <span class="math inline">\mathbb{F}^{m}</span>, as required!</p>
<p>Basically, all we are doing here is splitting up a “box-respecting” function between balls to a function for each box that is just defined on the balls in that box.</p>
<p>To go the other way from <span class="math inline">\mathbb{F}^{m}</span> to <span class="math inline">\mathbb{F}/m</span>, we define a functor <span class="math inline">G</span> in the following way.</p>
<p>On objects, send a function <span class="math inline">f \colon \{1,\ldots,m\} \to \mathbb{N}</span> to the natural number <span class="math inline">N = \sum_{i=1}^{m} f(i)</span>, along with the function <span class="math inline">p \colon \{1,\ldots,N\} \to \{1,\ldots,m\}</span> which sends <span class="math inline">\{1,\ldots,f(1)\}</span> to <span class="math inline">1</span>, <span class="math inline">\{f(1) + 1,\ldots,f(1) + f(2)\}</span> to <span class="math inline">2</span>, and so on.</p>
<p>Then on morphisms, we essentially “invert” the procedure we did earlier. Given a collection of functions, one for each box, we “glue them together” to get a function on all of the balls. Writing out the precise details of this is left as an exercise to the reader.</p>
<p>The natural isomorphisms come essentially from the intuitive notion that breaking up the balls by box and then putting them back together ends up with the same number of balls you had from the beginning! The only difference is that you now have the balls ordered by box, so you need to have a permutation of <span class="math inline">\{1,\ldots,N\}</span> to record this, and so <span class="math inline">G \circ F</span> is not the <strong>identity functor</strong> on <span class="math inline">\mathbb{F}/m</span>, just naturally isomorphic to it.</p>
<p>And conversely, putting all the balls together and then splitting them up again also leaves you with the same balls in the same boxes.</p>
<h2 id="concluding-thoughts">Concluding thoughts</h2>
<p>What have we learned from analogizing wave/particle duality to the Grothendieck construction? Well, first of all, we have learned that the apparent differences between the wave viewpoint and the particle viewpoint seem to disappear when you add the right morphisms! This implies that the “counting” problems that we had at the beginning might be solved by a more refined theory of counting, such as <a href="https://ncatlab.org/nlab/show/groupoid+cardinality">groupoid cardinality</a>. Essentially, groupoid cardinality allows you to count things in a way that takes symmetries into account. I have not yet fully worked out the implications of groupoid cardinality for putting uniform priors on balls in boxes, but I think that when taken seriously, groupoid cardinality should give the same prior for the wave and particle perspective!</p>
<p>Secondly, we said that the other difference between waves and particles had to do with dynamics, when we consider balls that change boxes. Now, note that in the setup for the Grothendieck construction, the morphisms we chose did not allow balls to change boxes. To me, this implies that perhaps there is a more general construction where we <em>do</em> allow balls to change boxes; i.e. a slice category where the triangle does not have to commute! I’m not sure what the analogous wave-viewpoint is categorically, and I’m not sure what the implication is for higher versions of the Grothendieck construction; I would be happy to hear from anyone who has an answer to this!</p>
<p>And that’s all for 2022! See you in 2023!</p>
<section class="footnotes" role="doc-endnotes">
<hr />
<ol>
<li id="fn1" role="doc-endnote"><p>Note: this could also be seen as the category of functors from the discrete category with objects <span class="math inline">\{1,\ldots,m\}</span> to <span class="math inline">\mathbb{F}</span>, but we don’t need this level of generality here.<a href="#fnref1" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
</ol>
</section>
    </div>

    
    
</article>

<hr>

This website supports <emph>webmentions</emph>, a standard for collating reactions across many platforms. If you have a blog that supports sending webmentions and you put a link to this post, your blog post will show up as a response here.

You can also <a href="https://twitter.com/intent/tweet?text=https%3A%2F%2Fowenlynch.org%2Fposts%2F2022-12-31-grothendieck-wave-particle%2F">respond via twitter</a> or respond via mastodon (on your preferred mastodon server); through the magic of <a href="https://brid.gy">brid.gy</a> all tweets or toots with links to this post will show up below (subject to moderation).

<script src="../../static/webmention.min.js" async></script>

<div id="webmentions">div</div>

      </div>

      <hr />

      <div class="main">
        Site proudly generated by
        <a href="http://jaspervdj.be/hakyll">Hakyll</a>
        with stylistic inspiration from <a href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
      </div>
    </div>
  </body>
</html>
]]></description>
    <pubDate>Sat, 31 Dec 2022 00:00:00 UT</pubDate>
    <guid>https://owenlynch.org/posts/2022-12-31-grothendieck-wave-particle</guid>
    <dc:creator>Owen Lynch</dc:creator>
</item>
<item>
    <title>All you need is paint</title>
    <link>https://owenlynch.org/posts/2022-07-31-all-you-need-is-paint</link>
    <description><![CDATA[<!doctype html>
<html lang="en">
  <head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>All you need is paint | Owen Lynch</title>
  <style type="text/css">
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="../../css/default.css" />
  <link rel="stylesheet" href="../../css/syntax.css" />
  <link rel="authorization_endpoint" href="https://indieauth.com/auth" />
  <link rel="webmention" href="https://webmention.io/owenlynch.org/webmention" />
  <link rel="pingback" href="https://webmention.io/owenlynch.org/xmlrpc" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/contrib/auto-render.min.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
        inlineElements = document.getElementsByClassName('math inline');
        displayElements = document.getElementsByClassName('math display');
        for (i = 0; i < inlineElements.length; i++) {
            e = inlineElements[i]
            try {
                katex.render(e.innerHTML, e, { displayMode: false });
            } catch (error) {
                console.error(error);
            }
        }
        for (i = 0; i < displayElements.length; i++) {
            e = displayElements[i]
            try {
              katex.render(e.innerHTML, e, { displayMode: true });
            } catch (error) {
                console.error(error)
            }
        }
    });
  </script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.css" />
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->


  </head>
  <body>
    <div class="container">
      <div class="menu">
        <div class="mainbar-links">
          <h2><a href="../../">Home</a> <a href="../../blog">Blog</a> <a href="../../output">Output</a></h2>
        </div>
        <div class="social-icons">
          <a href="https://github.com/olynch" rel="me"><img src="../../static/github-square.svg" class="icon" /></a>
          <a href="https://twitter.com/u_map_prop" rel="me"><img src="../../static/twitter-square.svg" class="icon" /></a>
          <a href="https://mathstodon.xyz/web/@olynch" rel="me"><img src="../../static/mastodon.svg" class="icon" /></a>
          <a href="https://www.youtube.com/channel/UCy1qDmvpYPmsYaHe51UzwIA" rel="me"><img src="../../static/youtube.svg" class="icon" /></a>
          <a href="../../rss.xml"><img src="../../static/rss.svg" class="icon" /></a>
        </div>
      </div>

      <hr />

      <div class="content main article">
        
<article class="h-entry">
    <h1>All you need is paint</h1>
    <div class="p-name" hidden>All you need is paint</div>

    <div class="info">
        Posted on <time class="dt-published" datetime="July 31, 2022">July 31, 2022</time>
        by <a class="p-author h-card" href="https://owenlynch.org">Owen Lynch</a>
    </div>

    <div class="e-content">
    <p>The US is disasterously bad at public transportation. There are a number of reasons for this; one of which is the <a href="https://en.wikipedia.org/wiki/General_Motors_streetcar_conspiracy">systemic dismantling</a> of public transport orchestrated by General Motors et. al in the 30s and 40s. However, one prominent reason is that, for whatever reason, the time and money that it takes to build public works has skyrocketed since the 50s and 60s. Modern transportation projects are plagued by delays, cost overruns, and beaurocracy.</p>
<p>I don’t know why this is, or what the solution should be. But I do know a way around it: you don’t need new public infrastructure in order to improve public transport. <strong>All you need is paint</strong>. With paint, you can mark express bus lanes that allow buses to skip traffic. With paint, you can mark wide bike lanes, separated from traffic by the express bus lanes. And finally, with paint you can draw up bus schedules that make traveling by bus reliable and timely. The key idea here is multiple bus lines serving the same route, some of which are express buses that take much fewer stops.</p>
<p>OK, I’ll admit that last one is perhaps a stretch of the thesis. And while I’m stretching the thesis, I might say that another essential component is buses that are clean, safe, and climate-controlled, so that riding the bus is viewed as an activity for all classes, not just the lower classes.</p>
<p>The point I’m trying to make is that public transportation in America can feel hopeless if you are focused on high-tech solutions that require a lot of capital and investment to pay off. But a quality public transport system could take much less upfront investment than you might think.</p>
<p>Of course, all of this rests on getting political will… We will leave that as an exercise to the reader…</p>
<p>For more on “Bus Rapid Transport”, I encourage you to check out <a href="https://strongtowns.org">strongtowns.org</a>, and as example articles: <a href="https://www.strongtowns.org/journal/2022/2/14/the-real-reason-we-keep-getting-distracted-by-transit-boondoggles">1</a> and <a href="https://www.strongtowns.org/journal/2020/1/24/how-to-get-to-great-bus-service-in-a-car-dominated-place">2</a>.</p>
    </div>

    
    
</article>

<hr>

This website supports <emph>webmentions</emph>, a standard for collating reactions across many platforms. If you have a blog that supports sending webmentions and you put a link to this post, your blog post will show up as a response here.

You can also <a href="https://twitter.com/intent/tweet?text=https%3A%2F%2Fowenlynch.org%2Fposts%2F2022-07-31-all-you-need-is-paint%2F">respond via twitter</a> or respond via mastodon (on your preferred mastodon server); through the magic of <a href="https://brid.gy">brid.gy</a> all tweets or toots with links to this post will show up below (subject to moderation).

<script src="../../static/webmention.min.js" async></script>

<div id="webmentions">div</div>

      </div>

      <hr />

      <div class="main">
        Site proudly generated by
        <a href="http://jaspervdj.be/hakyll">Hakyll</a>
        with stylistic inspiration from <a href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
      </div>
    </div>
  </body>
</html>
]]></description>
    <pubDate>Sun, 31 Jul 2022 00:00:00 UT</pubDate>
    <guid>https://owenlynch.org/posts/2022-07-31-all-you-need-is-paint</guid>
    <dc:creator>Owen Lynch</dc:creator>
</item>
<item>
    <title>Thesis Presentation</title>
    <link>https://owenlynch.org/posts/2022-07-03-thesis</link>
    <description><![CDATA[<!doctype html>
<html lang="en">
  <head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>Thesis Presentation | Owen Lynch</title>
  <style type="text/css">
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="../../css/default.css" />
  <link rel="stylesheet" href="../../css/syntax.css" />
  <link rel="authorization_endpoint" href="https://indieauth.com/auth" />
  <link rel="webmention" href="https://webmention.io/owenlynch.org/webmention" />
  <link rel="pingback" href="https://webmention.io/owenlynch.org/xmlrpc" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/contrib/auto-render.min.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
        inlineElements = document.getElementsByClassName('math inline');
        displayElements = document.getElementsByClassName('math display');
        for (i = 0; i < inlineElements.length; i++) {
            e = inlineElements[i]
            try {
                katex.render(e.innerHTML, e, { displayMode: false });
            } catch (error) {
                console.error(error);
            }
        }
        for (i = 0; i < displayElements.length; i++) {
            e = displayElements[i]
            try {
              katex.render(e.innerHTML, e, { displayMode: true });
            } catch (error) {
                console.error(error)
            }
        }
    });
  </script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.css" />
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->


  </head>
  <body>
    <div class="container">
      <div class="menu">
        <div class="mainbar-links">
          <h2><a href="../../">Home</a> <a href="../../blog">Blog</a> <a href="../../output">Output</a></h2>
        </div>
        <div class="social-icons">
          <a href="https://github.com/olynch" rel="me"><img src="../../static/github-square.svg" class="icon" /></a>
          <a href="https://twitter.com/u_map_prop" rel="me"><img src="../../static/twitter-square.svg" class="icon" /></a>
          <a href="https://mathstodon.xyz/web/@olynch" rel="me"><img src="../../static/mastodon.svg" class="icon" /></a>
          <a href="https://www.youtube.com/channel/UCy1qDmvpYPmsYaHe51UzwIA" rel="me"><img src="../../static/youtube.svg" class="icon" /></a>
          <a href="../../rss.xml"><img src="../../static/rss.svg" class="icon" /></a>
        </div>
      </div>

      <hr />

      <div class="content main article">
        
<article class="h-entry">
    <h1>Thesis Presentation</h1>
    <div class="p-name" hidden>Thesis Presentation</div>

    <div class="info">
        Posted on <time class="dt-published" datetime="July  3, 2022">July  3, 2022</time>
        by <a class="p-author h-card" href="https://owenlynch.org">Owen Lynch</a>
    </div>

    <div class="e-content">
    <p>I will present my master’s thesis on July 5th at 5:15pm CEST. That’s 8:15am West Coast time, 11:15am East Coast time, and 4:15pm British time.</p>
<div class="rmenv" title="Abstract">
<p>Applied category theory is a field of mathematics that has opened up over the last decade and provides new ideas for how to formalize the composition of systems within science and engineering. In this thesis, we take methods from applied category theory and use them to formalize the composition of two types of systems: thermostatic systems and port-Hamiltonian systems. Thermostatic systems are a simplification of thermodynamic systems, retaining only the information necessary to discuss equilibria. Port-Hamiltonian systems are a generalization of classical mechanical systems that allow for energy to flow in and out of a system. The theory we use to formalize the composition of both of these systems is the theory of operads and operad algebras, and we hope to demonstrate that this theory has rich application beyond our use of it, and thus is a promising future point of study.</p>
<p>The talk will give an overview of the thesis, and then follow the discussion of thermostatics in more detail.</p>
</div>
<p>If you happen to be in Utrecht, you can join at the Buys Ballot Gebouw (am I the only one who thinks this is a hilarious name?) in Utrecht Science Park, room BBG020.</p>
<p>You can also join via <a href="https://teams.microsoft.com/l/meetup-join/19%3ameeting_NDk5MDYwMmMtMTQxZS00MDA0LWI1YjktMjM2NTg4MzU4NjE5%40thread.v2/0?context=%7b%22Tid%22%3a%22d72758a0-a446-4e0f-a0aa-4bf95a4a10e7%22%2c%22Oid%22%3a%2235ed1b5d-b69e-4bbd-b8b2-f03a45ecdc93%22%7d">microsoft teams</a>. You should be able to join without an account or downloading anything, if you open that link in Chrome or Microsoft Edge and then select the option to join in browser.</p>
    </div>

    
    
</article>

<hr>

This website supports <emph>webmentions</emph>, a standard for collating reactions across many platforms. If you have a blog that supports sending webmentions and you put a link to this post, your blog post will show up as a response here.

You can also <a href="https://twitter.com/intent/tweet?text=https%3A%2F%2Fowenlynch.org%2Fposts%2F2022-07-03-thesis%2F">respond via twitter</a> or respond via mastodon (on your preferred mastodon server); through the magic of <a href="https://brid.gy">brid.gy</a> all tweets or toots with links to this post will show up below (subject to moderation).

<script src="../../static/webmention.min.js" async></script>

<div id="webmentions">div</div>

      </div>

      <hr />

      <div class="main">
        Site proudly generated by
        <a href="http://jaspervdj.be/hakyll">Hakyll</a>
        with stylistic inspiration from <a href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
      </div>
    </div>
  </body>
</html>
]]></description>
    <pubDate>Sun, 03 Jul 2022 00:00:00 UT</pubDate>
    <guid>https://owenlynch.org/posts/2022-07-03-thesis</guid>
    <dc:creator>Owen Lynch</dc:creator>
</item>
<item>
    <title>Posting From Mobile</title>
    <link>https://owenlynch.org/posts/2022-05-28-post-from-mobile</link>
    <description><![CDATA[<!doctype html>
<html lang="en">
  <head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>Posting From Mobile | Owen Lynch</title>
  <style type="text/css">
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="../../css/default.css" />
  <link rel="stylesheet" href="../../css/syntax.css" />
  <link rel="authorization_endpoint" href="https://indieauth.com/auth" />
  <link rel="webmention" href="https://webmention.io/owenlynch.org/webmention" />
  <link rel="pingback" href="https://webmention.io/owenlynch.org/xmlrpc" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/contrib/auto-render.min.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
        inlineElements = document.getElementsByClassName('math inline');
        displayElements = document.getElementsByClassName('math display');
        for (i = 0; i < inlineElements.length; i++) {
            e = inlineElements[i]
            try {
                katex.render(e.innerHTML, e, { displayMode: false });
            } catch (error) {
                console.error(error);
            }
        }
        for (i = 0; i < displayElements.length; i++) {
            e = displayElements[i]
            try {
              katex.render(e.innerHTML, e, { displayMode: true });
            } catch (error) {
                console.error(error)
            }
        }
    });
  </script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.css" />
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->


  </head>
  <body>
    <div class="container">
      <div class="menu">
        <div class="mainbar-links">
          <h2><a href="../../">Home</a> <a href="../../blog">Blog</a> <a href="../../output">Output</a></h2>
        </div>
        <div class="social-icons">
          <a href="https://github.com/olynch" rel="me"><img src="../../static/github-square.svg" class="icon" /></a>
          <a href="https://twitter.com/u_map_prop" rel="me"><img src="../../static/twitter-square.svg" class="icon" /></a>
          <a href="https://mathstodon.xyz/web/@olynch" rel="me"><img src="../../static/mastodon.svg" class="icon" /></a>
          <a href="https://www.youtube.com/channel/UCy1qDmvpYPmsYaHe51UzwIA" rel="me"><img src="../../static/youtube.svg" class="icon" /></a>
          <a href="../../rss.xml"><img src="../../static/rss.svg" class="icon" /></a>
        </div>
      </div>

      <hr />

      <div class="content main article">
        
<article class="h-entry">
    <h1>Posting From Mobile</h1>
    <div class="p-name" hidden>Posting From Mobile</div>

    <div class="info">
        Posted on <time class="dt-published" datetime="May 28, 2022">May 28, 2022</time>
        by <a class="p-author h-card" href="https://owenlynch.org">Owen Lynch</a>
    </div>

    <div class="e-content">
    <p>This is a test to see if I can post from mobile with prose.io.</p>
    </div>

    
    
</article>

<hr>

This website supports <emph>webmentions</emph>, a standard for collating reactions across many platforms. If you have a blog that supports sending webmentions and you put a link to this post, your blog post will show up as a response here.

You can also <a href="https://twitter.com/intent/tweet?text=https%3A%2F%2Fowenlynch.org%2Fposts%2F2022-05-28-post-from-mobile%2F">respond via twitter</a> or respond via mastodon (on your preferred mastodon server); through the magic of <a href="https://brid.gy">brid.gy</a> all tweets or toots with links to this post will show up below (subject to moderation).

<script src="../../static/webmention.min.js" async></script>

<div id="webmentions">div</div>

      </div>

      <hr />

      <div class="main">
        Site proudly generated by
        <a href="http://jaspervdj.be/hakyll">Hakyll</a>
        with stylistic inspiration from <a href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
      </div>
    </div>
  </body>
</html>
]]></description>
    <pubDate>Sat, 28 May 2022 00:00:00 UT</pubDate>
    <guid>https://owenlynch.org/posts/2022-05-28-post-from-mobile</guid>
    <dc:creator>Owen Lynch</dc:creator>
</item>
<item>
    <title>Publishing with Mastodon</title>
    <link>https://owenlynch.org/posts/2022-04-28-mastodon</link>
    <description><![CDATA[<!doctype html>
<html lang="en">
  <head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>Publishing with Mastodon | Owen Lynch</title>
  <style type="text/css">
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="../../css/default.css" />
  <link rel="stylesheet" href="../../css/syntax.css" />
  <link rel="authorization_endpoint" href="https://indieauth.com/auth" />
  <link rel="webmention" href="https://webmention.io/owenlynch.org/webmention" />
  <link rel="pingback" href="https://webmention.io/owenlynch.org/xmlrpc" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/contrib/auto-render.min.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
        inlineElements = document.getElementsByClassName('math inline');
        displayElements = document.getElementsByClassName('math display');
        for (i = 0; i < inlineElements.length; i++) {
            e = inlineElements[i]
            try {
                katex.render(e.innerHTML, e, { displayMode: false });
            } catch (error) {
                console.error(error);
            }
        }
        for (i = 0; i < displayElements.length; i++) {
            e = displayElements[i]
            try {
              katex.render(e.innerHTML, e, { displayMode: true });
            } catch (error) {
                console.error(error)
            }
        }
    });
  </script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.css" />
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->


  </head>
  <body>
    <div class="container">
      <div class="menu">
        <div class="mainbar-links">
          <h2><a href="../../">Home</a> <a href="../../blog">Blog</a> <a href="../../output">Output</a></h2>
        </div>
        <div class="social-icons">
          <a href="https://github.com/olynch" rel="me"><img src="../../static/github-square.svg" class="icon" /></a>
          <a href="https://twitter.com/u_map_prop" rel="me"><img src="../../static/twitter-square.svg" class="icon" /></a>
          <a href="https://mathstodon.xyz/web/@olynch" rel="me"><img src="../../static/mastodon.svg" class="icon" /></a>
          <a href="https://www.youtube.com/channel/UCy1qDmvpYPmsYaHe51UzwIA" rel="me"><img src="../../static/youtube.svg" class="icon" /></a>
          <a href="../../rss.xml"><img src="../../static/rss.svg" class="icon" /></a>
        </div>
      </div>

      <hr />

      <div class="content main article">
        
<article class="h-entry">
    <h1>Publishing with Mastodon</h1>
    <div class="p-name" hidden>Publishing with Mastodon</div>

    <div class="info">
        Posted on <time class="dt-published" datetime="April 28, 2022">April 28, 2022</time>
        by <a class="p-author h-card" href="https://owenlynch.org">Owen Lynch</a>
    </div>

    <div class="e-content">
    <p>If everything works, this should show up as a toot on mastodon, and then also as a tweet on twitter, and any responses to the tweet or toot will show up as comments below this post.</p>
<p>I use <a href="https://webmention.app/">webmention.app</a> to send webmentions to <a href="https://brid.gy">brid.gy</a>, and then <a href="https://brid.gy">brid.gy</a> sends toots, and then <a href="https://crossposter.masto.donte.com.br/">crossposter.masto.donte.com.br/</a> cross posts toots to twitter.</p>
<p>It’s kind of rube-goldberg-esque, but you do what you can…</p>
<p>Wish me luck.</p>
    </div>

    
    
    <a href="https://brid.gy/publish/mastodon"></a>
    
</article>

<hr>

This website supports <emph>webmentions</emph>, a standard for collating reactions across many platforms. If you have a blog that supports sending webmentions and you put a link to this post, your blog post will show up as a response here.

You can also <a href="https://twitter.com/intent/tweet?text=https%3A%2F%2Fowenlynch.org%2Fposts%2F2022-04-28-mastodon%2F">respond via twitter</a> or respond via mastodon (on your preferred mastodon server); through the magic of <a href="https://brid.gy">brid.gy</a> all tweets or toots with links to this post will show up below (subject to moderation).

<script src="../../static/webmention.min.js" async></script>

<div id="webmentions">div</div>

      </div>

      <hr />

      <div class="main">
        Site proudly generated by
        <a href="http://jaspervdj.be/hakyll">Hakyll</a>
        with stylistic inspiration from <a href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
      </div>
    </div>
  </body>
</html>
]]></description>
    <pubDate>Thu, 28 Apr 2022 00:00:00 UT</pubDate>
    <guid>https://owenlynch.org/posts/2022-04-28-mastodon</guid>
    <dc:creator>Owen Lynch</dc:creator>
</item>
<item>
    <title>Indentity of Indiscernables</title>
    <link>https://owenlynch.org/posts/2022-04-18-identity-of-indiscernables</link>
    <description><![CDATA[<!doctype html>
<html lang="en">
  <head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>Indentity of Indiscernables | Owen Lynch</title>
  <style type="text/css">
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="../../css/default.css" />
  <link rel="stylesheet" href="../../css/syntax.css" />
  <link rel="authorization_endpoint" href="https://indieauth.com/auth" />
  <link rel="webmention" href="https://webmention.io/owenlynch.org/webmention" />
  <link rel="pingback" href="https://webmention.io/owenlynch.org/xmlrpc" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/contrib/auto-render.min.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
        inlineElements = document.getElementsByClassName('math inline');
        displayElements = document.getElementsByClassName('math display');
        for (i = 0; i < inlineElements.length; i++) {
            e = inlineElements[i]
            try {
                katex.render(e.innerHTML, e, { displayMode: false });
            } catch (error) {
                console.error(error);
            }
        }
        for (i = 0; i < displayElements.length; i++) {
            e = displayElements[i]
            try {
              katex.render(e.innerHTML, e, { displayMode: true });
            } catch (error) {
                console.error(error)
            }
        }
    });
  </script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.css" />
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->


  </head>
  <body>
    <div class="container">
      <div class="menu">
        <div class="mainbar-links">
          <h2><a href="../../">Home</a> <a href="../../blog">Blog</a> <a href="../../output">Output</a></h2>
        </div>
        <div class="social-icons">
          <a href="https://github.com/olynch" rel="me"><img src="../../static/github-square.svg" class="icon" /></a>
          <a href="https://twitter.com/u_map_prop" rel="me"><img src="../../static/twitter-square.svg" class="icon" /></a>
          <a href="https://mathstodon.xyz/web/@olynch" rel="me"><img src="../../static/mastodon.svg" class="icon" /></a>
          <a href="https://www.youtube.com/channel/UCy1qDmvpYPmsYaHe51UzwIA" rel="me"><img src="../../static/youtube.svg" class="icon" /></a>
          <a href="../../rss.xml"><img src="../../static/rss.svg" class="icon" /></a>
        </div>
      </div>

      <hr />

      <div class="content main article">
        
<article class="h-entry">
    <h1>Indentity of Indiscernables</h1>
    <div class="p-name" hidden>Indentity of Indiscernables</div>

    <div class="info">
        Posted on <time class="dt-published" datetime="April 18, 2022">April 18, 2022</time>
        by <a class="p-author h-card" href="https://owenlynch.org">Owen Lynch</a>
    </div>

    <div class="e-content">
    <p>I’m trying to stay off twitter, so posts that would normally go on my twitter are instead going on my blog. No doubt, this is bad for readership, but perhaps in the long run it will be better for me. Anyways, this is a rather short thought, but I wanted to share it with the world.</p>
<p>The principle of <a href="https://ncatlab.org/nlab/show/identity+of+indiscernibles">identity of indiscernables</a> states that two objects are identical if and only if they have all the same properties.</p>
<p>I just realized that this is one of the many things you can say “isn’t this just the Yoneda lemma” about.</p>
<p>Specifically, a close corollary to the <a href="https://ncatlab.org/nlab/show/Yoneda+lemma">Yoneda lemma</a> states that the functor <span class="math inline">y : \mathsf{C} \to \mathsf{Set}^{\mathsf{C}^\mathrm{op}}</span> that sends <span class="math inline">A \in \mathsf{C}_{0}</span> to <span class="math inline">\mathrm{Hom}_{\mathsf{C}}(-,A)</span> is an <em>embedding</em>, which means that it is and full and faithful (i.e. bijective on Hom-sets).</p>
<p>To understand this, let’s take the example of topological spaces. <span class="math inline">y(A) = \mathrm{Hom}_{\mathsf{C}}(-,A)</span> tells us all of the ways to map <span class="math inline">1</span> into <span class="math inline">A</span>, that is, all the points of <span class="math inline">A</span>. It also tells us all the ways of mapping <span class="math inline">S^{1}</span> into <span class="math inline">A</span>, that is, all the circles in <span class="math inline">A</span>. And so on for other “test” spaces. It also tells us how these are related: i.e. it tells us which points lie on which circles.</p>
<p>The Yoneda lemma tells us that just looking at the pattern of these maps into <span class="math inline">A</span> is sufficient to figure out the identity of <span class="math inline">A</span>. And if we think of “the pattern of these maps” as giving the “properties” of <span class="math inline">A</span>, then the Yoneda lemma states that if the properties of <span class="math inline">A</span>, i.e. <span class="math inline">y(A)</span>, and the properties of <span class="math inline">B</span>, i.e. <span class="math inline">y(B)</span> are isomorphic, then <span class="math inline">A</span> and <span class="math inline">B</span> must also be isomorphic. From the perspective of category theory, <span class="math inline">A</span> and <span class="math inline">B</span> are “indiscernables” if <span class="math inline">y(A)</span> and <span class="math inline">y(B)</span> are isomorphic, and then <span class="math inline">A</span> and be must be “identical” (i.e., isomorphic)!</p>
<p>Anyways, I think it’s fun when abstract philosophical principles can be reduced to special cases of theorems in math.</p>
    </div>

    
    <a href="https://brid.gy/publish/twitter"></a>
    
    
</article>

<hr>

This website supports <emph>webmentions</emph>, a standard for collating reactions across many platforms. If you have a blog that supports sending webmentions and you put a link to this post, your blog post will show up as a response here.

You can also <a href="https://twitter.com/intent/tweet?text=https%3A%2F%2Fowenlynch.org%2Fposts%2F2022-04-18-identity-of-indiscernables%2F">respond via twitter</a> or respond via mastodon (on your preferred mastodon server); through the magic of <a href="https://brid.gy">brid.gy</a> all tweets or toots with links to this post will show up below (subject to moderation).

<script src="../../static/webmention.min.js" async></script>

<div id="webmentions">div</div>

      </div>

      <hr />

      <div class="main">
        Site proudly generated by
        <a href="http://jaspervdj.be/hakyll">Hakyll</a>
        with stylistic inspiration from <a href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
      </div>
    </div>
  </body>
</html>
]]></description>
    <pubDate>Mon, 18 Apr 2022 00:00:00 UT</pubDate>
    <guid>https://owenlynch.org/posts/2022-04-18-identity-of-indiscernables</guid>
    <dc:creator>Owen Lynch</dc:creator>
</item>
<item>
    <title>Federate Twitter</title>
    <link>https://owenlynch.org/posts/2022-04-16-federate-twitter</link>
    <description><![CDATA[<!doctype html>
<html lang="en">
  <head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>Federate Twitter | Owen Lynch</title>
  <style type="text/css">
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="../../css/default.css" />
  <link rel="stylesheet" href="../../css/syntax.css" />
  <link rel="authorization_endpoint" href="https://indieauth.com/auth" />
  <link rel="webmention" href="https://webmention.io/owenlynch.org/webmention" />
  <link rel="pingback" href="https://webmention.io/owenlynch.org/xmlrpc" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/contrib/auto-render.min.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
        inlineElements = document.getElementsByClassName('math inline');
        displayElements = document.getElementsByClassName('math display');
        for (i = 0; i < inlineElements.length; i++) {
            e = inlineElements[i]
            try {
                katex.render(e.innerHTML, e, { displayMode: false });
            } catch (error) {
                console.error(error);
            }
        }
        for (i = 0; i < displayElements.length; i++) {
            e = displayElements[i]
            try {
              katex.render(e.innerHTML, e, { displayMode: true });
            } catch (error) {
                console.error(error)
            }
        }
    });
  </script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.css" />
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->


  </head>
  <body>
    <div class="container">
      <div class="menu">
        <div class="mainbar-links">
          <h2><a href="../../">Home</a> <a href="../../blog">Blog</a> <a href="../../output">Output</a></h2>
        </div>
        <div class="social-icons">
          <a href="https://github.com/olynch" rel="me"><img src="../../static/github-square.svg" class="icon" /></a>
          <a href="https://twitter.com/u_map_prop" rel="me"><img src="../../static/twitter-square.svg" class="icon" /></a>
          <a href="https://mathstodon.xyz/web/@olynch" rel="me"><img src="../../static/mastodon.svg" class="icon" /></a>
          <a href="https://www.youtube.com/channel/UCy1qDmvpYPmsYaHe51UzwIA" rel="me"><img src="../../static/youtube.svg" class="icon" /></a>
          <a href="../../rss.xml"><img src="../../static/rss.svg" class="icon" /></a>
        </div>
      </div>

      <hr />

      <div class="content main article">
        
<article class="h-entry">
    <h1>Federate Twitter</h1>
    <div class="p-name" hidden>Federate Twitter</div>

    <div class="info">
        Posted on <time class="dt-published" datetime="April 16, 2022">April 16, 2022</time>
        by <a class="p-author h-card" href="https://owenlynch.org">Owen Lynch</a>
    </div>

    <div class="e-content">
    <p>Elon Musk is trying to buy twitter. Now, people have various opinions on this, but I actually am excited about it. This is because Elon Musk is a <em>live actor</em>. He does things that are completely out of the Overton window. Sometimes these things are bad, and I have doubts about his ability to see the world clearly (i.e. replacing trains with self-driving Teslas??? Stupidest thing I’ve ever heard). But the point is, he’s high variance, and sometimes that’s what we need.</p>
<p>One thing that I’ve seen floated is the idea that Elon will open source the twitter algorithm. Perhaps the twitter algorithm could then be tweaked against fake news and hate speech. But I think that this doesn’t go far enough. I think that Elon should allow communities on twitter to choose their own algorithm, <em>and</em> choose their own moderation policies.</p>
<p>Content can move between communities, but communities can set limits on this. I.e., there can be a alt-right community which posts whatever they like. But then all the other communities just block the entire alt-right community, including DMs, etc. Each community can have their own guidelines for how to use the banhammer.</p>
<p>The entire twitter-verse becomes an archipelago of safe spaces, with import/export controls.</p>
<p>This <em>includes</em> safe spaces for debate, where debate-norms are enforced. Something that should be noted is that sometimes debate norms are <em>stricter</em> than other norms. For instance, in a social justice community, it might be acceptible to write “Ugh, I just hate men”. However, in a debate community, any expression of derisive opinions would be disallowed, and in general there would be a strong requirement to be extremely <em>polite</em>, even though the <em>content</em> of what you were saying could be anything. An example of this is that Scott Alexander has a comment policy where you can express philosophical disagreement with trans issues, but you <em>must</em> use the pronouns that the person you are talking to prefers. Debate spaces need to be inclusive to all who wish to have an honest discussion.</p>
<p>Allowing “debate” everywhere gives free reign to trolls who destroy the public sphere, and thus encourages filter bubbles. Nobody wants to be “well actually”d while they are just hanging with their pals. Sometimes you just want to vent and be supported. But without civil debate, we cannot collectively refine the ideas that we use to govern our society, and political struggles become naked power struggles. Thus, there needs to be a place where debate happens, that is separate from people who aren’t looking to be in that debate.</p>
<p>This is already the direction that the internet is going, with lots of internet content now happening in private slack, zulip, and discord servers collectively called “the cozy web”: see <a href="https://studio.ribbonfarm.com/p/the-extended-internet-universe?s=r">The Extended Internet Universe</a>.</p>
<p>If twitter can capture part of the dynamics that make “the cozy web” so appealing, then it could become far more relevant, and far more healthy in the future, fostering strong communities <em>and</em> free speech. Moreover, twitter has a lot of ability to “put their thumb on the scales” and foster debate safe spaces with totalitarian politeness norms, which is what I think our democracy needs.</p>
<p>I don’t think Elon is buying twitter to make a profit. I think, in his own way, he’s actually concerned about free speech norms. And I think that if this is true, he should give doing something like this some serious consideration.</p>
    </div>

    
    <a href="https://brid.gy/publish/twitter"></a>
    
    
</article>

<hr>

This website supports <emph>webmentions</emph>, a standard for collating reactions across many platforms. If you have a blog that supports sending webmentions and you put a link to this post, your blog post will show up as a response here.

You can also <a href="https://twitter.com/intent/tweet?text=https%3A%2F%2Fowenlynch.org%2Fposts%2F2022-04-16-federate-twitter%2F">respond via twitter</a> or respond via mastodon (on your preferred mastodon server); through the magic of <a href="https://brid.gy">brid.gy</a> all tweets or toots with links to this post will show up below (subject to moderation).

<script src="../../static/webmention.min.js" async></script>

<div id="webmentions">div</div>

      </div>

      <hr />

      <div class="main">
        Site proudly generated by
        <a href="http://jaspervdj.be/hakyll">Hakyll</a>
        with stylistic inspiration from <a href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
      </div>
    </div>
  </body>
</html>
]]></description>
    <pubDate>Sat, 16 Apr 2022 00:00:00 UT</pubDate>
    <guid>https://owenlynch.org/posts/2022-04-16-federate-twitter</guid>
    <dc:creator>Owen Lynch</dc:creator>
</item>
<item>
    <title>Building with Nix</title>
    <link>https://owenlynch.org/posts/2022-04-02-building-with-nix</link>
    <description><![CDATA[<!doctype html>
<html lang="en">
  <head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>Building with Nix | Owen Lynch</title>
  <style type="text/css">
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="../../css/default.css" />
  <link rel="stylesheet" href="../../css/syntax.css" />
  <link rel="authorization_endpoint" href="https://indieauth.com/auth" />
  <link rel="webmention" href="https://webmention.io/owenlynch.org/webmention" />
  <link rel="pingback" href="https://webmention.io/owenlynch.org/xmlrpc" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/contrib/auto-render.min.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
        inlineElements = document.getElementsByClassName('math inline');
        displayElements = document.getElementsByClassName('math display');
        for (i = 0; i < inlineElements.length; i++) {
            e = inlineElements[i]
            try {
                katex.render(e.innerHTML, e, { displayMode: false });
            } catch (error) {
                console.error(error);
            }
        }
        for (i = 0; i < displayElements.length; i++) {
            e = displayElements[i]
            try {
              katex.render(e.innerHTML, e, { displayMode: true });
            } catch (error) {
                console.error(error)
            }
        }
    });
  </script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.css" />
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->


  </head>
  <body>
    <div class="container">
      <div class="menu">
        <div class="mainbar-links">
          <h2><a href="../../">Home</a> <a href="../../blog">Blog</a> <a href="../../output">Output</a></h2>
        </div>
        <div class="social-icons">
          <a href="https://github.com/olynch" rel="me"><img src="../../static/github-square.svg" class="icon" /></a>
          <a href="https://twitter.com/u_map_prop" rel="me"><img src="../../static/twitter-square.svg" class="icon" /></a>
          <a href="https://mathstodon.xyz/web/@olynch" rel="me"><img src="../../static/mastodon.svg" class="icon" /></a>
          <a href="https://www.youtube.com/channel/UCy1qDmvpYPmsYaHe51UzwIA" rel="me"><img src="../../static/youtube.svg" class="icon" /></a>
          <a href="../../rss.xml"><img src="../../static/rss.svg" class="icon" /></a>
        </div>
      </div>

      <hr />

      <div class="content main article">
        
<article class="h-entry">
    <h1>Building with Nix</h1>
    <div class="p-name" hidden>Building with Nix</div>

    <div class="info">
        Posted on <time class="dt-published" datetime="April  2, 2022">April  2, 2022</time>
        by <a class="p-author h-card" href="https://owenlynch.org">Owen Lynch</a>
    </div>

    <div class="e-content">
    <p>This blog has been built with <a href="https://nixos.org/nix">nix</a> for a long time, but recently I revamped the infrastructure for building, massively simplifying everything and also decreasing build times to 20 seconds from 10 minutes. So I decided to write about it in case my setup was useful to others.</p>
<p>If you’ve never heard of nix, it is a package manager that is totally deterministic. I have a description of how to build my blog written in a file, and with nix I can be certain that wherever I build my blog, I will end up with exactly the same output files.</p>
<p>It does this using the nix programming language (I know, it’s confusing that both the package manager and the language are called nix). The nix programming language is a purely functional, turing complete language, used to create objects called <em>derivations</em>. These derivations describe how to build a certain piece of software, and derivations can depend on each other. The derivations are built in hermetic environments that only have access to the declared inputs, so if you forget to specify a dependency explicitly, it will not build.</p>
<p>My blog has two parts. One is a <a href="https://github.com/olynch/owenlynch.org-builder">builder</a>, which is a haskell package that depends on <a href="https://jaspervdj.be/hakyll/">hakyll</a>. I used the cabal2nix template from <a href="https://serokell.io/blog/practical-nix-flakes">Practical Nix Flakes</a> to describe how to build this haskell package.</p>
<p>The other part has the source files for my blog, which are mainly in markdown. This is in a private repo, because I don’t want drafts to be exposed, however you can access the current source <a href="../../static/source.tar.gz">here</a>. I use the following flake.nix file to build this blog</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode nix"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true"></a><span class="kw">{</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true"></a>  <span class="ex">description</span> = <span class="st">&quot;Owen's Blog&quot;</span><span class="kw">;</span></span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true"></a>  <span class="ex">inputs.nixpkgs.url</span> = <span class="st">&quot;github:nixos/nixpkgs&quot;</span><span class="kw">;</span></span>
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true"></a>  <span class="ex">inputs.flake-utils.url</span> = <span class="st">&quot;github:numtide/flake-utils&quot;</span><span class="kw">;</span></span>
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true"></a>  <span class="ex">inputs.builder.url</span> = <span class="st">&quot;github:olynch/owenlynch.org-builder&quot;</span><span class="kw">;</span></span>
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true"></a></span>
<span id="cb1-7"><a href="#cb1-7" aria-hidden="true"></a>  <span class="ex">outputs</span> = { self, builder, flake-utils, nixpkgs <span class="kw">}</span>:</span>
<span id="cb1-8"><a href="#cb1-8" aria-hidden="true"></a>    <span class="ex">flake-utils.lib.eachSystem</span> [ <span class="st">&quot;x86_64-linux&quot;</span> ] (system:</span>
<span id="cb1-9"><a href="#cb1-9" aria-hidden="true"></a>      <span class="bu">let</span></span>
<span id="cb1-10"><a href="#cb1-10" aria-hidden="true"></a>        <span class="ex">pkgs</span> = nixpkgs.legacyPackages.<span class="va">${system}</span><span class="kw">;</span></span>
<span id="cb1-11"><a href="#cb1-11" aria-hidden="true"></a>        <span class="ex">name</span> = <span class="st">&quot;owenlynch-org&quot;</span><span class="kw">;</span></span>
<span id="cb1-12"><a href="#cb1-12" aria-hidden="true"></a>      <span class="kw">in</span> <span class="kw">{</span></span>
<span id="cb1-13"><a href="#cb1-13" aria-hidden="true"></a>        <span class="ex">packages.website</span> = pkgs.stdenv.mkDerivation {</span>
<span id="cb1-14"><a href="#cb1-14" aria-hidden="true"></a>          <span class="ex">inherit</span> name<span class="kw">;</span></span>
<span id="cb1-15"><a href="#cb1-15" aria-hidden="true"></a>          <span class="ex">src</span> = self<span class="kw">;</span></span>
<span id="cb1-16"><a href="#cb1-16" aria-hidden="true"></a>          <span class="ex">buildInputs</span> = [ builder.defaultPackage.<span class="va">${system}</span> ]<span class="kw">;</span></span>
<span id="cb1-17"><a href="#cb1-17" aria-hidden="true"></a>          <span class="ex">LANG</span> = <span class="st">&quot;en_US.UTF-8&quot;</span><span class="kw">;</span></span>
<span id="cb1-18"><a href="#cb1-18" aria-hidden="true"></a>          <span class="ex">LC_ALL</span> = <span class="st">&quot;en_US.UTF-8&quot;</span><span class="kw">;</span></span>
<span id="cb1-19"><a href="#cb1-19" aria-hidden="true"></a>          <span class="ex">LOCALE_ARCHIVE</span> = <span class="st">&quot;</span><span class="va">${pkgs</span><span class="er">.glibcLocales</span><span class="va">}</span><span class="st">/lib/locale/locale-archive&quot;</span><span class="kw">;</span></span>
<span id="cb1-20"><a href="#cb1-20" aria-hidden="true"></a>          <span class="ex">buildPhase</span> = <span class="st">''</span></span>
<span id="cb1-21"><a href="#cb1-21" aria-hidden="true"></a>            <span class="fu">tar</span> czf <span class="va">$TMPDIR</span>/source.tar.gz .</span>
<span id="cb1-22"><a href="#cb1-22" aria-hidden="true"></a>            <span class="fu">mv</span> <span class="va">$TMPDIR</span>/source.tar.gz static/</span>
<span id="cb1-23"><a href="#cb1-23" aria-hidden="true"></a>            <span class="va">${name}</span> <span class="ex">build</span></span>
<span id="cb1-24"><a href="#cb1-24" aria-hidden="true"></a>          <span class="st">''</span>;</span>
<span id="cb1-25"><a href="#cb1-25" aria-hidden="true"></a>          <span class="ex">installPhase</span> = <span class="st">''</span></span>
<span id="cb1-26"><a href="#cb1-26" aria-hidden="true"></a>            <span class="fu">mkdir</span> -p <span class="va">$out</span>/</span>
<span id="cb1-27"><a href="#cb1-27" aria-hidden="true"></a>            <span class="fu">cp</span> -R _site/* <span class="va">$out</span>/</span>
<span id="cb1-28"><a href="#cb1-28" aria-hidden="true"></a>          <span class="st">''</span>;</span>
<span id="cb1-29"><a href="#cb1-29" aria-hidden="true"></a>          <span class="ex">dontStrip</span> = true<span class="kw">;</span></span>
<span id="cb1-30"><a href="#cb1-30" aria-hidden="true"></a>        <span class="kw">}</span>;</span>
<span id="cb1-31"><a href="#cb1-31" aria-hidden="true"></a></span>
<span id="cb1-32"><a href="#cb1-32" aria-hidden="true"></a>        <span class="ex">defaultPackage</span> = self.packages.<span class="va">${system}</span>.website<span class="kw">;</span></span>
<span id="cb1-33"><a href="#cb1-33" aria-hidden="true"></a></span>
<span id="cb1-34"><a href="#cb1-34" aria-hidden="true"></a>        <span class="ex">devShell</span> = pkgs.mkShell {</span>
<span id="cb1-35"><a href="#cb1-35" aria-hidden="true"></a>          <span class="ex">buildInputs</span> = [ builder.defaultPackage.<span class="va">${system}</span> ]<span class="kw">;</span></span>
<span id="cb1-36"><a href="#cb1-36" aria-hidden="true"></a>        };</span>
<span id="cb1-37"><a href="#cb1-37" aria-hidden="true"></a></span>
<span id="cb1-38"><a href="#cb1-38" aria-hidden="true"></a>        <span class="ex">hydraJobs.build</span> = self.packages.<span class="va">${system}</span>.website<span class="kw">;</span></span>
<span id="cb1-39"><a href="#cb1-39" aria-hidden="true"></a>      }</span>
<span id="cb1-40"><a href="#cb1-40" aria-hidden="true"></a>    );</span>
<span id="cb1-41"><a href="#cb1-41" aria-hidden="true"></a>}</span></code></pre></div>
<p>The important part is the buildPhase and the installPhase, these run the build command from the builder package and then copies the resulting site into <code>$out</code>, which is the directory that nix expects the output of a derivation to be in.</p>
<p>I then have a very simple github action</p>
<div class="sourceCode" id="cb2"><pre class="sourceCode yaml"><code class="sourceCode yaml"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true"></a><span class="fu">name</span><span class="kw">:</span><span class="at"> </span><span class="st">&quot;Deploy&quot;</span></span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true"></a><span class="fu">on</span><span class="kw">:</span></span>
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true"></a><span class="at">  </span><span class="fu">push</span><span class="kw">:</span></span>
<span id="cb2-4"><a href="#cb2-4" aria-hidden="true"></a><span class="at">    </span><span class="fu">branches</span><span class="kw">:</span></span>
<span id="cb2-5"><a href="#cb2-5" aria-hidden="true"></a><span class="at">      </span><span class="kw">-</span><span class="at"> master</span></span>
<span id="cb2-6"><a href="#cb2-6" aria-hidden="true"></a></span>
<span id="cb2-7"><a href="#cb2-7" aria-hidden="true"></a><span class="fu">jobs</span><span class="kw">:</span></span>
<span id="cb2-8"><a href="#cb2-8" aria-hidden="true"></a><span class="at">  </span><span class="fu">deploy</span><span class="kw">:</span></span>
<span id="cb2-9"><a href="#cb2-9" aria-hidden="true"></a><span class="at">    </span><span class="fu">runs-on</span><span class="kw">:</span><span class="at"> ubuntu-20.04</span></span>
<span id="cb2-10"><a href="#cb2-10" aria-hidden="true"></a><span class="at">    </span><span class="fu">steps</span><span class="kw">:</span></span>
<span id="cb2-11"><a href="#cb2-11" aria-hidden="true"></a><span class="at">    </span><span class="kw">-</span><span class="at"> </span><span class="fu">name</span><span class="kw">:</span><span class="at"> Deploy with nix</span></span>
<span id="cb2-12"><a href="#cb2-12" aria-hidden="true"></a><span class="at">      </span><span class="fu">env</span><span class="kw">:</span></span>
<span id="cb2-13"><a href="#cb2-13" aria-hidden="true"></a><span class="at">        </span><span class="fu">SSH_AUTH_SOCK</span><span class="kw">:</span><span class="at"> /tmp/ssh_agent.sock</span></span>
<span id="cb2-14"><a href="#cb2-14" aria-hidden="true"></a><span class="fu">      run</span><span class="kw">: </span><span class="ch">|</span></span>
<span id="cb2-15"><a href="#cb2-15" aria-hidden="true"></a>        ssh-agent -a $SSH_AUTH_SOCK &gt; /dev/null</span>
<span id="cb2-16"><a href="#cb2-16" aria-hidden="true"></a>        echo -e &quot;${{ secrets.DEPLOY_SSH_KEY }}\n&quot; | ssh-add -</span>
<span id="cb2-17"><a href="#cb2-17" aria-hidden="true"></a>        export SSHOPTS=&quot;-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no&quot;</span>
<span id="cb2-18"><a href="#cb2-18" aria-hidden="true"></a>        ssh $SSHOPTS website-updater@proqqul.net &quot;nix build github:olynch/owenlynch.org/$GITHUB_SHA --out-link /var/www/owenlynch.org/deployed&quot;</span></code></pre></div>
<p>All this does is ssh into my server (which was surprisingly difficult… I don’t know why it’s so hard to ssh from a github action), and runs <code>nix build github:olynch/owenlynch.org/$GITHUB_SHA --out-link /var/www/owenlynch.org/deployed</code>, which builds the current commit of my website and symlinks the result to <code>/var/www/owenlynch.org/deployed</code>. Then nginx serves that directory!</p>
<p>This is very fast, because the site builder gets built on my server, and then sticks around in the cache for the next time I want to rebuild my site. Previously, I was installing GHC and building my site builder on the github action, which was a massive waste of time.</p>
<p>Anyways, that’s it! The basic idea behind this would work for any static site generator, though for most static site generators it wouldn’t be such a big deal to split the builder from the source files because you don’t need 5G of haskell libraries to build the builder… Ah how I love and hate haskell…</p>
    </div>

    
    <a href="https://brid.gy/publish/twitter"></a>
    
    
</article>

<hr>

This website supports <emph>webmentions</emph>, a standard for collating reactions across many platforms. If you have a blog that supports sending webmentions and you put a link to this post, your blog post will show up as a response here.

You can also <a href="https://twitter.com/intent/tweet?text=https%3A%2F%2Fowenlynch.org%2Fposts%2F2022-04-02-building-with-nix%2F">respond via twitter</a> or respond via mastodon (on your preferred mastodon server); through the magic of <a href="https://brid.gy">brid.gy</a> all tweets or toots with links to this post will show up below (subject to moderation).

<script src="../../static/webmention.min.js" async></script>

<div id="webmentions">div</div>

      </div>

      <hr />

      <div class="main">
        Site proudly generated by
        <a href="http://jaspervdj.be/hakyll">Hakyll</a>
        with stylistic inspiration from <a href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
      </div>
    </div>
  </body>
</html>
]]></description>
    <pubDate>Sat, 02 Apr 2022 00:00:00 UT</pubDate>
    <guid>https://owenlynch.org/posts/2022-04-02-building-with-nix</guid>
    <dc:creator>Owen Lynch</dc:creator>
</item>
<item>
    <title>April Links Day</title>
    <link>https://owenlynch.org/posts/2022-04-01-april-link-day</link>
    <description><![CDATA[<!doctype html>
<html lang="en">
  <head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>April Links Day | Owen Lynch</title>
  <style type="text/css">
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="../../css/default.css" />
  <link rel="stylesheet" href="../../css/syntax.css" />
  <link rel="authorization_endpoint" href="https://indieauth.com/auth" />
  <link rel="webmention" href="https://webmention.io/owenlynch.org/webmention" />
  <link rel="pingback" href="https://webmention.io/owenlynch.org/xmlrpc" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/contrib/auto-render.min.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
        inlineElements = document.getElementsByClassName('math inline');
        displayElements = document.getElementsByClassName('math display');
        for (i = 0; i < inlineElements.length; i++) {
            e = inlineElements[i]
            try {
                katex.render(e.innerHTML, e, { displayMode: false });
            } catch (error) {
                console.error(error);
            }
        }
        for (i = 0; i < displayElements.length; i++) {
            e = displayElements[i]
            try {
              katex.render(e.innerHTML, e, { displayMode: true });
            } catch (error) {
                console.error(error)
            }
        }
    });
  </script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.css" />
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->


  </head>
  <body>
    <div class="container">
      <div class="menu">
        <div class="mainbar-links">
          <h2><a href="../../">Home</a> <a href="../../blog">Blog</a> <a href="../../output">Output</a></h2>
        </div>
        <div class="social-icons">
          <a href="https://github.com/olynch" rel="me"><img src="../../static/github-square.svg" class="icon" /></a>
          <a href="https://twitter.com/u_map_prop" rel="me"><img src="../../static/twitter-square.svg" class="icon" /></a>
          <a href="https://mathstodon.xyz/web/@olynch" rel="me"><img src="../../static/mastodon.svg" class="icon" /></a>
          <a href="https://www.youtube.com/channel/UCy1qDmvpYPmsYaHe51UzwIA" rel="me"><img src="../../static/youtube.svg" class="icon" /></a>
          <a href="../../rss.xml"><img src="../../static/rss.svg" class="icon" /></a>
        </div>
      </div>

      <hr />

      <div class="content main article">
        
<article class="h-entry">
    <h1>April Links Day</h1>
    <div class="p-name" hidden>April Links Day</div>

    <div class="info">
        Posted on <time class="dt-published" datetime="April  1, 2022">April  1, 2022</time>
        by <a class="p-author h-card" href="https://owenlynch.org">Owen Lynch</a>
    </div>

    <div class="e-content">
    <p>Links post!</p>
<p>I’ve spent a lot of time working on my website recently, and I kind of wish instead of using Hakyll I used <a href="https://wowchemy.com/">wowchemy</a>. If you are looking to setup a blog, this looks like a really great option.</p>
<p><a href="https://acesounderglass.com">Aseco Under Glass</a> is a great blog that I’ve been reading recently, I particularly recommend <a href="https://acesounderglass.com/2019/08/01/power-buys-you-distance-from-the-crime/">Power Buys You Distance From The Crime</a>.</p>
<p>For some wacky artwork/prose, check out <a href="https://silicon-dawn.cards/">Tarot of the Silicon Dawn</a></p>
<p><a href="https://probablydance.com/2022/02/19/reasons-why-babies-cry-in-the-first-three-months-how-to-tell-them-apart-and-what-to-do/">This post</a> is good for making you realize how insane you have to be in order to reproduce… But I guess someone’s gotta do it.</p>
<p>You know him as an important Enlightment philosopher… but did you know he also made a mean breakfast? Here’s a <a href="https://rarecooking.com/2021/12/14/john-lockes-recipe-for-pancakes/">pancake recipe</a> from John Locke.</p>
<p>Do you wish news was more boring? Then <a href="https://legiblenews.com/">legiblenews.com</a> is the site for you! (Unironically, it’s a good site. News should be more boring; news optimized for clicks is not going to tell you much about the world.)</p>
<p>Did you know that “bash” stands for Bourne-Again Shell, because the original “sh” was also known as the Bourne Shell? Well, now the command line is being Bourne again… again, with a interesting shell called <a href="https://www.nushell.sh/">nushell</a>. One of these days someone should name a shell “babash”.</p>
<p>One of the key claims in <a href="https://yalebooks.yale.edu/book/9780300182910/against-grain/">Against The Grain</a> is that grain cultivation wasn’t more efficient than other forms of sustinence, it was just easier for governments to tax. However, James C. Scott gives only qualitative arguments for this, so I was happy to see <a href="https://www.journals.uchicago.edu/doi/abs/10.1086/718372">this paper</a> which gives quantitative arguments.</p>
<p><a href="http://www.libraryathena.com/">Library Athena</a> is a neat site where you can read well-typeset versions of public-domain books online.</p>
<p>Do you know a lot about China? No? Well you should probably know more, given how important China is and will continue to be in the future. This article gives insight into one of the key figures in modern China, <a href="https://www.spectator.co.uk/article/the-man-behind-xi-jinping">Wang Huning</a>, who has been the advisor to Jiang Zemin, Hu Jintao, and now Xi Jinping; that is every Chinese leader since Deng Xiaoping.</p>
<p>When I was younger, I was really into drawing technical pictures with code. Now I’m older, and I want everything to just be easy and visual. <a href="https://www.mathcha.io/">Mathcha</a> has a really cool approach to this.</p>
<p>If you’re a programmer, it’s worth at some point in your life learning one of the languages that Arthur Whitney has written. <a href="https://code.kx.com/q4m3/">Here’s</a> a indepth tutorial for Q, and the latest iteration is <a href="https://shakti.com/">Shakti</a>.</p>
<p>If you have been a programmer for a while, you should know that not only is javascript a… questionable… language, but also that web frameworks come and go in a blink, and keeping up with the whole business is a drag. For this reason, I’ve looked to compile-to-javascript languages for a while, and the one I’ve settled on is <a href="https://www.scala-js.org/">Scala.js</a>, with <a href="https://laminar.dev/">Laminar</a>. A bit unconventional and rough around the edges, but the community is very nice and overall it’s a very cool setup. Scala has been around for a long time now, and its support for javascript is the best of any language I’ve seen, making it really easy to work with javascript libraries without any wrappers, while still maintaining a statically-typed core.</p>
<p>That’s all for now!</p>
    </div>

    
    <a href="https://brid.gy/publish/twitter"></a>
    
    
</article>

<hr>

This website supports <emph>webmentions</emph>, a standard for collating reactions across many platforms. If you have a blog that supports sending webmentions and you put a link to this post, your blog post will show up as a response here.

You can also <a href="https://twitter.com/intent/tweet?text=https%3A%2F%2Fowenlynch.org%2Fposts%2F2022-04-01-april-link-day%2F">respond via twitter</a> or respond via mastodon (on your preferred mastodon server); through the magic of <a href="https://brid.gy">brid.gy</a> all tweets or toots with links to this post will show up below (subject to moderation).

<script src="../../static/webmention.min.js" async></script>

<div id="webmentions">div</div>

      </div>

      <hr />

      <div class="main">
        Site proudly generated by
        <a href="http://jaspervdj.be/hakyll">Hakyll</a>
        with stylistic inspiration from <a href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
      </div>
    </div>
  </body>
</html>
]]></description>
    <pubDate>Fri, 01 Apr 2022 00:00:00 UT</pubDate>
    <guid>https://owenlynch.org/posts/2022-04-01-april-link-day</guid>
    <dc:creator>Owen Lynch</dc:creator>
</item>
<item>
    <title>The Ultimate In Self Care: Learning from Marvel Villains</title>
    <link>https://owenlynch.org/posts/2021-10-18-villain-morning-routine</link>
    <description><![CDATA[<!doctype html>
<html lang="en">
  <head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>The Ultimate In Self Care: Learning from Marvel Villains | Owen Lynch</title>
  <style type="text/css">
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="../../css/default.css" />
  <link rel="stylesheet" href="../../css/syntax.css" />
  <link rel="authorization_endpoint" href="https://indieauth.com/auth" />
  <link rel="webmention" href="https://webmention.io/owenlynch.org/webmention" />
  <link rel="pingback" href="https://webmention.io/owenlynch.org/xmlrpc" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/contrib/auto-render.min.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
        inlineElements = document.getElementsByClassName('math inline');
        displayElements = document.getElementsByClassName('math display');
        for (i = 0; i < inlineElements.length; i++) {
            e = inlineElements[i]
            try {
                katex.render(e.innerHTML, e, { displayMode: false });
            } catch (error) {
                console.error(error);
            }
        }
        for (i = 0; i < displayElements.length; i++) {
            e = displayElements[i]
            try {
              katex.render(e.innerHTML, e, { displayMode: true });
            } catch (error) {
                console.error(error)
            }
        }
    });
  </script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.css" />
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->


  </head>
  <body>
    <div class="container">
      <div class="menu">
        <div class="mainbar-links">
          <h2><a href="../../">Home</a> <a href="../../blog">Blog</a> <a href="../../output">Output</a></h2>
        </div>
        <div class="social-icons">
          <a href="https://github.com/olynch" rel="me"><img src="../../static/github-square.svg" class="icon" /></a>
          <a href="https://twitter.com/u_map_prop" rel="me"><img src="../../static/twitter-square.svg" class="icon" /></a>
          <a href="https://mathstodon.xyz/web/@olynch" rel="me"><img src="../../static/mastodon.svg" class="icon" /></a>
          <a href="https://www.youtube.com/channel/UCy1qDmvpYPmsYaHe51UzwIA" rel="me"><img src="../../static/youtube.svg" class="icon" /></a>
          <a href="../../rss.xml"><img src="../../static/rss.svg" class="icon" /></a>
        </div>
      </div>

      <hr />

      <div class="content main article">
        
<article class="h-entry">
    <h1>The Ultimate In Self Care: Learning from Marvel Villains</h1>
    <div class="p-name" hidden>The Ultimate In Self Care: Learning from Marvel Villains</div>

    <div class="info">
        Posted on <time class="dt-published" datetime="October 18, 2021">October 18, 2021</time>
        by <a class="p-author h-card" href="https://owenlynch.org">Owen Lynch</a>
    </div>

    <div class="e-content">
    <p>I don’t even really remember watching “Daredevil” but one scene has stuck with me. The main villain in Daredevil, Wilson Fisk, is a powerful businessman and crime lord who tries to reshape Hell’s Kitchen to be a better place, but whose methods are violent.</p>
<p>He has a <a href="https://www.youtube.com/watch?v=DS4q5RPCBq0">very distinctive morning routine</a>, involving classical music, gourmet cooking, and a fabulous bath robe.</p>
<p>In the show, this is played as very sinister. But really what it signifies is that this man is totally in control of his life, and he starts every day with purpose and focus. I think in media we are supposed to identify with the people who don’t have their life together, who have conflicted souls, who listen to normal-people music and not Bach. Me personally though? I’d rather wake up like a villain.</p>
    </div>

    
    <a href="https://brid.gy/publish/twitter"></a>
    
    
</article>

<hr>

This website supports <emph>webmentions</emph>, a standard for collating reactions across many platforms. If you have a blog that supports sending webmentions and you put a link to this post, your blog post will show up as a response here.

You can also <a href="https://twitter.com/intent/tweet?text=https%3A%2F%2Fowenlynch.org%2Fposts%2F2021-10-18-villain-morning-routine%2F">respond via twitter</a> or respond via mastodon (on your preferred mastodon server); through the magic of <a href="https://brid.gy">brid.gy</a> all tweets or toots with links to this post will show up below (subject to moderation).

<script src="../../static/webmention.min.js" async></script>

<div id="webmentions">div</div>

      </div>

      <hr />

      <div class="main">
        Site proudly generated by
        <a href="http://jaspervdj.be/hakyll">Hakyll</a>
        with stylistic inspiration from <a href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
      </div>
    </div>
  </body>
</html>
]]></description>
    <pubDate>Mon, 18 Oct 2021 00:00:00 UT</pubDate>
    <guid>https://owenlynch.org/posts/2021-10-18-villain-morning-routine</guid>
    <dc:creator>Owen Lynch</dc:creator>
</item>
<item>
    <title>The Questioner Ep. 4</title>
    <link>https://owenlynch.org/posts/2021-10-03-questioner-ep4</link>
    <description><![CDATA[<!doctype html>
<html lang="en">
  <head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>The Questioner Ep. 4 | Owen Lynch</title>
  <style type="text/css">
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="../../css/default.css" />
  <link rel="stylesheet" href="../../css/syntax.css" />
  <link rel="authorization_endpoint" href="https://indieauth.com/auth" />
  <link rel="webmention" href="https://webmention.io/owenlynch.org/webmention" />
  <link rel="pingback" href="https://webmention.io/owenlynch.org/xmlrpc" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/contrib/auto-render.min.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
        inlineElements = document.getElementsByClassName('math inline');
        displayElements = document.getElementsByClassName('math display');
        for (i = 0; i < inlineElements.length; i++) {
            e = inlineElements[i]
            try {
                katex.render(e.innerHTML, e, { displayMode: false });
            } catch (error) {
                console.error(error);
            }
        }
        for (i = 0; i < displayElements.length; i++) {
            e = displayElements[i]
            try {
              katex.render(e.innerHTML, e, { displayMode: true });
            } catch (error) {
                console.error(error)
            }
        }
    });
  </script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.css" />
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->


  </head>
  <body>
    <div class="container">
      <div class="menu">
        <div class="mainbar-links">
          <h2><a href="../../">Home</a> <a href="../../blog">Blog</a> <a href="../../output">Output</a></h2>
        </div>
        <div class="social-icons">
          <a href="https://github.com/olynch" rel="me"><img src="../../static/github-square.svg" class="icon" /></a>
          <a href="https://twitter.com/u_map_prop" rel="me"><img src="../../static/twitter-square.svg" class="icon" /></a>
          <a href="https://mathstodon.xyz/web/@olynch" rel="me"><img src="../../static/mastodon.svg" class="icon" /></a>
          <a href="https://www.youtube.com/channel/UCy1qDmvpYPmsYaHe51UzwIA" rel="me"><img src="../../static/youtube.svg" class="icon" /></a>
          <a href="../../rss.xml"><img src="../../static/rss.svg" class="icon" /></a>
        </div>
      </div>

      <hr />

      <div class="content main article">
        
<article class="h-entry">
    <h1>The Questioner Ep. 4</h1>
    <div class="p-name" hidden>The Questioner Ep. 4</div>

    <div class="info">
        Posted on <time class="dt-published" datetime="October  3, 2021">October  3, 2021</time>
        by <a class="p-author h-card" href="https://owenlynch.org">Owen Lynch</a>
    </div>

    <div class="e-content">
    <p>The <a href="https://www.youtube.com/watch?v=yW4L2P3LDcM&amp;t=112s">fourth episode</a> of The Questioner, the podcast where misunderstandings are diagnosed and fixed in real time, has been released. I try to explain the combinatorial foundations of Shannon entropy to a chemist.</p>
    </div>

    
    <a href="https://brid.gy/publish/twitter"></a>
    
    
</article>

<hr>

This website supports <emph>webmentions</emph>, a standard for collating reactions across many platforms. If you have a blog that supports sending webmentions and you put a link to this post, your blog post will show up as a response here.

You can also <a href="https://twitter.com/intent/tweet?text=https%3A%2F%2Fowenlynch.org%2Fposts%2F2021-10-03-questioner-ep4%2F">respond via twitter</a> or respond via mastodon (on your preferred mastodon server); through the magic of <a href="https://brid.gy">brid.gy</a> all tweets or toots with links to this post will show up below (subject to moderation).

<script src="../../static/webmention.min.js" async></script>

<div id="webmentions">div</div>

      </div>

      <hr />

      <div class="main">
        Site proudly generated by
        <a href="http://jaspervdj.be/hakyll">Hakyll</a>
        with stylistic inspiration from <a href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
      </div>
    </div>
  </body>
</html>
]]></description>
    <pubDate>Sun, 03 Oct 2021 00:00:00 UT</pubDate>
    <guid>https://owenlynch.org/posts/2021-10-03-questioner-ep4</guid>
    <dc:creator>Owen Lynch</dc:creator>
</item>
<item>
    <title>Term Rewriting with (2,1)-Lawvere Theories</title>
    <link>https://owenlynch.org/posts/2021-09-17-categorical-term-rewriting</link>
    <description><![CDATA[<!doctype html>
<html lang="en">
  <head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>Term Rewriting with (2,1)-Lawvere Theories | Owen Lynch</title>
  <style type="text/css">
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="../../css/default.css" />
  <link rel="stylesheet" href="../../css/syntax.css" />
  <link rel="authorization_endpoint" href="https://indieauth.com/auth" />
  <link rel="webmention" href="https://webmention.io/owenlynch.org/webmention" />
  <link rel="pingback" href="https://webmention.io/owenlynch.org/xmlrpc" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/contrib/auto-render.min.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
        inlineElements = document.getElementsByClassName('math inline');
        displayElements = document.getElementsByClassName('math display');
        for (i = 0; i < inlineElements.length; i++) {
            e = inlineElements[i]
            try {
                katex.render(e.innerHTML, e, { displayMode: false });
            } catch (error) {
                console.error(error);
            }
        }
        for (i = 0; i < displayElements.length; i++) {
            e = displayElements[i]
            try {
              katex.render(e.innerHTML, e, { displayMode: true });
            } catch (error) {
                console.error(error)
            }
        }
    });
  </script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.css" />
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->


  </head>
  <body>
    <div class="container">
      <div class="menu">
        <div class="mainbar-links">
          <h2><a href="../../">Home</a> <a href="../../blog">Blog</a> <a href="../../output">Output</a></h2>
        </div>
        <div class="social-icons">
          <a href="https://github.com/olynch" rel="me"><img src="../../static/github-square.svg" class="icon" /></a>
          <a href="https://twitter.com/u_map_prop" rel="me"><img src="../../static/twitter-square.svg" class="icon" /></a>
          <a href="https://mathstodon.xyz/web/@olynch" rel="me"><img src="../../static/mastodon.svg" class="icon" /></a>
          <a href="https://www.youtube.com/channel/UCy1qDmvpYPmsYaHe51UzwIA" rel="me"><img src="../../static/youtube.svg" class="icon" /></a>
          <a href="../../rss.xml"><img src="../../static/rss.svg" class="icon" /></a>
        </div>
      </div>

      <hr />

      <div class="content main article">
        
<article class="h-entry">
    <h1>Term Rewriting with (2,1)-Lawvere Theories</h1>
    <div class="p-name" hidden>Term Rewriting with (2,1)-Lawvere Theories</div>

    <div class="info">
        Posted on <time class="dt-published" datetime="September 17, 2021">September 17, 2021</time>
        by <a class="p-author h-card" href="https://owenlynch.org">Owen Lynch</a>
    </div>

    <div class="e-content">
    <h2 id="introduction">Introduction</h2>
<p>The purpose of this blog post is to share with the world some thoughts I’ve been having about term rewriting systems in the context of a categorical computer algebra.</p>
<p>Evan Patterson and I are thinking about rewriting the core machinery of Catlab to take more seriously the categorical perspective on algebra. The core machinery of Catlab is data structures and functions for manipulating Generalized Algebraic Theories. As one might guess, these are are more general version of algebraic theories. Thus, as a warm up for doing this refactor, I have been thinking about regular old algebraic theories in a categorical/computer algebra context.</p>
<p>Specifically, there are three viewpoints that I am trying to “take seriously”, in the hope that they will lead to a more general and elegant view of computer algebra.</p>
<ol type="1">
<li>The central object of study should be the category where the objects are “contexts”. We will get to exactly what the morphisms in this category are later.</li>
<li>Term rewriting and equational reasoning is a 2-categorical groupoidal structure on the previous category.</li>
<li>It is important to understand precisely what a presentation is, and how the terms in that presentation are built.</li>
</ol>
<p>I will be illustrating my ideas with snippets of Julia code.</p>
<p>Note: this post will not be particularly friendly to those without much of a background in category theory. I apologize for this, I wrote this blog post in a short period of time and don’t really want to spend more time in writing more background.</p>
<h2 id="lawvere-theories">Lawvere Theories</h2>
<p>The framework that I am working in mostly derives from the idea of a Lawvere theory, so we are going to briefly review that first. To be clear, this is a review that will get you and me on the same page for terminology, not a review that will give you an intuition for Lawvere theories if you haven’t seen them before. If you haven’t seen Lawvere theories before, I suggest taking a slow perusal through <a href="http://www.tac.mta.ca/tac/reprints/articles/5/tr5.pdf">Lawvere’s PhD thesis</a>; it’s always worth reading Lawvere because you will learn more than you expected!</p>
<div class="rmenv" title="Definition">
<p>A <a href="https://ncatlab.org/nlab/show/Lawvere+theory"><strong>Lawvere theory</strong></a> is a category <span class="math inline">T</span> whose objects are canonically generated as finite products of a generating set <span class="math inline">\Lambda</span> of <strong>sorts</strong>. That is, every single object is canonically a product <span class="math inline">\prod_{i=1}^{n} S_{i}</span> for <span class="math inline">S_{i} \in \Lambda</span>.</p>
<p>An “evil” way to put this is that there is a functor <span class="math inline">(\mathsf{FinSet}/\Lambda)^{\mathrm{op}} \to T</span> that is the identity on objects.</p>
</div>
<p>Note that we have linked the n-Lab page for “single-sorted” Lawvere theories, whereas we in this blog post will always be talking about “multi-sorted” Lawvere theories.</p>
<p>Now, this seems like a fairly abstruse definition; it is unclear exactly what this has to do with algebra. The real meat of Lawvere theories comes from how to define them in terms of presentations. A presentation consists of <em>generators</em> and <em>relations</em>, and the generator part of the presentation is called a <em>signature</em>.</p>
<h3 id="signatures">Signatures</h3>
<div class="rmenv" title="Definition">
<p>A <strong>signature</strong> <span class="math inline">\Sigma</span> of a Lawvere theory is inductively defined in the following way.</p>
<ol type="1">
<li>A set <span class="math inline">\Lambda</span> of <em>sorts</em></li>
<li>A set <span class="math inline">\Omega</span> of operations. Each operation <span class="math inline">w \in \Omega</span> has an <em>arity</em> <span class="math inline">i(w)</span>, which is an element of <span class="math inline">\Lambda^{\ast}</span>, (the set of strings with characters drawn from <span class="math inline">\Lambda</span>), and a <em>return type</em> <span class="math inline">o(w) \in \Lambda</span>.</li>
</ol>
</div>
<div class="rmenv" title="Example">
<p>The signature for the theory of groups has one sort, <span class="math inline">X</span>, and three operations:</p>
<ul>
<li><span class="math inline">e \colon[] \to X</span> (identity)</li>
<li><span class="math inline">i \colon[X] \to X</span> (inverse)</li>
<li><span class="math inline">m \colon[X,X] \to X</span> (multiplication)</li>
</ul>
</div>
<p>Given a signature <span class="math inline">\Sigma = (\Lambda, \Omega)</span>, a context is simply a labeled set <span class="math inline">(\Gamma, \mathrm{ty}) \in \mathsf{FinSet}/ \Lambda</span>. In a context <span class="math inline">(\Gamma, \mathrm{ty})</span>, we can define the set <em>terms of sort <span class="math inline">S</span></em>, <span class="math inline">\mathrm{Term}_{S}(\Gamma, \mathrm{ty})</span>, in the following way, for <span class="math inline">S \in \Lambda</span></p>
<ul>
<li>For <span class="math inline">i \in \Gamma</span> with <span class="math inline">\mathrm{ty}(i) = S</span>, <span class="math inline">\mathrm{var}(i) \in \mathrm{Term}_{S}(\Gamma, \mathrm{ty})</span></li>
<li>For <span class="math inline">w \in \Omega</span> with <span class="math inline">o(w) = S</span>, and <span class="math inline">t_{1},\ldots,t_{n}</span> such that <span class="math inline">t_{j} \in \mathrm{Term}_{i(w)_{j}}(\Gamma, \mathrm{ty})</span>, <span class="math inline">\mathrm{appl}(w, [t_{1},\ldots,t_{n}]) \in \mathrm{Term}_{S}(\Gamma, \mathrm{ty})</span>.</li>
</ul>
<p>For those in computer science, you should recognize this as an abstract syntax tree where the leaf nodes are either arity-0 operations or variables in the context.</p>
<p>We can implement this in Julia with the following data structures. Note that we use an “unlabeled” implementation.</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true"></a><span class="kw">using</span> MLStyle</span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true"></a></span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true"></a><span class="kw">struct</span> Operation</span>
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true"></a>  arity<span class="op">::</span><span class="dt">Vector</span>{<span class="dt">Int</span>}</span>
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true"></a>  ret<span class="op">::</span><span class="dt">Int</span></span>
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true"></a><span class="kw">end</span></span>
<span id="cb1-7"><a href="#cb1-7" aria-hidden="true"></a></span>
<span id="cb1-8"><a href="#cb1-8" aria-hidden="true"></a><span class="kw">struct</span> Signature</span>
<span id="cb1-9"><a href="#cb1-9" aria-hidden="true"></a>  <span class="co"># representing the set {1,...,sorts}</span></span>
<span id="cb1-10"><a href="#cb1-10" aria-hidden="true"></a>  sorts<span class="op">::</span><span class="dt">Int</span> </span>
<span id="cb1-11"><a href="#cb1-11" aria-hidden="true"></a>  operations<span class="op">::</span><span class="dt">Vector</span>{Operation}</span>
<span id="cb1-12"><a href="#cb1-12" aria-hidden="true"></a><span class="kw">end</span></span>
<span id="cb1-13"><a href="#cb1-13" aria-hidden="true"></a></span>
<span id="cb1-14"><a href="#cb1-14" aria-hidden="true"></a><span class="pp">@data</span> Term <span class="kw">begin</span></span>
<span id="cb1-15"><a href="#cb1-15" aria-hidden="true"></a>  Var(i<span class="op">::</span><span class="dt">Int</span>)</span>
<span id="cb1-16"><a href="#cb1-16" aria-hidden="true"></a>  Appl(op<span class="op">::</span><span class="dt">Int</span><span class="op">,</span> args<span class="op">::</span><span class="dt">Vector</span>{Term})</span>
<span id="cb1-17"><a href="#cb1-17" aria-hidden="true"></a><span class="kw">end</span></span>
<span id="cb1-18"><a href="#cb1-18" aria-hidden="true"></a></span>
<span id="cb1-19"><a href="#cb1-19" aria-hidden="true"></a><span class="kw">struct</span> Context</span>
<span id="cb1-20"><a href="#cb1-20" aria-hidden="true"></a>  vartypes<span class="op">::</span><span class="dt">Vector</span>{<span class="dt">Int</span>}</span>
<span id="cb1-21"><a href="#cb1-21" aria-hidden="true"></a><span class="kw">end</span></span>
<span id="cb1-22"><a href="#cb1-22" aria-hidden="true"></a></span>
<span id="cb1-23"><a href="#cb1-23" aria-hidden="true"></a><span class="kw">function</span> check_sort(s<span class="op">::</span>Signature<span class="op">,</span> c<span class="op">::</span>Context<span class="op">,</span> t<span class="op">::</span>Term)</span>
<span id="cb1-24"><a href="#cb1-24" aria-hidden="true"></a>  <span class="pp">@match</span> t <span class="kw">begin</span></span>
<span id="cb1-25"><a href="#cb1-25" aria-hidden="true"></a>    Var(i) <span class="op">=&gt;</span> c.vartypes[i]</span>
<span id="cb1-26"><a href="#cb1-26" aria-hidden="true"></a>    Appl(op<span class="op">,</span> args) <span class="op">=&gt;</span> <span class="kw">begin</span></span>
<span id="cb1-27"><a href="#cb1-27" aria-hidden="true"></a>      ts <span class="op">=</span> map(arg <span class="op">-&gt;</span> check_sort(s<span class="op">,</span>c<span class="op">,</span>arg)<span class="op">,</span> args)</span>
<span id="cb1-28"><a href="#cb1-28" aria-hidden="true"></a>      <span class="pp">@assert</span> ts <span class="op">==</span> s.operations[op].arity</span>
<span id="cb1-29"><a href="#cb1-29" aria-hidden="true"></a>      s.operations[op].ret</span>
<span id="cb1-30"><a href="#cb1-30" aria-hidden="true"></a>    <span class="kw">end</span></span>
<span id="cb1-31"><a href="#cb1-31" aria-hidden="true"></a>  <span class="kw">end</span></span>
<span id="cb1-32"><a href="#cb1-32" aria-hidden="true"></a><span class="kw">end</span></span></code></pre></div>
<p>Having introduced this clean “unlabeled” format, we will immediately revert back to using a more conventional notation for actual examples, which can in theory be parsed back into this unlabeled format.</p>
<p>Now, the categorical perspective is always looking for morphisms, and it turns out there is a very natural definition for a morphism between two contexts.</p>
<div class="rmenv" title="Definition">
<p>Given two contexts <span class="math inline">(\Gamma_{1}, \mathrm{ty}_{1})</span> and <span class="math inline">(\Gamma_{2}, \mathrm{ty}_{2})</span>, a morphism between them is an assignment of elements of <span class="math inline">\Gamma_{2}</span> to terms in <span class="math inline">(\Gamma_{1}, \mathrm{ty}_{1})</span> with the same type.</p>
<p>That is, <span class="math inline">f(i) \in \mathrm{Term}_{\mathrm{ty}_{2}(i)}(\Gamma_{1}, \mathrm{ty}_{1})</span> for <span class="math inline">i \in \Gamma_{2}</span>.</p>
</div>
<p>One can lift a morphism of contexts to apply to not just variables in the context but also terms, and the clearest way to show this is with code.</p>
<div class="sourceCode" id="cb2"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true"></a><span class="kw">struct</span> ContextMorphism</span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true"></a>  dom<span class="op">::</span>Context</span>
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true"></a>  codom<span class="op">::</span>Context</span>
<span id="cb2-4"><a href="#cb2-4" aria-hidden="true"></a></span>
<span id="cb2-5"><a href="#cb2-5" aria-hidden="true"></a>  <span class="co"># A term in the dom context for each variable in the codom context</span></span>
<span id="cb2-6"><a href="#cb2-6" aria-hidden="true"></a>  terms<span class="op">::</span><span class="dt">Vector</span>{Term}</span>
<span id="cb2-7"><a href="#cb2-7" aria-hidden="true"></a><span class="kw">end</span></span>
<span id="cb2-8"><a href="#cb2-8" aria-hidden="true"></a></span>
<span id="cb2-9"><a href="#cb2-9" aria-hidden="true"></a><span class="co"># t must be a term in the codomain context</span></span>
<span id="cb2-10"><a href="#cb2-10" aria-hidden="true"></a><span class="kw">function</span> (f<span class="op">::</span>ContextMorphism)(t<span class="op">::</span>Term)</span>
<span id="cb2-11"><a href="#cb2-11" aria-hidden="true"></a>  <span class="pp">@match</span> t <span class="kw">begin</span></span>
<span id="cb2-12"><a href="#cb2-12" aria-hidden="true"></a>    Var(i) <span class="op">=&gt;</span> f.terms[i]</span>
<span id="cb2-13"><a href="#cb2-13" aria-hidden="true"></a>    Appl(op<span class="op">,</span> args) <span class="op">=&gt;</span> Appl(op<span class="op">,</span> f.(args))</span>
<span id="cb2-14"><a href="#cb2-14" aria-hidden="true"></a>  <span class="kw">end</span></span>
<span id="cb2-15"><a href="#cb2-15" aria-hidden="true"></a><span class="kw">end</span></span></code></pre></div>
<p>This allows us to compose morphisms, again the easiest way to show this is also with code.</p>
<div class="sourceCode" id="cb3"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true"></a><span class="kw">function</span> compose(f<span class="op">::</span>ContextMorphism<span class="op">,</span> g<span class="op">::</span>ContextMorphism)</span>
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true"></a>  <span class="pp">@assert</span> f.codom <span class="op">==</span> g.dom</span>
<span id="cb3-3"><a href="#cb3-3" aria-hidden="true"></a>  ContextMorphism(f.dom<span class="op">,</span> g.codom<span class="op">,</span> f.(g.terms))</span>
<span id="cb3-4"><a href="#cb3-4" aria-hidden="true"></a><span class="kw">end</span></span></code></pre></div>
<div class="rmenv" title="Definition">
<p>Given a signature <span class="math inline">\Sigma</span>, let <span class="math inline">\mathrm{Ctx}(\Sigma)</span> be the category of contexts and context morphisms. It is easy to show that <span class="math inline">\mathrm{Ctx}(\Sigma)</span> is a Lawvere theory.</p>
</div>
<p>Note that by definition, <span class="math inline">\mathrm{Term}_{S}(\Gamma, \mathrm{ty}) = \mathrm{Ctx}(\Sigma)((\Gamma,\mathrm{ty}), S)</span> (where by abuse of notation, <span class="math inline">S</span> is the context with one variable of type <span class="math inline">S</span>). That is, the set of terms of sort <span class="math inline">S</span> in context <span class="math inline">(\Gamma, \mathrm{ty})</span> is precisely the morphisms from <span class="math inline">(\Gamma, \mathrm{ty})</span> to <span class="math inline">S</span> in the category of contexts.</p>
<h3 id="presentations">Presentations</h3>
<p>The last ingredient to a presentation is the collection of <em>equations</em>. An equation consists of a context, and then two terms in that context of the same sort.</p>
<div class="rmenv" title="Example">
<p>The equations for the theory of groups are</p>
<ul>
<li><span class="math inline">a:X, b:X, c:X \vdash m(a,m(b,c)) = m(m(a,b),c)</span> (associativity)</li>
<li><span class="math inline">a:X \vdash m(e, a) = a</span> (left identity)</li>
<li><span class="math inline">a:X \vdash m(a, e) = a</span> (right identity)</li>
<li><span class="math inline">a:X \vdash m(i(a), a) = e</span> (inverse)</li>
</ul>
</div>
<p>You can see that each equation has a context on the left, and then on the other side of the <span class="math inline">\vdash</span>, two terms separated by an equals sign.</p>
<p>Note that another way of looking at an equation in context <span class="math inline">(\Gamma, \mathrm{ty})</span> and of type <span class="math inline">S</span> is simply as a pair of morphisms from <span class="math inline">(\Gamma,\mathrm{ty})</span> to <span class="math inline">S</span>.</p>
<div class="rmenv" title="Definition">
<p>A presentation for a Lawvere theory consists of a signature <span class="math inline">(\Lambda, \Omega)</span> and a set <span class="math inline">\Xi</span> of equations in that signature.</p>
</div>
<div class="rmenv" title="Definition">
<p>Given a presentation <span class="math inline">(\Sigma, \Xi)</span>, we construct a Lawvere theory <span class="math inline">T</span> in the follow way. We start with the category <span class="math inline">\mathrm{Ctx}(\Sigma)</span>, and then we quotient out by the equations in <span class="math inline">\Xi</span> by identifying the morphisms corresponding to the left and right hand side of each equation.</p>
</div>
<p>Everything but that very last step is very amenable to computation. However, “quotienting out” is a problematic and undecidable operation. It is this that lead me to seek out whether a higher-categorical structure that didn’t impose such strict equality could be more amenable to computation.</p>
<h2 id="lawvere-theories-1">(2,1)-Lawvere Theories</h2>
<p>The essential idea of <span class="math inline">(2,1)</span>-Lawvere theories is to <em>not</em> quotient out by the equations in the presentation of a Lawvere theory, and instead keep track of equalities between terms as “proof objects”.</p>
<div class="rmenv" title="Definition">
<p>A <span class="math inline">(2,1)</span>-category is a 2-category where all of the 2-morphisms are invertible.</p>
</div>
<div class="rmenv" title="Definition">
<p>A <span class="math inline">(2,1)</span>-Lawvere theory is a (2,1)-category where every object is canonically a finite product of a fixed set of “sorts”.</p>
</div>
<div class="rmenv" title="Definition">
<p>A presentation for a <span class="math inline">(2,1)</span>-Lawvere theory is just the same as a presentation for a regular Lawvere theory</p>
</div>
<div class="rmenv" title="Definition">
<p>To construct a <span class="math inline">(2,1)</span>-Lawvere theory from a presentation <span class="math inline">(\Sigma, \Xi)</span>, we start with the 1-category <span class="math inline">\mathrm{Ctx}(\Sigma)</span> and freely add in 2-morphisms corresponding to each of the equations.</p>
</div>
<p>There is still a slight problem with this, because “freely adding in 2-morphisms” actually <em>does</em> still involve quotienting out (for instance, taking the inverse of a morphism twice should end up with the same morphism again, and much more complex identities as well). But from a computational standpoint, we may not care about equality of 2-morphisms, only their existence and validity. Thus we could simply say that any two 2-morphisms with the same domain and codomain are equal, trivially making equality decidable.</p>
<p>What we are more concerned about is exactly how to represent a general 2-morphism in this category. However, it turns out that this is not too hard. There are exactly 5 ways of producing a new 2-morphism.</p>
<ol type="1">
<li><p>Take a generating 2-morphism (i.e. one of the equations in the presentation)</p></li>
<li><p>Take the identity morphism on a 1-morphism</p></li>
<li><p>Invert an existing 2-morphism</p></li>
<li><p>Vertical composition of two existing 2-morphisms <!-- https://q.uiver.app/?q=WzAsMixbMCwwLCJcXGJ1bGxldCJdLFsyLDAsIlxcYnVsbGV0Il0sWzAsMSwiIiwwLHsiY3VydmUiOi0zfV0sWzAsMSwiIiwyLHsiY3VydmUiOjN9XSxbMCwxXSxbMiw0LCIiLDAseyJzaG9ydGVuIjp7InNvdXJjZSI6MjAsInRhcmdldCI6MjB9fV0sWzQsMywiIiwwLHsic2hvcnRlbiI6eyJzb3VyY2UiOjIwLCJ0YXJnZXQiOjIwfX1dXQ== --> <iframe class="quiver-embed" src="https://q.uiver.app/?q=WzAsMixbMCwwLCJcXGJ1bGxldCJdLFsyLDAsIlxcYnVsbGV0Il0sWzAsMSwiIiwwLHsiY3VydmUiOi0zfV0sWzAsMSwiIiwyLHsiY3VydmUiOjN9XSxbMCwxXSxbMiw0LCIiLDAseyJzaG9ydGVuIjp7InNvdXJjZSI6MjAsInRhcmdldCI6MjB9fV0sWzQsMywiIiwwLHsic2hvcnRlbiI6eyJzb3VyY2UiOjIwLCJ0YXJnZXQiOjIwfX1dXQ==&embed" width="432" height="176" style="border-radius: 8px; border: none;"></iframe></p></li>
<li><p>Horizontal composition of two existing 2-morphisms <!-- https://q.uiver.app/?q=WzAsMyxbMCwwLCJcXGJ1bGxldCJdLFsxLDAsIlxcYnVsbGV0Il0sWzIsMCwiXFxidWxsZXQiXSxbMCwxLCIiLDAseyJjdXJ2ZSI6LTF9XSxbMSwyLCIiLDAseyJjdXJ2ZSI6LTF9XSxbMCwxLCIiLDAseyJjdXJ2ZSI6MX1dLFsxLDIsIiIsMCx7ImN1cnZlIjoxfV0sWzMsNSwiIiwwLHsic2hvcnRlbiI6eyJzb3VyY2UiOjIwLCJ0YXJnZXQiOjIwfX1dLFs0LDYsIiIsMCx7InNob3J0ZW4iOnsic291cmNlIjoyMCwidGFyZ2V0IjoyMH19XV0= --> <iframe class="quiver-embed" src="https://q.uiver.app/?q=WzAsMyxbMCwwLCJcXGJ1bGxldCJdLFsxLDAsIlxcYnVsbGV0Il0sWzIsMCwiXFxidWxsZXQiXSxbMCwxLCIiLDAseyJjdXJ2ZSI6LTF9XSxbMSwyLCIiLDAseyJjdXJ2ZSI6LTF9XSxbMCwxLCIiLDAseyJjdXJ2ZSI6MX1dLFsxLDIsIiIsMCx7ImN1cnZlIjoxfV0sWzMsNSwiIiwwLHsic2hvcnRlbiI6eyJzb3VyY2UiOjIwLCJ0YXJnZXQiOjIwfX1dLFs0LDYsIiIsMCx7InNob3J0ZW4iOnsic291cmNlIjoyMCwidGFyZ2V0IjoyMH19XV0=&embed" width="432" height="176" style="border-radius: 8px; border: none;"></iframe></p></li>
</ol>
<p>Of these 5 ways, the last one is by <em>far</em> the most interesting. It generalizes two classic rules from term rewriting.</p>
<p>The first classic rule is “congruence”, which can be phrased as “substituting equal expressions in to the same expression yields equal expressions” (see: <a href="https://arxiv.org/abs/2101.02690">Theorem Proving and Algebra</a>). For instance, suppose we are in a theory with a single sort <span class="math inline">S</span> and an operation <span class="math inline">+ \colon[S,S] \to S</span>. Then suppose that in context <span class="math inline">\Gamma</span>, <span class="math inline">t_{1} = t_{1}\prime</span> and <span class="math inline">t_{2} = t_{2}\prime</span>. Congruence allows us to conclude that <span class="math inline">t_{1} + t_{2} = t_{1}\prime + t_{2}\prime</span>.</p>
<p>Categorically, this is the horizontal composition of an equality <span class="math inline">\langle t_{1},t_{2} \rangle = \langle t_{1}\prime, t_{2}\prime \rangle</span> with the identity on the map <span class="math inline">\langle x + y \rangle \colon[x:S,y:S] \to [t:S]</span>, which we can picture as follows. (We use <span class="math inline">\langle t_{1}, t_{2} \rangle</span> to refer to the map <span class="math inline">\Gamma \to [x:S, y:S]</span> that sends <span class="math inline">x</span> to <span class="math inline">t_{1}</span> and <span class="math inline">y</span> to <span class="math inline">t_{2}</span>)</p>
<!-- https://q.uiver.app/?q=WzAsMyxbMCwwLCJcXEdhbW1hIl0sWzIsMCwiW3g6Uyx5OlNdIl0sWzQsMCwiW3Q6U10iXSxbMSwyLCJcXGxhbmdsZSB4ICsgeSBcXHJhbmdsZSIsMCx7ImN1cnZlIjotMn1dLFsxLDIsIlxcbGFuZ2xlIHggKyB5IFxccmFuZ2xlIiwyLHsiY3VydmUiOjJ9XSxbMCwxLCJcXGxhbmdsZSB0XzEsIHRfMiBcXHJhbmdsZSIsMCx7ImN1cnZlIjotMn1dLFswLDEsIlxcbGFuZ2xlIHRfMV5cXHByaW1lLCB0XzJcXHByaW1lIFxccmFuZ2xlIiwyLHsiY3VydmUiOjJ9XSxbMyw0LCIiLDAseyJzaG9ydGVuIjp7InNvdXJjZSI6MjAsInRhcmdldCI6MjB9LCJzdHlsZSI6eyJoZWFkIjp7Im5hbWUiOiJub25lIn19fV0sWzUsNiwiIiwwLHsic2hvcnRlbiI6eyJzb3VyY2UiOjIwLCJ0YXJnZXQiOjIwfSwic3R5bGUiOnsiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dXQ== -->
<iframe class="quiver-embed" src="https://q.uiver.app/?q=WzAsMyxbMCwwLCJcXEdhbW1hIl0sWzIsMCwiW3g6Uyx5OlNdIl0sWzQsMCwiW3Q6U10iXSxbMSwyLCJcXGxhbmdsZSB4ICsgeSBcXHJhbmdsZSIsMCx7ImN1cnZlIjotMn1dLFsxLDIsIlxcbGFuZ2xlIHggKyB5IFxccmFuZ2xlIiwyLHsiY3VydmUiOjJ9XSxbMCwxLCJcXGxhbmdsZSB0XzEsIHRfMiBcXHJhbmdsZSIsMCx7ImN1cnZlIjotMn1dLFswLDEsIlxcbGFuZ2xlIHRfMV5cXHByaW1lLCB0XzJcXHByaW1lIFxccmFuZ2xlIiwyLHsiY3VydmUiOjJ9XSxbMyw0LCIiLDAseyJzaG9ydGVuIjp7InNvdXJjZSI6MjAsInRhcmdldCI6MjB9LCJzdHlsZSI6eyJoZWFkIjp7Im5hbWUiOiJub25lIn19fV0sWzUsNiwiIiwwLHsic2hvcnRlbiI6eyJzb3VyY2UiOjIwLCJ0YXJnZXQiOjIwfSwic3R5bGUiOnsiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dXQ==&amp;embed" width="797" height="176" style="border-radius: 8px; border: none;">
</iframe>
<p>The second classic rule is “substitutivity”. This says that if <span class="math inline">\phi(x_{1},\ldots,x_{n}) = \phi\prime(x_1,\ldots,x_n)</span>, where <span class="math inline">x_{1},\ldots,x_{n}</span> are variables, then we can substitute in any terms <span class="math inline">t_{1},\ldots,t_{n}</span> to get <span class="math inline">\phi(t_{1},\ldots,t_{n}) = \phi\prime(t_1,\ldots,t_n)</span>.</p>
<p>This is horizontal composition the other way!</p>
<!-- https://q.uiver.app/?q=WzAsMyxbMCwwLCJcXEdhbW1hIl0sWzIsMCwiW3hfMTpUXzEsXFxsZG90cyx4X246VF9uXSJdLFs0LDAsIlt5OlRdIl0sWzAsMSwiXFxsYW5nbGUgdF8xLFxcbGRvdHMsdF9uXFxyYW5nbGUiLDAseyJjdXJ2ZSI6LTJ9XSxbMCwxLCJcXGxhbmdsZSB0XzEsXFxsZG90cyx0X25cXHJhbmdsZSIsMix7ImN1cnZlIjoyfV0sWzEsMiwiXFxsYW5nbGUgXFxwaGkoeF8xLFxcbGRvdHMseF9uKSBcXHJhbmdsZSIsMCx7ImN1cnZlIjotMiwic3R5bGUiOnsiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dLFsxLDIsIlxcbGFuZ2xlIFxccGhpXFxwcmltZSh4XzEsXFxsZG90cyx4X24pIFxccmFuZ2xlIiwyLHsiY3VydmUiOjJ9XSxbMyw0LCIiLDAseyJzaG9ydGVuIjp7InNvdXJjZSI6MjAsInRhcmdldCI6MjB9LCJzdHlsZSI6eyJoZWFkIjp7Im5hbWUiOiJub25lIn19fV0sWzUsNiwiIiwwLHsic2hvcnRlbiI6eyJzb3VyY2UiOjIwLCJ0YXJnZXQiOjIwfSwic3R5bGUiOnsiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dXQ== -->
<iframe class="quiver-embed" src="https://q.uiver.app/?q=WzAsMyxbMCwwLCJcXEdhbW1hIl0sWzIsMCwiW3hfMTpUXzEsXFxsZG90cyx4X246VF9uXSJdLFs0LDAsIlt5OlRdIl0sWzAsMSwiXFxsYW5nbGUgdF8xLFxcbGRvdHMsdF9uXFxyYW5nbGUiLDAseyJjdXJ2ZSI6LTJ9XSxbMCwxLCJcXGxhbmdsZSB0XzEsXFxsZG90cyx0X25cXHJhbmdsZSIsMix7ImN1cnZlIjoyfV0sWzEsMiwiXFxsYW5nbGUgXFxwaGkoeF8xLFxcbGRvdHMseF9uKSBcXHJhbmdsZSIsMCx7ImN1cnZlIjotMiwic3R5bGUiOnsiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dLFsxLDIsIlxcbGFuZ2xlIFxccGhpXFxwcmltZSh4XzEsXFxsZG90cyx4X24pIFxccmFuZ2xlIiwyLHsiY3VydmUiOjJ9XSxbMyw0LCIiLDAseyJzaG9ydGVuIjp7InNvdXJjZSI6MjAsInRhcmdldCI6MjB9LCJzdHlsZSI6eyJoZWFkIjp7Im5hbWUiOiJub25lIn19fV0sWzUsNiwiIiwwLHsic2hvcnRlbiI6eyJzb3VyY2UiOjIwLCJ0YXJnZXQiOjIwfSwic3R5bGUiOnsiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dXQ==&amp;embed" width="911" height="176" style="border-radius: 8px; border: none;">
</iframe>
<p>The upshot of all of this is that we can store a “witness” for an equality proof with a faily simple recursive data structure based on these 5 ways of contructing an equality.</p>
<div class="sourceCode" id="cb4"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true"></a><span class="pp">@data</span> Equation <span class="kw">begin</span></span>
<span id="cb4-2"><a href="#cb4-2" aria-hidden="true"></a>  GeneratingEq(i<span class="op">::</span><span class="dt">Int</span>) <span class="co"># references an equation in the presentation</span></span>
<span id="cb4-3"><a href="#cb4-3" aria-hidden="true"></a>  Refl(f<span class="op">::</span>ContextMorphism) <span class="co"># reflexivity of equality</span></span>
<span id="cb4-4"><a href="#cb4-4" aria-hidden="true"></a>  Sym(<span class="cn">e</span><span class="op">::</span>Equation) <span class="co"># symmetry of equality</span></span>
<span id="cb4-5"><a href="#cb4-5" aria-hidden="true"></a>  VCompose(e1<span class="op">::</span>Equation<span class="op">,</span> e2<span class="op">::</span>Equation) <span class="co"># transitivity of equality</span></span>
<span id="cb4-6"><a href="#cb4-6" aria-hidden="true"></a>  HCompose(e1<span class="op">::</span>Equation<span class="op">,</span> e2<span class="op">::</span>Equation) <span class="co"># congruence and substitutivity</span></span>
<span id="cb4-7"><a href="#cb4-7" aria-hidden="true"></a><span class="kw">end</span></span></code></pre></div>
<p>Given an <code>Equation</code>, the procedure to check that it is valid is an straightforward recursive function, the implementation of which I leave to the reader.</p>
<h2 id="conclusion">Conclusion</h2>
<p>My idea here was to show that taking the categorical approach to algebra seriously would lead to an elegant structure for witnesses of rewrites, and I think I have succeeeded at this! However, what is still left to do is to figure out how to make this sort of thing smooth for the end-user, not just the implementor. My hope is that the elegance in the categorical structure will allow for a slick, general, and powerful user interface for term rewriting, but I haven’t figured out exactly how to do that yet.</p>
<p>As always, thoughts comments and questions are welcome, and instructions for how to leave these are down below.</p>
    </div>

    
    
</article>

<hr>

This website supports <emph>webmentions</emph>, a standard for collating reactions across many platforms. If you have a blog that supports sending webmentions and you put a link to this post, your blog post will show up as a response here.

You can also <a href="https://twitter.com/intent/tweet?text=https%3A%2F%2Fowenlynch.org%2Fposts%2F2021-09-17-categorical-term-rewriting%2F">respond via twitter</a> or respond via mastodon (on your preferred mastodon server); through the magic of <a href="https://brid.gy">brid.gy</a> all tweets or toots with links to this post will show up below (subject to moderation).

<script src="../../static/webmention.min.js" async></script>

<div id="webmentions">div</div>

      </div>

      <hr />

      <div class="main">
        Site proudly generated by
        <a href="http://jaspervdj.be/hakyll">Hakyll</a>
        with stylistic inspiration from <a href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
      </div>
    </div>
  </body>
</html>
]]></description>
    <pubDate>Fri, 17 Sep 2021 00:00:00 UT</pubDate>
    <guid>https://owenlynch.org/posts/2021-09-17-categorical-term-rewriting</guid>
    <dc:creator>Owen Lynch</dc:creator>
</item>
<item>
    <title>Legibility</title>
    <link>https://owenlynch.org/posts/2021-09-15-legibility</link>
    <description><![CDATA[<!doctype html>
<html lang="en">
  <head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>Legibility | Owen Lynch</title>
  <style type="text/css">
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="../../css/default.css" />
  <link rel="stylesheet" href="../../css/syntax.css" />
  <link rel="authorization_endpoint" href="https://indieauth.com/auth" />
  <link rel="webmention" href="https://webmention.io/owenlynch.org/webmention" />
  <link rel="pingback" href="https://webmention.io/owenlynch.org/xmlrpc" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/contrib/auto-render.min.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
        inlineElements = document.getElementsByClassName('math inline');
        displayElements = document.getElementsByClassName('math display');
        for (i = 0; i < inlineElements.length; i++) {
            e = inlineElements[i]
            try {
                katex.render(e.innerHTML, e, { displayMode: false });
            } catch (error) {
                console.error(error);
            }
        }
        for (i = 0; i < displayElements.length; i++) {
            e = displayElements[i]
            try {
              katex.render(e.innerHTML, e, { displayMode: true });
            } catch (error) {
                console.error(error)
            }
        }
    });
  </script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.css" />
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->


  </head>
  <body>
    <div class="container">
      <div class="menu">
        <div class="mainbar-links">
          <h2><a href="../../">Home</a> <a href="../../blog">Blog</a> <a href="../../output">Output</a></h2>
        </div>
        <div class="social-icons">
          <a href="https://github.com/olynch" rel="me"><img src="../../static/github-square.svg" class="icon" /></a>
          <a href="https://twitter.com/u_map_prop" rel="me"><img src="../../static/twitter-square.svg" class="icon" /></a>
          <a href="https://mathstodon.xyz/web/@olynch" rel="me"><img src="../../static/mastodon.svg" class="icon" /></a>
          <a href="https://www.youtube.com/channel/UCy1qDmvpYPmsYaHe51UzwIA" rel="me"><img src="../../static/youtube.svg" class="icon" /></a>
          <a href="../../rss.xml"><img src="../../static/rss.svg" class="icon" /></a>
        </div>
      </div>

      <hr />

      <div class="content main article">
        
<article class="h-entry">
    <h1>Legibility</h1>
    <div class="p-name" hidden>Legibility</div>

    <div class="info">
        Posted on <time class="dt-published" datetime="September 15, 2021">September 15, 2021</time>
        by <a class="p-author h-card" href="https://owenlynch.org">Owen Lynch</a>
    </div>

    <div class="e-content">
    <h2 id="legibility-in-cartoons">Legibility in Cartoons</h2>
<p>“Can’t Stop Conducting” is a classic Tom and Jerry cartoon where Tom is conducting an orchestra, and Jerry is trying to conduct along with him. Tom’s pride as a conductor will not allow this, and classic fights ensue.</p>
<p>I want you to watch this right now, and pay attention to how <em>legible</em> every single action in this sketch is. Almost every action has some sort of windup, and some sort of predictable consequence. The emotions of the characters are clearly expressed through their faces and body languages, and more than that, the motivations of the characters are clear from the beginning and consistent throughout. Tom wants to be the star of the show, and Jerry wants to be part of the show.</p>
<p>And most importantly, the action is totally in sync with the music, from the rhythm to the thematic content.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/zuws6RCkkoI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>
</iframe>
<p>I wish that people had made me pay attention to the concept of legibility earlier in my life. I used to think that creation was all about <em>creativity</em>; all about having <em>new</em> ideas that nobody else had ever had before and producing something wacky and original.</p>
<p>But look at that Tom and Jerry sketch. I think that the writers of that Tom and Jerry sketch were <em>very</em> creative; coming up with the action sequences and character motivations that fit perfectly with the music is not easy!</p>
<p>That being said, the sketch holds together because of so much that is very recognizable and predictable. The setting is a generic outdoor concert shell. The dress for both are classic orchestral tuxes. Tom’s mannerisms as a conductor are very familiar to anyone who has been in an orchestra, from the <a href="https://youtu.be/zuws6RCkkoI?t=187">little finger waggles</a> telling the violins to play lushly, to the <a href="https://youtu.be/zuws6RCkkoI?t=241">pushing hands</a>, telling the orchestra that even though this is an accelerando, they should speed up <em>gradually</em>. And in <a href="https://youtu.be/zuws6RCkkoI?t=225">one of my favorite moments</a>, the conductor <em>always</em> has a spare baton.</p>
<p>Even the end, where Tom keeps conducting, not noticing his surroundings while zooming down the highway, is consistent with the logic that has been set up <a href="https://youtu.be/zuws6RCkkoI?t=94">earlier in the sketch</a>, when Jerry doesn’t notice that he’s been flung across the stage, and keeps conducting, and even <a href="https://youtu.be/zuws6RCkkoI?t=58">at the very start</a>.</p>
<p>I sum this up by saying that the <em>legibility</em> of the sketch is the key to its humor. Each of the things that I mentioned contributes to legibility in some way:</p>
<ul>
<li>Synchronized music and action makes both the music and the action more legible</li>
<li>Stock images and gestures help the audience parse the scene into well-known chunks</li>
<li>Repetition of actions creates a consistent logic (even if the logic is not realistic)</li>
<li>Clear and simple motivations help the reader understand why things are happening</li>
</ul>
<p>In this blog post, I aim to investigate this concept of legibility further, and argue that understanding legibility is an important step for becoming a better creator. To this end, I will compare legibility as it applies in a couple domains, and draw some general conclusions for how to pursue legibility.</p>
<h2 id="use-of-language">Use of Language</h2>
<p>One of (in my opinion) the best writers of the decade has very kindly shared with us the <a href="https://slatestarcodex.com/2016/02/20/writing-advice/">secrets to his success</a>. In one of the sections he talks about the use of connecting words.</p>
<blockquote>
<p>I lampshade my flow of ideas with a lot of words like “Also”, “But”, “Nevertheless”, “Relatedly”, and “So” (when I’m feeling pretentious, also “Thus”). These are the words your eighth-grade English teacher told you never to start paragraphs with. Your eighth-grade English teacher was wrong. If you’re writing three paragraphs that are three different pieces of evidence for the same conclusion that you’re going to present afterwards, make damn sure your readers know this. It could be as simple as:</p>
<blockquote>
<p>It’s pretty obvious that X is true, <u>and</u> we have lots of converging lines of evidence for this. <u>Some of the best evidence</u> comes from the field of augury. For example:</p>
<p><u>First</u>, A</p>
<p><u>Second</u>, B</p>
<p><u>Third</u>, C</p>
<p><u>Now</u>, some people say that not-A, but that’s totally wrong. It only looks like not-A, <u>because</u> P. <u>Likewise</u>, <u>although</u> Q might make it look like not-B, Q can’t be trusted for several other reasons, <u>for example</u> R. And not-C is too silly to even think about. <u>So</u> <u>despite</u> the objections you always hear, the augurical evidence for X is strong.</p>
<p><u>Even more</u> evidence comes from the field of haruspicy. <u>All</u> four major haruspical schools hold X as a major principle. School 1 says X because of D. School 2 says X because of E. School 3 says X because of F. <u>And</u> school 4 says X because of G. <u>So although</u> augury and haruspicy disagree on a lot, on the subject of X they are in complete accord.</p>
</blockquote>
<p>Notice the underlined words holding up the structure of the argument. Not only is the argument nice and tight, but the role of each part in the whole is telegraphed beforehand. For example, the “now” that comes just after C is saying something like “Take a step back, I’m about to tell you something that might otherwise be controversial, but listen to what I have to say”. And the “likewise” just after P means something like “We just got down talking about not-A because P, here’s another argument with about the same structure”. Before any of the facts are inserted, you already know where they fit into the structure. And you’re able to abstract from the micro-level and get the bigger picture of some fact which is supported by both augury and haruspicy, which was the main point of the argument.</p>
</blockquote>
<p>Essentially, these “lampshading” words work to make the flow of ideas <em>legible</em>. I think of lampshading words like the “wind-up” to every action in the Tom and Jerry cartoon.</p>
<p>For instance, consider the classic <a href="https://youtu.be/zuws6RCkkoI?t=48">“run wind-up”</a>. You know that Jerry is about to zip across the screen, and also it’s clear that Jerry feels like he’s late to something and is rushing to catch up, just like when Scott says “Even more”, you know that he’s about to list some more evidence that’s in agreement with the previous paragraph.</p>
<p>I could spend pages talking about other structures in writing that increase legibility, but this post isn’t about how to effectively use legibility in every single domain, it’s about noticing common threads across domains.</p>
<h2 id="music-theory">Music Theory</h2>
<p>One of my biggest complaints when I was learning music theory was always that music theory seemed to always be teaching you about <em>how</em> a piece was put together, and never why.</p>
<p>But now I understand more about exactly what the point of music theory is. By identifying structures common among music in a given style, one can understand how to effectively use musical cliches to convey a certain tone. For instance, the James Bond theme famously ends with a minor major seventh chord (see: <a href="https://youtu.be/U9FzgsF2T-s?t=160">James Bond</a>, <a href="https://www.youtube.com/watch?v=IGfipzDfkb8">explanation</a>). From that cultural association, you can bring out a certain spy-like feel in something that you are writing by using a minor-major seventh. This is only partly because of the intrinsic sound of the minor-major seventh; audiences have an association with the minor-major seventh that is purely cultural (even if they might not realize it).</p>
<p>Another example of legibility in music theory is the ballet Petrushka, by Stravinsky. If you just listen to the music of Petrushka, it makes very little sense. But when you see it <a href="https://www.youtube.com/watch?v=XvXlFKvpoOg">actually staged</a>, the movements of the dancers make it (more) clear what’s going on in the music. <a href="https://youtu.be/XvXlFKvpoOg?t=149">One part</a> of the music that can be particularly confusing to listen to in the introduction is when there are two themes playing at once. When you see the ballet you see that this is because there are two competing music box ladies. Understanding the (vaguely specified) plot of the ballet brings a narrative structure to the music that makes it more legible.</p>
<p>The key is that even though Petrushka doesn’t have a traditional classical structure like a Mozart piece, it holds together and makes sense through the narrative structure, and the use of repetitive and recognizable themes for different characters. If Petrushka simply broke classical rules without having some substitute for creating legibility, it would not be successful at all.</p>
<p>I think that this is a general principle for new art. You can break as many rules as you like, as long as you come up with new rules to replace them, and continue to keep your art very legible.</p>
<h2 id="design">Design</h2>
<p>I hope at this point I’ve conveyed why I think legibility is important, but for the sake of repetition (a key part of legibility), I’m going to give another example.</p>
<p>Taking legibility literally, it is most directly applicable in graphic design. You can see this in Matthew Butterick’s <a href="https://practicaltypography.com/">Practical Typography</a>. First of all, as an object of graphic design, the design of that webpage is totally clean. Immediately you can see what is going on: it’s a book and this is the table of contents. There is also a tasteful grid structure that more efficiently uses the space of the table of contents.</p>
<p>But secondly, the book starts by talking about why “the programmer, the scientist, the lawyer” should care about typography.</p>
<blockquote>
<p>I’m not here to tell you that typography is more important than the substance of your writing. It’s not.</p>
<p>But typography can enhance your writing. Typography can create a better first impression. Typography can reinforce your key points. Typography can extend reader attention. When you ignore typography, you’re ignoring an opportunity to improve the effectiveness of your writing.</p>
<p>And isn’t that why you write at all? To have an effect on readers? To move them, to persuade them, to spur them to action?</p>
</blockquote>
<p>I think that if you replaced every instance of “typography” in that block quote with “legibility”, each point would still hold.</p>
<h2 id="legibility-more-generally">Legibility More Generally</h2>
<p>At this point, I have finished making my main argument about the importance of legibility in creative arts. So now I’m going to make some unwarranted speculations on legibility outside of art, and also on mathematical interpretation of legibility.</p>
<p>In James C Scott’s book <a href="https://yalebooks.yale.edu/book/9780300078152/seeing-state">Seeing Like a State</a> (<a href="https://slatestarcodex.com/2017/03/16/book-review-seeing-like-a-state/">book review/summary</a>), a central theme is that the legibility of a society is key to the ability of the state to govern that society.</p>
<p>For example, in medieval France, where most men had one of six first names and no last names, it was very hard for tax collectors to figure out who had paid taxes. For people in the village, they could differentiate “Jaque the smith” and “Jaque who lives under the hill” and “Jaque the baker”, but these sort of loose names were impossible to keep track of for the state, which needed identifiers that were valid in a larger scope. Last names were invented to make the population more legibile to the state, and this in turn enabled the state to tax more efficiently.</p>
<p>This sort of thing appears all throughout the book. However, I’m not going to try and analyze it at the moment; I am just bringing up an interesting connection.</p>
<p>Finally, I have a sneaking suspicion that legibility has something to do with information theory. In art, legibility often comes down to repetition and the use of tropes. I feel like this should have something to do with the efficiency of encoding schemes, and making the informational content of a piece clearly and redundantly expressed in an encoding scheme that is easy on the brain. But again, I’m just bringing this up as a connection; to probe this more thoroughly is a whole line of research!</p>
<p>And that’s all for now! Tweet at me or blog at me with any comments (instructions down below).</p>
    </div>

    
    <a href="https://brid.gy/publish/twitter"></a>
    
    
</article>

<hr>

This website supports <emph>webmentions</emph>, a standard for collating reactions across many platforms. If you have a blog that supports sending webmentions and you put a link to this post, your blog post will show up as a response here.

You can also <a href="https://twitter.com/intent/tweet?text=https%3A%2F%2Fowenlynch.org%2Fposts%2F2021-09-15-legibility%2F">respond via twitter</a> or respond via mastodon (on your preferred mastodon server); through the magic of <a href="https://brid.gy">brid.gy</a> all tweets or toots with links to this post will show up below (subject to moderation).

<script src="../../static/webmention.min.js" async></script>

<div id="webmentions">div</div>

      </div>

      <hr />

      <div class="main">
        Site proudly generated by
        <a href="http://jaspervdj.be/hakyll">Hakyll</a>
        with stylistic inspiration from <a href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
      </div>
    </div>
  </body>
</html>
]]></description>
    <pubDate>Wed, 15 Sep 2021 00:00:00 UT</pubDate>
    <guid>https://owenlynch.org/posts/2021-09-15-legibility</guid>
    <dc:creator>Owen Lynch</dc:creator>
</item>
<item>
    <title>Book Review: Capital as Power</title>
    <link>https://owenlynch.org/posts/2021-09-13-capital-as-power-book-review</link>
    <description><![CDATA[<!doctype html>
<html lang="en">
  <head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>Book Review: Capital as Power | Owen Lynch</title>
  <style type="text/css">
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="../../css/default.css" />
  <link rel="stylesheet" href="../../css/syntax.css" />
  <link rel="authorization_endpoint" href="https://indieauth.com/auth" />
  <link rel="webmention" href="https://webmention.io/owenlynch.org/webmention" />
  <link rel="pingback" href="https://webmention.io/owenlynch.org/xmlrpc" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/contrib/auto-render.min.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
        inlineElements = document.getElementsByClassName('math inline');
        displayElements = document.getElementsByClassName('math display');
        for (i = 0; i < inlineElements.length; i++) {
            e = inlineElements[i]
            try {
                katex.render(e.innerHTML, e, { displayMode: false });
            } catch (error) {
                console.error(error);
            }
        }
        for (i = 0; i < displayElements.length; i++) {
            e = displayElements[i]
            try {
              katex.render(e.innerHTML, e, { displayMode: true });
            } catch (error) {
                console.error(error)
            }
        }
    });
  </script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.css" />
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->


  </head>
  <body>
    <div class="container">
      <div class="menu">
        <div class="mainbar-links">
          <h2><a href="../../">Home</a> <a href="../../blog">Blog</a> <a href="../../output">Output</a></h2>
        </div>
        <div class="social-icons">
          <a href="https://github.com/olynch" rel="me"><img src="../../static/github-square.svg" class="icon" /></a>
          <a href="https://twitter.com/u_map_prop" rel="me"><img src="../../static/twitter-square.svg" class="icon" /></a>
          <a href="https://mathstodon.xyz/web/@olynch" rel="me"><img src="../../static/mastodon.svg" class="icon" /></a>
          <a href="https://www.youtube.com/channel/UCy1qDmvpYPmsYaHe51UzwIA" rel="me"><img src="../../static/youtube.svg" class="icon" /></a>
          <a href="../../rss.xml"><img src="../../static/rss.svg" class="icon" /></a>
        </div>
      </div>

      <hr />

      <div class="content main article">
        
<article class="h-entry">
    <h1>Book Review: Capital as Power</h1>
    <div class="p-name" hidden>Book Review: Capital as Power</div>

    <div class="info">
        Posted on <time class="dt-published" datetime="September 13, 2021">September 13, 2021</time>
        by <a class="p-author h-card" href="https://owenlynch.org">Owen Lynch</a>
    </div>

    <div class="e-content">
    <p>Note: This was originally submitted to the astralcodexten book review contest, but did not win.</p>
<p>Note 2: <a href="https://sophiegalowitz.com">Sophie Galowitz</a> did the lovely illustrations for this blog post.</p>
<h2 id="part-a-overview">Part A: Overview</h2>
<h3 id="a-need-for-better-theory">1. A Need for Better Theory</h3>
<p>If you are a well-educated person in the 21st century, you probably have conflicted views. On the one hand, the grand socialist project has had… problems… over the last century. Serious problems. Problems that kill and hurt people, and are really, really non-dismissable. For a bibliography, check <a href="https://www.independent.org/issues/article.asp?id=13056">here</a>.</p>
<p>On the other hand, the (main) alternative is capitalism. And that also sucks. A lot. If you haven’t noticed this, you haven’t been paying attention.</p>
<p><em><a href="http://bnarchives.yorku.ca/259/">Capital as Power</a></em> by Bichler and Nitzan does not even attempt to talk about an alternative system of government. However, it argues that a necessary precondition for radical system change is a new theory of economics. In their words:</p>
<blockquote>
<p>Perhaps the key problem facing young people today is a lack of theoretical alternatives. A new social reality presupposes and implies a new social cosmology. To change the capitalist world, one first needs to re-conceive it; and that re-conception means new ways of thinking, new categories and new measurements.</p>
</blockquote>
<p>The purpose of Capital as Power is to provide such a theoretical alternative. However such a thing is easier said than done. To start with, it is necessary to give a thorough examination of past attempts to put economics on sound theoretical feet.</p>
<figure>
<img src="images/sound_theoretical_feet.png" alt="Sound Theoretical Feet">
<figcaption>
Sound Theoretical Feet
</figcaption>
</figure>
<p>Bichler and Nitzan provide some blistering polemic towards those who try to build the future without understanding this.</p>
<blockquote>
<p>With some obvious exceptions, present-day leftists prefer to avoid ‘the economy’, and many are rather proud about it. To prioritize profit and accumulation, to theorize corporations and the stock market, to empirically research the gyrations of money and prices are all acts of narrow ‘economism’. To do these things is to fetishize the world, to conceal the cultural nuances of human consciousness, to prevent the critic from seeing the true political underpinnings of social affairs. Best to leave them to the dismal scientists. And, so, most self-respecting critics of capitalism remain happily ignorant of its ‘economics’, neoclassical as well as Marxist. They know little about the respective histories, questions and challenges of these theories, and they are oblivious to their triumphs, contradictions and failures. This innocence is certainly liberating. It allows critics to produce ‘critical discourse’ littered with cut-and-paste platitudes, ambiguities and often plain nonsense. Seldom do their ‘critiques’ tell us something important about the forces of contemporary capitalism, let alone about how these forces should be researched, understood and challenged.</p>
</blockquote>
<p>Concordant with the spirit of this paragraph, Bichler and Nitzan devote much of the first half of the book to a critical dive into the history over the last two centuries of the “dismal science”, both Marxist and Neoclassical.</p>
<p>I learned a <em>lot</em> about both neoliberalism and Marxism, and this part of the book would hold up as a good survey, even without the arguments they make for why the theories ultimately fail. It centers the analysis on an idea that both neoliberalism and Marxism are ultimately tied to <em>theories of value</em>. We are familiar with the neoliberal theory of value to such an extent that it is hard to even realize it is a theory. The neoliberal theory of value is that value comes from the utility that a good delivers to its consumer. Often this is how economics textbooks start, and they promise that the arguments that you can think of off the top of your head against this model have good counter-arguments, and in any case it’s a useful model. Students with further questions are told that real economists use better theories than this, but they are too complicated to put in introductory textbooks. Bichler and Nitzan do a thorough job expounding on arguments that an intro econ student might think of, but could not come close to articulating in enough detail to make headway.</p>
<p>The Marxist theory of value is that value comes from the work that humans put into material goods. On the face of it, this makes a lot of sense. Ultimately, the limiting factor to production comes down to humans: no humans = no production. However, this theory also has holes in it.</p>
<p>The key to Bichler and Nitzans’ arguments against both theories is that they cannot explain how capital accumulates, or provide a framework in which predictions about value can be made. So in short, the motivation for this book is that there are productive, empirical insights to be derived from a new economic point of view. I am used to alternatives to neoliberalism proposed for moral reasons, and it was refreshing to hear someone try to elucidate an alternative proposed for scientific reasons.</p>
<h3 id="business-and-industry">2. Business and Industry</h3>
<p>One of the key parts of this new theory comes out of the theories of a historian named Thorstein Veblen (according to Wikipedia, Veblen coined the term “conspicuous consumption”). Veblen’s big idea is that there is a fundamental distinction between Business and Industry. Industry is the domain of the kind of people who build giant redstone contraptions in Minecraft or the kind of people who name their lab mice and talk to them in squeaky voices while cleaning up after an experiment that went on until 1am. It is both a collaborative activity and a competitive activity, but it is fundamentally built on creativity, curiosity and a desire to solve problems. Business is the domain of the kind of people who network at parties and care a lot about “corporate strategy”. The point of Business is profit and accumulation.</p>
<figure>
<img src="images/trevor.png" alt="Trevor">
<figcaption>
Trevor
</figcaption>
</figure>
<p>Rather than theorizing capitalism as a perpetual struggle between classes, Veblen theorizes capitalism as a perpetual struggle between Business and Industry.</p>
<blockquote>
<p>Modern capitalists are removed from production: they are absentee owners. Their ownership, says Veblen, doesn’t contribute to industry; it merely controls it for profitable ends. And since the owners are absent from industry, the only way for them to exact their profit is by ‘sabotaging’ industry.</p>
</blockquote>
<p>The <em>one thing</em> capitalism was supposed to be good at was high-quality goods at low prices, this is the promise dangled from the hands of every billboard in Times Square and every dense 800-page neoliberal economics book. But actually, business subverts the production of quality goods at low prices for the purpose of profit. One of the most obvious examples of this is intellectual property; industry is siloed into many companies who cannot freely remix and use each other’s designs. Open source software, even though it is massively underfunded compared to proprietary software, often manages to punch above its weight because of the superior development model of sharing, and because it is not sabotaged by profit considerations.</p>
<p>If nothing else, Capital as Power is worth reading for the wealth of examples of this conflict.</p>
<blockquote>
<p>This is perhaps the reason why early in the twentieth century the automobile companies bought and dismantled 100 electric railway systems in 45 US cities (Barnet 1980: Ch. 2). And it is also why these companies have long shunned any radical change in energy sources. The electric car, first invented in the 1830s, predates its gasoline and diesel counterparts by half a century, and for a while was more popular than both (Wakefield 1994). But by the early twentieth century, having proved less profitable than the gas guzzlers, it fell out of favour and was forcefully erased from the collective memory. Then came intolerable pollution, which in the 1990s led the state of California to mandate a gradual transition of automobiles to alternative energy. Complying with the new regulations, General Motors had its engineers quickly develop a highly efficient electric car, the EV1. But fearing that this gem of a car would undermine profit from their gas guzzlers, the company’s owners, along with owners of other concerned corporations in the automotive and oil business, also invested in an orchestrated attempt to defeat the California bill. When the regulation was finally overturned, every specimen of the EV1 was recalled and literally shredded (Paine 2006).</p>
</blockquote>
<p>The idea of a distinction between Business and Industry was not the most provocative idea in Capital as Power, nor the one with the farthest-reaching implications, but it was the one that stuck in my head the most. It seems to me to be a very productive way of thinking, and sums up a lot of stuff I didn’t have words to describe before. But to Bichler and Nitzan, this is merely a springboard for a much larger theory.</p>
<h3 id="accumulation-of-power">3. Accumulation of Power</h3>
<p>Here, Bichler and Nitzan follow the ideas of a historian named Lewis Mumford. Mumford takes us back all the way to the beginning of what we now call civilization, in the Nile River delta. His conceit is that the first “technology” was not mechanical or chemical, it was social. The organizational structure of ancient Egypt, with its intricate hierarchy of politics and religion meshed together, was a form of power previously unmatched in its ability to change its surroundings and to persist through time.</p>
<p>And here I add my own analysis. It was impressed on me thoroughly in ninth grade ancient history by my most excellent history teacher Audrey Budding that the one of most common threads through history and one of the most important questions to ask about a society is how legitimacy of the ruling class is achieved. In this lens, the novel technology of Egypt was the ability to give its rulers, through religion, tradition, force, and bureaucracy, enough legitimacy that they could impress their will on a massive population.</p>
<figure>
<img src="images/egypt_power.png" alt="Egypt Power">
<figcaption>
Egypt Power
</figcaption>
</figure>
<p>Mumford calls this new technology the “mega-machine”, and Bichler and Nitzan take an interesting romp through some of the mega-machine’s greatest hits throughout the years since the fall of Egypt.</p>
<p>According to them, the most recent incarnation of the mega-machine is the entirely novel <em>quantification of power through capital</em>. With the dazzling mathematics of the market, the mega-machine has reached heights of sophistication that the gold-plated pharoahs of yester-millenium could only dream of. The mechanism by which the ruling class exerts power is tightly woven into the daily fabric of the lives of their thralls, and legitimized by every interaction that becomes a transaction.</p>
<p>At this point, you are probably thinking “Yes! This is the hot tea that I signed up for when I clicked on a link that claimed to lead to a book review of a book called Capital as Power!”</p>
<p>I hate to disappoint you, but this is the end of the introduction, and we’re not going to get back to the real juicy stuff until after about a thousand or so words droning on about theories of value and dead white men.</p>
<p>You see, I’m trying to give you a picture of what it is like to read this book, and the experience of having a tantalizing insight dangled in front of you but then being forced to read far more history and statistics than you would really like to understand it is essentially all of Capital as Power.</p>
<h3 id="summary-of-part-a">Summary of Part A</h3>
<ul>
<li>Capitalism is bad, but before we can improve it, we need to understand it scientifically.</li>
<li>Current economics has some deep flaws in this regard.</li>
<li>Cultural critiques are dumb.</li>
<li>Business and Industry are two distinct things.</li>
<li>Capitalism is, like, Egyptian pharoahs but with more numbers.</li>
</ul>
<h2 id="part-b-dilemmas-of-the-dismal-science">Part B: Dilemmas of the Dismal Science</h2>
<h3 id="politics-and-economy">1. Politics and Economy</h3>
<p>Before the industrial revolution, one could make a decent argument that political power and economic power could be separated. One strong point in favor was the separation of nobles, merchants, and clergy. Certainly, nobles often happened to be rich, but their wealth mostly derived from land-ownership, and their political power was mainly derived from their birth and connections, rather than their wealth (though, connections and wealth could go hand and hand). Merchants, even though they could have influence through their wealth, were excluded from positions of political power. And the clergy, in some cases more important than the nobles or the merchants, were also quite separated from both.</p>
<figure>
<img src="images/noble_merchant_priest.png" alt="Noble, Merchant, Clergy">
<figcaption>
Noble, Merchant, Clergy
</figcaption>
</figure>
<p>It is from this situation that the “original sin” of economics derives: the belief that economics is productively analyzed outside of political context. The original liberals relied on this duality to expound on their idea that the ideal government simply facilitates the movements of the market.</p>
<p>Marx was the first to question this belief, claiming that it was only through political oppression that industrialists were able to achieve their economic exploitation. However, he still makes an essential distinction between the two, and the Marxist viewpoint is that the contradictions between the political and economic spheres are what will eventually bring down capitalism and usher in communism, where politics and economics will finally be united.</p>
<p>Bichler and Nitzan take as a jumping-off point this faulty duality, and use it to explain how various problems come up in both theories. For instance, the pure “Newtonian” laws of microeconomics were eventually forced to be revised by the Great Depression, and the new science of macroeconomics was introduced to account for this. Since then, the systematic differences of the real world from the “spontaneous equilibrium” of the market have been accounted for by an ever growing pageant of distortions, applied ad-hoc. But just as Ptolemaic astronomy eventually drowned under the weight of its many epicycles, so is neoclassical economics struggling under the weight of all of the various compensations needed to account for politics in a theory that assumes politics is out of the picture.</p>
<p>In Marxism, a similar problem arose as the competition-rich environment where Marx originally made his theories gave way to a new monopolistic capitalism. Without competition, the tendency of prices of goods to correlate with the prices of labor, and for profits to equalize among different sectors no longer held true. To account for this, Neo-Marxists developed a new theory that attempted to bring power back into the picture. However, like the man who cannot light his cigarette without putting down his teacup, in order to do so the labor theory of value had to be jettisoned, and Neo-Marxism became unmoored from the theoretical framework that birthed it. When the stagflation of the 70s and 80s hit along with the breakup of “state capitalism”, Neo-Marxism ceased to be an accurate description of the world, and leftists attempted to move back to original Marxism, decrying the period of monopoly as a “historical blip”. However, there was little left of the original theory that still made sense, and many Marxists moved to cultural critiques, abandoning the original attempt of Marxism to put the study of capitalism on a scientific basis.</p>
<h3 id="the-nominal-and-the-material">2. The Nominal and The Material</h3>
<p>Another issue that plagues both Marxist and neoliberal analyses is an attempt to make a distinction between what I might call “the map” and the “territory.” On the Marxist side, this comes up as a distinction between “fictional” and “real” capital. “Real” capital is owned by industrial capitalists, who employ productive labor to create surplus value. I imagine that Marx was thinking of factories here. “Fictional” capital, on the other hand, is capital owned by commercial and financial capitalists, who merely appropriate the value generated by productive labor. Intuitively, this is a theory that one is inclined to be sympathetic to. On the one hand, you have farmers and laborers, who are clearly producing surplus, and on the other hand you have stock brokers, who clearly are just siphoning off the top. But to actually give a sturdy definition of what is “productive” and what is “unproductive” is not at all easy.</p>
<figure>
<img src="images/stock_man.png" alt="Stockbroker">
<figcaption>
Stockbroker
</figcaption>
</figure>
<p>On the other hand, the liberals face a similar dilemma as they argue that the market ultimately represents the movements of actual industrial processes. Bichler and Nitzan argue that liberals were originally motivated to do this in order to make the argument that, unlike nobles who acquired their wealth by looting or birth, the new rich acquired their money by work. If ultimately the market is just a representation of real processes that bring material changes in the world, then business deals are as legitimate a form of work as manufacturing and farming, and so just as the laborer is entitled to the work brought in by the sweat of his brow, so is the businessman entitled to whatever rewards he can manage to make by fair participation in the market.</p>
<p>However, this has its own problems. The movements of capital markets are empirically quite difficult to correlate with the movements of the underlying material assets that those markets are supposed to represent. Again, neoliberals employ a pageant of epicycles to explain away this, but there are only so many epicycles that a scientist should accept.</p>
<p>In short, applying the “map and territory” analogy to money and “real” assets is bad for two reasons. The first is that it is very hard to draw a line between the two, and the second is that even when we can tell that something is a map, it’s very difficult to figure out what it is a map of.</p>
<h3 id="what-is-value">3. What is Value?</h3>
<p>The last problem is more philosophical. It’s best introduced in Bichler and Nitzan’s own words.</p>
<blockquote>
<p>To study the rationalist order of capitalism without quantities is like studying feudalism without religion, or physics without mathematics. According to Marx, and here he was right on the mark, capitalism, by its very nature, seeks to turn quality into quantity, to objectify and reify social relations as if they were natural and unassailable. In this sense, a qualitative theory of value necessarily implies a quantitative theory of value; it means a society not only obsessed with numbers, but actually shaped and organized by numbers. This organization is the architecture of capitalist power. To understand capitalism therefore is to decipher the link between quality and quantity, to reduce the multifaceted nature of social power to the universal appearance of capital accumulation. The two aspects of the theory rise and fall together. If one is proven wrong, so is the other.</p>
</blockquote>
<p>With this passage, Bichler and Nitzan set a high bar for theories. It is not enough for a theory of capitalism to give a qualitative account of value because the nature of capitalism is quantitative. It is on this cross of numerics that the Marxist “abstract labor” and the neoclassicist “util” are ultimately crucified.</p>
<p>They lay the problem out in the following way. It is well understood that wealth is not well-measured by current market value, because of inflation. Economists get around this by coming up with a “price index”, which measures how much a “standard bundle” of goods and services would cost at different times. By this mechanism, comparisons of value across time can be measured. However, the definition of such a “standard bundle” is highly problematic. If this standard bundle were, say, a single transistor, then an economist would conclude that we are over a million times richer than we were in the 1960s. This is clearly not true. Of course, an economist would not calculate a price index in this way, but almost any commodity has similar problems, though less extreme, from roast passenger pigeon to steel.</p>
<figure>
<img src="images/standard_bundle.png" alt="A Standard Bundle of Goods">
<figcaption>
A Standard Bundle of Goods
</figcaption>
</figure>
<p>In practice, some reasonable judgement is made on which commodities to include. But on what basis is this judgement made? The theoretical underpinnings of neoclassicism are that things are ultimately denominated in “utils”. This explains why we don’t simply multiply by the number of transistors: utils don’t scale linearly with the number of transistors. This explains why roast passenger pigeon would go for a high price now; it’s scarcity would cause someone to derive great utility from their signaling of wealth by eating it, or great utility from their curiosity in how it tastes.</p>
<p>As a qualitative theory, utils certainly have a lot going for them. I buy groceries because I derive utility from eating them. I pay rent because I derive utility from having a roof over my head. But even the most ardent proponents of the new utilitarianism balked at doing actual calculations.</p>
<blockquote>
<p>In fact, they admitted quite openly that universal utility is impossible to measure and, indeed, difficult to even fathom. The interesting thing, though, is that this recognition did not deter them in the least. ‘If you cannot measure, measure anyhow,’ complained their in-house critic Frank Knight</p>
</blockquote>
<p>Instead, neoliberal economists developed a theory of “revealed preferences.” This theory says the following:</p>
<blockquote>
<p>‘Utility is the quality in commodities that makes individuals want to buy them, and the fact that individuals want to buy commodities shows that they have utility’ (Robinson 1962: 48).</p>
</blockquote>
<p>We wanted to compare wealth over time. Prices change due to inflation, technological improvements, and a whole host of other things, so we need a theory of value that allows us to make this comparison. Utility provides that theory of value. How do we measure utility? Prices. Whoops…</p>
<p>I want to make it explicit that Bichler and Nitzan aren’t making the argument that utilitarianism is not a good basis for morality. This kind of argument would not be novel or relevant. They are making the argument that utilitarianism is a bad basis for a theory of capitalism because it fails to make quantitative testable predictions.</p>
<p>While I’m clarifying things, I might as well reiterate (though it should go without saying) that anyone wishing to refute any of the arguments that I set out here, should not take my presentation as canonical in any way; Bichler and Nitzan’s arguments are far more comprehensive than my brief summary. Although I promised that I would bore you with history and statistics, I really don’t have the space or time.</p>
<p>A similar circularity happens with the labor theory of value. I won’t go into as much detail, because I think it’s somewhat widely accepted that the labor theory of value doesn’t really work, but I encourage the interested reader to read the relevant parts in “Capital as Power”; I learned a lot about what the labor theory of value actually means that I had never really had explained to me in such detail.</p>
<h3 id="summary-of-part-b">Summary of Part B</h3>
<ul>
<li>Separating politics and economy leads to contradictions</li>
<li>Separating out “real” from “fictional” capital also leads to contradictions</li>
<li>Assuming that prices are caused by some sort of externally-defined value leads to contradictions.</li>
</ul>
<h2 id="part-c-the-machine">Part C: The Machine</h2>
<blockquote>
<p>Moloch whose blood is running money!</p>
</blockquote>
<h3 id="internal-and-external-logic">1. Internal and External Logic</h3>
<p>If we cannot use utility or abstract labor, then by what means can we determine value? Bichler and Nitzan do not have an answer to this question. They instead say that it is the wrong question to ask. It makes no sense to try to anchor the fluctuating numbers of human society to some fixed and eternal quantity. Rather, prices are just another expression of society.</p>
<blockquote>
<p>According to Cornelius Castoriadis (1984), this alternative was articulated some 2,500 years ago, by Aristotle. Equivalence in exchange, Aristotle argued, came not from anything intrinsic to commodities, but from what the Greek called the nomos. It was rooted not in the material sphere of consumption and production, but in the broader social–legal–historical institutions of society. It was not an objective substance, but a human creation.</p>
</blockquote>
<p>This articulates the idea that capitalism exists on a continuum. The idea that a gift economy or dictatorship is based on societal context is totally uncontroversial; why should the theory of a transactional economy be any different?</p>
<blockquote>
<p>Consider the ratio between the price of petroleum and the wages of oil rig workers; between the value of Enron’s assets and the salaries of accountants; between General Electric’s rate of profit and the price of jet engines; between Halliburton’s earnings and the cost of ‘re-building’ Iraq; between Viacom’s taxes and advertisement rates; between the market capitalization of sub-prime lenders and government bailouts. Why insist that these ratios are somehow determined by — or deviate from — relative utility or relative abstract labour time? Why anchor the logic of capitalism in quanta that cannot be shown to exist, and that no one — not even those who need to know them in order to set prices — has the slightest idea what they are? Isn’t it possible that these capitalist ratios are simply the outcome of social struggles and cooperation?</p>
</blockquote>
<p>The title of this section comes from my personal spin on this. Euclid tried to define all of the geometrical terms that he worked with rigorously. However, such an attempt was inevitably circular. Modern mathematics affirms that the proper way to axiomatize math is to start with undefined terms, which derive meaning through their relation to each other. That is, ultimately mathematics cannot be given an “external” grounding; it must be defined through “internal” means.</p>
<p>This is also well-understood in the linguistic sphere. An objective definition of a word does not exist; all that exists is the totality of that word’s relationship with actions and with other words. Analogously, it makes sense that prices and capital and markets are not objectively defined quantities, but exist only in relation to the larger context of civilization.</p>
<p>This resolves the dilemmas of part B. Politics and economics are clearly not separated; the study of one is the study of the other. The private ownership of “financial” assets is just as “real” as the private ownership of material goods; they are simply relations that exist in a certain societal context. And finally, there is no objective standard of value.</p>
<p>But wait, you are surely thinking, isn’t this giving up? After crucifying neoliberal and Marxist theories on a cross of numerics, it’s a pretty poor showing to have the theory that’s supposed to replace them be all “societally-determined” woo.</p>
<p>The answer is that productive empirical tests and theories can be produced from this mindset. Abandoning an “external logic” of capitalism does not mean that scientific inquiry has to pack up and go home. Rather, it frees us to look for theories that are embedded in specific contexts and divorced from pretensions of universality.</p>
<p>An analogy can be drawn here to machine translation: the “rules-based” systems of the early AI days are no match for the deep learning systems of today, and the transition was predicated on an understanding that the meaning of a word can’t be pinned down with formal rules (and of course also predicated on access to GPUs).</p>
<p>Additionally, this mindset allows us to salvage a great deal of neoliberal and Marxist economics. When properly contextualized and removed from their moral and theoretical underpinnings, these theories can have great empirical success.</p>
<p>The famous physicist and captain of the high seas Robert Hooke believed that the law that he discovered governing the motion of a spring, <span class="math inline">\ddot{x} = -k x</span>, where <span class="math inline">x</span> is the displacement from rest position, was a new law of nature. However, it actually turned out to just be a good approximation in certain cases, and we still use Hooke’s law in engineering because of this</p>
<p>I think that many economists are all too aware that they are just using an approximation. And if I wanted to know the answer to a given question, I would look to expert economic judgement. This is because a highly tuned misguided theory often gives much better results than a poorly tuned well-founded theory. I recently bought a subscription to the Economist, and despite its heavy neoliberal bias, I still think it gives a clearer picture of the world than many other news sources; a large helping of meritocracy goes a long way. However, the way that human brains work is that understanding is layered. After working with principles and laws for a long time, we forget what the underlying assumptions that lead us to come up with those principles and laws were, and are therefore less able to ascertain when those principles and laws no longer hold. Our intuitions about prices are developed by going to the grocery store, not by buying companies, and we should not trust principles just because they seem to make sense in the micro-scale.</p>
<p>In this way, implicit assumptions about the nature of economics radically change the type of models that are even considered, and also radically change political views. Therefore, although this indictment of neoliberal theory does not in my mind invalidate expert scientific consensus in many areas, it does undermine <em>political</em> arguments based on neoliberal/Marxist theory, and it opens the door to new scientific ideas. And both of these are needed if this new theory is to be a success; to make a dent in neoliberal consensus where “cultural” theories have failed it must open up previously poorly understood areas to empirical analysis, and to better guide society it must have political implications based on that new empirical analysis.</p>
<h3 id="capital-and-capitalization">2. Capital and Capitalization</h3>
<p>In the previous section, we moved a bit far afield from the review. We now move back to the book as it attempts to examine the “internal logic” of capitalism; the processes and beliefs that keep it afloat.</p>
<p>Bichler and Nitzan argue that the central process of capitalism is, fittingly, <em>capitalization</em>. Capitalization is the process of taking an asset that is expected to produce a certain stream of future profits and assigning a current price to it. This is achieved through a <em>discount rate</em>, where future profits are valued lower than present profits. That is, we assume that 1 dollar now is worth the same as <span class="math inline">r</span> dollars in a year. Mathematically, we can then say that if the profit from an asset years in the future is <span class="math inline">p_{n}</span>, then the value of that asset now is</p>
<p><span class="math display"> \sum_{n=0}^{\infty} r^{n} p_{n} </span></p>
<p>If <span class="math inline">p=p_{n}</span> is constant, then this reduces to</p>
<p><span class="math display"> \sum_{n=0}^{\infty} r^{n}p = \frac{p}{1-r} </span></p>
<p>This formula is called the “discounting/capitalization formula”. This idea of a discount rate (and implicitly this formula, and variations of it), have been in use since the fourteenth century, where it was first introduced by Italian merchants (according to Bichler and Nitzan). As the centuries went on, it spread farther and farther, although not everyone really did the math “correctly”.</p>
<p>In 1907, Irving Fisher proposed that this discounting logic was in fact universal.</p>
<blockquote>
<p>It is evident that not bonds and notes alone, but all securities, imply in their price and their expected returns a rate of interest. There is thus an implicit rate of interest in stocks as well as in bonds…. It is, to be sure, often difficult to work out this rate definitely, on account of the elusive element of chance; but it has an existence in all capital…. It is not because the orchard is worth $20,000 that the annual crop will be worth $1000, but it is because the annual crop is worth $1000 that the orchard will be worth $20,000. The $20,000 is the discounted value of the expected income of $1000 per annum; and in the process of discounting, a rate of interest of 5 per cent. is implied.</p>
</blockquote>
<p>Bichler and Nitzan are really good a picking good quotes from old economists, so I can’t resist giving you another one:</p>
<blockquote>
<p>The primitive economy in its choice of enjoyable goods of different epochs of maturity, in its wars for the possession of hunting grounds and pastures, in its slow accumulation of a store of valuable durable tools, weapons, houses, boats, ornaments, flocks and herds, first appropriated from nature, and then carefully guarded and added to by patient effort — in all this and in much else the primitive economy, even though it were quite patriarchal and communistic, without money, without formal trade, without definite arithmetic calculations, was nevertheless capitalizing, and therefore embodying in its economic environment a rate of premium and discount as between present and future. (Fetter 1914b: 77)</p>
</blockquote>
<figure>
<img src="images/wild_stocks.png" alt="Livestocks">
<figcaption>
Livestocks
</figcaption>
</figure>
<p>After this quote, Bichler and Nitzan quip</p>
<blockquote>
<p>In short, if human beings were indeed made in the image of God, the Almighty must have been a bond trader.</p>
</blockquote>
<p>However, despite these enthusiastic embraces of capitalization from the dismal science, the general public were not convinced, and the capitalization formula was not yet embraced. It was not until the dazzling onslaught of complexity in corporate finance that started to unfold in the 1930s and 1940s that the capitalization formula was firmly grasped as a principle with which to evaluate and price assets and make sense of the growing chaos. Later on, risk was incorporated formally into the model, and these modern practices of corporate finance became so firmly entrenched that one would be entirely forgiven if one supposed that they were laws of nature.</p>
<p>For me, this was an interestingly different way of looking at capitalism. Capitalism is typically presented as a system that embraces markets, whereas this presents capitalism as a logic for how to price things in the context of markets. In theory, another polical system could use markets without using the same pricing logic.</p>
<p>Bichler and Nitzan then devote a whole chapter to showing that capital within the modern capitalist system is determined wholly by variants of the discounting formula, and that capital is not necessarily correlated with any sort of “real capital” in terms of physical assets. Unfortunately we don’t have time to get into this, but this is where they start pulling out the graphs and data, and start to show that the assumptions that economics textbooks make in correlating capital with any sort of measurable, tangible asset are empirically unfounded.</p>
<h3 id="profit-and-differential-profit">3. Profit and Differential Profit</h3>
<p>If capital is “capitalized future profits”, then what are profits? Where do they come from, and how do they relate to accumulation of capital?</p>
<p>Recall the framework of “Business and Industry” that Veblen came up with. According to Veblen, when Industry is allowed to run unchecked, there are no profits. Competition makes the price and cost of a good equalize exactly. In order to make profit, a firm must somehow restrict industry, or “sabotage” it, in the case of Veblen. For instance, in section A.2 we saw that the profits of automobile companies directly correspond to their ability to sabotage alternate forms of transportation. To sum up, capital measures and “discounts” a firm’s ability to sabotage industry.</p>
<p>This goes a long with a theory of property rights that sees property rights as fundamentally exclusionary. My ownership of a house does not enable me to use it, it only serves to disallow you from using it. Capital measures the access of a firm to revenue streams <em>that other firms cannot access</em>. A textbook of 21st century materials engineering might be worth billions to a firm in the 1960s that could control access to its knowledge, but once it become common knowledge, it cannot be counted as capital even though the firm’s ability to access it has not changed at all.</p>
<p>As usual, Bichler and Nitzan write about this in a very elegant way.</p>
<blockquote>
<p>Business, like other power institutions throughout history, can force people to act, but it cannot make them productive. Moreover, productivity as such, being socially hologramic and therefore open and unrestricted, cannot generate a profit. The only way for capitalists to profit from productivity is by subjugating and limiting it. And since business earnings hinge on strategic sabotage, their capitalization represents nothing but incapacitation. In this particular sense, capital, by its very construction, is a negative industrial magnitude.</p>
</blockquote>
<p>Even human and relationship capital can be viewed in this lens. When human capital is weighed on the balance sheet, what is being measured is the firm’s ability to divert the output of those brains away from increasing the common knowledge and towards increasing the profit of the firm.</p>
<p>However, as power is inherently relative, the way it accumulates is not by profit, because a rising tide that lifts up all boats does not change their relative standing. Instead, capital accumulates by <em>differential</em> profit. In other words, firms are unconcerned with outrunning the bear market, they are just concerned with outrunning you.</p>
<p>Bichler and Nitzan phrase this culturally, talking about the drive to beat the average among stockbrokers, but one could easily think about this evolutionarily. The firms that have managed to keep a consistent rate of growth that is above the average have, by the miracle of exponential growth, become those firms that dominate the economy.</p>
<p>In short, differential profit measures the ability of a firm to sabotage industry <em>more than everyone else</em>. This race to beat the average is what determines which firms end up on top, and which CEOs can buy the most expensive yachts. Not efficiency, not productivity, not innovation, but the ability to sabotage industry more than everyone else.</p>
<h3 id="summary-of-part-c">Summary of Part C</h3>
<ul>
<li>It makes more sense to think of prices as numbers which have internal, not external significance.</li>
<li>The central process of capitalism is capitalization of future profits (measured in prices)</li>
<li>Profit measures the ability of a firm to sabotage industry</li>
<li>Firms grow when they can sabotage industry more than other firms</li>
<li>Capital measures the ability of a firm to sabotage industry, discounted over time.</li>
</ul>
<h2 id="part-d-the-machine-in-context">Part D: The Machine in Context</h2>
<h3 id="economic-implications">1. Economic Implications</h3>
<p>In this section, we talk about some of the predictions that this theory makes, and how well they align with reality.</p>
<p>First of all, no review of Capital as Power would be complete without mentioning their discussion of what they call “Dominant Capital.” Dominant Capital is what they call the conglomerate of the very largest companies in capitalism, the companies who have managed to squeeze above-average profits out of industry year after year and have an outsized influence on not only the markets, but also the political process.</p>
<p>As a rough approximation of dominant capital, Bichler and Nitzan consider the top 100 companies as measured by capitalization. Using this, Bichler and Nitzan shows that while various other measures of growth have not had clear trendlines, accumulation of capital by the top 100 companies has been happening at a steady rate since WWII.</p>
<p>This growth is not driven by expansion of industry. Bichler and Nitzan argue that expansion of industry means loss of control by capitalists, and thus is uncorrelated to accumulation of capital.</p>
<p>To back these arguments up, Bichler and Nitzan make lots of graphs where two trends on different axes are lined up.</p>
<figure>
<img src="images/differential_profit_vs_income_share.png" class="half" alt="Differential Profit vs. Income Share"> <img src="images/accumulation_vs_ploughback.png" class="half" alt="Accumulation vs. Ploughback">
<figcaption>
Why do statistics when you can just align two curves and point to them?
</figcaption>
</figure>
<p>These sort of graphs are actually pervasive throughout Capital as Power, and although they were suggestive, I’m kind of skeptical of arguments that pull out variables from thin air and show that they are correlated. Presumably Bichler and Nitzan had many different datasets that they could work with; it’s not too hard to find trends that are correlated if you squint. And additionally, as always causation is hard to tease out; the cycles/trends in these graphs could be coming from common causes that have nothing to do with this theory.</p>
<p>As a current statistics grad student, I was both pleased and disappointed at the general level of math in this book. That is, there is very little math. From my perspective, this is <em>far</em> better than coming up with a lot of ad-hoc models with lots of assumptions; better to have a tight qualitative analysis than a sloppy quantitative one. On the other hand, I was kind of hoping that there would be something a little more precise than “these graphs kind of look similar.” I haven’t read much of the rest of Bichler and Nitzans’ work though, so perhaps they develop these theories more rigorously elsewhere.</p>
<p>Another consequence of the frame of Capital as Power is a new look on inflation. To start this analysis, Bichler and Nitzan claim that one of the most common modes of power is <em>price setting</em>. In neoliberal economics, firms are typically portrayed as having to take prices dictated by the market, but in fact in order to achieve a “normal rate of return”, firms must exert power and set prices higher than what a truly competitive market would bear.</p>
<p>As a consequence of the former point, inflation is the result of power struggles between businesses, and is fundamentally redistributionary, rather than being an expression of a growing economy. This explains stagflation; price wars without industry growth makes a lot of sense; business expresses power by both restricting industry and raising prices.</p>
<p>Additionally, Bichler and Nitzan claim that in the US for the last 50 years, dominant capital accumulates during periods of inflation, where dominant capital can raise prices faster than everyone else, and slows accumulation during periods without inflation. However, this is not necessarily true in other countries, in which different redistribution patterns happen during inflation. That is, the US economy has become a good engine for the accumulation of dominant capital, but this is by no means universal.</p>
<p>The final consequence that I will mention briefly is <em>mergers and acquisitions.</em> Apparently much of the growth of dominant capital in the last few decades has been mediated by mergers and acquisitions, not green-field growth. This makes sense because mergers and acquisitions allow for more concentrated power and more control over industry, and green-field growth has the potential for letting industry run away from business.</p>
<p>In general, I would be very interested for someone with a better understanding of economic indicators than I to take a look at the later chapters in Capital as Power and tell me whether or not Bichler and Nitzan are cherry picking their data or not, and whether their analysis is accurate; this was the part where they really started to lose me, but also the part where all of their claims about the empirical verifiability of their theories rest.</p>
<p>For this book review, however, we must move on!</p>
<h3 id="the-space-of-political-systems">2. The Space of Political Systems</h3>
<p>Capital as Power has a subtitle which I have not mentioned yet. Its full title is “Capital as Power: A Study of Order and Creorder.” What is creorder? I’ll let the authors define this for you</p>
<blockquote>
<p>Historical society is a creorder. At every passing moment, it is both Parmenidean and Heraclitean: a state in process, a construct reconstructed, a form transformed. To have a history is to create order — a verb and a noun whose fusion yields the verb-noun creorder.</p>
</blockquote>
<p>A creorder can be hierarchical as in dictatorship or tight bureaucracy, horizontal as in direct democracy, or something in between. Its pace of change can be imperceptibly slow — as it was in many ancient tyrannies — yielding the impression of complete stability; or it can be so fast as to undermine any semblance of structure, as it often is in capitalism. Its transformative pattern can be continuous or discrete, uniform or erratic, singular or multifaceted. But whatever its particular properties, it is always a paradoxical duality — a dynamic creation of a static order….</p>
<p>The use of this idea is to situate capitalism within a broader space of creorders. Capitalism is characterized by the quantification of power through a market, and the accumulation of power through exclusive rights. The creordering of the market, and of these property rights, however, is accomplished through the very powers that the markets and property rights affirm. That makes the exact power structure of a capitalist society very fluid. The internal logic of one capitalist society are due to these power relations, and though the power relations may be mediated through the market; there are not “economic laws” that force the logic of one capitalist society to be the same as that of another capitalist society. We have mainly been analyzing the logic of the U.S. economy over the last 50 years, and Bichler and Nitzan are able to separate out the universal framework from particular features of this system.</p>
<p>One example of using “particular theories: is Bichler and Nitzan’s idea of the”petrodollar-weapondollar coalition" vs. the “technodollar-mergerdollar alliance.” They posit that during the Cold War, dominant capital mainly centered around oil extraction and petroleum-dependent industry, and additionally weapons manufacture: the “petrodollar-weapondollar coalition”. These two sectors were dependent on each other because oil required certain international relations that the defense industry was happy to supply. However, as the Cold War wound down in the 90s, dominant capital shifted towards technology and consolidation of power through mergers, which they call the “technodollar-mergerdollar alliance”. This new coalition seemed to observers to herald a new economy centered around growth through high-tech knowledge and industry.</p>
<p>However, with the dotcom crash and the new wars in the Middle East, dominant capital shifted back to “petrodollar-weapondollar”. Depending on where dominant capital was centered, different logic applied.</p>
<p>Bichler and Nitzan developed this theory of “petrodollar-weapondollar” and “technodollar-mergerdollar” back in the 90s, and claim that they were able to successfully predict changes in trends based on this framework that other forecasters were unable to see at the time, in published articles. This should be easy enough to verify for anyone who wants to dig through their old papers, and seems like a strong indicator that they know what they are talking about, at least in this area.</p>
<p>The point that I am trying to make is that, unlike the laws of economics which mostly claim to be universal across time, the strength of Capital as Power is that they can identify what things are true about some periods, and not of others, and integrate these assumptions into their models. In other words, rather than being a general theory of economics, Capital as Power is a general theory of the space of possible capitalist politics, or as Bichler and Nitzan seem to be so happy to coin, a general theory of possible capitalist creorders.</p>
<h3 id="connections-with-other-theories">3. Connections with Other Theories</h3>
<p>Reading this book, I had the overwhelming desire to introduce Bichler and Nitzan to James C. Scott, the author of “Seeing Like a State.” There seems to be a very strong similarity to how each theorize power. That is, power mainly serves to organize society in such a way that its resources are more easily extracted. However, Bichler and Nitzan are not anthropologists, and James C. Scott is not an economist, and as such each of their analyses is limited by domain.</p>
<p>Specifically, I think that Capital as Power could be greatly improved by a discussion of “legibility.” It seems like one important asset that is discounted implicitly by capitalization is the “legibility” of industry to a business. If an industry is illegible, it is much more difficult to extract profits.</p>
<p>Conversely, James C. Scott is heavy on examples and creates good language to describe situations that were previously harder to describe, however he lacks empirical/numerical theories built off his framework. Using the framework of Capital as Power, it could be more possible to somehow correlate legibility of a certain domain to the stock price of businesses with interest in that domain.</p>
<p>Finally, the idea that I have had in my head ever since reading Seeing Like a State (or more accurately, the idea that I have had in my head ever since reading Scott Alexander’s review of Seeing Like a State) was that there should be some way of talking about all of this using some variant of statistical mechanics. If power is the ability to create order, and order is the absense of entropy, then we should be able to talk about power and creorder in the framework of a stochastic dynamical system, of which we can measure the entropy at certain points of time.</p>
<p>The second law of thermodynamics says that entropy always increases in a closed system. However, in an open system, such as the Earth which is constantly receiving sunlight and radiating out waste heat, this does not have to hold. And in fact, all of evolution and human society is proof that the second law of thermodynamics does not in fact hold in an open system.</p>
<p>This semester, I’m finally taking stochastic mechanics (up to now I’ve only had a vague idea of what it actually is), so maybe I’ll be able to say more after I know what I’m talking about. But if you, dear reader, are catching a glimpse of this vision that i have, and you know something about statistical mechanics, I ask that you keep this idea in your head and toy with it over the next decade. A mathematical framework for creorder would dramatically expand the set of questions that scientists can research about the world.</p>
<h3 id="summary-of-part-d">Summary of Part D</h3>
<ul>
<li>The Capital as Power theory of the capitalist machine has many concrete explanations of graphs of economic indicators over the last 50 years in the United States. Whether or not these are just-so stories must be left to a more-informed reader than I.</li>
<li>Capital as Power provides a framework for talking about specific internal logics of capitalism, and relating them to each other.</li>
<li>Capital as Power seems to be hitting at a much larger theory, which is also talked about by James C. Scott, and should be mathematically modeled by stochastic mechanics.</li>
</ul>
<h2 id="should-you-read-this-book">Should You Read This Book?</h2>
<p>Capital as Power is long, but extremely full of content. There are some large points in the book that I didn’t talk about at all, and that which I did talk about was highly condensed. After reading both Seeing Like a State and the slatestarcodex review of Seeing Like a State, I thought that Scott Alexander managed to capture fully the main points, but I would definitely say that this review has not captured in full the main points of Capital as Power. Put in a more positive way; this review has not spoiled Capital as Power for you!</p>
<p>Additionally, Bichler and Nitzan write in a very engaging way; not necessarily easy to read but certainly action-packed. And there are many, many interesting historical nuggets in the book, like the history of GM’s EV1 car that I referenced in the introduction.</p>
<p>And finally, although Capital as Power is long, there is a “middle way” (between reading this review, and reading the entire book). The first chapter, which is around 80 pages on my ereader, contains a summary and overview of the whole thing, and Bichler and Nitzan have a <a href="http://bnarchives.yorku.ca/259/">free copy</a> available on their webpage, so you don’t even have to feel bad about buying an entire book. So go do that!</p>
    </div>

    
    
</article>

<hr>

This website supports <emph>webmentions</emph>, a standard for collating reactions across many platforms. If you have a blog that supports sending webmentions and you put a link to this post, your blog post will show up as a response here.

You can also <a href="https://twitter.com/intent/tweet?text=https%3A%2F%2Fowenlynch.org%2Fposts%2F2021-09-13-capital-as-power-book-review%2F">respond via twitter</a> or respond via mastodon (on your preferred mastodon server); through the magic of <a href="https://brid.gy">brid.gy</a> all tweets or toots with links to this post will show up below (subject to moderation).

<script src="../../static/webmention.min.js" async></script>

<div id="webmentions">div</div>

      </div>

      <hr />

      <div class="main">
        Site proudly generated by
        <a href="http://jaspervdj.be/hakyll">Hakyll</a>
        with stylistic inspiration from <a href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
      </div>
    </div>
  </body>
</html>
]]></description>
    <pubDate>Mon, 13 Sep 2021 00:00:00 UT</pubDate>
    <guid>https://owenlynch.org/posts/2021-09-13-capital-as-power-book-review</guid>
    <dc:creator>Owen Lynch</dc:creator>
</item>
<item>
    <title>Three Environmental Proposals</title>
    <link>https://owenlynch.org/posts/2021-09-13-three-proposals</link>
    <description><![CDATA[<!doctype html>
<html lang="en">
  <head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>Three Environmental Proposals | Owen Lynch</title>
  <style type="text/css">
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="../../css/default.css" />
  <link rel="stylesheet" href="../../css/syntax.css" />
  <link rel="authorization_endpoint" href="https://indieauth.com/auth" />
  <link rel="webmention" href="https://webmention.io/owenlynch.org/webmention" />
  <link rel="pingback" href="https://webmention.io/owenlynch.org/xmlrpc" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/contrib/auto-render.min.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
        inlineElements = document.getElementsByClassName('math inline');
        displayElements = document.getElementsByClassName('math display');
        for (i = 0; i < inlineElements.length; i++) {
            e = inlineElements[i]
            try {
                katex.render(e.innerHTML, e, { displayMode: false });
            } catch (error) {
                console.error(error);
            }
        }
        for (i = 0; i < displayElements.length; i++) {
            e = displayElements[i]
            try {
              katex.render(e.innerHTML, e, { displayMode: true });
            } catch (error) {
                console.error(error)
            }
        }
    });
  </script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.css" />
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->


  </head>
  <body>
    <div class="container">
      <div class="menu">
        <div class="mainbar-links">
          <h2><a href="../../">Home</a> <a href="../../blog">Blog</a> <a href="../../output">Output</a></h2>
        </div>
        <div class="social-icons">
          <a href="https://github.com/olynch" rel="me"><img src="../../static/github-square.svg" class="icon" /></a>
          <a href="https://twitter.com/u_map_prop" rel="me"><img src="../../static/twitter-square.svg" class="icon" /></a>
          <a href="https://mathstodon.xyz/web/@olynch" rel="me"><img src="../../static/mastodon.svg" class="icon" /></a>
          <a href="https://www.youtube.com/channel/UCy1qDmvpYPmsYaHe51UzwIA" rel="me"><img src="../../static/youtube.svg" class="icon" /></a>
          <a href="../../rss.xml"><img src="../../static/rss.svg" class="icon" /></a>
        </div>
      </div>

      <hr />

      <div class="content main article">
        
<article class="h-entry">
    <h1>Three Environmental Proposals</h1>
    <div class="p-name" hidden>Three Environmental Proposals</div>

    <div class="info">
        Posted on <time class="dt-published" datetime="September 13, 2021">September 13, 2021</time>
        by <a class="p-author h-card" href="https://owenlynch.org">Owen Lynch</a>
    </div>

    <div class="e-content">
    <p>These are some environmental demands that I want to see more talk about.</p>
<ol type="1">
<li><p>Aggressive, phased-in carbon taxes. It’s boring and penny-pinching and not as sexy as “investment in green infrastructure”, and maybe it will be a regressive tax, but I don’t care. Taxation is one of the most powerful levers our government in our current capitalist system, and by god we have to use every lever we have. Of course, the revenue from this tax should be earmarked for green infrastructure, but that’s besides the point: pollution should have a price tag that is commesurate to its cost to society.</p></li>
<li><p>Immediate large-scale investment in nuclear, and a repeal of the doctrine that nuclear be “as safe as possible”. Nuclear should be held to similar safety standards as fossil fuel plants. For more information on how regulation on nuclear has crippled what should be a bountiful source of green energy, see <a href="https://rootsofprogress.org/devanney-on-the-nuclear-flop">Why has nuclear power been a flop</a>. Ideally, once nuclear has a reasonable level of regulation, energy companies will fall over each other in a rush to decarbonize.</p></li>
<li><p>The EPA should be revamped to have powers and independence similar to the Fed. The director of the EPA is a 10-year appointment, and is free from political meddling during those 10 years. The EPA has a mandate to maintain the environmental safety of the territory of the United States, and has broad authority to implement regulations, quotas, and taxes to this end. Perhaps this would require a constitutional amendment, and I don’t know exactly how to separate out powers granted to the new EPA, and powers that should still be reserved for the other branches of government, but just as the complexities of modern finance should not be left to the political process, so should the complexities of modern ecosystems not be left to the political process. If this is successful, then environmental protection should fade into the background, and become a default fact of life.</p></li>
</ol>
<p>When I contrast these proposals to “Green New Deal”-style proposals, my feeling is that these proposals are more compatible with a “lean, powerful state”, and “Green New Deal” will end up with tons of opportunities for inefficient, flabby, corrupt infrastructure deals whose main benefit goes to the government contractors awarded the various contracts.</p>
<p>Though, maybe the real solution here is to revamp the US’s ability to build things by carefully learning from the Japanese, Chinese, or Germans and implementing similar managerial policies… A boy can dream…</p>
<p>Discuss!</p>
    </div>

    
    <a href="https://brid.gy/publish/twitter"></a>
    
    
</article>

<hr>

This website supports <emph>webmentions</emph>, a standard for collating reactions across many platforms. If you have a blog that supports sending webmentions and you put a link to this post, your blog post will show up as a response here.

You can also <a href="https://twitter.com/intent/tweet?text=https%3A%2F%2Fowenlynch.org%2Fposts%2F2021-09-13-three-proposals%2F">respond via twitter</a> or respond via mastodon (on your preferred mastodon server); through the magic of <a href="https://brid.gy">brid.gy</a> all tweets or toots with links to this post will show up below (subject to moderation).

<script src="../../static/webmention.min.js" async></script>

<div id="webmentions">div</div>

      </div>

      <hr />

      <div class="main">
        Site proudly generated by
        <a href="http://jaspervdj.be/hakyll">Hakyll</a>
        with stylistic inspiration from <a href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
      </div>
    </div>
  </body>
</html>
]]></description>
    <pubDate>Mon, 13 Sep 2021 00:00:00 UT</pubDate>
    <guid>https://owenlynch.org/posts/2021-09-13-three-proposals</guid>
    <dc:creator>Owen Lynch</dc:creator>
</item>
<item>
    <title>Syndication to Twitter</title>
    <link>https://owenlynch.org/posts/2021-09-12-syndication-to-twitter</link>
    <description><![CDATA[<!doctype html>
<html lang="en">
  <head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>Syndication to Twitter | Owen Lynch</title>
  <style type="text/css">
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="../../css/default.css" />
  <link rel="stylesheet" href="../../css/syntax.css" />
  <link rel="authorization_endpoint" href="https://indieauth.com/auth" />
  <link rel="webmention" href="https://webmention.io/owenlynch.org/webmention" />
  <link rel="pingback" href="https://webmention.io/owenlynch.org/xmlrpc" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/contrib/auto-render.min.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
        inlineElements = document.getElementsByClassName('math inline');
        displayElements = document.getElementsByClassName('math display');
        for (i = 0; i < inlineElements.length; i++) {
            e = inlineElements[i]
            try {
                katex.render(e.innerHTML, e, { displayMode: false });
            } catch (error) {
                console.error(error);
            }
        }
        for (i = 0; i < displayElements.length; i++) {
            e = displayElements[i]
            try {
              katex.render(e.innerHTML, e, { displayMode: true });
            } catch (error) {
                console.error(error)
            }
        }
    });
  </script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.css" />
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->


  </head>
  <body>
    <div class="container">
      <div class="menu">
        <div class="mainbar-links">
          <h2><a href="../../">Home</a> <a href="../../blog">Blog</a> <a href="../../output">Output</a></h2>
        </div>
        <div class="social-icons">
          <a href="https://github.com/olynch" rel="me"><img src="../../static/github-square.svg" class="icon" /></a>
          <a href="https://twitter.com/u_map_prop" rel="me"><img src="../../static/twitter-square.svg" class="icon" /></a>
          <a href="https://mathstodon.xyz/web/@olynch" rel="me"><img src="../../static/mastodon.svg" class="icon" /></a>
          <a href="https://www.youtube.com/channel/UCy1qDmvpYPmsYaHe51UzwIA" rel="me"><img src="../../static/youtube.svg" class="icon" /></a>
          <a href="../../rss.xml"><img src="../../static/rss.svg" class="icon" /></a>
        </div>
      </div>

      <hr />

      <div class="content main article">
        
<article class="h-entry">
    <h1>Syndication to Twitter</h1>
    <div class="p-name" hidden>Syndication to Twitter</div>

    <div class="info">
        Posted on <time class="dt-published" datetime="September 12, 2021">September 12, 2021</time>
        by <a class="p-author h-card" href="https://owenlynch.org">Owen Lynch</a>
    </div>

    <div class="e-content">
    <p>This is a test post to see whether my blog posts are automatically cross-posted to twitter.</p>
    </div>

    
    <a href="https://brid.gy/publish/twitter"></a>
    
    
</article>

<hr>

This website supports <emph>webmentions</emph>, a standard for collating reactions across many platforms. If you have a blog that supports sending webmentions and you put a link to this post, your blog post will show up as a response here.

You can also <a href="https://twitter.com/intent/tweet?text=https%3A%2F%2Fowenlynch.org%2Fposts%2F2021-09-12-syndication-to-twitter%2F">respond via twitter</a> or respond via mastodon (on your preferred mastodon server); through the magic of <a href="https://brid.gy">brid.gy</a> all tweets or toots with links to this post will show up below (subject to moderation).

<script src="../../static/webmention.min.js" async></script>

<div id="webmentions">div</div>

      </div>

      <hr />

      <div class="main">
        Site proudly generated by
        <a href="http://jaspervdj.be/hakyll">Hakyll</a>
        with stylistic inspiration from <a href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
      </div>
    </div>
  </body>
</html>
]]></description>
    <pubDate>Sun, 12 Sep 2021 00:00:00 UT</pubDate>
    <guid>https://owenlynch.org/posts/2021-09-12-syndication-to-twitter</guid>
    <dc:creator>Owen Lynch</dc:creator>
</item>
<item>
    <title>Mathematical Classes</title>
    <link>https://owenlynch.org/posts/2021-05-01-mathematical-classes</link>
    <description><![CDATA[<!doctype html>
<html lang="en">
  <head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>Mathematical Classes | Owen Lynch</title>
  <style type="text/css">
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="../../css/default.css" />
  <link rel="stylesheet" href="../../css/syntax.css" />
  <link rel="authorization_endpoint" href="https://indieauth.com/auth" />
  <link rel="webmention" href="https://webmention.io/owenlynch.org/webmention" />
  <link rel="pingback" href="https://webmention.io/owenlynch.org/xmlrpc" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/contrib/auto-render.min.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
        inlineElements = document.getElementsByClassName('math inline');
        displayElements = document.getElementsByClassName('math display');
        for (i = 0; i < inlineElements.length; i++) {
            e = inlineElements[i]
            try {
                katex.render(e.innerHTML, e, { displayMode: false });
            } catch (error) {
                console.error(error);
            }
        }
        for (i = 0; i < displayElements.length; i++) {
            e = displayElements[i]
            try {
              katex.render(e.innerHTML, e, { displayMode: true });
            } catch (error) {
                console.error(error)
            }
        }
    });
  </script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.css" />
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->


  </head>
  <body>
    <div class="container">
      <div class="menu">
        <div class="mainbar-links">
          <h2><a href="../../">Home</a> <a href="../../blog">Blog</a> <a href="../../output">Output</a></h2>
        </div>
        <div class="social-icons">
          <a href="https://github.com/olynch" rel="me"><img src="../../static/github-square.svg" class="icon" /></a>
          <a href="https://twitter.com/u_map_prop" rel="me"><img src="../../static/twitter-square.svg" class="icon" /></a>
          <a href="https://mathstodon.xyz/web/@olynch" rel="me"><img src="../../static/mastodon.svg" class="icon" /></a>
          <a href="https://www.youtube.com/channel/UCy1qDmvpYPmsYaHe51UzwIA" rel="me"><img src="../../static/youtube.svg" class="icon" /></a>
          <a href="../../rss.xml"><img src="../../static/rss.svg" class="icon" /></a>
        </div>
      </div>

      <hr />

      <div class="content main article">
        
<article class="h-entry">
    <h1>Mathematical Classes</h1>
    <div class="p-name" hidden>Mathematical Classes</div>

    <div class="info">
        Posted on <time class="dt-published" datetime="May  1, 2021">May  1, 2021</time>
        by <a class="p-author h-card" href="https://owenlynch.org">Owen Lynch</a>
    </div>

    <div class="e-content">
    <p>If mathematics were a game of Dungeons and Dragons, the character classes that would be most highly venerated are the wizards and sorcerors. Wizards are figures like Grothendieck and Noether, people who built huge towering edifices of theory and were masters of the formal. Sorcerors are people like Von Neumann and Ramanujan, mathematicians whose incredible intuitive facilities led them to make massive leaps at which others could only boggle.</p>
<p>Of course, mathematicians don’t fall so cleanly into categories, and most famous mathematicians are both wizardly and sorcerous. But I think the distinction is interesting. And it also opens up the question, what about the other classes?</p>
<p>There are fighter mathematicians, whose up-to-date and specialized knowledge of a specific field allows them to steadily make progress. I would maybe say that Judea Pearl has fighter-like aspects; it seems like he’s been working away at causality for a long time, steadily building and integrating with other fields. For some reason, I also think of Emily Riehl in this way; it seems like she has a strong goal (i.e., making a language for infinity category theory) and is systematically attacking it piece by piece, though I am not tuned in enough to know whether this is an accurate description.</p>
<p>Cleric mathematicians, I could interpret this in two ways. The first way is that maybe a cleric mathematician is one who refactors knowledge. In this sense, I’d say that Bill Lawvere is cleric-y. Another interpretation is that a cleric mathematician is a very good teacher, one who heals their students’ misunderstandings. As I haven’t been taught by many famous mathematicians, I can’t give a terribly famous example, but I would say that Melody Chan is pretty cleric-y, among the teachers that I have had.</p>
<p>What would a rogue mathematician be? I think a rogue mathematician would be someone who steals lots of ideas from other fields and integrates them into new fields. I think the whole field of applied category theory is rather rogue-ish. I don’t know though, I could think about this in different ways.</p>
<p>A <em>bard</em> mathematician, on the other hand, I have a very firm grasp on. These are the mathematicians who know a bit of everything, and spread their knowledge widely through collaboration, writings, and song. There are two bard mathematicians that immediately jump to my mind: John Baez and Paul Erdos. In my mind, the bards are the mathematicians that glue mathematics together, giving it <em>tradition</em> and forging bonds between theories and people. Another strain of bardy-ness are the mathematicians who spend a lot of time illustrating things, like Robert Ghrist or Grant Sanderson of 3Blue1Brown fame.</p>
<p>I think that there is a growing appreciation that wizards and sorcerors are not the be all and end all of what the ideal mathematician should look like, and I think this is a good thing! I don’t really have anything more profound to say in terms of the implications of this, I mainly just thought the classification was interesting.</p>
<p>There are more D&amp;D classes, but their correspondence with mathematical archetypes is left to the reader!</p>
    </div>

    
    
</article>

<hr>

This website supports <emph>webmentions</emph>, a standard for collating reactions across many platforms. If you have a blog that supports sending webmentions and you put a link to this post, your blog post will show up as a response here.

You can also <a href="https://twitter.com/intent/tweet?text=https%3A%2F%2Fowenlynch.org%2Fposts%2F2021-05-01-mathematical-classes%2F">respond via twitter</a> or respond via mastodon (on your preferred mastodon server); through the magic of <a href="https://brid.gy">brid.gy</a> all tweets or toots with links to this post will show up below (subject to moderation).

<script src="../../static/webmention.min.js" async></script>

<div id="webmentions">div</div>

      </div>

      <hr />

      <div class="main">
        Site proudly generated by
        <a href="http://jaspervdj.be/hakyll">Hakyll</a>
        with stylistic inspiration from <a href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
      </div>
    </div>
  </body>
</html>
]]></description>
    <pubDate>Sat, 01 May 2021 00:00:00 UT</pubDate>
    <guid>https://owenlynch.org/posts/2021-05-01-mathematical-classes</guid>
    <dc:creator>Owen Lynch</dc:creator>
</item>
<item>
    <title>Dictator Island Chapter 1</title>
    <link>https://owenlynch.org/posts/2021-01-04-dictator-island-1</link>
    <description><![CDATA[<!doctype html>
<html lang="en">
  <head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>Dictator Island Chapter 1 | Owen Lynch</title>
  <style type="text/css">
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="../../css/default.css" />
  <link rel="stylesheet" href="../../css/syntax.css" />
  <link rel="authorization_endpoint" href="https://indieauth.com/auth" />
  <link rel="webmention" href="https://webmention.io/owenlynch.org/webmention" />
  <link rel="pingback" href="https://webmention.io/owenlynch.org/xmlrpc" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/contrib/auto-render.min.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
        inlineElements = document.getElementsByClassName('math inline');
        displayElements = document.getElementsByClassName('math display');
        for (i = 0; i < inlineElements.length; i++) {
            e = inlineElements[i]
            try {
                katex.render(e.innerHTML, e, { displayMode: false });
            } catch (error) {
                console.error(error);
            }
        }
        for (i = 0; i < displayElements.length; i++) {
            e = displayElements[i]
            try {
              katex.render(e.innerHTML, e, { displayMode: true });
            } catch (error) {
                console.error(error)
            }
        }
    });
  </script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.css" />
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->


  </head>
  <body>
    <div class="container">
      <div class="menu">
        <div class="mainbar-links">
          <h2><a href="../../">Home</a> <a href="../../blog">Blog</a> <a href="../../output">Output</a></h2>
        </div>
        <div class="social-icons">
          <a href="https://github.com/olynch" rel="me"><img src="../../static/github-square.svg" class="icon" /></a>
          <a href="https://twitter.com/u_map_prop" rel="me"><img src="../../static/twitter-square.svg" class="icon" /></a>
          <a href="https://mathstodon.xyz/web/@olynch" rel="me"><img src="../../static/mastodon.svg" class="icon" /></a>
          <a href="https://www.youtube.com/channel/UCy1qDmvpYPmsYaHe51UzwIA" rel="me"><img src="../../static/youtube.svg" class="icon" /></a>
          <a href="../../rss.xml"><img src="../../static/rss.svg" class="icon" /></a>
        </div>
      </div>

      <hr />

      <div class="content main article">
        
<article class="h-entry">
    <h1>Dictator Island Chapter 1</h1>
    <div class="p-name" hidden>Dictator Island Chapter 1</div>

    <div class="info">
        Posted on <time class="dt-published" datetime="January  4, 2021">January  4, 2021</time>
        by <a class="p-author h-card" href="https://owenlynch.org">Owen Lynch</a>
    </div>

    <div class="e-content">
    <p>Ever since he was a child, Generalissimo Carlos van Witteboom-Diaz hated Wednesdays. Wednesdays were the day that they had music class, every week for every year of grades 1-7, until civil war broke out and school ended for Carlos permanently.</p>
<p>Until that happy day, each Wednesday Carlos’s class sang dumb songs about animals on farms and love and life in the country, and Carlos’s voice would squeek and crach until he could bear it no longer and refused to sing another note, at which point he would be forced to sit in a corner. But that wasn’t the worst part. The worst part came after the singing, after the tears of shame had started to dry. The worst part was the recorders.</p>
<p>These recorders had been carved by hand out of wood approximately a millenia ago, which might have made them more valueable than your standard modern plastic recorder in another context, but as they were, it created two key disadvantages.</p>
<p>The first was that they had begun to splinter. One Wednesday, Carlos had been sent to the Nurse’s office with a wood splinter in his gum lodged by a involuntary twitch in response to a particularly shrill and out of tune E♭, and the wound had festered for months; he had been unable to eat anything that put up more a fight than a refried bean.</p>
<p>The second disadvantage of wood was that the slobber from all eight grades of the school never quite seemed to dry. Carlos suspected that a small fraction of the town’s budget went towards recorder-slobber related illnesses.</p>
<p>But even refusing to let the filthy thing go anywhere near his mouth did not exempt him from its torments, for he was still forced to be in the room as all the other children push tortured air through the decrepit pipes, tortured air that only though of escaping the lungs of his oblivious classmates and venting all of its trauma and heartbreak approximately 3 inches away from Carlos’s ear, like a soap opera star that had aged out of the profession but had not lost a single decibel of her voice.</p>
<p>So one of Carlos’s first acts as Generalissimo was to ban both recorders and Wednesdays. He didn’t ban singing, seeing as that would be rather difficult, but it was well known that anyone who allowed singing to come into his presence would suffer a rapid loss of favor, which typically came accompanied with several other unpleasant things.</p>
<p>His advisors were quite happy with the recorders ban, which was easy to implement because nobody other than sadistic music teachers really likes recorders, but the Wednesday ban was trickier.</p>
<p>They first tried to rename Wednesday to Carlosday, but the Generalissimo said through icy gritted teeth that anyone so foolish as to think that the name of their great Generalissimo should adorn that cursed day did not deserve the air in their lungs, and that put an end to that plan.</p>
<p>The next plan they tried was to remove Wednesdays and add Carlosday to the end of the week, so that their week would still sync up with the rest of the world even though they used different names. But Carlos would have none of that either; it would ruin Thursday.</p>
<p>Finally, they gave up and did everything on a six day schedule. Monday, Tuesday, Thursday, Friday, Saturday and Sunday were the days of the week in New Barcelona, and all tourists and multinational corporations doing business with country would simply have to print two copies of all of their calenders and schedules.</p>
<p>On Dictator Island, where nobody responded “how far” when ex-dictators asked them to jump, Generalissimo Carlos van Witteboom-Diaz celebrated his first Wednesday in 31 years, 8 months, and 22 days by beating his butler, who had brought him breakfast in bed while whistling a old song, senseless with his oak walking stick, before the U.S. Marshall posted outside kicked the door off its hinges and tackled the 73 year-old to the ground.</p>
    </div>

    
    
</article>

<hr>

This website supports <emph>webmentions</emph>, a standard for collating reactions across many platforms. If you have a blog that supports sending webmentions and you put a link to this post, your blog post will show up as a response here.

You can also <a href="https://twitter.com/intent/tweet?text=https%3A%2F%2Fowenlynch.org%2Fposts%2F2021-01-04-dictator-island-1%2F">respond via twitter</a> or respond via mastodon (on your preferred mastodon server); through the magic of <a href="https://brid.gy">brid.gy</a> all tweets or toots with links to this post will show up below (subject to moderation).

<script src="../../static/webmention.min.js" async></script>

<div id="webmentions">div</div>

      </div>

      <hr />

      <div class="main">
        Site proudly generated by
        <a href="http://jaspervdj.be/hakyll">Hakyll</a>
        with stylistic inspiration from <a href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
      </div>
    </div>
  </body>
</html>
]]></description>
    <pubDate>Mon, 04 Jan 2021 00:00:00 UT</pubDate>
    <guid>https://owenlynch.org/posts/2021-01-04-dictator-island-1</guid>
    <dc:creator>Owen Lynch</dc:creator>
</item>
<item>
    <title>Coends and Integrals</title>
    <link>https://owenlynch.org/posts/2020-11-21-ends-and-integrals</link>
    <description><![CDATA[<!doctype html>
<html lang="en">
  <head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>Coends and Integrals | Owen Lynch</title>
  <style type="text/css">
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="../../css/default.css" />
  <link rel="stylesheet" href="../../css/syntax.css" />
  <link rel="authorization_endpoint" href="https://indieauth.com/auth" />
  <link rel="webmention" href="https://webmention.io/owenlynch.org/webmention" />
  <link rel="pingback" href="https://webmention.io/owenlynch.org/xmlrpc" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/contrib/auto-render.min.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
        inlineElements = document.getElementsByClassName('math inline');
        displayElements = document.getElementsByClassName('math display');
        for (i = 0; i < inlineElements.length; i++) {
            e = inlineElements[i]
            try {
                katex.render(e.innerHTML, e, { displayMode: false });
            } catch (error) {
                console.error(error);
            }
        }
        for (i = 0; i < displayElements.length; i++) {
            e = displayElements[i]
            try {
              katex.render(e.innerHTML, e, { displayMode: true });
            } catch (error) {
                console.error(error)
            }
        }
    });
  </script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.css" />
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->


  </head>
  <body>
    <div class="container">
      <div class="menu">
        <div class="mainbar-links">
          <h2><a href="../../">Home</a> <a href="../../blog">Blog</a> <a href="../../output">Output</a></h2>
        </div>
        <div class="social-icons">
          <a href="https://github.com/olynch" rel="me"><img src="../../static/github-square.svg" class="icon" /></a>
          <a href="https://twitter.com/u_map_prop" rel="me"><img src="../../static/twitter-square.svg" class="icon" /></a>
          <a href="https://mathstodon.xyz/web/@olynch" rel="me"><img src="../../static/mastodon.svg" class="icon" /></a>
          <a href="https://www.youtube.com/channel/UCy1qDmvpYPmsYaHe51UzwIA" rel="me"><img src="../../static/youtube.svg" class="icon" /></a>
          <a href="../../rss.xml"><img src="../../static/rss.svg" class="icon" /></a>
        </div>
      </div>

      <hr />

      <div class="content main article">
        
<article class="h-entry">
    <h1>Coends and Integrals</h1>
    <div class="p-name" hidden>Coends and Integrals</div>

    <div class="info">
        Posted on <time class="dt-published" datetime="November 21, 2020">November 21, 2020</time>
        by <a class="p-author h-card" href="https://owenlynch.org">Owen Lynch</a>
    </div>

    <div class="e-content">
    <h1 id="introduction">Introduction</h1>
<p>Here I was, browsing through twitter, and I came across an innocuous <a href="https://twitter.com/AlexKontorovich/status/1330175610417721345?s=20">tweet</a> by Alex Kontorovitch…. Or was it?</p>
<p>First of all, a warning. This is more of a “new result” blog post than it is a “explaining something that already exists”, so I hate to say it but if you are not familiar with coends or differential forms, the rest of this will be pretty gobbledigookish.</p>
<p>As I assume the reader is familiar with, there’s a well-known construction in category theory called an <em>coend</em>, which produces an element of <span class="math inline">\mathsf{D}</span> from a profunctor <span class="math inline">P \colon \mathsf{C}^{\mathrm{op}} \times \mathsf{C} \to \mathsf{D}</span>. The notation for it looks like this</p>
<p><span class="math display"> \int^{c \in \mathsf{C}} P(c,c) \in \mathsf{D}</span></p>
<p>It has this notation because it has a lot of properties that are very reminiscent of integrals. Coends (and their dual, ends) are very useful for a lot of constructions in category theory, except for, funnily enough, calculus. Or at least, so I’ve been told; perhaps the correspondence that I am about to make has already been done.</p>
<p>Anyways, plowing ahead, I am going to do a construction that relates coends and actual integrals, and it may or may not be original, so hold onto your seats folks.</p>
<h1 id="the-construction">The Construction</h1>
<p>Let <span class="math inline">M</span> be a manifold. Then for any <span class="math inline">k</span>, define <span class="math inline">C_{k}(M)</span> to be the <span class="math inline">\mathbb{R}</span>-algebra freely generated by all differentiable maps <span class="math inline">\Delta^{k} \to M</span>, where <span class="math inline">\Delta^{k}</span> is the <span class="math inline">k</span> -simplex. As we are familiar with from simplicial homology, this turns into a chain complex, with a “boundary map” <span class="math inline">\partial_{k} \colon C_{k}(M) \to C_{k-1}(M)</span>.</p>
<p>We also have another chain complex, this one coming from de Rham cohomology, and given in degree <span class="math inline">k</span> by <span class="math inline">\Omega^{k}(M)</span>, the <span class="math inline">\mathbb{R}</span>-algebra of <span class="math inline">k</span>-dimensional differential forms on <span class="math inline">M</span>.</p>
<p>If <span class="math inline">\mathbb{N}</span> is the poset of natural numbers, seen as a category by adding a unique arrow <span class="math inline">m \to n</span> when <span class="math inline">m \leq n</span>, then <span class="math inline">C_{-}(M)</span> is a contravariant functor from <span class="math inline">\mathbb{N}</span>, and <span class="math inline">\Omega^{-}(M)</span> is a covariant functor from <span class="math inline">\mathbb{N}</span>.</p>
<p>Now, if <span class="math inline">\sigma \colon \Delta^{k} \to M</span> is a differentiable map, then we can integrate a <span class="math inline">k</span>-form <span class="math inline">\omega \in \Omega^{k}(M)</span> along it to get</p>
<p><span class="math display"> \int_{\sigma(\Delta^{k})} \omega \in \mathbb{R}</span></p>
<p>For notational reasons, I define <span class="math inline">\mathrm{int}_{k}(\sigma,\omega)</span> to be this integral; from henceforth the integral sign will be reserved for coends. We extend <span class="math inline">\mathrm{int}_{k}(-,\omega)</span> to be a map <span class="math inline">C_{k}(M) \to \mathbb{R}</span> using the fact that <span class="math inline">C_{k}(M)</span> is the free <span class="math inline">\mathbb{R}</span>-algebra on maps <span class="math inline">\Delta^{k} \to M</span>. With a bit of work, one can show that this is a map <span class="math inline">\mathrm{int}_{k} \colon C_{k}(M) \otimes \Omega^{k}(M) \to \mathbb{R}</span>, because <span class="math inline">\mathrm{int}_{k} \colon C_{k}(M) \times \Omega^{k}(M) \to \mathbb{R}</span> is bilinear.</p>
<p>We can glue together these maps for all <span class="math inline">k</span> to get a map</p>
<p><span class="math display"> \mathrm{int} \colon \coprod_{k \in \mathbb{N}} C_{k}(M) \otimes \Omega^{k}(M) \to \mathbb{R} </span></p>
<p>Now comes the fun part. Stoke’s theorem says that <span class="math inline">\mathrm{int}_{k}(\partial \sigma, \omega) = \mathrm{int}_{k+1}(\sigma, \delta \omega)</span>. This precisely satisfies the universal property of the coend! That is, recall that the coend of the profunctor <span class="math inline">C_{-}(M) \otimes \Omega^{-}(M)</span> is the colimit of</p>
<p><span class="math display"> \coprod_{n \leq m} C_{m}(M) \otimes \Omega^{n}(M) \rightrightarrows \coprod_{k} C_{k}(M) \otimes \Omega^{k}(M) </span></p>
<p>where the two maps apply the morphism <span class="math inline">n \leq m</span> contravariantly to <span class="math inline">C_{m}(M)</span> (i.e., <span class="math inline">\partial^{m - n}</span>), or covariantly to <span class="math inline">\Omega^{n}(M)</span> (i.e. <span class="math inline">\delta^{m-n}</span>). As <span class="math inline">\delta^{2} = 0</span> and <span class="math inline">\partial^{2} = 0</span>, the only interesting case is <span class="math inline">m = n+1</span>, and Stoke’s theorem precisely states that in that case, the images of those two maps integrate to the same thing! Therefore, we can extend <span class="math inline">\mathrm{int}</span> to a <span class="math inline">\mathbb{R}</span>-algebra morphism</p>
<p><span class="math display"> \mathrm{int} \colon \int^{k \in \mathbb{N}} C_{k}(M) \otimes \Omega^{k}(M) \to \mathbb{R} </span></p>
<p>What is this strange <span class="math inline">\mathbb{R}</span>-algebra called <span class="math inline">\int^{k \in \mathbb{N}} C_{k}(M) \otimes \Omega^{k}(M)</span>? I have no idea. I don’t know if this algebra goes by another name, or is interesting for any reason. But I do believe that this construction is functorial in <span class="math inline">M</span>, so this gives a functor from manifolds to <span class="math inline">\mathbb{R}</span>-algebras, which one might hope preserves things that are important.</p>
<p>Mainly, I’m just happy that coends have any relation to integrals. Also, I wonder if the different properties that coends have (i.e., Fubini’s theorem, Hom-functor as Dirac delta) can somehow be brought to bear on this construction.</p>
<p>Send me thoughts about this!</p>
    </div>

    
    
</article>

<hr>

This website supports <emph>webmentions</emph>, a standard for collating reactions across many platforms. If you have a blog that supports sending webmentions and you put a link to this post, your blog post will show up as a response here.

You can also <a href="https://twitter.com/intent/tweet?text=https%3A%2F%2Fowenlynch.org%2Fposts%2F2020-11-21-ends-and-integrals%2F">respond via twitter</a> or respond via mastodon (on your preferred mastodon server); through the magic of <a href="https://brid.gy">brid.gy</a> all tweets or toots with links to this post will show up below (subject to moderation).

<script src="../../static/webmention.min.js" async></script>

<div id="webmentions">div</div>

      </div>

      <hr />

      <div class="main">
        Site proudly generated by
        <a href="http://jaspervdj.be/hakyll">Hakyll</a>
        with stylistic inspiration from <a href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
      </div>
    </div>
  </body>
</html>
]]></description>
    <pubDate>Sat, 21 Nov 2020 00:00:00 UT</pubDate>
    <guid>https://owenlynch.org/posts/2020-11-21-ends-and-integrals</guid>
    <dc:creator>Owen Lynch</dc:creator>
</item>
<item>
    <title>At Long Last, a Good Julia Setup</title>
    <link>https://owenlynch.org/posts/2020-10-23-julia-setup</link>
    <description><![CDATA[<!doctype html>
<html lang="en">
  <head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>At Long Last, a Good Julia Setup | Owen Lynch</title>
  <style type="text/css">
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="../../css/default.css" />
  <link rel="stylesheet" href="../../css/syntax.css" />
  <link rel="authorization_endpoint" href="https://indieauth.com/auth" />
  <link rel="webmention" href="https://webmention.io/owenlynch.org/webmention" />
  <link rel="pingback" href="https://webmention.io/owenlynch.org/xmlrpc" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/contrib/auto-render.min.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
        inlineElements = document.getElementsByClassName('math inline');
        displayElements = document.getElementsByClassName('math display');
        for (i = 0; i < inlineElements.length; i++) {
            e = inlineElements[i]
            try {
                katex.render(e.innerHTML, e, { displayMode: false });
            } catch (error) {
                console.error(error);
            }
        }
        for (i = 0; i < displayElements.length; i++) {
            e = displayElements[i]
            try {
              katex.render(e.innerHTML, e, { displayMode: true });
            } catch (error) {
                console.error(error)
            }
        }
    });
  </script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.15.3/katex.min.css" />
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->


  </head>
  <body>
    <div class="container">
      <div class="menu">
        <div class="mainbar-links">
          <h2><a href="../../">Home</a> <a href="../../blog">Blog</a> <a href="../../output">Output</a></h2>
        </div>
        <div class="social-icons">
          <a href="https://github.com/olynch" rel="me"><img src="../../static/github-square.svg" class="icon" /></a>
          <a href="https://twitter.com/u_map_prop" rel="me"><img src="../../static/twitter-square.svg" class="icon" /></a>
          <a href="https://mathstodon.xyz/web/@olynch" rel="me"><img src="../../static/mastodon.svg" class="icon" /></a>
          <a href="https://www.youtube.com/channel/UCy1qDmvpYPmsYaHe51UzwIA" rel="me"><img src="../../static/youtube.svg" class="icon" /></a>
          <a href="../../rss.xml"><img src="../../static/rss.svg" class="icon" /></a>
        </div>
      </div>

      <hr />

      <div class="content main article">
        
<article class="h-entry">
    <h1>At Long Last, a Good Julia Setup</h1>
    <div class="p-name" hidden>At Long Last, a Good Julia Setup</div>

    <div class="info">
        Posted on <time class="dt-published" datetime="October 23, 2020">October 23, 2020</time>
        by <a class="p-author h-card" href="https://owenlynch.org">Owen Lynch</a>
    </div>

    <div class="e-content">
    <p>I was inspired to write this post because I’ve been programming Julia for the last year, and only now have I found a setup that I like. This is partly because I am on NixOS, and partly because I like emacs, so you may very well already have a nice Julia setup and in that case can ignore this. But for those of you who are slightly unsatisfied… read on!</p>
<p>The key ingredients are <em>docker</em>, <em>jupyter</em>, and <em>doom-emacs</em>.</p>
<p>First off, I have a docker file that looks like this:</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode dockerfile"><code class="sourceCode dockerfile"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true"></a><span class="kw">FROM</span> julia:1.5</span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true"></a><span class="kw">MAINTAINER</span> Owen Lynch &lt;root@owenlynch.org&gt;</span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true"></a></span>
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true"></a><span class="kw">RUN</span> apt-get update &amp;&amp; apt-get install texlive-full graphviz -y</span>
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true"></a></span>
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true"></a><span class="kw">RUN</span> apt-get update &amp;&amp; apt-get install at-spi2-core libgtk-3-dev xauth xvfb libqt5widgets5 -y</span>
<span id="cb1-7"><a href="#cb1-7" aria-hidden="true"></a></span>
<span id="cb1-8"><a href="#cb1-8" aria-hidden="true"></a><span class="kw">ENV</span> PATH=/root/.julia/conda/3/bin:$PATH</span></code></pre></div>
<p>Periodically I add more packages to this; I don’t particularly remember why I needed all of those packages but whatever.</p>
<p>I then run this docker container with bind mounts for everything in the root folder. This means that I don’t have to reinstall packages every time I restart the docker container. My script to open up a bash shell in the container looks like this</p>
<div class="sourceCode" id="cb2"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true"></a><span class="co">#!/usr/bin/env bash</span></span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true"></a><span class="ex">docker</span> run -it -p 8888:8888 -v /home/o/g:/g -v /home/o/s/docker-julia-home:/root julia-tex bash</span></code></pre></div>
<p>When I first set up the container, I run this script to go into a bash shell, and I open a Julia REPL to install IJulia. This installs conda and Jupyter for me automatically, which is nice because then python dependencies are also managed through Julia. I love Nix, but Julia just does not play nicely with it, so I’ve found it’s best to just give Julia free reign to do whatever it wants to a docker container.</p>
<p>Once I’ve installed IJulia and Jupyter, I close the bash shell, and run this</p>
<div class="sourceCode" id="cb3"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true"></a><span class="co">#!/usr/bin/env bash</span></span>
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true"></a><span class="ex">docker</span> run -it -p 8888:8888 -v /home/o/g:/g -v /home/o/s/docker-julia-home:/root julia /root/.julia/conda/3/bin/jupyter lab --ip=0.0.0.0 --allow-root</span></code></pre></div>
<p>At this point, you can access the jupyter lab through a webbrowser at <code>localhost:8888</code>, which is convenient. However, this doesn’t stop there!</p>
<p>The next step is <a href="https://github.com/nnicandro/emacs-jupyter">emacs-jupyter</a>. I have this installed through doom emacs with the layer <code>(org +jupyter)</code>, you may have a better way of installing it. I don’t really use it with org mode most of the time so… *shrug*.</p>
<p>Anyways, once this is installed, I run the command <code>jupyter-run-server-repl</code> and then pass in the connection details for the Jupyter server in docker to the prompts. This opens a repl in Emacs that has support for inline images, which is really nice for plots. Finally, I open up a Julia file and run <code>jupyter-repl-associate-buffer</code>. This allows me to use key combinations like <code>C-c C-c</code> to evaluate a region, or <code>C-c C-b</code> to evaluate the whole buffer.</p>
<p>And that’s pretty much it! This will allow you to use Julia in emacs without permanently installing anything on your computer, and should work well anywhere where docker bind mounts work. In the future, I might look into running PackageCompiler to get Jupyter kernels that load IJulia and Plots faster, but I’m not going to worry about that yet.</p>
<p>This setup should also work with Python and R, but I haven’t used it very much for that, so YMMV.</p>
    </div>

    
    
</article>

<hr>

This website supports <emph>webmentions</emph>, a standard for collating reactions across many platforms. If you have a blog that supports sending webmentions and you put a link to this post, your blog post will show up as a response here.

You can also <a href="https://twitter.com/intent/tweet?text=https%3A%2F%2Fowenlynch.org%2Fposts%2F2020-10-23-julia-setup%2F">respond via twitter</a> or respond via mastodon (on your preferred mastodon server); through the magic of <a href="https://brid.gy">brid.gy</a> all tweets or toots with links to this post will show up below (subject to moderation).

<script src="../../static/webmention.min.js" async></script>

<div id="webmentions">div</div>

      </div>

      <hr />

      <div class="main">
        Site proudly generated by
        <a href="http://jaspervdj.be/hakyll">Hakyll</a>
        with stylistic inspiration from <a href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
      </div>
    </div>
  </body>
</html>
]]></description>
    <pubDate>Fri, 23 Oct 2020 00:00:00 UT</pubDate>
    <guid>https://owenlynch.org/posts/2020-10-23-julia-setup</guid>
    <dc:creator>Owen Lynch</dc:creator>
</item>

    </channel>
</rss>
