תורת החישוביות/מכונת טיורינג

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

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

מבוא[עריכה]

איור של "מכונת טיורינג" עם סרט זיכרון אינסופי

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

להרחבה בנושא מכונות מצבים, ראו אוטומטים ושפות פורמליות.

הגדרה[עריכה]

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

מתמטית, מכונת טיורינג (מ"ט) מוגדרת על-ידי השביעייה הבאה:

כאשר:

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

מהלך חישוב[עריכה]

מכונת טיורינג בתחילת החישוב עבור הקלט "abc"

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

בכל צעד חישוב הראש קורא את האות שעליה הוא מצביע. נניח שהראש קרא את האות , והמכונה נמצאת במצב בקרה (לא סופי) , אזי אם המכונה תחליף את האות באות , תזיז את הראש בהתאם לכיוון (כאשר L = שמאלה, R = ימינה ו-S = השאר במקום), ותעבור למצב בקרה חדש . לאחר מכן מתחיל צעד החישוב הבא.

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

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

דוגמה[עריכה]

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

באופן פורמלי, מרכיבי המכונה הם:

ופונקצית המעברים מוגדרת להלן

1 0

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

קונפיגורציה[עריכה]

נשים לב שעבור מ"ט נתונה, כל צעד חישוב נקבע בצורה יחידה על-ידי האינפורמציה הבאה:

  1. תוכן הסרט
  2. מצב הבקרה
  3. מיקום ראש הסרט

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

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

הגדרה:

קונפיגורציה של מ"ט M הינה השלשה כך ש

  1. מחרוזת של m אותיות מעל
  2. מיקום הראש יחסית לקצה הסרט,

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


לכל מ"ט M על קלט x, הקונפיגורציה ההתחלתית היא . קונפיגורציה סופית היא כל קונפיגורציה עבורה .



הגדרות[עריכה]

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


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




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