Poset games #
Let α
be a partially ordered type (in fact, a preorder suffices). One can define the following
impartial game: two players alternate turns choosing an element a : α
, and "removing" the entire
interval Ici a
from the poset. As usual, whoever runs out of moves loses.
In a general poset, this game need not terminate. Adding the condition that α
is well
quasi-ordered (well-founded with no infinite antichains) is both sufficient and necessary to
guarantee a finite game.
This setup generalizes other well-known games within CGT, most notably Chomp, which is simply the
poset game on (Fin m × Fin n) \ {⊥}
.
Main results #
PGame.Poset.impartial_toPGame
: poset games are impartialPGame.Poset.univ_fuzzy_zero
: any poset game with a top element is won by the second player, shown via a strategy stealing argument
The set of states in a poset game. This is a type alias for Set α
.
Equations
- IGame.Poset α = Set α
Instances For
Equations
- IGame.toPoset = Equiv.refl (Set α)
Instances For
Equations
Instances For
A valid move in the poset game is to change set t
to set s
, whenever s = t \ Ici a
for
some a ∈ t
.
Equations
- a.rel b = posetRel (IGame.ofPoset a) (IGame.ofPoset b)
Instances For
Equations
- IGame.Poset.instWellFoundedRelation = { rel := IGame.Poset.rel, wf := ⋯ }
The starting position in a poset game.
Equations
Instances For
Any poset game on a poset with a top element is won by the first player. This is proven by
a strategy stealing argument with {⊤}ᶜ
.