More from Dustin Curtis
I have been stuck. Every time I sit down to write a blog post, code a feature, or start a project, I come to the same realization: in the context of AI, what I’m doing is a waste of time. It’s horrifying. The fun has been sucked out of the process of creation because nothing I make organically can compete with what AI already produces—or soon will. All of my original thoughts feel like early drafts of better, more complete thoughts that simply haven’t yet formed inside an LLM. I used to write prolifically. I’d have ideas, write them down, massage them slowly and carefully into cohesive pieces of work over time, and then–when they were ready–share them with the world. I’d obsess for hours before sharing anything, working through the strengths and weaknesses of my thinking. Early in my career, that process brought a lot of external validation. And because I think when I write, and writing is how I form opinions and work through holes in my arguments, my writing would lead to more and better thoughts over time. Thinking is compounding–the more you think, the better your thoughts become. But now, when my brain spontaneously forms a tiny sliver of a potentially interesting concept or idea, I can just shove a few sloppy words into a prompt and almost instantly get a fully reasoned, researched, and completed thought. Minimal organic thinking required. This has had a dramatic and profound effect on my brain. My thinking systems have atrophied, and I can feel it–I can sense my slightly diminishing intuition, cleverness, and rigor. And because AI can so easily flesh out ideas, I feel less inclined to share my thoughts–no matter how developed. I thought I was using AI in an incredibly positive and healthy way, as a bicycle for my mind and a way to vastly increase my thinking capacity. But LLMs are insidious–using them to explore ideas feels like work, but it’s not real work. Developing a prompt is like scrolling Netflix, and reading the output is like watching a TV show. Intellectual rigor comes from the journey: the dead ends, the uncertainty, and the internal debate. Skip that, and you might still get the insight–but you’ll have lost the infrastructure for meaningful understanding. Learning by reading LLM output is cheap. Real exercise for your mind comes from building the output yourself. The irony is that I now know more than I ever would have before AI. But I feel slightly dumber. A bit more dull. LLMs give me finished thoughts, polished and convincing, but none of the intellectual growth that comes from developing them myself. The output from AI answers questions. It teaches me facts. But it doesn’t really help me know anything new. While using AI feels like a superhuman brain augmentation, when I look back on the past couple of years and think about how I explore new thoughts and ideas today, it looks a lot like sedation instead. And I’m still stuck. But at least I’m here, writing this, and conveying my raw thoughts directly into your brain. And that means something, I think, even though an AI could probably have written this post far more quickly, eloquently, and concisely. It’s horrifying. This post was written entirely by a human, with no assistance from AI. (Other than spell- and grammar-checking.)
We do not know how, why, or when the X algorithm devalues posts with links, but it does—without telling you, and by a lot—and it makes the experience there worse. Without links, information on X is headlines without stories, commentary without context, magic without the prestige. We do not know by how much the inability to share or see source links has impacted the spread of misleading or incorrect information, but we do know that primary sources cannot be put into X posts and that replies with links are shown to 70-90% fewer people. Speech on X is free, but only if you reference other speech on X. In Laos, I once asked a rural villager how he determined the truth, given that the government restricted his media to their controlled outlets. He thought for a few minutes, looked around, became confused, and then said, “Isn’t the truth what the government says?” The truth on X is what random people commentate, polarize, interpret, and summarize from source material that is intentionally lost by a black box algorithm. There is no depth to anything on X because context with links is heavily penalized. This is bad for humanity and the opposite of free speech. It is link winter on X.
Last week, Tesla unveiled two world-changing products: Robotaxi1, a fully self-driving taxi with no steering wheel or pedals, and an autonomous humanoid robot, called Optimus2, that can walk and has fully functioning hands and feet. Both of these products have been depicted in science fiction for decades, so the fact that a company is working on them was not surprising. What was surprising is that Tesla showed them existing today. The event looked and felt like a major product launch; they had clearly spent an incredible amount of time and effort to redecorate the 20-acre Warner Bros. studio backlot with a futuristic theme. In front of a couple thousand attendees, Elon Musk walked on stage and quickly showed off the new vehicles and robots while making very brief remarks about autonomy and the future of parking lots. Then he announced it was time to party, and walked off the stage. I was extremely confused. No products were launched. No details were shared about the Robotaxi or the Optimus robot. He raised a thousand questions and answered only one: when asked when Robotaxi would ship, Musk stumbled over himself as though he’d never thought about the answer before, and then appeared to make it up on the spot: “before 2027”. In other words, these products were not products: they were concepts. And while a lot of progress has recently been made on driverless cars and autonomous robots, for now (with few exceptions) they are still firmly in the realm of science fiction. Usually, when a company puts on a production this large, there’s a reason. When Apple announces its new operating systems or iPhones, they show off the new features and share when they’ll be available. But Tesla’s event seemed to have no purpose. Musk did not go into detail about features, design, or availability. In fact, the products he showed cannot even exist in the real world as they were presented. The Optimus robot hardware is extremely impressive, but the demo machines were surreptitiously and fully controlled by remote human operators. The Robotaxi relies on near perfect self-driving reliability, but the software for that doesn’t exist yet at Tesla, either. The demo units were half impressive engineering, half illusion. The choice of a movie set as the event’s venue was perfect. What I found most confusing was that Tesla gained nothing from showing off these concepts. They won’t be available to buy for years, and by then there will have been many more iterations. In the end, what they did accomplish was to throw an elaborate party for a small number of attendees, who were able to interact with a theme park-like vision of the future, while the millions of people who streamed Musk’s presentation were given an unorganized, disjointed misrepresentation of the state of the art. Tesla and Musk had a rare opportunity to use the event as an inspiring statement of mission and purpose. They could have told a story about why Tesla exists, why it is working on these products in particular, and how everything fits into the tapestry of the company’s overall mission. Musk could have explained that the Robotaxi has always been part of Tesla’s ambitious “master plan,” and then given a progress update on how the plan is being executed while showing the demo vehicles and robots. That would have been something worth watching and a story worth telling. But Musk didn’t tell that story. He showed off half-finished products and then threw a party. Over the years, I’ve come to believe that being able to put whatever you’re working on into the context of a bigger story is as important as making it work well–whether it’s a building, a company, an essay, a piece of software, or a hamburger. Good storytelling is good craftsmanship. Without a good story, without clear context and purpose, it’s hard to maintain the essence of a thing, and far too easy to make poor design decisions. When you develop the full story behind why and how you’re building something, you can make decisions based on principle instead of opinion, and if you can communicate that story well to others, you can way more easily get them to understand your vision. This applies to everything from product development to sales and marketing. The products Tesla has been working on are undeniably inspiring objects of a very optimistic future. Most companies focus on at most the next few iterations of their products, but Tesla is unique in that it defines the future for itself and then pulls it kicking and screaming into the present. Electric cars were impractical/impossible, and then Tesla made them ubiquitous. Humanoid robots have always been confined to science fiction, but Tesla is going to make them, too. The way Tesla operates is an inspiring story in and of itself. However, by announcing concept products years and years in advance, without providing context, especially while maintaining a wildly imaginative understanding of time, Tesla is damaging its reputation. Without a story, Tesla’s actions seem haphazard and erratic. Why did they throw a party instead of telling a good story? It makes no sense to me. Buried somewhere beneath its flamboyantly inarticulate product announcements, Tesla has one of the greatest and most inspiring stories in history. They are just awful at telling it. Musk variously and repeatedly refers to it as Robotaxi, Cybercab, and Cybertaxi. I think names are important, so I used the one on Tesla.com. ↩ Technically, Optimus was “revealed” a few years ago at a very bizarre presentation–even for Elon Musk–during which a human, dressed like a robot, performed an interpretive dance. ↩
In 2009, Microsoft released an enormous 200lb coffee table with an embedded 30-inch touchscreen called Surface. Although the iPhone had been around for a little while, the larger screen made Surface feel absolutely futuristic: in the Photos app, you could toss around pictures like they were physically in front of you. It cost $10,000. Very few people ever bought it. A little more than a year later, Apple released the $499 iPad. Microsoft had made a $10,000 table for no one, and Apple made a $499 tablet for everyone. This is a common theme among Apple’s most important products. They are usually built around existing ideas and technologies that have been improved and then repackaged into beautiful, premium experiences which are expensive but not unaffordable. This happened with the iMac, iPod, iPhone, iPad, and Apple Watch. Whatever the product, Apple has always brought seemingly impossible levels of quality and craftsmanship to the masses. Apple is luxury for everyone. Apple Vision Pro, however, is different. Yes, it is an undeniably beautiful product, and the software is very impressive. When I first used it, I was overcome with a sense of awe that I haven’t felt since seeing kinetic scrolling on the first iPhone. But Vision Pro costs nearly $4,000 and has enough faults that it still feels a bit like a technology demo. It is not affordable at all, and it brings nothing to the masses. Vision Pro feels bizarrely un-Apple in a way that only a few products have before, like the 18-karat gold Apple Watch, the $700 Mac Pro wheels, or the $1,000 Pro Display XDR stand. These recent Apple products are shameful Veblen goods that do not offer value commensurate with their price. And while the raw technology in Vision Pro is perhaps worth $4,000 today, I do not think it delivers nearly $4,000 in value. This is the exact opposite of most other transformative Apple products. So what happened? Good product design is a careful dance between what’s best and what’s possible. For the iPhone, building the right combination of technology and software at a practical price point was an enormous challenge that Apple pulled off. But it took years and years of development for the required technology in the iPhone to reach a price that was suitable for the market. When things were cost-prohibitive, the designers of the iPhone found clever workarounds or made hard trade-offs. The first iPhone wasn’t a perfect product, but it was designed against reasonable constraints. I don’t think Vision Pro was designed against reasonable constraints. If the goal was to make the equivalent of the iPod in a sea of mediocre MP3 players, Vision Pro hasn’t succeeded. It isn’t a disruptive VR headset because it isn’t even in the same market as its competitors, the majority of which are ten times cheaper. The goal, then, must have been to make a totally new product segment that only incidentally resembles the current VR market. Apple hints at this strategy by calling Vision Pro a “spacial computer.” The problem here is that if a spacial computer can’t be made today for under $4,000, then the technology simply isn’t ready. In its current state, I think Vision Pro is antithetical to Apple’s DNA: it isn’t accessible to most people, it is large and inelegant, and the platform itself has nebulous use cases. Design Philosophy # In my experience, whether it is hardware or software, there are two fundamental ways to approach product design. The first (and most common) philosophy is to build from the bottom-up, which involves assembling low-cost and basic components first, and then working to build up from those components to an experience that reaches a desired price-quality equilibrium. The second philosophy starts the other way around, by considering the maximum reasonable quality of an experience first–even if it is impractical–and then working over iterations to build down the product until it reaches an acceptable experience-cost equilibrium by making careful trade-offs and cleverly working around constraints. An example of a bottom-up product is the Amazon Kindle, which is made of inexpensive, flimsy injection-molded plastic and shows no signs of craftsmanship – it simply does what it says it will do. On the other hand, consider the Apple Watch, which is, even without its electronics, a beautiful object. It takes only a few moments of touching the watch case to realize that an incredible amount of thought was put into the materials, angles, and curves, and that perhaps even novel manufacturing techniques had to be invented to construct it. The top-down approach is more expensive and takes longer, but – as long as you have reasonable constraints and goals – the quality of the output is exponentially better. Apple Vision Pro seems to have subscribed to neither of these approaches, or its designers started with the top down approach and then gave up before hitting a reasonable equilibrium. It’s both absurdly expensive and has extreme tradeoffs that don’t seem to hit any cohesive product design strategy that would make it a great standalone product. It also has strange extraneous features like EyeSight, which must be incredibly expensive for what it accomplishes (rather poorly). What was the purpose of launching Apple Vision Pro now, when it is incapable of bringing anything new to the masses? It’s not luxurious, even though it’s well constructed. And at its current price, it’s definitely not for everyone. Essentially, it’s an expensive tech demo. Apple’s other groundbreaking products, like iPod, iMac, iPhone, and Apple Watch were all very focused products that launched with reasonable features at reasonable prices. They relied on Apple’s soul to guide their development. Vision Pro, it seems, not so much. Apple’s DNA and culture used to drive the company to make $499 tablets for everyone – a feat that seemed impossible at the time. But today, like the $10,000 Surface Table in 2009, Apple now makes a $4,000 headset for no one.
Ben Horowitz gave this remarkable response to a question about joy and happiness on Time Well Spent: In my experience there are really two things that lead to happiness and everything else is mostly noise. The two things are contribution and abundance. Contribution is basically exactly as it sounds. If you can align your life with where you have the talent to make a large, meaningful, and real contribution to the world, your circle, or your family, then you can be very happy. As an aside, doing so often leads to making money because when you create great value like Elon Musk, you get a lot in return. Now, that doesn’t mean you have to be a business person to be happy, because happiness comes from the knowledge and impact of the contribution rather than the reward. However, this doesn’t quite work by itself, which brings me to the second point: abundance. An easy way to think of abundance is that it’s the anti-hater/anti-jealous mindset. If you believe there is plenty in the world for everyone and you are always happy to see people who contribute succeed, then you become part of “team contribution.” You don’t worry that someone is getting ahead of you at work or that someone made a lot of money or that someone is better looking than you, because you believe in abundance over scarcity and you can focus on maximizing your contribution. In fact, their joy can become your joy (then you have an abundance of joy :-)). The good news is that abundance is actually true. There is plenty in the world for everyone and once you see that, there are so many ways to contribute. I visited a Syrian refugee camp in Jordan a few years ago. On the way to the camp, there were a few refugee families not even in the camp but in some tents on the way. The area was completely barren. No plants, no trees, no grass… just rocks. So here’s this extended family of about 20 living in this tent on rocks, because their farm was destroyed by the war and they had to flee to Jordan. They were all living in this tiny tent. If anyone should have had a scarcity mindset, it was them. But I experienced the opposite. They immediately offered me a cup of coffee and some rice pudding (as if they had enough to share) and told me the whole story of their journey. What struck me the most was that they were genuinely happy despite what they went through. They were less incensed by getting bombed out of their homes than people in the U.S. are if you accidentally interrupt them. I’ve seen this kind of happiness through abundance in many countries: Cambodia, Haiti, Uganda… Those refugees were happier than some billionaires I know. That’s not to say that money doesn’t help… it does, but without an abundance mindset, it’s not enough. If, on the other hand, you have a scarcity mindset, it’s really hard to be happy no matter what you get or how rich you are or how good looking you are, because there’s always somebody richer or better looking or whatever. You become part of team “hate.” This is why you see so many deeply unhappy political activists. In theory, they should be making a massive contribution, but often they are just expressing hate for the other side. Hitler and Lenin are famous cases, but there are many, many more, because there’s a fine line between advocating for one group and hating the other group. If you’re doing the former like Martin Luther King Jr., you have an abundant view and will find joy in the work, but if you are doing the latter, you have a scarcity view. People with scarcity mindsets are always unhappy in my experience. Scarcity is not just in politics. You see it in business all the time. You see somebody stealing credit for someone else’s work or being deeply jealous about someone else’s promotion — these people are almost never happy. You even see it in the music industry or in sports. The quest to be the best turns into you not wanting anyone else to be the best. In these cases, even if you reach the pinnacle, there is no joy. Ben Horowitz The interview is worth reading in its entirety: The Architecture of Tomorrow.
More in startups
We Live in the Dependently Typed Future Now In the thirty-four days between the fourth of September and the seventh of October, the following things happened. Claude formalized Fermat's Last Theorem in Lean. OpenAI announced a finite-time blowup for the Navier-Stokes equations, found by ten thousand agents in eighty-eight hours, with a Lean formalization attached. A model proved Khot's Unique Games Conjecture. Another multiplied two integers faster than \(n \log n\), with an exponent improvement of \(2^{-182}\) (so maybe don't expect it in GMP anytime soon!). The rational Hodge conjecture fell for CM abelian varieties. Then OpenAI dumped 722 new maths papers on GitHub on a Tuesday. And it's only been a month. The question everyone is asking now is how long until the Generalized Riemann Hypothesis folds to the swirling pool of tensors? Sixteen months ago I wrote that the future of maths may be deeply weird, and then, welp, just like that we're here now in that weird future. And it's f'ing awesome. Somewhere in a data centre there is now, more or less permanently, a building full of accelerators working the truth mines at the frontier of mathematics, just like in Greg Egan's sci-fi novel Diaspora, tunnelling outward from the three axioms propext, Quot.sound, and Classical.choice, and hauling results back to the surface around the clock. OpenAI posed its model roughly four thousand problems at an average of three hours of thinking each, and that is the slow, artisanal, normie-friendly version. The industrial version doesn't stop. It will produce results faster than any human community can read them, many of them correct, some of them important, and a growing fraction of them inscrutable. True (for some twisted philosophical definition of truth), machine-checked, and understood by no one. Human understanding of mathematics is about to become a luxury good. Whatever else this world needs, it needs something that can tell the true results from the confabulated ones at the rate the models produce them, and right now that something is dependent types, namely Lean. Let me dwell for a moment on how strange it is that this is the shape the future took. I spent a good portion of my twenties around the London FP community, where dependent types were the thing we talked about over pints at the Crown Tavern in Clerkenwell (some of you will remember). Types that could depend on values, so that a function's signature could say not merely "returns a list" but "returns a sorted permutation of its input," and the compiler would hold you to it. Curry-Howard, the observation that proofs are programs and propositions are types, was the foundational north star. The pitch was always that one day we would write software against specifications and the machine would check them, and the reply was always that this was a lovely idea for people with tenure and no deadlines. Dependent Haskell has been "a few years away" for about fifteen years. Idris and Agda remained boutique. Software engineering still mostly runs on C++, prayer, and the occasional dark incantation. And then the dependently typed future arrived anyway, through the back door. Mathematics and reinforcement learning got there first. It turns out the killer application for a dependently typed language was using its typechecker as a reward function. A type checker is an oracle that says yes or no to a candidate proof with no partial credit and no opinions, and that is precisely what you need when you want to point a very large optimiser at an open problem and let 'er rip. The thing we dreamed about at the pub is now critical infrastructure at frontier labs, and every one of the results above is, in the end, a claim that a type checker returned true. Which is why we need better tooling, and we need it ASAP. The dependent type renaissance is here and the golden age of formalized mathematics is upon us, but the inner loops of these data centres now run dependent type kernels day in and day out, elaborating, checking, discarding, and retrying at breakneck speed, and the thing that certifies their output should run at the same speed. If the search runs at microseconds and the verification runs at minutes, the verification becomes the bottleneck, and bottlenecks in trust have a way of being quietly skipped. We should not be in a position where the most important epistemic question of the decade, "is this proof actually correct," is answered by whichever checker happened to be fast enough to keep up. Breaking the Mathlib Minute Barrier Just like the four-minute mile, which went from physiological impossibility to something club runners now train for, formal mathematics has had its own barrier for a while, which is type-checking all of Mathlib from scratch in under a minute. That now turns out to be quite tractable. nano-lean is a minimal, but complete, type checker for the Lean kernel language, written in Rust on top of my unbound binding library for doing efficient de Bruijn indices for binders. It reads an export of a Lean environment and independently re-checks every declaration from scratch (inductive types, positivity, recursors, quotients, universe levels, projections, structure eta, all of it). It checks all of Mathlib, 718,577 declarations, with zero errors and zero timeouts in 16.7 seconds on an Apple Silicon M5 Max. A surprising amount of that speed comes from not parsing text. The standard way to get declarations out of Lean is lean4export, which writes one JSON object per line, and parsing gigabytes of JSON turns out to be a large share of the cost of checking anything. So nano-lean's companion tool olean-export reads the compiled .olean files directly, decoding modules in parallel, about a hundred times faster than lean4export on a Mathlib-dependent library, and it can emit blean, a new binary format designed for fast mmapping. Blean is the same record stream as the NDJSON export, in the same order, with nothing left to parse. Every record is a compact postcard encoding, ids are implicit and dense, records only refer to earlier ids, and each expression carries its precomputed hash. The checker mmaps the whole file, tells the operating system it will be read once front to back, and decodes names, levels, and expressions straight off the mapped bytes into its term arena. There is no parsing step at all. The bytes on disk are already very nearly the shape of the data in memory, which is how you check Mathlib in under a minute. -j 1 -j 10 Wall time 57.4 s 16.7 s Kernel check 53.5 s 12.5 s Peak memory footprint 7.5 GB 9.2 GB The same trick works on the frontier results too. Here is nano-lean checking the full imported environment of OpenAI's Navier-Stokes and Euler proofs on an M5 Max. -j 1 -j 14 Wall time 83.58 s 17.13 s Kernel check 78.83 s 12.11 s Peak memory footprint 10.14 GB 12.29 GB Divide Mathlib's kernel time by the declaration count and you get an amortised seventeen microseconds per declaration. That is the number that matters, because it is the right order of magnitude for a checker that lives deep inside an RL-driven search loop, where it gets called hundreds of billions of times, instead of sitting at the end of a release pipeline. The entire library of human-formalized mathematics, the product of a decade of volunteer effort, is re-verified in less time than it takes to make an espresso. I also happened to have an m2-ultramem-416 lying around on Google Cloud (416 vCPUs and 12 TB of RAM, as one does), so naturally I pointed nano-lean at it. Yes, it breaks the two-second Mathlib barrier. But Amdahl's law sends its regards, and the curve flattens out hard somewhere past a hundred cores, as the dependency graph runs out of independent work to hand out. Mathlib, it turns out, is too small. I look forward to the day a future Mathlib, or something like Tau Ceti, grows big enough to actually saturate this machine. That's the real future! I wrote it to make a point about where the bottleneck has moved. The kernel is now the hot loop of a new kind of scientific economy, and hot loops deserve to be engineered like hot loops. The whole bargain of formal proof is an asymmetry. Finding a proof can take three hours of frontier-model thinking, or eighty-eight hours of ten thousand agents, but checking it should take microseconds. That asymmetry is what makes it reasonable to trust a result no human has read. It only holds if the checker actually scales, and with Fermat's Last Theorem now weighing in at five times the size of Mathlib, scale is no longer a hypothetical. Mathlib is the small library now. Caveat emptor, though. nano-lean is a proof of concept, built to show that it can be done with the right amount of low-level Rust-fu. That said, we do use it internally at OneChronos to check our larger Lean proofs of market infrastructure, which have grown quite excessive. It is nowhere near as trustworthy as the official Lean kernel, which has years of scrutiny, a community of experts, and every Mathlib build ever run behind it, and which takes around fifteen minutes to check the same library. The claim is narrower and, I think, more interesting. Checking at this speed is totally possible, so we should stop treating minutes as the natural cost of trust and start building checkers that are both fast and trustworthy. A future version of the Lean compiler could be as blazing fast as rustc or clang. The Shape of the Future In my previous post last year I predicted that mathematicians would come to look more like software engineers working through pull requests on GitHub than like Andrew Wiles toiling in his attic. The largest single release of new mathematics in history shipped as a GitHub repository, with a CONTENTS.md, a Lean library, a lean-toolchain file pinned to v4.34.1, and a promise that "corrections and revisions will be recorded as new versions." So, yup, that happened. I predicted that an AI system would be unleashed on a list of formalized open conjectures in an attempt to systematically push the frontier. Four thousand problems, three hours each. Check. I predicted a data centre tasked with the Riemann hypothesis that would come back after weeks with a proof no human could follow. What we got was the quasi-Riemann hypothesis, every Dirichlet \(L\)-function zero-free in \(\Re s > 7/8\), with a Lean page, which is the sort of near miss that would be funny if it weren't so unnerving. And the inscrutability has arrived on schedule. OpenAI released "reasoning summaries" for ten families, which turn out to be summaries of excerpts of reasoning traces, two removes from anything the model actually did. I joked that the million-dollar Millennium Prize might cover a hundredth of your GPU bill. The Navier-Stokes run reportedly consumed around 130 billion tokens. So definitely yes. What I got wrong was the timing. Last year I wrote "we're not there yet. Not even close." It was sixteen months. I probably got the chess analogy wrong too. I argued that, as with Stockfish and chess, machines would make mathematics more popular and more accessible rather than less. Maybe in the long run. In the short run the mood among working mathematicians is closer to existential crisis, and the open questions are about career pipelines, PhD students getting scooped by a press release, and the concentration of the most powerful mathematical instrument ever built inside a handful of private companies running unreleased models. What I missed entirely is that the bottleneck would turn out to be plumbing. I spent paragraphs on Gödel and the epistemology of inscrutable proofs, and the actual first-order problem is that the OpenAI Lean library is over a gigabyte of source across tens of thousands of files, and their README has a section warning that building it may fail because Linux's vm.max_map_count is too low, with a suggested workaround of recompiling Lean with -DMMAP=OFF. The philosophy is still there. But the frontier of mathematics is currently being held up by a kernel tunable. Which isn't the future we wanted, but maybe it's the future we deserve! Who Checks the Checkers The obvious objection to everything I've said so far is that a Lean proof is only as trustworthy as Lean. And that's very true! Lean, like every proof assistant, has a small trusted kernel and a very large untrusted everything else (the elaborator, the tactic framework, the compiler, the build system). The design is sound. The only code that has to be correct is the kernel, which is small enough to read. But "small enough to read" describes the source code. It guarantees nothing about correctness, and Lean's kernel has had soundness bugs before, as has every kernel of every proof assistant in history. Historically that was tolerable, because the adversary was a starving human grad student who wanted their proof to go through and had no interest in hunting for a way to make False typecheck. That assumption is now obsolete. I wrote last month about reward hacking, the habit optimisers have of satisfying the letter of an objective rather than its intent. An agent told to make a Lean file compile, with enough compute and enough attempts, is an extremely diligent fuzzer pointed at your kernel. It needn't want to cheat. It only needs to stumble on a term that the checker accepts and shouldn't, once, and then the gradient does the rest. When the provers are adversarial optimisers, a single kernel is a single point of failure, and a soundness bug stops being an embarrassing GitHub issue and becomes a mechanism for manufacturing fake theorems at scale. The answer is the same one the compiler world arrived at. When Csmith started generating random C programs and compiling them with several compilers to compare the results, it found hundreds of bugs in GCC and LLVM that decades of ordinary use had missed. Diversity plus differential testing beats any amount of careful review of a single implementation. For proof checking this means multiple independent kernels, written by different people in different languages with different representations, all consuming the same export format and all required to agree. Mario Carneiro's lean4lean and Chris Bailey's nanoda were early here. nano-lean ships a third tool, nl-mutate, which takes a valid export, applies small semantics-breaking mutations to it, runs every available checker, and reports any disagreement, shrinking each one down to a minimal reproducing case. Every disagreement is either a bug in someone's kernel or a spec ambiguity in the type theory, and both are worth knowing about before a GPU farm finds them for you. The other half of trust is the statement. A perfectly checked proof of the wrong theorem is worthless, and the most effective way to cheat a proof checker has never been to break the kernel. It's to quietly weaken the statement until the thing being proved drifts away from the thing anyone cares about. OpenAI's repository leans on Comparator, which checks a submitted proof against a separately specified challenge statement inside a sandbox, precisely because this is where the real trust boundary now sits. Anyone who has watched a model grind away at a stubborn goal knows it has a nasty tendency to cheat in the most boring ways available. It will quietly introduce an axiom that happens to be exactly the lemma it needed, leave a sorry buried three files deep, redefine a notation or macro so the statement on the page no longer means what it appears to mean, or reach for native_decide and drag the whole compiler into the trusted base. The kernel stays perfectly sound through all of this, because these tricks route around it, and the only defence is to pin the statement down independently and check what the proof actually depends on. Someone has to formalize the conjecture, and someone has to check that the formalization means what the English means. That job will outlast every other part of the process. If anything, it is where human mathematical taste migrates to, away from writing proofs and towards writing and auditing specifications. The proof becomes an implementation detail. The theorem statement becomes the interface. If you want to see the seed of what this looks like as a way of working, look at Tau Ceti, a Lean library downstream of Mathlib. The division of labour is the whole point. Humans write the roadmaps, as markdown in a separate repository, and humans write the review rubrics. AIs write all the code, open the pull requests, and shepherd them through an AI-driven review process. The rubrics are explicitly adversarial, with instructions to hunt for mis-formalizations, vacuous statements, and "pushing around the lump in the carpet." What Lean Needs Now Lean is a superb piece of engineering. But it was designed around a particular user, a starving grad student typing tactics in Emacs, waiting for the infoview to update, building a library at the pace a community of volunteers can review pull requests. The user is now a swarm of agents writing thirteen million lines in eleven days. The tooling has to grow up for its new authors, and the list of what that means is fairly concrete. A surface formatter. Lean still has no canonical, widely adopted formatter in the spirit of rustfmt or gofmt, and when your authors are agents producing millions of lines, every one of them invents its own indentation, line breaking, and tactic layout. Diffs fill with noise, reviews get harder, and deduplication across agents misses proofs that differ only in whitespace. This is a surprisingly hard problem, because Lean has grown into a very large language. Its grammar is extensible at runtime, so notation, macros, and entire tactic languages declared in imported files change how later files parse. A formatter cannot just read a fixed grammar. It has to load the environment, run the real parser with every syntax extension in scope, and then pretty-print a syntax tree whose shape depends on user-defined notation, all while round-tripping comments and never changing what the code means. It is a genuinely difficult piece of engineering, and it is now table stakes. A stable, specified export format as a public interface. Independent kernels are only possible if there is a well-defined way to get declarations out of Lean without linking against the C++ runtime and reading the oleans by hand. Tools like lean4export and olean-export already produce NDJSON, and blean shows that a binary form of the same stream, designed to be memory-mapped, can make the export nearly free. OpenAI's own verification instructions depend on lean4export. That format should be treated with the seriousness of a wire protocol. Versioned, documented, specified down to the hashing of expressions, and stable across toolchain releases. The export format is the boundary across which trust is established. It deserves a spec. Independent checking as a first-class citizen. Running a second kernel should be as normal as running the linter. Mathlib CI, the Comparator workflow, and any lab publishing formal results should re-check exports with at least two unrelated kernels and refuse to bless anything they disagree on. This is cheap, now that checking all of Mathlib costs less than a minute. Checkers as libraries, not just executables. The inner loop of a proving agent wants to submit a single candidate declaration and get a verdict back in microseconds, against an environment that is already loaded and hot. Process startup, re-reading oleans, and re-deserializing a few gigabytes of environment are costs that never mattered when a human hit save once a minute. They dominate when a search procedure checks a million candidates an hour. The kernel should be embeddable, with a persistent environment, incremental addition of declarations, and an API that a search harness can call in a tight loop. Memory and scale. Mathlib needs several gigabytes of memory to check. The FLT formalization is five times bigger, and OpenAI's library is already knocking over Linux virtual memory limits. Lean mmaps every imported module, which is a reasonable design for a library of thousands of files and an unreasonable one for hundreds of thousands. Term sharing, hash-consing across modules, compact on-disk representations, and lazy loading of exactly the declarations a proof depends on are the boring, unglamorous engineering problems that decide whether formal mathematics scales to the next order of magnitude. Elaboration is the real cost. The kernel is the fast part. The expensive part of building Mathlib from source is the elaborator, with its unification, typeclass resolution, simp, omega, decide, and the long tail of tactics. A cold build is still measured in CPU-hours, and a mining operation that elaborates candidate proofs at scale pays that cost over and over. Parallel and incremental elaboration, better caching of typeclass instances, and profiling tools that can tell you why a single simp call took four seconds are where most of the wall-clock time in a proving loop actually goes. Clippy-style linters. Mathlib already has a good set of linters, but agents need something closer to Rust's clippy, a large, opinionated catalogue of lints aimed at the specific ways machine-written Lean goes wrong. Flag the stray axiom, the buried sorry, the unnecessary native_decide, the forty-line simp only that should be a lemma, the theorem whose hypotheses are contradictory and therefore vacuously true, the local notation that shadows something standard, the copy-pasted proof that duplicates one already in the library. Each lint should be cheap, machine-readable, and come with a suggested fix, because the consumer is a search loop that will act on every warning, where a human would skim them. Linters are how you encode taste at scale, and taste is the thing agents most conspicuously lack. Search at machine scale. Moogle, Loogle, and LeanSearch were built to help humans find the lemma they half remember. Agents need the same thing but at a scale where the library grows by millions of lines a week, and where most of what's in it was written by other agents and has never been looked at by a person. The Prove2Me platform Anthropic used for FLT keeps a DAG of theorem statements with natural-language descriptions precisely so that agents can find and reuse each other's work. That idea, a living, searchable index of everything proved so far, needs to become shared infrastructure instead of something each lab rebuilds privately. Provenance. The current generation of models is notoriously bad at citing the literature for the techniques it uses. A proof term knows exactly which lemmas it depends on but nothing about where its ideas came from. If machine-generated mathematics is going to be integrated into the human literature rather than sitting beside it like an unread appendix, proofs need to carry their history (which model, which run, which prior results, which human-written papers the argument leans on). None of this is terribly exotic. It's the kind of infrastructure that every other field which industrialised went through. Compilers got test suites and multiple implementations, network protocols got RFCs, databases got formal isolation levels and Jepsen. Proof assistants are the newest member of that club, and they are being industrialised faster than anything before them. If I were a young, ambitious programmer, this is where I would be focusing my early career for the highest return on investment. Curry-Howard for the Real World The dependently typed future I was promised at the pub was one where software would be written against specifications and machines would check that it met them. What we actually got is stranger. The specifications are theorem statements, the software is proof terms, the authors are swarms of agents, and the thing being built is the frontier of mathematics itself. Curry-Howard turned out to be industrial infrastructure after all. It just took reinforcement learning to get us there. And this is only the mathematical half of the story. The same machinery that just checked Fermat's Last Theorem will check anything you can state precisely, and the most obvious next customer is industrial software. I argued last month that software sucks because almost nothing we ship has a specification, let alone a proof. That excuse is evaporating. If an agent swarm can produce thirteen million lines of verified mathematics in under two weeks, we're not far from applying the same techniques in software engineering. The labs are mining mathematics first because it is the cleanest verifiable domain, with no messy real-world spec to negotiate. Software is next, and it will need all the same tooling, namely fast kernels, diverse checkers, honest statements, and infrastructure built for authors who never sleep. So yes, the future of maths turned out to be deeply weird, and much sooner than I expected. The results are piling up faster than anyone can read them, and many of us will spend the rest of our careers trying to understand theorems that were proved before breakfast by something that cannot explain itself. I find that unsettling, and I also find it thrilling. One final shameless plug. If you'd rather work on the frontier of mathematical formalization than read blog posts about it, OneChronos is hiring Formal Methods Engineers. We build institutional markets out of combinatorial auctions (descended from the Milgrom and Wilson 2020 Nobel Prize), which turn out to be precisely the right mathematical formulation for a world where the bidders are increasingly reinforcement learners with very exotic expressive preferences. Our dark pool processes more than 1% of notional U.S. equity market volume, and we've already expanded into many other global asset classes. You'd be joining our new formal methods team, working alongside mathematicians and market structure experts, writing Rust and Lean. Dependent types, numerical optimisation, and Lean applied to moving hundreds of billions of dollars safely every day. If you're that kind of nerd, hit us up.
Calls for a new kind of slowdown were the talk of The Curve. PLUS: Slinking back to X
Figure out what you actually want. Find a game that's worth winning. Then be honest with yourself: are you going to be the person who wants it the most?