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 {⊤}ᶜ.