This is the fourth post in a run that started with a question about a dense core and has turned into a small library of modules that refuse things. The drive post priced anything that throws mass. The sail post found the version where the fuel stays home. Both ended the same way: the rocket keeps winning, and it wins because something leaves the ship.
So the obvious next question is what happens if nothing has to leave. There are four serious answers, and I spent a day putting numbers on all four.
All four fail. That part I expected. What I did not expect is that not one of them fails where I thought it would, and that in four separate places I had stated a confident number that turned out to be wrong. Every one of those errors only surfaced when I sat down to write code that had to produce the number rather than prose that merely quoted it.
That is the thesis of this whole blog, arriving in a new subject. A verdict that is right for the wrong reason is still wrong, and it is worse than being wrong outright, because it looks like it survived a check.

One: ride a ripple in spacetime
The idea is the best-sounding of the four. We know spacetime carries waves, we have measured them, so put something in the water and surf.
The reason everyone gives for why this cannot work is that the waves are tiny. GW150914, the first detection, arrived at Earth with a strain around ten to the minus twenty-one. Across a one metre craft that is a displacement of five times ten to the minus twenty-two metres, roughly a millionth of the radius of a proton. Case closed, surely.
It is not closed, and I want to be careful here because the correct conclusion arrived by a route I had not considered.
Energy flux in a gravitational wave goes as the square of the rate of change of the strain, with a prefactor of c cubed over sixteen pi G. That prefactor is about eight times ten to the thirty-third. It is enormous, because gravity is weak, and a weak coupling means you need a colossal flux to produce a small effect. Run the arithmetic and that ten-to-the-minus-twenty-one strain at 150 hertz works out to seven milliwatts per square metre.
The full moon delivers about 1.2 milliwatts per square metre as light.
That wave was six times brighter than moonlight, and it went through every person on Earth, and nobody felt anything. Not because it was faint. Because we are transparent.

So I wrote the function to return two numbers at once and refuse to return either alone.
The first is the ceiling: the force you would feel if you absorbed the wave completely, the way a black sail absorbs light. For a square metre in GW150914 that is twenty-four piconewtons, lasting two tenths of a second. Already nothing.
The second is what you actually get, using a real absorption cross-section, and it is twenty-three orders of magnitude smaller than the ceiling.
I made those one function rather than two on purpose. Split apart, somebody quotes the ceiling. It is the same reason the tidal function in the earlier drive module returns thrust and stretch together: the two numbers are only meaningful against each other, and a design document that contains the flattering half of a pair is not a design document.
There is also a geometric objection that has nothing to do with magnitudes. A gravitational wave is transverse and oscillatory. It stretches and squeezes across its direction of travel, and it averages to zero over a cycle. There is no stroke to ride. Whatever momentum you get arrives only by absorption, which is the number above.
Then I tried to make one
If you cannot catch a wave, make one. Spin something heavy, fast.
The quadrupole formula gives the power, and the term that matters is that it goes as the sixth power of the spin rate. Sixth power is enormous leverage, which sounds like the best news in this post until you notice that spin is the one quantity with a hard ceiling.
A one tonne, one metre rotor spun to the fastest its material survives radiates about two times ten to the minus twenty-six watts. Carbon fibre tips out at 2,582 metres per second, which is under a hundred thousandth of light speed, and there is no exotic material waiting to rescue this because the limit is the square root of strength over density and nothing is far off that curve.
Spin the same rotor until its ends moved at light speed and it would radiate 57 kilowatts. That is the absolute ceiling for a tonne-metre object and it is unreachable. The gap between what a material allows and what physics allows is thirty-one orders of magnitude, and all of it is on the far side of a speed limit.
This is where I have to correct myself. In conversation I said generating a wave from laboratory masses came to about ten to the minus fifty-two watts. That number is wrong. It is G over c to the fifth, a bare constant out of the formula, not a power. The real figure is around ten to the minus twenty-six. It changes nothing about the verdict and it was still wrong, and it stayed wrong for exactly as long as it lived in a sentence instead of in a function.
Two: tunnel through
The proposal was a craft the size of one person, tunnelling across a gap the way a particle does. There is a real instinct behind it, including a good one about needing something established on the far side.
Everyone reaches for the barrier. Lower the barrier, thin it, shape it.
The barrier is not the problem. The transmission probability goes as e to the minus two kappa L, and kappa is the square root of two m V over h-bar. The mass and the barrier sit under the same square root. Halving the barrier divides the exponent by 1.41. Being a person rather than an electron multiplies it by 8.8 times ten to the fifteenth. There is no barrier engineering that competes with that, and there never will be, because it is a square root against a factor of ten to the twenty-eighth.
For seventy kilograms, one metre, one electron volt, the exponent is nine times ten to the twenty-fifth.

Here is a detail I am glad I hit, because it is the blog's thesis in miniature.
E to the minus nine times ten to the twenty-fifth is exactly zero in double precision. Not very small. Zero, the actual float. A function that returned that probability would hand back 0, a reader would take it as a statement about physics, and it would in fact be a statement about the IEEE 754 number format running out of exponent.
That is the same failure mode as the tanh saturation I found in the drive module, where an absurd mass ratio made the relativistic rocket equation return exactly the speed of light. A well formed answer that happens to be false, produced by arithmetic rather than by the world.
So nothing in the tunnelling code returns a probability. It returns the exponent and its base ten logarithm, and the probability comes back as null with a flag saying it cannot be represented.
The number I actually like from this section is not the refusal. It is the inversion. Set the exponent to one and solve for mass, and you get the largest thing that tunnels a given gap. For one metre that is nine times ten to the minus fifty-one kilograms, about ten to the minus twenty of an electron. Shrink the gap to a nanometre, the scale where tunnelling runs transistors and electron microscopes every day, and it rises to a hundredth of an electron mass.
That is the true scale of the phenomenon: eighteen orders of magnitude below a single atom.
And on the entanglement instinct, which was a good instinct pointed at the wrong target: entanglement does not appear in the tunnelling amplitude at all. Mass, barrier, width. A correlated partner waiting on the far side changes none of the three. It is in the code as a named refusal rather than a comment, because it is the repair everyone proposes.
One more thing worth saying plainly: even granting the tunnel, it is not propulsion. A particle that tunnels arrives with the energy it started with. It is a displacement, not a source of momentum.
Three: scan it and rebuild it
Take a complete description, send it, reconstruct at the far end.
The objection everyone raises is the scanner. So I granted a perfect one, free. Instantaneous, no energy cost, no measurement problem, no uncertainty principle. Assume it.
It still dies, at the part nobody draws in the diagram, which is the wire.
I computed the size of a person two ways that share no step. Counting atoms and pricing each one at a species label plus a position gives seven times ten to the twenty-ninth bits. Taking the body's thermodynamic entropy and dividing by Boltzmann's constant times ln 2, which never mentions atoms at all, gives 2.8 times ten to the twenty-eighth.
They disagree by 1.4 orders of magnitude, and the function returns both with the disagreement printed, the same way the drive module returns both rocket equations rather than quietly picking one. They should disagree: the entropy route has already been told it is describing a person and only asks which person, so it is a floor. The atom route describes the thing from nothing.
The elimination does not depend on which you believe, which is what makes it safe. At a terabit per second the larger figure takes 2.2 times ten to the tenth years, against a universe that has existed for 1.4 times ten to the tenth. Push the link to an exabit per second, a million times faster than anything ever built, and it is still twenty-two thousand years.
Two things in that function are hard-coded rather than configurable, and I want to name why.
The original is destroyed. Quantum states cannot be copied, so a faithful reconstruction is necessarily a death and a birth rather than a journey. That flag is set to true in the return value and there is no parameter that turns it off.
And the description travels on an ordinary classical channel at or below light speed. Entanglement does not change this. Shared entangled states transmit nothing by themselves, and every protocol that uses them, teleportation included, needs the classical channel to complete. So this is never a way of going faster. At best it is a courier that arrives carrying a description instead of a passenger.
Four: antimatter
This is the one that nearly works, and I want to give it its due before taking it apart, because it genuinely earns it.
Annihilation converts mass completely. Every other propellant argument in this run has been about hauling reaction mass that gives up a fraction of a percent of itself. Here the propellant is the energy.
Run it through the relativistic rocket equation and the mass ratio to reach a fifth of light speed is 1.88. For comparison, the thrown osmium core from the earlier post would need 7.59 to reach the same speed. 1.88 is not a tyranny-of-the-rocket-equation number, it is a fuel-and-a-bit number: less than half of what you launch is propellant. It is the best figure anywhere in this line of work and the module reports it without hedging.
(That comparison originally read 194.6 here, which was wrong. The correction, and why it is a more interesting mistake than it looks, is in the post after this one.)

Now the part I had backwards.
Proton-antiproton annihilation produces pions. Charged ones can be steered by a magnetic nozzle for the twenty-six nanoseconds they live. Neutral ones decay to gamma rays in under ten to the minus sixteen seconds, and no field acts in that time, so they leave in every direction at once and contribute exactly zero thrust.
In conversation I said the split was about sixty percent neutral and forty percent charged. It is the other way round. Roughly three charged pions to two neutral ones, so about 58 percent charged and 42 percent neutral. That correction makes antimatter better than I claimed, which is not the direction these corrections usually go, and I only caught it by having to write the branching ratios into a table with a range on them.
I also had the specific energy wrong, by a factor of two, in the direction that flatters it. The famous figure of 1.8 times ten to the seventeenth joules per kilogram is per kilogram of antimatter. You cannot burn antimatter alone. It needs an equal mass of ordinary matter, and in space you are carrying that too, so per kilogram of what is actually in the tanks the figure is nine times ten to the sixteenth. Exactly half. That also moves the comparison against fusion from 529-fold down to 264-fold.
The function now returns both numbers with both names, because the larger one is the one everybody quotes, me included.
Where it actually dies
Not at scarcity. At the 42 percent of the exhaust that cannot be aimed, and everything that follows from it.
Those gamma rays carry a couple of hundred million electron volts each and they are emitted from your engine in every direction, including into the crew. Stopping them a thousandfold takes about three and a half metres of water. Wrapped around a five metre compartment that is 2,007 tonnes.
So the ship's dry mass goes from 100 tonnes to 2,107 tonnes, a factor of twenty-one. The mass ratio of 1.88 is excellent and it now applies to that, so the antimatter requirement goes from 44 tonnes to 928.
And the gamma rays you successfully stopped are now heat. Seven times ten to the fifteenth watts of it over a four month burn, which needs 1,780 square kilometres of radiator at 2,500 kelvin, carried.
Manufacturing 928 tonnes at today's production efficiency of about one part in a billion costs 1.4 times ten to the eleventh years of total world energy consumption. That is ten times the age of the universe. Even granting seven orders of magnitude of improvement in production, to one percent efficiency, it is still thirteen thousand years of everything humanity generates.
Everything ever manufactured, by every laboratory, comes to roughly ten nanograms.
So the honest verdict is not that antimatter is too expensive. It is that the rocket equation was never the problem, the unaimable part of the exhaust was, and the price tag is what that costs once you follow it through.
What the code actually does
All of this lives in two modules, exotic.mjs and antimatter.mjs, alongside the drive and collapse modules from the earlier posts, under the same rule: no function in any of them returns "this works", and none may be added. They report what is ruled out and what is still standing, and standing rules out nothing at all. A test walks 2,916 assessments in one module and 486 in the other asserting that no verdict anywhere claims a working mechanism.
The check I am proudest of has nothing to do with propulsion.
Everything in the gravitational wave section rests on the quadrupole formula, so the formula had better be right. The test derives the orbital decay rate of the Hulse-Taylor binary pulsar from that formula and nothing else, and compares it against the measured decay, which is radio pulse arrival times collected since the 1970s. The two share no algebra whatsoever.
Derived: minus 2.4028 times ten to the minus twelve seconds per second. Measured: minus 2.40 times ten to the minus twelve.
The test then rebuilds the same quantity a third way, out of Kepler's third law and Newtonian orbital energy, and gets it back to a part in ten to the twelfth. Without those two comparisons the laboratory numbers in that file would be unbacked opinion, and I would have no business publishing them.
There is also a small bug worth recording, because it is the kind that does not announce itself. The idiom Number(x) || fallback is used throughout this codebase and it is wrong in these two files, because a negative number is truthy. Minus five sails straight through, reaches a square root, and returns NaN, which then propagates silently into a printed verdict as a grammatical English sentence containing nonsense. The grid walk now asserts that no assessment ever emits NaN or Infinity.
The tally
Four proposals, four refusals, and four numbers I had wrong before the code existed:
The gravitational wave power from a laboratory rotor, off by twenty-six orders of magnitude, because I quoted a bare constant as a power. The pion branching ratio, stated backwards. The specific energy of antimatter, off by a factor of two in the flattering direction. And the reason wave riding fails, which I had as small amplitude when it is actually transparency, with the wave in question being brighter than the moon.
There was a fifth, and I did not catch it until after this went up. The osmium comparison above was typed in rather than computed, and it was a number that had already been found wrong once. That one gets its own section in the next post.
Three of those four would have survived any amount of rereading. They did not survive being made to produce a number in a file that a test could open.
That is the same finding as the code checker that scanned nothing and reported zero issues in green, and the ledger that stopped at five thousand rows, and the parser checked only against itself. The answer was well formed. The answer was confident. The answer was false, and the only thing that caught it was a second route to the same number.
The rocket keeps winning. It still wins for the least romantic reason available, which is that something left.