Antichess is chess with two rules changed. If you can capture, you must. You win by losing every piece you have. The king is an ordinary piece. Lichess plays it, and it was solved in 2016 (Mark Watkins showed 1. e3 wins by force for White).

I put those two rules on the xiangqi board and measured what came out. It is a draw: Black has two moves to find in the opening, Red cannot go wrong, and after that the pieces you must lose sit in the palace where nothing can reach them. Every other opening loses, 63 of them provably.

As far as I can find, this is the first analysis of antichess on the xiangqi board; the closest prior work is antichess on the mixed-army boards Synochess and Empire, and on 5x5 shogi.

Notation is chess-style, since this post is for chess players: R chariot, H horse, E elephant, A advisor, K general, C cannon, P soldier; files a to i from Red’s left, ranks 1 to 10 from Red’s side, so 1. Cxb10 is a cannon taking whatever stands on b10. A ply is one move by one side.

The game

If you haven’t played xiangqi, Mistboard’s rules page covers it in a few minutes.

Every game this post rests on is in the viewer below: the engine against itself at one, two and five million nodes a move; a game from each of the 83 endings of the opening chain; the 20 ladder games where a strong engine met a weak one from random openings; and the main line of each of the 63 proofs. It opens on the 2M game, the one to step through first: the forced opening, both sides shedding material in step, Red giving its last mobile pieces away on purpose, and the board going dead at ply 35.

Black
Red

The opening: Black has two moves to find

The forced part of the game is a chain of captures four or five plies long, and there are three forks in it. Two are Black’s, and both decide the game. One is Red’s, and doesn’t. The boards below are all cut from one table: every position in the chain, every capture the side to move can choose from it, and what each capture leads to. The chip on a row is the value of the position after that capture if both sides then play the chain’s best captures; the small print is the evidence behind it, a proof where one closed and the engine’s verdict where none did. Hover a row to see the capture on the board; click it to follow it, and step forward past an ending to watch the game that came next.

Fork A. After 1. Cxb10, Black has two captures and one of them loses

Black
Red

Red’s first move is a cannon taking a horse. The two choices are mirror images, so call it 1. Cxb10. Black must capture, and has two ways: take the cannon back with the chariot, or fire the other cannon into Red’s back rank (a cannon captures by jumping exactly one piece; here Red’s own h3 cannon is the screen). The natural one, 1…Rxb10, loses by force in 34 plies, and that is proven. The other, 1…Cxh1, holds.

Why the chariot recapture loses

Here is the proof, all of it. A certificate is a tree: at every Red move it holds one move, and at every Black move it holds every legal reply. This one has 1,864 positions, and the widget holds them all. Step forward to follow the main line, with notes on the plies that matter; or at any Black move pick a different reply and follow that instead. Every row is a legal move, there are no others, and every line ends with Red out of pieces.

1...Rxb10: the whole proof
Black, any reply
Red, the certificate

A quiet move that leaves your opponent exactly one capture is a move your opponent has to make. Red’s back-rank pieces become a queue, and Black’s chariot, forced to take whatever is put in front of it, empties the queue for Red. Thirty plies later Red has nothing left and has won. A checker that knows only the rules has replayed the whole tree; the widget is the same tree.

So Black’s only move is 1…Cxh1.

Fork B. After 1…Cxh1, Red has two replies and both hold

Black
Red

Red can take the cannon quietly, 2. Rxh1, and the exchange is over: 2…Rxb10 is Black’s only capture, and the chain ends at ply 4 with Red to move and no capture on the board. Or Red can keep firing, 2. Cxd10, which also holds and sets Black a second trap. This is the fork that does not matter. The engine’s own games from the array took 2. Rxh1 at every budget.

Fork C. After 2. Cxd10, Black must take with the general

Black
Red

Black again has two captures, and again the obvious one is the losing one. Taking the cannon with the general, 2…Kxd10, holds: 3. Rxh1 is then Red’s only capture, and the chain ends at ply 5 with Black to move, the same kind of position as the ending after 2. Rxh1 with the other side to move. Firing the cannon on, 2…Cxf1, loses: Red takes it with the general, 3. Kxf1, Black’s only capture is 3…Kxd10, and the chain ends at ply 6 with Red to move. From there Red wins by extinction in 38 plies at 100,000 nodes a move, and at a million.

That last one is the engine’s verdict, not a proof. The prover ran out of budget on it, and it is the one ending on the main line that rests on search. If 2…Cxf1 does hold, nothing above changes: Black has a second way to draw, and the game is still a draw.

After 2…Cxf1 Red has three captures, and this is where the rest of the tree lives:

Black
Red

The move that wins is 3. Kxf1. The other two keep the chain going, and 80 of its 83 endings sit below them: 3. Cxa10 leads into 21 and is a draw with best play; 3. Cxf10 leads into 58 and loses for Red with best play (Black answers 3…Kxf10, the general taking the cannon again, and the chain ends at ply 7 with Black to move). Both are captures Red never needs to make, so nobody can be made to reach those 80 endings; the viewer walks into them if you want to look.

After the chain: what each side plays for

AFTER 1. Cxb10 Cxh1 2. Rxh1 Rxb10楚 河 漢 界AFTER 1. Cxb10 Cxh1 2. Cxd10 Kxd10 3. Rxh1楚 河 漢 界
The two endings that survive: left, four plies in, Red to move; right, five plies in, Black to move, the general having taken the cannon on d10. 14 pieces each, no capture on the board; the engine drew every game from here at three budgets.

These are the two endings that survive: left, after 1. Cxb10 Cxh1 2. Rxh1 Rxb10, Red to move; right, after 2. Cxd10 Kxd10 3. Rxh1, Black to move, the same material with the general on d10 and the a10 chariot still home. Fourteen pieces each, no capture available, and the game is open. What follows is what the engine’s games show, at three budgets.

You cannot lose a piece; you can only have it taken. So every move is an offer, and the ones that count are the offers the opponent cannot refuse: a quiet move that leaves them exactly one capture. The middlegame is a contest in those.

A loose chariot is a liability. Put pieces in its path and it must take every one; that is how the chariot recapture loses. So both sides open by offering cannons instead. In the 2M game, 3. Cb3 screens Black’s cannon onto the b1 horse, three captures follow, and both chariots are loose: fourteen plies of compelled captures, material off in step.

Or a slow war of soldiers. In the 5M game nobody finds a forcing offer early, and soldiers walk into each other for a hundred plies, taken in pairs, an elephant and a general thrown in on the way. The notes on it below follow the trades.

Black
Red
Two of the engine’s own games, opened at ply 4, where the forced part ends. The notes are on the plies that matter.

Why it draws, and what that rests on

Generals and advisors never leave the palace; elephants never cross the river. Under “lose everything” those five pieces a side can only be taken by an enemy piece that walks up to them, and both players are trying to get rid of exactly the pieces that could.

The dead board. Once neither side has a chariot, horse, cannon or soldier, no capture is possible again. The rules don’t know the game is over.

THE DEAD BOARD楚 河 漢 界
Ply 35 of the engine’s 2M game. Generals and advisors never leave the palace and elephants never cross the river, so no piece here can ever reach another; under the rules as written the game runs on to a repetition draw.

The 2M game reaches this at ply 35, Red feeding its last three mobile pieces to Black’s chariot, and repeats to a draw at ply 44.

The soldier war ends with a chariot and palace pieces each, and that is a draw you can check by hand. Nothing of Red’s can leave Red’s half, so nothing can reach Black’s chariot; the chariot has lines no Red piece can ever stand on, so it can never be made to capture; and with no capture on the board any move is legal, so whoever wants to wait shuffles an advisor until the progress clock ends it. Same with the colours swapped.

To win you need the opponent to keep enough mobile force to eat your whole palace and to be compelled to use it. They control that force: they can throw it away into captures you cannot refuse, park it, or wait. In every engine game one of the three was there when wanted; in random play a quarter of 3,000 games stall.

Evidence, not proof. Search to five million nodes a move found no win from either surviving position; I have not shown the way out exists from every position the chain can lead to, only that nobody found one where it didn’t. The title is that verdict and that geometry, not a theorem.

Could it be made a game?

The draw comes from one fact: five pieces a side can only be taken by pieces the opponent would rather throw away. A repair has to change that, change what you have to lose, or change what a stall is worth. I tried four, through the same gate, sweep, prover and self-play. None made a game.

Score every stall for the side with fewer pieces. FICS’s stalemate rule, applied wherever the game stops. Dumping your pieces to freeze the board now hands the game to whoever is lighter. Random play goes from 26% undecided to 4% with no tilt (Red 47.9%). Engine play didn’t change at all: the engine doesn’t know the rule, so the same games were simply scored differently, and that says nothing about the game the rule would create. Testing it properly needs a patch to Fairy-Stockfish so the engine plays for the count, and a day of games. I stopped there.

Lose the general instead of everything. Codrus, the 1844 ancestor. The target is always reachable down a file, but the lever survives: a side that sheds its mobile pieces can never be made to take the enemy general. It draws through the same two opening lines, faster (28 endings, 20 of 25 losses proven, three self-play draws).

Keep the general royal. Losers, ICC’s version: check and mate stay, and being mated or reduced to the bare general wins. Decisive, and the wrong way: Black wins at one, two and five million nodes, and backing up its 16-ending chain gives Black too (7 of 13 losses proven). A check suspends the obligation to capture, and that tempo lands with the second player in every line I looked at.

Let the palace pieces out. That removes the fortress by removing the confinement, and most of what makes the pieces xiangqi’s with it. I didn’t measure it; it is a different board.

The first is the only one that keeps the game recognisable and might work; the stall key is already in the kernel if anyone wants to try.

How I checked it

Three tools, then what they produced.

The referee, the player, and the prover

The referee is a xiangqi rule kernel with switches for the rules above. I checked its move generation against Fairy-Stockfish’s on 209 positions: zero disagreements. In every game the engine proposes and the kernel decides, applies, and ends the game, so an engine quietly playing different rules aborts the run instead of producing a record of a different game.

The player is Fairy-Stockfish, configured through a file. Its evaluation was never taught this objective, and it shows: ten times the search beats one times the search only 10-4 with 6 draws here, against 20-0 on normal xiangqi. That is why the opening rests on proofs and not on the engine.

The prover takes a position and a claim (“Red wins from here”) and builds a tree in which Red has one winning move at each of Red’s turns and Black loses with every reply at each of Black’s, down to positions the kernel says are over. If the tree closes, the claim is a fact about the rules, whatever any engine thinks. It is proof-number search, the standard method, with a 60-ply cutoff that counts as a loss for the attacker so that a proof can never lean on it. Every proof is saved as a certificate, a nested list of moves, and a separate checker replays certificates against the kernel and does nothing else.

The sweep: whoever moves first at the end of the chain wins

When I first wrote the rules down I had Black’s reply as forced and every game beginning with the same four captures. Wrong. Black’s other cannon can take the h1 horse through Red’s own h3 cannon, and that starts a chain: each cannon lands beside a screen with a target behind it, the other side’s cannon answers along its own back rank, and it stops only when a cannon lands where a chariot can reach it. I had the kernel walk every branch: 605 positions, 166 endings between 4 and 18 plies in, 72 of them at ply 14, and at 130 of them at least one general is already gone. Mirror images aside, 83 are distinct.

I had the engine play a game from each, 100,000 nodes a move for both sides. In 70 of the 83 the game was over within 14 to 36 more plies, one side giving pieces away and the other compelled to take them, and the winner was whoever had the first free move at the ending, 66 times out of 70. The other 13 stalled, a draw under the rules as written.

ending at ply who moves first endings Red wins Black wins stall
4 Red 2 1 0 1
5 Black 1 0 0 1
6 to 12 alternating 14 8 6 0
14 Red 36 36 0 0
15 Black 5 0 4 1
16 Red 15 8 1 6
17 Black 6 0 6 0
18 Red 4 0 0 4

So inside the chain, every choice between captures is really a choice about who moves first when the chain ends. Repeated at a million nodes a move: eleven verdicts moved, six stalls became wins, two wins took longer, three stalls stayed stalls, and no win changed sides.

How much to trust that: 100,000 nodes is a cheap search and the engine is weak at this objective, so the sweep finds candidates; it does not settle anything on its own. Its wins held up: none changed sides at ten times the budget, and 63 of the 70 were then proven without the engine. Its stalls are weaker evidence: a stall means the engine found no win, and six of the thirteen turned into wins at a million. The two stalls that matter are the surviving endings, and those stayed stalls at a million and in every game from the array at up to five million nodes a move. That is where the doubt is concentrated, and the section on why it draws is about exactly that.

The proofs, and the table

From each of the 70 decisive endings, with a budget of a million positions: 63 closed, 7 ran out of budget, none was refuted. The median proof is 19 positions, a single line in which every defender reply is compelled; the largest is the 1,864 of the chariot recapture. The checker passes all 63.

Every ending then has a value, and the table in the opening section is those values backed up the chain: at each fork, the player to move picks the capture whose subtree is best for them. Two endings survive; every other one sits below a fork where the other side could have chosen a win instead. The table is scored from the 100k sweep; scoring it from the 1M sweep instead changes no value within eight plies of the array.

The evidence

Everything above is in one repository: the three Fairy-Stockfish stanzas, all 166 endings of the opening chain, one engine game from each ending at each budget, every proof certificate, the rule kernel, and the games in a viewer that opens from the folder. npm run verify replays every certificate against the rules and nothing else, in a few seconds, and reports 63, 63, 20 and 7 valid; the README has the four commands that reproduce the sweep and the proofs with a Fairy-Stockfish binary.

If you can show a third surviving opening, a defence in any certificate, or a win for either side from the position after the four forced plies, open an issue there. I want to see it, and this post will say so.