Domineering as a combinatorial game. #
We define the game of Domineering, played on a chessboard of arbitrary shape (possibly even disconnected). Left moves by placing a domino vertically, while Right moves by placing a domino horizontally.
This is only a fragment of a full development; in order to successfully analyse positions we would need some more theorems. Most importantly, we need a general statement that allows us to discard irrelevant moves. Specifically to domineering, we need the fact that disjoint parts of the chessboard give sums of games.
The equivalence (x, y) ↦ (x, y+1)
.
Equations
Instances For
The equivalence (x, y) ↦ (x+1, y)
.
Equations
Instances For
A Domineering board is an arbitrary finite subset of ℤ × ℤ
.
Instances For
Left can play anywhere that a square and the square below it are open.
Equations
Instances For
Right can play anywhere that a square and the square to the left are open.
Equations
Instances For
After Left moves, two vertically adjacent squares are removed from the board.
Equations
- SetTheory.PGame.Domineering.moveLeft b m = Finset.erase (Finset.erase b m) (m.1, m.2 - 1)
Instances For
After Left moves, two horizontally adjacent squares are removed from the board.
Equations
- SetTheory.PGame.Domineering.moveRight b m = Finset.erase (Finset.erase b m) (m.1 - 1, m.2)
Instances For
The instance describing allowed moves on a Domineering board.
Equations
- One or more equations did not get rendered due to their size.
Construct a pre-game from a Domineering board.
Equations
Instances For
All games of Domineering are short, because each move removes two squares.
Equations
- SetTheory.PGame.shortDomineering b = id inferInstance
The Domineering board with two squares arranged vertically, in which Left has the only move.
Equations
- SetTheory.PGame.domineering.one = SetTheory.PGame.domineering (List.toFinset [(0, 0), (0, 1)])
Instances For
The L
shaped Domineering board, in which Left is exactly half a move ahead.
Equations
- SetTheory.PGame.domineering.L = SetTheory.PGame.domineering (List.toFinset [(0, 2), (0, 1), (0, 0), (1, 0)])
Instances For
Equations
- SetTheory.PGame.shortOne = id inferInstance
Equations
- SetTheory.PGame.shortL = id inferInstance