Jon Sterling › Blog [007W]
Jon Sterling › Blog [007W]
This is my blog, in which I write about a variety of topics including computer science, mathematics, and the design of tools for scientists. See also my “creek” for shorter-form posts; or see just my book reviews; I also publish weeknotes. You can subscribe to the Atom feed if you prefer.
Generalised quasi-coherence, sober spaces, and spatial algebras [0LVV]
Generalised quasi-coherence, sober spaces, and spatial algebras [0LVV]
Lingyuan Ye and I have put on the arXiv a new version of our paper, Domains and Classifying Topoi, which is currently under review. We have made an important improvement, correcting an terminological error that I deeply regret.
The error I am referring to is not a mathematical or technical one, but rather an issue of clarity and terminological coherence. This work is about transplanting Ingo Blechschmidt’s notion of synthetic quasi-coherence from algebraic geometry to domain theory. There is a very general way to state the synthetic quasi-coherence principle in the context of any algebraic theory \(\mathbb {T}\) that has a notion of module, which is Definition 18.18 of Bleschmidt’s PhD thesis.
We now consider a special case of Definition [0LVX].
The definition of quasi-coherence that we inherit from Ingo Blechschmidt is fixed specifically to finitely presented algebras. The idea of some recent works, including A Foundation for Synthetic Stone Duality and our own paper, is to consider versions of synthetic quasi-coherence with respect to larger classes of algebras (particularly, the countably presented ones).
Our own ideological contribution was to make the trivial observation that synthetic quasi-coherence of the line object is really about characterising the fixed points of the adjunction \(\mathcal {O}\dashv \operatorname {Spec}\). This reflects our perspective that the fundamental property of concern is whether something is a fixed point of this adjunction, not whether it is (e.g.) finitely presented, countably presented, etc. In specific models, there is a direct correspondence between the two notions, but it is another matter entirely to design a civilised axiomatics.
Primitive identity types and proof-relevant unification [01LB]
Primitive identity types and proof-relevant unification [01LB]
I’ve been thinking about the Elimination with a Motive transformation as modernised in terms of type theoretic equivalences. One thing that is striking me right away is that this is going to lead to a pretty scary code blow-up. For instance, if we only consider the basic analysis and the solution rule, a simple construction like the pasting of identifications is going to result in a really large term involving four calls to based path induction, each themselves with increasingly complicated motives. Doing this systematically in the form of unifiers-as-equivalences would result in some even more complicated terms.
Agda gets around this by not actually constructing the equivalences; Cubical Agda and Mikan, however, need the left-inverse part of the equivalence, and even this quickly blows up when types have more than a couple indices, as the Mikan team have recently noted. Project Pterodactyl would likewise need the left-inverse part as well.
I was thinking that perhaps one way to deal with this problem would be to use a bit of a hybrid approach. The extreme position is to elaborate everything in sight to eliminators, but a middle ground might be to extend the core language with a schema for the various unification rules and their left inverses with the appropriate computational behaviour. Every time a proof-relevant unification rule used in the elaboration process, a new abstract top-level declaration is inserted that has (by fiat) the correct reduction rules. Because the operator cannot write these terms, we can make them very compact and probably even avoid annotating them with motives.
Doesn’t this beat the point of eliminating dependent pattern matching? I don’t think so. In Elimination with a Motive, eliminators are playing two distinct roles:
- User-land pattern matching and recursion are reduced to core eliminators.
- Specialisation of motives against targets is achieved internally using a built-in identity type and its eliminator.
What I am proposing is that the specialisation step might be achieved using any computationally well-behaved primitives that the built-in identity type comes equipped with. Even if something can be reduced to a very complicated instance of based path induction, we don’t necessarily need to do so. Moreover, doing so may introduce usability problems (where two things that ought not be definitionally equal from the operator’s point of view become equal by coincidence).
Maybe another way to put it is: it is a coincidence that the user-facing identity type is the same as the identity type used to eliminate dependent pattern matching. If the operator defines their own user-land identity type, then pattern matching definitions defined in terms of it will be reduced to the user-land based path induction principle, but in order to achieve specialisation against the elimination target, the internal identity type (and its rules, whatsoever they are!) will also be used.
Project Pterodactyl’s layered architecture [01KF]
Project Pterodactyl’s layered architecture [01KF]
I have made a great deal of progress with Pterodactyl in the past week. One thing I have been working on is modularising the system, which I resisted doing for a while because it was unclear which parts needed to depend on which. But now a reasonable architecture is emerging. Pterodactyl is split into several Swift libraries:
PterodactylCorecontains the core syntax, semantic domain, evaluator, and conversion checker. This library is completely indepenent from the rest of the system.PterodactylKernelcontains the rules of Martin-Löf type theory, implemented as closure conditions on functions that produce core terms from an environment and a goal. I will discuss this more below. This depends only onPterodactylCoreand is completely independent of concrete syntax. The kernel is trusted, and its outputs are (in LCF style) unforgeable.PterodactylSyntaxcontains the concrete syntax of the Pterodactyl, implemented with Roslyn-style homogeneous “green trees”. This library includes the layout lexer and the parser. This library is independent of the other parts of the system.PterodactylElaboratorglues the kernel to the concrete syntax by means of a function inductively converting concrete syntax to calls to the kernel.PterodactylBuildcontains what is usually called the “driver” of a proof assistant: the routine that processes entire modules and workspaces. Our driver is incrementalised at file-prefix granularity, using theswift-llbuild2infrastructure. See also The CAS model of incremental build systems for previous discussion of this.PterodactylLanguageServeris the only executable at the moment, and it depends on all of the above—mainly viaPterodactylBuild. The language server keeps track of the communication with the language client via RPC, keeping track of buffer state, calling the build system at appropriate times, and sending both diagnostics and subgoal displays to the language client.
Am I the only one still wondering what is the deal with linear types? [01KB]
Am I the only one still wondering what is the deal with linear types? [01KB]
One thing that is still pretty hazy to me is the claimed relationship between “linear types” (qua Cyclone/Rust/OxCaml/Swift/Hylo/etc.) and actual linear logic. I have gotten the feeling that people have spent years claiming that they have created a linear type system, etc., or talking about how their system is affine rather than linear when it is not clear to me what the precise relationship is to either affine or linear logic, etc. There are intuitions at play, but sometimes these intuitions are too far away from the mathematics to justifiably inform a point of view on either syntax or semantics or both. For example, there’s a lot of hand-waving that starts with intuitions about “the number of aliases in the past / future at runtime” and ends with “and this is why we have this modality”, but the former is so vague that I struggle to accept it as the basis for a mathematical definition or claim.
I watched Guillaume Munch-Maccagnoni’s ML ’24 talk Is there a use for linear types because the abstract promised to shed some light on this and related questions, but I have to say that the talk, shall we say, left me a bit cold: the abstract promised to shed some light, and all I can say after watching it twice is that the talk…also promised to shed some light. By the time Guillaume got to the criticisms of prior work on linear types, it seems he did not have enough time to make them precise enough to be evaluated on a mathematical basis; perhaps this was not the venue to do so, but I would have loved if he could have got a bit more technical here, as there is an opportunity to make some points understood that are actually not understood by almost anybody (including myself).
For example, he alludes to a “non-standard (and computationally uninteresting) interpretation of [the bang modality]” in what I assume is the paper Linearity and Uniqueness: An Entente Cordiale, but he doesn‘t ever say what it was! I assume he had planned to address this in the Q&A but unfortunately nobody asked the pertinent question. My guess is that the dereliction rule in that paper looks a little dodgy because it seems to require a cartesian context (contrast with Alms), but I really have no idea if that was the actual problem. It would have been nice if he could have said what the precise problem was. Similarly with the “overly-constrained definition of linearity not suitable for resource management”, which is something I definitely want to understand.
As Guillaume points out in his talk, the “opposition” or “duality” (which I agree not to be substantiated on a mathematical basis) between uniqueness and linearity really does make the system a lot more complicated, and it is part of the “rat king” of modalities that OCaml is presently turning into. If there is a practically and theoretically sound viewpoint that allows us to rethink this distinction, it is very urgent that we understand it now rather than later. That is why I sincerely hope that Guillaume will be willing to expand on his very interesting arguments in a position paper aimed at a mathematically literate audience. Guillaume is one of the very few people in the world who understands both sides of this divide very well, and I think the community would benefit greatly from him having the opportunity to intervene at a more technical level.
In the meanwhile, I have been reading with great interest the short paper Towards a linear functional translation for borrowing, written by Guillaume’s student Sidney Congard. Technical contributions in this area are very welcome, and I’m eager for more.
NewsRadar is now NewsDrawer, and it’s lickable [01K5]
NewsRadar is now NewsDrawer, and it’s lickable [01K5]
Somehow I have managed to get some time in the past couple weeks to work on my newsreader app, which I had been calling NewsRadar. Last week I had an epiphany, and realised it ought to be named NewsDrawer — not only an homage to one of the best user interface controls left on the cutting room floor, but also as a metaphor for how I want the app to function: articles are calmly deposited into appropriate “drawers” governed by sophisticated database queries that the user can write themselves.
My renewed energy to work on NewsDrawer started a week or two ago when I began prototyping a feed organiser window to solve a frustration that I have with most newsreading apps. The issue is that when the only way to manage subscriptions is messing around in the sidebar, things quickly get out of control as soon as you have more than 10 feeds and several categories. So I want to have a professional-grade user interface for managing these things quickly. In last week’s weeknotes I put a screenshot of my first attempt, but it was really bothering me how hideous the toolbar is when toolbar button icons are simply SF Symbols glyphs.
As a first step, I began drawing some classic-style toolbar icons using the amazing Sketch app, which is really one of the last great professional Mac apps.
I am not an icon designer, or a visual designer of any kind, but this was extremely easy. I adapted my toolbar to use these icons, but then I realised that the nice shaded icons looked out of place in macOS Tahoe’s horrible “sea of white” design, so I replaced the window chrome with a slight gradient inspired by Mac OS X 10.4 (Tiger). But if you give a mouse a cookie, he will ask for a glass of milk—naturally, the horrid window buttons that we have endured since Mac OS X 10.10 (Yosemite) began to chafe, and I of course needed to re-draw these. Anyway, it seemed that the time had arrived to bring back my old AquaUI project (but done better), so I set to work, drawing various controls in Quartz. As you can see in the screenshot below, I have done a far better job than last time drawing the window traffic light controls.
NSSearchToolbarItem stands out like a sore thumb, and I may need to re-draw it from scratch.Although the styling is inspired by Tiger’s version of Aqua, everything is drawn programmatically in Quartz using NSBezierPath, NSGradient, and NSShadow. You may have noticed the little lozenge-shaped button in the upper right-hand corner; this is of course the toolbar toggle button, which is one of the most beloved affordances of Mac OS X that was lost in 10.7 (Lion). This is actually really easy to restore, as the vestigial functionality is still present.
NSWindow, which was lost in Mac OS X 10.7 (Lion).Naturally, the inactive window state introduces some subtle transparency and pinstriping, which I have implemented as a custom NSColor that tiles a programmatically drawn NSImage.
What comes next is a thorough redesign of the main feed view, which is currently using a sidebar. Unfortunately, the new behaviour of sidebars starting from macOS Tahoe is extremely hostile to the user and does not go with the Aqua styling that I am using, so I need to rethink how this should work. I am considering reconstructing from scratch the old non-full-height sidebars from Mac OS X, but this will be a lot of work. (Why not a drawer? As the HIG pointed out in the old days, not everything should be a drawer; I think this is an example of something that really ought to be a sidebar.)
Disentangling unification and implicit coercion [01JQ]
Disentangling unification and implicit coercion [01JQ]
It’s well known that unification and subtyping don’t play well together, even in the setting of bidirectional elaboration; the problem, as Amélia Liao very helpfully outlined is scheduling. The problem is essentially that we cannot resolve a coercion problem \(\gamma \colon \alpha \lhd A\) by solving \(\alpha :\equiv A, \gamma :\equiv 1_A\) because this is not the most general solution: it is in fact the least general solution, considering that \((A,1_A)\) is the terminal object of \(\mathbf {Type}/A\). When you start choosing non-general solutions to things, the process becomes sensitive to the order in which things were solved, which leads to unpredictable and therefore unreliable behaviour for the user.
That‘s all for tonight! Thanks to András Kovács, Carlo Angiuli, and Amélia Liao for acting as sounding boards at times.
It Is Wrong To Take Life: language & mockery in the Shing era [01JN]
It Is Wrong To Take Life: language & mockery in the Shing era [01JN]
In City of Illusions, the Shing have shattered the old League of All Worlds and dominated the Earth—whose people they allow to live quiet pastoral lives subject to only one rarely enforced Law: It Is Wrong To Take Life.
The power of the Shing, the legend says, is that they are able to mindlie—a skill that goes beyond the normal human telepathic capabilities in the Hainish universe. Everything about the Shing is some kind of falsehood or mockery. They have elevated animals with the power of speech: flocks of birds chatter with human words, and wild pigs and chickens squawk the Shing Law to human hunters (“It is wrong to take life!”).
Le Guin’s focus on mockery and falseness as the form of evil reminds me of Tolkien. In The Silmarillion, Melkor’s every prideful effort to emulate God is transformed into a mockery and a counterfeit of the object of his imitation. That something is “untrue” is what makes it evil. It is very clear that the humans of Shing Earth see things in much the same way—the pleading appeal of the pig and the chicken to the Shing’s Law against killing is a nuisance and a symbol of a poisoned world whose right and natural order has been perverted.
The narrative perspective of City of Illusions is that only a race in which killing runs deep could conceive of an absolute Law against all killing; and the Shing do things worse than killing anyway, like erasing people’s memory or letting people kill each other. Thus reassured of the hypocrisy and essential falseness of the Shing, we can get on with the “liberation” of all the Earth’s species from Laws that go against the true natural order, which is (naturally) that animals who cannot speak Man’s languages must serve Man in the the only form intelligible to his insatiable appetite: protein, blood, and fat.
Perhaps it is true that the Shing do protest too much and that their Law testifies to their own vicious nature, but of all known races in our own known universe, there is none so dedicated to killing as Humankind, and our own statutes provide for the lawful killing of humans and non-humans alike at scales that defy belief and all sense of morality—even Human morality. City of Illusions suggests that even if the birds and pigs were given intelligible voice, Man would view their pleas as mockery.
The magnificent churches of Cambridgeshire [01JK]
The magnificent churches of Cambridgeshire [01JK]
This vacation, my mom came to visit us for two weeks. This is the first time she’d been to England in four decades, and the first time I’d been able to spend the holidays with her in many years. It was a great visit! One of the things she is very interested in is old churches, and there is no better place to go than Cambridgeshire in search of old churches.
2025 Year in Review [01JD]
2025 Year in Review [01JD]
The CAS model of incremental build systems [01IP]
The CAS model of incremental build systems [01IP]
I have continued on my quest to understand and compare different architectures for demand-based/query-based compilation and elaboration. This week I have been exploring the llbuild2fx library from Apple, which its authors describe as a fresh take on low-level build system API. I’m incredibly grateful to Nima Johari for taking the time to answer my many questions about it, and to Cameron Zwarich for some very useful discussions about the incrementalisation of elaboration.
It seems that there are two major approaches to demand-based build systems. The first, which is better known, is incremental computation based on dirtying of inputs which ripple outward in the form of cache invalidations. To my knowledge, this style is represented in Adapton, Shake, Rock, Incremental, and Salsa. Incremental computation in this sense is built up from a network of pure functions operating on stateful inputs at the edges.
A second approach, which is being explored by Apple’s build team, is completely stateless; rather than input nodes being subject to update and inducing cache invalidation, inputs are instead ingested into content-addressed storage (CAS). The entire input to a build process (the source tree and the configuration) is then referred to (via a content-address) in the query nodes. The CAS-based approach, therefore, is not really involving cache invalidation: instead the data of a query contains a stable reference to CAS that can be narrowed to smaller fragments of the CAS in subsequent queries. When input state changes, it is ingested into the CAS and new queries are made that refer to the new data; naturally, child queries will narrow their reference to CAS and this will result in cache hits when the scope has narrowed to something that has already been computed.
There are trade-offs between the two approaches. The first (which I will call stateful incremental computation) is easier to use, because dependency on stateful edge nodes is dynamic and determined in the process of query evaluation automatically. In contrast, the stateless CAS approach requires you to think very carefully about how to narrow the CAS keys referenced in queries. On the other hand, the stateless approach is more flexible in terms of the execution models it supports, which includes distributed builds. (I have a feeling distributed builds are going to be very important for large mathematical libraries in the future, or maybe even in the present if you look at the resources needed to build Mathlib.)
Apple uses (or aims to use) llbuild2fx to coordinate internal builds of their software and its complex dependencies, and I believe they also plan for this (or something like it) to eventually be used in Xcode and the Swift compiler. I am, however, apparently the first person to be attempting to use llbuild2fx on the interior of a compiler, which is of course a potential risk. But a fun risk that I expect to learn a lot from either way.
Sending strict propositions to the Ripley cupboard [01IK]
Sending strict propositions to the Ripley cupboard [01IK]
Please note: I am no longer confident in the conclusions of this post, and I believe that I have made some mistakes. When I have ironed out what is true and what is not true, I will write a follow-up and link to it from here.
Conor Mc Bride likes to send hopeless ideas and design mistakes to their Ripley Cupboard, a reference to a scene in the highly underrated film Alien: Resurrection in which all the hopeless attempts to reconstruct Ellen Ripley from DNA are stored in a gruesome menagerie. I am afraid that in spite of their successful semantic rehabilitation, strict / definitionally proof-irrelevant propositions must nonetheless find their permanent residence in my own Ripley cupboard for syntactical reasons.
One thing that I had noticed a couple nights ago was that there might be a problem finding a suitable generalisation of Miller’s pattern fragment for dependent type theory with strict propositions. I was not really precise about what my concern was, but thankfully Matthieu Sozeau managed to pin it down.
In essence, the problem has to do with what syntacticians call “strengthening”. The thing that makes higher-order pattern unification work well is the ability to tell whether or not some term actually depends on a given variable up to definitional equality; this is important because if you can eliminate a syntactic dependency, two things might happen that could allow the unification process to proceed further (1) a blocked unification problem may suddenly fall into the pattern fragment, and (2) a failing “occurs check” may start to succeed.
With definitional singleton types, this is all fine: we can reliably eliminate dependency on singletons in a number of different ways, but these ways all rely on the fact that singleton types are inhabited. For definitional subsingletons, i.e. strict propositions, it is another story. Imagine that you have a strict proposition \(P\) and a subterm \(M(x,y,z):P\) of a larger proof-relevant unification problem; in order to find out whether or not the whole problem depends on \(x,y,z\) you need to know whether or not a “shorter” proof of \(P\) is derivable, which is obviously an undecidable problem.
The upshot is, as Matthieu put it, we are not going to be able to find most general unifiers in any fragment of the language that involves strict propositions. Completeness of unification within a well-defined fragment is, in my opinion, the mathematical shadow of a more important but intangible property of unification being reliable and predictable. Therefore, I think that this observation may imply that reliable and predictable unification is not compatible with having strict propositions in any form.
The implication for Project Pterodactyl is that we will not be pursuing strict propositions in any form, including my recent proposal.
(It would be very welcome if someone noticed a way to get around this apparent obstruction, but I am not optimistic. It seems pretty airtight to me at the moment.)
Shall we strictify some homotopy propositions? [01I6]
Shall we strictify some homotopy propositions? [01I6]
Definitional proof-irrelevance is all the rage these days. Unfortunately, I think the present state of affairs is not so good. Most systems that implement some form of definitional proof irrelevance do so by means of a separate universe, which I will call sProp, whose types all have the property of being definitionally proof-irrelevant. From there, different systems have chosen different trade-offs.
Fuss-free universe hierarchies [01HX]
Fuss-free universe hierarchies [01HX]
The thing about universe hierarchies is that they are both painful to implement properly, and punting on them leads to even more pain later on because introducing a hierarchy is an extremely disruptive change for both the system and its libraries. After going through this treadmill a few times, I’ve learned my lesson: universes are something we need to get right from day one. Let me clarify that it is a non-goal to have inferred universe levels; I instead want to make working with universe levels as simple as possible, and to minimise the number of places where they need to appear.
The first thing people ask is whether we will use universes “à la Russell” or “à la Tarski”. This is a question laden with false ideology, because the only kind of universes that exist in an objective (i.e. generalised algebraic) sense are the latter. But there is a valid question lying under the surface, which is whether or not users will be expected to explicitly write the decodings and universe level coercions. To that, I answer that we have the elaboration technology today to reliably avoid these bureaucratic details cluttering the source language.
Lifting coercions to theory refinements [01HN]
Lifting coercions to theory refinements [01HN]
Last time, I spoke about plans for handling multiple inheritance and implicit coercions in Pterodactyl’s theory preorder. Today it is time to talk about bundling and refinement, and the rules for constructing and coercing implementations of refined theories.
Labelled preorders and implicit coercions [01HB]
Labelled preorders and implicit coercions [01HB]
Project Pterodactyl aims to support coherent algebraic hierarchies with multiple inheritance as well as user-defined edges. As I mentioned in my HoTTEST talk, there are a few points worth mentioning here in regard to the so-called “diamond problem”.
A focused vision for Project Pterodactyl [01H3]
A focused vision for Project Pterodactyl [01H3]
After a few very enlightening conversations following my HoTTEST seminar talk “Is it time for a new proof assistant?”, I have realised that one of the more important aspects of my plans for Pterodactyl is its focused and restricted vision. I cannot promise that we will succeed, but I do think that by not trying to be all things to all people, we may be able to avoid some likely ways of biting the dust.
Thoughts on XSLT in the “web platform” [01DI]
Thoughts on XSLT in the “web platform” [01DI]
Mason Freed, a Chromium/Blink developer employed by Google, opened a ticket a couple weeks ago on the WHATWG/html repository: Shall we remove XSLT from the web platform? Typical of the simultaneously high-handed and ignorant approach of the browser vendor cartels that have come to dominate the Web, Freed is proposing that client-side XSLT support be removed from the “web platform” (which is cartel code for “whatever We decide”). Like most attacks on the Open Web, this one is backed by concerns about “security”—as if the only way forward was to keep using libxslt without paying its developers.
Mason’s laughably ignorant proposal of a polyfill is completely unworkable, as such a polyfill would increase payloads by an order of magnitude—and it wouldn’t even work for most use-cases where the goal is to serve an XML document that is automatically rendered, rather than to serve an HTML document that embeds the result of transforming an XML document at load-time. It’s a non-starter. Why do people who know nothing have authority over people who know something? I guess it’s the way of the world.
Now, I understand that XSLT in the browser is not as commonly used as it was in the past. Moreover, real industrial users of XSLT are not using XSLT 1.0 but rather later more fully-featured versions like 3.0 via tools like Saxon, etc. But one very common use of client-side XSLT is to render RSS/atom feeds (for blogs and podcasts—yes, people still do those!) in a user-friendly way when viewed in the browser; of course Forester uses client-side XSLT as well. Since the writing has been on the wall for a while, I have been planning to change Forester to not depend on client-side XSLT, but I would prefer not to be forced into this by the browser cartels.
Many of the people whose comments have not been censored in the GitHub thread seem to be entirely unaware of the fact that RSS even exists. My guess is these viciously ignorant people think that podcasts are things that you subscribe to on Spotify, or watch on YouTube.
Anyway, I was thinking. I wonder if the health and security of the Open Web would be greatly benefited if Mason Freed and his colleagues in the other major browser vendors did not have the ability to change the Web without consent of its actual constituents—the people who publish websites. Using a tiny fraction of these vendors’ resources, we could fund the amazing team building xrust (a modern implementation of XPath 3.1, XQuery 3.1, and XSLT 3.0 in Rust), or any one of several other teams working to implement modern XML tooling in open source. I’d love to restore the “web platform” to its rightful owners—the PEOPLE. I don‘t know if Ladybird is the solution, but I’m glad to see some competition in this space from outside the cartel.
To Mason: I’m sure you’re a fine guy in real life. There is a sense in which you are only a vessel for these proposals, which would be made by someone else if you weren’t involved. But I think there are plenty of people for whom there would be no salary big enough to get them to let the cartel’s words flow through their lips so uncritically. I think those are the kind of people we need in stewardship over the Web.
See also this post by David Bushell.
NewsRadar: a work-in-progress newsreader for the Macintosh [01C9]
NewsRadar: a work-in-progress newsreader for the Macintosh [01C9]
During my Summer holiday, I began working on a new newsreader for the Macintosh which I have tentatively named NewsRadar. I am a mostly happy user of the great NetNewsWire by Brent Simmons, but I have an idea for a few unique features that would greatly improve my own newsreading workflow. I also believe strongly in the capability of syndication (in the form of RSS, Atom, JSON Feed, etc.) as a much simpler and cheaper alternative to federation as a means to reclaim the World Wide Web. Obviously, this is a fully native app that complies with Macintosh user interface conventions.
The Greatest Predator Ever Known! [01C8]
The Greatest Predator Ever Known! [01C8]
Frank Herbert’s God Emperor of Dune is the most delightfully unhinged novel I have ever read. I cannot deny that I have loved all three of the preceding Dune novels, perhaps even more so than God Emperor. But just as Leto II intentionally reduced the mystique of Paul-Muad’Dib to parody in order to deliver Humankind from a horrifying future, I suppose Herbert’s ruthless approach to our memory of wind-swept Arrakis may have been a requirement to make room for the larger-than-life whimsy of God Emperor.
I have always thought that we should write what we know deeply. The problem with Dune and its copious epigrapha—often straight from the blessed lips of Muad’Dib—is the combination of absolute seriousness and near-total lack of signal in his wordy pronouncements. Was Muad’Dib a bullshitter, or was Herbert the bullshitter? I think Herbert aimed to portray Paul-Muad’Dib as a great (but fatally flawed) thinker of another world and time, but the danger of writing speculatively about things you do not know deeply (philosophy, history, the State, and the Spirit) is that successive generations may find the result less credible than did the Mid-Century Man, whose more limited access to the breadth of human culture tended to generate “profound” insights that are quickly hackneyed.
God Emperor turns all this on its head—Leto II’s wordiness and tendancy to unclear (meaningless?) pronouncement is legendary (and a thorn in the side of his retainers and his enemies alike), but that is one of the privileges accorded to a God. Leto II is the greatest bullshitter to ever live, and he knows it! The Golden Path, that tenuous thread in the tapestry of time by which Mankind may narrowly avoid total extermination by prescient machine minds, demands nothing less than Leto’s unintelligible tyranny. Who are we to question a God, and who can be Shai-Hulud besides the only living sandworm?
Thoughts on Apple’s new design language [01BX]
Thoughts on Apple’s new design language [01BX]
As many predicted, Apple unveiled at its Worldwide Developer Conference a new design language for all its platforms centred around a material that they call Liquid Glass. I have some personal reflections about my time as an iOS platform app developer during the iOS 7 transition, and some thoughts about what the new design language may mean for the remaining independent developers whose businesses have not been destroyed by the App Store’s race to the bottom.
(I will not speak much here about the merits (or lack thereof) of the new design language. There is a lot to say and critique there, but there’s also some reason for hope.)
We have AI at home… [01AS]
We have AI at home… [01AS]
On Tuesday, I travelled by train to Sheffield to take part in the Yorkshire and Midlands Category Theory Seminar #37 meeting, where I would be speaking about my paper that compares partial map classifiers with Sierpiński cones in synthetic (domain/category) theory, which I summarised previously.
Putting Mac OS X Tiger back to work [01AH]
Putting Mac OS X Tiger back to work [01AH]
Over the Christmas holiday, I bought an iMac off eBay for £50. Why was it so cheap? Because it is a 2006 model firing on a single gigabyte of RAM with an Intel Core 2 Duo processor, running Mac OS X Tiger. When I was a kid, I dreamed of having a computer like this—for me, the white plastic era will always be peak Apple design, and Tiger’s version of Aqua was the most polished and refined form of the design language that they ever managed to produce. My first Macintosh was a white polycarbonate unibody MacBook running Leopard—and at the time I greatly regretted having just missed the Tiger era for the gaudy and overly darkened feel of Leopard with its sinister-coloured window controls. I did not know at the time how much worse things would get…
My excuse for purchasing this machine was that I “needed” to run Mac OS X Tiger as “research” for my experimental project AquaUI, which imagines how the Aqua design language could have evolved if it had been allowed to. But really, I wanted to relive my rare trips to Apple retailers as a kid, where I would spend minutes doing nothing but just moving the scrollbar while watching its stationary “wave” texture, or highlighting buttons to see them burst with blue radiance.
(I spoke about many of the topics covered in this post in my appearance on the Kodsnack podcast hosted by Fredrik Björeman: Episode 626, “The great flattening of everything”.)
Ventriloquy of the Mid-Century Man [019W]
Ventriloquy of the Mid-Century Man [019W]
Moments before leaving for a meeting in Barbados with my colleagues Anil Madhavapeddy and Mark Elvers, I hastily loaded Arthur C. Clarke’s The Fountains of Paradise onto my Kindle for airplane reading. I really want to love “hard science fiction” — I spent months with Asimov’s Foundation in 2022 — but I must admit that I am struggling with the limitations of this genre.
In her 2013 interview with The Paris Review, Ursula Le Guin questioned the hard/soft divide in science fiction, pointing out that the distinction seems to be based on authors and readers of sci-fi arbitrarily deciding which of the sciences are “Science” and which aren’t.
The “hard”–science fiction writers dismiss everything except, well, physics, astronomy, and maybe chemistry. Biology, sociology, anthropology—that’s not science to them, that’s soft stuff. They’re not that interested in what human beings do, really. But I am. I draw on the social sciences a great deal. I get a lot of ideas from them, particularly from anthropology. When I create another planet, another world, with a society on it, I try to hint at the complexity of the society I’m creating, instead of just referring to an empire or something like that.
There is a good point here, and Le Guin’s attention to social sciences and anthropology and history was indeed a strength, but Asimov was also preoccupied with the same throughout Foundation. So what is the difference, aside from the fact that Foundation was written by a man? Well, it cannot be unrelated to Asimov being a man, but perhaps we will get to the point sooner by referring to a specific type of man — the Mid-Century Man.
The Mid-Century Man has no time for the usual literary rules governing the development of characters and their arc of growth. He is interested in science and humanity, yes, but through the lens of his own avatar whom he transplants directly from our world of his time into the futuristic world of his story. This hapless transplant finds himself, with no volition, speaking the author’s words through his own lips… He hears his own voice prattle on about “the last refuge of the incompetent” and can do absolutely nothing about it.
The inclination of the Mid-Century Man to spill no ink that might distract from his speculations (flavoured with thematic orientalism, as in the case of Fountains) is not limited to hard science fiction — Herbert falls prey to the same tendancy in Dune, which I adore, but he is saved by his mastery of the tragedy-form: indeed, we are already weeping with Paul over Chani’s fate a quarter of the way through Dune Messiah.
In contrast, there is little that is compelling about the characters of The Fountains of Paradise, nor those of 2001: A Space Odyssey, and the same holds for Asimov’s Foundation. The mostly one-dimensional characters of these works are foils for the authors’ speculative ideas about technology or “future history”, and a shorter work could have been written that omits the ventriloquy act entirely and just directly makes the point the author so strongly wished to make.
Will Fountains be the last “hard science fiction” book I read? Surely not… There is still much to enjoy and marvel over — and there is a true sense in which Clarke’s elevator to Heaven is compelling enough to outweigh even the worst of his flimsy characterisation.
Winter in Eden and Return to Eden: an imperfect conclusion [019O]
Winter in Eden and Return to Eden: an imperfect conclusion [019O]
Two months ago I reviewed Harry Harrison’s delightful West of Eden, a piece of speculative fiction that considers a world in which the Cretaceous–Paleogene extinction event never occurred, and one species of dinosaur went on to evolve over the subsequent 66 million years into a highly sophisticated society stratified by uneven linguistic abilities. The most intelligent stratum of this species calls itself Yilanè, which is at once an ethnonym and a classification of linguistic ability.
In Harrison’s Eden, reptiles of all kinds dominate Africa (Entoban in Yilanè) whereas mankind (Tanu and Sasku in their languages) and other mammals live in North America (Gendasi in Yilanè), confined at first mainly to its colder northern reaches. The icy winds of climate change blow across Entoban and northern Gendasi alike, which leads mankind to migrate south just as the Yilanè begin to colonise southern Gendasi. The encounter of Tanu and Yilanè is predictably violent—when the Tanu encounter the torpid Yilanè males basking on the birthing beaches of Alpèasak (the new Yilanè colony in our own Florida), they slay them immediately and spark a war of the species that shapes the entire trilogy.
That is the premise of West of Eden, the first book of the Eden Trilogy, which tells the story of a young Tanu man named Kerrick who is kidnapped and raised by Yilanè in Alpèasak. The next two books, Winter in Eden and Return to Eden, concern the continuing struggle of Tanu and their Sasku allies to survive in the South while being pursued by a genocidal Yilanè expedition, and of the minority faction of Yilanè called the Daughters of Life who aim to establish a peaceful city in South America.
Although Winter in Eden and Return to Eden share the charm of the first book, they do not quite live up to its promise. Without revealing anything that might spoil the Trilogy (which I do still recommend), there are several imperfections that give a reader the distinct impression of rushed writing—especially in Return.
- Throughout Return to Eden the toponyms Gendasi and Entoban are frequently mixed up, leading to a great deal of confusion. For example, Vaintè says “But Entoban is large, most of it unknown to us, warm and filled with good meat” but this could only refer to Gendasi in the context of the novel. I am apparently not the only person to notice this oversight, as can be seen by perusing the Amazon reviews.
- Relatedly, there is no explicit toponym for South America, which plays an important role in the story. Indeed, South America appears to be referred to as part of Gendasi, which makes sense considering the land bridge that joins it to North America, but in that case it is surprising that Gendasi is glossed as North America rather than The Americas.
- Several interesting story-lines appear to be dropped on the floor. What of the scientist Ambalasei’s fate, and will the radical city Ambalasokei survive?
Perhaps what was needed most was more time. Despite these imperfections, I don’t regret my time in Eden—and I dream of returning there one day.
West of Eden: you can judge a book by its cover [015W]
West of Eden: you can judge a book by its cover [015W]
I have found that one could do far worse than perusing the r/CoolSciFiCovers subreddit and picking things to read at random. This week I chose West of Eden based on its outstanding cover art, and it turned out to be a very enjoyable read.
The premise is that the impact causing the mass extinction of non-avian dinosaurs never occurred, and neolithic Man unknowingly shares the Earth with a very advanced and highly stratified female-dominated race of intelligent lizards whose males have two penises (don’t ask me why! apparently this is common in nature). When climate change threatens both the human and lizard civilisations, they are forced to migrate and, in doing so, discover each other’s presence and clash violently.
Some aspects of the story are a little old-fashioned—I barely need to discuss the instinctive disgust and “racial hatred” felt by the humans and the lizards for each other, but the narrative ultimately challenges this feeling by revealing each culture to be civilised in its own terms, if not in terms that would lead to a cooperative multi-species stewardship of the Earth.
The initial inability of the intelligent lizards to fathom that the “filthy ustuzou”—the lizard phrase for humans and other mammalian creatures—may be sentient and even conscious entities of moral force is challenged by their experience, and by a religious extremist trend within their society that recognises the intrinsic value of all forms of conscious life. In a time where current science continues to reveal, bit by bit, the overconfident ignorance and moral wickedness of those who have insisted that the “lower forms of life” on our own Earth are without sentience, value, moral force (the octopus, the elephant, etc.), it is hard to read this without thinking about our own “filthy ustuzou” and the future consequences of our vicious behaviour toward them.
We must fund intellectual infrastructure for the long term [013G]
We must fund intellectual infrastructure for the long term [013G]
How can we effectively and sustainably fund the intellectual infrastructure for generational human advancement? Intellectual infrastructure—which I would define to encompass the tools used to develop, teach, and learn science—is mistreated by essentially all extant funding models that I am aware of.
To be clear, when I speak of “tools” I mean not only software (like Lean, Coq/Rocq, Agda, Isabelle, Forester, SageMath, or Mathematica)—but also more broadly intellectual tools like the nLab and The Stacks project whose main aim is not necessarily to contribute new ideas but to consolidate what is known in order to lay the groundwork for the future.
Tips for using plain text email on macOS [00QB]
Tips for using plain text email on macOS [00QB]
I am a proponent of using plain text (or Markdown-formatted) emails rather than HTML-formatted emails. Although there are some legitimate uses for rich formatting in email, I find the well is poisoned: HTML-formatted email manipulates, surveils, and controls.
The only viable modern GUI client recommended by useplaintext.email for macOS is MailMate. Unfortunately, MailMate’s visible settings do not have any option for wrapping text, which would contradict its viability for plaintext email users. Furthermore, the versions of MailMate available for download from its website (both the released version and the prerelease) seem to be incompatible with macOS Sonoma. By doing a bit of spelunking, I have found that both these problems can be solved (at least for now).
Day tensors of fibered categories [009F]
Day tensors of fibered categories [009F]
I have been thinking about monoidal closed structures induced by slicing over a monoid, which has been considered by Combette and Munch-Maccagnoni as a potential denotational semantics of destructors à la C++. It occurred to me that this construction is, in fact, almost a degenerate case of Day convolution on an internal monoidal category — and this made me realize that there might be a nice way to understand Day convolution in the language of fibered categories. In fact, many of these results (in particular the relativization to internal monoidal categories) are probably a special case of Theorem 11.22 of Shulman’s paper on enriched indexed categories.
Under appropriate assumptions, we may also compute a “Day hom” by adjointness.
I believe, but did not check carefully, that when \(E\) and \(F\) are discrete fibrations over a semimonoidal category \({\mathopen {}\left (B,\otimes ,\alpha \right )\mathclose {}}\) then the Day tensor is precisely the discrete fibration corresponding to the (contravariant) Day convolution of the presheaves corresponding to \(E\) and \(F\). Likewise when \({\mathopen {}\left (B,\otimes ,I,\alpha ,\lambda ,\rho \right )\mathclose {}}\) is monoidal, it appears that the Day unit corresponds precisely to the traditional one.
There remain some interesting directions to explore. First of all, the claims above would obviously lead to a new construction of the Day convolution monoidal structure on the 1-category of discrete fibrations on \(B\) that coincides with the traditional one up to the Grothendieck construction. But in general, we should expect to exhibit both \({\mathbf {Cat}}_{/B}\) and \(\mathbf {Fib}_{B}\) as monoidal bicategories, a result that I have not seen before.
Conjecture [009E] is highly non-trivial, as monoidal bicategories are extremely difficult to construct explicitly. I am hoping that Mike Shulman’s ideas involving monoidal double categories could potentially help.
On the relationship between QTT and STC [0094]
On the relationship between QTT and STC [0094]
I have been thinking again about the relationship between quantitative type theory and synthetic Tait computability and other approaches to type refinements. One of the defining characteristics of QTT that I thought distinguished it from STC was the treatment of types: in QTT, types only depend on the “computational” / unrefined aspect of their context, whereas types in STC are allowed to depend on everything. In the past, I mistakenly believed that this was due to the realizability-style interpretation of QTT, in contrast with STC’s gluing interpretation. It is now clear to me that (1) QTT is actually glued (in the sense of q-realizability, no pun intended), and (2) the nonstandard interpretation of types in QTT corresponds to adding an additional axiom to STC, namely the tininess of the generic proposition.
It has been suggested to me by Neel Krishnaswami that this property of QTT may not be desirable in all cases (sometimes you want the types to depend on quantitative information), and that for this reason, graded type theories might be a better way forward in some applications. My results today show that STC is, in essence, what you get when you relax the QTT’s assumption that types do not depend on quantitative information. This suggests that we should explore the idea of multiplicities within the context of STC — as any monoidal product on the subuniverse spanned by closed-modal types induces quite directly a form of variable multiplicity in STC, I expect this direction to be fruitful.
My thoughts on the precise relationship between the QTT models and Artin gluing will be elucidated at a different time. Today, I will restrict myself to sketching an interpretation of a QTT-style language in STC assuming the generic proposition is internally tiny.
Let \(\mathscr {Q}\) be an elementary topos equipped with a subterminal object \(\P \hookrightarrow \mathbf {1}\) inducing an open subtopos \(\mathscr {E}\simeq {\mathscr {Q}}_{/\P }\hookrightarrow \mathscr {Q}\) and its complementary closed subtopos \(\mathscr {F}\hookrightarrow \mathscr {Q}\). This structure is the basis of the interpretation of STC; if you think of STC in terms of refinements, then stuff from \(\mathscr {E}\) is “computational” and stuff from \(\mathscr {F}\) is “logical”.
We now consider the interpretation of a language of (potentially quantitative) refinements into \(\mathscr {Q}\). A context \(\Gamma \) is interpreted by an object of \(\mathscr {Q}\); a type \(\Gamma \vdash A\) is interpreted by a family \(A\to \bigcirc {\Gamma }\); a term \(\Gamma \vdash a : A\) is interpreted as a map \(\Gamma \to A\) such that \(\Gamma \to A \to \bigcirc \Gamma \) is the unit of the monad.
So far we have not needed anything beyond the base structure of STC in order to give an interpretation of types in QTT’s style. But to extend this interpretation to a universe, we must additionally assume that \(\P \) is internally tiny, in the sense that the exponential functor \({\mathopen {}\left (-\right )\mathclose {}}^\P \) is a left adjoint. Under these circumstances, the idempotent monad \(\bigcirc \equiv j_*j^* : \mathscr {Q}\to \mathscr {Q}\) corresponding to the open immersion \(j : \mathscr {E}\hookrightarrow \mathscr {Q}\) has a right adjoint \(\square : \mathscr {Q}\to \mathscr {Q}\), an idempotent comonad.
Although \(\square \) lifts to each slice of \(\mathscr {Q}\), these liftings do not commute with base change; this will, however, not be an obstacle for us.
We will now see how to use the adjunction \(\bigcirc \dashv \square \) to interpret a universe, either for the purpose of interpreting universes of refinement types, or for the purpose of strictifying the model that we have sketched. Let \(\mathcal {V}\) be a (standard) universe in \(\mathscr {Q}\), e.g. a Hofmann–Streicher universe; we shall then interpret the corresponding universe of refinements as \(\mathcal {U}:\equiv \square \mathcal {V}\). To see that \(\mathcal {U}\) classifies \(\mathcal {V}\)-small families of refinements, we compute as follows:
- A code \(\Gamma \vdash \hat {A} : \mathcal {U}\) amounts to nothing more than a morphism \(\hat {A}:\Gamma \to \square {\mathcal {V}}\).
- By adjoint transpose, this is the same as a morphism \(\hat {A}^\sharp : \bigcirc {\Gamma }\to \mathcal {V}\).
Thus we see that if \(\mathcal {V}\) is generic for \(\mathcal {V}\)-small families of (arbitrary) types in \(\mathscr {Q}\), then \(\mathcal {U} \equiv \square \mathcal {V}\) is generic for \(\mathcal {V}\)-small families of type refinements, i.e. types whose context is \(\bigcirc \)-modal.
Finally, we comment that the tininess of \(\P \) is satisfied in many standard examples, the simplest of which is the Sierpiński topos \(\mathbf {Set}^{\to }\).
Classifying topoi and generalised abstract syntax [008J]
Classifying topoi and generalised abstract syntax [008J]
For any small category \(\mathscr {C}\), Fiore treats \(\mathscr {C}\)-sorted abstract syntax in the functor category \({\mathopen {}\left [\mathscr {C},\operatorname {Pr}{\mathopen {}\left (\operatorname {\mathbb {L}}{\mathscr {C}}\right )\mathclose {}}\right ]\mathclose {}}\) where \(\operatorname {\mathbb {L}}\) is some 2-monad on \(\mathbf {Cat}\); any such functor \(P\) denotes a set that is indexed in sorts and contexts (where the 2-monad \(\operatorname {\mathbb {L}}\) takes a category of sorts to the corresponding category of contexts). When \(\mathscr {C}\) is a set and \(\operatorname {\mathbb {L}}\) is either finite limit or finite product completion, we recover the standard notions of many-sorted abstract syntax; in general, we get a variety of forms of dependently sorted or generalised abstract syntax.
We will assume here that \(\operatorname {\mathbb {L}}\) is the free finite limit completion 2-monad; our goal is to study Fiore’s general substitution monoidal structure from the point of view of classifying topoi, building on Johnstone’s analogous observations (Elephant, D3.2) on the non-symmetric monoidal structure of the object classifier. The topos theoretic viewpoint that we will explore is nothing more than a rephrasing of Fiore’s account in terms of the Kleisli composition in a 2-monad; nonetheless the perspective of classifying topoi is enlightening, as it provides an explanation for precisely what internal geometrical structure one expects in a given topos for abstract syntax, potentially leading to improved internal languages.
For any small category \(\mathscr {C}\), the category of presheaves \(\operatorname {Pr}{\mathopen {}\left (\operatorname {\mathbb {L}}\mathscr {C}\right )\mathclose {}}\) corresponds to the classifying topos of diagrams of shape \(\mathscr {C}\). Following Anel and Joyal, we shall write \(\mathbb {A}^{\mathscr {C}}\) for this “affine” classifying topos; under the conventions of op. cit., we may then identify the category of sheaves \(\operatorname {Sh}{\mathbb {A}^{\mathscr {C}}}\) with the presheaf category \(\operatorname {Pr}{\mathopen {}\left (\operatorname {\mathbb {L}}{\mathscr {C}}\right )\mathclose {}}\).
The universal property of \(\mathbb {A}^{\mathscr {C}}\) as the classifying topos of \(\mathscr {C}\)-diagrams means that for any topos \(\mathcal {X}\), a diagram \({\mathscr {C}}\xrightarrow {{P}}{\operatorname {Sh}{\mathcal {X}}}\) corresponds essentially uniquely (by left Kan extension) to a morphism of topoi \({\mathcal {X}}\xrightarrow {{\bar {P}}}{\mathbb {A}^{\mathscr {C}}}\). We have a generic \(\mathscr {C}\)-shaped diagram \({\mathscr {C}}\xrightarrow {{\mathrm {G}_{\mathscr {C}}}}{\operatorname {Sh}{\mathbb {A}^{\mathscr {C}}}}\) corresponding under this identification to the identity map on \(\mathbb {A}^{\mathscr {C}}\). More explicitly, the diagram \(\mathrm {G}_{\mathscr {C}}\) is the following composite:
\[ \mathrm {G}_{\mathscr {C}} :\equiv \mathscr {C}\xrightarrow {\eta _\mathscr {C}} \operatorname {\mathbb {L}}\mathscr {C}\xrightarrow {よ_{\mathscr {C}}} \operatorname {Pr}{\mathopen {}\left (\operatorname {\mathbb {L}}\mathscr {C}\right )\mathclose {}} = \operatorname {Sh}{\mathbb {A}^{\mathscr {C}}} \]Given a morphism of topoi \({\mathcal {X}}\xrightarrow {{f}}{\mathbb {A}^{\mathscr {C}}}\), we may recover the diagram \(\mathscr {C}\to {\operatorname {Sh}{\mathcal {X}}}\) that it classifies as the composite \(\mathscr {C}\xrightarrow {\mathrm {G}_{\mathscr {C}}}\operatorname {Sh}{\mathbb {A}^{\mathscr {C}}}\xrightarrow {f^{*}}\operatorname {Sh}{\mathcal {X}}\).
In case \(\mathcal {X}\equiv \mathbb {A}^{\mathscr {C}}\), then, we have a correspondence between \(\mathscr {C}\)-shaped diagrams of sheaves on \(\mathbb {A}^{\mathscr {C}}\) and endomorphisms of \(\mathbb {A}^{\mathscr {C}}\); we are interested in representing the compositions of such endomorphisms as a tensor product on the functor category \({\mathopen {}\left [\mathscr {C},\operatorname {Sh}{\mathbb {A}^{\mathscr {C}}}\right ]\mathclose {}}\).
In particular, let \({\mathscr {C}}\xrightarrow {{P,Q}}{\operatorname {Sh}{\mathbb {A}^{\mathscr {C}}}}\) be two diagrams; taking characteristic maps, we have endomorphisms of affine topoi \({\mathbb {A}^{\mathscr {C}}}\xrightarrow {{\bar {P},\bar {Q}}}{\mathbb {A}^{\mathscr {C}}}\), which we may compose to obtain \({\mathbb {A}^{\mathscr {C}}}\xrightarrow {{\bar {Q}\circ \bar {P}}}{\mathbb {A}^{\mathscr {C}}}\); then, we will define the tensor \(P\bullet Q\) to be the diagram whose characteristic morphism of affine topoi is \(\bar {P}\circ \bar {Q}\). In other words:
\[ \begin {aligned} P\bullet Q &:\equiv \mathscr {C}\xrightarrow {\mathrm {G}_{\mathscr {C}}} \operatorname {Sh}{\mathbb {A}^{\mathscr {C}}} \xrightarrow {{\mathopen {}\left (\bar {P}\circ \bar {Q}\right )\mathclose {}}^{*}} \operatorname {Sh}{\mathbb {A}^{\mathscr {C}}} \\ &= \mathscr {C}\xrightarrow {\mathrm {G}_{\mathscr {C}}} \operatorname {Sh}{\mathbb {A}^{\mathscr {C}}} \xrightarrow {\bar {P}^{*}} \operatorname {Sh}{\mathbb {A}^{\mathscr {C}}} \xrightarrow {\bar {Q}^{*}} \operatorname {Sh}{\mathbb {A}^{\mathscr {C}}} \end {aligned} \]To give an explicit computation of the tensor product, we first compute the inverse image of any \({\mathbb {A}^{\mathscr {C}}}\xrightarrow {{f}}{\mathbb {A}^{\mathscr {C}}}\) on representables \(よ_{\mathscr {C}}\Gamma \) for \(\Gamma \in \operatorname {\mathbb {L}}\mathscr {C}\). As any left exact functor \({\operatorname {\mathbb {L}}\mathscr {C}}\xrightarrow {{H}}{\mathscr {E}}\) is the right Kan extension of \({\mathscr {C}}\xrightarrow {{H\circ \eta _\mathscr {C}}}{\mathscr {E}}\) along \({C}\xrightarrow {{\eta _\mathscr {C}}}{\operatorname {\mathbb {L}}\mathscr {C}}\), we can conclude that \(H\Gamma \cong \operatorname {lim}_{\Gamma \to \eta _\mathscr {C}{d}}H{\mathopen {}\left (\eta _\mathscr {C}{d}\right )\mathclose {}}\). We will use this in our calculation below, setting \(H:\equiv f^{*}\circ よ_{\mathscr {C}}\).
\[ \begin {aligned} f^{*}{よ_{\mathscr {C}}\Gamma } &\cong \operatorname {lim}_{\Gamma \to \eta _\mathscr {C}{d}} f^{*}{ よ_{\mathscr {C}}{\eta _\mathscr {C}{d}} } \\ &\cong \operatorname {lim}_{\Gamma \to \eta _\mathscr {C}{d}} f^{*}{\mathrm {G}_{\mathscr {C}}{d}} \end {aligned} \]We are now prepared to compute the tensor product of any \({\mathscr {C}}\xrightarrow {{P,Q}}{\operatorname {Sh}{\mathbb {A}^{\mathscr {C}}}}\).
\[ \begin {aligned} {\mathopen {}\left (P\bullet Q\right )\mathclose {}}c &= \bar {Q}^{*} \bar {P}^{*} \mathrm {G}_{\mathscr {C}}{c} \\ &\cong \bar {Q}^{*} {\mathopen {}\left (Pc\right )\mathclose {}} \\ &\cong \bar {Q}^{*} \operatorname {colim}_{よ_{\mathscr {C}}\Delta \to Pc} よ_{\mathscr {C}}\Delta \\ &\cong \operatorname {colim}_{よ_{\mathscr {C}}\Delta \to Pc} \bar {Q}^{*}よ_{\mathscr {C}}\Delta \\ &\cong \operatorname {colim}_{よ_{\mathscr {C}}\Delta \to Pc} \operatorname {lim}_{\Delta \to \eta _\mathscr {C}{d}} \bar {Q}^{*}\mathrm {G}_{\mathscr {C}}d \\ &\cong \operatorname {colim}_{よ_{\mathscr {C}}\Delta \to Pc} \operatorname {lim}_{\Delta \to \eta _\mathscr {C}{d}} Qd \end {aligned} \]Finally, we can relate the computation above to that of Fiore in terms of coends.
\[ \begin {aligned} {\mathopen {}\left (P\bullet Q\right )\mathclose {}}\,c &\cong \operatorname {colim}_{よ_{\mathscr {C}}\Delta \to Pc} \operatorname {lim}_{\Delta \to \eta _\mathscr {C}{d}} Qd \\ &\cong \int ^{\Delta \in \operatorname {\mathbb {L}}\mathscr {C}} {\mathopen {}\left [よ_{\mathscr {C}}\Delta ,Pc\right ]\mathclose {}} \cdot \operatorname {lim}_{\Delta \to \eta _\mathscr {C}{d}} Qd \\ &\cong \int ^{\Delta \in \operatorname {\mathbb {L}}\mathscr {C}} P\,c\,\Delta \cdot \operatorname {lim}_{\Delta \to \eta _\mathscr {C}{d}} Qd \\ &\cong \int ^{\Delta \in \operatorname {\mathbb {L}}\mathscr {C}} P\,c\,\Delta \cdot \int _{c\in \mathscr {C}} {\mathopen {}\left [\Delta ,\eta _\mathscr {C}{d}\right ]\mathclose {}}\pitchfork Qd \end {aligned} \]Above, we have written \({\mathopen {}\left (\cdot \right )\mathclose {}}\) and \({\mathopen {}\left (\pitchfork \right )\mathclose {}}\) for the tensoring and cotensoring of \(\operatorname {Sh}{\mathbb {A}^{\mathscr {C}}}\) over \(\mathbf {Set}\) respectively. Thus, the fully pointwise computation is as follows:
\[ {\mathopen {}\left (P\bullet Q\right )\mathclose {}}\,c\,\Gamma \cong \int ^{\Delta \in \operatorname {\mathbb {L}}\mathscr {C}} P\,c\,\Delta \times \int _{c\in \mathscr {C}} {\mathopen {}\left [\Delta ,\eta _\mathscr {C}{d}\right ]\mathclose {}}\Rightarrow Q\,d\,\Gamma \]Thanks to Marcelo Fiore and Daniel Gratzer for helpful discussions.
Scientific refereeing using Bike Outliner [0084]
Scientific refereeing using Bike Outliner [0084]
I have long been an enthusiast for outliners, a genre of computer software that deserves more than almost any other to be called an “elegant weapon for a more civilized age”. Recently I have been enjoying experimenting with Jesse Grosjean’s highly innovative outliner for macOS called Bike, which builds on a lot of his previous (highly impressive) work in the area with a level of fit and finish that is rare even in the world of macOS software. Bike costs $29.99 and is well-worth it; watch the introductory video or try the demo to see for yourself.
The purpose of outliners is to provide room to actively think; Grothendieck is said to have been unable to think at all without a pen in his hand, and I think of outliners as one way to elevate the tactile aspect of active thinking using the unique capabilities of software. Tools for thinking must combat stress and mental weight, and the most immediate way that outliners achieve this is through the ability to focus on a subtree — narrowing into a portion of the hierarchy and treating it as if it were the entire document, putting its context aside. This feature, which some of my readers may recognize from Emacs org-mode, is well-represented in Bike — without, of course, suffering the noticeable quirks that come from the Emacs environment, nor the ill-advised absolute/top-down model of hierarchy sadly adopted by org-mode.
As a scientist in academia, one of the most frequent things I am doing when I am not writing my own papers or working with students is refereeing other scientists’ papers. For those who are unfamiliar, this means carefully studying a paper and then producing a detailed and well-structured report that includes a summary of the paper, my personal assessment of its scientific validity and value, and a long list of corrections, questions, comments, and suggestions. Referee reports of this kind are then used by journal editors and conference program committees to decide which papers deserve to be published.
In this post, I will give an overview of my refereeing workflow with Bike and how I overcame the challenges transferring finished referee reports from Bike into the text-based formats used by conference refereeing platforms like HotCRP and EasyChair using a combination of XSLT 2.0 and Pandoc. This tutorial applies to Bike 1.14; I hope the format will not change too much, but I cannot make promises about what I do not control.
A synthetic proof of HTT 7.2.1.14 [007T]
A synthetic proof of HTT 7.2.1.14 [007T]
Lurie states the following result as Proposition 7.2.1.14 of Higher Topos Theory:
Let \(\mathcal {X}\) be an ∞-topos and let \({\mathcal {X}}\xrightarrow {{\tau _{\leq 0}}}{\tau _{\leq 0}\mathcal {X}}\) be the left adjoint to the inclusion. A morphism \({U}\xrightarrow {{\phi }}{X}\) in \(\mathcal {X}\) is an effective epimorphism if and only if in \(\tau _{\leq 0}{\mathopen {}\left (\phi \right )\mathclose {}}\) is an effective epimorphism in the ordinary topos \(\mathrm {h}{\mathopen {}\left (\tau _{\leq 0}\mathcal {X}\right )\mathclose {}}\).
Several users of MathOverflow have noticed that the proof of this result given by Lurie is circular. The result is true and can be recovered in a variety of ways, as pointed out in the MathOverflow discussion. For expository purposes, I would like to show how to prove this result directly in univalent foundations using standard results about \(n\)-truncations from the HoTT Book.
First we observe a trivial lemma about truncations.
It follows from Lemma [007U] that \(\left \lVert \mathchoice {\textstyle \sum _{{\mathopen {}\left (x:A\right )\mathclose {}}}}{\textstyle \sum _{{\mathopen {}\left (x:A\right )\mathclose {}}}}{\scriptstyle \sum _{{\mathopen {}\left (x:A\right )\mathclose {}}}}{\scriptscriptstyle \sum _{{\mathopen {}\left (x:A\right )\mathclose {}}}}B\left \lvert x\right \rvert _{0}\right \rVert _{-1}\) is equivalent to \(\left \lVert \mathchoice {\textstyle \sum _{{\mathopen {}\left (x:\left \lVert A\right \rVert _{0}\right )\mathclose {}}}}{\textstyle \sum _{{\mathopen {}\left (x:\left \lVert A\right \rVert _{0}\right )\mathclose {}}}}{\scriptstyle \sum _{{\mathopen {}\left (x:\left \lVert A\right \rVert _{0}\right )\mathclose {}}}}{\scriptscriptstyle \sum _{{\mathopen {}\left (x:\left \lVert A\right \rVert _{0}\right )\mathclose {}}}}Bx\right \rVert _{-1}\). This is enough to deduce the main result.