למה מותר לחלק באפס?

מבוא

כידוע לכולם, אסור לחלק באפס.

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

אני לא אוהב את זה.

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

אז למה יש בכלל בעיה עם חלוקה באפס?

כשהייתי ילד וניסיתי להסביר לעצמי מה הבעיה עם חלוקה באפס (כי לא כל כך הצלחתי להבין - אמרו לי שאסור, אבל לא לגמרי הבנתי למה) סיפרתי לעצמי את הסיפור הבא: לחלק 0 תפוחים ל-4 ילדים זה קל - כל ילד יקבל 0 תפוחים, וזה הגיוני. אבל אם אני מחלק 4 תפוחים ל-0 ילדים, זה בעייתי כי אז השאלה “כמה תפוחים יקבל כל ילד” היא חסרת משמעות כי אין בכלל ילדים. אני חושב שזו התחלה של טיעון טוב, אבל זה לא הטיעון עצמו - כרגע זה מרגיש לי כמו נפנוף ידיים, סוג של תעלול לשוני, אולי דרך להראות שבהקשר הספציפי של ילדים ותפוחים חילוק באפס לא עובד הכי טוב. אבל חלק מהיופי במתמטיקה הוא בסיטואציות שבהן עושים ניסים ונפלאות למרות שנראה שמה שבאים לעשות הוא בכלל בלתי אפשרי - תחשבו למשל על המלון של הילברט. אז כשאני בא לנסח טיעון נגד חלוקה באפס אני רוצה לומר משהו יותר קונקרטי. והנה משהו יותר קונקרטי: אם אני מחלק 6 תפוחים ל-3 ילדים ומקבל שכל ילד קיבל 2 תפוחים, זה אומר שאם אני מבקש מהילדים להחזיר את התפוחים, כל ילד יחזיר 2 תפוחים ואני אקבל ככה 3 פעמים 2 תפוחים, כלומר 6. אבל אם אני מחלק איכשהו 6 תפוחים ל-0 ילדים ואז מבקש להחזיר - מאיפה התפוחים יגיעו? אני אקבל 0 פעמים תפוחים מה”ילדים” שלא קיימים, ולכן בסוף הסיפור יהיו לי ביד 0 תפוחים למרות שאמורים להיות 6. אז יש כאן בבירור בעיה אמיתית של תפוחים נעלמים, ואני אנסה לחדד אותה קצת.

לפני ששואלים מה מפריע לנו עם לחלק באפס אפשר לשאול אם משהו מפריע לנו עם לחלק באופן כללי: נאמר, אם יגידו לנו “נא לחלק 6 ב-2” כנראה שנגיד 3 בלי הרבה ויכוחים, אבל אם יגידו לנו “נא לחלק 5 ב-2” עלולה להתעורר מהומה כלשהי כי תמיד יש את ההוא שאומר שאין דבר כזה בכלל “שברים” ורק המספרים הטבעיים קיימים, ותמיד יש את המתחכם כמוני שיגיד “אוקיי אבל מה אם אלו 5 כלבים?” כלומר, יש משהו בעייתי קצת בכל פעולת החילוק - משהו בעייתי שאין בפעולת הכפל. כשאנחנו כופלים מספרים טבעיים, התוצאה תהיה תמיד מספר טבעי. אבל כשאנחנו מחלקים מספרים טבעיים, ייתכן שנצטרך לצאת מהעולם הנוח והנחמד של הטבעיים, ותמיד כשיוצאים מאיזור הנוחות שלנו יהיו השגות לגבי זה.

אם אנחנו מהסוג שאומר “אה, \( 5 \) חלקי \( 2 \) זה \( 2.5 \) שהוא מספר שלא שמעתי עליו מעולם עד עכשיו אבל יאללה, נזרום” למה בעצם שלא נזרום עם האפשרות שיש מספר ששווה ל-5 חלקי 0? ובכן, אין שום בעיה עם זה. השאלה היא רק מה יהיו התכונות של המספר הזה. זה מה שמעניין אותנו במתמטיקה - לא השאלה אם “מותר” להגדיר משהו, אלא איך אנחנו מצפים שהוא יתנהג אחרי שהגדרנו אותו והאם זה יהיה מעניין. והנה הבשורות המרות: זה לא יהיה כזה מעניין. ובשביל לראות את הסיבה לכך, בואו נעבור לדבר במשוואות. נניח ש-\( \frac{6}{3}=x \), מה \( x \) הזה מקיים? אם נכפיל את שני אגפי המשוואה ב-\( 3 \) נקבל שהוא מקיים \( 6=3\cdot x \). זה מה שקראתי לו קודם “הילדים מחזירים את התפוחים שלהם”. תוצאה של חילוק במשהו אמורה להיות מספר שהכפל שלו באותו משהו מחזיר אותי למספר שממנו התחלתי. ולכן, אם אני מחלק באפס וכותב \( \frac{6}{0}=x \) הציפייה שלי היא שיתקיים \( 6=0\cdot x \), וזה לא קורה עם מספרים רגילים, כי במספרים רגילים - לכפול משהו באפס תמיד מחזיר אפס.

זה השלב שבו אפשר וצריך לפקפק בטענה הזו של “לכפול משהו באפס תמיייייד מחזיר אפס”. במתמטיקה שום דבר הוא לא שרירותי כזה, זו טענה שאפשר להוכיח. בואו נראה את ההוכחה: ניקח “משהו” כללי שנקרא לו \( a \), ואת 0. נסתכל על המכפלה שלהם ונעשה את התעלול הבא:

\( 0\cdot a=\left(0+0\right)\cdot a=0\cdot a+0\cdot a \)

קיבלנו \( 0\cdot a=0\cdot a+0\cdot a \) ועכשיו נחסר \( 0\cdot a \) משני האגפים, ונקבל \( 0=0\cdot a \). זו הוכחה קצרה וקומפקטית מאוד, אבל היא כן מניחה כל מני הנחות ששווה לשים עליהן זרקור.

ראשית, המעבר הראשון בהוכחה הוא \( 0\cdot a=\left(0+0\right)\cdot a \), שמניח את השוויון \( 0=0+0 \). אני חושב שאין לנו ויכוח על השוויון הזה, שבכלל לא נוגע למספר הקסום \( a \), אלא למהות של 0 שהופכת אותו למספר כזה בעייתי: \( 0 \) הוא המספר הנייטרלי לפעולת החיבור, כלומר אם מחברים 0 למשהו, המשהו לא משתנה. גם כשהמשהו הוא אפס בעצמו.

המעבר השני בהוכחה \( \left(0+0\right)\cdot a=0\cdot a+0\cdot a \) הוא מקרה פרטי של משהו שנקרא חוק הפילוג (או במתמטית, דיסטריביוטיביות). הנה הכתיב הכללי:

\( \left(x+y\right)\cdot z=x\cdot z+y\cdot z \)

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

השלב האחרון בהוכחה הוא ה”לחסר \( 0\cdot a \) משני האגפים” שהוא בעצם ההנחה שמתקיים \( 0\cdot a-0\cdot a=0 \). גם כאן, זו לא הנחה מובנת מאליה: לכאורה לחסר משהו מעצמו אמור תמיד לתת אפס, אבל בהמשך אני אראה דוגמה לסיטואציה שבה זה לא המצב ואנחנו חיים עם זה טוב במתמטיקה. אלא מה, אם אני מניח ש-\( 0\cdot a \) הוא מספר ממשי, ההנחה הזו כן נכונה. כלומר, אם אני טוען ש-\( 0\cdot a=6 \), אז לחסר אותו מעצמו כן צריך לתת 0.

בקיצור, אם אני רוצה לטעון שיש \( a \) כך ש-\( 0\cdot a=6 \), מה שברור לי הוא ש-\( a \) לא יכול להיות מספר ממשי - כלומר, מהמספרים ה”רגילים” שאנחנו מתעסקים איתם ביומיום. הוא חייב להיות מספר חדש. וזה קצת מזכיר סיטואציה דומה שהתרחשה במתמטיקה לפני כמה מאות שנים: אנחנו יכולים להוכיח די בקלות שלכל מספר ממשי \( a \) מתקיים \( a\cdot a\ge0 \), ולכן פשוט לא קיים מספר ממשי \( a \) כך ש-\( a^{2}=-1 \), אבל המתמטיקאים מצאו את עצמם בסיטואציה שבה הם נאלצים להוציא שורש ל-\( -1 \) ולעבוד איתו מתמטית. אז הם “המציאו” (במרכאות, כי זו לא באמת המצאה, יש בניות קונקרטיות מאוד) מספר \( i=\sqrt{-1} \) והכניסו אותו למתמטיקה והיום אי אפשר לזוז שני מטרים במתמטיקה בלי להיתקל ב-\( i \) הזה ובמספרים שנבנים בעזרתו (“מספרים מרוכבים”). זו המצאה שימושית בצורה יוצאת דופן והמתמטיקה שהיא הניבה היא יפהפיה. אבל הנה לב העניין כאן: המתמטיקה עם \( i \) היא יפהפיה כי \( i \) משחק יפה עם המספרים הקיימים. כדי להכניס אותו לתמונה לא היינו צריכים לוותר על חוק הפילוג או על זה שמספר פחות עצמו הוא 0. במתמטית נפוצה אנחנו אומרים על זה שהמספרים הממשיים \( \mathbb{R} \) היו שדה, שזו קבוצה שמקיימת את חוקי החשבון הרגילים (חיבור, חיסור, כפל, חילוק) עם כל התכונות הנחמדות שלהן מבית הספר (חוק הקיבוץ, חוק החילוף, חוק הפילוג) וגם המרוכבים \( \mathbb{C} \) הם שדה.

זה לא אומר שלהוסיף את \( i \) לתמונה לא עלה לנו שום דבר. בממשיים \( \mathbb{R} \) יש יחס סדר, אפשר להשוות בין שני מספרים ולומר ש-\( 3<8 \) וכדומה. אם מכניסים את \( i \) לתמונה זה הולך לאיבוד. אין ב-\( \mathbb{C} \) יחס סדר “טבעי”, כזה שמשחק יפה עם תכונות השדה. במתמטית: \( \mathbb{R} \) הוא שדה סדור ואילו \( \mathbb{C} \) הוא כבר לא שדה סדור. זה מחיר שאנחנו מוכנים לשלם, משתי סיבות: ראשית, כי אנחנו עדיין יכולים לעבוד עם \( \mathbb{R} \) לבדה, אף אחד לא מכריח אותנו תמיד לעבוד עם \( \mathbb{C} \), אנחנו לא זורקים לפח את המתמטיקה שלא מערבת מרוכבים. שנית, כי המתמטיקה שאנחנו כן יכולים לעשות עם \( \mathbb{C} \) היא כאמור די יפהפיה. וזה פשוט לא קורה אם אנחנו מגדירים \( a=\frac{6}{0} \). במקום זה רק צצות עוד ועוד בעיות.

בואו נראה עוד בעיה. דיברתי על חוק הקיבוץ. הוא אומר (עבור כפל) ש-\( \left(a\cdot b\right)\cdot c=a\cdot\left(b\cdot c\right) \). נשמע סביר? ובכן, אם \( a\cdot0=6 \) אז בואו נכפול ב-2 את שני האגפים. נקבל

\( \left(a\cdot0\right)\cdot2=12 \)

ומחוק הקיבוץ נקבל

\( a\cdot\left(0\cdot2\right)=12 \)

כלומר

\( a\cdot0=12 \)

אבל התחלנו מכך ש-\( a\cdot0=6 \), אז קיבלנו \( 6=12 \), ובמילים אחרות קיבלנו \( 6=0 \). אאוץ’. אין מנוס, נצטרך לוותר על חוק הקיבוץ כש-\( a \) מעורב, או על הקטע הזה שאם \( a\cdot0 \) שווה לשני דברים שונים אז הם שווים זה לזה, שזה עיקרון בסיסי במתמטיקה עוד מאז אוקלידס (“שוויון הוא טרנזיטיבי” במתמטית מודרנית).

אוקיית אז אם אנחנו מניחים ש-\( \frac{6}{0}=a \) הלכו לנו חוק הפילוג וחוק הקיבוץ. אבל אולי אפשר להציל את עצמנו בדרך פשוטה? להגיד שמכך ש-\( \frac{6}{0}=a \) לא נובע ש-\( 6=0\cdot a \)? אפשר לעשות את זה, ואז עולה השאלה מה השוויון \( \frac{6}{0}=a \) בעצם נותן לנו; ומכיוון שזה אחד מאותם דברים שעושים בפועל והם אפילו שימושיים, אני אדבר על זה בהמשך.

הדבר האחרון שאני רוצה לדבר עליו בגזרת ה”בעיות” הוא השאלה הבאה: אם אמרנו ש-0 כפול כל דבר יוצא 0, מה בעצם הבעיה עם \( \frac{0}{0} \)? אם אני למשל אגדיר \( \frac{0}{0}=0 \), האם זה יוביל לסתירה? לא, כי \( 0=0\cdot0 \). ומה אם, למשל, אני אגדיר \( \frac{0}{0}=1 \)? גם במקרה הזה אין סתירה כי \( 0=0\cdot1 \). אז מה הבעיה? ובכן, זה עתה ראינו מה הבעיה - עכשיו הבעיה היא לא שאין לנו מספר מתאים עבור \( \frac{0}{0} \) אלא שיש יותר מדי כאלו. איך אני אמור להגדיר? \( \frac{0}{0}=0 \) או \( \frac{0}{0}=1 \) או אולי משהו אחר? אני הרי לא יכול להגדיר את שניהם גם יחד, כי אז \( 0=\frac{0}{0}=1 \) וקיבלנו \( 0=1 \) או שוב פעם ויתור על העקרון הממש בסיסי ששוויון הוא טרנזיטיבי.

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

\( \frac{0}{0}+\frac{0}{0}=\frac{0+0}{0}=\frac{0}{0}=1 \)

וזה כשאני משתמש בכללי החיבור הרגילים של שברים - והופס, קיבלתי \( 1=2 \), סתירה במתמטיקה! אז אני יכול או לוותר על ההגדרה \( \frac{0}{0}=1 \) או לוותר על העיקרון לפיו אפשר לחבר שברים כשיש 0 במכנה, מה שהופך את \( \frac{0}{0} \) שוב למשהו שאין לנו מושג מה אפשר לעשות איתו, בעצם. אז לכאורה כל זה דוחף אותנו לכיוון ההגדרה \( \frac{0}{0}=0 \), אבל אל תתפתו לחשוב שזה יאפשר לנו לעשות חשבון עם הדבר הזה. כזכור, כשמחברים זוג שברים \( \frac{a}{b},\frac{c}{d} \), הנוסחה היא \( \frac{a}{b}+\cfrac{c}{d}=\frac{ad+bc}{bd} \), ולכן

\( 1=1+0=\frac{1}{1}+\frac{0}{0}=\frac{0+0}{0}=\frac{0}{0} \)

והופס! קיבלנו שוב את \( \frac{0}{0}=1 \) שכבר ראינו שהוא רועץ המתמטיקה - אלא אם כן שוב נוותר על משהו בסיסי. זה פשוט לא נגמר. זה כמו הצעצועים הללו שלוחצים עליהם במקום אחד ויוצאת בליטת פיכסה מהצד השני.

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

\( 4x=3x \)

אני יכול לחלק את שני האגפים ב-\( x \) ולקבל \( 4=3 \). הופס, סתירה במתמטיקה! הבעיה היא, כמובן, שאני לא יכול לחלק את שני האגפים ב-\( x \). לעשות דבר כזה אומר שלא משנה מה הערך של \( x \), תמיד ניתן לחלק בו. או, טכנית, תמיד ניתן לכפול את שני אגפים המשוואה בהופכי שלו. ל-\( 0 \) אין הופכי - אין מספר שאפשר לכפול בו את שני אגפי המשוואה ופשוט יעלים את \( x \) ממנה במקרה שבו \( x=0 \). מה שכן אפשר לעשות הוא להגיד “נניח ש-\( x \) שונה מאפס” ואז לחלק ב-\( x \), אבל אם מקבלים תוצאה לא הגיונית, המסקנה היא שההנחה הייתה לא נכונה. כמובן, את המשוואה \( 4x=3x \) אפשר לפתור יותר בקלות - מחסרים \( 3x \) משני האגפים ומקבלים \( x=0 \) מייד.

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

לאינסוף, והמינוס שלו

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

נניח שאני רוצה לחלק את 1 ב-0 אבל אמרנו שהתוצאה לא יכולה לצאת מספר ממשי. מה כן הולך לצאת מספר ממשי? אם אני אחלק את 1 לא באפס אבל במשהו די קטן. למשל, \( \frac{1}{10000} \). זה מספר די קטן, לא? אם אני מחלק את 1 בו, אני מקבל \( 10000 \), שהוא די גדול. אבל “קטן” ו”גדול” זה מושג יחסי. 10000 הוא גדול אם אנחנו רוצים לאכול 10000 תפוחים, אבל לא אם אנחנו מסתכלים על מספר הכוכבים ביקום. אפשר לקחת מספרים עוד יותר קטנים ולחלק את 1 בהם. למשל \( \frac{1}{10^{100}} \), ותוצאת החלוקה תהיה \( 10^{100} \) - המספר שמכונה “גוגול”. הבנו את הרעיון: לכל מספר טבעי \( n \), אני יכול לחלק את 1 ב-\( \frac{1}{n} \) והתוצאה תהיה \( n \) עצמו. אז המתמטיקאים אומרים - בואו לא נסתכל על חלוקה במספר קונקרטי, אלא ניקח סדרה של מספרים: המספרים \( 1,\frac{1}{2},\frac{1}{3},\ldots \) וכן הלאה. הסדרה שהאיבר הכללי שלה הוא \( \frac{1}{n} \).

ככל ש-\( n \) גדול יותר, כך המספרים בסדרה הזו קטנים יותר, והם מתקרבים עוד ועוד לאפס באופן בלתי מוגבל: על הדבר הזה אומרים שהסדרה \( \frac{1}{n} \) שואפת לאפס כאשר \( n \) שואף לאינסוף. אפילו כותבים \( \lim_{n\to\infty}\frac{1}{n}=0 \), למי שממש רוצים להיות פורמליים. מעשית זה אומר שאם ניקח מספר חיובי כלשהו, לא משנה כמה קטן הוא יהיה, נוכל למצוא מקום בסדרה שבו האיברים של הסדרה כבר יותר קטנים. פורמלית: לכל \( \varepsilon>0 \) יש \( n \) כך ש-\( \frac{1}{n}<\varepsilon \) (ההגדרה האמיתית של גבולות יותר מסובכת, אם כי לא בהרבה, כי היא מיועדת להתמודד גם עם מקרים מסובכים יותר - כאמור, לא אכנס לזה כאן).

בואו נכניס עוד סימון: את הסדרה של המספרים שתיארתי אסמן על ידי \( a_{n}=\frac{1}{n} \). כלומר, \( a_{n} \) הוא האיבר ה-\( n \)-י בסדרה. עכשיו, בואו נגדיר סדרה חדשה שהאיבר הכללי שלה הוא \( \frac{1}{a_{n}} \) ונשאל את עצמנו לאן הסדרה הזו שואפת כש-\( n \) שואף לאינסוף. מכיוון שכפי שכבר ראינו, \( \frac{1}{a_{n}}=n \), זה אומר שככל ש-\( n \) נעשה יותר גדול, כך גם \( \frac{1}{a_{n}} \) נעשה יותר גדול. קצת יותר פורמלית, לכל \( M \) ממשי, \( \frac{1}{a_{n}}>M \) החל מאיזה שהוא מקום \( n \) בסדרה. על כזו סיטואציה אנחנו אומרים שהסדרה שואפת לאינסוף ומסמנים את זה \( \lim_{n\to\infty}\frac{1}{a_{n}}=\infty \).

מה שקריטי להבהיר כאן הוא שכרגע \( \infty \) הוא בסך הכל סימון. הוא לא מתאר מספר כלשהו. הוא לא מתאר איבר כלשהו. הוא בסך הכל מתאר את ההתנהגות “לכל \( M \) ממשי, \( \frac{1}{a_{n}} \) גדול מ-\( M \) החל ממקום \( n \) כלשהו”. הניסוח המאוד פתלתל הזה הוא בדיוק מה שהמתמטיקאים של המאה ה-19 חתרו אליו; המטרה הייתה בדיוק להעיף את האינסוף המוזר הזה מהחדו”א היפה שלהם, כי כשהאינסוף הזה השתתף בדברים בתור איבר מן השורה הוא באמת עשה צרות.

מה שהצגתי כאן היה דוגמא, אבל הוא נכון באופן כללי. אני רוצה לחדד את זה טיפה על ידי הצגת משפט אפילו עוד יותר כללי. אם \( a_{n},b_{n}>0 \) הן שתי סדרות שונות של מספרים חיוביים ואנחנו בונים את הסדרה \( \frac{a_{n}}{b_{n}} \) ורוצים לדעת מהו \( \lim_{n\to\infty}\frac{a_{n}}{b_{n}} \), אז הנה שתי סיטואציות חשובות:

  1. אם \( \lim_{n\to\infty}a_{n}=A \) וגם \( \lim_{n\to\infty}b_{n}=B \) כך ש-\( A,B \) מספרים ממשיים ששניהם שונים מאפס, אז \( \lim_{n\to\infty}\frac{a_{n}}{b_{n}}=\frac{A}{B} \)
  2. אם \( \lim_{n\to\infty}a_{n}=A \) וגם \( \lim_{n\to\infty}b_{n}=0 \) כך ש-\( A>0 \) מספר ממשי חיובי, \( \lim_{n\to\infty}\frac{a_{n}}{b_{n}}=\infty \)

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

אז תוצאה מס’ 2 היא מה שקורה כשאני חותך את האבטיח עם סכין שף. כשאני מחלק סדרה ששואפת למשהו חיובי בסדרה של מספרים חיוביים ששואפת לאפס, אני מקבל שאיפה לאינסוף. זה מוביל לתפיסה הדי פופולרית שלחלק משהו באפס מחזיר אינסוף, וזו תפיסה לא רעה: אם אני אראה מישהו כותב \( \frac{1}{0}=\infty \) אני לא אתפלץ. אבל צריך להבין שזו גם תפיסה שגויה כי היא פשטנית מדי. מ-2 שכתבתי למעלה אי אפשר עדיין להסיק “לחלק משהו באפס נותן אינסוף”. פשוט כי יש הרבה סיטואציות שלא נכללות ב-1-2 האלו שלמעלה.

שימו לב שהנחתי קודם (כמעט באופן מובלע, שלא תשימו לב) ש-\( a_{n},b_{n}>0 \), כלומר שתי הסדרות הללו הן של מספרים חיוביים. אבל מה קורה אם למשל ה-\( a_{n} \) יכולים להיות שליליים? בכזו סיטואציה \( A \) יכול להיות שלילי. למשל, בואו נסתכל על הסדרה \( a_{n}=-1 \) - סדרה קבועה שמחזירה תמיד 1. ניקח את הסדרה \( b_{n}=\frac{1}{n} \) שראינו קודם, אז במקרה הזה \( \frac{a_{n}}{b_{n}}=-n \) והדבר הזה לא הולך וגדל ככל ש-\( n \) גדל, אלא ההפך - הולך וקטן. אבל לא קטן במובן של “מתקרב לאפס” אלא במובן של “נהיה מספר שלילי עם ערך מוחלט ענקי”. פורמלית, לכל \( M \) (כולל \( M \) שלילי), החל ממקום בסדרה מתקיים \( \frac{a_{n}}{b_{n}}<M \). על כזה דבר אומרים שיש לנו שאיפה למינוס אינסוף, \( \lim_{n\to\infty}\frac{a_{n}}{b_{n}}=-\infty \). זה מה שקורה אם \( b_{n}>0 \) היא עדיין סדרה חיובית ו-\( a_{n} \) היא סדרה כלשהי כך ש-\( \lim_{n\to\infty}a_{n}=A \) ו-\( A<0 \).

הצרות רק מתחילות. מה קורה אם \( a_{n} \) היא כן סדרה חיובית, נאמר אפילו \( a_{n}=1 \), אבל דווקא אברי \( b_{n} \) הם כולם שליליים, למשל \( b_{n}=-\frac{1}{n} \)? גם במקרה כזה הגבול יצא \( -\infty \). אבל אם גם אברי \( b_{n} \) שליליים כולם וגם \( \lim_{n\to\infty}a_{n}=A \) כך ש-\( A<0 \) אז הגבול יהיה דווקא \( \infty \). כלומר, אי אפשר סתם להגיד על כל משהו חלקי אפס שהוא אינסוף - זה תלוי גם בשאלה האם ה”משהו” הוא חיובי או שלילי, אבל עוד יותר מכך - הוא תלוי בשאלה האם ה”אפס” שבמכנה הוא חיובי או שלילי, כלומר האם הסדרה ששואפת לאפס היא חיובית או שלילית. כשאנחנו רואים רק ביטוי כמו \( \frac{1}{0} \) אין בו, מן הסתם, שום מידע על סדרה בדיונית כלשהי ששואפת לאפס במכנה שלו. יש רק 0. לכן הביטוי \( \frac{1}{0} \) הוא לא מוגדר היטב גם אם מאמצים את הגישה של החדו”א.

שימו לב שבכל מה שתיארתי עד כה היה מקרה אחד שהתרחקתי ממנו כמו מאש - המקרה \( \frac{0}{0} \). אצלי הגבול \( A \) של המונה תמיד היה שונה מאפס, ובכוונה. כי אם \( \lim_{n\to\infty}a_{n}=A=0 \) הסיטואציה משתגעת סופית ופשוט אי אפשר לדעת מה יקרה. הנה ניסוח פורמלי:

  • אם \( \lim_{n\to\infty}a_{n}=\lim_{n\to\infty}b_{n}=0 \) אז \( \lim_{n\to\infty}\frac{a_{n}}{b_{n}} \) יכול להיות בלתי מוגדר, או \( \infty \), או \( -\infty \), או \( r \) לכל מספר ממשי \( r\in\mathbb{R} \).

זה אפילו ממש קל להראות דוגמאות לכל הדברים הללו:

  • אם \( a_{n}=\frac{r}{n} \) וגם \( b_{n}=\frac{1}{n} \) אז \( \frac{a_{n}}{b_{n}}=r \) וזו סדרה ששואפת ל-\( r \).
  • אם \( a_{n}=\frac{1}{n} \) וגם \( b_{n}=\frac{1}{n^{2}} \) אז \( \frac{a_{n}}{b_{n}}=n \) וזו סדרה ששואפת ל-\( \infty \).
  • אם \( a_{n}=-\frac{1}{n} \) וגם \( b_{n}=\frac{1}{n^{2}} \) אז \( \frac{a_{n}}{b_{n}}=-n \) וזו סדרה ששואפת ל-\( -\infty \).
  • אם \( a_{n}=\frac{\left(-1\right)^{n}}{n} \) וגם \( b_{n}=\frac{1}{n} \) אז \( \frac{a_{n}}{b_{n}}=\left(-1\right)^{n} \) וזו סדרה שאין לה גבול (הסדרה \( 1,-1,1,-1,\ldots \))

זה יפה, כי זו בעצם חזרה על מה שראינו בתחילת הדיון: משהו כמו \( \frac{1}{0} \) מציב לנו בעיה כי אין לנו מספר מתאים לתאר אותו; אבל משהו כמו \( \frac{0}{0} \) מציב לנו בעיה כי יש לנו יותר מדי מספרים שלכאורה יכולים לתאר אותו.

מה שיש למחשבים לומר בעניין

הזכרתי קודם את ה-USS Yorktown שנתקעה אחרי שהמחשב שלה חילק באפס וקרס. האם זה באמת מה שמחשבים אמורים לעשות כשמחלקים באפס? לקרוס? יש לזה שתי תשובות: אחת היא “כן” והשניה היא “לא”. זה פחות תלוי בשאלה מה היחס שלכם לחלוקה באפס ויותר מה היחס שלכם לתכנות ולמערכות תוכנה.

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

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

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

אבל לפעמים אנחנו באמת לא רוצים לקרוס כשמחלקים באפס, וגם לא לתפוס את החריגה - אנחנו רוצים פשוט לאפשר חלוקה באפס ולהתמודד עם התוצאות. זה קורה, למשל, בספרייה כמו Numpy של פייתון שמיועדת לחישובים נומריים. בספרייה כמו זו אנחנו עשויים למצוא את עצמנו מבצעים חישובים עם כמות עצומה של נתונים בבת אחת, למשל (שוב, תיאור קצת פשטני) לקחת שתי סדרות \( a_{n},b_{n} \) שמיוצגות כל אחת על ידי רשימה בגודל 100,000 איברים, ולחשב את הרשימה שאבריה הם \( \frac{a_{n}}{b_{n}} \). בכזו סיטואציה ממש לא היינו רוצים לקרוס באמצע החישוב, אפילו לא אם אנחנו תופסים את החריגה; אנחנו רוצים שכל החישוב יסתיים, ואם היו לנו מקרי חלוקה באפס באמצע, שיהיה, פשוט נחזיר תוצאה מתאימה. כאן “תוצאה מתאימה” מתקבלת מכך ש-Numpy מרחיב את טווח הערכים שיכולים להתקבל - לא רק מספרים ממשיים אלא גם \( \infty \) (שנכתב בתור inf), גם \( -\infty \) (שנכתב בתור -inf) ועוד ערך אחד, שבא לומר “אוקיי יש כאן בעיה” שנקרא NaN, קיצור של Not a Number.

בואו נראה איך זה קורה בפועל ברמת הקוד. הנה קוד פייתון פשוט מאוד שאפשר להריץ בפני עצמו ומחלק באפס:

1/0

התוצאה של הרצת הקוד הזה נותנת

ZeroDivisionError: division by zero 

כלומר, כאן פייתון זרקה חריגה עם השם מאוד ספציפי ZeroDivisionError וההודעה “division by zero” שמסבירה מה קרה. זו הגישה של השפה עצמה לחלוקה באפס. אבל Numpy היא לא חלק מהשפה - היא ספרייה, כלומר תוכנה גדולה שנבנתה בשפה הזו (ובסיוע שפות נוספות) ועם יותר שליטה על “מה שקורה בפנים”. אני הולך להדגים מה Numpy עושה על ידי זה שאייצר שתי רשימות באורך 3: אחת של \( 1,-1,0 \) והשניה של \( 0,0,0 \), ואחלק אותן איבר-איבר, כמו בדוגמאות ה-\( \frac{a_{n}}{b_{n}} \) שלי. זה הקוד:

import numpy as np
a = np.array([1,-1,0])
b = np.array([0,0,0]) 
a/b

התוצאה של הקוד הזה תיראה כך:

array([ inf, -inf,  nan])

כלומר, כמו שאמרתי קודם - החלוקה \( \frac{1}{0} \) נתנה \( \infty \), החלוקה \( \frac{-1}{0} \) נתנה \( -\infty \) והחלוקה \( \frac{0}{0} \) נתנה NaN. כל הערכים הללו הם לא המצאה של Numpy; הם מוגדרים בסטנדרט שנקרא IEEE 754 שעוסק בייצוג של מספרים ממשיים בשפות תכנות באמצעות שיטת הייצוג שנקראת “נקודה צפה”.

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

לגבי \( \infty \) כבר מתגלה גמישות רבה יותר, ותוצאות של פעולות חשבון מוגדרות בצורה שנראית לנו הגיונית:

  • אם \( a \) הוא מספר ממשי כלשהו אז \( \infty+a=\infty \) וגם \( \infty-a=\infty \)
  • אם \( a>0 \) הוא מספר ממשי חיובי כלשהו, אז \( a\cdot\infty=\infty \).
  • אם \( a<0 \) הוא מספר ממשי שלילי כלשהו, אז \( a\cdot\infty=-\infty \).
  • \( \infty+\infty=\infty\cdot\infty=\infty \)

כל הדברים הללו הגיוניים כי הם תואמים את חוקי הגבולות שראינו קודם. לעומת זאת, \( 0\cdot\infty \) או \( \infty-\infty \) הם NaN, בדיוק בגלל אותה בעיה לפיה יכולות להיות “יותר מדי תוצאות”. כלומר, כאן אנחנו מוותרים על הדרישה שהיא לכאורה הכי בסיסית, לפיה אם \( \frac{a}{b}=c \) אז \( a=bc \); זה פשוט לא קורה עבור \( \frac{1}{0}=\infty \) כי \( 0\cdot\infty \) הוא לא מוגדר. בהרבה סיטואציות זה גם לא מפריע לנו, כי מה שמעניין אותנו במספרים הללו הוא לא הזווית האלגברית אלא הזווית החדו”אית, אבל זה באמת תלוי סיטואציה. יש מקרים שבהם עדיף להתייחס ל-\( \infty \) הזה בתור עוד סוג של NaN וחסל. מה שברור הוא שמרגע שהשתרבב לנו \( \infty \) לחישוב, זהו - התוצאה של החישוב כבר לא תחזור להיות מספרים ממשיים.

ולסיום קצת חשיבה מרחבית

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

לפני שנתחיל לדבר על מספרים מרוכבים, שהם כידוע די מושמצים בעצמם בלי שום סיבה מוצדקת, בואו נדבר על מספרים ממשיים. כשאומרים “מספר ממשי” חושבים בדרך כלל על מה שנקרא ציר המספרים שהוא מין קו כזה עם 0 במרכז, המספרים החיוביים בצד ימין והשליליים בצד שמאל ואנחנו קוראים בשם “מספר ממשי” לכל מה שנמצא עליו (השאלה מה בעצם נמצא עליו היא לא פשוטה כמו שזה נשמע, אבל זה סיפור לפעם אחרת). אנחנו בדרך כלל חושבים על הקו הזה כאילו הוא ממשיך עד אינסוף לשני הכיוונים, ובמתמטית אוהבים לתאר אותו בתור הקבוצה \( \left(-\infty,\infty\right) \) - אוסף כל המספרים \( x \) שמקיימים \( -\infty<x<\infty \).

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

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

מבחינה טופולוגית, ציר המספרים המורחב הזה, שמסומן \( \left[-\infty,\infty\right] \) (הסוגריים המרובעים אומרים שנקודות הקצה של הקטע שייכות אליו, להבדיל מ-\( \left(-\infty,\infty\right) \)) לא שונה מהותית מאשר הקטע \( \left[-1,1\right] \), למשל. דבר אחד שכן צריך לעשות, וקצת גולש לפירוט טכני שאתם יכולים לדלג עליו, הוא להבהיר מי הקבוצות הפתוחות בציר המספרים המורחב הזה, כי בטופולוגיה מושג הבסיס שעליו אפשר לבנות מגדלים שלמים הוא מושג הקבוצה הפתוחה. בציר המספרים הרגיל \( \left(-\infty,\infty\right) \), “קבוצה פתוחה” היא כל קטע פתוח מהצורה \( \left(a,b\right) \) או איחוד כלשהו של קטעים כאלו (על זה אומרים שהקטעים \( \left(a,b\right) \) הם בסיס לטופולוגיה של ציר המספרים). בישר המורחב אנחנו מוסיפים את כל הקטעים מהצורה \( [-\infty,a) \) ו-\( (b,\infty] \) (פורמלית זו דוגמא למשהו שנקרא טופולוגיית סדר; זה לא חשוב מה זה בדיוק אומר אבל הנקודה היא שזה מושג סטנדרטי, לא משהו שהומצא אד-הוק לצורך הדוגמא הזו).

דבר אחד שאפשר לעשות עם קבוצות פתוחות הוא להגדיר גבולות בצורה שלא נזקקת לדיבור על אי שוויונים ומרחקים. את ההגדרה ה”קלאסית” של גבול לא נתתי כאן, אבל הנה הגדרה טופולוגית: \( \lim_{n\to\infty}a_{n}=A \) אם לכל קבוצה פתוחה שמכילה את \( A \), קיים מקום בסדרה שהחל ממנו כל ה-\( a_{n} \)-ים שייכים לקבוצה הפתוחה. מה שנחמד בהגדרה הזו היא שעם ההגדרה ה”מורחבת” של הטופולוגיה שהצגתי, המושג של שאיפה לאינסוף או למינוס אינסוף הוא בסך הכל גבול “רגיל”, על פי אותה הגדרה, ולא כמו שקורה בחדו”א שם מתייחסים למקרים הללו בתור מקרים מיוחדים שזוכים לניסוח מיוחד.

עכשיו בואו נעבור לדבר על מספרים מרוכבים. המספרים המרוכבים לא ניתנים להצגה בתור קו - צריך לחשוב עליהם בתור מישור דו ממדי. מישור כזה נמשך עד לאינסוף לכל הכיוונים, אז על פניו נראה שאי אפשר לעשות בו את אותו תרגיל ולהוסיף נקודות אינסוף כי נצטרך להוסיף יותר מדי. אבל למעשה, אפשר לעשות תעלול פשוט מאוד - להוסיף רק נקודה אחת של אינסוף. אפשר לדמיין את זה ככה: במקום לחשוב על המישור המרוכב כאינסופי, לעשות זום אאוט גם כאן ולחשוב עליו בתור מטפחת בד. תעטפו כדור בתוך המטפחת, מה יקרה? כל הקצוות של המטפחת יתרכזו בנקודה אחת: קחו את הנקודה הזו, קחו חוט ומחט ו”תתפרו” את הכל ביחד והופס, קיבלתם יריעת בד עם צורה של פני השטח של כדור - מה שנקרא ספירה, ועם נקודה חדשה שנוצרה במקום שבו תפרתם את הכל - זו נקודת ה”אינסוף”. הקבוצה הזו, \( \mathbb{C}\cup\left\{ \infty\right\} \) עם הגאומטריה הכדורית הזו נקראת הספירה של רימן.

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

איך כל זה קשור לחלוקה באפס? ובכן, אם יש לנו במרחב שלנו את הנקודה \( \infty \), אנחנו נהיים הרבה יותר פתוחים להגדרה של \( \frac{1}{0}=\infty \). זו עדיין לא הגדרה שיכולה לעבוד מבחינה אלגברית, כלומר לא הולך להתקיים \( 1=0\cdot\infty \). אז בשביל מה זה כן טוב? ובכן, למשל כדי לדבר על העתקות מביוס. העתקת מביוס היא פונקציה מרוכבת מהצורה \( f\left(z\right)=\frac{az+b}{cz+d} \). אלו פונקציות שימושיות בצורה יוצאת מן הכלל, אבל בשביל שהשימושיות הזו תבוא לידי ביטוי, נוח לנו לעבוד איתן במרחב שבו הן “נחמדות”, למשל מוגדרות בכל מקום. אז למשל עבור העתקת המביוס \( f\left(z\right)=\frac{1}{z} \) (כאן \( a=d=0 \) ו-\( b=c=1 \)) אנחנו רוצים שהיא תהיה מוגדרת גם ב-\( z=0 \), ולכן במישור המרוכב המורחב אפשר להגדיר \( f\left(z\right)=\infty \). בגלל ש-\( \infty \) היא פשוט נקודה כמו כל נקודה אחרת (כי ספירה היא סימטרית לגמרי, אז אפשר לחשוב על כל הנקודות כזהות) אנחנו מקבלים מזה מעין אחידות של כל העתקות המביוס, במקום שנצטרך להתחיל לפצל לכל מני מקרים וסוגים. אז זו בהחלט דוגמא לסיטואציה שבה משתלם להגדיר \( \frac{1}{0}=\infty \) למרות האובדן של המשמעות האלגברית של שוויון כזה.

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


נהניתם? התעניינתם? אם תרצו, אתם מוזמנים לתת טיפ:

Buy Me a Coffee at ko-fi.com