+48
-1
aggregate_feeds.py
+48
-1
aggregate_feeds.py
··················
+1
-159
eeg.xml
+1
-159
eeg.xml
···-<p><a href="https://www.dell.com/support/manuals/en-uk/poweredge-r640/per640_ism_pub/general-memory-module-installation-guidelines?guid=guid-acbc0f13-dedb-492b-a0b0-18303ded565a&amp;lang=en-us">Dell R640 has 24 DIMM slots</a></p></summary><category term="Tunbury.ORG"></category></entry><entry><title>Weeknotes 2025-W15</title><link href="https://www.jonmsterling.com/2025-W15/" rel="alternate"></link><published>2025-04-09T13:53:56Z</published><updated>2025-04-09T13:53:56Z</updated><author><name>JonS</name></author><id>https://www.jonmsterling.com/2025-W15/</id><summary type="html"><p>I have a lot to say this week, so strap in.</p>-<h2><a href="https://www.forester-notes.org/jms-011P/">Forester 5.0</a> development: canonical URLs, atom feeds, and LSP</h2>-<p>Work on <a href="https://www.forester-notes.org/jms-011P/">Forester 5.0</a> proceeds apace, generously supported by <a href="https://www.jonmsterling.com/jms-00XB/">ARIA</a> who have engaged <a href="https://www.jonmsterling.com/kentookura/">Kento Okura</a> and myself on a consulting basis to support their internal use of Forester. My recent goals have been to bring Forester closer in line with the architecture of the World Wide Web; to that end, I have made two big improvements.</p>-<p>Trees are addressed by “canonical URLs” that are meant to be the place where they will ultimately be published. See <a href="https://www.forester-notes.org/JVIT/">my blog post</a> on the design for more details. Canonical URLs are of the form <code>https://www.my-host.net/tree-name/</code>; the handling is a little fragile right now and you can expect bugs (but please write to me about them).</p>-<p>It is now possible to syndicate the children of a tree as an Atom feed. This is done currently by including the following directive in the tree you wish to syndicate:</p>-<p>Then, if your tree is located at <code>https://www.my-host.net/tree-name/</code>, you will find that there is an atom feed at <code>https://www.my-host.net/tree-name/atom.xml</code>. There are many subtleties to this, and the atom support will continue to evolve and improve. One thing I need to deal with is the fact that Forester produces nested hyperlinks—which are not valid in HTML! I came up with a pretty slick way to <a href="https://git.sr.ht/~jonsterling/forester-base-theme/commit/a251f9cf19b0ff42f4553d315df5181b985c79cb">handle this in XSLT</a>, but that Atom renderer is intended to bypass that entirely.</p>-<p>As a side note, I am very happy to see that I am <a href="https://patrick.sirref.org/weekly-2025-03-31/">not the only person</a> using the new support for Atom feeds. Patrick’s fork of Forester is looking pretty cool, and I am excited to learn more from what he is doing. I’m also relieved that he was able to get rebased atop the ever-changing <code>forester-5.0-dev</code> branch.</p>-<p>One thing I want to start designing soon is how best to handle federated forests. Right now, Forester bundles all the imported material under a <code>foreign/my-friends-host/</code> directory and routes all links accordingly, but in many (but not all!) cases one would want to not bundle things at all and instead have links routed directly to the canonical URLs as published on the World Wide Web. I am not sure of the best design for this, so I welcome feedback. In the meanwhile, enjoy the janky prototype feel.</p>-<p><a href="https://www.jonmsterling.com/kentookura/">Kento</a> is hard at work hardening Forester’s language server. I am hoping that we will have something to show on the scale of a week.</p>-<p>There were some subtleties about how to provide completion information at a source location—which is at least as complex as the expander itself, since scope emerges from the expansion process. We had something fairly broken in place, which I have spent Thursday and Friday morning replacing with something cool using OCaml 5’s effects and handlers. The idea is to instrument the expander with an effect that notifies observes that it has entered a source range; this can be handled as a no-op, <em>or</em> by querying the scope’s available symbols when it enters the desired range and throwing away the continuation, and resuming the continuation otherwise to keep searching. This approach allows all the scope-handling code to be unified into a single routine, whose behaviour is controlled by effect handlers on the outside.</p>-<p>As a side note, I am looking forward to when the next version of <a href="https://topiary.tweag.io/">Topiary</a> is released, which should contain support for formatting OCaml’s effect handlers. Right now we don’t use the nice notation because we are stuck on Topiary 0.6.0.</p>-<h2><a href="https://www.jonmsterling.com/jms-019E/">Project Pterosaur</a>: yes, I’m building a new proof assistant</h2>-<p>I swore after building <a href="https://github.com/RedPRL/cooltt">cooltt</a>, <a href="https://github.com/RedPRL/redtt">redtt</a>, and <a href="https://github.com/RedPRL/sml-redprl">RedPRL</a> that I would never build another proof assistant, as the experience burned around four years of my PhD and resulted (at least directly) in very little publishable work—but, to be fair, I probably would not have made the <a href="https://www.jonmsterling.com/jms-0014/">key mathematical discovery</a> of my <a href="https://www.jonmsterling.com/sterling-2021-thesis/">PhD thesis</a> if it were not for these engineering experiments. But I’m back on my bullshit, as the young people say, and hard at work building a new interactive proof assistant that I have code-named <a href="https://www.jonmsterling.com/jms-019E/">Project Pterosaur</a>.</p>-<p>The goal of Pterosaur is to explore the adaptation of <em>locales</em> from Isabelle to dependent type theory, as a lightweight but extremely expressive alternative to type classes. My colleague <a href="https://www.jonmsterling.com/lawrencepaulson/">Larry Paulson</a> has written <a href="https://lawrencecpaulson.github.io/tag/locales">some great blog posts about locales in Isabelle</a>, and I strongly recommend reading Ballarin’s <a href="https://www21.in.tum.de/~ballarin/publications/jar2019.pdf">Exploring the Structure of an Algebra Text with Locales</a> to get a feel for what is possible. Here is what locales do:</p>-<ol><li>Locales appear to completely solve the pain involved when building up hierarchies of mathematical structures and notations, allowing you to effortlessly combine theories along a common core (e.g. defining rings in terms of a multiplicative monoid and an Abelian group sharing the same carrier).</li>-<li>Locales allow you to <em>add new methods</em> to a theory after the fact, and they will magically be available on anything that extended that theory. You can also add new links in the theory graph, and both cycles and diamonds are allowed so long as they are coherent; this is useful if you want to silently regard (e.g.) the space of endomaps on a set as a monoid, etc.</li></ol>-<p>In comparison to modules and type classes, the strength of locales is that you don’t have to decide ahead of time whether you want to “bundle” fields with their carriers, etc. In contrast, a great deal of the difficult work of mathematical library design and maintainance in tools like Rocq, Agda, and <a href="https://www.jonmsterling.com/jms-019G/">Lean</a> is figuring out just what things to bundle, and fixing things when your choices inevitably lead to breakage, etc. Locales avoid these problems entirely.</p>-<p>Finally, a reasonably usable locale implementation can be obtained <em>without any higher-order unification whatsoever</em>. I have a feeling that will be extremely important, given how unreliable (and <a href="https://github.com/agda/agda/issues/5837">incorrect</a>!) most implementations of higher-order unification are; the situation is so bad that it is actually an open problem to define a correct higher-order unification algorithm in the presence of singleton types (such as the unit type). I do think that this can be solved (and may have already been solved by Andras Kovacs), but my point is that the prognosis for unification in dependent type theory is bad.</p>-<h3>Experimental implementation in <a href="https://www.jonmsterling.com/jms-019G/">Lean</a></h3>-<p>The other interesting thing about Pterosaur is that I am implementing it in <a href="https://www.jonmsterling.com/jms-019G/">Lean</a>; I am not verifying anything, and am making free use of Lean’s <code>partial</code> keyword (which hides potentially divergent code from definitional equality). Instead, I am thinking of Lean as a “better OCaml”: I can’t speak to the quality of the compiler and code generator, but I can absolutely say that from the perspective of day-to-day programming, Lean has a lot of affordances that make it extremely nice to use. On the other hand, Lean’s story for modularity is not so good; but I hope they don’t “fix” it any time soon, because I think that something like locales could be a good option for Lean itself in the future if I am able to demonstrate their potential in the context of Pterosaur’s clean-room implementation.</p>-<p>I will have more to say about Pterosaur in the future, but let me leave you with a bit of demo code.</p>-cmp : (x y : f·dom·car) → Id f·cod·car (f·car (f·dom·cmp x y)) (f·cod·cmp (f·car x) (f·car y))-<h2>Two papers to appear in <a href="https://www.jonmsterling.com/lics-2025/">LICS ’25</a></h2>-<p>This week I have had two papers accepted at <a href="https://www.jonmsterling.com/lics-2025/">LICS ’25</a>; I’m excited about both of them.</p>-<h3>With <a href="https://www.jonmsterling.com/leonipugh/">Leoni Pugh</a>: <a href="https://www.jonmsterling.com/pugh-sterling-2025/">When is the partial map classifier a Sierpiński cone?</a></h3>-<p><a href="https://www.jonmsterling.com/leonipugh/">Leoni Pugh</a> is my old Part III student from 2023–2024, and this work builds on her Part III dissertation. The goal of our paper was to better understand the relationship between two approaches to partial functions in denotational semantics:</p>-<ol><li><strong>“Geometrical” partiality / “the Sierpiński cone”</strong>: freely add a lowest element to the space representing a given data type. This is useful for defining functions whose <em>inputs</em> are partially defined, because you can do a case-analysis on the definedness of the input.</li>-<li><strong>“Logical” partiality / “the partial map classifier”</strong>: representing partially defined elements of a space <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>X</mi></math> by pairs-where <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>p</mi></math> is a proposition and <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>x</mi></math> is a function from <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>isTrue</mi>-</mrow></math> to <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>X</mi></math>. This is useful for defining functions whose <em>outputs</em> are partially defined.</li></ol>-<p>In traditional domain theory as developed by <a href="https://www.jonmsterling.com/danascott/">Scott</a>, the two kinds of partiality coincide—<a href="https://www.jonmsterling.com/sterling-2024-lifting/">even constructively</a>. I am, however, interested in <a href="https://www.jonmsterling.com/hyland-1991/"><em>synthetic domain theory</em></a> which abstracts away from continuity and limits and lets you just use sets and functions rather than cpos and continuous functions—provided that you avoid non-constructive principles like the Axiom of Choice or the Law of Excluded Middle. The starting point of our work is my observation that the two notions cannot coincide <em>absolutely</em> in synthetic domain theory, but that there may be restricted subuniverses in which they do coincide. The main result of our paper is to define such a subuniverse, made possible by my discovery of the <em>based Segal condition</em>—a strengthening of the usual Segal condition for higher categories.</p>-<p>A broader motivation of this work is to develop synthetic domain theory and synthetic higher category theory within the same framework. Whereas synthetic domain theory traditionally concerned itself with spaces that behaved like ω-complete partial orders (but where all functions are automatically monotone and continuous), the same ideas (if applied within <a href="https://www.jonmsterling.com/hottbook/">homotopy type theory</a>) allow you to consider spaces that behave like <em>∞-categories</em> with colimits of ω-chains (but where all functions are automatically ∞-functorial and ω-continuous). I believe that unifying domain theory and higher category theory will prove useful for studying things like the denotational semantics of concurrency, which is inherently higher-dimensional.</p>-<h3>With <a href="https://www.jonmsterling.com/andrewslattery/">Andrew Slattery</a>: <a href="https://www.jonmsterling.com/slattery-sterling-2025/">Hofmann–Streicher lifting of fibred categories</a></h3>-<p>This year, <a href="https://www.jonmsterling.com/thomasstreicher/">Thomas Streicher</a> (born 1958) passed away from cancer. Thomas was one of the Greats of dependent type theory and he also wrote an <a href="https://www.abebooks.co.uk/9789812701428/Domain-theoretic-Foundations-Functional-Programming-Streicher-9812701427/plp">excellent textbook on domain theory for denotational semantics</a>, but much more importantly he was kind and curious and patient and always made time for young people. While I was still finding my place in the community, Thomas was very generous to me with his time and advice, and he sent me many papers to referee.</p>-<p>Although Thomas made many contributions to dependent type theory, domain theory, realisability theory, and category theory, he is most known to type theorists for two things—both in collaboration with the late <a href="https://www.jonmsterling.com/martinhofmann/">Martin Hofmann</a>: the <a href="https://www.jonmsterling.com/hofmann-streicher-1998/">groupoid interpretation of type theory</a> and the eponymous <a href="https://www.jonmsterling.com/hofmann-streicher-1997/">Hofmann–Streicher universe lifting construction</a>. Andrew and my paper pertains to the latter.</p>-<p>The idea of Hofmann–Streicher lifting has to do with universes, which are “types of types” (typically defined in such a way as to avoid paradoxes). Martin-Löf type theory usually includes universes in order to be able to quantify over (small enough) types; in the simplest models of Martin-Löf type theory, types are interpreted as sets and so Martin-Löf’s universes are interpreted as certain sets of sets, such as <a href="https://www.jonmsterling.com/sga-4/">Grothendieck universes</a>. But it is important to be able to interpret the language of type theory in more sophisticated worlds than set theory: for example, in <em>presheaves</em> (which are functors from a fixed category <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>C</mi></math> into <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>Set</mi></math>). What <a href="https://www.jonmsterling.com/hofmann-streicher-1997/">Hofmann and Streicher</a> did is show how to transform any universe of sets into a universe of presheaves!</p>-<p>Although Hofmann and Streicher’s construction worked well and had good properties, they did not find a <em>universal property</em> for it—which is an abstract description of the object that determines it uniquely up to isomorphism, usually in terms of how it relates to other objects. Recently <a href="https://www.jonmsterling.com/awodey-2024-universes/">Awodey</a> found a 1-dimensional universal property, which was the starting point of our work. What Andrew and I wanted to do is generalise Awodey’s analysis in two directions:</p>-<ol><li>We wanted a <em>2-dimensional</em> version, which is useful because it captures more about the universe than can be said in just one dimension: for example, with a 2-dimensional version, you can see immediately (by “abstract nonsense”) that Hofmann–Streicher lifting preserves structures like monads, adjunctions, etc. that might be used for modelling computational effects, etc.</li>-<li>We wanted a <em>relative</em> version, which would make it easier to iterate the Hofmann–Streicher lifting construction: the purpose of this is to be able to define presheaf models of type theory <em>internal</em> to other presheaf models. These kind of situations actually happen in practice! For example, the model of <a href="https://www.jonmsterling.com/bbcgsv-2019/">guarded cubical type theory</a> that combines step-indexing with univalence ought to be an example of this.</li></ol>-<p>To develop this two-fold generalisation of Hofmann–Streicher lifting, we resituated the theory in terms of another of Thomas’s favourite topics: the theory of <em>fibrations</em>, on which Thomas had written <a href="https://www.jonmsterling.com/streicher-fcjb/">the most wonderful lecture notes</a>.</p>-<p>I recently read Arthur C. Clarke’s <a href="https://www.jonmsterling.com/clarke-1979/">The Fountains of Paradise</a>; although it was a pretty good read, I found that like many science fiction books of that era, one has to look past a lot in order to enjoy it. I wrote some commentary in my post entitled <a href="https://www.jonmsterling.com/jms-019W/">Ventriloquy of the Mid-Century Man</a> on my culture blog <a href="https://www.jonmsterling.com/jms-015X/">The Jon Sterling Review of Books</a>.</p>-</section></summary><category term="Jon Sterling › Weeknotes"></category></entry><entry><title>Coping and Capping</title><link href="https://mort.io/blog/coping-and-capping/" rel="alternate"></link><published>2025-04-08T01:00:00Z</published><updated>2025-04-08T01:00:00Z</updated><author><name>RichardM</name></author><id>https://mort.io/blog/coping-and-capping/</id><summary type="html"><p>Well that was fun! Quite high up there in the set of things that I never even+<p><a href="https://www.dell.com/support/manuals/en-uk/poweredge-r640/per640_ism_pub/general-memory-module-installation-guidelines?guid=guid-acbc0f13-dedb-492b-a0b0-18303ded565a&amp;lang=en-us">Dell R640 has 24 DIMM slots</a></p></summary><category term="Tunbury.ORG"></category></entry><entry><title>Coping and Capping</title><link href="https://mort.io/blog/coping-and-capping/" rel="alternate"></link><published>2025-04-08T01:00:00Z</published><updated>2025-04-08T01:00:00Z</updated><author><name>RichardM</name></author><id>https://mort.io/blog/coping-and-capping/</id><summary type="html"><p>Well that was fun! Quite high up there in the set of things that I never even
+56
-2
index.html
+56
-2
index.html
·········+firstLine: preview || firstLine, // Use preview field if available, otherwise fallback to firstLine···-<div class="feed-item-title"><a href="${entry.link}" target="_blank">${entry.title}</a></div><div class="feed-item-preview">${entry.textPreview}</div>+<div class="feed-item-title"><a href="${entry.link}" target="_blank">${entry.title}</a></div><div class="feed-item-preview">${entry.firstLine}</div>···+const monthEl = document.querySelector(`.timeline-month[data-year="${year}"][data-month="${month}"]`);+const recentHeader = document.querySelector(`.month-year-header[data-year="${year}"][data-month="${month}"]`);···+// If we have links, set the most recent link's date as active in the timeline for the links tab
+2
-93
threads.json
+2
-93
threads.json
···-"url": "https://git.sr.ht/~jonsterling/forester-base-theme/commit/a251f9cf19b0ff42f4553d315df5181b985c79cb",-"normalized_url": "https://git.sr.ht/~jonsterling/forester-base-theme/commit/a251f9cf19b0ff42f4553d315df5181b985c79cb",-"url": "https://www.abebooks.co.uk/9789812701428/Domain-theoretic-Foundations-Functional-Programming-Streicher-9812701427/plp",-"normalized_url": "https://abebooks.co.uk/9789812701428/Domain-theoretic-Foundations-Functional-Programming-Streicher-9812701427/plp",······