Documentation

FormalConjectures.Paper.CatchUpConjecture

The Catch-Up game and conjecture #

The game Catch-Up (Isaksen–Ismail–Brams–Nealen, 2015) is a two-player, perfect-information game played on a finite nonempty set S of positive integers. Each time a player removes a number from S, that number is added to the player’s score.

Rules.

When S is empty, the player with higher score wins; equal scores give a draw.

In this file we define:

Example #

For S = {1,2,3,4} one play is: p1 takes 2, p2 takes 1 then 4, and p1 takes 3, ending with scores (5,5).

References #

A. Isaksen, M. Ismail, S. J. Brams, A. Nealen, Catch-Up: A Game in Which the Lead Alternates, Game & Puzzle Design 1(2), 38–49 (2015).

inductive CatchUp.Player :

An arbitrary two elements type indexing the players in the Catch-Up game.

Instances For

    The possible outcomes of a Catch-Up game.

    Instances For

      Negates an outcome, swapping win and loss. Used when switching player perspectives.

      Equations
      Instances For

        Computes the best outcome for the current player from a list of possible outcomes. Win > Draw > Loss.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For

          Define the recursive game value functions.

          @[irreducible]
          noncomputable def CatchUp.valueAux (remaining : Finset ) (s_me s_opp : ) (isFirstMove : Bool) :

          value remaining s_me s_opp isFirstMove evaluates the position where:

          • remaining is the set S' of numbers not yet taken.
          • s_me is the current score of the player who is about to act (the “current player”).
          • s_opp is the opponent’s current score.
          • isFirstMove indicates whether we are in the special very first move of the whole game, where the rules force exactly one pick and then the turn passes.

          The result is the game-theoretic value from the current player’s point of view: .win / .loss / .draw, assuming optimal play from both sides.

          We model a single turn (which may consist of several picks $x_1,...,x_k$) by recursion: the current player chooses one number x; if they are still strictly behind after taking it, they must continue the same turn (so the recursive call keeps the same “current player”); once they catch up (score ≥ opponent), the turn ends and we swap players.

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            noncomputable def CatchUp.value (S : Finset ) :

            Public API: The game-theoretic value of Catch-Up on the set S, assuming optimal play. Returns .win if player 1 wins, .loss if player 2 wins, .draw if the game is tied.

            Equations
            Instances For

              Let (T_N = \sum_{k=1}^{N} k = \frac{N(N+1)}{2}). If (T_N) is even (equivalently (N \equiv 0 \pmod 4) or (N \equiv 3 \pmod 4)), then under optimal play the game Catch-Up(\(\{1, \ldots, N\}\)) ends in a draw.