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

אבל באופן כללי מהר מאוד מישורים פרוייקטיביים הופכים להיות משהו מסובך - אנחנו צריכים דרכים יותר יעילות לתאר אותם. בפוסט הזה נראה דרכים כאלו.
בפוסט הקודם נתתי אינטואיציה די הזויה לאיך בונים מישור פרוייקטיבי מתוך המישור האוקלידי הרגיל, \(\mathbb{R}^{2}\) : לקחנו את המישור הזה והרחבנו אותו על ידי הוספת נקודות "באינסוף". לכל אוסף של ישרים שכולם מקבילים זה לזה, הוספנו נקודה חדשה אחת באינסוף. בנוסף, הוספנו עוד ישר אחד חדש שעובר בדיוק בכל הנקודות באינסוף שהוספנו. התוצאה היא משהו שקל לראות שמקיים את שלוש התכונות של מרחב פרוייקטיבי, אבל נשמע מאוד מעורפל מבחינה פורמלית. אז בפוסט הזה אני הולך להיות הרבה יותר פורמלי, ואני הולך לתת כמה וכמה נקודות מבט שונות על מה שקורה פה, ואני מקווה שבסוף שלו יהיה ברור שהכל פה תקין לגמרי, מתמטית - וגם יהיה ברור איך אפשר לחשב בפועל בצורה פשוטה יחסית אובייקט כמו המישור של פאנו או הקלפים של דאבל.
שוד ושבר
אוקיי, אז אנחנו רוצים בניה פורמלית של מישורים פרוייקטיביים. ב"פורמלית" אני מתכוון שלא נמציא אובייקטים יש מאין ולא נשתמש במושגים עמומים כמו "נקודה באינסוף" אלא ניקח אובייקטים מתמטיים סטנדרטיים ונשתמש בהם בצורה סטנדרטית והופס, נקבל מישור פרוייקטיבי. הנה דוגמא לאיך בונים דברים בצורה "פורמלית": כשהייתי בבית הספר נדהמתי לגלות שיש משהו מוזר שנקרא "מספרים מרוכבים" שמתקבלים מכך שלוקחים את המספרים הממשיים הרגילים \(\mathbb{R}\) ומוסיפים להם "איבר חדש" \(i\) בעל התכונה ש-\(i^{2}=-1\), מה שכמובן שובר את כל חוקי המתמטיקה המוכרים לי. זה היה מזעזע. גניבת דעת. שוד דעת, אפילו. זה נראה היה שסתם עושים במתמטיקה מה שמתחשק. אבל בפועל, יש שלל דרכים פורמליות לבצע את זה, והנה הדרך הכי פשוטה שרלוונטית לענייננו.
הזכרתי קודם את "המישור האוקלידי הרגיל", \(\mathbb{R}^{2}\) . האיברים שלו הם בסך הכל זוגות סדורים \(\left(x,y\right)\) של שני מספרים ממשיים; אני מניח שכולנו בסדר עם הקיום של זוגות סדורים (הנה פוסט שמסביר איך יוצרים אותם) ושכולנו בסדר עם הקיום של מספרים ממשיים (אתם לא צריכים להיות בסדר עם זה! הם ממש מסובכים! זה הרבהי ותר גרוע מהמרוכבים! בכל מקרה הנה סדרת פוסטים על זה). עכשיו, אפשר לעשות מה שבא לנו עם אובייקטים כאלו, למשל להגדיר עליהם חיבור "בדרך הטבעית", כלומר \(\left(a,b\right)+\left(c,d\right)=\left(a+c,b+d\right)\) . אפשר גם להגדיר כפל בדרך "קצת מוזרה": \(\left(a,b\right)\cdot\left(c,d\right)=\left(ac-bd,ad+bc\right)\) . מה קורה? מתברר שעם החיבור והכפל הללו מקבלים מבנה אלגברי יפה מאוד, עם תכונות כמו חוק החילוף, הפילוג והקיבוץ, מה שנקרא במתמטית "שדה". כדי לפשט את הסימונים, במקום לכתוב \(\left(a,b\right)\) כותבים \(a+bi\), כלומר הסימבול המסתורי \(i\) הוא ייצוג קומפקטי של \(\left(0,1\right)\) והפלא ופלא, על פי כללי הכפל המוזרים באמת מקבלים \(i^{2}=-1\) והכל עובד כמו קודם. רק שעכשיו אי אפשר להגיד "זה לא קיים" בלי לפסול את הקיום של אובייקט כמו זוגות של מספרים ממשיים.
שימו לב: מה שקיבלנו, הקבוצה \(\mathbb{C}\) של המרוכבים, היא לא בדיוק אותו דבר כמו המישור האוקלידי \(\mathbb{R}^{2}\), בשני מובנים - אחד פורמלי ואחד מהותי יותר. במובן הפורמלי, \(\mathbb{C}\) זה לא סתם אוסף של זוגות סדורים של מספרים אלא זה משהו שמגיע עם מבנה אלגברי שמוגדר עליו - פעולות חיבור וכפל שהן שונות מהפעולות שיש ב-\(\mathbb{R}^{2}\) . במובן היותר מהותי - \(\mathbb{C}\) זה קונספט שאפשר להגיע אליו בשלל דרכים שונות. להגיד "לקחנו את \(\mathbb{R}^{2}\) והגדרנו פעולות" זו דרך אחת לתאר את המימוש של \(\mathbb{C}\), אבל גם להגיד (כמו שאני עושה בפוסט הזה) "לקחנו את חוג הפולינומים במקדמים ממשיים \(\mathbb{R}\left[x\right]\) וחילקנו אותו באידאל שנוצר על ידי \(x^{2}+1\) לקבלת חוג המנה \(\mathbb{R}\left[x\right]/\left\langle x^{2}+1\right\rangle\) " זו דרך לתאר את המימוש של אותו \(\mathbb{C}\) בדיוק - האובייקטים שמתקבלים בצורה הזו הם לא אותו דבר פורמלית, אבל הם "אותו דבר עד כדי שינוי שם" (יש במתמטיקה דרכים פורמליות יותר לתאר עניינים כאלו אבל זה ממש לא חשוב כרגע).
הבניה הזו הרגיזה אתכם? אולי בא לכם להגיד "אבל מספרים מרוכבים בכל זאת לא קיימים!!!!!"? אוקיי, אז הנה עוד מקרה דומה: שברים. רק שבניגוד למספרים המרוכבים הפשוטים והחמודים, שברים הם הרבה יותר בעייתיים. בואו נדבר על זה (וכל זה יהיה שימושי למישורים פרוייקטיבים עוד מעט, מבטיח!).
בניגוד למרוכבים, שברים הם משהו שאנחנו רגילים אליו מחיי היומיום, וגם יודעים לעבוד איתו לא רע אפילו אם מתמטיקה זה לא התחום שלנו. אם נצטרך לחשב בעצמנו כמה זה \(\frac{1}{2}+\frac{2}{3}\) נוכל כנראה לשלוף מהזכרון את זה שצריך לעבור למכנה משותף, ואז כופלים את המונה של כל מספר במה שצריך כדי להגיע למכנה המשותף ובסך הכל יוצא \(\frac{1}{2}+\frac{2}{3}=\frac{3}{6}+\frac{4}{6}=\frac{7}{6}\) . אפשר לכתוב את חוק החיבור הזה באופן כללי עם סימבולים:
\(\frac{a}{b}+\frac{c}{d}=\frac{ad+bc}{bd}\) ואפשר גם לכתוב כפל, הוא פשוט יותר:
\(\frac{a}{b}\cdot\frac{c}{d}=\frac{ac}{bd}\) עכשיו, מה זה בעצם "שבר"? כמו שאנחנו רואים זה משהו שנראה כמו \(\frac{a}{b}\) כש-\(a,b\) הם שניהם מספרים שלמים כלומר, \(1,2,3,\ldots\) או \(-1,-2,-3,\ldots\) או אפס... אבל רגע, אסור שיהיה אפס במכנה כי אסור לחלק באפס! (או שמא...? יש לי פוסט על זה). אז פורמלית,שבר הוא יצור מהצורה \(\frac{a}{b}\) כאשר \(a,b\in\mathbb{Z}\) (ה-\(\mathbb{Z}\) הוא הסימון הפורמלי למספרים השלמים) ו-\(b\ne0\) . אבל כתבתי פה "יצור מהצורה". מה זה אומר בכלל?! זה לא ביטוי פורמלי. מצד שני, די ברור מה יש לנו פה - יש לנו זוג של מספרים, בדיוק כמו קודם. אז אפשר לומר ששבר הוא זוג \(\left(a,b\right)\in\mathbb{Z}^{2}\) עם הדרישה הנוספת \(b\ne0\) ועם פעולות חיבור וכפל שמוגדרות כך:
-
\(\left(a,b\right)+\left(c,d\right)=\left(ad+bc,bd\right)\)
-
\(\left(a,b\right)\cdot\left(c,d\right)=\left(ac,bd\right)\)
שימו לב שזה די מזכיר את מה שעשינו עם מרוכבים, רק שאצל מרוכבים החיבור היה "בדרך הטבעית" ואילו כאן הכפל הוא "בדרך הטבעית". אצל מרוכבים הכפל היה "מוזר" ואילו עכשיו החיבור הוא "מוזר" - אבל הוא לא באמת מוזר, נכון? ראינו לפני רגע שהוא מגיע מהכללים המוכרים של מכנה משותף וכאלה. במילים אחרות - ההגדרה הפורמלית אולי נראית כאילו היא באה משום מקום, אבל יש לה מטרה ספציפית - לתאר את האובייקט שאנחנו כבר מכירים אינטואיבית, בצורה לא פורמלית.
אם כן, הכל די פשוט, למה אמרתי ששברים הם יותר בעייתיים? כי לצערי עוד לא סיימנו. הנה הבעיה: השבר \(\frac{1}{2}\) מיוצג על ידי הזוג \(\left(1,2\right)\) והשבר \(\frac{2}{4}\) מיוצג על ידי הזוג \(\left(2,4\right)\), אבל \(\frac{1}{2}\) ו-\(\frac{2}{4}\) הם בדיוק אותו מספר - "חצי". לעומת זאת, \(\left(1,2\right)\) ו-\(\left(2,4\right)\) הם לא אותו דבר מבחינה פורמלית - הם זוגות של מספרים שונים. אז מה עושים? את המקבילה הפורמלית של להגיד "נו בחייכם הם אותו דבר וזהו". הרעיון הוא ששבר לא יהיה זוג קונקרטי אחד של מספרים אלא קבוצה של זוגות כאלו. למשל \(\frac{1}{2}\) יהיה הקבוצה \(\left\{ \left(1,2\right),\left(2,4\right),\left(3,6\right),\ldots\right\}\) שגם מכילה זוגות כמו \(\left(-1,-2\right)\) וכדומה. באופן קצת יותר מדויק מה שעושים הוא להגדיר יחס שקילות על הזוגות - נאמר ש-\(\left(a,b\right)\) שקול אל \(\left(c,d\right)\) אם \(ad=bc\) (למה? כי תחשבו מתי מתקיים \(\frac{a}{b}=\frac{c}{d}\) שחושבים על שברים באופן אינטואיבי) ואז לוקחים קבוצות של איברים שכולם שקולים זה לזה - דבר כזה נקרא מחלקת שקילות - וכל קבוצה כזו היא אחד מהשברים. נהוג לבחור "נציג" לכל קבוצה שהוא מה שעובדים איתו בפועל - מקובל לבחור \(\frac{a}{b}\) כך ש-\(a\gt 0\) ובנוסף \(a,b\) זרים, כלומר אין להם מחלק משותף שהוא מספר שלם גדול מ-1. ההגדרה הזו יוצרת סיבוך טכני כלשהו - הגדרנו את פעולות החשבון עבור זוגות בודדים, לא עבור קבוצות - כדי שזה יעבוד עבור קבוצות צריך להראות שלא משנה איזה נציג בוחרים לכל קבוצה לצורך פעולת החיבור, תמיד מקבלים את אותו דבר. אבל זה עובד והכל טוב.
אלו היו דוגמאות של בניות קונקרטיות ופשוטות יחסית של אובייקטים מתמטיים סטנדרטיים. ומה עושים עבור מישור פרוייקטיבי? ובכן, פחות או יותר את אותו הדבר.
איך בונים את המישור הפרוייקטיבי הממשי
אני כרגע רוצה לבנות את המישור הפרוייקטיבי הממשי \(\mathbb{RP}^{2}\), כלומר את ההרחבה של \(\mathbb{R}^{2}\) שהזכרתי בתחילת הפוסט. את המרוכבים ואת השברים בניתי בעזרת זוגות של מספרים, ואילו הפעם אני אשתמש בשלשות של מספרים. ספציפית, אני מסתכל על הקבוצה \(\mathbb{R}^{3}\backslash\left\{ \left(0,0,0\right)\right\}\) שכוללת את כל השלשות \(\left(a,b,c\right)\) של מספרים ממשיים חוץ מהשלשה הקונקרטית שכולה אפסים, \(\left(0,0,0\right)\) . על האוסף הזה אני מגדיר יחס שקילות: נאמר ש-\(\left(a,b,c\right)\sim\left(x,y,z\right)\) אם קיים מספר ממשי \(\lambda\in\mathbb{R}\) כך ש-\(\left(x,y,z\right)=\left(\lambda a,\lambda b,\lambda c\right)\) . עכשיו אני אסתכל על אוסף מחלקות השקילות שמתקבל מהיחס הזה, והופס, זהו, אלו כל הנקודות של המרחב \(\mathbb{RP}^{2}\) !
כדי לקבל אינטואיציה על "איך זה נראה" כדאי לחשוב על קווים ישרים אבל לא במישור, אלא במרחב התלת-ממדי. באופן כללי, קו תלת-ממדי שעובר דרך ראשית הצירים \(\left(0,0,0\right)\) ודרך נקודה \(\left(a,b,c\right)\) כלשהי ששונה מ-\(\left(0,0,0\right)\) יכיל את כל הנקודות \(\left(\lambda a,\lambda b,\lambda c\right)\) . הנה למשל איך נראה הקו שעובר דרך ראשית הצירים והנקודה \(\left(1,1,0\right)\), כלומר הקו \(\left\{ \left(\lambda,\lambda,0\right)\ |\ \lambda\in\mathbb{R}\right\}\) :

לי אישית מאוד קשה עם תלת ממד, אבל לא כזה קשה להבין את הדיאגרמה הזו. דמיינו שלוקחים את המישור הרגיל עם צירי ה-\(xy\) שלו ומשטחים אותו על שולחן, ב"גובה" 0. אלו צירי ה-\(x,y\) שאנחנו רואים באיור. הציר השלישי, \(z\), מוסיף גובה. כשאני כותב קואורדינטה \(\left(x,y,z\right)\), המספר השלישי בה הוא מה שמתאים לגובה. הנקודה \(\left(1,1,0\right)\), אם כן, היא בגובה 0 - לכן הקו האדום שבתמונה הוא בעצם קו שחי במישור הדו ממדי "הרגיל" - זה הקו שעובר בזווית של 45 מעלות ביחס לכיוון החיובי של ציר \(x\) .
בואו נוסיף עכשיו שני קווים שכן משתמשים גם בציר \(z\) :

הקו הירוק שהוספתי (זה שהכי גבוה בצד ימין) הוא הקו שעובר דרך \(\left(2,1,2\right)\) (כלומר, נותן יותר דגש לצירים \(x,z\) ופחות לציר \(y\) ). הקו השחור עובר דרך \(\left(-1,0,1\right)\) (ולכן לא "משתמש" בציר \(y\) ). כל שלושת הישרים (חוץ מראשית הצירים שלא נכללת בהם) הללו הם נקודות במישור הפרוייקטיבי שאני מגדיר. זה מבלבל, אבל זכרו - הישרים הללו הם בסך הכל אובייקט פורמלי שאנחנו מעניקים לו משמעות חדשה, כמו שזוגות של ממשיים הפכו פתאום למספרים מרוכבים.
יש עוד דרך לראות את זה, שהיא לטעמי הדרך הטובה ביותר להבין איך ההגדרה הפורמלית שנתתי מתקשרת אל קשקושי "הנקודות באינסוף". היא דורשת מאיתנו להעמיק עוד קצת בגאומטריה תלת ממדית, אבל אני חושב שזה שווה את זה. בתור התחלה, בואו נוסיף לאיור למעלה גם את ספירת היחידה. "ספירה" (Sphere) היא כדור, אבל בלי התוכן שלו, רק המעטפת (פורמלית - כל הנקודות במרחב שבדיוק במרחק 1 מראשית הצירים). ככה זה נראה:

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

זה מתחיל להזכיר עב"ם בצורה חשודה... ציירתי את החצי העליון של הספירה בצורה אטומה שכזו, ואת השפה שלה ציירתי עם קו אדום מודגש. השפה הזו היא כל הנקודות שבגובה \(0\) ובמרחק 1 מראשית הצירים, למשל \(\left(\frac{\sqrt{2}}{2},\frac{\sqrt{2}}{2},0\right)\) שראינו קודם - זה למעשה מעגל היחידה הרגיל במישור \(xy\) . הסיבה שהשפה הזו דורשת טיפול מיוחד היא שכל ישר שחותך אותה, כמו \(\left(\lambda,\lambda,0\right)\) שראינו קודם, חותך אותה פעמיים - הישר שעובר דרך \(\left(\frac{\sqrt{2}}{2},\frac{\sqrt{2}}{2},0\right)\) עובר גם דרך \(\left(-\frac{\sqrt{2}}{2},-\frac{\sqrt{2}}{2},0\right)\) . לכן, גם אם אנחנו נוקטים בגישת "המישור הפרוייקטיבי הוא חצי הספירה העליונה", אנחנו צריכים להכניס סוג של יחס שקילות ש"ידביק ביחד" נקודות כאלו. אני לא מציג את הבניה הזו בצורה פורמלית עד הסוף, אבל אפשר לעשות את זה גם פורמלית אם רוצים.
מה שטוב בבנייה הזו הוא שהיא מתקשרת מצוין אל המחשבה על המישור הפרוייקטיבי בתור הרחבה של \(\mathbb{R}^{2}\) . מה זה \(\mathbb{R}^{2}\) ? אני אישית חושב עליו בתור דף נייר מרובע שהוא "אינסופי בארבעת הכיוונים". למה? כי ככה בדרך כלל מציירים מערכת צירים, בתוך ריבוע שכזה. אבל באותה מידה היה אפשר לצייר אותה בתור עיגול ואז לחשוב על \(\mathbb{R}^{2}\) שהוא "אינסופי בכל הכיוונים". מה הכוונה באינסופי? שאפשר ללכת וללכת וללכת ולעולם לא להגיע אל ה"שפה" שלו. עכשיו, בואו נסתכל על חצי הספירה שלנו ונסיר ממנה את השפה. מה קיבלנו? אובייקט שכרגע הוא די כיפתי אבל אם נשטח אותו על הרצפה נקבל עיגול "אינסופי בכל הכיוונים". כלומר חצי הספירה ללא השפה היא במובן מאוד מובהק \(\mathbb{R}^{2}\) .
התנגדות אחת שאפשר להעלות לזה היא שהכיפה היא מאוד לא אינסופית - הרי אנחנו רואים שהיא תחומה באיזור סופי של המרחב. דרך אחת לעזור לאינטואיציה בנקודה הזו היא לחשוב על המספרים הממשים והקטע הפתוח \(\left(0,1\right)\) . הקטע הפתוח הזה הוא חסום - הוא לא נמשך עד אינסוף. אבל יש התאמה חח"ע ועל (ורציפה, למי שדברים כאלו חשובים לו) בין הקטע הזה ובין \(\left(-\infty,\infty\right)\) - כאילו אנחנו "מותחים" את הקטע עד אינסוף. מנקודת המבט של מישהו שחי בתוך \(\left(0,1\right)\), הקטע הזה מרגיש כמו \(\left(-\infty,\infty\right)\) כל עוד אנחנו לא מתעניינים בשאלות קונקרטיות של מרחק (במתמטית: \(\left(-\infty,\infty\right)\) זה לא אותו דבר כמו \(\left(0,1\right)\) מבחינה גאומטרית אבל כן מבחינה טופולוגית ).
עכשיו, אם קיבלנו את זה שהכיפה היא \(\mathbb{R}^{2}\), אז השפה היא הנקודות שהוספנו "באינסוף", והקטע הזה שצריך "להדביק ביחד" זוגות של נקודות אינסופיות מתאים בדיוק למה שהזכרתי בפוסט הקודם, של פסי הרכבת שבהם אם מסתכלים קדימה ואחורה רואים שתי נקודות אינסופיות שהפסים נפגשים בהן, וזו צריכה להיות אותה נקודה.
בואו נראה איך זה מתחבר לפורמליזם שראינו. ראשית, בואו ניזכר לרגע בבניה שהראיתי של המרוכבים, \(\mathbb{C}\) . בבניה הזו, המספרים הממשיים הרגילים הם לא איברים של \(\mathbb{C}\) מבחינה פורמלית כי האיברים של \(\mathbb{C}\) הם זוגות של ממשיים, לא ממשיים בודדים; אבל אפשר לחשוב על הקבוצה \(\left\{ \left(a,0\right)\ |\ a\in\mathbb{R}\right\}\) כאילו היא "עותק של הממשיים שחי בתוך \(\mathbb{C}\) ". הקבוצה הזו מתנהגת כמו מספרים ממשיים בכל מובן רלוונטי, למשל ביחס לפעולות החיבור והכפל. במובן הזה חושבים על הממשיים כאילו הם ממש איברים של \(\mathbb{C}\) .
דבר דומה יש לנו עם המישור הפרוייקטיבי \(\mathbb{RP}^{2}\) . פורמלית, האיברים שלו הם מחלקות שקילות של נקודות ב-\(\mathbb{R}^{3}\), הם לא נקודות ב-\(\mathbb{R}^{2}\), אבל בואו נסתכל על כל המחלקות שיש להן נציג מהצורה \(\left(x,y,1\right)\) . אפשר לחשוב על קבוצת כל המחלקות הללו בתור \(\mathbb{R}^{2}\) כי לכל \(\left(x,y\right)\in\mathbb{R}^{2}\) יש נציג מתאים שכזה. המחלקות הללו הן בדיוק הישרים שעוברים דרך הכיפה (להבדיל מהשפה שלה).
מי עוד נמצא ב-\(\mathbb{RP}^{2}\) ? אם \(\left(x,y,z\right)\) היא נקודה כללית ב-\(\mathbb{R}^{3}\) ו-\(z\ne0\) אז אפשר לחלק ב-\(z\) ולקבל שהנקודה \(\left(\frac{x}{z},\frac{y}{z},1\right)\) שקולה אל \(\left(x,y,z\right)\) . לכן נשאר לנו "לטפל" רק בנקודות מהצורה \(\left(x,y,0\right)\) (אלו בדיוק הנקודות שמגדירות ישרים שעוברים דרךהלשפה של הכיפה). גם פה אפשר לנקוט באותו הטריק: אם \(y\ne0\) נחלק בו ולכן מספיק להסתכל על הנקודות מהצורה \(\left(x,1,0\right)\) - זה נראה כמו עותק של \(\mathbb{R}\) (או, אם חושבים על השפה של הכיפה, זה נראה כמו חצי העיגול העליון של השפה ללא הנקודות שנוגעות בציר \(x\) ). זה משאיר רק את הנקודות מהצורה \(\left(x,0,0\right)\) וכל הנקודות הללו הן על ישר אחד (הישר שאנחנו מכנים "ציר \(x\) "), אז הדבר הזה נראה כמו עותק של נקודה בודדת.
האינטואיציה שלנו למישור הפרוייקטיבי הייתה "יש לנו את המישור הרגיל ואז מוסיפים לו המון נקודות באינסוף". אפשר לקחת את החשיבה הזו גם למימד יותר נמוך - נניח שיש לנו רק את הישר הממשי, \(\mathbb{R}\) . אפשר לדמיין שאנחנו מרחיבים אותו על ידי הוספת נקודה בודדת באינסוף, שאליה שני ה"קצוות" של \(\mathbb{R}\) הולכים. הדבר הזה הוא לא מישור פרוייקטיבי, אבל אפשר לכנות אותו "הישר הפרוייקטיבי" ולסמן אותו ב-\(\mathbb{RP}\) . אפשר ממש לסמן \(\mathbb{RP}=\mathbb{R}\cup\left\{ \infty\right\}\) או משהו. ועכשיו, מה שזה עתה על חלוקת תפקידי הנקודות ב-\(\mathbb{RP}^{2}\) אומרת לנו שאפשר לכתוב משהו כמו \(\mathbb{RP}^{2}=\mathbb{R}^{2}\cup\mathbb{RP}\) וזה יהיה הגיוני. מה שיפה הוא שאפשר להכליל את זה עוד ועוד - אפשר להגדיר מרחבים פרוייקטיביים ממימד כלשהו \(n\) בתור "המרחב הרגיל ממימד \(n\), ועוד מרחב פרוייקטיבי ממימד \(n-1\) ". אבל בפוסט הזה אני מתמקד רק במישור הפרוייקטיבי אז לא ארחיב על הנקודה הזו יותר מכך.
מה שכחנו?!
מה שעשינו עד עכשיו היה להגדיר את אוסף הנקודות של \(\mathbb{RP}^{2}\) . אבל מרחב פרוייקטיבי מורכב משני סוגים עצמים - נקודות וישרים. וכאמור, "ישר" זה סתם שם, זה לא משהו שחייב להיות דומה לקווים הרגילים שאנחנו חושבים עליהם שהם אוספים של נקודות. מה שאנחנו צריכים לעשות הוא להגדיר מה יהיו הקווים, ואז להגדיר מתי עבור זוג של נקודה וקו הם חלים זו בזה.
הגאומטריה התלת ממדית נחלצת לעזרתנו גם כאן. את את הנקודות ב-\(\mathbb{RP}^{2}\) הגדרתי בתור ישרים ב-\(\mathbb{R}^{3}\) שעוברים דרך הראשית (לבקיאים באלגברה לינארית: בתור תת-מרחבים ממימד 1 של \(\mathbb{R}^{3}\) ). את הישרים של \(\mathbb{RP}^{2}\) אני אגדיר בתור מישורים ב-\(\mathbb{R}^{3}\) שעוברים דרך הראשית (באלגברה לינארית: תת-מרחבים ממימד 2 של \(\mathbb{R}^{3}\) ). היתרון בדרך ההתבוננות הזו היא שאנחנו יכולים להגדיר עכשיו חילה בצורה ה"טבעית" - נקודה פרוייקטיבית חלה בישר פרוייקטיבי אם הישר שמייצג אותה ב-\(\mathbb{R}^{3}\) מוכל במישור שמייצג את הישר הפרוייקטיבי ב-\(\mathbb{R}^{3}\) .
איך פורמלית מייצגים מישורים ב-\(\mathbb{R}^{3}\) ? ובכן, הנה החלק הכיפי: את הנקודות ב-\(\mathbb{RP}^{2}\) אני הגדרתי בתור אוסף כל מחלקות השקילות של שלשות מהצורה \(\left(x,y,z\right)\) ששונות מ-\(\left(0,0,0\right)\) . את הישרים של \(\mathbb{RP}^{2}\) אני מגדיר באותה צורה בדיוק, בדיוק אוסף כל מחלקות השקילות של שלשות מהצורה \(\left(x,y,z\right)\) ששונות מ-\(\left(0,0,0\right)\) . זה לא אומר שהנקודות והישרים הם אותו דבר - הם שתי קבוצות נפרדות של עצמים, שפשוט מתוארים פורמלית בידי אותו טריק. לפעמים נהוג לסמן נקודה ב-\(\left(x,y,z\right)\) וישר ב-\(\left(\begin{array}{c} x\\ y\\ z \end{array}\right)\) כדי שההבדל ביניהן יהיה יותר מובהק (אני לא אעשה את זה כאן).
איך זה שאפשר לתאר מישור ב-\(\mathbb{R}^{3}\) בעזרת נקודה בודדת? מישור זה לא אובייקט דו ממדי? ובכן הוא כן, אבל הוא חי באובייקט תלת ממדי ולכן גם אם יודעים לתאר את ה"משלים" החד-ממדי שלו זה מספיק. ספציפית, הרעיון פה הוא שהישר שמחבר את הראשית אל \(\left(x,y,z\right)\) מתאר את האנך למישור. זו דרך ייצוג סטנדרטית למישורים בגאומטריה אנליטית; אין פה המצאה מוזרה רק עבור הגאומטריה הפרוייקטיבית.
עכשיו לשאלת השאלות - איך לתאר פורמלית מתי ישר ונקודה חלים זה בזו? גם פה הגאומטריה של \(\mathbb{R}^{3}\) מצילה אותנו. ישר ב-\(\mathbb{R}^{3}\) מוכל במישור אם הוא ניצב לוקטור שניצב למישור. הכלי הטכני שבעזרתו בודקים את זה הוא מכפלה סקלרית: אם \(\left(a,b,c\right)\) ו-\(\left(x,y,z\right)\) הן נקודות במישור שמגדירות שני ישרים, אז הישרים הללו מאונכים אם
- \(ax+by+cz=0\)
אז זו הצורה שבה מגדירים חילה עבור המישור הפרוייקטיבי: הנקודה הפרוייקטיבית שמיוצגת על ידי \(\left(a,b,c\right)\) חלה בישר הפרוייקטיבי שמיוצג על ידי \(\left(x,y,z\right)\) אם \(ax+by+cz=0\) . שימו לב שבגלל שזו הגדרה באמצעות נציגים, זה יוצר את אותה בעיה שצצה עבור ההגדרה של שברים - צריך לוודא שזה לא תלוי בנציג. כאמור, נניח שיש לנו נקודה שמיוצגת על ידי \(\left(a,b,c\right)\) וישר שמיוצג על ידי \(\left(x,y,z\right)\) כך שמתקיים \(ax+by+cz=0\), ועכשיו בואו ניקח נציגים אחרים עבורם. הנציגים הללו חייבים להיות מהצורה \(\left(\lambda_{1}a,\lambda_{1}b,\lambda_{1}c\right)\) ו-\(\left(\lambda_{2}x,\lambda_{2}y,\lambda_{2}z\right)\) כי ככה יחס השקילות הוגדר, ולכן:
\(\lambda_{1}\lambda_{2}ax+\lambda_{1}\lambda_{2}by+\lambda_{1}\lambda_{2}cz=\lambda_{1}\lambda_{2}\left(ax+by+cz\right)\)
\(=\lambda_{1}\lambda_{2}\cdot0=0\) ולכן ההגדרה של חילה לא תלויה בנציגים.
מה שנשאר לוודא הוא ששלוש התכונות של מישור פרוייקטיבי מתקיימות. למרבה המזל, ההוכחה של שתי הראשונות תהיה זהה לחלוטין כי ההגדרות של נקודה וישר הן זהות. אז מספיק אם נוכיח את
- לכל שתי נקודות שונות זו מזו, קיים ישר יחיד שחל בשתיהן.
בתרגום לעולם המושגים של ישרים במרחב תלת-ממדי, זו טענה מוכרת: שני ישרים ששונים זה מזה מגדירים יחד מישור ולמישור הזה קיים ישר אנכי יחיד (או, לאלו שמכירים אלגברה לינארית - לתת-מרחב ממימד 2 של \(\mathbb{R}^{3}\) קיים משלים אורתוגונלי ממימד 1). אבל אני לא הולך להסתמך על שום ידע קיים ופשוט נוכיח את הטענה ישירות מההגדרות - זה חשוב, כי אוטוטו אני הולך לחזור על הבניה שראינו פה גם בהקשר אחר ואני רוצה שנהיה משוכנעים שהיא עדיין עובדת בהקשר האחר הזה (אבל כמובן שאפשר לדלג אל החלק הבא ולא לפספס משהו מהותי).
אז בואו ניקח שתי נקודות שונות זו מזו, \(\left(a_{1},a_{2},a_{3}\right),\left(b_{1},b_{2},b_{3}\right)\) . המטרה שלי תהיה למצוא ישר, \(\left(x_{1},x_{2},x_{3}\right)\), כך ש-
\(a_{1}x_{1}+a_{2}x_{2}+a_{3}x_{3}=0\)
\(b_{1}x_{1}+b_{2}x_{2}+b_{3}x_{3}=0\)
ולהראות שהישר הזה הוא יחיד. למי שמכירים אלגברה לינארית זה נראה מאוד מוכר - יש לנו פה מערכת של שתי משוואות לינאריות בשלושה נעלמים ויש דרכים די סטנדרטיות להבין איך נראה מרחב הפתרונות. אבל בואו נמשיך בלי התיאוריה הכללית הזו.
מכיוון שאני יודע ש-\(\left(a_{1},a_{2},a_{3}\right)\) שונה מ-\(\left(0,0,0\right)\), יש לה קואורדינטה אחת לפחות ששונה מאפס. בלי הגבלת הכלליות אני אניח שזו \(a_{1}\ne0\) ולכן אפשר לחלק ב-\(a_{1}\) (זה בלי הגבלת הכלליות כי אם קואורדינטה אחרת שונה מאפס ההוכחה תהיה אותו הדבר רק בשינוי הסימונים). עכשיו נסתכל על המשוואה \(a_{1}x_{1}+a_{2}x_{2}+a_{3}x_{3}=0\) ונחלץ ממנה את \(x_{1}\), כלומר נעביר את שני האיברים האחרים אגף ונחלק ב-\(a_{1}\) ונקבל:
\(x_{1}=-\frac{\left(a_{2}x_{2}+a_{3}x_{3}\right)}{a_{1}}\)
אני אציב את \(x_{1}\) במשוואה השניה, \(b_{1}x_{1}+b_{2}x_{2}+b_{3}x_{3}=0\), ואקבל את המפלצת הבאה:
\(-\frac{b_{1}}{a_{1}}a_{2}x_{2}-\frac{b_{1}}{a_{1}}a_{3}x_{3}+b_{2}x_{2}+b_{3}x_{3}=0\)
זה נראה מבורחש אבל יש לנו פה בסך הכל ארבעה איברים, שניים מהם הם \(x_{2}\) כפול משהו ושניים הם \(x_{3}\) כפול משהו, אז אפשר לקבץ:
\(\left(b_{2}-\frac{b_{1}}{a_{1}}a_{2}\right)x_{2}+\left(b_{3}-\frac{b_{1}}{a_{1}}a_{3}\right)x_{3}=0\)
כדי לפשט, נסמן
\(\alpha_{2}=b_{2}-\frac{b_{1}}{a_{1}}a_{2}\)
\(\alpha_{3}=b_{3}-\frac{b_{1}}{a_{1}}a_{3}\)
כך שהמשוואה היא כעת \(\alpha_{2}x_{2}+\alpha_{3}x_{3}=0\) . עכשיו נשאלת השאלה אם המקדמים הללו יכולים להיות 0. ראשית, האם ייתכן ששניהם אפס? \(\alpha_{2}=\alpha_{3}=0\) ? אם \(\alpha_{2}=0\) אז
\(b_{2}=\frac{b_{1}}{a_{1}}a_{2}\)
ובדומה אם \(\alpha_{3}=0\) אז
\(b_{3}=\frac{b_{1}}{a_{1}}a_{3}\)
רואים את התבנית הכללית פה? אפשר לעשות משוואה דומה גם עבור \(b_{1}\) :
\(b_{1}=\frac{b_{1}}{a_{1}}a_{1}\)
זו משוואה שנכונה בצורה די טריוויאלית, אבל היא מאותו מבנה כמו האחרות. ומה ששלוש המשוואות הללו מראות הוא ש-\(\left(b_{1},b_{2},b_{3}\right)\) מתקבל מ-\(\left(a_{1},a_{2},a_{3}\right)\) על ידי כפל בסקלר \(\lambda=\frac{b_{1}}{a_{1}}\), מה שסותר את זה שאלו נקודות שונות (זכרו שכשאני אומר "נקודה" אני מתכוון נקודה פרוייקטיבית, שמיוצגת על ידי ישר, שבתורו מיוצג על ידי נקודה לא פרוייקטיבית אבל כל כפל של הנקודה הזו בסקלר נותן את אותה נקודה פרוייקטיבית). אז המקרה \(\alpha_{2}=\alpha_{3}=0\) לא יכול להתקיים.
מה אם למשל (בלי הגבלת הכלליות...) \(\alpha_{2}=0\) אבל \(\alpha_{3}\ne0\) ? במקרה הזה נשארנו עם המשוואה
\(\alpha_{3}x_{3}=0\) מכיוון ש-\(\alpha_{3}\ne0\) הפתרון היחיד של המשוואה הזו הוא \(x_{3}=0\) . נציב את זה חזרה במשוואה שקיבלנו בהתחלה:
\(x_{1}=-\frac{\left(a_{2}x_{2}+a_{3}x_{3}\right)}{a_{1}}\) ונקבל
\(x_{1}=-\frac{a_{2}}{a_{1}}x_{2}\)
כלומר, כל \(\left(x_{1},x_{2},x_{3}\right)\) שפותר את המשוואה (דהיינו, מייצג ישר שחל עם שתי הנקודות שאיתן התחלנו) הוא מהצורה \(\left(-\frac{a_{2}}{a_{1}}\lambda,\lambda,0\cdot\lambda\right)\) - כפל בסקלר של \(\left(-\frac{a_{2}}{a_{1}},1,0\right)\) . לכן במקרה הזה יש לנו ישר יחיד.
ומה אם \(\alpha_{2}\ne0\) וגם \(\alpha_{3}\ne0\) ? במקרה הזה אפשר לחלק בהם ולכן מהמשוואה \(\alpha_{2}x_{2}+\alpha_{3}x_{3}=0\) אפשר לקבל
\(x_{2}=-\frac{\alpha_{3}}{\alpha_{2}}x_{3}\)
ואת זה אפשר להציב במשוואה עבור \(x_{1}\) ולקבל
\(x_{1}=-\frac{\left(\frac{a_{2}\alpha_{3}}{\alpha_{2}}+a_{3}\right)}{a_{1}}x_{3}\)
וזה נראה מחריד, אבל זה לא! כי בסך הכל קיבלנו ש-\(x_{1},x_{2}\) שניהם כפולה של \(x_{3}\) בסקלר כלשהו, ולכן גם פה כל הפתרונות הם כפולה בסקלר אחד של השני ולכן גם במקרה הזה הפתרון הוא יחיד. זה מסיים את ההוכחה של התכונה הראשונה, ולכן גם את זו של השניה.
מה עם השלישית?
- קיימות ארבע נקודות כך שאין ישר שחל על יותר משתיים מהן.
בואו ניקח את הנקודות הכי מתבקשות: \(\left(1,0,0\right),\left(0,1,0\right),\left(0,0,1\right),\left(1,1,1\right)\) . אף אחת היא לא כפולה בסקלר של השניה אז כולן מייצגות נקודות פרוייקטיביות שונות. עכשיו, ניקח ישר שרירותי כלשהו, \(\left(x_{1},x_{2},x_{3}\right)\) אם הוא חל על \(\left(1,0,0\right)\) זה אומר ש-\(x_{1}=0\), ובדומה גם עם שני האחרים; אז אם הוא היה חל על שלושת הנקודות הראשונות הוא היה \(\left(0,0,0\right)\) שכזכור לא מגדיר ישר חוקי. אז אולי הוא חל רק על שתי הנקודות הראשונות ועל \(\left(1,1,1\right)\) ? אבל אם הוא חל על שתי הנקודות הראשונות, הוא בהכרח \(\left(0,0,x_{3}\right)\) ואז החילה עם \(\left(1,1,1\right)\) נותנת לנו \(1\cdot0+1\cdot0+1\cdot x_{3}=0\) כלומר \(x_{3}=0\) ושוב קיבלנו את \(\left(0,0,0\right)\) . זה מראה שאין ישר שחל על יותר משתיים מהנקודות, ומסיים את ההוכחה כולה. קיבלנו מישור פרוייקטיבי!
חזרה אל הנקודות באינסוף
בואו נחזור לרגע אל הבניה בנפנוף ידיים שהצגתי בפוסט הקודם. השתמשתי שם באיור הזה:

הרעיון היה - בואו נחשוב על \(\mathbb{R}^{2}\), המישור הרגיל עם האובייקטים הרגילים של נקודות שהן קואורדינטות \(\left(a,b\right)\), וישרים שהתיאור שלהם טיפה יותר מסובך ותכף נגיע אליו. עכשיו, הבניה בנפנוף ידיים של של המישור הפרוייקטיבי כללה הוספה של "נקודה באינסוף" לכל אוסף של ישרים שמקבילים זה לזה, ועוד "ישר באינסוף" שעובר דרך כל הנקודות באינסוף. עכשיו יש לנו את היכולת לתאר את זה טכנית, ולראות שזה זהה למה שעשינו קודם.
נתחיל משאלה בסיסית בגאומטריה אנליטית: איך מתארים ישר במישור? שימו לב - כמו שרואים מהציור, הפעם אני לא מדבר רק על ישרים שעוברים דרך הראשית. בגאומטריה אנליטית רואים שישר מתואר על ידי המשוואה \(y=mx+n\) . הרעיון הוא הוא ש-\(m,n\) הם מספרים קבועים, פרמטרים של הישר; ואילו \(\left(x,y\right)\) הן הקואורדינטות של נקודות שנמצאות על הישר. מה המשמעות של \(m,n\) ? ראשית, אם נציב \(x=0\) נקבל \(y=n\) - כלומר, הנקודה \(\left(0,n\right)\) נמצאת על הישר - המשמעות היא ש-\(n\) הוא הגובה שבו הישר חותך את ציר \(y\) .
שנית, ככל ש-\(m\) גדול יותר כך להגדיל את \(x\) מגדיל יותר את \(y\) . אם \(m=0\) אז הישר הוא פשוט \(y=n\) - ישר אופקי קבוע. ככל שהשיפוע גדל, הישר נהיה יותר ויותר אלכסוני "ימינה למעלה" (ואם השיפוע קטן ונהיה שלילי, הישר נהיה אלכסוני "ימינה למטה"). יש רק בעיה אחת - דרך התיאור הזו לא יכולה לתאר ישר אנכי; ישר כזה מתואר על ידי משוואה שונה, \(x=n\), שאומרת לנו מה נקודת החיתוך של הישר עם ציר \(x\) . אינטואיטיבית, המקרה הזה מתאים ל"שיפוע"\(m=\infty\), אבל זו רק אינטואיציה - אין פה פורמליזם.
כמו כן אין לנו שום תיאור עבור משהו כמו "הישר הפרוייקטיבי באינסוף". זה לא חלק מהגאומטריה האנליטית הרגילה.
אז אם לסכם, יש לנו שלושה סוגי ישרים:
-
"רגילים": מתוארים על ידי זוג \(\left(m,n\right)\in\mathbb{R}^{2}\) .
-
"אנכיים": מתוארים על ידי מספר בודד \(n\in\mathbb{R}\) .
-
"באינסוף": ישר אחד ספציפי שאין לו תיאור עם פרמטרים.
יש תיאורים כלליים יותר לישרים, למשל בעזרת המשוואה \(ax+by=c\) שתופסת גם את המקרה של ישר אנכי, אבל אני אוהב את \(y=mx+n\) כי התיאור הזה נותן לי שיטה פשוטה לקבל את הנקודות שעל הישר - אני פשוט מציב ערכים של \(x\) ומקבל מייד את הערך המתאים של \(y\) . זה בדיוק מה שנזדקק לו בהמשך. המחיר שאני משלם הוא החלוקה הזו למקרים שמזכירה באופן חשוד את החלוקה למקרים בהוכחה שראינו קודם, וזה כמובן לא מקרי.
נעבור אל הנקודות. נקודות רגילות במישור הן \(\left(a,b\right)\) כמו שאמרתי. בנוסף, לכל אוסף של ישרים מקבילים יש נקודה פרוייקטיבית ייעודית להם. מתי שני ישרים הם מקבילים? זה קל - בדיוק כשיש להם אותו שיפוע. אז אנחנו יכולים לחשוב על נקודה פרוייקטיבית אחת לכל ערך \(m\in\mathbb{R}\) של השיפוע, וצריך עוד נקודה פרוייקטיבית "מיוחדת" אחת עבור השיפוע \(\infty\) שהוא לא מספר ממשי. עכשיו, מבחינה גאומטרית הנקודה הזו לא שונה מהאחרות כי קווים אנכיים לא שונים מהאחרים - פשוט, בשיטת התיאור הספציפית שבחרנו כן צריך להתייחס אליה בנפרד כי \(\infty\) הוא לא מספר ממשי.
אז אם לסכם, יש לנו שלושה סוגי נקודות:
-
"רגילות": מתוארות על ידי זוג \(\left(a,b\right)\in\mathbb{R}^{2}\) .
-
"פרוייקטיביות לשיפוע סופי": מתוארות על ידי מספר בודד \(m\in\mathbb{R}\) .
-
"פרוייקטיביות לשיפוע אינסופי": נקודה אחת ספציפית שאין לה תיאור עם פרמטרים.
כאן אפשר לראות בבירור את האופן שבו נקודות פרוייקטיביות וישרים פרוייקטיביים, למרות שהם אובייקטים שונים, מיוצגים באותו אופן. קודם אמרתי ש-
\(\mathbb{RP}^{2}=\mathbb{R}^{2}\cup\mathbb{RP}=\mathbb{RP}^{2}=\mathbb{R}^{2}\cup\mathbb{R}\cup\left\{ \infty\right\}\) ועכשיו רואים את זה בבירור - אלו שלוש הקטגוריות השונות בפעולה. עכשיו מה שנשאר לעשות הוא רק הפורמליזציה - להראות איך אנחנו עוברים מהתיאור של אובייקטים בתור שלשות \(\left(a,b,c\right)\) עם יחס שקילות עליהן, לאובייקטים שתיארתי פה.
מכיוון שנקודות פרוייקטיביות הן מחלקות שקילות, אפשר לפשט את העניינים על ידי בחירת נציג קנוני. מחלקת שקילות כללית היא מהצורה \(\left\{ \left(\lambda a,\lambda b,\lambda c\right)\ |\ \lambda\in\mathbb{R}\right\}\) עבור \(\left(a,b,c\right)\) כלשהו ששונה מ-\(\left(0,0,0\right)\) . אז אנחנו נבחר את ה-\(\lambda\) שהופך את השלשה הזו להיות "נחמדה" ונעבוד עם האיבר הספציפי שנקבל. למשל, אם \(c\ne0\) אז אפשר לבחור \(\lambda=\frac{1}{c}\) ולקבל נציג שנראה כך: \(\left(\frac{a}{c},\frac{b}{c},1\right)\) . עכשיו, \(a,b\) היו מספרים שרירותיים כלשהם, אז גם \(\frac{a}{c}\) ו-\(\frac{b}{c}\) הם מספרים שרירותיים, אז אפשר פשוט לסמן אותם באותיות, למשל לכתוב \(\left(a^{\prime},b^{\prime},1\right)\) . אבל למה להסתבך עם תגים? אני יכול פשוט להגיד משהו כמו "ראשית נסתכל על כל הנקודות הפרוייקטיביות שיש להן נציג מהצורה \(\left(a,b,1\right)\) " וחסל.
הנקודות הללו מתוארות על ידי זוג \(\left(a,b\right)\in\mathbb{R}^{2}\), כך שהן מתאימות למקרה שכיניתי למעלה "רגילות". הנקודות הללו מכסות את כל המקרים שבהם הרכיב השלישי שונה מאפס, אז עכשיו בואו נדבר רק על נקודות שיש להן נציג מהצורה\(\left(a,b,0\right)\) . במקרה הזה, אם \(a\ne0\) אני יכול לחלק בו ולקבל נציג מהצורה \(\left(1,m,0\right)\) כש-\(m\in\mathbb{R}\) . אלו יהיו הנקודות ה"פרוייקטיביות לשיפוע סופי" כפי שכיניתי אותן. לבסוף, אם \(a=c=0\) אז אני יכול לבחור נציג מהצורה \(\left(0,1,0\right)\) - זו תהיה הנקודה ה"פרוייקטיביות לשיפוע אינסופי". בואו נכתוב את זה במסודר:
-
"רגילות": מתוארות על ידי הנציג \(\left(a,b,1\right)\) .
-
"פרוייקטיביות לשיפוע סופי": מתוארות על ידי הנציג \(\left(1,m,0\right)\) .
-
"פרוייקטיביות לשיפוע אינסופי": מתוארת על ידי הנציג \(\left(0,1,0\right)\) .
אפשר לשאול למה בחרתי את הנציגים דווקא ככה; התשובה היא שאני כבר יודע מה אני מנסה להשיג, אז שיחקתי קצת עם ההגדרות עד שראיתי מה נכון. יהיה קל להבין את זה כשנראה איך אני יודע לבחור נציגים עבור הישרים. כזכור, הרעיון הוא שאם \(\left(a,b,c\right)\) ו-\(\left(x,y,z\right)\) מייצגים ישר ונקודה, אז הם חלים זה בזו אם \(ax+by+cz=0\) . מה שאני רוצה לעשות הוא לקשר את זה להגדרה של ישר שראינו קודם: אנחנו רוצים שאם \(\left(x,y,1\right)\) מייצגת נקודה סטנדרטית, ויש לנו ישר שמיוצג על ידי הפרמטרים \(m,n\), והנקודה נמצאת על הישר, אז יתקיים ביניהם הקשר \(y=mx+n\) . איך זה מתאים לתבנית של \(ax+by+cz=0\) ? נעביר את \(y\) אגף ונקבל
- \(mx-1\cdot y+n\cdot1=0\)
אנחנו כזכור מתארים נקודות "רגילות" על ידי \(\left(x,y,1\right)\) . אז אם נבחר לייצג ישר "רגיל" על ידי \(\left(m,-1,n\right)\), נקבל בדיוק את יחס החילה שרצינו. האם אפשר לייצג ישר בצורה כזו? בוודאי. אם \(\left(a,b,c\right)\) היא שלשה שמייצגת ישר פרוייקטיבי שרירותי, ומתקיים \(b\ne0\) אז נחלק ב-\(-b\) ונקבל \(\left(-\frac{a}{b},-1,-\frac{c}{b}\right)\) ונסמן \(m=-\frac{a}{b}\) ו-\(n=-\frac{c}{b}\) ונקבל בדיוק את מה שרצינו. ה"מחיר" הוא שעכשיו את שאר הישרים נהיה חייבים לייצג על ידי שלשה \(\left(a,0,c\right)\) .
עכשיו, ישר "רגיל"\(y=mx+n\) אמור לחול עם עוד נקודה אחת בדיוק: הנקודה "באינסוף" שמתאימה לשיפוע \(m\) . בואו נוודא שזה קורה על ידי כך שנכפול את הייצוג \(\left(m,-1,n\right)\) של הישר בנקודה "פרוייקטיביות לשיפוע סופי" כללית, \(\left(1,m^{\prime},0\right)\) . המכפלה נותנת \(m-m^{\prime}\) וזה כמובן שווה אפס רק אם \(m=m^{\prime}\) - בדיוק מה שרצינו. כמו כן, אם נכפול את הישר הזה בנקודה ה"פרוייקטיביות לשיפוע אינסופי"\(\left(0,1,0\right)\) נקבל \(-1\), ששונה מאפס בלי תלות בפרמטרים \(m,n\), אז השגנו בדיוק את האפקט שרצינו - עבור ישרים "רגילים".
עכשיו צריך לטפל בישרים מאונכים. אמרתי שישר כזה מתאים למשוואה \(x=n\), כלומר צריך להתקיים \(x-n=0\) לכל נקודה "רגילה" שחלה על הישר \(\left(x,y,1\right)\) . אז נבחר את הייצוג \(\left(1,0,-n\right)\) לישר כזה ונקבל בדיוק את מה שרצינו. שימו לב שהקואורדינטה האמצעית היא 0 - זה מתאים לאילוץ שהזכרתי קודם. כדי שאוכל להעביר שלשה \(\left(a,0,c\right)\) כללית לצורה הזו אני חייב שיתקיים \(a\ne0\), אז כבר עכשיו ברור שאני נדחף לזה שהישר באינסוף יהיה מיוצג על ידי \(\left(0,0,1\right)\), עוד מעט נחזור אל זה.
אני עדיין צריך לבדוק אילו עוד נקודות חלות על הישר \(\left(1,0,-n\right)\) חוץ מהרגילות. נכפול אותו בנקודה פרוייקטיבית לשיפוע סופי, \(\left(1,m,0\right)\), ונקבל 1. כלומר אף נקודה כזו לא חלה על הישר. נכפול אותו בנקודה ה"פרוייקטיביות לשיפוע אינסופי"\(\left(0,1,0\right)\) ונקבל 0 בלי תלות בפרמטרים - אז גם פה קיבלנו בדיוק את מה שרצינו.
לסיום, נשאר רק לדבר על הישר באינסוף, \(\left(0,0,1\right)\) . כשכופלים אותו בנקודה "רגילה"\(\left(x,y,1\right)\) מקבלים 1 ולכן אף נקודה רגילה לא עליו. כשכופלים אותו בכל אחת מהנקודות הפרוייקטיביות, \(\left(1,m,0\right)\) או \(\left(0,1,0\right)\), מקבלים 0 - לכן כל הנקודות הפרוייקטיביות על הישר הזה. הצלחנו! אז בואו נכתוב באופן מסודר את הייצוגים של הישרים הפרוייקטיביים:
-
"רגיל": מתואר על ידי הנציג \(\left(m,-1,n\right)\) (ומתאים למשוואה \(y=mx+n\) ).
-
"אנכי": מתואר על ידי הנציג \(\left(1,0,-n\right)\) (ומתאים למשוואה \(x=n\) ).
-
"פרוייקטיבי": מתואר על ידי הנציג \(\left(0,0,1\right)\) (ולא מתאים לאף ישר במישור \(\mathbb{R}^{2}\) הרגיל).
בזאת סיימנו עם הפורמליזם. נשאר רק לקטוף את הפירות שלו ולהבין איך מוצאים את הקלפים של דאבל - ועכשיו זה הולך להיות ממש קל.
ואיך זה קשור למישורים פרוייקטיביים סופיים (ולדאבל)
מה שראינו עד כה היה הגדרות של \(\mathbb{RP}^{2}\) . יש עוד הרבה דברים מעניינים לדבר עליהם בהקשר של \(\mathbb{RP}^{2}\), אבל נקודת המוצא שלי לפוסט הזה הייתה שונה - אני רוצה להבין איך בונים מישור פרוייקטיבי סופי, ובפרט את זה עם ה-57 איברים של המשחק דאבל. והתשובה היא: די אותו דבר.
אם נסתכל על ההוכחה של נכונות הבניה של \(\mathbb{RP}^{2}\), אנחנו לא ממש משתמשים שם בתכונות המעניינות שמאפיינות ספציפית את המספרים הממשיים (ה"שלמות" שלהם שאני מתאר כאן). מה שאנחנו משתמשים בו באינטנסיביות הוא התכונות של שדה, כלומר של קבוצת איברים עם תכונות אריתמטיות יפות - חוק החילוף, חוק הקיבוץ, חוק הפילוג, היכולת לחלק בכל מי שאינו 0... ושוב, מי שמכירים אלגברה לינארית, בהחלט ייתכן שכבר היו בסיטואציה הזו - אנחנו רואים שחלקים נכבדים מהטכניקה שבה השתמשנו תקפה לא רק מעל \(\mathbb{R}\) אלא גם מעל קבוצות כמו \(\mathbb{C}\) או \(\mathbb{Q}\), ובאופן מעניין אפילו יותר - מעל השדות הסופיים. למי ששואל "אז מה זה שדה ואיך הוא יכול להיות סופי?", יש לי פוסט שבדרך מקרה זה בדיוק השם שלו. בפוסט ההמשך שלו אני מראה בדיוק איך אפשר לבנות את כל השדות הסופיים, ומוכיח שעבור כל שדה סופי, הסדר שלו הוא \(p^{k}\) כאשר \(p\) הוא מספר ראשוני. אם זה נשמע מוכר, זה כי זה הוזכר בפוסט הקודם: אמרנו שלכל מרחב פרוייקטיבי יש סדר שסימנתי ב-\(N\), ושבמרחב כזה כל ישר כולל בדיוק \(N+1\) נקודות, ויש בסך הכל \(N^{2}+N+1\) ישרים (ונקודות). אמרתי גם שכיום אנחנו מכירים רק מרחבים פרוייקטיביים שבהם הסדר הוא \(N=p^{k}\) כאשר \(p\) ראשוני. זה לא מקרי - אנחנו מכירים בדיוק את כל השדות מהבניה שזה עתה ראינו, כאשר במקום \(\mathbb{R}\) מבצעים את הבניה מעל שדה סופי \(\mathbb{F}_{N}\) עם \(N=p^{k}\) איברים.
גם מעל שדה כזה, יש לי בדיוק את אותה הגדרה של נקודות. בואו נספור אותן:
-
"רגילות": מתוארות על ידי הנציג \(\left(a,b,1\right)\) כאשר \(a,b\in\mathbb{F}_{N}\) הם איברים כלליים. יש לנו \(N\) אפשרויות לבחור את \(a\) ו-\(N\) אפשרויות לבחור את \(b\) כך שבסך הכל יש \(N^{2}\) אפשרויות.
-
"פרוייקטיביות לשיפוע סופי": מתוארות על ידי הנציג \(\left(1,m,0\right)\) כאשר \(m\in\mathbb{F}_{N}\) . יש לנו \(N\) אפשרויות בלחור את \(m\) .
-
"פרוייקטיביות לשיפוע אינסופי": מתוארת על ידי הנציג \(\left(0,1,0\right)\) שהוא איבר בודד.
עכשיו ברור מאיפה הגיע \(N^{2}+N+1\) - זו פשוט ספירה של נקודות על פי הקטגוריות שלהן (מה שנחמד הוא שאפשר להוכיח שבמישור פרוייקטיבי סופי זה חייב להיות מספר הנקודות גם בלי בניה קונקרטית, אבל נעזוב את זה). בואו נעבור לשאלה המרכזית שלנו - מי הישרים שלנו, ומה הנקודות שעליהם?
ובכן, ראשית יש לנו את הישרים ה"רגילים" שמתוארים על ידי \(\left(m,-1,n\right)\) עבור \(m,n\in\mathbb{F}_{N}\) כלשהם. מי הנקודות שעליהם? זה קל, זה מה שעבדנו בשבילו כל הזמן הזה: נעבור על כל האיברים \(x\in\mathbb{F}_{N}\), נחשב את \(y=mx+n\), ונחזיר את הנקודה הפרוייקטיבית \(\left(x,y,1\right)\) . בנוסף לאלו נוסיף גם את הנקודה "באינסוף" שמתאימה לישר הזה: \(\left(1,m,0\right)\) . בסך הכל קיבלנו \(N+1\) נקודות - וזה מה שהיינו אמורים לקבל, אבל עכשיו ברור מה קורה פה. ב-\(N+1\) ה-\(N\) הוא מספר האיברים בשדה כי אלו הנקודות ה"רגילות" שמקבלים כשמציבים ב-\(x\) ערך כלשהו מהשדה; ה-\(+1\) הוא הנקודה הפרויקטיבית באינסוף שהישר חל איתה.
עכשיו צריך לטפל בנפרד בישרים האנכיים, אבל גם זה קל: הישר האנכי שמאופיין על ידי הפרמטר \(n\) כולל את הנקודות \(\left(n,y,1\right)\) עבור \(y\in\mathbb{F}_{N}\) כלשהו - בסך הכל \(N\) איברים. בנוסף יש גם את הנקודה הפרוייקטיבית \(\left(0,1,0\right)\) על הישר הזה.
לסיום, יש את הישר ה"פרוייקטיבי" שהנקודות שעליו הן כל ה-\(\left(1,m,0\right)\) עבור \(m\in\mathbb{F}_{N}\) כלשהו (סך הכל \(N\) ) ועוד \(\left(0,1,0\right)\) . זהו, זה הכל!
אבל אני לא רוצה לסיים פה כי נתתי פה אמירה מאוד "מתמטית". אני רוצה לראות את התכל'ס, איך מתרגמים אותה לקוד שמייצר רשימה של קלפים (ה"עצמים" בקלפים יהיו פשוט מספרים טבעיים; אחרי שיש לנו את הרשימה הזו אפשר להחליף את המספרים באובייקטים קונקרטיים כמו עכביש ומרגנית). הקוד שלי יעשה שני דברים: ראשית, יבנה רשימה של כל הנקודות הפרוייקטיביות (שמיוצגות על ידי שלשה כמו שעשיתי כאן) ושנית, תעבור על הישרים על פי החלוקה שעשיתי כאן, תמצא את הנקודות עליהם על פי החישוב שהצגתי כאן, ולכל נקודה עליהם תשלוף את האינדקס של הנקודה הזו ברשימה שבניתי, ותבנה רשימת אינדקסים מתאימה לכל קלף. זה תרגיל תכנותי טוב כדי לוודא שהבנו מה הולך פה (זו דרך להגיד "אל תתנו ל-AI לעשות את זה, ברור שהוא יצליח אבל את ההבנה שלכם זה לא ישפר"), וכדי שאשתכנע שאני הבנתי, זה בדיוק מה שאעשה עכשיו.
יש נקודה אחת שצריך להתייחס אליה - איך אני מתכנת את הפעולות בשדה סופי? הרי אני אצטרך לבצע את החישוב \(y=mx+n\) . התשובה היא שזה תלוי בשדה. באופן כללי, שדות סופיים אפשר לייצג עם פולינומים עם פעולת כפל מודולו משהו. בקוד שלי אני לא אתעסק בזה כי זו אקסטרה עבודה שלא הכרחית במקרה הזה. אם \(N=p\) (ראשוני בלבד, בלי חזקה), אז הפעולות בשדה הן בסך הכל חישובים מודולו \(p\) רגילים - זה מה שהקוד שלי יתבסס עליו. כדי לקבל את דאבל אני בסך הכל מציב \(N=7\) שהוא ראשוני.
הנה הקוד בפייתון, שהוא באמת פשוט למדי:
from itertools import product
N = 7 # order of the field; needs to be a prime number
projective_points = [
(a,b,1) for (a,b) in product(range(N), repeat=2) # affine points
] + [
(1,m,0) for m in range(N) # points at infinity for each slope m
] + [
(0,1,0) # point at infinity for vertical lines
]
dobble_cards = []
# lines with slope m and y-intercept n
for (m,n) in product(range(N), repeat=2):
card = set()
for x in range(N):
y = (m*x + n) % N
card.add(projective_points.index((x,y,1)))
card.add(projective_points.index((1,m,0)))
dobble_cards.append(card)
# vertical lines with x-intercept n
for n in range(N):
card = set()
for y in range(N):
card.add(projective_points.index((n,y,1)))
card.add(projective_points.index((0,1,0)))
dobble_cards.append(card)
# line at infinity
card = set()
for m in range(N):
card.add(projective_points.index((1,m,0)))
card.add(projective_points.index((0,1,0)))
dobble_cards.append(card)
קל לוודא עם סקריפט שהוא עובד (שיש 57 קלפים, שבכל אחד מהם יש 8 איברים, ושכל שני קלפים חולקים איבר משותף אבל אין כמו להדפיס חלק מהאיברים הראשונים ופשוט לחפש את ההתאמה בעיניים:
{35, 36, 37, 38, 39, 40, 41, 56}
{35, 5, 11, 48, 17, 55, 23, 29}
{4, 7, 40, 43, 17, 52, 27, 30}
{3, 35, 8, 47, 20, 54, 25, 30}
{33, 3, 37, 7, 48, 18, 53, 22}
{1, 39, 10, 48, 19, 51, 21, 30}
כשאני רואה את זה ככה, אני בהלם מכך שזה עובד. התחום של המספרים מרגיש לי גדול וכמות האיברים בכל קלף נראית לי קטנה מדי. איך זה בכלל אפשרי שכל שני קלפים יתנגשו ככה? ובכל פעם שאני בודק זוג קלפים, אני בהתחלה לא מוצא התאמה וחושב לעצמי "אה-הא! עכשיו תפסנו אתכם!" אבל תמיד בסוף אני מגלה שהקלפים היו חכמים ממני ופשוט פספסתי משהו. כשאני עושה את זה אני מבין את הקסם הגדול שיש במשחק כמו דאבל, ועוד יותר את הקסם הגדול שיש במתמטיקה.