תורת החישוביות/שקילות מודלי חישוב

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי

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

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

הגדרה:

שני מודלים יקראו שקולים אם כל פונקציה (חלקית או מלאה), הניתנת לחישוב במודל אחד, ניתנת לחישוב במודל השני.

על מנת להוכיח שקילות, נראה כיצד ניתן "לסמלץ" כל מכונה במודל חישוב אחד, על-ידי מכונה מתאימה במודל החישוב השני.

שקילות מכונת טיורינג "חסרת מנוחה" למ"ט הסטנדרטית[עריכה]

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

על מנת להראות שקילות יש להוכיח שני כיוונים.

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



שקילות מ"ט מרובת סרטים[עריכה]

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

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


טענה:

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

הכיוון הישיר הינו פשוט - כל מכונה עם k סרטים יכולה לסמלץ מכונה בעלת סרט יחיד על-ידי "התעלמות" משאר הסרטים.

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

כאשר .

הסימולציה מתבצעת באופן הבא.

  1. תחילת חישוב: המרת הקלט לצורת ה"זוגות" עד שמגיעים לתא ריק, וסימון ה"תגים" על האות הראשונה בשני הסרטים.
  2. צעד חישוב
    1. מבצעים סריקה לימין עד ש"מוצאים" את שני התגים. כל תג שמצאנו מעביר אותנו למצב בקרה ש"זוכר" את האות שראינו.
      דוגמא: נניח שבתחילה אנו במצב , והסרט מכיל . אנו מתחילים בסריקה ימינה, וראשית נמצא את מיקומו של הראש הראשון מביט על האות a. בשל כך נעבור למצב המסמל שהראש הראשון רואה a ואת הראש השני עדיין לא מצאנו. נמשיך בסריקה עד מציאת התג השני שיגרום לנו לעבור למצב .
    2. לפי שתי האותיות שקראנו נעבור למצב המתאים ש-M הייתה עוברת, ונזכור כיצד יש לשנות את הסרט. נניח כי המעבר של M הוא . אזי אם היתה במצב היא תעבור למצב המסמל שיש לשנות את האות מתחת לראש הראשון ל-t ולהזיז את הראש לכיוון , וכן לשנות את האות מתחת לראש השני ל-u ולהזיז את הראש השני בהתאם ל-.
    3. נסרוק את הסרט שמאלה עד שנתקל בתג. נבצע את השינוי המתאים של האות, ונזיז את ה"תג" בהתאם לדרוש, ונעבור למצב המסמן שסיימנו פעולה זו.
      לפי הדוגמא לעיל, לאחר שמצאנו, נניח, את הראש השני, נעבור למצב , ונמשיך בסריקה עד שנמצא את הראש הראשון, נבצע את כתיבת האות והזזת התג, ונעבור למצב
    4. נעבור למצב ונתחיל צעד חישוב חדש.
  3. כאשר עוברת למצב סופי, נסרוק שוב את הסרט ונתרגם חזרה את "זוגות" האותיות לאותיות רגילות (נמחק את כל תוכן כל הסרטים פרט לתוכן סרט הראשון), נזיז את הראש למקום בו מונח הראש הראשון של-M ונעבור ב- למצב סופי.

דוגמה למכונה לא-שקולה למ"ט[עריכה]

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

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

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

התזה של צ'רץ'-טיורינג[עריכה]

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

כל מודל סביר וכללי של מכונת חישוב שקול למודל מ"ט

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

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

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


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