{
  "id": "KL-FCS-051",
  "version": "1.0.0",
  "domain": "Game theory",
  "kind": "games",
  "title": "A game with a nontrivial move set",
  "problem": "Classify each heap size and certify a winning strategy under optimal normal play.",
  "specification": {
    "moves": [
      2,
      3,
      5
    ],
    "max_heap": 20,
    "terminal_rule": "A player unable to move loses; no draws; perfect information."
  },
  "claim": {
    "winning_positions": [
      2,
      3,
      4,
      5,
      6,
      9,
      10,
      11,
      12,
      13,
      16,
      17,
      18,
      19,
      20
    ]
  },
  "witness": {
    "strategy": [
      null,
      null,
      2,
      2,
      3,
      5,
      5,
      null,
      null,
      2,
      2,
      3,
      5,
      5,
      null,
      null,
      2,
      2,
      3,
      5,
      5
    ]
  },
  "verification_scope": "Complete backward classification · 21 states",
  "explanation": "Every winning state has a legal move to a losing state. A losing state has no such move, so the opponent controls the next winning position.",
  "limitations": "These are finite impartial subtraction games, not equilibrium analyses of simultaneous or imperfect-information games.",
  "verification_status": "mechanically-checked",
  "review_status": "awaiting-independent-review",
  "provenance": {
    "origin": "Original Kenton Labs reference instance, authored with Codex assistance on 2026-10-11.",
    "external_dataset": null,
    "model_run": null
  },
  "references": [
    "https://isa-afp.org/entries/Parity_Game.html"
  ],
  "license_status": "not-yet-selected",
  "dataset": {
    "family": "games",
    "task": "Classify each heap size and certify a winning strategy under optimal normal play.",
    "input_encoding": "Structured JSON; field meanings are stated in the specification.",
    "coverage": "Complete backward classification · 21 states",
    "acceptance": [
      "Set the empty heap to losing.",
      "Process heap sizes in increasing order.",
      "Mark a heap winning if an allowed subtraction reaches a losing heap.",
      "Validate every submitted winning move and every losing-state marker."
    ],
    "generation": "Deterministic finite fixture; full enumeration or witness replay as stated.",
    "split_policy": "Reference corpus for exposition and reproduction; no train/test evaluation split is claimed."
  },
  "lesson": {
    "motivation": "A winning move is defined against optimal opponent responses, rather than against one friendly execution.",
    "definitions": [
      {
        "term": "Normal play",
        "definition": "The player with no legal move loses."
      },
      {
        "term": "Winning position",
        "definition": "A state with at least one move to a losing position for the opponent."
      },
      {
        "term": "Strategy",
        "definition": "A legal choice for every winning state in the declared game domain."
      }
    ],
    "reasoning": [
      "Set the empty heap to losing.",
      "Process heap sizes in increasing order.",
      "Mark a heap winning if an allowed subtraction reaches a losing heap.",
      "Validate every submitted winning move and every losing-state marker."
    ],
    "worked_example": "Every winning state has a legal move to a losing state. A losing state has no such move, so the opponent controls the next winning position.",
    "complexity": "N heap sizes with m allowed moves require O(Nm) dynamic-programming checks.",
    "common_error": "A single successful play does not establish a strategy against all opponent choices.",
    "further_work": "Add alternating-player reachability graphs and strategy certificates."
  },
  "related_ids": [
    "KL-FCS-049",
    "KL-FCS-050"
  ]
}
