Функція Шпрага — Гранді

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Функція Шпрага-Гранді широко використовується в теорії ігор для знаходження виграшної стратегії в комбінаційних іграх, наприклад, гра Нім. Ця функція визначається для ігор з двома гравцями, в яких програє той, який не має можливості зі своєї позиції зробити черговий крок. Теорема була незалежно сформульована й доведена Р. Шпрагом (1935)[1] та П. М. Гранді (1939).

Означення[ред. | ред. код]

Для цілей теореми Шпрага-Гранді, гра — це послідовна гра для двох гравців з досконалою інформацією, яка задовольняє умові завершення (всі ігри закінчуються: немає нескінченних перебігів гри) і нормальній умові гри (програє гравець, який не може зробити хід).

У будь-яку мить гри позиція гравця — це множина ходів, які йому дозволено зробити. Як приклад, ми можемо означити нульову гру як гру для двох гравців, де жоден гравець не має дозволених ходів. Позначаючи двох гравців як (для Аліси) і (для Боба), через те що множина ходів доступних кожному гравцеві порожня, ми позначаємо їхні позиції як .

Безстороння гра — це така гра, в якій у будь-яку мить гри кожному гравцеві дозволено геть однаковий набір ходів. Звичайна гра нім це приклад безсторонньої гри. У німі є одна або кілька куп об’єктів, і два гравці (ми назвемо їх Алісою та Бобом), які по черзі вибирають купу та видаляють з неї 1 або більше об’єктів. Переможцем стає гравець, який видалить останній об’єкт із останньої купи. Гра безстороння (неупереджена), тому що для будь-якої заданої множини розмірів куп ходи, які може зробити Аліса якщо це її хід, точно такі ж, як і в Боба, якби це була його черга. Навпаки, така гра, як шашки, не безстороння (упереджена), бо, припустивши, що Аліса грає червоними, а Боб грає чорними, для будь-якого заданого розташування фігур на дошці, якби настала черга Аліси, їй було б дозволено рухати лише червоні шашки, а якби настала черга Боба, йому було б дозволено рухати лише чорні шашки.

Зауважте, що будь-яку конфігурацію неупередженої гри можна записати як одну позицію, бо ходи будуть однаковими незалежно від того, чий хід. Наприклад, позицію нульової гри можна просто записати , тому що якщо це черга Аліси, то вона не має ходів, і якщо це черга Боба, то в нього теж нема ходів. Хід можна прив'язати до позиції, в якій він залишає наступного гравця.

Це дозволяє визначати позиції рекурсивно. Наприклад, розглянемо наступну гру Нім, в яку грають Аліса та Боб.

Приклад гри нім[ред. | ред. код]

Розміри куп     Ходи
 A B C
  
 1 2 2           Аліса бере 1 з A
 0 2 2           Боб   бере 1 з B 
 0 1 2           Аліса бере 1 з C 
 0 1 1           Боб   бере 1 з B 
 0 0 1           Аліса бере 1 з C
 0 0 0           Боб   не має ходів, тож Аліса виграла
  • На 6-му кроці гри (коли всі купи порожні) маємо позицію , тому що у Боба нема прийнятних ходів. Назвемо цю позицію .
  • На 5-му кроці Аліса мала лише один варіант: видалити один об’єкт із купи C, не залишивши Бобу жодного можливого ходу. А що її хід залишає Боба в позиції , запишемо її позицію як , а назвемо цю позицію .
  • На 4-му кроці у Боба було два варіанти: видалити один з B або видалити один з C. Однак зауважте, що насправді не мало значення, з якої купи Боб видалив об’єкт: у будь-якому разі Аліса залишилась би рівно з одним об’єктом у рівно одній купі. Отже, використовуючи наше рекурсивне означення, у Боба насправді є лише один хід: . Таким чином, позиція Боба така .
  • На 3-му кроці Аліса мала 3 варіанти: видалити два з C, видалити один із C або видалити один із B. Видалення двох із C залишить Боба на місці . Видалення одного з C залишає Боба з двома купками, кожна розміром один, тобто позицією , як описано в попередньому пункті. Однак, видалення 1 із B залишить Боба з двома об’єктами в одній купі. Його ходи тоді були б і , тому її хід призведе до позиції . Ми називаємо цю позицію . Тоді позиція Аліси є множиною всіх її ходів: .
  • Дотримуючись тієї ж рекурсивної логіки, на 2-му кроці позиція Боба це
  • Нарешті, на 1-му кроці позиція Аліси така

Німсла[ред. | ред. код]

Особливі імена , , і згадані в нашому прикладі гри називаються німслами. Загалом, німсло відповідає позиції в німі, де наявно рівно об’єктів рівно в одній купі. Формально ці числа визначаються індуктивно таким чином: це , , і для всіх , .

У той час як слово німсло походить від гри нім, німсла можна використовувати для опису позицій у будь-якій скінченній, неупередженій грі, і по суті, теорема Шпрага – Гранді стверджує, що кожен примірник скінченної, неупередженої гри може бути пов’язаний із одним німслом.

Поєднання ігор[ред. | ред. код]

Дві гри можна поєднати, додавши їхні позиції. Наприклад, розглянемо іншу гру нім з купами , і .

Приклад гри 2[ред. | ред. код]

Розміри куп      Ходи
 
A' B' C'
1  1  1           Аліса бере 1 from A'
0  1  1           Боб бере один з B'
0  0  1           Аліса бере один з C'
0  0  0           Боб не має ходів, тож Аліса виграла.

Ми можемо поєднати це з нашим першим прикладом, щоб отримати об'єднану гру зі шістьма купами: , , , , і :

Об'єднана гра[ред. | ред. код]

Розміри куп        Ходи
 A  B  C  A' B' C'  
  
 1  2  2  1  1  1   Аліса бере 1 з A
 0  2  2  1  1  1   Боб бере 1 з A'
 0  2  2  0  1  1   Аліса бере 1 з B'
 0  2  2  0  0  1   Боб бере 1 з C'
 0  2  2  0  0  0   Аліса бере 2 з B
 0  0  2  0  0  0   Боб бере 2 з C
 0  0  0  0  0  0   Аліса не має ходів, тож Боб виграв.

Щоб розрізнити дві ігри, для гри з першого прикладу ми позначимо її початкову позицію як і пофарбуємо її в синій колір:

Для гри з другого прикладу ми позначимо початкову позицію як і пофарбуємо її в червоний колір:
Щоб обчислити початкову позицію в об'єднаній грі, пам’ятайте, що гравець може або зробити хід у першій грі, залишивши другу гру недоторканою, або зробити хід у другій грі, залишивши першу гру недоторканою. Отже, початкова позиція комбінованої гри:
Формула додавання позицій можна явно записати так , що означає, що додавання як комутативне, так і асоціативне.

Еквівалентність[ред. | ред. код]

Позиції в неупереджених іграх поділяються на два наслідкові класи: або наступний гравець (той, чия черга) виграє (-позиція), або виграє попередній гравець (-позиція). Так, наприклад, це -позиція, тоді як це -позиція.

Дві позиції і еквівалентні якщо, незалежно від позиції доданої до них, вони завжди опиняються в одному наслідковому класі. Формально, тоді і тільки тоді, коли , перебуває в тому ж наслідковому класі, що й .

Щоб скористатися нашими прикладами перебігу, зауважте, що як у першій, так і в другій іграх вище ми можемо показати, що на кожному кроці Аліса робить хід, який заводить Боба в -позицію. Таким чином, обидва і це -позиції. (Зауважте, що в об'єднаній грі Боб це гравець з -позиціями. Насправді, це -позиція, яка, як ми побачимо в лемі 2, означає .)

Перша лема[ред. | ред. код]

Як проміжний крок до доведення основної теореми ми покажемо це для кожної позиції і кожної -позиції , виконується . Згідно з наведеним вище означенням рівнозначності, це означає показати, що і мають той самий наслідковий клас для всіх .

Припустімо, що це -позиція. Тоді попередній гравець має виграшну стратегію для : реагувати на рухи в відповідно до виграшної стратегії для (яка існує, бо це -позиція) і реагувати на рухи відповідно до виграшної стратегії для (що існує з аналогічної причини). Отже також має бути a -позицією.

З іншого боку, якщо це -позиція, то також -позиція, бо наступний гравець має виграшну стратегію: вибрати -позицію з числа варіантів у , а з попереднього абзацу робимо висновок, що додавання до цієї позиції це все ще a -позиція. Таким чином, в цьому випадку, має бути a -позицією, так само як .

А що це єдині два випадки, то лема доведена.

Друга лема[ред. | ред. код]

Як наступний крок ми показуємо, що тоді і тільки тоді, коли це -позиція.

Необхідність: Припустимо, що . Застосовуючи означення еквівалентності з , ми знаходимо, що (рівне завдяки комутативності додавання) є в тому самому наслідковому класі, що й . Але має бути a -позицією: для кожного зробленого ходу в одній копії , попередній гравець може відповісти тим самим ходом в іншій копії, тому завжди робить останній хід.

Достатність: А що це -позиція за гіпотезою, то з першої леми випливає, що , тобто . Так само, з того що також -позиція, що випливає з першої леми у вигляді , що . За асоціативністю та комутативністю праві частини цих результатів рівні. Крім того, це відношення еквівалентності, бо рівність це відношенням еквівалентності в наслідкових класах. Завдяки транзитивністі , можна зробити висновок, що .

Доведення[ред. | ред. код]

За допомогою структурної індукції ми доводемо, що кожна позиція рівносильна німслу . Окремий вислід про те, що початкова позиція гри має бути еквівалентна німслу, показує, що гра сама по собі еквівалентна німслу.

Розглянемо позицію . За індукційною гіпотезою всі варіанти еквівалентні німслам, скажімо, . Тож нехай . Ми покажемо, що , де це mex (мінімальне виключення) чисел , тобто найменше ціле невід’ємне число, яке не рівне жодному з .

Перше, що ми повинні зауважити, це те, що , згідно з другою лемою. Якщо дорівнює нулю, твердження є тривіально істинним. В іншому випадку розгляньте . Якщо наступний гравець переходить до в , тоді попередній гравець може перейти до в і навпаки, якщо наступний гравець робить хід в . Отже, це -позиція, і, посилаючись на доведення достатності леми, .

Тепер давайте покажемо, що це -позиція, що, використовуючи ще раз другу лему, означає, що . Ми зробимо це, явно даючи стратегію для попереднього гравця.

Припустимо, що і порожні. Тоді це нульова множина і очевидно -позиція.

Або розглянемо випадок, коли наступний гравець ходить у складнику до варіанту де . А що була мінімальною виключеною кількістю, попередній гравець може перейти в до складника . І, як було показано раніше, будь-яка позиція плюс вона ж сама це -позиція.

Нарешті, припустимо, що наступний гравець переходить в до варіанту . Якщо тоді попередній гравець переходить з до ; інакше, якщо , то попередній гравець переходить з до ; у будь-якому разі наслідок це сама позиція плюс вона ж. (Неможливо, щоб , бо було визначене як відмінне від усіх .)

Підсумовуючи, ми маємо і . За транзитивністю висновуємо, що , що і треба було довести.

Гра «Нім»[ред. | ред. код]

Докладніше: Нім (гра)

Опис гри[ред. | ред. код]

Дано N купок, в кожній з яких певна додатна кількість каменів. Кожен гравець по черзі бере з купки декілька камінців, коли всі купки стають порожніми, то гра завершується поразкою того гравця, який не може зробити крок. Відповідно, стан гри можна описати набором з N натуральних чисел, а гра закінчується тоді, коли сума цих чисел стає рівна 0.

Розв'язок[ред. | ред. код]

Розв'язок цієї гри опублікував у 1901 році Чарльз Бутон (Charles L. Bouton), і виглядає він так.

Теорема[ред. | ред. код]

Поточний гравець має виграшну стратегію тоді і тільки тоді, коли XOR-сума розмірів купок відмінна від нуля. В іншому випадку поточний гравець перебуває в програшному стані.

Основна суть наведеного нижче доведення полягає в наявності симетричної стратегії для супротивника. Ми покажемо, що, опинившись у стані з нульовою XOR-сумою, гравець не зможе вийти з цього стану — при будь-якому його переході в стан з ненульовою XOR-сумою у противника знайдеться відповідний хід, який повертає XOR-суму назад в нуль.

Доведення[ред. | ред. код]

Розпочнімо тепер формальне доведення (воно буде конструктивним, тобто ми покажемо, як саме виглядає симетрична стратегія супротивника — який саме хід потрібно буде йому здійснювати).

Доводити теорему будемо за допомогою математичної індукції.

Для порожнього «німа» (коли розміри всіх купок дорівнюють нулю) XOR-сума дорівнює нулю, і теорема вірна.

Нехай тепер ми хочемо довести теорему для деякого стану гри, з якого є хоча б один перехід. Користуючись припущенням індукції (і ациклічністю гри) ми вважаємо, що теорема доведена для всіх станів, в які ми можемо потрапити з поточного.

Тоді доведення розпадається на дві частини: 1) якщо XOR-сума (s) в поточному стані рівна 0, то треба довести, що поточний стан є програшним, тобто всі переходи з нього ведуть в стану з XOR-сумою t != 0.

2) якщо s != 0, то треба довести, що знайдеться перехід, що приводить нас в стан з t = 0.

Примітки[ред. | ред. код]

  1. Sprague, R. (1936). Über mathematische Kampfspiele. Tohoku Mathematical Journal (German) . Т. 41. с. 438—444. ISSN 0040-8735. Процитовано 7 березня 2023.