Documentation

Mathlib.SetTheory.Game.State

Games described via "the state of the board". #

We provide a simple mechanism for constructing combinatorial (pre-)games, by describing "the state of the board", and providing an upper bound on the number of turns remaining.

Implementation notes #

We're very careful to produce a computable definition, so small games can be evaluated using decide. To achieve this, I've had to rely solely on induction on natural numbers: relying on general well-foundedness seems to be poisonous to computation?

See SetTheory/Game/Domineering for an example using this construction.

SetTheory.PGame.State S describes how to interpret s : S as a state of a combinatorial game. Use SetTheory.PGame.ofState s or SetTheory.Game.ofState s to construct the game.

SetTheory.PGame.State.l : S → Finset S and SetTheory.PGame.State.r : S → Finset S describe the states reachable by a move by Left or Right. SetTheory.PGame.State.turnBound : S → ℕ gives an upper bound on the number of possible turns remaining from this state.

Instances
    def SetTheory.PGame.ofStateAux {S : Type u} [State S] (n : â„•) (s : S) :

    Construct a PGame from a state and a (not necessarily optimal) bound on the number of turns remaining.

    Equations
      Instances For

        Two different (valid) turn bounds give equivalent games.

        Equations
          Instances For
            def SetTheory.PGame.ofState {S : Type u} [State S] (s : S) :

            Construct a combinatorial PGame from a state.

            Equations
              Instances For

                The equivalence between leftMoves for a PGame constructed using ofStateAux _ s _, and L s.

                Equations
                  Instances For

                    The equivalence between leftMoves for a PGame constructed using ofState s, and l s.

                    Equations
                      Instances For

                        The equivalence between rightMoves for a PGame constructed using ofStateAux _ s _, and R s.

                        Equations
                          Instances For

                            The equivalence between rightMoves for a PGame constructed using ofState s, and R s.

                            Equations
                              Instances For
                                def SetTheory.PGame.relabellingMoveLeftAux {S : Type u} [State S] (n : ℕ) {s : S} (h : State.turnBound s ≤ n) (t : (ofStateAux n s h).LeftMoves) :
                                ((ofStateAux n s h).moveLeft t).Relabelling (ofStateAux (n - 1) ↑((leftMovesOfStateAux n h) t) ⋯)

                                The relabelling showing moveLeft applied to a game constructed using ofStateAux has itself been constructed using ofStateAux.

                                Equations
                                  Instances For

                                    The relabelling showing moveLeft applied to a game constructed using of has itself been constructed using of.

                                    Equations
                                      Instances For
                                        def SetTheory.PGame.relabellingMoveRightAux {S : Type u} [State S] (n : ℕ) {s : S} (h : State.turnBound s ≤ n) (t : (ofStateAux n s h).RightMoves) :
                                        ((ofStateAux n s h).moveRight t).Relabelling (ofStateAux (n - 1) ↑((rightMovesOfStateAux n h) t) ⋯)

                                        The relabelling showing moveRight applied to a game constructed using ofStateAux has itself been constructed using ofStateAux.

                                        Equations
                                          Instances For

                                            The relabelling showing moveRight applied to a game constructed using of has itself been constructed using of.

                                            Equations
                                              Instances For
                                                instance SetTheory.PGame.shortOfState {S : Type u} [State S] (s : S) :
                                                Equations
                                                  def SetTheory.Game.ofState {S : Type u} [PGame.State S] (s : S) :

                                                  Construct a combinatorial Game from a state.

                                                  Equations
                                                    Instances For