הפוסט המעניין ביותר שלא ניתן לתאר בכותרת שלו

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

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

הבה וננסה לחשוב על כל העניין יותר לעומק. בלי להשתמש במילה "הפניה עצמית".

כדי לתאר מספרים טבעיים אפשר להשתמש בדרכים רבות. למשל, כדי לתאר את המספר 3 אפשר להגיד "שלוש". אפשר גם להגיד "אחד ועוד אחד ועוד אחד" או "שמונה חלקי שתיים פחות ארבע חלקי ארבע". מן הסתם "שלוש" הוא התיאור הכי קומפקטי, אבל לא היחיד. מכיוון שלמרביתם המוחצת של המספרים אין שם מפורש, הדרך היחידה לתאר אותם היא באמצעות מספרים אחרים ופעולות עליהם. כך למשל "גוגול" אמנם מתאר בעזרת מספר קטן של אותיות את \(10^{100}\), אבל איך אפשר לתאר את \(10^{137}\)? אין מנוס מלהגיד "עשר בחזקת מאה שלושים ושבע" – שימו לב, גם בתיאור הזה יש פחות מ-100 אותיות, כך שגם \(10^{137}\) עדיין נחשב למספר שניתן לתאר באמצעות פחות מ-100 אותיות.

האם ניתן לתאר כל מספר טבעי באמצעות פחות מ-100 אותיות? התשובה היא כמובן שלא, והדרך הפשוטה ביותר להראות זאת היא באמצעות שיקולי ספירה – יש 22 אותיות בעברית, ונחשיב גם את רווח בתור תו, ולכן נקבל שיש רק \(23^{100}\) משפטים שאורכם לכל היותר 100 תווים. חלקם חסרי משמעות לגמרי, כמו "עכגעג". חלקם בעלי משמעות לא-מספרית, למשל  "הפוסט הזה משעמם נורא". רק למתי-מעט מתוכם יש משמעות מספרית – אבל גם אם לכולם הייתה משמעות מספרית, הם עדיין היו מתארים רק \(23^{100}\) מספרים שונים – ויש אינסוף מספרים טבעיים.

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

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

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

אם כן, מה שנותר להבין הוא מדוע השפה רובי דווקא. התשובה הפשוטה היא שזו השפה האהובה עלי; אך האם אין מספרים שניתן לתאר בשפה אחרת (למשל, ++C) אך לא ברובי?

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

puts 37

(puts היא פקודת ההדפסה הבסיסית של רובי).

מכאן אנו למדים שברובי אפשר לכתוב כל מספר באמצעות תוכנית שהגודל שלה שווה לאורך המספר בייצוג עשרוני, ועוד חמישה תווים (התווים של puts והרווח שאחריו). האם אפשר לשפר? לפעמים כן. קחו את המספר "מיליון, ארבעים ושמונה אלף חמש מאות שבעים ושש". תוכנית אחת עבורו היא זו:

puts 1048576

בתוכנית הזו ישנם 12 תווים. לעומת זאת, הנה תוכנית "טובה יותר":

puts 2**20

שתי כוכביות ברצף מציינות ברובי את אופרטור החזקה – מה שהתוכנית עושה הוא להדפיס את תוצאת החישוב של שתיים בחזקת עשרים – בדיוק המספר 1,048,576. ספירה מהירה תראה שיש רק 10 תווים בתוכנית הזו – כלומר, היא קצרה יותר.

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

כמובן שקולמוגורוב לא הכיר את רובי; אם כן, איך אני מעז לשייך את המושג שלו לשפת התכנות האזוטרית שלי? התשובה נעוצה בכך שלצורך ההגדרה מספיק לדבר על מודל חישובי כללי כלשהו, וההבדל בין הסיבוכיות של מספר שמתואר במודל א' והסיבוכיות שלו כאשר הוא מתואר במודל ב' הוא לכל היותר מספר קבוע שאינו תלוי כלל במספר עצמו, אלא רק בשני המודלים. נדגים זאת בעזרת ++C: מכיוון ש-++C היא שפת תכנות חזקה למדי, אפשר לכתוב תוכנית ++C שמקבלת כקלט תוכנית ברובי ומריצה אותה. אם כן, "תיאור" של שתיים בחזקת 20 בשפת ++C יכול להיות, בין היתר, הקוד של תוכנית הרובי שמחשבת את שתיים בחזקת 20, ובנוסף לכך הקוד של התוכנית ש"מסמלצת" את רובי ב-++C (הגודל של הסימולטור הזה תלוי רק בשפות רובי ו-++C; הוא אינו תלוי במספר הקונקרטי שאני מנסה לתאר).

נעבור לקצת פורמליזם. בהינתן מודל חישובי \(M\) שמחשב פונקציה כלשהי, כלומר בהינתן \(x\) הוא מוציא פלט \(y=M(x)\), אפשר להגדיר פונקציה \(K_M(y)\) באופן הבא:

\(K_M(y)=\min_{n}\left\{\exists x: |x| = n \wedge M(x)=y\right\}\)

במילים: על הקלט y (שהוא מספר טבעי), הפונקציה \(K_M\) מחזירה את האורך הקטן ביותר של x (על x אנו חושבים בתור קוד של תוכנית מחשב, כלומר סדרת תווים) כך ש-M, כשהיא מופעלת על x, מחזירה y.  את הדיון שקיימתי קודם על הקשר בין רובי ו-++C אפשר לסכם באופן הבא: לכל שני מודלים \(M_1,M_2\) קיים קבוע \(c\) כך שלכל \(y\) מתקיים:

\(K_{M_1}(y)\le K_{M_2}(y)+c\)

במילים אחרות, אולי המודל השני קצת יותר יעיל מהראשון ואת חלק מהמספרים אפשר לתאר בו בצורה יותר קומפקטית, אבל ה"קומפקטיות" הזו היא מגודל קבוע c, ולא מגודל שתלוי בגודל ומורכבות המספר שאנו מנסים לתאר. מכיוון שברוב השאלות ששואלים על סיבוכיות קולמוגורוב הקבוע c הזה אינו חשוב, נהוג לקבוע מודל ספציפי אחד (במקרה שלי, רובי; במקרים אחרים רבים, מכונת טיורינג) ולעבוד רק בו. את הפונקציה של סיבוכיות קולמוגורוב עבור מודל זה מסמנים פשוט בתור K, בלי M שכתוב למטה.

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

ראשית, הקבוצה. במקור דיברנו על 100 אותיות, אבל אפשר היה לדבר על מספר \(n\) כללי של אותיות. אם כן, אגדיר את הקבוצה הבאה: \(A_n=\left\{y: K(y)\le n\right\}\). במילים – קבוצת כל המספרים עם סיבוכיות קולמוגורוב של לכל היותר n – "קבוצת כל המספרים שאפשר לתאר באמצעות תוכנית מחשב עם לכל היותר n תווים".

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

מה הבעיה? שלא ברור לנו איך אפשר לחשב את K. הגישה הנאיבית אומרת "מה הבעיה? בהינתן y שעבורו אתה רוצה לחשב את \(K(y)\), תריץ את כל תוכניות המחשב ברובי מאורך 1 ותראה מה הן מחזירות: אם אחת מהן החזירה את \(y\), הדפס 1; אחרת, תריץ את כל התוכניות מאורך 2 וכן הלאה וכן הלאה. הבעיה היא שלא כל תוכניות המחשב הללו עוצרות בכלל; בפרט, אם התוכנית שלי, זו שמבצעת את הסימולציה הזו, מתישהו מנסה להריץ את עצמה, היא עצמה תריץ את עצמה שוב, ושוב, ושוב… ולא תעצור אף פעם.

לכן השאלה היא אם יש דרך אחרת לחשב את K, שאולי פשוט איננו חכמים מספיק כדי לחשוב עליה כרגע? מפתה להגיד שלא קיימת דרך כזו, וההוכחה לכך היא שאם הייתה, אז אפשר היה להשתמש בה כדי ליצור את המספר הפרדוקסלי של ברי. זה כמעט נכון, אבל יש נקודה עדינה שחשוב לשים אליה לב – גם אם יש דרך לחשב את K, זה לא אומר (עדיין) שהגענו לסתירה – אולי לכל n, כל תוכנית שננסה לכתוב כך שתחזיר את המספר הקטן ביותר שאיננו ב-\(A_n\) תהיה מאורך גדול מ-n? למשל, התוכנית שמחזירה את המספר הקטן ביותר שלא ניתן לתיאור בפחות מ-100 תווים תהיה בעצמה בת מעל ל-100 תווים, וכדומה (אם תנסו לכתוב תוכנית שכזו בפועל, תיווכחו שאכן זה מה שיקרה לכם – אבל זה רק בגלל שאין לכם דרך פלאית לחישוב K).

מה שאראה כעת הוא שאם יש לנו דרך לחשב את K, אז בהכרח תהיה תוכנית שבה הבעיה שתיארתי לעיל לא תתקיים. המסקנה המיידית היא שלא ניתן לחשב את K.

ובכן, הנה "תבנית" לתוכנית פרדוקסלית שכזו:

y=0

while true

 return y if K(y) > n

 y = y + 1

end

אני אומר "תבנית" כי הדבר הזה אינו תוכנית חוקית – הסימן n אינו מייצג משתנה. אם מחליפים אותו במספר, מקבלים תוכנית חוקית. למשל:

 

y=0

while true

 return y if K(y) > 100

 y = y + 1

end

כעת, מה האורך הכולל של התוכנית? כדי שהתוכנית תעבוד צריך שגם הקוד של K יהיה חלק ממנה – אבל אורך הקוד הזה קבוע, נסמנו U. פרט לכך אורך התוכנית שלי גם כן קבוע כמעט לגמרי – נסמן את הגודל הקבוע בתור C. מה כן משתנה? הגודל של המספר שאני כותב במקום n. הרי אם כתבתי 100, הוספתי עוד שלושה תווים לתוכנית; אבל אם הייתי רוצה לכתוב 1000000 הייתי מוסיף בכך עוד שבעה תווים לתוכנית. כאן אנחנו מגיעים לנקודה העדינה ביותר בכל הסיפור – המקום שהמספר שאני כותב במקום n תופס שווה ללוגריתם (בבסיס 10) של המספר עצמו. כלומר, בשביל לייצג את המספר מאה אני צריך רק שלושה תווים. בשביל לייצג את אלף – ארבעה, וכן הלאה. בכל פעם שבה גודל המספר מוכפל ב-10 אני צריך להוסיף רק תו אחד נוסף לייצוג. במילים אחרות – גודל התוכנית שלי גדל יחסית לאט בזמן שאני מגדיל את n מאוד מהר.

גודל התוכנית הכולל, אם כן, ניתן לכתיבה בתור \(U+C+\log n\). כעת אנחנו מוכנים לקטוף את הפרדוקס. אנחנו יודעים שהתוכנית תדפיס מספר שסיבוכיות קולמוגורוב שלו גדולה מ-\(n\); ולכן אם נבחר \(n_0\) גדול מספיק כך שיתקיים \(U+C+\log n_0 < n_0\) נגיע לסתירה – כי הנה, התוכנית שלנו הדפיסה מספר שמנכונות K מובטח לנו שסיבוכיות קולמוגורוב שלו היא גדולה מ-\(n_0\), אבל הסיבוכיות שלה נמוכה יותר מ-\(n_0\). מובטח לנו שקיים \(n_0\) שכזה כי n גדל מהר יותר מאשר הלוגריתם שלו (ואילו U,C הקבועים הם חסרי השפעה בטווח הארוך).

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

בחר לך דיקטטור

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

המשפט (שהוכח על ידי הכלכלן קנת ארו בסביבות שנת 1951 – עשרים שנה לאחר מכן זכה ארו בפרס נובל לכלכלה) מהווה פחות או יותר את תחילתו של ענף מעניין בתורת המשחקים – תורת הבחירה החברתית (Social Choice). הבעיה הבסיסית שאיתה מתמודדת התורה היא זו: נניח שיש לנו קבוצה של מצביעים וקבוצה של תוצאות אפשריות. המצביעים מדרגים את התוצאות באופן מסויים – כיצד ניתן לבנות דירוג משותף עבור כל המצביעים מתוך הדירוגים האינדיבידואליים של כל אחד מהם?

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

עוד דוגמה היא המשחקים האולימפיים – לחלק מהתחרויות (למשל, התעמלות) אין מדד אובייקטיבי של איכות (זמן, גובה וכו') אלא מספר שופטים (שאמנם, אמורים לקבל את החלטתם על פי שיקולים אובייקטיביים). כל שופט מדרג את הביצוע של כל אחד מהמתחרים, והדירוג של כלל השופטים משוקלל בצורה מסויימת לדירוג של כל המתחרים.

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

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

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

כעת, כשאני אומר "סדר על קבוצת התוצאות", למה הכוונה? אפשר לתת לביטוי הזה מספר משמעויות, אך המשמעות היחידה שעליה אדבר (ובה עוסק המשפט) היא של סדר מלא – כלומר, אם נבוא לשחקן כלשהו ונציג בפניו שתי תוצאות אפשריות, הוא יעדיף תמיד אחת מהן על השנייה (ולא יעמוד ויגיד "אה… לא יודע ולא אכפת לי"). כלומר – גם אם חץ בשבילכם במקום הראשון, אתם עדיין חייבים להחליט מי במקום השני – חנין או חולדאי.

האובייקט המרכזי של תורת הבחירה החברתית הוא פונקצית הרווחה החברתית – פונקציה שמקבלת כקלט את ההעדפות של כל השחקנים (מה שמכונה "פרופיל העדפות"), ומוציאה כפלט סידור משל עצמה של קבוצת התוצאות – למשל – חץ במקום ראשון, חנין וחולדאי חולקים את המקום השני, וכו'. לפונקצית הרווחה החברתית כן מותר להיות "אדישה" בין תוצאות (להכניס אותן לאותו מקום) אחרת מהר מאוד יש לנו בעיות: מה קורה אם חצי מהמצביעים שמו את חולדאי במקום הראשון וחצי שמו את חנין? אם אחד משניהם יועדף ממש על השני, זה אומר שפונקצית הרווחה עצמה היא פונקציה מוטה.

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

אפשר להגדיר פונקציות רווחה חברתיות שונות מכאן ועד להודעה חדשה – המטרה היא כמובן להגדיר פונקציות שהן "הוגנות" עד כמה שרק ניתן – בדיוק בנסיון ההגדרתי הזה עוסק משפט ארו.
כבר הזכרתי את פונקצית הרווחה החברתית ה"דיקטטורית" – באופן פורמלי, היא לוקחת את כל ההעדפות של השחקנים, ומוציאה כפלט את ההעדפות של שחקן אחד ספציפי (תמיד אותו שחקן). המשמעות של פונקציה שכזו היא שהמשחק מכור מראש ואין לשאר השחקנים שום טעם להשתתף בו – לא משנה מה יהיו הבחירות שלהם, הם לא מסוגלים להשפיע על תוצאת המשחק. מכאן שזו לא ממש פונקציה שאנו רוצים לקבל כלגיטימית; ולכן אפשר לסמן בתור תכונה מס' 1 של פונקצית רווחה חברתית את הדרישה "הפונקציה אינה דיקטטורית".

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

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

אבל כעת נניח שחץ צבר פופולריות בקרב חלק מהמצביעים ועלה אצלם מהמקום השלישי לשני – כלומר, חלק מהמצביעים כעת מעדיפים את חץ על פני חולדאי (וחנין עדיין ראשון) ואילו אחרים מעדיפים את חץ על חנין (וחולדאי עדיין במקום הראשון). למרות מעשה הגבורה הזה, פונקצית הרווחה החברתית עדיין מחזירה את חץ במקום השלישי… אבל במקום הראשון היא שמה את חולדאי, לא את חנין. כלומר, ההתחזקות של חץ פגעה בחנין, למרות שהיא לא רלוונטית בכלל להעדפה של הבוחרים בין חולדאי וחנין – אף אחד לא הפסיק להעדיף את חנין על חולדאי רק בגלל שהוא התחיל להעדיף את חץ יותר מאשר את חולדאי!

ברור לנו היטב שבבחירות אמיתיות התופעה הזו מופיעה כל הזמן. המקרה המפורסם ביותר הוא כנראה של רוס פרו, מיליארדר אמריקאי שרץ כמועמד עצמאי בבחירות ב-1992 (גם ב-1996 אבל זה פחות חשוב) ויש טענות שהשפיע על תוצאות הבחירות (שבהן זכה במפתיע קלינטון הדמוקרטי ולא בוש הרפובליקני) למרות שכמובן שהגיע אחרון (באופן דומה הואשם גם ראלף ניידר בהפסד של אל גור לבוש הבן).

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

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

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

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

שלשות פיתגוריות

כמו פוסטים רבים אחרים, הפוסט הזה נולד משאילתת חיפוש שהובילה מישהו לאתר – במקרה הזה, "פתירת שלשה פיתגורית". נושא טריוויאלי יחסית, שמשום מה טרם יצא לי לדבר עליו, וחבל. ראשית נפנה לתיאור המושג עצמו, ולשם כך יש להזכיר את משפט פיתגורס. המשפט הוא כנראה המשפט המפורסם ביותר בגאומטריה, ואולי במתמטיקה בכלל (אני סבור שיותר אנשים שמעו עליו מאשר על המשפט האחרון של פרמה, למשל), וזה קצת מוזר כי במבט ראשון לא ברור מה טוב בו. בויקיפדיה העברית נכתב לא מזמן ערך מקיף על המשפט ולא אנסה להתחרות בו אלא אתאר אותו בפשטות: בהינתן משולש ישר זווית  – כלומר, משולש שניתן לצייר אותו כמורכב מצלע אופקית, צלע אנכית שמחוברת אליה (שתי אלו מכונות "הניצבים" שכן הן ניצבות זו לזו), וצלע שלישית המחוברת לשתיהן ונקראת "היתר", אז סכום הריבועים של אורכי הניצבים שווה לריבוע היתר. במשוואה, \(a^2+b^2=c^2\).

זו דווקא המשוואה, ולא התוצאה הגאומטרית, שמעניינת אותנו, אבל אנסה להביא את המוטיבציה בכל זאת מהגאומטריה. נניח שאנחנו פיתגורס והאסכולה המופרעת שלו, שחושבת שכל היקום ניתן לתיאור באמצעות יחסים בין מספרים טבעיים. פתאום בא איזה זב חוטם מקרבנו ומוכיח ששורש 2 איננו רציונלי (נניח, בשיטות של הפוסט הקודם), כלומר סותר את אמונתנו על היחסים בין מספרים הטבעיים. מייד אנחנו מזדעזעים, שכן שורש 2 צץ בעולם המתמטי בצורה טבעית, "בזכות" משפט פיתגורס: קחו משולש ישר זווית שאורך שני ניצביו הוא 1, ותקבלו שאורך היתר הוא שורש 2 (ודי קל לראות שזה בעצם גם אורך האלכסון בריבוע שאורך צלעו 1). אם כן, יש שתי דרכי פעולה אפשריות מכאן: אפשר להיות אדם בוגר ולהכיר בכך שמספרים אי רציונליים הם חלק מהחיים, ואפשר להטביע את מי שגילה ששורש 2 אי רציונלי, ולהתעלם מכל המשולשים שבהם היתר הוא אי רציונלי. הפיתגוראים בחרו, על פי האגדה, בדרך הפעולה השנייה בכל הנוגע להטבעות; ובכל הנוגע למשולשים, אולי הם לא התעלמו ממשולשים "לא נחמדים" עם יתר שאינו רציונלי, אבל הם בהחלט התעניינו בשאלה אילו משולשים הם כן נחמדים – כלומר, משולשים שכל שלוש הצלעות שלהם הם מספרים רציונליים. כלומר, שלשות של מספרים רציונליים \((a,b,c)\) שמקיימות את המשוואה \(a^2+b^2=c^2\). שלשות כאלו נקראות "שלשות פיתגוריות" – נחשו על שם מי.

כאן כדאי לשים לב לאבחנה המרכזית והמהותית על שלשות שכאלו: אם \((a,b,c)\) הם שלשה שכזו, כך גם \((ta,tb,tc)\), כלומר אותה שלשה כשכפלנו את שלושת איבריה באותו מספר. כך למשל 3,4,5 היא שלשה פיתגורית (כנראה הכי מוכרת), אבל גם 6,8,10, שהושגה מהכפלת שלושת המספרים הללו ב-2, גם היא שלשה פיתגורית. ההוכחה פשוטה למדי – נסו להוכיח בעצמכם. מבחינה גאומטרית, 3,4,5 ו-6,8,10 מגדירים את אותו המשולש, מבחינת הזוויות שלו; ההבדל היחיד הוא ב"גודל" שלו – כמה מקום הוא יתפוס על הנייר שעליו נשרטט אותו. זה הבדל יחסית זניח; אם נצייר את משולש ה-6,8,10 על דף ואז נרחיק אותו מספיק מאיתנו, הוא ייראה לנו בדיוק כמו משולש ה-3,4,5. פורמלית, למי שזוכר משהו משיעורי הגאומטריה בתיכון, אומרים שכל המשולשים הללו הם דומים. בשל התכונה הזו לא ממש מדברים על שלשות של מספרים שהם שבר (למרות שלפעמים כן – למשל, כשעוסקים במה שמכונה "מספרים קונגרואנטיים" – מספרים שהם שטח של משולשים ישרי זווית עם צלעות רציונליות, לפעמים יש הכרח שהצלעות יהיו שבר ולא שלם), פשוט כי אם יש לנו שלשה של מספרים שהם שבר, אפשר לכפול את שלושתם במכנה המשותף שלהם ולקבל שלשה של מספרים שלמים.

אז לא מדברים בכלל על שלשות שהן לא במספרים שלמים, אבל גם בשלשות של שלמים, הרוב "לא מעניינות" כי הן מגדירות את אותו המשולש. במלים אחרות, לא צריך לשבור את הראש על 6,8,10 ועל 15,20,25, כי את שתיהן אפשר לקבל מ-3,4,5. השלשה הזו היא "קנונית" במובן מסויים, ואפשר לתת לזה משמעות פורמלית: מבין כל השלשות שמגדירות את אותו משולש והן במספרים שלמים, זו השלשה היחידה שאין לאיבריה מחלק משותף. כך למשל ב-15,20,25, כל שלושת המספרים מתחלקים ב-5 – ואכן, באופן לא מפתיע, השלשה התקבלה מ-3,4,5 על ידי כפל ב-5. במילים אחרות: אם ניקח שלשה פיתגורית כלשהי, נמצא את המספר הטבעי הגדול ביותר שמחלק את שלושת אבריה, ונחלק בו את שלושתם – או אז נקבל שלשה מעניינת, "קנונית", שאפשר לקבל את כל שאר השלשות שמגדירות את אותו משולש באמצעותה על ידי כפל במספר טבעי. מסתבר שיש אינסוף כאלו, ו-3,4,5 זה רק קצה הקרחון.

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

ובכן: אם \(s,t\) הם מספרים טבעיים, אז קל לבדוק שהשלשה שמוגדרת באמצעות \(a=s^2-t^2, b=2st, c=s^2+t^2\) היא אכן שלשה פיתגורית; אם מגבילים את הערכים השונים של \(s,t\) על ידי הדרישה ש-\(s,t\) יהיו זרים (ללא מחלק משותף גדול מ-1) ושאחד מהם יהיה זוגי, אז הנוסחה שלעיל תניב שלשה פרימיטיבית, וכל שלשה פרימיטיבית מתקבלת על ידי \(s,t\) שכאלו. מכאן שאפשר לקבל כל שלשה פיתגורית אפשרית על ידי הנוסחה הבאה (שאמנם, תניב חלק מהשלשות במספר דרכים שונות): \(a=k(s^2-t^2),b=2kst, c=k(s^2+t^2)\).

אז איך לעזאזל מגיעים לנוסחה שכזו? אין לי מושג איך הגיעו אליה במקור (וראיתי כמה דרכים ; אחת התבססה על משפט לא טריוויאלי באלגברה מתקדמת שנקרא "משפט הילברט 90" והאחרת התבססה על חוג השלמים הגאוסיים \(\mathbb{Z}[i]\)), אבל אציג דרך שנראית לי עוד איכשהו פשוטה, במובן זה שלא נדרש ידע מוקדם. נתחיל מהאבחנה לפיה בשלשה \(a^2+b^2=c^2\) ושלושת איבריה זרים, אחד משני המספרים \(a,b\) חייב להיות זוגי והשני אי זוגי. אם שניהם היו זוגיים, אז הם לא היו זרים (שניהם היו מתחלקים ב-2); ואם שניהם היו אי זוגיים, אז… נסו לנחש מה (זה לא מיידי). אסביר בהמשך. מכאן ואילך נניח ש-\(a\) הוא האי זוגי מבין השניים ואילו \(b\) הוא הזוגי.

כעת נבהה זמן מה במשוואה \(a^2+b^2=c^2\) בלי מושג מה לעשות. מכיוון שאין לנו משהו טוב יותר לעשותו, נעביר אגף (זה הרי מה שלמדנו כל היום לעשות בבית הספר – להעביר אגפים) ונקבל \(b^2=c^2-a^2\). שוב, ההשכלה הבית ספרית אולי מזכירה כאן נשכחות למישהו – ביטוי מהצורה שבאגף ימין אפשר לפרק למכפלה, אז זה מה שנעשה: \(b^2=(c-a)(c+a)\). אולי באופן די מפתיע, זה מביא אותנו מאוד קרוב לנוסחה המבוקשת. הנוסחה הזו שקיבלנו היא יותר פשוטה ממה שהתחלנו איתו שכן כעת יש לנו באגף אחד ריבוע (שזה דבר פשוט למדי) ובאגף השני מכפלה, שממנה קל להוציא שורש (כי שורש של מכפלה הוא מכפלת השורשים – תכונה שלא מתקיימת עבור סכום).
הצעד הבא בפישוט המשוואה הוא כנראה להוציא שורש מ-\(b\), ולכן גם להוציא שורש ל-\(c-a\) ול-\(c+a\) (בנפרד לכל אחד משניהם). האם זה לא ייתן לנו מכפלה של שתי תפלצות לא רציונליות באגף ימין? מי שקרא את הפוסט הקודם כנראה זוכר שכדי לא לקבל שם משהו אי רציונלי, צריך שיהיו שם ריבועים. אם כן, האם יש משהו שמבטיח לנו ש-\(c-a\) וש-\(c+a\) הם שניהם ריבועים?

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

הבעיה המהותית היא ש-\(c-a,c+a\) אינם זרים. הם סכום והפרש של מספרים אי זוגיים (למה \(c\) הוא אי זוגי?) ולכן 2 הוא מחלק משותף של שניהם. למרבה המזל, לא הכל אבוד: הרי אמרנו ש-\(b\) הוא זוגי, ולכן ניתן לכתוב אותו בתור \(b=2d\), ולכן המשוואה שלנו הופכת להיות \(4d^2=(c-a)(c+a)\). כעת אפשר לחלק כל אחד משני המספרים הזוגיים הללו ב-2 ולקבל: \(d^2=\frac{c-a}{2}\cdot\frac{c+a}{2}\).

שני המספרים שבאגף ימין הם מעניינים. הסכום שלהם הוא \(c\) וההפרש שלהם (כשמחסרים את הקטן מהגדול) הוא \(a\) – בדקו והיווכחו. בפרט, זה אומר שאם היה מספר שמחלק את שניהם גם יחד, הוא היה מחלק גם את סכומם והפרשם, כלומר היה מחלק את \(a,c\) גם יחד – בסתירה לכך שהם זרים. מכאן שהמשאלה שלנו התגשמה – שני המספרים שבאגף ימין זרים זה לזה, ומכפלתם היא ריבוע, ולכן כל אחד מהם הוא ריבוע בפני עצמו, ולכן אפשר להוציא להם שורש ולקבל:

\(d=\sqrt{\frac{c-a}{2}}\cdot\sqrt{\frac{c+a}{2}}\)

וזה בעצם הסוף. נסמן \(s=\sqrt{\frac{c+a}{2}}, t=\sqrt{\frac{c-a}{2}} \) וקיבלנו ש-\(d=s\cdot t\), כלומר \(b=2st\), וכמו כן \(a=s^2-t^2\) ו-\(c=s^2+t^2\). את זה ש-\(s,t\) זרים זה לזה כבר ראינו (אחרת הריבועים שלהם לא היו זרים), והם לא בעלי אותה זוגיות, אחרת \(a\) היה זוגי. אם כן, הגענו לנוסחה המבוקשת.

נשארה לי רק השאלה למחשבה שהשארתי קודם – טענתי שלא ייתכן שגם \(a\) אי זוגי וגם \(b\) אי זוגי. למה? טיעון אפשרי אחד הוא זה: עבור מספר אי זוגי, השארית שהריבוע שלו משאיר כאשר מחלקים אותו ב-4 היא תמיד 1 (למה?), ולכן השארית שישאיר \(a^2+b^2\) (אם שניהם אי זוגיים) היא 2. אבל לא קשה לבדוק שכל מספר, אם מעלים אותו בריבוע, לא נותן שארית 2 כשמחלקים אותו ב-4 (אומרים על זה ש"2 איננו שארית ריבועית מודולו 4"), ולכן לא ייתכן ש-\(a^2+b^2=c^2\). התעלול הזה, של לבחון משוואה בשלמים מודולו מספר כלשהו, הוא תעלול נפוץ ושימושי מאוד.

לסיום, אני רוצה לתאר דרך מקסימה נוספת לייצור שלשות פיתגוריות שנתקלתי בה בפורום המתמטיקה של תפוז ויוחסה לבתו בת ה-8 של אחד הכותבים (אני מניח שהדרך התגלתה כבר בעבר, אך זה עדיין מרשים למדי שהילדה גילתה אותה). הרעיון הוא זה: הביטו בלוח הכפל וחפשו בו מספר שמופיע פעמיים. כעת הביטו ב"מלבן" ששני המופעים של המספר הם קודקודים מנוגדים שלו. בנו שלשה פיתגורית באופן הבא: \(a\) יהיה ההפרש של שני הקודקודים האחרים של המלבן, \(b\) יהיה סכום שני הקודקודים המקוריים, ו-\(c\) יהיה סכום שני הקודקודים האחרים. הנה דוגמה. הביטו בלוח הכפל הבא:

  1 2 3 4 5 6 7 8 9 10
1 1 2 3 4 5 6 7 8 9 10
2 2 4 6 8 10 12 14 16 18 20
3 3 6 9 12 15 18 21 24 27 30
4 4 8 12 16 20 24 28 32 36 40
5 5 10 15 20 25 30 35 40 45 50
6 6 12 18 24 30 36 42 48 54 60
7 7 14 21 28 35 42 49 56 63 70
8 8 16 24 32 40 48 56 64 72 80
9 9 18 27 36 45 54 63 72 81 90
10 10 20 30 40 50 60 70 80 90 10

המספר 2 מופיע פעמיים, במלבן שקודקודיו האחרים הם 1 ו-4: זה נותן לנו את השלשה 3,4,5 (ה-3 הוא 4-1; ה-4 הוא 2+2; וה-5 הוא 1+4). באופן דומה, חפשו מופע של 18 שמתקבל מכפל של 3 ב-6, ומופע אחר של 18 שמתקבל מכפל של 9 ב-2; שתי הפינות האחרות של המלבן הן 12 ו-27, וקיבלנו את השלשה 15,36,39, ששקולה לשלשה הפרימיטיבית 5,12,13. נראה כמו קסם, אך ניתן להוכיח (זה לא טריוויאלי אך גם לא קשה במיוחד) שזה עובד תמיד, ונותן את כל השלשות הפיתגוריות; למעשה, יש קשר הדוק בין השיטה הזו ובין הנוסחה שהצגתי לעיל.

ושאלת הכללה לסיום: ראינו איך מוצאים את הפתרונות של \(a^2+b^2=c^2\). מה עם הפתרונות של \(a^n+b^n=c^n\) עבור \(n>2\)? בידי סיפור נפלא על הבעיה הזו, אך שולי הפוסט הזה צרים מלהכיל אותו.