<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>PLs on Elliot's Blog</title><link>https://ebobrow.github.io/tags/pls/</link><description>Recent content in PLs on Elliot's Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 08 Apr 2026 09:54:44 -0700</lastBuildDate><atom:link href="https://ebobrow.github.io/tags/pls/index.xml" rel="self" type="application/rss+xml"/><item><title>Equality in Type Theory</title><link>https://ebobrow.github.io/posts/2026-04-08-equality/</link><pubDate>Wed, 08 Apr 2026 09:54:44 -0700</pubDate><guid>https://ebobrow.github.io/posts/2026-04-08-equality/</guid><description>&lt;p&gt;As math gets more advanced, the things you prove get dumber and dumber. In
Calculus, you prove really cool things like &amp;ldquo;This sum of infinitely many real
numbers equals a finite number!&amp;rdquo; Then you take Analysis where you have to
explain &amp;ldquo;What is infinity?&amp;rdquo; and &amp;ldquo;What is a real number?&amp;rdquo; and &amp;ldquo;What is equals?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The answer to the last question, as it turns out, is, &amp;ldquo;Nobody knows.&amp;rdquo;&lt;/p&gt;
&lt;h2 id="word-to-the-wise"&gt;Word to the Wise&lt;/h2&gt;
&lt;p&gt;The secret to PL theory is that we take a collection of very common symbols,
strip them of their meaning entirely, and then build it back from the ground up.
For the rest of this post, to protect your sanity, kindly forget everything you
think you know about $\equiv$ and $=$. We may as well use 🐒 and 🪕.&lt;/p&gt;</description></item><item><title>Why is it called Call-By-Push-Value?</title><link>https://ebobrow.github.io/posts/2026-03-08-cbpv/</link><pubDate>Sun, 08 Mar 2026 10:07:53 -0700</pubDate><guid>https://ebobrow.github.io/posts/2026-03-08-cbpv/</guid><description>&lt;p&gt;Call-by-push-value (CBPV) is a programming language that subsumes call-by-name
(CBN) and call-by-value (CBV) semantics, making it useful to reason about
effectful computations. But why is it called that?&lt;/p&gt;
&lt;h2 id="call-by-name-and-call-by-value"&gt;Call-by-name and call-by-value&lt;/h2&gt;
&lt;p&gt;First, we should motivate CBPV by explaining what CBN and CBV are. To start out
with, we will only consider the basic lambda calculus with no effects. The
important rule here when expressing the lambda calculus&amp;rsquo;s semantics is
$\beta$-reduction: How do we apply a function?&lt;/p&gt;</description></item><item><title>Semantics</title><link>https://ebobrow.github.io/posts/2025-07-26-semantics/</link><pubDate>Sat, 26 Jul 2025 16:58:31 +0200</pubDate><guid>https://ebobrow.github.io/posts/2025-07-26-semantics/</guid><description>&lt;p&gt;There are two important aspects in the study of programming languages as formal
mathematical objects: syntax (or statics) and semantics (or dynamics). The syntax
specification includes an (often inductive) definition of well-formed terms in
the language, as well as, in typed languages, a specification of the typing
judgment. There is plenty of interesting stuff to study in syntax, but this blog
post is about semantics. Semantics is about assigning actual meaning to terms in
the language. This is important for reasoning about, for example, correctness,
equivalence, or termination. Depending on your language and use case, there are
many different ways to specify the semantics. This post is a survey of what I
have experienced to be the most common ones.&lt;/p&gt;</description></item><item><title>What even is type theory?</title><link>https://ebobrow.github.io/posts/type-theory/</link><pubDate>Fri, 23 May 2025 19:08:38 -0700</pubDate><guid>https://ebobrow.github.io/posts/type-theory/</guid><description>&lt;p&gt;The problem with being self-taught in PLs is that I sort of learned everything
at the same time, which means I did not get a good sense of what things fall in
what categories. In this post I seek to determine, once and for all, what is
type theory and what is not. To do that, we&amp;rsquo;re going to back it way up and start
at the very beginning.&lt;/p&gt;
&lt;h2 id="logic"&gt;Logic&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s easier to begin to answer this question with what is not type theory.
In other words, some of the things that I know about typing systems are just
true of logic in general.&lt;/p&gt;</description></item><item><title>MU Puzzle in Automated Theorem Provers</title><link>https://ebobrow.github.io/posts/miu/</link><pubDate>Wed, 21 May 2025 08:20:28 -0700</pubDate><guid>https://ebobrow.github.io/posts/miu/</guid><description>&lt;p&gt;I recently began re-reading &lt;em&gt;Gödel, Escher, Bach&lt;/em&gt; and was intrigued by the MU
puzzle, which is Hofstadter&amp;rsquo;s introduction to formal systems. The puzzle is
this: the MIU language consists of the &amp;ldquo;axiom&amp;rdquo; &lt;em&gt;MI&lt;/em&gt; as well as all strings
constructed according to the following four rules.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;If you have the string &lt;em&gt;xI&lt;/em&gt;, then you can construct the string &lt;em&gt;xIU&lt;/em&gt; (where
&lt;em&gt;x&lt;/em&gt; is any string of any length).&lt;/li&gt;
&lt;li&gt;If you have &lt;em&gt;Mx&lt;/em&gt;, then you can construct &lt;em&gt;Mxx&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;If &lt;em&gt;III&lt;/em&gt; appears anywhere in a string, you can replace it with &lt;em&gt;U&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;If &lt;em&gt;UU&lt;/em&gt; appears anywhere in a string, you can remove it.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Can you ever construct the string &lt;em&gt;MI&lt;/em&gt;?&lt;/p&gt;</description></item></channel></rss>