משפט זקנדורף

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

בסיסי ספירה הם משהו שאנחנו מכירים עוד בבית הספר היסודי: אנחנו יודעים שהמספר שנכתב בתור 142 הוא המאה מאה ארבעים ושתיים, מכיוון שאנו מפרשים אותו באופן הבא: 2 כפול אחד (ספרת האחדות) ועוד 4 כפול עשר (ספרת העשרות) ועוד 1 כפול מאה (ספרת המאות) וכך אנו עושים באופן כללי לכל מספר: אנחנו מחברים את הספרות כשכל ספרה מוכפלת בחזקה כלשהי של 10 (אחד הוא \(10^{0}\), עשר הוא \(10^{1}\), מאה הוא \(10^{2}\) וכן הלאה). המספר 10 כאן הוא שרירותי לגמרי; אפשר גם לעבוד עם חזקות של 2 (בסיס בינארי) או של 8 (בסיס אוקטלי) או של 16 (בסיס הקסדצימלי – כאן אנו נזקקים ל-16 ספרות שונות ולכן משתמשים באותיות גדולות מהא"ב הלטיני) וגם כל מספר אחר (נאמר 3, או 7) הוא לגיטימי. המאיה השתמשו בבסיס 20 והבבלים השתמשו בבסיס 60.

אני רוצה הפעם להשתמש בבסיס שונה לגמרי. כזה שבו המקדמים לא מוכפלים רק בחזקות של מספר אחד מסויים, אלא בסדרה "מעניינת" של מספרים. הסדרה הזו תהיה סדרת מספרי פיבונאצ'י. הצגתי אותה כבר בעבר, אבל הנה היא בקצרה שוב: נגדיר \(F_{0}=0\) ו-\(F_{1}=\), וכעת לכל \(n>1\) נגדיר \(F_{n}=F_{n-1}+F_{n-2}\). נקבל את הסדרה הבאה: \(0,1,1,2,3,5,8,13,21,\dots\). שני המספרים הראשונים לא הכי רלוונטיים עבורנו (כי מ-0 אי אפשר לקבל מספרים אחרים על ידי כפל, וה-1 בתחילת הסדרה מופיע פעמיים) אז בפוסט הזה אתייחס לסדרה \(1,2,3,5,8,13,21,\dots\).

סדרת פיבונאצ'י היא מהסדרות המפורסמות במתמטיקה, אם לא המפורסמת שבהן, ומהרבה סיבות מתמטיות אובייקטיביות. אז אם לקחת משהו "מעניין" בתור בסיס ספירה, למה לא לקחת אותם? כמובן, צריך להגביל באופן מסויים את הצורה שבה בונים מהם מספרים; בפרט, צריך להגביל את גודל המקדם שבו כופלים כל אחד מהמספרים. בבסיס עשרוני הגודל המקסימלי של מקדם הוא 9; בבסיס בינארי הוא 1. במה כדאי לבחור? ובכן, אחד מהדברים שאנו מעוניינים בהם כאשר אנו מייצגים מספרים בבסיס מסוים הוא שהייצוג יהיה יחיד. אם אותו מספר ניתן לייצוג בכמה דרכים שונות זה עשוי לגרום לבעיות בהוכחות מסויימות שמניחות במובלע יחידות של הייצוג. כעת, אם נרשה אפילו ל-2 להיות מקדם, כבר קל לראות שייצוג יחיד הולך לאיבוד בלא מעט מקרים: למשל, \(16=2\cdot8=1\cdot3+1\cdot13\), ולכן אם נכתוב את 16 בבסיס פיבונאצ'י נקבל את שתי דרכי הכתיבה \(100100\) ו-\(20000\) (אם לא ברור לכם למה שתי דרכי הכתיבה הללו מייצגות את 16 בבסיס פיבונאצ'י זו הזדמנות טובה לעצור לרגע ולוודא שאתם מבינים את הרעיון בבסיסי ספירה).

אז בואו נגביל את עצמנו רק למקדמים שהם 0 ו-1. במילים אחרות, כל מה שמותר לנו לעשות כדי לקבל מספר מסויים הוא לקחת קבוצה מסויימת של מספרי פיבונאצ'י ולחבר אותם ולקוות שנקבל את המספר שאותו אנו מקווים לקבל. אלא שעדיין אין לנו ייצוג יחיד! למעשה, אם תחשבו שניה תראו שקיימים המון מספרים שאין להם ייצוג יחיד. מי הם? מספרי פיבונאצ'י, כמובן… למשל, \(21\) הוא גם \(1000000\) וגם \(110000\), ותופעה דומה תהיה עבור כל מספר פיבונאצ'י אחר שגדול או שווה ל-3. אז מה עושים? מנסים למצוא עוד הגבלה. אבל איך אפשר להגביל סיטואציות שהן כל כך פשוטות כמו \(1000000\) ו-\(110000\)? ובכן, אולי… אם נאסור על שני 1 להופיע ברצף?

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

פורמלית, אני רוצה להראות שלכל מספר טבעי \(n\) קיימת ויחידה סדרה \(a_{2},a_{3},\dots,a_{k}\in\left\{ 0,1\right\} \) כך ש-\(n=\sum_{i=2}^{k}a_{i}F_{i}\) (זכרו שהשלכתי מסדרת פיבונאצ'י את שני האיברים הראשונים) ו-\(a_{i}a_{i+1}=0\) לכל \(2\le i<k\) (זו דרך נאה לנסח את הקריטריון של "אין שני מופעים רצופים של 1") ו-\(a_k=1\) (כי אחרת בוודאי שלא יהיה לנו ייצוג יחיד – אפשר להוסיף עוד ועוד אפסים לסוף הסדרה). אם כן, זה המשפט, ועצם זה שהוא נכון הוא מגניב למדי, אבל מטרת הפוסט הזה היא גם להראות לכך הוכחה כלשהי.

נתחיל עם הוכחת הקיום, כלומר שכל מספר טבעי ניתן לייצג בצורה הזו. ההוכחה תהיה, מה לעשות, באינדוקציה על המספר. עבור \(n=1,2,3\) המשפט מובן מאליו כי שלושת אלו הם מספרי פיבונאצ'י. נניח אם כן שלכל מספר קטן מ-\(n\) אנו יודעים למצוא ייצוג זקנדורף ונמצא כזה עבור \(n\) עצמו. מה שמתבקש לעשות הוא להגיד משהו כזה: "יהא \(F_{k}\) מספר פיבונאצ'י הגדול ביותר שעודנו קטן או שווה ל-\(n\). אם \(F_{k}=n\) סיימנו; אחרת , בואו נסתכל על המספר \(t=n-F_{k}\). הוא קטן מ-\(n\) אז יש לו ייצוג זקנדורף, ופשוט נוסיף את \(F_{k}\) בסוף שלו". זה כמובן היה מסיים את ההוכחה אלמלא החלק המעצבן הזה של לאסור על שני מספרי פיבונאצ'י רצופים בסוף הייצוג, והחלק המעצבן הזה של לאסור על מקדם גדול מ-1. הבעיה הראשונה תתרחש אם \(F_{k-1}\) מופיע בייצוג זקנדורף של \(t\), והבעיה השניה תתרחש אם \(F_{k}\) עצמו מופיע בייצוג זקנדורף של \(t\).

שתי הבעיות הללו הן לא בעיות אמיתיות כי אפשר להראות שאם משהו מהן מתרחש, אז \(F_{k}\) הוא לא באמת מספר פיבונאצ'י הגדול ביותר שעדיין קטן מ-\(n\). כדי לראות זאת, בואו נניח ש-\(F_{k-1}\) או \(F_{k}\) מופיעים בייצוג של \(t\), כלומר בכל מקרה \(t\ge F_{k-1}\). מכאן ש-\(n=t+F_{k}\ge F_{k}+F_{k-1}=F_{k+1}\), דהיינו \(n\) גדול לפחות כמו \(F_{k+1}\), מה שמסיים את העניין. זה גם מצביע לנו על האלגוריתם שבו אפשר למצוא את ייצוג זקונדורף של מספר: מתחילים ממספר פיבונאצ'י הגדול ביותר שקטן ממנו, מחסרים ואז ממשיכים ברקורסיה. למשל, כדי לייצג את 27 נחסר ממנו את 21, נקבל 6, נחסר ממנו את 5, נקבל 1 והנה קיבלנו את הייצוג \(1001001\) – כפי שאפשר לראות, אין שני מופעים רצופים של 1.

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

בואו נשתמש בסימונים הבאים: נכתוב \(n=a_{1}+a_{2}+\dots+a_{k}\) ו-\(n=b_{1}+b_{2}+\dots+b_{r}\) כך שכל ה-\(a\)-ים וה-\(b\)-ים הם מספרי פיבונאצ'י ומסודרים מהקטן לגדול. מטרתנו היא להראות ש-\(r=k\) וש-\(a_{i}=b_{i}\) לכל \(1\le i\le k\).

ראשית, אם \(a_{k}=b_{r}\) אז סיימנו, כי אפשר פשוט לחסר את המספר המשותף הגדול הזה מ-\(n\) ולהשתמש בהנחת האינדוקציה: נסתכל על המספר \(n-a_{k}=a_{1}+\dots+a_{k-1}=b_{1}+\dots+b_{r-1}\) ומהנחת האינדוקציה נקבל ש-\(k-1=r-1\) וש-\(a_{i}=b_{i}\) לכל \(1\le i\le k-1\).

אחרת, אנחנו חייבים להגיע לסתירה כלשהי כדי למנוע את האפשרות ששני הייצוגים הם באמת שונים. בואו נניח ש-\(a_{k}\) הוא הגדול מבין שני המספרים \(a_{k},b_{r}\). מה שאני רוצה לטעון הוא ש-\(a_{k}\) הוא גדול כל כך עד שכל הסכום \(b_{1}+b_{2}+\dots+b_{r}\) לא מסוגל לעבור אותו! כאן אני אהיה חייב מן הסתם להשתמש בכך שבסכום הזה אין שני מספרי פיבונאצ'י סמוכים, אחרת \(b_{r-1},b_{r}\) היו יכולים להיות בדיוק שני המספרים הקודמים ל-\(a_{k}\) בסדרת פיבונאצ'י.

אם כן, הבה ואנסח במפורש את הטענה שמסיימת את ההוכחה: אם \(A\) היא קבוצה של מספרי פיבונאצ'י כך שאין בה שניים סמוכים, ו-\(F_{k}\) הוא מספר פיבונאצ'י הגדול ביותר ב-\(A\), אז \(\sum_{F_{i}\in A}F_{i}<F_{k+1}\).

את הטענה הזו נוכיח… ניחשתם, באינדוקציה. במקרה הזה, על \(k\). כרגיל, עבור \(k=2\) (זה הבסיס כי \(F_{0},F_{1}\) לא במשחק) נקבל את התוצאה באופן טריוויאלי (כי \(A\) חייבת להיות ריקה ולכן סכום איבריה הוא 0). נניח שהטענה נכונה לכל מספר עד \(F_{k}\) ונוכיח עבורו. נתבונן בקבוצה \(A\) כלשהי של מספרי פיבונאצ'י שקטנים מ-\(F_{k}\) כך שאין שניים סמוכים, ולכן בפרט לא ייתכן ש-\(F_{k-1}\) ו-\(F_{k-2}\) נמצאים בקבוצה גם יחד. נניח ש-\(F_{k-1}\) בפנים, אז כל יתר האיברים של \(A\) הם קטנים מ-\(F_{k-2}\), ולכן על פי הנחת האינדוקציה על \(F_{k-2}\) נקבל שסכום כל יתר איברי \(A\) קטן מ-\(F_{k-2}\), ולכן סכום כל אברי \(A\) קטן מ-\(F_{k-2}+F_{k-1}=F_{k}\). אותם שיקולים מסיימים את ההוכחה גם במקרה שבו דווקא \(F_{k-2}\) בפנים.

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

אקסיומת הבחירה, עקרון הסדר הטוב, הלמה של צורן – מי יודע?

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

הרקע שלנו הוא תורת הקבוצות; לא צריך לדעת הרבה יותר מאשר מהי קבוצה, מהי פונקציה ומהו סדר על אברים, אבל אני אניח שהקורא יודע ולא מפחד ממתמטיקה. נתחיל עם אקסיומת הבחירה שדורשת הכי מעט ידע מוקדם – היא אומרת, בפשטות, שאם יש לנו אוסף של קבוצות לא ריקות, אפשר לבחור איבר מכל אחת מהקבוצות הללו. פורמלית, אם \(\mathcal{F}\) היא משפחה של קבוצות לא ריקות, אז קיימת פונקציה \(f:\mathcal{F}\to\bigcup\mathcal{F}\) כך ש-\(f\left(A\right)\in A\) לכל \(A\in\mathcal{F}\). במילים אחרות, הפונקציה מקבלת קבוצה מתוך \(\mathcal{F}\) ומחזירה איבר כלשהו מתוך אותה קבוצה. לא נשמע ביג דיל במיוחד, נכון? ובכן, לכן "אקסיומת הבחירה בבירור נכונה".

הבעיה היא שלא תמיד ברור איך לבנות פונקציה כזו. נניח לרגע ש-\(\mathcal{F}=2^{\mathbb{N}}\), שזה סימון נחמד לתיאור אוסף כל תת-הקבוצות של הטבעיים (אופס! הוא כולל גם את הקבוצה הריקה. אז בואו נעיף אותה מ-\(\mathcal{F}\)). האם אנחנו יודעים לבנות פונקציה כזו? ובכן, כן: \(f\left(A\right)=\min A\), האיבר המינימלי ב-\(A\). יש כזה, כי בכל קבוצה של טבעיים יש איבר מינימלי.

אוקיי, ומה אם \(\mathcal{F}=2^{\mathbb{Z}}\)? כבר לא נכון לומר שבכל קבוצה של שלמים יש איבר מינימלי, אבל זה קושי שקל מאוד לעקוף – נבחר איבר שהוא מינימלי בערך המוחלט שלו, ואם יש שני מספרים ששווים בערך המוחלט שלהם, אז נבחר את השלילי מביניהם. או את החיובי. מה שתרצו.

אוקיי, ומה אם \(\mathcal{F}=2^{\mathbb{Q}}\)? כאן זה קצת יותר טריקי, אבל אפשר עדיין להתחכם: מספר רציונלי הוא מהצורה \(\frac{a}{b}\) כאשר \(b\ge1\), אז בהינתן \(A\) נסתכל על כל המספרים ב-\(A\) שעבורם \(b\) מינימלי, ואז מביניהם נסתכל על זה שעבורו \(a\) מינימלי בערכו המוחלט.

אוקיי, ומה אם \(\mathcal{F}=2^{\mathbb{R}}\)? אה…

אה…

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

מה שצריך להבין כשמדובר על אקסיומת הבחירה הוא שכשאנחנו באים לעשות מתמטיקה בצורה פורמלית, לא כל מה שאנחנו אומרים בהכרח מתקיים. צריך להוכיח, ולהוכיח בזהירות. וכשמוכיחים, צריך להוכיח מתוך משהו. ובתורת הקבוצות המשהו הזה הוא מאוד קונקרטי – לרוב מדובר על מערכת האקסיומות של צרמלו-פרנקל, ZF, שלא אציג במפורש עכשיו אבל מגדירה מאוד בזהירות באילו דרכים אפשר לבנות קבוצות. וכלל לא ברור שאם מצייתים ל"חוקים" של ZF אז אפשר יהיה לבנות פונקצית בחירה עבור כל אוסף \(\mathcal{F}\); למעשה, בואו נשים את הקלפים על השולחן – אי אפשר. יש הוכחה לכך שאקסיומות הבחירה היא בלתי תלויה באקסיומות של ZF, כלומר אפשר להוסיף אותה ל-ZF ולקבל מערכת אקסיומות עקבית (ולכן כזו שמתארת "עולם" מתמטי לגיטימי כלשהו) שנקראת ZFC, אבל אפשר גם להוסיף את שלילתה ל-ZF ועדיין לקבל מערכת אקסיומות עקבית. בדרך כלל מוסיפים את אקסיומת הבחירה; בטקסטים מתמטיים שלא מתעסקים ישירות בתורת הקבוצות פה ושם אפשר לראות את משפט המחץ "כאן השתמשנו באקסיומת הבחירה". אפשר לקיים דיון פילוסופי ארוך ומייגע בשאלה אם "נכון" להוסיף את אקסיומת הבחירה למתמטיקה או לא; אני לא מעוניין בו כרגע אלא בתוצאה המתמטית המגניבה שאקסיומת הבחירה שקולה ללמה של צורן ולעקרון הסדר הטוב.

בשביל שני אלו צריך לדבר על סדר. סדר חלקי על קבוצה \(A\) הוא יחס (אוסף של זוגות של איברים מ-\(A\)) שאני בדרך כלל מסמן בתור \(a<b\) וקורא בתור "\(a\) קטן מ-\(b\)". מה שחשוב הוא שאף איבר לא קטן יותר מעצמו (לא מתקיים \(a<a\) לאף \(a\in A\)), ושהוא טרנזיטיבי, כלומר אם \(a<b\) וגם \(b<c\) אז \(a<c\) (שימו לב שנובע משני אלו מייד שהיחס לא סימטרי, כלומר לא ייתכן שגם \(a<b\) וגם \(b<a\)). יחס הסדר הרגיל על מספרים הוא כמובן סדר שכזה, אבל גם היחס "\(a\) מחלק את \(b\)" (שמסומן בד"כ בתור \(a|b\)) הוא יחס סדר, וכזה שבו יש איברים שבכלל אי אפשר להשוות (לכו תשוו את 3 ו-5). גם היחס "\(A\subseteq B\)" על קבוצות הוא יחס סדר (וחלקי, כי לכו תשוו את \(\left\{ 1\right\} ,\left\{ 2\right\} \)).

נניח שיש לנו קבוצה גדולה \(X\) שעליה מוגדר יחס סדר, ויש לנו תת-קבוצה שלה, \(A\subseteq X\). מן הסתם יחס הסדר על \(X\) תקף גם עבור \(A\) (למה? תוכיחו, זה קל). אם יש ב-\(X\) איבר שגדול לפחות כמו כל אברי \(A\) (כלומר, \(a\le x\) לכל \(a\in A\) עבור \(x\in X\) מסויים – כאשר \(a\le x\) פירושו \(a<x\) או \(a=x\)) אז קוראים לאיבר שכזה "חסם מלעיל" של \(A\). למשל, אם נסתכל על \(\left(0,1\right)\) – כל המספרים הממשיים בין 0 ל-1 – אז 1 הוא חסם מלעיל שכזה. וגם 2. וגם \(\pi\).

עוד שתי הגדרות קטנות. ראשית, אם \(a\in X\) הוא איבר כזה כך שלא קיים \(b\in X\) עבורו \(a<b\) אומרים ש-\(a\) מקסימלי (שימו לב שזה לא אומר ש-\(b\le a\) עבור כל \(b\in X\); ייתכן שיש גם איברים שאינם ניתנים להשוואה עם \(a\)). שנית, אם \(A\) היא תת-קבוצה של \(X\) שבה כל שני איברים ניתנים להשוואה (אומרים במקרה כזה שהסדר על \(A\) הוא מלא או לינארי) אז קוראים ל-\(A\) "שרשרת" (כי אפשר לחשוב על האיברים של \(A\) בתור חוליות בשרשרת… עזבו, לא חשוב). עכשיו סוף סוף אפשר לנסח פורמלית את הלמה של צורן: אם \(X\) היא קבוצה שמוגדר עליה יחס סדר בעל התכונה שלכל שרשרת יש חסם מלעיל, אז יש ב-\(X\) איבר מקסימלי.

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

נעבור לעקרון הסדר הטוב (לפעמים קוראים לו "משפט הסדר הטוב" ומשתמשים ב"עקרון הסדר הטוב" כדי להתכוון למשהו אחר לגמרי, כי זה מה שמתמטיקאים אוהבים לעשות – לבלבל). מה זה יחס סדר כבר הסברתי. אפילו יחס סדר מלא כבר הזכרתי. סדר טוב הוא הבן המוצלח של סדר מלא: הוא סדר מלא על \(X\) כך שבכל תת-קבוצה \(A\subseteq X\) יש איבר מינימלי ביחס לסדר הזה, כשמינימלי, כצפוי, הוא איבר \(a\in A\) כך שלכל \(b\in A\) מתקיים \(a\le b\) (ליתר דיוק, כך שלא קיים \(b\in A\) עבורו \(b<a\), אבל מכיוון שהסדר מלא זה שקול). האב-טיפוס של קבוצה עם סדר טוב הוא המספרים הטבעיים; ובמובן מסויים, כל קבוצה שסדורה בסדר טוב ניתנת לתיאור על ידי סודר כלשהו (פורמלית – איזומורפית לסודר כלשהו, כשאיזומורפיזם פה צריך לשמר את יחס הסדר). זה מעלה את השאלה המעניינת האם כל קבוצה אפשר לסדר בסדר טוב שכזה (בבירור יחסי הסדר ה"רגילים" על \(\mathbb{Z},\mathbb{Q},\mathbb{R}\) אינם כאלו, ועל \(\mathbb{C}\) בכלל אין יחס סדר "טבעי", ואלו עוד קבוצות פשוטות יחסית). עקרון הסדר הטוב אומר שכן, על כל קבוצה אפשר להגדיר סדר טוב. וזה מוזר. זה ממש מוזר. אין לי מילים לומר כמה זה מוזר. בעוד שעל \(\mathbb{Z}\) ו-\(\mathbb{Q}\) אני עוד יכול לנחש איך להגדיר סדר טוב (ועשיתי את זה קודם כבר בפוסט הזה, אם תשימו לב – וכמובן שלא במקרה), על \(\mathbb{R}\) כבר אין לי מושג איך סדר טוב ייראה. אז איך בכל זאת אפשר להגדיר אותו? ניחשתם נכון – עם אקסיומת הבחירה.

יפה, אז הצגנו את שלושת המשפטים הללו. כעת בואו נוכיח שכולם שקולים, כלומר מספיק להניח אחד מהם כדי להוכיח את שני האחרים. מה שנעשה יהיה להוכיח שאקסיומת הבחירה שקולה הן לעקרון הסדר הטוב והן ללמה של צורן; מכך כבר נובע היתר. ההוכחה לא תהיה פורמלית עד הסוף כי אני הולך להתבסס על משהו שאף פעם לא הגדרתי במפורש – רקורסיה על-סופית, שהיא פשוט דרך להגדיר סדרות של איברים על ידי כך שאני מגדיר איך כל איבר בסדרה מתקבל כפונקציה של כל קודמיו, אבל כאן "סדרה" מאונדקסת על ידי סודר כללי ולאו דווקא על ידי קבוצת המספרים הטבעיים וזהו (דוגמה לסדרה קצת יותר כללית: \(a_{0},a_{1},a_{2},a_{3},\dots,a_{\omega},a_{\omega+1},\dots,a_{\omega\cdot2},a_{\omega\cdot2+1}\) – זו סדרה שה"אורך" שלה הוא הסודר \(\omega\cdot2+2\)). להוכחה פורמלית ממש כדאי ללכת לספרים (הספר של Jech, למשל).

נתחיל עם אקסיומת הבחירה ועקרון הסדר הטוב. אם עקרון הסדר הטוב נכון, אז אקסיומת הבחירה נובעת בקלות: בהינתן \(\mathcal{F}\), נסדר את \(\bigcup\mathcal{F}\) בסדר טוב ונגדיר \(f\left(A\right)=\min A\), בדיוק כמו שעשיתי בתחילת הפוסט. הכיוון השני הוא המעניין פה.

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

קצת יותר פורמלית, בכל זאת: נגדיר \(\mathcal{F}=2^{A}\) (כרגיל, בלי הקבוצה הריקה). אז מאקסיומת הבחירה, יש פונקצית בחירה \(f:\mathcal{F}\to A\). כעת, לכל סודר \(\alpha\) נגדיר \(a_{\alpha}=f\left(A\backslash\left\{ a_{\beta}|\beta<\alpha\right\} \right)\). זו כנראה ההגדרה המסובכת ביותר בפוסט, והיא פשוט אומרת "תפעיל את \(f\) על תת-הקבוצה של \(A\) שמתקבלת על ידי הסרה מ-\(A\) של כל האיברים בסדרה שאנחנו בונים שהאינדקס שלהם קטן מ-\(\alpha\)".

הבניה הזו חייבת להיתקע מתישהו – כלומר, מתישהו נגיע לסודר \(\alpha\) כך ש-\(A=\left\{ a_{\beta}|\beta<\alpha\right\} \) ולכן אין יותר איברים לבחור – אבל זה טוב לנו, כי זה אומר שבניית הסדרה שלנו תסתיים מתישהו בהצלחה (למה הבניה חייבת להיתקע? כי אחרת היינו מקבלים שב-\(A\) יש איבר ייחודי לכל סודר – אבל "קבוצת כל הסודרים" גדולה מדי מכדי להיות קבוצה, וזה יסתור את זה ש-\(A\) היא קבוצה). זה משלים את ההוכחה, מודולו הפרטים הטכניים שטאטאתי באלגנטיות רבה מתחת לשטיח.

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

קצת יותר פורמלית, שוב פעם אנחנו מניחים קיום של פונקצית בחירה \(f:2^{X}\to X\) ובונים סדרה כך: \(a_{\alpha}=f\left(\left\{ x\in X\ |\ x>\left\{ a_{\beta}|\beta<\alpha\right\} \right\} \right)\). הסימון של "\(x\) גדול מקבוצה" הוא המצאה פרועה שלי ובסך הכל אומר ש-\(x\) הוא חסם מלעיל של הקבוצה ואינו שייך אליה. גם פה הבניה חייבת "להיתקע" מתישהו ולכן האיבר הגדול ביותר בסדרה יהיה איבר מקסימלי ב-\(X\) באופן כללי (כי אם הוא אינו מקסימלי, אז קיים איבר שגדול ממנו ולכן הוא חסם מלעיל של כל הסדרה).

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

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

במבט ראשון, לא ברור איך לגשת לסיפור הזה. יש לנו \(\mathcal{F}\) וצריך לבנות פונקצית בחירה עבורה, אבל איך נשתמש בלמה של צורן? צריך בשביל זה יחס סדר. איזה יחס סדר? האם כדאי להגדיר יחס סדר על \(\mathcal{F}\)? על הקבוצות ב-\(\mathcal{F}\)? מה עושים? ובכן, בלי פאניקה. החוכמה כאן היא לבחור את הקבוצה ה"נכונה" להשתמש בלמה של צורן עליה. בואו נגדיר קבוצה חדשה \(\mathcal{B}\) של כל הפונקציות שהן פונקציות בחירה חלקיות על \(\mathcal{F}\). כלומר, פונקציות שמקיימות \(f\left(A\right)\in A\) לכל \(A\in\mathcal{F}\) שעליו הן מוגדרות, אבל לא חייבות להיות מוגדרות על כל הקבוצות ב-\(\mathcal{F}\). על הקבוצה הזו מושרה יחס סדר טבעי למדי: \(f<g\) אם ורק אם \(g\) מוגדרת על כל מי ש-\(f\) מוגדר עליו ומחזירה אותו ערך (אבל אולי מוגדרת על ערכים רבים יותר). במתמטית אומרים ש-\(f\) הוא צמצום של \(g\); ועוד יותר פורמלית אפשר פשוט לכתוב \(f\subseteq g\) (כי פונקציות, בשורה התחתונה, הן קבוצות של זוגות שמקיימים תנאים מסויימים).

אם נראה שיש איבר מקסימלי ב-\(\mathcal{B}\), סיימנו; זו תהיה פונקצית הבחירה המבוקשת. זאת מכיוון שאם האיבר המקסימלי, שאסמן ב-\(f\), הוא לא פונקצית בחירה, אז יש \(B\in\mathcal{B}\) שעליו \(f\) לא מוגדרת, ומכיוון ש-\(B\) לא ריקה יש איזה \(b\in B\), אז אפשר להגדיר \(f^{\prime}\) שתהיה זהה ל-\(f\) על כל הקלטים שעליהם \(f\) מוגדרת, ובנוסף \(f^{\prime}\left(B\right)=b\) והופה – סתירה למקסימליות \(f\) (ייתכן שאתם רוצים עכשיו לשאול "אבל רגע, איך בחרת את \(b\) ב-\(B\) בלי אקסיומת הבחירה?". התשובה היא שאין בעיה מבחינה מתמטית לבחור איבר מקבוצה יחידה; הבעיה מתעוררת כאשר צריך לבחור "בבת אחת" מאינסוף קבוצות).

כדי להראות שיש איבר מקסימלי ב-\(\mathcal{B}\) צריך להראות שלכל שרשרת יש חסם מלעיל, וזה כבר באמת נעשה באופן ה"סטנדרטי": נניח שיש לנו שרשרת \(\mathcal{C}\) כלשהי של פונקציות בחירה חלקיות; נגדיר פונקציה חדשה בתור \(\bigcup\mathcal{C}\) (ובמילים – פונקציה שלכל \(A\in\mathcal{F}\) שמישהו ב-\(\mathcal{C}\) מוגדר עליה, מחזירה את הערך שאותו מישהו נותן ל-\(A\) – צריך טיפונת לעבוד כדי להראות שההגדרה המילולית הזו לא יוצרת בעיות של דו משמעות). הפונקציה הזו היא בבירור חסם מלעיל של השרשרת, מה שמסיים את ההוכחה.

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

משפט קנטור-שרדר-ברנשטיין

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

ראשית, רקע קצר (אם כי הפוסט הזה כן מיועד רק למי שכבר מכירים את הרקע): הכלי המתמטי שבו אנו משתמשים כדי להשוות בין הגדלים של שתי קבוצות – סופיות או אינסופיות, הוא פונקציות חד-חד-ערכיות ועל. \(f:A\to B\) היא חד-חד-ערכית (חח"ע) אם \(f\left(x\right)=f\left(y\right)\) גורר ש-\(x=y\) ("שני איברים שונים של \(A\) לא מועברים לאותו איבר ב-\(B\)") ו-\(f:A\to B\) היא על אם לכל \(b\in B\) קיים \(a\in A\) כך ש-\(f\left(a\right)=b\) ("כל איבר של \(B\) הוא תמונה של איבר כלשהו ב-\(A\)").

מבחינה רעיונית, אם \(f:A\to B\) היא חח"ע, זה אומר ש-\(A\) היא "קטנה או שווה ל-\(B\)" בגודלה, שכן לכל איבר ב-\(A\) הצלחנו להתאים איבר ב-\(B\) ומי יודע, אולי עוד נשאר לנו עודף. אם \(f:A\to B\) היא על, אז \(A\) "גדולה לפחות כמו" \(B\) כי הנה, לכל איבר ב-\(B\) הצלחנו להתאים איבר אחד (לפחות!) מ-\(A\). לכן אם יש לנו פונקציה שהיא בו זמנית חח"ע ועל מ-\(A\) אל \(B\), אנו חושבים על הקבוצות הללו כשוות גודל. טיעון המחץ הפילוסופי כאן, לטעמי, הוא שאם יש \(f\) כזו, אז \(B\) מכילה את אותם איברים בדיוק כמו \(A\), עד כדי שינוי השמות שלהם. אם אנחנו מקבלים את ההנחה ששינוי שמות של איברים בקבוצה לא משנה את גודל הקבוצה, המסקנה ש-\(A\) ו-\(B\) הן שוות גודל נובעת מאליה.

וחוץ מזה, עבור קבוצות סופיות זה עובד.

עוד דבר שאנו מכירים בקבוצות סופיות הוא שאם \(\left|A\right|\le\left|B\right|\) וגם \(\left|B\right|\le\left|A\right|\) (הגודל של \(A\) קטן-שווה מהגודל של \(B\), ואילו הגודל של \(B\) קטן-שווה מהגודל של \(A\)) אז \(\left|A\right|=\left|B\right|\). עבור קבוצות אינסופיות, הטענה מנוסחת כך: אם יש פונקציה חח"ע \(f:A\to B\) ופונקציה חח"ע \(g:B\to A\) אז יש פונקציה חח"ע ועל \(h:A\to B\). זהו משפט קנטור-שרדר-ברנשטיין (קנטור העלה את ההשערה שהדבר נכון אך לא הוכיח את המשפט; ברנשטיין הוכיח אותו, ואין לי מושג מה שרדר עשה – אולי הכניסו אותו כדי שאפשר יהיה לצחוק בתורת הקבוצות על צבי הנינג'ה).

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

אנחנו רוצים לבנות את \(h\) וכלי הנשק שלנו הם \(f\) ו-\(g\). אולי הכי מתבקש להגדיר \(h\left(a\right)=f\left(a\right)\) לכל \(a\in A\) אבל זה חסר טעם לגמרי – \(h\) לא תהיה בהכרח על \(B\), ולא עשינו כלום. נסיון א' כשל.

מצד שני, אפשר לעשות את ההתחכמות הבאה: \(g\left(B\right)=\left\{ g\left(b\right)|b\in B\right\} \) היא תת-קבוצה של \(A\) (כל האיברים ש"נתפסים" על ידי \(B\)). אם \(a\in g\left(B\right)\) זה אומר שיש \(b\in B\) יחיד (כי \(g\) חח"ע) כך ש-\(g\left(b\right)=a\); אפשר להגדיר אם כן פונקציה הפוכה, \(g^{-1}:g\left(B\right)\to B\) כך ש-\(g^{-1}\left(a\right)=b\). הפונקציה הזו, למרבה השמחה, היא על – כל איבר של \(B\) נתפס על ידה (למה?). בנוסף, היא גם חח"ע, כי אם \(g^{-1}\left(a_{1}\right)=g^{-1}\left(a_{2}\right)=b\) זה אומר ש-\(g\left(b\right)=a_{1}\) וגם \(g\left(b\right)=a_{2}\), כלומר \(a_{1}=a_{2}\). הרי לנו פונקציה חח"ע ועל. האם סיימנו? ודאי שלא, כי \(g^{-1}\) לא הוגדרה לכל איבר של \(A\). אנחנו חייבים להגדיר את \(h\) המיועדת שלנו לכל אברי \(A\).

אם כן, בואו נסמן \(C_{0}=A\backslash g\left(B\right)=\left\{ a\in A|a\notin g\left(B\right)\right\} \) (ה-0 בא לרמז שעוד מעט נגדיר עוד קבוצות כאלו) . זו קבוצת כל ה"דחויים" – כל אלו שלא נבחרו על ידי איבר מ-\(B\) באמצעות \(g\). מה אפשר לעשות איתם? ובכן, פשוט להפעיל עליהם את \(f\). במילים אחרות, הבה וננסה את ההגדרה הבאה:

\(h\left(a\right)=\begin{cases}f\left(a\right) & a\in C_{0}\\g^{-1}\left(a\right) & a\notin C_{0}\end{cases}\)

הפונקציה \(h\) היא חוקית לגמרי, והיא בוודאי על \(B\) בגלל שתמונת כל האיברים \(a\notin C_{0}\) לבדם מכסה את \(B\), אבל כאן גם נעוצה הבעיה: היא לא חח"ע. ייתכן שיש התנגשות ו-\(h\) מעבירה לאותו איבר ב-\(B\) גם איבר של \(C_{0}\) וגם איבר שאינו ב-\(C_{0}\). אז מה עושים? פשוט מאוד: איברים שאינם ב-\(C_{0}\) ומתנגשים עם תמונה של איברים מ-\(C_{0}\) – נפעיל עליהם את \(f\). החח"ע של \(f\) תבטיח שהתמונה של אותם איברים לא תתנגש יותר עם כלום.

מכיוון שלהגיד "איברים שאינם ב-\(C_{0}\) ומתנגשים עם תמונה של איברים מ-\(C_{0}\)" זה מסורבל, הבה וניתן שם קומפקטי לקבוצה הזו: \(C_{1}=g\left(f\left(C_{0}\right)\right)\). מה עשינו פה? ראשית, הלכנו ומצאנו את כל האיברים ב-\(B\) שמתקבלים באמצעות הפעלת \(f\) על \(C_{0}\) (זוהי \(f\left(C_{0}\right)\)); כעת חזרנו ל-\(A\) ומצאנו את כל אותם איברים שהם תמונה של הפעלת \(g\) על \(f\left(C_{0}\right)\) (זוהי \(g\left(f\left(C_{0}\right)\right)\)).

עכשיו אפשר לנסות ולהגדיר את \(h\) בצורה טובה יותר:

\(h\left(a\right)=\begin{cases}f\left(a\right) & a\in C_{0}\cup C_{1}\\g^{-1}\left(a\right) & a\notin C_{0}\cup C_{1}\end{cases}\)

אבל גם ההגדרה הזו נכשלת! כי שוב, מי יערוב לנו שאין איזה \(a\) שאיננו ב-\(C_{0}\cup C_{1}\) אבל \(g^{-1}\left(a\right)\) מתנגש עם התמונה של \(f\) על איזה איבר של \(C_{0}\cup C_{1}\)? למעשה, הדבר היחיד שיכול לקרות הוא התנגשות עם הפעלת \(f\) על איבר של \(C_{1}\) כי באלו של \(C_{0}\) כבר טיפלנו (אם \(a\notin C_{1}\) אז מובטח לנו ש-\(g^{-1}\left(a\right)\) לא מתנגש עם תמונה של איבר מ-\(C_{0}\)) אז שוב, אפשר לנקוט באותו תעלול ולהגדיר קבוצה \(C_{2}=g\left(f\left(C_{1}\right)\right)\) ולהגדיר את \(h\) הפעם בהסתמך על \(C_{0}\cup C_{1}\cup C_{2}\), אבל שוב זה יכול להיכשל! ולכן…

כבר הבנתם לאן זה הולך. הגדרנו סדרה אינסופית של קבוצות, \(C_{0},C_{1},C_{2},\dots\) באופן אינדוקטיבי, כך ש-\(C_{n+1}=g\left(f\left(C_{n}\right)\right)\). אם נעצור אחרי מספר סופי של קבוצות, ניכשל, אבל אחרי מספר אינסופי? ובכן, שווה לנסות את זה, לכל הפחות. נגדיר \(C=\bigcup_{n=0}^{\infty}C_{n}\), וכעת נגדיר:

\(h\left(a\right)=\begin{cases}f\left(a\right) & a\in C\\g^{-1}\left(a\right) & a\in A\backslash C\end{cases}\)

ברור כי \(h\) מוגדרת על כל אברי \(A\), כי זה מה שקורה בהגדרה: \(a\notin C\) פירושו בעצם \(a\in A\backslash C\). נותר להראות שהיא חח"ע, ושהיא על. החח"ע הוא המעניין יותר, כי כל הבניה שלנו הוקדשה כדי להבטיח ש-\(h\) תהיה חח"ע. אז למה זה עובד? עצרו שניה ונסו להוכיח זאת לעצמכם. זה קל עד להפתיע.

ובכן, נניח כי קיימים \(a_{1},a_{2}\) כך ש-\(h\left(a_{1}\right)=h\left(a_{2}\right)\). אם \(a_{1},a_{2}\in C\) אז זה אומר ש-\(f\left(a_{1}\right)=f\left(a_{2}\right)\) ולכן \(a_{1}=a_{2}\) מהחח"ע של \(f\). אם \(a_{1},a_{2}\notin C\) זה אומר ש-\(g^{-1}\left(a_{1}\right)=g^{-1}\left(a_{2}\right)\) ומזה נובע מייד ש-\(a_{1}=a_{2}\) מהנימוק שנתתי כבר קודם בפוסט. נותר לטפל במקרה בו \(a_{1}\in C\) ו-\(a_{2}\notin C\) (בלי הגבלת הכלליות אני מניח ש-\(a_{1}\) הוא זה שנמצא ב-\(C\)).

מכיוון ש-\(a_{1}\in C=\bigcup_{n=0}^{\infty}C_{n}\), נובע שקיים \(n\) כלשהו כך ש-\(a_{1}\in C_{n}\). לכן, מההגדרה, \(g\left(f\left(a_{1}\right)\right)\in C_{n+1}\subseteq C\). כעת, אנו מניחים ש-\(f\left(a_{1}\right)=g^{-1}\left(a_{2}\right)\), כלומר שהן \(a_{1}\) והן \(a_{2}\) הועברו על ידי \(h\) לאותו איבר ב-\(B\). הבה ונפעיל את \(g\) על האיבר הזה; נקבל \(g\left(f\left(a_{1}\right)\right)=g\left(g^{-1}\left(a_{2}\right)\right)=a_{2}\), והנה לנו סתירה, כי \(a_{2}=g\left(f\left(a_{1}\right)\right)\in C\), ומצד שני הנחנו ש-\(a_{2}\notin C\). אם כל מה שהבנתם מהשורה האחרונה הוא פורמליזם, לא טוב; עצרו, נסו להוכיח את החח"ע בעצמכם, ואל תוותרו – ברגע שמבינים מה הלך כאן מבינים עד הסוף את ההוכחה.

נסיים את ההוכחה על ידי כך שנראה ש-\(h\) על. יהיה \(b\in B\) כלשהו. האם אתם מנחשים לאן זה הולך? ובכן, נתבונן על \(a=g\left(b\right)\). אם \(a\notin C\), סיימנו; \(h\left(a\right)=b\) כנדרש. אם לעומת זאת \(a\in C\) זה אומר שקיים \(n\) כך ש-\(a\in C_{n}\). אם \(n=0\), זה אומר ש-\(a\in A\backslash g\left(B\right)\), אבל זה בוודאי לא נכון כי ראינו ש-\(a=g\left(b\right)\) ולכן \(a\in g\left(B\right)\). לכן \(n>0\). מכאן ש-\(a\in g\left(f\left(C_{n-1}\right)\right)\), כלומר קיים \(b_{2}\in f\left(C_{n-1}\right)\) כך ש-\(a=g\left(b_{2}\right)\). קיבלנו ש-\(g\left(b\right)=g\left(b_{2}\right)\) ומהחח"ע של \(g\) נקבל ש-\(b=b_{2}\in f\left(C_{n-1}\right)\), כלומר קיים איבר כלשהו ב-\(A\) שעובר ל-\(b\), ובזאת תמה ההוכחה.

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

תורת המספרים האלגברית על קצה המזלג, חלק ג' – שובו של הפירוק היחיד

בפוסט הקודם הצגתי את הפתרון של דדקינד (שהלך בעקבות קומר) לבעיה של אי-פריקות יחידה בחוגי שלמים. הרעיון היה לעבור מדיבור על אברי החוג לדיבור על אידאלים של החוג – כשאידאל הייתה קבוצה של אברי החוג שסגורה לחיבור ו"בולעת" כפל באיבר כלשהו מהחוג. פורמלית, אם \(R\) הוא חוג אז \(I\) הוא אידאל אם לכל \(x,y\in I\) מתקיים \(x+y\in I\) (למעשה, צריך לדרוש באופן כללי שיתקיים דווקא \(x-y\in I\) שכן גם סגירות לחיסור חשובה וממנה נובעת סגירות לחיבור, אבל במקרה שלנו זה נובע מתכונת הבליעה) ולכל \(r\in R\) מתקיים ש-\(xr\in I\).

הגדרנו גם פעולות על האידאלים. כפל הוגדר על ידי \(AB=\left\{ \sum_{i=1}^{n}a_{i}b_{i}|a_{i}\in A,b_{i}\in B,n\in\mathbb{N}\right\} \), חיבור הוגדר על ידי \(A+B=\left\{ a+b|a\in A,b\in B\right\} \) וראינו כי כאשר חושבים על \(A,B\) בתור מעין מספרים הפעולה הזו מתאימה לא לחיבור מספרים אלא ללקיחת המחלק המשותף המקסימלי שלהם. לסיום דיברנו על אידאלים ראשוניים ומקסימליים – הכללות של המושגים של ראשוניות ואי-פריקות של איברי החוג, והזכרתי שבחוגי שלמים מתקיימת התופעה הנחמדה שבה כל אידאל ראשוני הוא גם מקסימלי, וציינתי שזו אחת מבין שלוש תכונות שמבטיחות שבחוג תהיה פריקות יחידה לאידאלים. עכשיו אני רוצה לתאר את שתי התכונות האחרות – החוג צריך להיות נתרי, והוא צריך להיות סגור בשלמים.

אינטואיטיבית, חוג נתרי הוא חוג שבו תהליך חלוקה של מספר חייב להסתיים מתישהו. פורמלית התכונה מנוסחת כך: \(R\) הוא נתרי אם לכל סדרה של אידאלים ב-\(R\) שמקיימת \(I_{1}\subseteq I_{2}\subseteq I_{3}\subseteq\dots\) הסדרה "נעצרת" מתישהו, במובן זה שקיים \(n\) כך ש-\(I_{n}=I_{n+1}=I_{n+2}=\dots\) וכן הלאה.

כדי להבין את התכונה הזו כדאי להיזכר שוב בכך שאם \(A,B\) אידאלים כך ש-\(A\subseteq B\), אנחנו חושבים על כך כאילו ה"מספר" \(B\) מחלק את ה"מספר" \(A\). כדי להקל על הדמיון אנחנו משתמשים בסימונים כמו \(\mathfrak{a}\) ו-\(\mathfrak{b}\) לאידאלים (סימנים שיותר נראים כמו מספרים – מוזרים – מאשר קבוצות) ומשתמשים בסימון כמו \(\mathfrak{b}|\mathfrak{a}\) כדי לציין בדיוק את זה ש-\(\mathfrak{a}\subseteq\mathfrak{b}\). נתריות של חוג אומרת שלא קיימת סדרה \(\mathfrak{a}_{1},\mathfrak{a}_{2},\mathfrak{a}_{3},\dots\) שבה כל איבר מחלק את קודמו (\(\mathfrak{a}_{2}|\mathfrak{a}_{1}\), \(\mathfrak{a}_{3}|\mathfrak{a}_{1}\) וכן הלאה) ואינה עוצרת אף פעם. בואו נסתכל על דוגמה קונקרטית מתוך \(\mathbb{Z}\) – למשל, האידאל \(\left(60\right)\). מי מכיל אותו? למשל, \(\left(30\right)\). ומי מכיל אותו? למשל, \(\left(15\right)\). ואותו? למשל, \(\left(3\right)\). ואותו? הממ, אותו מכיל רק \(\left(1\right)\). ומי מכיל את \(\left(1\right)\)? אהה… מכיוון ש-\(\left(1\right)=\mathbb{Z}\), אז האידאל היחיד שמכיל אותו זה הוא עצמו. קיבלנו את הסדרה \(\left(60\right)\subseteq\left(30\right)\subseteq\left(15\right)\subseteq\left(3\right)\subseteq\left(1\right)\subseteq\left(1\right)\subseteq\left(1\right)\subseteq\dots\).

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

התכונה השלישית היא סגירות בשלמים. אמרנו שאם \(K\) היא הרחבה אלגברית סופית של הרציונליים, אז \(\mathcal{O}_{K}\) היא בדיוק אותם מספרים ב-\(K\) שמאפסים פולינום מתוקן עם מקדמים שלמים. צריך לחשוב על זה כאילו לקחנו את \(\mathbb{Z}\) והרחבנו אותו, באופן דומה לזה שבו הרחבנו את \(\mathbb{Q}\) כדי לקבל את \(K\). כעת אפשר לדבר על פולינום עם מקדמים "שלמים פלוס פלוס" – מקדמים מתוך \(\mathcal{O}_{K}\). האם יש איברים "חדשים" ב-\(K\) שמאפסים פולינומים מתוקנים עם מקדמים מתוך \(\mathcal{O}_{K}\), או שב-\(\mathcal{O}_{K}\) יש כבר את כל המספרים שעושים זאת? התשובה היא שב-\(\mathcal{O}_{K}\) יש את כל האיברים שעושים זאת. הדבר דומה לסגירות האלגברית של \(\mathbb{C}\) – העובדה שכל פולינום עם מקדמים מרוכבים מאופס רק על ידי מספרים מרוכבים, ולא צריך להרחיב עוד את מערכת המספרים המרוכבים רק שכעת אנו מדברים במפורש על פולינומים מתוקנים. הערה קטנה למתקדמים: באופן כללי עבור חוג \(R\), ה-\(K\) הרלוונטי לצורך דיבורים על סגירות בשלמות הוא שדה השברים שלו; כאשר עוסקים בשדות מספרים אפשר להראות ששדה השברים של \(\mathcal{O}_{K}\) הוא אכן \(K\).

שלוש התכונות הללו של חוג – נתרי, סגור בשלמים וכל אידאל ראשוני בו הוא מקסימלי – הן שלוש התכונות שנדרשות כדי לקבל פריקות יחידה של אידאלים. הם מתקיימות על ידי \(\mathcal{O}_{K}\), אבל גם על ידי חוגים אחרים, כלליים יותר. ראשית, החוגים שאנחנו מדברים עליהם חייבים להיות תחומי שלמות קומוטטיביים עם יחידה: "תחום שלמות" פירושו שאם מכפלה של שני איברים היא אפס, אחד מהם הוא אפס (בלי התכונה הזו אי אפשר לדבר על שדה השברים של החוג), "קומוטטיבי" אומר ש-\(ab=ba\) לכל שני איברים בחוג (זה לא נכון, למשל, עבור חוגי מטריצות) ועם יחידה אומר שקיים איבר שמסומן ב-\(1\) כך ש-\(a\cdot1=1\cdot a=a\) לכל איבר בחוג. התכונות הללו מובנות מאליהן בחוגי שלמים אבל לא בחוגים כלליים יותר.

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

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

ההוכחה עצמה תהיה דומה מאוד באופיה להוכחה ה"קלאסית" לכך שב-\(\mathbb{Z}\) יש פריקות יחידה ("המשפט היסודי של האריתמטיקה"), ולכן אציג קודם כל את ההוכחה הזו. אנחנו צריכים להוכיח שני דברים: שלכל מספר \(a\in\mathbb{N}\) כך ש-\(a\ne0,1\) קיים פירוק למכפלה של מספרים ראשוניים חיוביים \(a=p_{1}\cdot p_{2}\dots p_{k}\) (אותו ראשוני עשוי להופיע כמה פעמים במכפלה), ושהפירוק הזה הוא יחיד עד כדי סדר האיברים במכפלה. שימו לב לכך שיש לנו כאן שני דברים שצריך להוכיח – זו דוגמה קלאסית למשפט קיום ויחידות (דבר נפוץ למדי במתמטיקה).

נתחיל מקיום. מכיוון שאני רוצה לתת הוכחה שתהיה דומה באופיה להוכחה עבור אידאלים בהמשך, מה שאעשה ייראה אולי טיפה מוזר במבט ראשון. אני מניח בשלילה שלא כל המספרים הטבעיים הגדולים מ-1 ניתנים להצגה כמכפלה של ראשוניים, ובוחר את \(a\) להיות המינימלי מביניהם. לא ייתכן שהוא עצמו ראשוני, שהרי אז הוא כן היה ניתן להצגה כמכפלה של ראשוניים (המכפלה \(a\)). מה שאני כן יודע הוא שקיים ראשוני \(p<a\) כך ש-\(p|a\) (זו טענה שצריך להוכיח, כמובן; כשאדבר על אידאלים גם אסביר איך מוכיחים אותה במקרה הכללי יותר הזה). אם נחלק את \(a\) ב-\(p\), נקבל את המספר \(ap^{-1}\) שהוא עדיין מספר טבעי, אבל קטן מ-\(a\); אם הוא קטן מ-\(a\), אז על פי המינימליות של \(a\), את \(ap^{-1}\) בהכרח אפשר לתאר כמכפלה של ראשוניים: \(ap^{-1}=p_{1}\cdots p_{k}\). נכפול את שני האגפים ב-\(p\) ונקבל: \(a=pp_{1}\cdots p_{k}\) וסיימנו (קיבלנו סתירה לכך ש-\(a\) לא ניתן להצגה כמכפלת ראשוניים ולכן אין מספרים שלא ניתנים להצגה כזו).

כעת נעבור להוכיח יחידות. יהא \(a\) מספר טבעי גדול מ-1 כלשהו כך ש-\(a=p_{1}\cdots p_{k}\) וגם \(a=q_{1}\cdots q_{t}\) כשכל האיברים במכפלות הם ראשוניים. הבה ונתבונן ב-\(p_{1}\): הוא מחלק את \(a\) ולכן את \(q_{1}\cdots q_{t}\). כזכור, לראשוני יש את התכונה המופלאה שאם הוא מחלק מכפלה הוא מחלק אחד מהמוכפלים (הגדרתי זאת עבור שני מוכפלים; קל להראות שזה נכון עבור מספר סופי כלשהו של מוכפלים). לכן קיים \(q_{i}\) כך ש-\(p_{1}|q_{i}\). אבל \(q_{i}\) הוא ראשוני ולכן אם הוא מתחלק ב-\(p_{1}\) (שהוא בתורו גדול מ-1), הם חייבים להיות שווים – \(p_{1}=q_{i}\). כעת נכפול את שני אגפי המשוואה \(p_{1}\cdots p_{k}=q_{1}\cdots q_{t}\) ב-\(p_{1}^{-1}\) ונקבל ש-\(p_{2}\cdots p_{k}=q_{1}\cdots q_{i-1}q_{i+1}\cdots q_{t}\), ואת התהליך הזה ניתן להמשיך באינדוקציה (על מספר האיברים במכפלה) ולקבל בסופו של דבר שכולם שווים עד כדי שינוי סדר.

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

החלק היחיד בכל מה שעשיתי שלא עובר בצורה פשוטה ומיידית לאידאלים הוא ההכפלה ב-\(p^{-1}\) שאני מבצע גם בהוכחת הקיום וגם בהוכחת היחידות. אם תתבוננו היטב בהוכחה, תראו שאני משתמש ב-\(p^{-1}\) בשתי דרכים שונות: גם בטענה ש-\(p^{-1}a\) קטן יותר מ-\(a\), וגם בכך ש-\(p^{-1}p=1\), כך שאפשר "לבטל" את \(p\) מהמשוואה על ידי כפל ב-\(p^{-1}\). ברור שכשעוברים לאידאלים צריך להגדיר בחוכמה את האנלוג של \(p^{-1}\) כדי שיקיים תכונות אלו; וההוכחה שהאנלוג אכן עובד היא עיקר הסיבוך הטכני שלנו כאן.

נעבור כעת לדבר על חוגי דדקינד כלליים. \(\mathcal{O}\) יהיה חוג דדקינד – תחום שלמות שהוא נתרי, סגור בשלמות וכל אידאל ראשוני בו הוא מקסימלי. ב-\(K\) אסמן את שדה השברים של \(\mathcal{O}\) – אוסף כל האיברים מהצורה \(\frac{a}{b}\) כאשר \(a,b\in\mathcal{O}\) ו-\(b\ne0\), עם כללי החיבור והכפל הרגילים עבור שברים והכלל ש-\(\frac{a}{b}=\frac{c}{d}\) אם \(ad=bc\). בהינתן אידאל ראשוני \(\mathfrak{p}\) של \(\mathcal{O}\), נסמן ב-\(\mathfrak{p}^{-1}\) את הקבוצה הבאה: \(\mathfrak{p}^{-1}=\left\{ x\in K|x\mathfrak{p}\subseteq\mathcal{O}\right\} \). במילים – \(\mathfrak{p}^{-1}\) כולל את כל אברי שדה השברים של \(\mathcal{O}\) שכל איבר באידאל \(\mathfrak{p}\) "מצמצם להם את המכנה" – כשכופלים אותם בכל אברי \(\mathfrak{p}\) תמיד מקבלים שלם. למשל, אם \(\mathfrak{p}=\left(3\right)\) בחוג \(\mathbb{Z}\), נקבל ש-\(\mathfrak{p}^{-1}\) כולל את כל השלמים (באופן כללי \(\mathfrak{p}^{-1}\) תמיד כולל את כל \(\mathcal{O}\), ישירות מההגדרה) אבל גם כולל את \(\frac{1}{3}\). שימו לב שזה כלל לא אידאל של \(\mathcal{O}\) – הוא כולל איברים שלא בהכרח נמצאים ב-\(\mathcal{O}\).

התוצאה החשובה על \(\mathfrak{p}^{-1}\), לצרכנו, היא ש-\(\mathfrak{a}\cdot\mathfrak{p}^{-1}\ne\mathfrak{a}\) לכל אידאל \(\mathfrak{a}\ne0\), כאשר כפל מוגדר בדיוק כמו כפל של אידאלים (סכומים סופיים של מכפלות). לא אוכיח את התוצאה הזו כרגע; לב לבה הטכני של ההוכחה טמון בה ואני מעדיף לדחות את זה לסוף. זה המקום שבו משתמשים בכך ש-\(\mathcal{O}\) הוא סגור בשלמים. בינתיים בואו ננסה להבין טיפה את המסקנות ממנה.

ראשית, מכיוון ש-\(\mathcal{O}\subseteq\mathfrak{p}^{-1}\) נקבל ש-\(\mathfrak{a}\subset\mathfrak{a}\cdot\mathfrak{p}^{-1}\) (למה?). שנית, באופן כללי \(\mathfrak{a}\cdot\mathfrak{p}^{-1}\) לא חייב להיות אידאל (ייתכן שיהיו בו איברים שאינם ב-\(\mathcal{O}\)) אבל אם \(\mathfrak{a}\subseteq\mathfrak{p}\), אז \(\mathfrak{a}\cdot\mathfrak{p}^{-1}\) אכן יהיה אידאל (בדוק זאת!)

שלישית, במקרה שבו \(\mathfrak{a}=\mathfrak{p}\) נקבל מהתוצאה לעיל ש-\(\mathfrak{p}\subset\mathfrak{p}\cdot\mathfrak{p}^{-1}\subseteq\mathcal{O}\); אבל \(\mathfrak{p}\) הוא אידאל ראשוני ולכן מקסימלי (כי \(\mathcal{O}\) הוא חוג דדקינד) ולכן מהגדרת המקסימליות של אידאלים נובע ש-\(\mathfrak{p}\cdot\mathfrak{p}^{-1}=\mathcal{O}\) – אז במובן כלשהו זהו אכן ההופכי, והוא אכן מקיים את תכונת ה"הקטנה" של \(\mathfrak{a}\) שרצינו (\(\mathfrak{a}\subset\mathfrak{a}\mathfrak{p}^{-1}\) משמעו ש-\(\mathfrak{a}\mathfrak{p}^{-1}\) מחלק ממש את \(\mathfrak{a}\)).

עוד דבר שאזדקק לו הוא האבחנה שאם \(\mathfrak{p}\) הוא אידאל ראשוני שמחלק מכפלה כלשהי של אידאלים \(\mathfrak{a}_{1}\cdots\mathfrak{a}_{k}\) אז הוא מחלק את אחד מאבריה, בדיוק כמו שקורה עם מספרים שלמים. ההוכחה לכך פשוטה ואלגנטית: נניח ש-\(\mathfrak{p}\) לא מחלק אף אחד מאברי המכפלה, כלומר הוא לא מכיל אף אחד מהאידאלים \(\mathfrak{a}_{1},\cdots,\mathfrak{a}_{k}\); אז קיימים \(a_{1},\dots,a_{k}\in\mathcal{O}\) השייכים לאידאלים המתאימים כך ש-\(a_{1},\dots,a_{k}\notin\mathfrak{p}\). אבל מכפלתם שייכת ל-\(\mathfrak{a}_{1}\cdots\mathfrak{a}_{k}\) ולכן שייכת ל-\(\mathfrak{p}\), ומהגדרתו של אידאל ראשוני עולה שאחד מאבריה צריך להיות שייך ל-\(\mathfrak{p}\). באופן הזה תכונת ה"אם ראשוני מחלק מכפלה הוא מחלק את אחד המוכפלים" מפעפעת מאיברים של החוג לאידאלים שלו.

נותר לי עוד חור אחד לסגור. נניח ש-\(\mathfrak{a}\) הוא אידאל כלשהו, אז אני רוצה לטעון שקיים אידאל ראשוני \(\mathfrak{p}\) שמחלק אותו, ובניסוח אחר אני רוצה להראות ש-\(\mathfrak{a}\) מוכל באידאל מקסימלי. זו טענה שניתן להוכיח באופן כללי על חוגים – כל אידאל מוכל באידאל מקסימלי; אבל ההוכחה מתבססת על אקסיומת הבחירה ולכן אנו מעדיפים להחליש את הדרישות עד כמה שניתן, וכאן ניתן להיעזר בכך שהחוג \(\mathcal{O}\) שלנו הוא נתרי. בחוג נתרי מתקיימת תכונה חזקה קצת יותר מאשר "כל אידאל מוכל באידאל מקסימלי" – מתקיימת התכונה שבכל קבוצה לא ריקה של אידאלים קיים איבר מקסימלי. התכונה הזו קריטית בהמשך, לא רק כאן, ולכן כדאי לומר משהו על איך מוכיחים אותה.

ההוכחה טבעית למדי. ניקח אידאל \(I_{1}\) כלשהו בקבוצת האידאלים שנתונה לנו. אם הוא מקסימלי, טוב; אחרת קיים אידאל אחר בקבוצה, \(I_{2}\), שמכיל אותו. אם הוא מקסימלי, טוב; אחרת, קיים אידאל אחר בקבוצה \(I_{3}\), שמכיל אותו. ניקח… הבנתם את הרעיון. מתקבלת הסדרה \(I_{1}\subset I_{2}\subset I_{3}\subset\dots\), אבל מכיוון שהחוג נתרי הסדרה חייבת להיעצר מתישהו – והאיבר שהיא תיעצר בו יהיה איבר מקסימלי (שכן אם לא היה מקסימלי אפשר היה להמשיך את הסדרה גם אחריו). כאן אנחנו משתמשים, באופן כמעט לא מורגש, בגרסה מוחלשת של אקסיומת הבחירה (Axiom of dependent choice); מי שרוצה להיפטר גם מהאקסיומה הזו ייאלץ להגדיר "חוג נתרי" בתור חוג בעל התכונה "לכל קבוצת אידאלים יש איבר מקסימלי", כי היא קריטית לנו.

יפה, עכשיו אפשר לעבור סוף סוף להוכחת משפט הקיום והיחידות של פירוק אידאל לא טריוויאלי \(\mathfrak{a}\ne\left(0\right),\left(1\right)\) בחוג דדקינד למכפלה של אידאלים ראשוניים. נתחיל בקיום: נניח בשלילה שקיימים אידאליים לא טריוויאליים שלא קיים להם להם פירוק למכפלת ראשוניים – זוהי קבוצה לא ריקה של אידאלים ולכן קיים בה איבר מקסימלי ביחס להכלה, \(\mathfrak{a}\). לא ייתכן שהוא עצמו ראשוני, שהרי אז הוא כן היה ניתן להצגה כמכפלה של ראשוניים (המכפלה \(\mathfrak{a}\)). מה שאני כן יודע הוא שקיים ראשוני \(\mathfrak{p}\) שמכיל אותו: \(\mathfrak{a}\subset\mathfrak{p}\). הבה ונכפול את שני האגפים ב-\(\mathfrak{p}^{-1}\): נקבל \(\mathfrak{a}\subset\mathfrak{a}\mathfrak{p}^{-1}\subset\mathfrak{p}\mathfrak{p}^{-1}=\mathcal{O}\). אם כן, מצד אחד \(\mathfrak{a}\mathfrak{p}^{-1}\) הוא אידאל לא טריוויאלי (מוכל ממש ב-\(\mathcal{O}\)) ומצד שני הוא מכיל ממש את \(\mathfrak{a}\) ולכן מהמקסימליות ביחס להכלה של \(\mathfrak{a}\) נובע ש-\(\mathfrak{a}\mathfrak{p}^{-1}\) כן ניתן לתיאור כמכפלה של ראשוניים: \(\mathfrak{a}\mathfrak{p}^{-1}=\mathfrak{p}_{1}\cdots\mathfrak{p}_{t}\). נכפול את שני האגפים ב-\(\mathfrak{p}\), נקבל את \(\mathfrak{a}=\mathfrak{p}\mathfrak{p}_{1}\cdots\mathfrak{p}_{t}\) וסיימנו. שימו לב עד כמה ההוכחה הזו דומה להוכחה של המשפט עבור \(\mathbb{Z}\).

גם הוכחת היחידות זה פחות או יותר אותו דבר. נניח ש-\(\mathfrak{a}=\mathfrak{p}_{1}\cdots\mathfrak{p}_{k}=\mathfrak{q}_{1}\cdots\mathfrak{q}_{t}\) כשכל האיברים במכפלות הם ראשוניים, ונתבונן ב-\(\mathfrak{p}_{1}\): הוא מחלק את \(\mathfrak{q}_{1}\cdots\mathfrak{q}_{t}\) ולכן \(\mathfrak{p}_{1}|\mathfrak{q}_{i}\) עבור \(i\) כלשהו. המשמעות של חלוקה היא, כזכור, ש-\(\mathfrak{q}_{i}\subseteq\mathfrak{p}_{1}\), אבל \(\mathfrak{q}_{i}\) ראשוני ולכן מקסימלי ולכן אם \(\mathfrak{p}_{1}\ne\mathcal{O}\) מכיל אותו, בהכרח \(\mathfrak{p}_{1}=\mathfrak{q}_{i}\). כעת נכפול את שני אגפי המשוואה \(\mathfrak{p}_{1}\cdots\mathfrak{p}_{k}=\mathfrak{q}_{1}\cdots\mathfrak{q}_{t}\) ב-\(\mathfrak{p}_{1}^{-1}\) וקיבלנו ש-\(\mathfrak{p}_{2}\cdots\mathfrak{p}_{k}=\mathfrak{q}_{1}\cdots\mathfrak{q}_{i-1}\mathfrak{q}_{i+1}\cdots\mathfrak{q}_{t}\) ואת התהליך הזה ניתן להמשיך באינדוקציה (על מספר האיברים במכפלה, שהוא תמיד מספר טבעי) ולקבל בסופו של דבר שכולם שווים עד כדי שינוי סדר. ממש אותה הוכחה כמו עבור \(\mathbb{Z}\).

איך זה יצא לנו כל כך פשוט, ממש אותו הדבר? ובכן, ראשית כל בגלל תכונות הנתריות וה"ראשוני גורר אי פריק" שנכונות כאן עבור אידאלים גם אם הן לא נכונות עבור איברים ב-\(\mathcal{O}\) (אפשר לחשוב על חוג דדקינד בתור חוג שבו "האידאלים מתנהגים כמו מספרים נחמדים"), אבל שנית – זה לא פשוט. את החלק היחסית טכני טאטאתי מתחת לשטיח: ההוכחה ש-\(\mathfrak{a}\mathfrak{p}^{-1}\ne\mathfrak{a}\) לכל \(\mathfrak{a}\). כדי שהפוסט הזה יהיה שלם אני רוצה להוכיח גם את זה, למרות שעכשיו באמת לא יהיה מנוס מנפנופי ידיים כלשהם.

האבחנה הראשונה בדרך להוכחה דווקא לא קשורה בכלל ל-\(\mathfrak{p}^{-1}\); זוהי האבחנה שלכל אידאל \(\mathfrak{a}\ne0\), הוא מחלק מכפלה של אידאלים ראשוניים: \(\mathfrak{a}\supseteq\mathfrak{p}_{1}\mathfrak{p}_{2}\dots\mathfrak{p}_{k}\). זה כמובן נובע באופן טריוויאלי מכך שראינו שכל ראשוני ניתן להצגה כמכפלה כזו, אבל אני לא יכול להשתמש בזה – אני עכשיו מוכיח טענת עזר שבה השתמשתי בהוכחה של המשפט על פריקות יחידה! (וההסתרבלות הזו היא כנראה הסיבה שבגללה בספרי מתמטיקה מוכיחים דברים לפי הסדר – קודם הלמות הטכניות והמשעממות ואז האקשן שדורש אותן).

אם כן, מה עושים? משהו לא שונה כל כך ממה שכבר ראינו. אני מניח שקיימים אידאלים שלא מקיימים את התכונה הזו ("לחלק מכפלה של ראשוניים") ובוחר את \(\mathfrak{a}\) להיות המקסימלי שבהם. הוא עצמו לא יכול להיות ראשוני (כי אז היה מכיל מכפלה של ראשוניים – הוא עצמו) ועל פי ההגדרה זה אומר שיש איברים \(b_{1},b_{2}\in\mathcal{O}\) כך ש-\(b_{1}b_{2}\in\mathfrak{a}\) אבל \(b_{1}\notin\mathfrak{a}\) וגם \(b_{2}\notin\mathfrak{a}\). אז אפשר להרחיב את \(\mathfrak{a}\): ניקח את \(\mathfrak{a}_{1}\) להיות האידאל הקטן ביותר שמכיל את \(\mathfrak{a}\) ואת \(b_{1}\) (פורמלית: \(\mathfrak{a}_{1}=\mathfrak{a}+\left(b_{1}\right)\)) ואת \(\mathfrak{a}_{2}\) להיות הקטן ביותר שמכיל את \(\mathfrak{a}\) ואת \(b_{2}\). מתקיים ש-\(\mathfrak{a}\subset\mathfrak{a}_{1}\) ו-\(\mathfrak{a}\subset\mathfrak{a}_{2}\) (הכלה ממש בשני המקרים), ומצד שני \(\mathfrak{a}_{1}\mathfrak{a}_{2}\subseteq\mathfrak{a}\) (כי כל איבר של \(\mathfrak{a}_{1}\mathfrak{a}_{2}\) הוא סכום של מכפלות שאו שכוללות איבר מ-\(\mathfrak{a}\) ש"בולע" את השני, או שהן מהצורה \(b_{1}b_{2}\) והנחנו הרי ש-\(b_{1}b_{2}\in\mathfrak{a}\)). כעת, בגלל תכונת המקסימליות של \(\mathfrak{a}\) נובע ש-\(\mathfrak{a}_{1},\mathfrak{a}_{2}\) שניהם כן מכילים מכפלה של אידאלים ראשוניים, ולכן \(\mathfrak{a}_{1}\mathfrak{a}_{2}\) מכיל את מכפלת שתי המכפלות הללו, ולכן היא מוכלת ב-\(\mathfrak{a}\) וסיימנו.

גם את המשפט הזה אפשר לנסח קודם עבור \(\mathbb{Z}\) ולקבל קצת יותר אינטואיציה – נסו לעשות זאת אם לא הבנתם את ההוכחה.

עכשיו בואו נראה שלכל \(\mathfrak{p}\) ראשוני, \(\mathfrak{p}^{-1}\ne\mathcal{O}\). כלומר, שתמיד אפשר למצוא איבר "שברי" ב-\(K\) שמכפלתו ב-\(\mathfrak{p}\) תיתן רק שלמים. כאן כבר אין חוכמות – ההוכחה תהיה טכנית למדי.

ניקח איזה שהוא\(a\in\mathfrak{p}\) כך ש-\(a\ne0\). נשים לב לכך ש-\(\left(a\right)\) מכיל מכפלה של אידאלים ראשוניים – זה מה שהראינו לפני רגע. ייתכן ש-\(\left(a\right)\) מכיל הרבה מכפלות שכאלו – נבחר מכפלה \(\mathfrak{p}_{1}\cdots\mathfrak{p}_{k}\) כזו שעבורה \(k\) מינימלי (כלומר, אין מכפלה של פחות אידאלים שמוכלת ב-\(\left(a\right)\)). מכיוון ש-\(\mathfrak{p}_{1}\cdots\mathfrak{p}_{k}\subseteq\left(a\right)\subseteq\mathfrak{p}\) עולה ש-\(\mathfrak{p}\) מחלק את המכפלה ולכן מחלק את אחד מאבריה – בלי הגבלת הכלליות נניח שהוא מחלק את \(\mathfrak{p}_{1}\), ומכיוון ש-\(\mathfrak{p}_{1}\) ראשוני בהכרח \(\mathfrak{p}=\mathfrak{p}_{1}\) (שימו לב איך אותם טיעונים צצים שוב ושוב).

כעת, לא ייתכן ש-\(\mathfrak{p}_{2}\cdots\mathfrak{p}_{k}\subseteq\left(a\right)\) כי במכפלה הזו יש רק \(k-1\) מוכפלים וזה יסתור את המינימליות של \(k\). לכן יש \(b\in\mathfrak{p}_{2}\cdots\mathfrak{p}_{k}\) כך ש-\(b\notin a\cdot\mathcal{O}\) (זו פשוט דרך אחרת לכתוב ש-\(b\) לא שייך ל-\(\left(a\right)\)), וזה אומר ש-\(a^{-1}b\notin\mathcal{O}\) (כאן \(a^{-1}\) הוא ההופכי של \(a\) בשדה השברים \(K\) – קיים כזה כי \(a\ne0\)). מצד שני, \(b\mathfrak{p}\subseteq\left(a\right)\) (למה?) ולכן \(a^{-1}b\mathfrak{p}\subseteq\mathcal{O}\), כלומר \(a^{-1}b\in\mathfrak{p}^{-1}\). קיבלנו שיש ב-\(\mathfrak{p}^{-1}\) איבר שאיננו ב-\(\mathcal{O}\), כלומר \(\mathfrak{p}^{-1}\ne\mathcal{O}\), כפי שרצינו.

עכשיו אפשר סוף סוף להגיע לפאנץ': ניקח \(\mathfrak{a}\ne0\) כלשהו ונראה ש-\(\mathfrak{a}\ne\mathfrak{a}\mathfrak{p}^{-1}\). לצערי, זה גם השלב שבו נפנופי הידיים הופכים להיות הכרח ויש סיכוי סביר שגם חלק מהשורדים עד פה יאבדו אותי. מה שנעשה הוא להניח שמתקיים דווקא \(\mathfrak{a}=\mathfrak{a}\mathfrak{p}^{-1}\) ולהגיע מכך לסתירה על ידי כך שנוכיח ש-\(\mathfrak{p}^{-1}=\mathcal{O}\). אז ניקח לנו \(b\in\mathfrak{p}^{-1}\); מטרתנו להוכיח ש-\(b\in\mathcal{O}\). כאן נכנסת לתמונה הסגירות-בשלמים של \(\mathcal{O}\): אם נוכיח ש-\(b\) הוא שורש של פולינום מתוקן שמקדמיו נלקחים מתוך \(\mathcal{O}\), סיימנו.

כאן אני שולף עוד שימוש של הנתריות של \(\mathcal{O}\). ראינו כבר שהנתריות אומרת שלכל קבוצת אידאלים יש אידאל מקסימלי; היא גם אומרת שכל אידאל \(\mathfrak{a}\) הוא נוצר סופית, במובן זה שקיימת קבוצת איברים \(\alpha_{1},\dots,\alpha_{n}\in\mathfrak{a}\) כך שכל איבר של \(\mathfrak{a}\) ניתן לכתיבה כצירוף לינארי של \(\alpha_{1},\dots,\alpha_{n}\) עם מקדמים מ-\(\mathcal{O}\) (למה זה נכון? כי אם האידאל לא היה נוצר סופית אפשר היה לבנות שרשרת עולה של אידאלים – היינו בונים קבוצה של יוצרים ובכל פעם היינו מוסיפים לה איבר שטרם נפרש על ידה).

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

כעת, מה קורה כשכופלים את \(b\) ביוצרים הללו? בשל תכונת הבליעה של אידאלים, \(b\alpha_{i}\in\mathfrak{a}\) לכל \(i\), ולכן אפשר לכתוב \(b\alpha_{i}=\sum_{j=1}^{n}a_{ij}\alpha_{j}\) עם מקדמים \(a_{ij}\in\mathcal{O}\). את הדבר הזה אפשר לכתוב בצורה קומפקטית בעזרת מטריצות: נגדיר את המטריצה \(A\) כך ש-\(A_{ij}=b\delta_{ij}-a_{ij}\) כש-\(\delta_{ij}\) היא הדלתא של קרונקר (\(\delta_{ii}=1\) ו-\(\delta_{ij}=0\) אם \(i\ne j\)), אז \(A\cdot\overline{\alpha}=0\) כש-\(\alpha\) הוא וקטור היוצרים \(\alpha=\left(\alpha_{1},\dots,\alpha_{n}\right)\). מכיוון שקיים וקטור שכשכופלים את \(A\) בו מקבלים 0, המטריצה \(A\) היא סינגולרית, כלומר \(\det A=0\). במילים אחרות, \(b\) הוא שורש של הפולינום המתוקן \(f\left(x\right)=\det\left(x\delta_{ij}-a_{ij}\right)\) שמקדמיו הם מ-\(\mathcal{O}\), ולכן סיימנו.

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

גם אני לא מאמין באינדוקציה (כי לאמונה אין קשר לזה)

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

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

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

ולכן, אנחנו מתנגדים בתוקף לאינדוקציה, ודורשים שתבוטל תוקף ההוכחה שלה לאלתר. וכך לא ידרשו מאתנו להוכיח יותר דברים באינדוקציה

ובכן, כן – למה אינדוקציה היא לא מה שמתואר כאן? מה זו בכלל אינדוקציה?

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

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

עד כה דיברתי מאוד באוויר ולכן בואו נעבור לדוגמאות שעוסקות בקבוצת האובייקטים ה"קלאסית" שעליה מדברים כשמדברים על אינדוקציה מתמטית – המספרים הטבעיים, \(1,2,3,\dots\). בניסוח עבור מספרים טבעיים, אינדוקציה מתמטית אומרת את הדבר הבא: "אם תכונה כלשהי מתקיימת עבור המספר 1, ואם קיום התכונה עבור המספר \(n\) גורר את הקיום שלה עבור המספר \(n+1\), אז התכונה נכונה לכל המספרים הטבעיים". הניסוח הזה כה חשוב עד כי במערכת האקסיומות הסטנדרטית למספרים הטבעיים הוא נכלל כאחת מהאקסיומות ("אקסיומת האינדוקציה"). אין זה אומר שאנו מניחים שאינדוקציה היא משהו שנכונותו אינה דורשת הצדקה; אחרי שאציג דוגמה פשוטה נעבור לדיון בשאלה למה בכלל נכון להניח שאינדוקציה מתמטית "עובדת".

דוגמה קלאסית להוכחה באינדוקציה היא ההוכחה לנוסחת הסכום של כל המספרים הטבעיים מ-1 ועד \(n\): \(1+2+3+\dots+n=\frac{n\left(n+1\right)}{2}\). אי אפשר להביא את הנוסחה הזו מבלי לספר את הסיפור שנלווה אליה למרות שאין לו שום קשר לאינדוקציה מתמטית: מספרים שהמורה של גאוס הקטן (שהיה בן 6? 7? משהו בסגנון…) התעצל יום אחד וכדי שיהיה לו שקט מהתלמידים נתן להם לסכם את כל המספרים מ-1 ועד 100 (כלומר, במקרה הזה \(n=100\)). התלמידים מן הסתם לא הכירו את הנוסחה. והנה אחרי דקה או שתיים בא גאוס אל המורה ונתן לו את הפתרון – 5050. למורה ההמום הוא הסביר את ההגיון שלו – אם סוכמים את האיבר הראשון והאחרון, שהם \(1\) ו-\(n\), מקבלים \(n+1\); ואם סוכמים את האיבר השני והלפני אחרון, שהם \(2\) ו-\(n-1\), מקבלים גם \(n+1\), וכן הלאה. כמה זוגות כאלו יש בסך הכל? בדיוק חצי ממספר האיברים, כלומר \(\frac{n}{2}\). לכן סכום כל האיברים הוא \(\frac{n}{2}\left(n+1\right)\). אני לא יודע אם גאוס אכן גילה כך את הנוסחה או שזה סתם צ'יזבט, אבל לטעמי זו הוכחה נפלאה ממש.

חזרה לאינדוקציה מתמטית. ההוכחה באינדוקציה של נכונות הנוסחה היא הרבה יותר משעממת לצערי, אבל זכרו שמדובר על דוגמה שמנסה להיות פשוטה ואולי גם תפיס את דעתם של אלו שלא נחה עליהם דעתם מההוכחה של גאוס במקרה שבו \(n\) הוא אי זוגי – למרות שאפשר לנסח אותה בצורה שתטפל גם בה. צריך להתחיל מהוכחה שהטענה נכונה עבור \(n=1\), אבל זה פשוט עניין של הצבה בנוסחה ובדיקה: אם מציבים \(n=1\) מקבלים \(\frac{1\cdot\left(1+1\right)}{2}=1\). השיעמום הזה עשוי ליצור את הרושם שהוכחת הבסיס היא תמיד טריוויאלית, ולא כן – לפעמים הוכחת הבסיס היא החלק המאתגר יותר בהוכחה באינדוקציה.

הצעד הוא כזה: אנו מניחים שכבר ידוע לנו כי \(1+2+\dots+n=\frac{n\left(n+1\right)}{2}\). כעת אנו רוצים להוכיח את השלב הבא, כלומר שמתקיים \(1+2+\dots+n+\left(n+1\right)=\frac{\left(n+1\right)\left(n+2\right)}{2}\). מה עושים? משתמשים במה שכבר הוכחנו. אנחנו יודעים את סכום \(n\) האיברים הראשונים, ולכן אגף שמאל של המשוואה הוא פשוט \(\frac{n\left(n+1\right)}{2}+\left(n+1\right)\) וכעת כל מה שנותר הוא לעשות חשבון פשוט:

\(\frac{n\left(n+1\right)}{2}+\left(n+1\right)=\frac{n\left(n+1\right)+2\left(n+1\right)}{2}=\frac{\left(n+1\right)\left(n+2\right)}{2}\)

למי שהמעבר האחרון לא ברור לו – הוצאתי את הגורם המשותף \(\left(n+1\right)\) משני המחוברים.

אם כן, זה כל מה שהיה צריך להוכיח, ועכשיו הנוסחה נכונה באופן כללי. אבל למה מה שעשיתי הוא לא לומר "הנה מה שאני רוצה להוכיח בואו נניח שזה נכון וכפי שראינו קודם, זה נכון מ.ש.ל"? בפשטות, כי אני לא מניח שמה שאני רוצה להוכיח הוא נכון, אלא שמה שכבר הוכחתי הוא נכון, ואני נעזר במה שכבר הוכחתי כדי לבנות הוכחה חדשה. הוכחה של הטענה עבור \(n=4\), למשל, תלך כך: "ראשית, ראינו שהטענה נכונה עבור 1. שנית, ראינו שאם הטענה נכונה עבור 1 אז היא נכונה גם עבור 2, ולכן היא נכונה עבור 2. שלישית, ראינו שאם הטענה נכונה עבור 2 אז היא נכונה גם עבור 3, ולכן היא נכונה עבור 3; ולסיום, ראינו שאם היא נכונה עבור 3 אז היא נכונה גם עבור 4, ולכן היא נכונה גם עבור 4 – סיימנו". כלומר, ההוכחה של הטענה עבור 4 מתבססת על כך שקודם כל אנחנו כותבים במפורש את ההוכחה עבור 1, ואז את ההוכחה עבור 2, ואז את ההוכחה עבור 3 ולסיום את ההוכחה עבור 4, כשכל צעד בהוכחה מתבסס על הצעדים שקדמו לו.

במקרה הפרטי של הטענה שלנו זה הולך כך. ראינו שסכום כל האיברים עד 1 הוא 1; לכן סכום כל האיברים עד 2 הוא סכום כל האיברים עד 1 (שהוא 1) ועוד 2, כלומר 3; ולכן סכום כל האיברים עד 3 הוא סכום של האיברים עד 2 (שראינו לפני שניה שהוא 3) ועוד 3, כלומר 6; ולכן סכום כל האיברים עד 4 הוא סכום כל האיברים עד 3 (שראינו לפני רגע שהוא 6) ועוד 4, כלומר 10, ו-10 הוא בדיוק \(\frac{4\left(4+1\right)}{2}\), כמו שרצינו. לכן הטענה נכונה גם עבור 4.

בעצם, השלב שאנו קוראים לו "צעד האינדוקציה" הוא תבנית הוכחה. הוא הוכחה שתלויה בפרמטר \(n\), שאפשר להציב בו כל מספר טבעי. אם אציב בתבנית שלמעלה את המספר 3 אני אקבל הוכחה חוקית לגמרי לטענה "אם \(1+2+3=\frac{3\left(3+1\right)}{2}\) אז \(1+2+3+4=\frac{4\left(4+1\right)}{2}\)", וכך יקרה לכל מספר אחר שאציב ב-\(n\). העניין הוא בכך שמתמטיקאים הם עצלנים. הם לא רוצים לחזור שוב ושוב על אותה הוכחה. הם רואים שאין שום הבדל מהותי בין ההוכחה של "אם הטענה נכונה עבור 2 אז היא נכונה עבור 3" ובין ההוכחה של "אם הטענה נכונה עבור 3 אז היא נכונה עבור 4" ולכן הם מסתפקים בתבנית אחת שמטפלת בכל המקרים האפשריים בבת אחת. אולי זה לא ברור מייד אך קורה כאן קסם מסויים – איכשהו, למרות שלא כתבנו הוכחה פורמלית לאף אחד מהמספרים פרט ל-1 (אלא רק סיפקנו את התבנית), פתאום קיבלנו הוכחה עבור כל אינסוף המספרים הטבעיים. למי שלא משתכנע עדיין, חשבו על זה כך: אם הטענה אינה נכונה עבור כל אינסוף הטבעיים, אז קיים מספר טבעי כלשהו – נקרא לו \(m\) – שעבורו הטענה לא נכונה. כעת, הטענה נכונה עבור 1 (מהבסיס), ואם היא נכונה עבור 1 אז היא נכונה גם עבור 2 (מהצעד) ולכן גם עבור 3 (מהצעד) וכן הלאה וכן הלאה… בסוף נגיע ל-\(m\) ונקבל שהטענה נכונה גם עבור \(m\). מכיוון שלא הנחנו כלום על \(m\), המסקנה היא שלא קיים \(m\) טבעי שעבורו הטענה אינה מתקיימת, ולכן היא אכן מתקיימת עבור אינסוף הטבעיים. הפאנץ' פה (וארחיב על כך בהמשך) הוא שלכל מספר טבעי יש רק מספר סופי של מספרים שבאים לפניו ולכן אפשר לבנות "שרשרת" הוכחה שמגיעה מהבסיס אל \(m\), לכל \(m\).

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

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

בואו נעבור לדבר הרבה יותר מטריד – האם אינדוקציה היא לא כלי חלש מדי? הרי כל מה שאני יכול לעשות הוא להוכיח איתה טענות על מספרים טבעיים! ובכן, לשאלה הזו יש שתי תשובות: לא, ולא. ה"לא" הראשון הוא שגם טענות על טבעיים יכולות בעצם להחביא בתוכן טענות על דברים שונים לחלוטין. הבה וניזכר בטענה שהוכחתי בפוסט הקודם – הוכחתי שם שכל לוח משבצות בגודל \(2^{n}\times2^{n}\) שהוסרה ממנו בדיוק משבצת אחת ניתן לריצוף בידי צורות "ר". כלומר, טענתי טענה על לוחות של משבצות, לא על מספרים טבעיים; ועם זאת, ההוכחה הייתה באינדוקציה. הכיצד? כי הטענה שלי, אם מנסחים אותה פורמלית עד הסוף, הייתה "לכל מספר טבעי \(n\) מתקיימת התכונה שלוח שגודלו \(2^{n}\times2^{n}\) והוסרה ממנו משבצת אחת ניתן לריצוף".

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

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

ניסוח כללי של עקרון האינדוקציה לקבוצות סדורות היטב הוא זה: אם \(A\) היא קבוצה סדורה היטב, ויש לנו תכונה כלשהי, אז כדי להוכיח שהתכונה מתקיימת לכל אברי \(A\) מספיק להוכיח את הטענה הבאה, שאכנה "צעד האינדוקציה":

"לכל \(x\in A\), אם טענה כלשהי מתקיימת לכל \(y<x\) שנמצא ב-\(A\) אז היא מתקיימת עבור \(x\)".

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

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

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

אפשר להכליל את מושג האינדוקציה גם באופן נוסף לפעמים יש לנו אובייקטים שנוצרים באופן אינדוקטיבי: מתחילים מקבוצה פשוטה של איברי בסיס, ואז בכל שלב בונים איבר חדש מתוך חלק מהאיברים הקיימים. דוגמה קלאסית לכך היא נוסחאות מתמטיות פורמליות; אובייקט הבסיס הוא מספר טבעי כלשהו, ואילו אם \(\alpha,\beta\) הן שתי נוסחאות אז גם \(\left(\alpha+\beta\right)\) ו-\(\left(\alpha\times\beta\right)\) הן נוסחאות, למשל. בעזרת כללי הבניה הללו אנו רואים ש-\(\left(5+3\right)\times7\) היא נוסחה בעוד ש-\(\left(5+3\right)\times2+9\) דווקא אינה נוסחה "חוקית" (איפה הסוגריים סביב 9?). אם יש לנו קבוצת אובייקטים שכזו, אז כדי להוכיח עליה טענה מספיק להוכיח שהטענה מתקיימת עבור איברי הבסיס, ושאם מפעילים כלל בניה על אובייקטים שמקיימים את הטענה, אז גם התוצר מקיים את הטענה. שימו לב שזה זהה לאינדוקציה "רגילה" במספרים טבעיים עם "כלל הבניה" שלוקח מספר \(a\) ומייצר ממנו את המספר \(a+1\). בלוגיקה מתמטית ובתחומים קרובים במדעי המחשב הוכחות כאלו הן נפוצות להחריד, עד שבדיחה ידועה אומרת שההבדל בין מדען מחשב ומתמטיקאי הוא שהמתמטיקאי יודע גם להוכיח דברים שלא באינדוקציה.

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

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

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

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

כלל ה-0-1 של גרפים – ההוכחה

בפעם הקודמת ניסחתי את כלל ה-0-1, ולכן עכשיו אגש להוכחה שלו בלי שהיות. הרעיון הבסיסי בהוכחה הוא פשוט מאוד, אבל גם מקסים: הבה ונתבונן בתורה \(T\), שהפסוקים שלה הם בדיוק אותם פסוקים שמתארים תכונות \(\mathcal{P}\) עם הסתברות 1. למשל, הפסוק \(\exists v_{1},v_{2},v_{3}\left(E\left(v_{1},v_{2}\right)\wedge E\left(v_{2},v_{3}\right)\wedge E\left(v_{3},v_{1}\right)\right)\) שמתאר את "בגרף קיים משולש" שראינו בפוסט הקודם נמצא בתורה זו. את ההוכחה כעת ניתן לסכם, למי שבקיא במושגים, בתור "התורה הזו עקבית ושלמה, ולכן כל תכונה שניתן לנסח בשפה או נובעת ממנה ואז הסתברותה 1, או ששלילתה נובעת ממנה ואז הסתברותה 0". כעת ניגש לפרטים ובראש ובראשונה למה שאני מתכוון אליו ב"תורה שלמה".

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

אם כן, סיכום: אם \(T\) היא עקבית ושלמה, אז אפשר להראות כי נובע מכך שכל פסוק \(\varphi\) שייך לה, או ש-\(\neg\varphi\) שייך לה. זה מסיים את העניין מייד, כי אז לכל תכונה של גרף – שכזכור, מוגדרת באמצעות פסוק \(\varphi\) – או ש-\(\varphi\in T\) ואז הסתברות התכונה היא 1, או ש-\(\neg\varphi\in T\) ואז ההסתברות שהתכונה לא מתקיימת היא 1, כלומר הסתברות התכונה היא 0. שימו לב לקשר היפה שיש כאן בין לוגיקה וקומבינטוריקה – כדי להוכיח את טענת ה-0-1 הקומבינטורית, הכל מצטצמם בסופו של דבר להוכחה שתורה מסויימת היא שלמה. זו גם דוגמה נאה לתורה "מעניינת" שאינה נופלת קורבן למשפט אי השלמות של גדל; הסיבה לכך שהיא חומקת ממנו היא שלא מדובר בתורה אריתמטית, כלומר היא אינה ממדלת את המספרים הטבעיים עם פעולת החיבור והכפל. זו כמובן לא התורה המעניינת היחידה שעושה זאת, אך עוד דוגמה לאוסף כדי להשתיק את מי שאומר "משפט גדל מראה שכל תורה מתמטית איננה שלמה" היא תמיד דבר טוב.

ראשית אני רוצה לטפל בשאלה מדוע אם \(T\) עקבית ושלמה נובע מכך שכל פסוק נמצא בה או ששלילתו נמצאת בה. לשם כך מספיק להראות שהתורה היא "סגורה" במובן זה שאם \(T\vdash\varphi\), אז \(\varphi\in T\). הנה נימוק פשוט לכך: אם \(T\vdash\varphi\) נובע מכך שקיימת קבוצה סופית של פסוקים \(\psi_{1},\dots,\psi_{n}\in T\) כך ש-\(\left\{ \psi_{1},\dots,\psi_{n}\right\} \vdash\varphi\) (למה? ההוכחה שאני חושב עליה היא "אם \(T\vdash\varphi\) אז קיימת הוכחה ל-\(\varphi\) עם אקסיומות מ-\(T\). מכיוון שזו הוכחה סופית, יש בה רק מספר סופי של אקסיומות \(\psi_{1},\dots,\psi_{n}\), ומכיוון שהן מוכיחות את \(\varphi\) הן גם גוררות אותו לוגית" – אבל אני בטוח שיש עוד הוכחות). כלומר, כל מודל של הפסוק \(\psi_{1}\wedge\dots\wedge\psi_{n}\) הוא גם מודל של \(\varphi\), ולכן ההסתברות ש-\(\varphi\) יתקיים גדולה לפחות כמו ההסתברות ש-\(\psi_{1}\wedge\dots\wedge\psi_{n}\) יתקיים (כי כל גרף שנגריל ויקיים את התכונה \(\psi_{1}\wedge\dots\wedge\psi_{n}\) יקיים גם את התכונה \(\varphi\)). לא קשה להראות שההסתברות ש-\(\psi_{1}\wedge\dots\wedge\psi_{n}\) יתקיים היא 1, כי ההסתברות של כל \(\psi_{i}\) היא 1 (נסו להוכיח זאת – זה תרגיל קצר ונחמד).

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

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

כעתת נניח כי \(T\) אינה שלמה. אז יש פסוק \(\varphi\) שאינו נובע ממנה, וגם \(\neg\varphi\) אינו נובע ממנה. אז אפשר לבנות שתי תורות חדשות, \(T_{1}=T\cup\left\{ \varphi\right\} \) ו-\(T_{2}=T\cup\left\{ \neg\varphi\right\} \) שיהיו שתיהן עקביות (אם אחת מהן לא הייתה עקבית, פירוש הדבר היה ש-\(\varphi\) או \(\neg\varphi\) נובע מ-\(T\)). לכן יש לשתיהן מודל אינסופי (כי אין ל-\(T\) מודלים סופיים, וכל מודל של \(T_{1}\)ושל \(T_{2}\) הוא גם מודל של \(T\)) ועל פי לוונהיים סקולם, לשתיהן יש מודל מעוצמה \(\kappa\); אבל אמרנו ש-\(T\) היא \(\kappa\)-קטגורית, ולכן שני המודלים הללו (שהם, כאמור, מודלים גם של \(T\)) הם איזומורפיים. זה בלתי אפשרי שכן הם שונים מהותית – באחד \(\varphi\) מתקיים, ובשני \(\neg\varphi\) מתקיים. סתירה.

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

ובכן, די בבירור ל-\(T\) פשוט לא יכול להיות מודל סופי. זאת מכיוון שהתכונה "בגרף יש לפחות \(n\) צמתים" ניתנת לתיאור בלוגיקה מסדר ראשון, ובוודאי שיש לה הסתברות 1 (כזכור, ההסתברות נלקחת על גרף "אקראי" כשמספר הצמתים שואף לאינסוף). הפסוק \(\varphi_{n}\) המתאים הוא פשוט \(\exists v_{1},\dots,v_{n}\left(\bigwedge_{i\ne j}v_{i}\ne v_{j}\right)\). אם ל-\(T\) היה מודל סופי, עם נניח \(n\) איברים, הוא לא היה יכול לספק את \(\varphi_{n+1}\in T\) – סתירה. אז ל-\(T\) אין מודל סופי. לכן היצורים היחידים שכן מספקים את כל הפסוקים שב-\(\varphi\) בו זמנית הם גרפים אינסופיים. אין קושי רעיוני במושג כזה – אנחנו פשוט לא מגבילים את קבוצת הצמתים להיות סופית, וגרפים אינסופיים הם יצורים מאוד נפוצים במתמטיקה. עם זאת, המעורבות שלהם כאן היא עדיין מעניינת – אנחנו מראים שקיים גרף בן מניה יחיד שמקיים בו זמנית את כל התכונות שמתקיימות "כמעט בכל הגרפים הסופיים", וזה מראה לנו את נכונות כלל ה-0-1.

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

איך מוכיחים ששני מודלים הם איזומורפיים? לצורך הפשטות מספיק לדבר על שני גרפים אינסופיים (בני מניה) \(A,B\) ולא להיכנס לתורה הכללית. מה שצריך להראות הוא פשוט התאמה של אחד-לאחד בין הצמתים של \(A\) והצמתים של \(B\) שמשמרים את הקשתות. כלומר, אם \(V_{A}=\left\{ a_{1},a_{2},a_{3},\dots\right\} \) הם צמתי \(A\) ואילו \(V_{B}=\left\{ b_{1},b_{2},b_{3},\dots\right\} \) הם צמתי \(B\) אנחנו רוצים למצוא פונקציה \(f:V_{A}\to V_{B}\) שהיא חד חד ערכית ועל, ומקיימת ש-\(\left(a_{i},a_{j}\right)\in E_{A}\) אם ורק אם \(\left(f\left(a_{i}\right),f\left(a_{j}\right)\right)\in E_{B}\).

מה שנעשה הוא לשחק משחק באופן הבא. ראשית, נתאים את \(a_{1}\) ל-\(b_{1}\), פשוט כי לעת עתה אין שום מהלך נבון יותר שניתן לעשות. כעת, למי נתאים את \(a_{2}\)? זה כבר נהיה מורכב מעט יותר – אם \(a_{1}\) מחובר ל-\(a_{2}\), נרצה לבחור \(b_{i}\in V_{B}\) שמחובר ל-\(b_{1}\). מה מבטיח לנו שקיים כזה? ובכן, אם לא היה קיים כזה, אז \(B\) לא היה מודל טוב עבור התכונה "לכל צומת יש לפחות שכן אחד", שלא קשה לראות שניתן לנסח בשפה מסדר ראשון ושיש לו הסתברות 1 (בגרף עם \(n+1\) צמתים, לכל צומת יש \(n\) שכנים פוטנציאליים, ולכן ההסתברות שלא יהיה לו אף שכן היא \(\frac{1}{2^{n}}\) – שואפת לאפס).

בואו נעבור לדבר על משהו כללי יותר. נניח שעד כה טיפלתי בכל הצמתים \(a_{1},a_{2},\dots,a_{n}\) ועכשיו אני תוהה לאן להעביר את \(a_{n+1}\). בואו נניח לצורך נוחות ש-\(a_{1}\) עבר ל-\(b_{1}\), ש-\(a_{2}\) עבר ל-\(b_{2}\) וכן הלאה (אם לא, פשוט נשנה את המספור של הצמתים של \(B\)). עכשיו, הצומת החדש \(a_{n+1}\) הולך להיות מחובר לחלק מהצמתים הקיימים, ולחלק מהם – לא. נסמן ב-\(S_{A}\) את קבוצת הצמתים שאליהם \(a_{n+1}\) מחובר, וב-\(S_{B}\) את קבוצת ה"תמונות" שלהם (ה-\(b_{i}\)-ים שמחוברים לאיברים של \(S_{A}\)). מה שאנחנו רוצים לעשות הוא למצוא צומת כלשהו ב-\(V_{B}\) שמחובר לכל הצמתים ב-\(S_{B}\), ולא מחובר לאף צומת מבין \(b_{1},\dots,b_{n}\) שאיננו ב-\(S_{B}\). האם קיים צומת שכזה? אנחנו חייבים שהתשובה תהיה חיובית כדי שהשיטה תצליח; וזה מוביל אותנו לניסוח התכונות שב-\(T\) שיעניינו אותנו, שהן בדיוק התכונות שאומרות "כן! בכל תרחיש דוגמת זה שתיארת למעלה, אפשר למצוא צומת \(b_{n+1}\) מתאים". מה שצריך להראות הוא שהתכונות הללו ניתנות לניסוח בשפה מסדר ראשון שלנו, ושההסתברות לכך שהן יתקיימו בגרף היא 1. ברגע שהראנו זאת, סיימנו; כי אז התהליך שתיארתי לעיל, אחרי שמכלילים אותו עוד טיפה, מגדיר באופן מושלם את האיזומורפיזם (אם רוצים לדעת לאן \(a_{n}\) עבר, "מריצים" את התהליך במשך \(n\) צעדים ורואים מה קורה; כדי להבטיח שגם כל ה-\(b_n\)-ים יותאמו לאחד מה-\(a_n\)-ים צריך לבחור גם עבורם איברים, לסירוגין).

הבה ננסח במפורש את התכונות שאנחנו רוצים. נסמן ב-\(\mbox{EA}_{n,m}\) את התכונה "לכל קבוצה \(X\) מגודל \(n\) ותת קבוצה \(Y\) מגודל \(m\) שלה, קיים איבר שאינו ב-\(X\) שמחובר לכל אברי \(Y\) ואינו מחובר לאף איבר ב-\(X\) שאינו ב-\(Y\)" (למה \(\mbox{EA}\)? מלשון Extension Axiom, שכן זוהי אקסיומה שאומרת שניתן "להרחיב" את הקבוצה \(X\) באופן שמעניין אותנו – דהיינו, חיבור בדיוק לצמתי \(Y\)). את התכונה הזו אפשר לכתוב בקלות יחסית בשפה מסדר ראשון:

\(\forall v_{1},\dots,v_{n}\)
\(\left[\left(\bigwedge_{i\ne j}v_{i}\ne v_{j}\right)\to\exists u\left(\bigwedge_{i}^{n}u\ne v_{i}\wedge\bigwedge_{i\le m}E\left(u,v_{i}\right)\wedge\bigwedge_{i>m}^{n}\neg E\left(u,v_{i}\right)\right)\right]\)

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

כדי להקל על החישוב נפשט קצת עניינים. אין צורך לדבר על \(\mbox{EA}_{n,m}\) עבור \(n,m\) כלליים – שימו לב שאם \(\mbox{EA}_{2m,m}\) מתקיים בהסתברות 1, אז בוודאי גם \(\mbox{EA}_{n,m}\) מתקיים בהסתברות 1 עבור \(m\le n\le2m\), כי אנחנו מקלים קצת על הדרישות – הקבוצה \(Y\) נותרת זהה, ואנחנו פשוט דורשים פחות דרישות על שאר האיברים ב-\(X\) (כלומר, מעיפים לכל הרוחות את חלקם). לכן די להוכיח כי \(\mbox{EA}_{2m,m}\) מתקיים בהסתברות 1. נקבע את מספר הצמתים בגרף כולו להיות \(n\) (כי השתמשנו ב-\(n\) עד כה למטרה זו וחבל להפסיק – רק צריך לזכור שזה לא אותו \(n\) שהופיע ב-\(\mbox{EA}_{n,m}\)).

מכאן זו באמת קומבינטוריקה פשוטה וקצת אינפי. ניקח צומת שאיננו ב-\(X\). מה ההסתברות שהוא מחובר לכל \(m\) צמתי \(Y\), ואינו מחובר לכל הצמתים של \(X\) שאינם ב-\(Y\)? בדיוק \(\frac{1}{2^{2m}}\), כי יש \(2m\) הגרלות של קשתות שבכל אחת אנחנו צריכים שתתקבל תוצאה ספציפית. אם כן, ההסתברות שצומת כלשהו לא יקיים את התכונה הרצויה היא \(1-\frac{1}{2^{2m}}\). על פניו הסתברות גדולה – אבל כאמור, יש המון צמתים שונים. כמה המון? \(n-2m\) צמתים שבגרף אך אינם ב-\(X\). ההסתברות שאף אחד מהם לא יהיה בסדר היא מכפלת ההסתברויות של כל אחד להיות לא בסדר, כלומר \(\left(1-\frac{1}{2^{2m}}\right)^{n}\). זה בפני עצמו שואף לאפס כשמשאיפים את \(n\) לאינסוף, אבל צריך לשים לב שלא סיימנו – אנחנו לא טוענים טענה על קבוצה \(X\) ספיצפית, אלא על כל קבוצה \(X\) מגודל \(2m\) וכל תת קבוצה \(Y\) שלה מגודל \(m\). אז ההסתברות שמשהו ישתבש הוא שתהיה קבוצה \(X\) כלשהי ותת קבוצה \(Y\) שלה שעבורן האירוע ה"רע" שהסתברותו \(\left(1-\frac{1}{2^{2m}}\right)^{n}\) מתרחש. ההסתברות לכל זה חסומה על ידי מספר תת הקבוצות הללו כפול \(\left(1-\frac{1}{2^{2m}}\right)^{n}\) (בהינתן קבוצת מאורעות, ההסתברות שאחד מהם יתרחש חסומה על ידי סכום ההסתברויות שלהם – זה מה שנקרא Union bound).

אז הסתברות הכישלון שלנו חסומה על ידי \({n \choose 2m}{2m \choose m}\left(1-\frac{1}{2^{2m}}\right)^{n}\). את כל זה אפשר לחסום על ידי \(n^{2m}\cdot c^{n}\) כש-\(c\) הוא קבוע קטן מ-1. המסקנה ברורה – פולינום כמו \(n^{2m}\) גדל הרבה יותר לאט מאשר פונקציה אקספוננציאלית כמו \(c^{n}\) גדלה, ומכיוון ש-\(c<1\), \(c^{n}\) שואף לאפס, ולכן \(n^{2m}\cdot c^{n}\) כולו שואף לאפס כש-\(n\) שואף לאינסוף, כלומר ההסתברות ש"משהו יתקלקל" שואפת לאפס, ולכן ההסתברות שהתכונה תתקיים שואפת ל-1. זהו.

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

המשפט היסודי של האלגברה – הוכחה אלגברית

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

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

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

הבה וננסה לנסח את המשפט בצורה פשוטה מעט יותר. ראשית, אין צורך לדבר על משוואות אלא על פולינומים, ומספיק לדבר על פולינומים מתוקנים, כלומר כאלו שבהם המקדם של החזקה הגבוהה ביותר הוא 1, כלומר משהו מהצורה \(f\left(x\right)=x^{n}+a_{n-1}x^{n-1}+\dots+a_{1}x+a_{0}\) (אם הפולינום לא מתוקן, לכפול אותו בקבוע ש"יתקן" אותו לא משנה את השורשים). אם לפולינום יש שורש, נניח \(\alpha\), אז ניתן לכתוב את הפולינום בתור \(f\left(x\right)=g\left(x\right)\left(x-\alpha\right)\) כאשר \(g\left(x\right)\) הוא ממעלה נמוכה יותר; לכן לטעון ש"לכל פולינום ממעלה 1 ומעלה יש שורש" שקול לטענה "לכל פולינום ממעלה \(n\) יש בדיוק \(n\) שורשים" כי פשוט נוכל לחלק את \(f\left(x\right)\) שוב ושוב בשורשים שנגלה. שימו לב – הכוונה איננה ל-\(n\) שורשים שהם בהכרח שונים זה מזה; למשל, לפולינום \(x^{2}-4x+4\) יש בדיוק שורש יחיד: \(x=2\), שכן \(x^{2}-4x+4=\left(x-2\right)^{2}\). על שורש כזה אומרים שיש לו ריבוי 2; ובאופן כללי, כל פולינום ניתן לכתיבה בצורה \(f\left(x\right)=\left(x-\alpha_{1}\right)^{k_{1}}\cdots\left(x-\alpha_{t}\right)^{k_{t}}\), ועל \(k_{i}\) אומרים שהוא הריבוי של השורש \(\alpha_{i}\). זה סוגר את עניין ה"בדיוק".

מה שטרם התייחסתי אליו הוא מהם המקדמים של \(f\left(x\right)\) – האם הם ממשיים, או שהם יכולים להיות גם מרוכבים? חלק ניכר מכוחו של המשפט נובע מכך שהמקדמים יכולים להיות מרוכבים – הרי את המרוכבים מכניסים מלכתחילה לתמונה כדי לפתור משוואות שאין להן פתרון במספרים ממשיים; אם כחלק מהתהליך הזה היינו יוצרים משוואות חדשות שלא ניתנות לפתרון במרוכבים, זה היה בבחינת "צעד אחד קדימה, שני צעדים אחורה". ובכן, אנחנו רוצים להוכיח את המשפט עבור מקדמים מרוכבים, אלא שמסתבר שדי להוכיח עבור מקדמים ממשיים. הבה נניח לשניה של-\(f\left(x\right)\), שהוא פולינום במקדמים מרוכבים, אין פתרון במרוכבים; אז כך גם לפולינום \(\overline{f\left(x\right)}\) שמתקבל מ-\(f\left(x\right)\) על ידי הצמדת כל המקדמים. כזכור (למי שאמור לזכור), הצמדה של מספר מרוכב היא היפוך הסימן של החלק המדומה שלו, כלומר \(\overline{a+bi}=a-bi\); בפרט, מספר מרוכב שווה לצמוד שלו אם ורק אם הוא ממשי טהור (ללא חלק מדומה).

אם גם ל-\(f\left(x\right)\) וגם ל-\(\overline{f\left(x\right)}\) אין שורשים, גם למכפלתם אין; אבל אם נצמיד את \(f\left(x\right)\overline{f\left(x\right)}\) נקבל \(\overline{f\left(x\right)}f\left(x\right)\), וזהו אותו פולינום בדיוק – כלומר, הצמדה לא משנה את מקדמי הפולינום \(\overline{f\left(x\right)}f\left(x\right)\), כלומר הם ממשיים, כלומר מצאנו פולינום ממשי ללא שורש. לכן מספיק להראות שלכל פולינום ממשי יש שורש כדי שינבע מכך שלכל פולינום, גם מרוכב, יש שורש. סיימנו את הפישוטים ואפשר לגשת לעבודה.

כעת נכנסת האנליזה למשחק – הטענה הראשונה שלי היא שלכל פולינום ממעלה אי זוגית קיים שורש ממשי אחד לפחות. הדבר נובע ממשפט אלמנטרי באנליזה – משפט ערך הביניים: אם \(f\left(x\right)\) היא פונקציה רציפה, ו-\(\left[a,b\right]\) הוא קטע כלשהו, אז \(f\) מקבלת כל ערך בין \(f\left(a\right)\) ו-\(f\left(b\right)\). במילים – אם אנחנו מציירים פונקציה בלי להרים את העפרון מהדף, אז העפרון חייב לגעת בכל קו מאוזן שבין הגובה שממנו הוא מתחיל, לגובה שבו הוא מסיים. אין "קפיצות".

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

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

אם כן, \(f\left(a\right)<0<f\left(b\right)\) – מקרה קלאסי של משפט ערך הביניים. המסקנה? יש נקודת ביניים \(a<c<b\) שבה \(f\left(c\right)=0\), וזהו בדיוק שורש של הפולינום, וסיימנו במקרה זה.

אם כן, למה אנליזה היא כנראה הכרחית כאן? בנפנוף ידיים כלשהו – מכיוון שהמספרים הממשיים הם יצורים אנליטיים מעצם הגדרתם. הבה וניזכר בבניית המספרים – השלמים והרציונליים נבנו מהטבעיים באופן "אלגברי", על ידי בנייה פשוטה וסופית (בכל פעם כל איבר חדש הורכב מזוג איברים "ישנים", זיהוי מסויים של חלק מהאיברים החדשים כשקולים, והגדרה מחוכמת של פעולות החשבון על הזוגות). אלא שברציונליים המשפט שציטטתי למעלה על הפולינום אינו נכון – למשל, ל-\(f\left(x\right)=x^{3}-2\) אין שורש רציונלי. אפשר להמשיך מכאן בשתי דרכים שונות – האחת היא לבנות באופן אלגברי שדה שמכיל את הרציונליים ובו לכל פולינום רציונלי יהיה שורש – בניה כזו אפשרית, אך היא מסובכת למדי וראויה לפוסט נפרד; התוצאה היא תת שדה של המספרים המרוכבים – "שדה המספרים האלגבריים" – שאינו מכיל יצורים כמו \(\pi\) או \(e\) – והשניה היא לזרום עם הבניה הקיימת של הממשיים שממילא פותרת את הבעיה. אם הולכים בגישה השניה, ואחר כך מגדירים את המרוכבים באמצעות הממשיים, אני לא רואה מנוס מהוכחת המשפט על הפולינום ממעלה אי זוגית באופן שיתייחס ישירות למהות של המספרים הממשיים; אלא שהם יצורים אנליטיים לחלוטין (המחשה טובה לכך היא ההגדרה שלהם באמצעות סדרות קושי – "סדרות מתכנסות", שמתארות תהליך גבולי והתיאור שלהן הוא אינסופי) ולכן הוכחה אנליטית היא ככל הנראה בלתי נמנעת.

אוקיי, אז נפנוף הידיים הזה מאחורינו ואנחנו מצויידים בכל הכלים שאנחנו רוצים – נותר כעת להוכיח את המשפט היסודי באופן כללי, ובלי להשתמש עוד בטענות מאנליזה. ההוכחה תהיה, איך לא, באינדוקציה. אנחנו כבר יודעים לטפל בפולינום ממעלה אי זוגית; אם יש לנו פולינום שהמעלה שלו היא \(n\) נוכל לכתוב אותה גם כ-\(n=2^{k}\cdot m\) כאשר \(m\) הוא אי זוגי (כלומר, \(k\) אומר לנו "עד כמה \(n\) זוגי") והאינדוקציה תהיה על \(k\), כאשר הבסיס – \(k=0\) – כבר טופל.

אוקיי, אז נניח כי \(k\ge1\), ונתבונן ב-\(f\left(x\right)\) – הפולינום ממעלה \(n\) מעל \(\mathbb{R}\) שעליו אנו מדברים. אנחנו מתבססים על תוצאה בסיסית בתורת השדות – שקיים שדה הרחבה כלשהו של \(\mathbb{R}\) שמכיל את כל שורשיו של \(f\left(x\right)\). זו תוצאה שטרם הראיתי ואציג אותה בעתיד; היא אינה מסובכת במיוחד אך כן דורשת כמה וכמה הסברים מוקדמים. נסמן את השורשים הללו ב-\(\alpha_{1},\dots,\alpha_{n}\) (לא כולם בהכרח שונים זה מזה) ונתבונן בהרחבה של \(\mathbb{R}\) שמתקבלת מהוספת כל השורשים הללו ובנוסף לכך גם \(i\), כלומר ב-\(\mathbb{K=R}\left(\alpha_{1},\dots,\alpha_{n},i\right)\). זוהי הרחבת גלואה; הסיבה לכך היא שהרחבה על ידי הוספת כל שורשיו של פולינום אי פריק (מעל שדה ממציין אפס, דוגמת \(\mathbb{R}\)) היא הרחבת גלואה, ושבהינתן מספר הרחבות גלואה של אותו שדה אז ההרחבה הקטנה ביותר שמכילה את כולן היא עצמה גלואה (הרחבה שכזו נקראת "קומפוזיטום" – איני מכיר תרגום טוב לעברית). אם כן, \(K\) הוא שדה הרחבה של \(\mathbb{R}\) שמכיל את \(\mathbb{C}\) (כי הוא מכיל את \(\mathbb{R}\) שמורחב באמצעות \(i\), וזהו בדיוק \(\mathbb{C}\)) וגם את שורשי \(f\left(x\right)\).

עכשיו מגיעה חציית הנהר. בכל הוכחה יש את השלב הזה, שעד אליו הכל ברור, והחל ממנו הכל ברור (נניח), אבל הוא עצמו לחלוטין לא ברור ואף אחד לא מבין מאיפה הוא בא – זה שלב חציית הנהר. אני יכול רק לנחש שלפלס שבר עליו את הראש וניסה הרבה דברים לפני שהוא עבד. הרעיון הבסיסי הוא שהשאיפה שלנו היא למצוא זוג שורשים \(\alpha_{i},\alpha_{j}\) שגם סכומם וגם מכפלתם הם מרוכבים; בקרוב נראה מדוע זה מסיים את העניין. המטרה הזו היא מה שצריך להחזיק בראש כשחושבים על הבניה של לפלס.

ובכן, לכל מספר ממשי \(t\in\mathbb{R}\) אנחנו מגדירים פולינום \(L_{t}\) באופן הבא: \(L_{t}=\prod_{1\le i<j\le n}\left[x-\left(\alpha_{i}+\alpha_{j}+t\alpha_{i}\alpha_{j}\right)\right]\). במילים – זהו פולינום ששורשיו הם בדיוק האיברים מהצורה \(\alpha_{i}+\alpha_{j}+t\alpha_{i}\alpha_{j}\) לכל זוג אפשרי \(\alpha_{i},\alpha_{j}\) של שורשים של \(f\left(x\right)\). הפאנץ' הוא שלמרות שהפולינום הזה מכיל שורשים שהם יצורים די מפחידים, המקדמים שלו הם ממשיים. איך אפשר לראות את זה? באמצעות תורת גלואה – אם ניקח אוטומורפיזם כלשהו של \(K/\mathbb{R}\), תורת גלואה אומרת לנו שהאוטומורפיזם הזה מבצע בסך הכל פרמוטציה על השורשים של \(f\left(x\right)\) (יותר מכך – לכל גורם אי פריק של \(f\left(x\right)\) הוא מבצע פרמוטציה על השורשים של אותו גורם – אבל זה לא חשוב) כלומר, אנחנו בסך הכל "מערבבים" את השורשים \(\alpha_{i},\alpha_{j}\). אלא ש-\(L_{t}\) הוא פולינום סימטרי ביחס לשורשים הללו ולכן פרמוטציה שלהם לא משנה כלום, ולכן כל אוטומורפיזם של השדה משמר את הפולינום כמות שהוא.

מבלבל? בוודאי. הנה דוגמה פשוטה לפולינום סימטרי אחר. נניח שיש לנו שלושה שורשים, \(a,b,c\), ואנחנו מסתכלים על הפולינום \(\left(x-ab\right)\left(x-ac\right)\left(x-bc\right)\). עכשיו ניקח פרמוטציה על השורשים, נניח \(a\to b\), \(b\to c\), ו-\(c\to a\). מה נקבל? את הפולינום \(\left(x-bc\right)\left(x-ba\right)\left(x-ca\right)\). אמנם, הכתיב של הפולינום הזה שונה, אבל עם קצת משחק בחוק החילוף נקבל את הפולינום המקורי שלנו. זה אותו הרעיון גם כאן.

ובכן, כל אוטומורפיזם של \(K/\mathbb{R}\) משמר את \(L_{t}\), כלומר לא משנה את המקדמים שלו. מה המסקנה? מכיוון ש-\(K/\mathbb{R}\) היא הרחבת גלואה, אז כל איבר שכל האוטומורפיזמים של \(K/\mathbb{R}\) משמרים אותו שייך בהכרח ל-\(\mathbb{R}\). זו נקודה חשובה – אם ההרחבה לא הייתה גלואה, היא לא הייתה נכונה; איבר שהיה משתמר על ידי כל האוטומורפיזמים היה עשוי להיות שייך לשדה גדול יותר מאשר \(\mathbb{R}\), ואז לא היה יוצא לנו כלום מכל העסק. מכיוון שההרחבה כן הייתה גלואה, המסקנה היא שכל המקדמים של \(L_{t}\) שייכים ל-\(\mathbb{R}\). לכן אם \(L_{t}\) ממעלה כזו שמאפשרת לנו להפעיל עליו את הנחת האינדוקציה שלנו, נקבל שיש לו שורש מרוכב.

כמובן שכל ההוכחה הזו מהונדסת באופן זהיר כדי שהמעלה של \(L_{t}\) תקיים את התכונה הזו. מהי? ובכן, \(L_{t}\) מורכב ממכפלה של גורמים ממעלה ראשונה, כך שמעלתו שווה לכמות האיברים במכפלה, שהיא בדיוק מספר האפשרויות לבחור שני מספרים מתוך \(n\): \({n \choose 2}=\frac{n\left(n-1\right)}{2}=\frac{2^{k}m\left(2^{k}m-1\right)}{2}=2^{k-1}\left(m\left(2^{k}m-1\right)\right)=2^{k-1}m^{\prime}\), כאשר \(m^{\prime}\) הוא מספר אי זוגי. שימו לב: אנחנו לא טוענים כאן שהמעלה של \(L_{t}\) היא נמוכה יותר מ-\(n\), אלא שהיא "פחות זוגית מ-\(n\)". לכן ניתן להפעיל עליה את הנחת האינדוקציה, ולקבל של-\(L_{t}\) יש שורש מרוכב.

טוב, אז סיכום ביניים: לכל \(t\in\mathbb{R}\) קיימים \(1\le i<j\le n\) שעבורם \(\alpha_{i}+\alpha_{j}+t\alpha_{i}\alpha_{j}\in\mathbb{C}\). מכיוון שיש מספר סופי של זוגות \(i,j\) שכאלו אבל מספר אינסופי של \(t\in\mathbb{R}\) שניתן לבחור, קיימים \(i,j\) כך שגם \(\alpha_{i}+\alpha_{j}+t\alpha_{i}\alpha_{j}\in\mathbb{C}\) וגם \(\alpha_{i}+\alpha_{j}+s\alpha_{i}\alpha_{j}\in\mathbb{C}\), עבור \(t,s\in\mathbb{R}\).

מכאן זה כבר חישוב פשוט כדי לראות כי \(\alpha_{i}+\alpha_{j}\in\mathbb{C}\) וגם \(\alpha_{i}\alpha_{j}\in\mathbb{C}\); אם נחסר את שני האיברים שלמעלה נראה כי \(\left(t-s\right)\alpha_{i}\alpha_{j}\in\mathbb{C}\) ולכן ברור כי \(\alpha_{i}\alpha_{j}\in\mathbb{C}\), ולכן אם נחסר את \(t\alpha_{i}\alpha_{j}\) מ-\(\alpha_{i}+\alpha_{j}+t\alpha_{i}\alpha_{j}\) נקבל גם ש-\(\alpha_{i}+\alpha_{j}\in\mathbb{C}\). זה מוביל אותנו לשלב האחרון של ההוכחה, שמחזיר אותנו לבית הספר התיכון – נוסחאות וייטה.

נוסחאות וייטה (למשוואה ממעלה שנייה) אומרות שאם \(\alpha_{i},\alpha_{j}\) הם השורשים של פולינום מתוקן, אז המקדמים שלו הם בדיוק \(\alpha_{i}\alpha_{j}\) ו-\(-\left(\alpha_{i}+\alpha_{j}\right)\). בדיקה שלהן היא פשוטה: פשוט פותחים את הסוגריים של \(\left(x-\alpha_{i}\right)\left(x-\alpha_{j}\right)\) ומקבלים \(x^{2}-\left(\alpha_{i}+\alpha_{j}\right)x+\alpha_{i}\alpha_{j}\). מסקנה? \(\alpha_{i},\alpha_{j}\) הם השורשים של פולינום ממעלה שניה במקדמים מרוכבים. אבל עבור פולינום ממעלה שניה אפשר להוכיח באופן ישיר ששורשיו הם מרוכבים, פשוט באמצעות נוסחת השורשים: אם \(x^{2}+bx+c\) הוא פולינום ממעלה שניה במקדמים \(b,c\in\mathbb{C}\) אז \(\alpha_{1,2}=\frac{-b\pm\sqrt{b^{2}-4c}}{2}\) הם השורשים שלו, אבל אלו בבירור מספרים מרוכבים כי הם התוצאה של פעולות כפל, חיבור, חילוק, חיסור והוצאת שורש ריבועי על מרוכבים. הדבר היחיד שאולי אינו ברור הוא שהוצאת שורש ריבועי של מספר מרוכב מחזירה מספר מרוכב, אבל זה נובע באופן די מיידי מהתכונות הבסיסיות של מספרים מרוכבים (שורש של המספר המרוכב \(re^{i\theta}\) הוא \(\sqrt{r}e^{i\frac{\theta}{2}}\), שגם הוא מספר מרוכב).

זהו סוף ההוכחה, כי קיבלנו ש-\(\alpha_{i},\alpha_{j}\) – שורשיו של \(f\left(x\right)\), כזכור – הם מרוכבים. ייתכן ששניהם הם אותו איבר, ולכן המסקנה הסופית היא שיש ל-\(f\left(x\right)\) לפחות שורש מרוכב אחד, וזה בדיוק מה שרצינו.

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

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

המתמטיקה של RSA

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

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

שלב א' – השיטה באופן כללי

אם כן, נתחיל. שדה המשחק הבסיסי שלנו הוא החבורה הכפלית \(\mathbb{Z}^*_n\). לא אגיד בינתיים מה המשמעות המדוייקת של הדבר הזה – מה זו "חבורה", למה כפלית, ומה זה הסימון המופרע הזה. לצרכנו מספיק לדעת שזוהי קבוצת המספרים בתחום \(0\dots n-1\) (ואפילו לא כולם, אבל גם לזה לא ניכנס עכשיו), ושאנו מדברים על פעולת כפל "מודולרית" שלהם. כפל מודולרי פירושו שבהינתן \(a,b\) ששייכים לקבוצה, אנו כופלים אותם, אבל אז מחלקים את התוצאה ב-\(n\) ומתעניינים רק בשארית. למשל, אם \(a=3,b=5,n=9\) אז תוצאת הכפל המודולרי היא 6. שימו לב שחלוקה ב-\(n\) ולקיחת השארית תחזיר תמיד מספר שהוא בתחום \(0\dots n-1\) (מדוע?)

מערכת ההצפנה נבנית כך (נניח, בידי אליס): ראשית אליס בוחרת את \(n\) על ידי כך שהיא מגרילה שני מספרים ראשוניים \(p,q\) שהם בערך מאותו סדר גודל (של מאות ספרות, בימינו), וכופלת אותם: \(n=pq\). בניה שכזו מבטיחה שיהיה קשה למדי לפרק את \(n\) לגורמים ראשוניים (דרך נאיבית לראות את זה: שניים הוא המספר המינימלי האפשרי של גורמים למספר פריק). היתרון של אליס על פני כל שאר העולם הוא שהיא יודעת בדיוק מה הפירוק, פשוט כי כך היא בנתה את המספר.

כעת אליס מגרילה את ה"מנעול" שלה – מספר \(e\) כלשהו. יש עליו מגבלות והוא נבחר מתוך תחום מסויים (גדול מאוד) של מספרים, אבל על זה ארחיב בהמשך. כעת היא משתמשת בידע שלה על הפירוק של \(n\) כדי למצוא מספר נוסף \(d\), כך שמתקיימת התכונה הנאה הבאה:

לכל \(x\in\mathbb{Z}^*_n \) מתקיים \((x^e)^d=x\), כאשר החזקה מבוצעת מודולו \(n\) (זה בסך הכל כפל של \(x\) בעצמו מספר כלשהו של פעמים ולקיחת השארית כל הזמן). כלומר, העלאה בחזקת \(e\) והעלאה בחזקת \(d\) הן פעולות הופכיות זו לזו – האחת מבטלת את השנייה.

כעת אליס מפרסמת את \(e,n\) ושומרת את \(d\) סודי. כשבוב רוצה לשלוח לה הודעה, הוא מקודד אותה כמספר ב-\(\mathbb{Z}^*_n \), מעלה בחזקת \(e\), ושולח לאליס. מי שאינו יודע את \(d\) כנראה יתקשה לבטל את פעולת ההעלאה בחזקה הזו – אליס עושה זאת בקלות, באמצעות \(d\). זה הכל.

שתי הערות "פרקטיות" – ראשית, למרות שלכאורה מבצעים בהצפנה פעולות מטורפות – למשל, מחשבים את \(5345345345^{345341235785}\) מודולו \(89824342423\) וכולי (מספרים מומצאים ואולי לא תקינים!), הרי שיש שיטות לא מסובכות כל כך לעשות זאת מהר. חשוב לזכור שאולי מדובר על מספרים גדולים ומפחידים, אבל בפועל הם מיוצגים על ידי מספר לא גדול של ספרות (כדי לייצג מפתח טיפוסי בימינו נדרשות 2048 סיביות – פחות מ-300 בתים) וסיבוכיות הזמן שנדרשת לבצע פעולות כמו כפל או העלאה בחזקה (כשעושים אותן נכון) היא ביחס ישר למספר הספרות, לא לגודל המספר. אם מכפילים את מספר הספרות פי 2, כל מה שקורה הוא שמכפילים פי 2 את הזמן שלוקח לבצע פעולות חשבון עליהן (אבל מבחינת הגדלת טווח המספרים, זו הגדלה אסטרונומית – מעלים בריבוע בערך את המספר שמיייצג את הטווח הנוכחי).

ההערה השנייה היא שלא הכי ברור איזה הודעות כבר אפשר לקודד בתור מספרים ב-\(\mathbb{Z}^*_n\). בסופו של דבר, למרות שהטווח נראה גדול, הרי שאפשר בסך הכל לקודד רק מספר קטן של בתים (כאמור, פחות מ-300) לפני שנסתכן ב"התנגשויות". התשובה לכך היא שבדרך כלל משתמשים במפתח ציבורי כדי להצפין מפתח קטן שמשמש להצפנה סימטרית (בימינו גם הפרנואידים משתמשים רק במפתח של 32 בתים), ואת התקשורת האמיתית להצפין בצורה סימטרית (שהיא מהירה יותר וכנראה גם בטוחה יותר). בעזרת שיטות ההצפנה הסימטרית של ימינו, אפילו הודעות עצומות של מאות מגה בייט ניתנות להצפנה סבירה בעזרת מפתחות קטנים – כלומר, הצפנת המפתח הציבורי לא באה להחליף את הצפנת המפתח הסימטרי, אלא להשלים אותה.

יאללה, עכשיו למתמטיקה.

שלב ב' – איך בדיוק בוחרים את הערכים?

אמרתי שב-\(\mathbb{Z}^*_n\) אין את כל המספרים בטווח \(0\dots n-1\). לא אכנס כרגע לנימוק למה (כמובן, חוץ מהנימוק הטריוויאלי של: "על המספרים שמעיפים השיטה לא עובדת"), אבל כן אגיד את מי מעיפים: את כל מי שלא זר ל-\(n\). כלומר, כל מספר \(a\) כך שקיים איזה שהוא \(t>1\) שמחלק גם את \(a\) וגם את \(n\). דוגמה: 18 ו-16 אינם זרים, שכן 2 מחלק את שניהם גם יחד.

בחירת \(e\) מסובכת יותר. אנחנו בוחרים אותו כך שיהיה זר ל-\((p-1)(q-1)\). למה? כי זה הוא מספר האיברים שזרים ל-\(n\), ולכן הגודל של \(\mathbb{Z}^*_n\). למה צריך ש-\(e\) יהיה זר לגודל הזה? שוב, כי אחרת כל העסק לא היה עובד. שימו לב, אגב, ש-\(e=2\) אף פעם לא יהיה זר ל-\((p-1)(q-1)\), ולכן מה שמכונה "שיטת רבין" מתפצל ברגע זה מ-RSA.

דרך אחרת לכתוב את ה-\((p-1)(q-1)\) היא לכתוב \(\varphi(n)\). קרי: "פונקצית אוילר של \(n\)". הפונקציה מוגדרת בצורה פשוטה: עבור \(n\), היא שווה למספר המספרים הטבעיים שקטנים מ-\(n\) וזרים לו. תכונה חשובה שלה היא שהיא כפלית עבור מספרים זרים – כלומר, ש-\(\varphi(x)\varphi(y)=\varphi(xy)\) אם \(x,y\) זרים זה לזה. עוד דבר שקל להוכיח (נסו!) הוא שעבור ראשוני \(p\) מתקיים \(\varphi(p)=p-1\). מכאן ברור למה אכן \(\varphi(n)=(p-1)(q-1)\).

ואיך בוחרים את \(d\)? מחפשים ומוצאים מספר כך שיתקיים \(e\cdot d=1(\text{mod} \varphi(n))\). איך עושים זאת? בעזרת מה שמכונה "האלגוריתם האוקלידי המורחב". עוד – בהמשך.

שלב ג' – למה הערכים הללו טובים לנו?

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

המשפט אומר כך: אם \(G\) חבורה עם \(k\) איברים, אז \(x^a=x^b\) אם \(a\equiv b(\text{mod}k)\). אין צורך כרגע להיכנס לשאלה "מהי חבורה" – מספיק להזכיר ש-\(\mathbb{Z}^*_n\) היא חבורה.

אם כן, מה יש לנו? יש לנו חבורה עם \(k=\varphi(n)\) איברים. יש לנו \(e,d\) שמקיימים \(ed\equiv 1(\text{mod}k)\), ולכן יש לנו ש- \((x^e)^d=x^{ed}=x^1=x\). גמרנו.

שלב ד' – אז איך מוצאים את d?

האלגוריתם האוקלידי מתבסס על העובדה הבאה: המחלק המשותף הגדול ביותר של \(x,y\) הוא גם המחלק המשותף המקסימלי של \(y,r\), כאשר \(r\) היא השארית שמקבלים כשמחלקים את \(x\) ב-\(y\). תרגיל – להוכיח שזה נכון (רמז: מתקיים \(x=qy+r\) עבור \(q\) שלם כלשהו).

אם כן, האלגוריתם האוקלידי פשוט פועל כך (תוך הנחה ש-\(x\ge y\)):

  1. אם \(y\) מחלק את \(x\), החזר את \(y\).
  2. אחרת, חשב את \(r=x \% y\) (% הוא אופרטור נפוץ בשפות תכנות לציון שארית של חלוקה).
  3. הצב \(x:=y, y:=r\).
  4. חזור לשלב 1.

זה האלגוריתם האוקלידי הפשוט. האלגוריתם המורחב לא סתם מוצא את המחלק המשותף המקסימלי; הוא גם מוצא \(a,b\) כך ש-\(ax+by=d\) (כש-\(d\) הוא המחלק המדובר – זהירות, לא להתבלבל עם \(d\) שלנו, שעליו נדבר אחר כך).

הרעיון הוא כזה: נניח שגילינו ש-\(x=qy+r\), אז בפרט \(r=x-qy\). כלומר, אפשר להציג את \(r\) בתור צירוף לינארי של \(x,y\). זה כך גם בהמשך הדרך: אם \(x\prime=a_1x+b_1y\) ו-\(y\prime=a_2x+b_2y\) הם המשתנים של האיטרציה הנוכחית שלנו, אז:

\(r\prime=x\prime-qy\prime=(a_1x+b_1y)-(qa_2x+qb_2y)=(a_1-qa_2)x+(b_1-qb_2)y\)

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

בסיכומו של דבר, מה שיקרה הוא הדבר הבא: מכיוון ש-\(e\) נבחר במפורש כך שיהיה זר ל-\(\varphi(n)\), אז המחלק המשותף המקסימלי שלהם הוא 1, כלומר קיימים \(a,b\) כך ש-\(ae+b\varphi(n)=1\) – ואנחנו יודעים למצוא אותם די מהר. למה זה טוב? כי אם נסתכל על המשוואה הזו מודולו \(\varphi(n)\), אנחנו נקבל \(ae\equiv 1(\text{mod}\varphi(n))\) (למה?) ולכן \(d\) שרצינו הוא בעצם המקדם \(a\).

שלב ה' – אז למה המשפט ה"עמוק" נכון?

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

  1. סגירות: אם \(x,y\in G\) אז גם \(x\cdot y\in G\)
  2. אסוציאטיביות: \(x\cdot(y\cdot z)=(x\cdot y)\cdot z\)
  3. קיום איבר יחידה: קיים איבר \(1\in G\) כך ש-\(x\cdot 1=1\cdot x=x\).
  4. קיום איבר הופכי: לכל \(x\in G\) קיים \(x^{-1}\in G\) כך ש-\(x\cdot x^{-1}=x^{-1}\cdot x=1\).

זה הכל.

דוגמאות לחבורות: המספרים הרציונליים בלי 0, המספרים השלמים כשפעולת ה"כפל" היא בעצם חיבור, וגם \(\mathbb{Z}^*_n\). הוכחה שאלו אכן חבורות – עזבו. לא עכשיו.

ועכשיו, מה אומר משפט לגראנז'? שבחבורה עם \(n\) איברים, כל תת קבוצה של החבורה שבעצמה מקיימת את ארבע האקסיומות של החבורה (לדבר כזה קוראים "תת-חבורה") מכילה מספר איברים שמחלק את \(n\). למשל, אם יש לנו חבורה מסדר 6 ("סדר" של חבורה הוא מילה אחת ל"מספר האיברים שבחבורה"), תת החבורות היחידות האפשריות הן מסדר 1 (תת החבורה שמכילה רק את היחידה), 2, 3 ו-6 ("תת" החבורה שהיא בעצם החבורה עצמה). במילים אחרות – לא ייתכן שיש תת חבורות מסדר 4 או 5.

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

איך משפט לגראנז' מתקשר למה שאנחנו עוסקים בו? בצורה הבאה. אם יש לנו איבר \(x\in G\) בחבורה מסדר \(n\), נתחיל להסתכל על האיברים \(x,x^2,x^3\) וכן הלאה. מכיוון שיש אינסוף חזקות אפשריות של \(x\) ורק מספר סופי של איברים בחבורה, עולה מכך (בגלל עיקרון שובך היונים) שחייב להתקיים \(x^a=x^b\) עבור איזה שהם \(a,b\) טבעיים. מזה נובע שמתקיים \(x^a\cdot x^{-b}=1\), או בסימון אחר: \(x^{a-b}=1\) (צריך להוכיח שכל מה שאני עושה כאן נכון – כמובן שלא אעשה זאת כאן). במילים אחרות – קיימת חזקה של \(x\) שמעבירה אותו ל-1. לחזקה הטבעית הקטנה ביותר שמקיימת זאת קוראים הסדר של \(x\). הקשר ל"סדר של חבורה" אינו מקרי, כמובן; הסדר של \(x\) הוא בדיוק הסדר של תת החבורה שמקבלים על ידי לקיחת כל החזקות שלו (למה? ולמה בעצם כל החזקות הן חבורה?)

אם כן, על פי לגראנז', הסדר של \(x\) מחלק את סדר החבורה, \(n\). על כן, \(x^n=1\) (למה?) וזה כבר מביא אותנו ממש אל מה שרצינו להוכיח. בואו ניזכר מה זה היה: אם \(G\) חבורה עם \(n\) איברים, אז \(x^a=x^b\) אם \(a\equiv b(\text{mod}n)\)

אם כן, נניח כי \(a\equiv b(\text{mod}n)\). מה זה אומר? זה אומר שקיים \(t\) כלשהו כך ש-\(a-b=t\cdot n\). על כן, \(x^{a-b}=x^{tn}=(x^n)^t=1^t=1\). על ידי העברת אגף מקבלים \(x^a=x^b\), וזהו זה.

שלב ו' – אז למה משפט לגראנז' נכון?

עלה בידי מישהו/מישהי לשרוד עד עכשיו?

ההוכחה של משפט לגראנז' אינה מסובכת, אך גם היא דורשת קצת עבודה מוקדמת. הדרך הנכונה ללמוד אותה היא באמצעות ספר, ואני סתם אתן רמז: בהינתן חבורה \(G\) מסדר \(n\) ותת חבורה \(H\) שלה, הביטו ביחס השקילות המוגדר על ידי "\(x\) שקול ל-\(y\) אם ורק אם \(xy^{-1}\in H\). הוכיחו שזה אכן יחס שקילות, ולכן משרה חלוקה של \(G\), ושכל מחלקת שקילות מכילה אותו מספר של איברים (מחלקת שקילות שכזו מכונה "קוסט"). למה זה מסיים את ההוכחה?

על הבעייה הלא טריוויאלית של זיהוי תכונה לא טריוויאלית

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

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

ראשית, מהן "תכונות" של קבוצות של מספרים? למשל, "1 שייך לקבוצה" היא תכונה. "כל מספר בקבוצה הוא זוגי" היא תכונה. "קיימים בקבוצה שלושה מספרים x,y,z כך ש-\(x^3+y^3=z^3\)" היא תכונה. הבנתם את העיקרון. הבעיה היא שההגדרות הללו של תכונות הן מופשטות יחסית – קשה "לעבוד" איתן – ולכן אציג הגדרה אלטרנטיבית, שנראית די טיפשית במבט ראשון: תכונה של קבוצות טבעיים היא חלוקה של כל קבוצות הטבעיים (במקרה שלנו, רק של הקבוצות שניתן לזהות בידי מכונת טיורינג) לשתי מחלקות – מחלקת כל הקבוצות שמקיימות את התכונה, ומחלקת כל הקבוצות שלא מקיימות את התכונה.

למשל, התכונה "1 שייך לקבוצה" היא בעצם חלוקה של כל קבוצת הטבעיים (שקיימת מכונת טיורינג שמזהה) לשתי מחלקות – במחלקה הראשונה יש, בין היתר, את הקבוצות \(\{1\}, \{1,2\},\{1,2,3,\dots\}\) וכן הלאה, ובמחלקה השניה את \(\{2\}, \{2,14\},\{2,3,4,\dots\}\) וכדומה.

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

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

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

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

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

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

אנחנו רוצים לפתור את בעיית העצירה, כלומר לקבל קלט של מכונה M ואיזשהו מספר x ש-M אמורה לרוץ עליו. הרעיון הוא להשתמש ב-M בתור "מסננת" עבור A. אנו יוצרים מכונה חדשה, B, שבנויה כך: היא מקבלת קלט כלשהו a, ואז עושה שני דברים בזה אחר זה:

  1. קודם כל היא מריצה את M על x. כלומר, היא מתעלמת לגמרי מ-a (הקלט שלה) בשלב זה.
  2. אחרי ש-M מסיימת את ריצתה, היא מריצה את A על a ועונה כמו A.

מה הלך כאן?

נניח לרגע ש-M עוצרת על x. אז כל השלב הראשון הוא סתם בזבוז זמן שלא משפיע בכלום על החישוב. מייד אחרי שייגמר, B תתנהג בדיוק כמו A על a. כלומר, אם M עוצרת על x הרי שהקבוצה ש-B מזהה היא בדיוק אותה הקבוצה ש-A מזהה – ולכן הקבוצה ש-B מזהה היא בעלת התכונה S.

אבל מה קורה אם M לא עוצרת על x? במקרה הזה, B נשארת תקועה בשלב 1 לנצח. היא לעולם לא תגיע לשלב 2 ולעולם לא תעצור. לכן B לא מקבלת את a, וזאת בלי שום תלות בזהות של a – כלומר, הקבוצה ש-B מזהה היא הקבוצה הריקה – והרי הנחנו (בלי הגבלת הכלליות…) שהקבוצה הריקה אינה בעלת התכונה הזו.

בקיצור, התשובה לשאלה "האם הקבוצה ש-B מקבלת היא בעלת התכונה S" זהה לתשובה לשאלה "האם המכונה M עוצרת על x". לכן, כל מה שצריך לעשות הוא להריץ את האלגוריתם הקסום שפותר את בעיית ההכרעה עבור S על המכונה B (שאותה קל לבנות בהינתן A, M, x), לענות כמוהו, וסיימנו.

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

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