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.
A Domineering board is an arbitrary finite subset of ℤ × ℤ
.
Instances For
Equations
Equations
Instances For
Equations
Left can play anywhere that a square and the square below it are open.
Equations
- b.left = IGame.ofDomineering b ∩ Finset.map ((Equiv.refl ℤ).prodCongr (Equiv.addRight 1)).toEmbedding (IGame.ofDomineering b)
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 Domineering.
Equations
- b.moveLeft m = IGame.toDomineering (((IGame.ofDomineering b).erase m).erase (m.1, m.2 - 1))
Instances For
After Left moves, two horizontally adjacent squares are removed from the Domineering.
Equations
- b.moveRight m = IGame.toDomineering (((IGame.ofDomineering b).erase m).erase (m.1 - 1, m.2))
Instances For
Equations
- x✝¹.instDecidableRelRelLeft x✝ = inferInstanceAs (Decidable (∃ x ∈ x✝.left, x✝¹ = x✝.moveLeft x))
Equations
- x✝¹.instDecidableRelRelRight x✝ = inferInstanceAs (Decidable (∃ x ∈ x✝.right, x✝¹ = x✝.moveRight x))
Equations
- IGame.Domineering.instConcreteGame = { relLeft := IGame.Domineering.relLeft, relRight := IGame.Domineering.relRight, isWellFounded_rel := IGame.Domineering.instConcreteGame._proof_1 }