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.
- The scores start at
0. Playerp1starts by removing exactly one number fromS. - After the first move, players alternate turns. On a turn, the current player removes one or more
numbers from
S, one at a time, and must keep removing numbers until their score becomes at least the opponent’s score; before the final pick they must remain strictly behind. - If the current player cannot catch up (in particular, even taking all remaining numbers would still leave them behind), the game ends immediately: the current player receives all remaining numbers.
When S is empty, the player with higher score wins; equal scores give a draw.
In this file we define:
PlayerandOutcome,- the recursive evaluator
value(optimal play), - the conjecture
value_of_even_mul_succ_self_div_two.
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).
An arbitrary two elements type indexing the players in the Catch-Up game.
Instances For
Equations
- CatchUp.instReprPlayer = { reprPrec := CatchUp.reprPlayer✝ }
Returns the other player.
Instances For
Equations
- CatchUp.instReprOutcome = { reprPrec := CatchUp.reprOutcome✝ }
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.
value remaining s_me s_opp isFirstMove evaluates the position where:
remainingis the setS'of numbers not yet taken.s_meis the current score of the player who is about to act (the “current player”).s_oppis the opponent’s current score.isFirstMoveindicates 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
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
- CatchUp.value S = CatchUp.valueAux S 0 0 true
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.