תורת החישוביות/כריעות שפות

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

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

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

סוגי הכריעות ומחלקות הכריעות עריכה

כריעות (מלאה) עריכה

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


הגדרה:

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

שפה   ניתנת להכרעה אם קיימת מ"ט   שמכריעה אותה. שפה   אינה כריעה אם לא קיימת מ״ט שמכריעה אותה.


להלן דוגמאות לשפות כריעות:

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


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

הגדרה: מחלקת השפות הכריעות (או הרקורסיביות)

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

  קיימת מ״ט המכריעה את  

כריעות למחצה חיובית עריכה

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


הגדרה:

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

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

אוסף כלל השפות הניתנות להכרעה למחצה חיובית יסומן   (לחלופין, אוסף כלל השפות הניתנות למניה רקורסיבית, Recursively Enumerable):

  קיימת מ"ט M שמקבלת את כל המילים ב־L ואינה מקבלת אף מילה שאינה ב־L (אבל לאו דווקא דוחה)  

 

מעט אטימולוגיה.

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

נניח ש-  היא שפה כריעה למחצה חיובית ע״י מ״ט  . כעת נבצע הרצה מבוקרת של M על כלל המחרוזות האפשריות, כלומר, נפעיל את   צעד אחד על המחרוזת הראשונה ב־  (נניח, לפי סדר לקסיקוגרפי), אח״כ 2 צעדים על כ״א מ־2 המחרוזות הראשונות במניה, אח״כ 3 צעדים על כ״א מ־3 המחרוזות הראשונות וכו'. אם M מקבלת מילה כלשהי, E רושמת את המילה על הסרט וממשיכה הלאה. ברור שכל מחרוזת השייכת ל־L, תזוהה ככזו בשלב כלשהו ע"י כך ש־M תעצור ותקבל אותה. ולכן E רושמת כל מילה אפשרית ב־L לאחר זמן סופי.

נשים לב שהסדר של המניה אינו ידוע. בתרגיל נראה שקיימת מ״ט E המונה את L לפי סדר לקסיקוגרפי אם״ם  .

דוגמאות עריכה

להלן מספר דוגמאות לשפות נתנות למניה רקורסיבית:

1. השפה האוניברסלית מוגדרת כך:  

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


2. שפת האלכסון מוגדרת כך:  

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


3. שפת בעיית העצירה מוגדרת כך:   עוצרת על  

נוכיח כריעות למחצה חיובית: נריץ את   על   – אם המכונה תעצור, נקבל. אחרת –   לא עצרה וגם המכונה המסמלצת בלולאה אינסופית, ואינה מקבלת את הקלט הנ״ל.

כריעות למחצה שלילית עריכה

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


הגדרה:

נאמר שמ"ט   מכריעה למחצה שלילית היא דוחה כל מילה שאיננה ב־  ואיננה דוחה מילה ב- .

נסמן את קבוצת כלל השפות הכריעות למצה שלילית ב־  (coRecursively Enumerable):

  קיימת מ"ט M שדוחה את כל המילים שאינן ב־L ואינה דוחה אף מילה ב־L (אבל לאו דווקא מקבלת)  

תכונות מחלקות הכריעות עריכה

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

 
הייחסים בין קבוצות השפות



טענה:

  1.     ,    
  2.  


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

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

 


טענה:

3.    סגורה למשלים: אם   אז גם השפה המשלימה,    


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

 


טענה:

4.    סגורה לאיחוד:
לכל   מתקיים    

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


טענה:

5.    סגורה לאיחוד:
לכל   מתקיים    

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


טענה:

5.    סגורה לאיחוד  
6.    סגורות לחיתוך ושרשור  

(תרגיל: הוכח).


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