משפט ספרג-גרונדי

משפט ספרג-גרונדי הוא משפט יסודי בתורת המשחקים הקומבינטורית הקובע שכל משחק שוויוני (impartial game) אשר משחקים בו באופן נורמלי שקול לנים.

המשפט התגלה באופן בלתי תלוי על ידי רונלד ספרג (1935) ופטריק גרונדי (1939).

==הסבר אינטואטיבי==
תורת המשחקים הקומבינטורית עוסקת במשחקי סכום אפס של שני שחקנים, בעלי אינפורמציה מלאה ללא אלמנט של מזל. תאורטית ניתן לנתח משחקים כאלו באופן מלא. עם זאת, ישנם משחקים כדוגמת שח-מט או גו, בעלי סיבוכיות כל כך גדולה שניתוח מלא בלתי אפשרי עם הטכנולוגיה הנוכחית. 
משפט ספרג-גרונדי עוסק בתת-קבוצה של המשחקים הקומבינטורים הללו. הוא פותר באופן מלא את כל המשחקים הסופיים בהם שני השחקנים יכולים בכל תור לשחק בדיוק את אותם מהלכים, דהיינו לוח המשחק זהה לשני הצדדים ואין חלוקה לשחור ולבן, והמנצח הוא השחקן אשר משחק את המהלך האחרון. דוגמה למשחק שוויוני הוא נים. דוגמה למשחק לא שוויוני הוא שח-מט.

המשפט מציע מיון לכל תת-הקבוצה הנ"ל. על פי המשפט ניתן לכל משחק כזה להעניק מספר אשר יהיה שקול לערימת נים בודדת באורך מסוים, ומספר זה יקבע את זהות המנצח עוד לפני תחילת המשחק. ראוי לציין שהמשפט רק מצביע על קיום המספר - לא לכל המשחקים נמצאה האסטרטגיה אשר מסבירה מה הדרך האופטימלית לשחק במשחק, וקיימים משחקים בהם זאת בעיה קשה ולא פתורה.

==משחקים קומבינטורים==
לפני שנוכל להציג ולהוכיח את המשפט, נדרש להגדיר מספר הגדרות, ראשית עבור משחקים קומבינטורים באופן כללי, ולאחר מכן עבור משחקים קומבינטורים שוויונות.
===משחק===
לצורך משפט ספרג-גרונדי משחק יוגדר להיות משחק שני שחקנים בעל ידיעה שלמה אשר משוחק בתורות, כאשר בכל תור משחק רק שחקן אחד. לשני השחקנים נקרא בשמות שחקן שמאל ושחקן ימין. מצב במשחק יוגדר באופן חד ערכי על ידי מצב הלוח ועל ידי זהות השחקן שתורו לשחק.

מצב לוח יוגדר באופן רקורסיבי ויסומן על ידי <math>G=\left\{ A,B,C...|D,E,F...\right\}</math>. מצב לוח מכיל את כל מצבי הלוח שניתן להגיע אליהם מהמצב הנוכחי, כאשר <math>A,B,C...</math> הם מצבי הלוח שאליהם ניתן להגיע על ידי מהלך אחד של שחקן שמאל ו- <math>D, E, F...</math> הם מצבי הלוח שאליהם ניתן להגיע על ידי מהלך אחד של שחקן ימין. משחק מתאים למצב הלוח בתחילת המשחק ולכן ניתן לכתיבה כ- <math>G=\left\{ A,B,C...|D,E,F...\right\}</math>. כאשר אנו רושמים משחק בצורה זו, איננו אומרים מי הוא השחקן הראשון שמשחק (מי מבצע את מהלך הפתיחה). שחקן זה יכול להיות שחקן שמאל או שחקן ימין, וכפי שנראה בהמשך, זהות המנצח במשחק יכולה להיות תלויה בזהות השחקן שמבצע את מהלך הפתיחה. בערך זה, השחקן שמבצע את מהלך הפתיחה ייקרא שחקן מספר אחת והשחקן השני ייקרא שחקן מספר שתיים.
===משחקים סופיים===
הגדרת המשחק באופן הזה מאפשרת גם משחקים אינסופיים. עם זאת, לצורכי הערך נוסיף את התנאי שכל משחק מוכרח להסתיים לאחר מספר סופי של מהלכים ולא קיימת אפשרות לשחק סדרה אינסופית של מהלכים.
===מנצח המשחק===
אנחנו נתמקד רק במשחקים בהם אחד מהשחקנים חייב לנצח. תוצאות תיקו אינה אפשרית. משחק נורמלי (normal game convention) הוא משחק בו המנצח הוא השחקן אשר שיחק אחרון (שחקן אשר אינו יכול לשחק מפסיד). משחק מיזר (Misere) הוא משחק הפוך, בו המפסיד הוא השחקן האחרון אשר משחק. לכל משחק ישנן ארבע תוצאות אפשריות: השחקן השמאלי תמיד ינצח, השחקן הימני תמיד ינצח, שחקן אחת (השחקן שמשחק ראשון) תמיד ינצח, שחקן שתיים (השחקן שמשחק שני) תמיד ינצח. חשוב לשים לב כי מדובר אך ורק בקיום אסטרטגיה אופטימלית לניצחון. כך לדוגמה משחק ארבע בשורה (אשר אינו חלק מערך זה, כי ניתן להגיע בו לתוצאת תיקו) הוא משחק פתור בו שחקן אחת (המתחיל) תמיד ינצח, אך כדי לעשות זאת בפועל הוא חייב לשחק את האסטרטגיה האופטימלית שלו.
===חיבור משחקים===
יהי <math>G_1,G_2</math> משחקים שונים. נחבר אותם למשחק חדש <math>G=G_1+G_2</math> כך ששני המשחקים ישוחקו במקביל. בכל תור השחקן שמשחק יבחר האם לבצע מהלך או ב- <math>G_1</math> או ב- <math>G_2</math> והמנצח יהיה השחקן אשר משחק אחרון בשני המשחקים גם יחד (במקרה הנורמלי).
פורמלית המשחק המחובר יהיה: <math>G+H=\left\{ \left( G^{L_{1}}+H,G^{L_{2}}+H,..., G+H^{L_{1}},G+H^{L_{2}},... \right)|\left( G^{R_{1}}+H,G^{R_{2}}+H,..., G+H^{R_{1}},G+H^{R_{2}},... \right)\right\}</math>, כאשר <math>G^{L_{1}}</math> הוא מהלך אפשרי לשחקן אחד במשחק <math>G</math> וכו'. הגדרה זאת של חיבור משחקים מגדירה פעולה קומוטטיבית ואסוציאטיבית, תחת משחק האפס, אשר מסומן ב- <math>*0</math>, שהוא המשחק אשר מייצג את קבוצת המהלכים הריקה. במשחק זה לשני השחקנים לא קיים מהלך אפשרי והשחקן אשר פותח את המשחק הוא גם המפסיד (עוד בהמשך). 
===חיסור משחקים===
אינטואטיבית, <math>-G</math> הוא המשחק ההופכי למשחק <math>G</math>, כלומר נהפוך את הלוח וניתן לשחקן אחת לשחק עם הכלים של שחקן שתיים ולהפך. כאשר מחברים משחק והמשחק ההופכי שלו מתקיים כי שחקן מספר שתיים תמיד ינצח במשחק. ניתן להוכיח זאת על ידי שימוש באסטרטגית הטווידלדם וטווידלדי - כל מה ששחקן אחת ישחק, שחקן שתיים ישחק את המהלך הזהה בלוח השני, מה שיוביל לניצחון וודאי של שחקן שתיים.
פורמלית: חיסור יוגדר באופן זהה לחיבור, כאשר אם <math>G=\left\{ A,B,C...|D,E,F...\right\}</math> אז <math>-G=\left\{ -D,-E,-F,...|-A,-B,-C,...\right\}</math>.

==משחקים שוויוניים==
משחקים שוויוניים הם תת-קבוצה של כל המשחקים הקומבינטורים. הם מקבלים באופן תורשתי את כל ההגדרות אשר הגדרנו עבור משחקים קומבינטורים (סופיות המשחק, חיבור משחקים, חיסור משחקים וכו'), אך ישנן עוד מספר הגדרות רלוונטיות רק עבורם. משפט ספרג-גרונדי עוסק רק במשחקים אלו ולא בכל המשחקים הקומבינטורים. 
===משחק שוויוני===
משחק שוויוני (impartial game) הוא משחק בו כל אחד מהשחקנים יכול לשחק בדיוק את אותם המהלכים כמו השחקן השני באותו התור. לדוגמה, אם שני השחקנים יכולים לשחק <math>A,B,C</math>, אז נסמן משחק זה בקיצור באופן הבא: <math>G=\left\{ A,B,C|A,B,C\right\} =\left\{ A,B,C\right\}</math>. במשחקים שוויוניים, בעקבות העובדה שהלוח זהה, זהות המנצח תקבע רק על ידי תור מי לשחק. המנצח תמיד יהיה או שחקן אחת או שחקן שתיים ולא קיים משחק שוויוני בו הניצחון מובטח לשחקן השמאלי (או הימני).
===נים===
נים משמש כדוגמה הסטנדרטית למשחק שוויוני. במשחק זה יש מספר ערימות של גפרורים. בכל תור השחקן שמשחק יכול להוציא כמה גפרורים שהוא רוצה, אבל רק מערימה אחת. כאשר המשחק משוחק באופן נורמלי השחקן שלוקח את הגפרור האחרון מנצח. בגרסת המיזר (Misere), המשחק משוחק באופן הפוך, ומי שלוקח את הגפרור האחרון מפסיד. משחק נים בעל ערמה בודדת עם <math>n>0</math> גפרורים הוא טריביאלי. במשחק זה השחקן שמתחיל תמיד ינצח - הוא ייקח את כל הגפרורים בערימה (אם המשחק נורמלי) או ייקח את כל הגפרורים מלבד האחרון (בגרסת המיזר). בשנת 1901 פרסם צ'ארלס בולטון אסטרטגית ניצחון כללית למשחק בכל גודל סופי של ערימות בעלות מספר סופי של גפרורים. למעשה, בולטון הראה שמנצח המשחק נקבע מראש על ידי סידור הלוח, כאשר לכל לוח קיימת אסטרטגיה אשר תבטיח ניצחון לאחד מהשחקנים, ורק לו.
===מספר גרונדי===
מספר גרונדי (או נימבר - nimber) הוא מספר שלם אי שלילי המשויך למצב במשחק. הוא ייצג משחק נים עם ערימה בודדת בגודל <math>n</math>, נסמן זאת על ידי <math>*n</math>, ומעתה ואילך נתייחס אליו בתור משחק שוויוני. נשתמש במספרי גרונדי כדי למיין מצבי משחק של משחקים שוויוניים אחרים אשר שונים מנים ולהשוות אותם עם נים. באופן ישיר מנים, השחקן הראשון תמיד ינצח בכל משחק בעל מספר גרונדי שונה מאפס, ותמיד יפסיד כאשר מספר גרונדי שווה לאפס.
===שקילות במשחקים שוויוניים===
שני משחקים שוויוניים <math>G_1, G_2</math> יהיו שקולים אם ורק אם במשחק המחובר <math>G_1 + (-G_2)</math> שחקן שתיים הוא המנצח. משמעות השקילות היא שהתוצאות האפשריות של המשחקים יהיו זהות לכל משחק <math>H</math> אשר נחבר לשני המשחקים. נסמן את השקילות על ידי <math>G_{1}\approx G_{2}</math>. מכיוון שמשחק האפס על פי הגדרה הוא משחק בו השחקן השני תמיד מנצח וגם מתקיים במשחקים שוויוניים כי <math>G=-G</math>, אז שני משחקים יהיו שקולים אם <math>G_1 + (-G_2) = G_1 + G_2 \approx *0</math>. שני משחקים שקולים יהיו בעלי מספר גרונדי זהה.<br />
דוגמאות:
* במשחקים שוויוניים נורמלים <math>G+G \approx *0</math>. ניתן גם להראות זאת ישירות בעזרת אסטרטגית טווידלדם וטווידלדי. בגרסת המיזר זה לא מתקיים (ולכן משפט ספרג-גרונדי אינו תקף עבור משחקים שאינם נורמלים).
* עבור מספרי גרונדי, אשר בעצמם מהווים משחקים שוויוניים, מתקיים: <math>*n\approx *k</math> אם ורק אם <math>n=k</math>.
===פונקציית (mex(G===
ערך ה- <math>mex</math> של קבוצה הוא השלם הלא שלילי הקטן ביותר, אשר לא שייך לקבוצה. הפונקציה הזאת משמשת לצורך חישוב מספר גרונדי. לדוגמה: <math>mex(\left\{ 0,1,2,7\right\} )=3</math> ואילו <math>mex(\left\{ 1,2,3,5,8\right\} )=0</math>.

==משפט ספרג-גרונדי==
יהי <math>G</math> משחק שוויוני סופי המשוחק בצורה נורמלית, אז קיים <math>n</math> אשר מקיים <math>G\approx *n</math>, כלומר המשחק <math>G</math> שקול למספר גרונדי <math>*n</math>. במקרה כזה לשחקן אחת יש אסטרטגיית ניצחון אם ורק אם מספר גרונדי של המשחק שונה מ- <math>*0</math>.
===כללי===
מכיוון ש- <math>*n</math> שקול לערימת נים בעלת <math>n</math> גפרורים, אז המשפט למעשה יוצר שקילות בין כל משחק שוויוני סופי ונורמלי לערימת נים בגודל כלשהו. זה מעניק לנו זיהוי בין כל משחק למספר גרונדי שלו. השקילות מתבטאת בכך שתוצאת המשחק (בהינתן אסטרטגיה אופטימלית) תהיה זהה למשחק נים זהה, גם אם מהלכי המשחק יהיו שונים. ספרג וגרונדי אף מעניקים לנו פונקציה רקורסיבית אשר מחשבת באופן ישיר את מספר גרונדי המשחק - מספר גרונדי של כל מצב ניתן על ידי המספר השלם הקטן ביותר שאליו לא ניתן להגיע במהלך מאותו מצב (מצב שבו אין אף מהלך אפשרי שקול למספר גרונדי 0).

===הוכחת משפט ספרג-גרונדי===
נוכיח את המשפט בעזרת אינדוקציה על מספר המהלכים עד סיום המשחק. בסיס האינדוקציה מתקיים כאשר לשני השחקנים במשחק השוויוני <math>G</math> נותרו אפס מהלכים עד סוף המשחק ואז <math>G\approx *0</math>. נניח את נכונות צעד האינדוקציה לכל משחק שוויוני בעל לא יותר מ- <math>n-1</math> מהלכים עד סופו. לכל משחק כזה קיים מספר גרונדי מוגדר היטב.<br />
יהי <math>G=\left\{ G^{'},G^{},..\right\}</math> משחק שוויוני בעל <math>n</math> מהלכים עד סופו. כל שחקן יכול לשחק <math>G^{'},G^{},..</math>. נשים לב שמכיוון שהמשחק שוויוני וסופי, אז כל אחד מהמהלכים יוביל לתת-משחק בעל מספר קטן יותר של מהלכים אשר מקיים את הנחת האינדוקציה. לכן, כל אחד מהמהלכים שקול למשחק שוויוני בעל מספר גרונדי יחיד. לפיכך <math>G=\left\{ *n_{1},*n_{2},...\right\}</math>. זאת היא קבוצה של מספרי גרונדי. על פי טענת העזר למטה, לקבוצה זאת יש מספר גרונדי יחיד אשר שווה ל- <math>G\approx mex(G)</math> של הקבוצה.

===טענת עזר===
יהי <math>G=\left\{ *n_{1},*n_{2},...\right\}</math> משחק שוויוני, אז <math>G\approx mex(G)</math>.<br />
===הוכחת טענת העזר===
נשים לב שהטענה משתמשת בכך שכל קבוצה של מספרי גרונדי היא בעצם משחק שוויוני, מה שנכון, מכיוון שהקבוצה הזאת שקולה למשחק בו השחקן הראשון בוחר ערימת נים כלשהי מתוך כל הערימות האפשריות. כדי להראות ש- <math>G\approx mex(G)</math> נרצה להוכיח כי <math>G + mex(G) \approx *0</math>, כלומר במשחק המחובר בין השניים, השחקן שמשחק ראשון תמיד מפסיד. נראה זאת על ידי מציאת אסטרטגיה מנצחת לשחקן השני. 
ישנן שלוש אפשרויות למשחק:
* אם השחקן הראשון מבצע מהלך ב- <math>mex(G) = *n</math> ומשחק איזשהו <math>*k<*n</math>, אז על פי הגדרת <math>mex(G)</math>, השחקן השני יכול לשחק <math>G=*k</math>, מה שיוביל לשתי ערימות נים זהות בגודל <math>*k + *k \approx *0</math>. במצב כזה שחקן שניים תמיד מנצח - על כל מהלך של שחקן מספר אחד, שחקן שניים ישחק מהלך זהה בערימה המקבילה, עד שהמשחק ייגמר.
* אם השחקן הראשון מבצע מהלך ב- <math>G</math> ומשחק לאיזשהו <math>*k</math> כך ש- <math>mex(G)=*n>*k</math>, אז שחקן שתיים ישחק <math>mex(G) = *k</math> ושוב נקבל שתי ערימות זהות <math>*k + *k \approx *0</math>.
* אם השחקן הראשון מבצע מהלך ב- <math>G</math> ומשחק לאיזשהו <math>*k</math> כך ש- <math>mex(G)=*n<*k</math>, אז שחקן שתיים ישחק בערימת הנים החדשה <math>*n</math> מה שיתן לנו שתי ערימות זהות, <math>*n + *n \approx *0</math>.
* לשחקן אחד אין אפשרות לשחק <math>G = *n</math>, מכיוון שעל פי הגדרת ה- <math>mex(G)</math>, זה הוא בדיוק המהלך המינימלי אותו לא ניתן לשחק במשחק.
==ראו גם==
* משחק אסטרטגיה מופשט
* נים
* תורת המשחקים הקומבינטורית
* תורת המשחקים

== לקריאה נוספת ==
<div style="direction: ltr;">
*Dierk Schleicher, Michael Stoll, "An Introduction to Conway's Games and Numbers", 2005.
*J.H. Conway, "On numbers and games", AK Peters, 2001.
*E.R. Berlekamp, J.H. Conway, and R. K Guy, "Winning ways for your mathematical plays", AK Peters, 2001.
</div>

ספרג-גרונדי
קטגוריה:תורת המשחקים הקומבינטורית