More from haseeb qureshi
@SemiAnalysis_ recently found something bizarre in the economics of AI coding subscriptions. If you run them at max usage limits, you’re actually paying 20x-70x cheaper than you would buying tokens through the API. Many people looked at this and said: oh my god, look how much the labs are subsidizing tokens, the bubble must be about to pop soon. This is the wrong response. The reason why labs are willing to offer such generous plans, of course, is because most users are rarely hitting their usage limits. The product works like a gym membership: the limit is generous because most people barely use it. But I’ve spent a lot of time thinking about this, and it’s true that something weird is going on here. We don’t know what their actual blended margins are on subscriptions, but SemiAnalysis estimates that at 20% average utilization, Anthropic breaks even on their Max 5x plan. 20% utilization is probably on the high side, especially in orgs where everyone (including non-coders) have subscriptions and are only busting it out once in a while. Most places I know, including Dragonfly, give out Claude Code subscriptions liberally and encourage non-coders to experiment with it. But what SemiAnalysis doesn’t dwell on here is that this is exclusively a small company phenomenon. The subscription pricing model is not available to large companies. Here’s why: at 150+ people, you are forced off the subscription model, which is known as the “Team” plan. You have to switch to “Enterprise,” which is priced as $20/seat base, plus API pricing per token used. Enterprises must pay linearly based on token costs, and SemiAnalysis believes API tokens are priced at roughly 75% gross margins. This is a massive price hike that kicks in suddenly at 150 seats. So if you’re a small business or a startup (or a personal user), you have a distorted view of AI spend. Your token pricing is actually very generous, and Anthropic may be running at low or even negative margin on you. You might have wondered why Microsoft and Uber are freaking out about token spend and talking about “token-minning.” This is why. They pay structurally higher costs per token than startups and individuals do. But Anthropic doesn’t care! Max extracting from small companies or individuals just doesn’t matter much for a B2B company. If you look at companies like Datadog or Cloudflare, they make 80-90% of their revenue from large (100K+ ARR) contracts. Making 0 margins on the long tail is just a customer development cost. This is the standard B2B sales way to think about this pricing strategy. But there’s another way to think about this same situation: through the lens of tax policy. Because if tokens are replacing labor, then the gross margin that OpenAI and Anthropic collect on tokens is effectively a tax on AI labor. There are two major consequences to thinking about token pricing this way. Token Pricing as Tax Policy Let’s assume the margins stated in the SemiAnalysis piece: breakeven on subscriptions, 75% gross margin on API for BigCos. The instinct is to call that a 75% tax on AI labor for large organizations, and 0% tax for startups. Standard tax analysis would say this is a disincentive to use AI labor within large companies, which pushes at the margin more toward less automation and retaining more human labor. (It obviously also incentivizes using smaller/open models, but the net effect is that it incentivizes both. Remember, we’re thinking at the margin here.) But the part that drives behavior even more strongly is not the average rate. In tax policy it never is. What we care about is the marginal rate. And for startups on a flat-rate subscription, the marginal price of the next token, up until the usage limit, is zero. And a zero marginal price is the most distortionary a policy can possibly be. For a startup, the subscription model is basically an innovation subsidy. The overwhelming incentive is to experiment how to spend the entire token budget as effectively as possible. That means running Ralph loops, papering your screen with Claude Code sessions, and orchestrating swarms of agents. Exploration is free until you hit the usage limit, so startups are effectively competing to squeeze every last drop out of their subscriptions to out-produce their competition. Perversely, the more you use, the lower your average token price is. Each startup wants to be the one that makes Anthropic lose the most money on their subscription. BigCos face the opposite incentive. If you’re beyond the 150-seat threshold, every token of exploration is billed at full markup (with 75% surcharge!), so they’re punished linearly for exploring the frontier. BigCos will still automate the obvious high-volume tasks, but the marginal, experimental, risky automations never get found because the discovery cost is too high. This tax structure ultimately pushes them toward keeping more human labor and maintaining the same overall org structure. It’s like a reverse Japan. Japan has a massive labor shortage due to its declining population. Historically this has meant Japan has pursued high degrees of automation, because high labor costs incentivize automation. That’s why Japan has robots in restaurants, factories, hotels, and hospitals. But weirdly, big companies find themselves in a reverse Japan situation: if they are paying very high taxes on AI usage, this creates LESS incentive to automate, and more incentive to retain the humans they already have (even more so if wages stagnate in the meantime). So where does the labor displacement go in this model? Everyone is watching the big companies for waves of AI layoffs. But at 75% rates, replacing your own workforce too aggressively with AI might just be uneconomic. The token budgets just explode. But that doesn’t mean the displacement never happens. It just means the displacement shows up in a different shape. When BigCos lose market share to AI-native startups that carry a fraction of the all-in labor costs, that will trigger layoffs as BigCo revenues and stock prices decline. But those jobs that are eliminated are never replicated at the startups who win the day. The net disemployment effect is the same, the air pocket just moves to a different line item within the economy (where the AI tax rate is lower). This is also why “AI-washing” might not be a temporary phenomenon. AI-washing is when a company attributes layoffs to newfound AI efficiencies, when it’s actually just an excuse for ordinary business weakness. Many assume that this is a fad of the current AI hype cycle. But while everyone is primed to watch for big companies doing true AI layoffs “replacing jobs” with AI, it may never actually happen at scale. The labor displacement may happen instead through startups outcompeting the BigCos, the BigCos AI-washing all the way to their graves, and the startups never re-creating the old jobs. The job displacement will still happen, just not where everyone is looking. So that’s the first consequence of this model. But there’s also a second, weirder consequence. The Notch A regulatory notch is a regulatory threshold that incentivizes a large discontinuity in behavior. Example: 30 hours a week for full-time employment incentivizes a lot of jobs that are exactly 29 hours/week. Famously, France has extremely demanding labor regulations that kick in at 50 employees (work councils, mandatory profit-sharing, firing protections), which are exempted for small companies. This results in massive incentives for employers to stay below the 50-person notch. Extend this analogy to AI. The big labs have created a tax notch that punishes companies for going above the 150 seat threshold. This means you must stay small to keep your beautifully subsidized subscription pricing, and be taxed ~0% (or negative) on your tokens rather than 75%. This might result in a totally new philosopy of company management. Startups will increasingly obsess over agents for everything, smaller teams, frequent firings, more subcontracting, and doing everything possible to map the lowest possible human surface area. Not because it’s the “optimal” amount of automation, but because the incentives drive them there. If the magic number is 149, every seat counts, and you can’t afford to waste humans outside of the essential joints of the company. This discontinuity may be perceived by Harvard Business School types as “the new generation of AI-first management.” But understood properly, it’s actually just a rational response to enterprise pricing plans. This might sound like a bit much. But you can already see the behavior differences between different organizations. Talk to developers at BigCos, and they are meticulously counting tokens and getting more nervous about their leaders slashing token budgets. But devs at startups are breathlessly tokenmaxxing, spinning up swarms of agents overnight and checking their logs in the morning. I expect this dynamic to accelerate. No one designed this. There is no committee deciding to subsidize innovation for startups and tax it for incumbents. All this fell directly out of well-worn enterprise pricing strategies. But this is how tax codes always look: a pile of incidental rules that ultimately determine which companies get built and how those companies contort themselves to minimize their tax burdens. You could object that this is temporary, and the labs will meter everyone eventually. Github Copilot has already made the switch. Maybe, maybe not. But by the time pricing normalizes, the 149-person company and the new school of AI-first management may have already blown up, gobbling up market share, and writing the playbook for the next generation of startups. Tax policies matter. The entire notion of the “gig economy” exists because of the legal boundary between W-2s and 1099s. As more labor gets eaten by AI, token pricing may be the most consequential tax policy of the next decade. Yet nobody will ever vote on it. (And don’t be surprised if the fastest growing companies of the next cycle all conspicuously cluster at 149 seats.) Originally published on X, June 2026.
We’re a crypto fund. If anyone should believe in crypto, it’s us. And yet, when we sign a deal to invest into a startup, we don’t sign a smart contract. We sign a legal contract. The startup does the same. Neither of us are comfortable doing the deal without a legal agreement. Why? We have lawyers. They have lawyers. We have engineers who can write and audit smart contracts, and so do they. We are two sophisticated crypto-native parties, and we still don’t trust a smart contract to be the only binding agreement between us. I literally was a software engineer, and I still trust the legal contract more–because if there’s an issue with the legal contract, I know the judge will do a reasonable thing. The EVM, not so much. In fact, even in the cases where we have an on-chain vesting contract, there’s usually also a legal contract in place. You know, just in case. When I first got into crypto, there was this fantastical story that crypto would replace property rights. Instead of legal contracts, we’d all use smart contracts. Instead of agreements enforced by courts, they’d be enforced by code. It didn’t happen. Not because the technology doesn’t work, but because the technology doesn’t work for our society. Let me make a confession. I’ve been in this space for a decade and I’m still scared every time I sign a large transaction. I’m rarely scared to approve a large bank wire. The bank, terrible as it is, was designed for humans. It’s really hard to mess it up. There are no address poisoning attacks at banks. There’s no reason why my bank would ever allow me to send $10M to North Korea–but to Ethereum validators, there’s no reason why my address wouldn’t be sending $10M to North Korea’s address. The banking system was specifically architected with human foibles and failure modes in mind, refined over hundreds of years. Banking is adapted to humans. Crypto is not. That’s why in 2026, it’s still terrifying to blind sign a transaction, to have stale approvals, or to accidentally open up a drainer. We know we should verify the contract, double-check the domain, and scan for address spoofing. We know we should do all of it, every time. But we don’t. We’re human. And that’s the tell. It’s why crypto always felt slightly misshapen for us. Long unreadable cryptographic addresses, QR codes, event logs, gas fees, and footguns everywhere–none of it conforms to our intuitions about money. That’s when it clicked for me: it’s because crypto wasn’t built for us. Crypto Was Made for Machines An AI agent doesn’t get lazy. It doesn’t get tired. It can verify a transaction, check every domain, and audit a contract in seconds. And more importantly, an AI agent trusts code more than it can trust the law. I trust the law more than I trust the smart contract. But to an AI agent, a legal contract is actually much less predictable. Think about it: How will I drag my counterparty into court? In what jurisdiction will this contract be adjudicated? What if the legal precedent is ambiguous? Who will we draw as a judge or jury? There is so much uncertainty baked into law that it’s impossible to know with certainty the outcome of an edge case. And that dispute takes months to years to resolve through the legal system. For humans, that’s basically fine. In AI agent timeframes, that’s an eternity. Code is the opposite. Code is closed form, deterministic. An AI agent looking to make an agreement with another agent can negotiate multiple rounds of terms on a smart contract, statically analyze it, formally verify it, and enter into a binding agreement–all in a few minutes, all while the humans are asleep. In that sense, crypto is self-contained, fully legible, and completely deterministic as system of property rights around money. It’s everything an AI agent could want from a financial system. What we as humans see as rigid footguns, AI agents see as a well-written spec. Even legally, our traditional monetary system was designed for human institutions, not AIs. The traditional monetary system only recognizes humans, businesses, and governments as legitimate holders of money. If you are not one of those three entities, you cannot own money. Even if you rig up an AI agent to interact with your bank account on your behalf, then what? How do you run AML on an AI agent? Suspicious activity reports? Sanctions violations? Where does liability fall if the agent is acting autonomously? Does the liability change if it was manipulated? We haven’t even begun answering these questions–our legal system is totally unprepared for non-human financial actors. Crypto asks no such questions. It doesn’t need to. A wallet is a wallet, it’s just code. An agent can hold funds, transact, and enter into economic agreements as easily as it can send an HTTP request. The Self-Driving Wallet This is why I believe the crypto interface of the future is what I call a “self-driving wallet”–entirely AI-intermediated. You won’t be going around websites clicking buttons. You’ll instruct your AI agent to solve financial problems for you, and it will navigate the services available (e.g. Aave, Ethena, BUIDL, or whatever succeeds them) to build the right financial solutions on your behalf. You won’t do it it yourself; an AI agent that is natively fluent in this world will do it for you. And when agents are the primary interface into crypto, the way those protocols market and compete with each other will have to radically change. And beyond acting on your behalf, agents will transact with each other. When agents can discover other agents and enter into economic agreements autonomously, they will prefer crypto. It works 24/7, 365, anyone-to-anyone, fully in cyberspace. It can’t be turned off. It’s completely self-sovereign. This is already happening. Moltbook has agents finding and collaborating with each other across geographies, with no knowledge of who owns them or where they sit. And just yesterday, @0xSigil’s @ConwayResearch has built self-sovereign agents that survive completely autonomously using crypto wallets, working to earn their own compute costs to stay alive. The future is going to get increasingly weird. And crypto is going to be part of that weirdness. So what’s the takeaway? I think it’s this: crypto’s failure modes, which always made it feel broken for humans, in retrospect were never bugs. They were simply signs that we humans were the wrong users. In 10 years, we will look back at amazement that we ever subjected humans to wrestle with crypto directly. This change won’t happen overnight. But a technology often snaps into place once its complement finally arrives. GPS had to wait for the smartphone, TCP/IP had to wait for the browser. For crypto, we might just have found it in AI agents. Originally published on X, February 2026.
It’s that time again—as 2025 comes to a close, it’s time to drop 2026 predictions. I think 2026 is going to surprise, both to the upside and to the downside. Organized by category: Macro / Chains $BTC is > $150K by year-end, but BTC dominance decreases in 2026. Despite the excitement around the recent crop of fintech chains, their metrics will underwhelm. Daily active addresses, stablecoin flows, and RWAs—Tempo, Arc, and Robinhood Chain will underdeliver, while Ethereum and Solana will overdeliver. Best developers will continue to build on neutral infra chains. A big tech company (Google, Facebook, Apple, etc.) launches or acquires a crypto wallet in 2026. Many more Fortune 100s launch blockchains, although increasingly concentrated among banking and fintech players. Expect Avalanche to be a standout here, alongside OP stack, Orbit, and ZK Stack. Monad gets written off as dead by CT, but metrics take off in the latter part of the year after analysts have already forgotten about it. At least 3 other chains connect to DoubleZero to improve their latency & throughput metrics. DoubleZero hits 80%+ stake on Solana. DeFi Perp DEX market share consolidates to something like 3 big venues a la HBO (market share something like 40 / 30 / 20), followed by a long tail of smaller players who compete over the leftovers (last 10%). Equity perps take off, becoming >20% of total DeFi perp volume by EOY. Significant growth in RFQ compared to CLOBs/AMMs, both on spot and perps. Some DeFi-related insider trading scandal hits mainstream media. Stablecoins Stablecoin supply expands by ~60% in 2026, and USD remains 99%+. USDT dominance declines moderately to ~55%. Stablecoin-backed cards grow 1,000% in 2026—insanely fast growth. Becomes the dominant way that stablecoins land and expand in emerging markets. Rain is the biggest winner here. Regulation Clarity Act gets signed into law in 2026 after some significant markups and horse trading. A bit of buyer’s remorse from crypto insiders. Dems win the house, and there is a parade of hearings about anything in crypto that touched $TRUMP / $WLFI. The underlying deals get subpoenaed. Trump insists he was never involved and didn’t know anything about it (and thus these deals are not protected by executive privilege). Anyone who signed a stupid deal gets publicly embarrassed. Prediction Markets Prediction markets grow like crazy. Big legal fights over sportsbetting regulation and federal pre-emption, but nothing major gets resolved next year, so status quo continues through 2026. Meanwhile Polymarket continues to steamroll the culture. Prediction markets are perceived as cool and smart, and so are allowed to throw up odds everywhere. As Polymarket domestic expansion gets going, it starts winning more and more domestic market share from Robinhood and sportsbooks. The explosion of other platforms tacking on prediction markets mostly flop. 90% of prediction market offerings are totally ignored and then wind down by EOY. B2B partnership-driven distribution underperforms, direct-to-consumer outperforms. Almost all of the demand in 2026 is sourced directly from Polymarket, Robinhood, and Kalshi frontends (plus traditional sportsbooks). AI Primary AI use cases in crypto remain within software engineering and security. Everything else remains a prototype. No good solutions to the spambot proliferation on social platforms emerges. A lot of stuff is proposed, but mostly we just eat the AI slop for 2026. Eventually it will get bad enough that people align on a solution, but not there yet. Wallet automation remains minimal. AI agents will still not be “paying each other” or spending any meaningful money in 2026. We see more small teams (<10 people) shipping scaled products because of coding agent force multipliers. In 2025, you needed to be Hyperliquid-level cracked devs to be this dev-efficient. In 2026, you just need to be AI-native and versed in the modern agentic stack. 2026 is dubbed the year of the agentic startup, and it hits crypto startups in a big way. AI becomes used for both attack & defense in cybersecurity. We see many more hacks in 2025, but smaller sizes. Defensive AI gets integrated into CI/CD pipelines and much better continuous monitoring. Security posture across the board improves, even for small teams, and the total amount hacked decreases compared to 2025. So those are my predictions! If I had to summarize them to a two meta-theses, it’d be: slow and steady beats new and shiny the trend lines mostly continue Let’s see how I do. Keep me honest, CT. Disclosure: I’m an investor in many of the assets mentioned. NFA. DYOR. Originally published on X, December 2025. Covered by CoinDesk.
Here’s what I would do if I was a young person trying to break into VC: Write. Short writeups, on Twitter. Not generic market philosophical thinkpieces, because those will be assumed to be AI slop or regurgitated research. No one will read it unless you’re brilliant, which you’re probably not. Original research, on a specific company or sub-sector. If you want to write about robotics, even that is too broad. Narrow it down. Humanoid robotics, or healthcare robotics, military robotics, etc. Get really granular. So granular most people won’t care. If it’s something you could get by Googling, it’s not narrow enough. You will not be able to find to do “original research” easily. This is not something you can do from a university library. You will have to go talk to people who work at these companies. Journalists who cover these companies. Pay for private industry-specific research / newsletters. Follow all of the employees/anons who are tweeting gossip. Integrate a picture that someone reading TechCrunch doesn’t see. Then write about this sector and leading + new startups and tag / DM every investor at every major firm who covers your space (you can find them because they’ve invested in one of the companies in the sector). If they express interest, offer coffee meetings with everyone you can. Some will take you up on it. Do this enough times, you’ll develop a reputation and get offered a job in venture. Don’t need to go to business school, don’t need to have a great angel portfolio or any of the above. “Get good deal flow” is wonderful if you have access to it, but most people just can’t do this. If you’re already surrounded by Stanford undergrads, you probably don’t need advice to break into VC. But the above strategy–in principle anyone can do. Just need to have abnormal levels of agency and a willingness to basically do the job of a junior VC without anyone telling you to. (While you’re doing this, best thing to do in the meantime is to also work at a company in the sector you’re chasing after. But not always possible depending on your background. Thankfully, VC does not require any particular background. Lots of weirdos in VC, myself included.) I guarantee you, everyone wants to hire someone who can do the above. But very few candidates have this degree of agency. VC is not a “tracked” career. Hiring is arbitrary, firms are generally small and do not scale, and there is no standard path. This is good for you if you’re willing to be weird. The thing that VCs have in common is that they are passionate about startups and understanding new industries. If you show that you already have that, a path will open for you. Originally published on X, November 2025.
I started shaving my head in my early 20s. I was way too young to be balding that early, and it terrified me. So I decided, fuck it, just go all the way to the finish line. The first time I shaved my head, I thought I looked like a ghoul. In my dreams, I still had hair. It didn’t feel like the real me. It was really distressing. But I came to appreciate that to everyone else, I was just a bald dude. Nobody who met me ever thought twice about it. I think over my life, being a bald man has actually helped in subtle ways. There’s something about being bald that subtly exudes competence. It makes you seem strong and self-assured. It makes random people less likely to mess with you. I think there are some real advantages in life to being bald that nobody ever told me before I started shaving my head. You also look older than you are, less boyish. This can be an advantage. Not all women like it, but those who do find it very masculine. But largely what I’ve found is people care less than you think they do. Also saves time and money on haircuts, which is a real thing. So if you’re thinking about taking the leap, give it a try. You can always grow it back. (Or if you can’t, then welcome to the club.) Originally published on X, September 2025.
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?