תורת החישוביות/כריעות שפות/רדוקציה חישובית/ארגז חול
בקיום שפות לא כריעות ראינו שבעייה ספיציפית, בעיית העצירה, איננה כריעה, וראינו משיקולי מניה שיש אינספור שפות שאינן אפילו כריעות למחצה. לעתים רוצים להוכיח קיום (או שלילת-קיום) רמת כריעות כלשהי של שפה כלשהי. במצב כזה, אין טעם "להוכיח את הגלגל מחדש" ולבנות סתירה כפי שעשינו בהוכחת אי-כריעותה של בעיית העצירה. במקום זאת, כדאי לבנות על מה שכבר ידוע. נציג כאן את רעיון הרדוקציה שהינו אחד הרעיונות המרכזיים ביותר במדעי המחשב. הרעיון שעומד מאחורי הרדוקציה הוא המרת בעיה אחת לבעיה קודמת, ידועה יותר.
דוגמה לרדוקציה ומאפייניה
[עריכה]נניח שנתנת לנו הבעיה הבאה: נתונה רשימת מספרים, ועלינו למצוא האם האיבר הגדול ביותר מופיע לפחות שלוש פעמים. כמובן שאפשר לפתור זאת בדרכים שונות. עם זאת, נניח שעומדת ברשותנו שגרה המקבלת רשימת מספרים, ומוצאת האם האיבר הקטן ביותר מופיע לפחות שלוש פעמים. האם נוכל להשתמש בשגרה זו? בודאי. נוכל לעשות זאת באופן הבא:
- נקח את הרשימה המקורית, ונמיר אותה לרשימת המספרים ההפוכים בסימניהם לרשימה המקורית (לדוגמה, הרשימה תהפוך לרשימה ).
- נפעיל את השגרה שכבר קיימת לנו, ונחזיר את תוצאתה.
קל לראות ששיטה זו פותרת את הבעיה החדשה. אם"ם האיבר הקטן ביותר ברשימה החדשה, נסמנו כ מופיע לפחות שלוש פעמים ברשימה החדשה, אז המספר הגדול ביותר ברשימה המקורית, y, מופיע לפחות שלוש פעמים ברשימה המקורית.
אפשר לראות שהמרנו בעיה חדשה לבעיה קודמת, לגביה אנו יודעים יותר (במקרה זה, יש כבר שגרה כתובה לה), באופן שמועיל לפתרון. מה מאפיין המרה זו?
- לכל קלט לבעיה המקורית יש קלט מומר לבעיה הקודמת – ניתן להמיר כל קלט.
- ניתן לבצע את ההמרה ע״י מ״ט – ההמרה ברת־חישוב.
- מפתרון הבעיה הקודמת אפשר להסיק חד-משמעית את הפתרון לבעיה .
הרדוקציה, לכן, ממירה בעיה חדשה לבעיה קודמת שעליה אנו כבר יודעים משהו. בדוגמה זו, מצאנו דרך לפתור בעיה חדשה ע"י המרה לבעיה שפתרונה כבר קיים. אפשר לעשות גם הפוך: בהנתן בעיה, אפשר להראות שלו היה לה פתרון, אז היה גם פתרון לבעיה אחרת שלה ידוע שאין פתרון. בהמשך הפרק נשתמש ברעיון הרדוקציה כדי להמיר בין שפות פורמליות, בעיקר כדי להראות לגבי חלקן שהן אינן כריעות.
רדוקציות בין שפות
[עריכה]
הגדרה: תהיינה שפות מעל א"ב . הפונקציה נקראת רדוקציה מ־ ל־ אם מתקיים:
נאמר ששפה ניתנת לרדוקציה ל־ אם קיימת רדוקציה מ־ ל־, ונסמן: . |
המשמעות היא שניתן להמיר קלט עבור הבעיה לקלט מתאים עבור השפה . אם יש לנו "כלי" שמכריע את השפה , אותו כלי יכול לשמש להכרעת .
דוגמה: רדוקציה משפת האלכסון לשפה האוניברסלית נראה כי שפת האלכסון ניתנת לרדוקציה לשפה האוניברסלית , כלומר . נגדיר את פונקצית הרדוקציה . נוכיח כי זו רדוקציה בהתאם להגדרה:
|
דוגמה: רדוקציה מהשפה האוניברסלית לבעיית העצירה נראה כי השפה האוניברסלית ניתנת לרדוקציה לבעיית העצירה , כלומר . נגדיר את הפונקציה כאשר היא קידוד של מ״ט שנבנית מתוך הקידוד של M באופן הבא: כל מעבר של M למצב מוחלף בלולאה אינסופית (למשל, ע״י מעבר למצב חדש q שתמיד עובר לעצמו, ללא תלות בקלט). נובע:
|
תכונות בסיסיות של רדוקציות
[עריכה]- לכל שפה L, מתקיים ע״י פונקציית הזהות.
- אם f היא רדוקציה מ־ ל־, ו־g היא רדוקציה מ־ ל־, אזי ההרכבה היא רדוקציה מ־ ל־. (זוהי תכונת טרנזיטיביות)
- אם f היא רדוקציה מ־ ל־ אז אותה הפונקציה f היא גם רדוקציה מ־ ל־. (נובע מהגדרת הרדוקציה)
משפטים
[עריכה]
משפט: משפט הרדוקציה אם שפות מעל כך שקיימת רדוקציה אזי: |
במילים אחרות, אם השפה שייכת למחלקה כלשהי, גם השפה שייכת לאותה מחלקה. באופן אינטואיטיבי, העובדה ש־ שייכת למחלקה מסויימת משמעותה שקיימת מ״ט מסויימת (לפי ההגדרה המתאימה של המחלקה) שמכריעה אותה. עקב קיומה של פונקצית הרדוקציה, ניתן לבנות מ״ט שראשית ממירה קלט של לקלט של (ע״י חישוב הפונקציה f), ואח״כ מריצה את המכונה של על מנת לפתור את הבעיה . כעת נוכיח רעיון זה באופן פורמלי:
הוכחה: נניח שקיימת רדוקציה f מ־ ל־ והיא ניתנת לחישוב ע״י מ״ט .
אזי קיימת מ״ט המכריעה את . נבנה מ״ט המכריעה את :
- על קלט x, המכונה מריצה את (הפיכת הקלט x לקלט שמתאים ל־), ומריצה את על הקלט המומר. המכונה מחזירה את אותה התשובה שהחזירה על הקלט המומר.
מכיוון ש־f פונקציה מלאה, חישוב יסתיים לכל קלט x, ומכיוון ש־ מכריעה (כלומר, עוצרת על כל קלט) גם המכונה עוצרת לבסוף על כל קלט. כמו כן, f תקפה, כלומר אם״ם . לכן אם אז הקלט המומר , ו־ תקבל את הקלט. מכאן שבמקרה זה מקבלת את x. מצד שני, אם אזי ולכן דוחה את הקלט המומר, וגם דוחה כנדרש. מכאן נובע – מכריעה את ו־ לפי ההגדרה.
ההוכחות עבור סעיפים 2 ו־3 דומות להוכחה לעיל. במקרה זה ייתכן ש־ לא עוצרת על קלטים מסויימים, וגם לא תעצור על אותם הקלטים. אבל אלו יהיו בדיוק הקלטים עליהם מותר ל־ לא לעצור, לפי ההגדרה המתאימה של , .
אם נביט במשפט ההפכי למשפט הרדוקציה לעיל, נקבל את המשפט הבא:
משפט: משפט הרדוקציה ההופכי נניח אזי, |
הסבר: נניח ש־. אם נובע ממשפט הרדוקציה שהוכחנו לעיל שגם , וזו סתירה.
משפט זה שימושי ביותר להראות ששפות אינן כריעות. מספיק להוכיח ששפה מסויימת אינה כריעה (כלומר, אינה ב־R), ובעזרתה נוכל להוכיח ששפות אחרות אינן כריעות ע״י רדוקציה מ־ אל אותן השפות. בד״כ ביצוע רדוקציה היא פעולה פשוטה בהרבה מאשר הוכחה ישירה ששפה אינה כריעה.
להלן מספר דוגמאות להוכחת אי כריעותן של מספר שפות שראינו בכריעות למחצה חיובית.
דוגמה: אי כריעות השפה האלכסונית נראה שהשפה האלכסונית אינה כריעה, . נשים לב ש־ סגורה למשלים. לפיכך, מכיוון ש־, כך גם השפה המשלימה. |
דוגמה: אי כריעות השפה האוניברסלית ראינו מקודם שמתקיים. . אי-הכריעות נובעת, לכן ממשפט הרדוקציה ההופכי. |
דוגמה: אי כריעות שפת בעיית העצירה ראינו מקודם שמתקיים. . אי-הכריעות נובעת, לכן ממשפט הרדוקציה ההופכי. |
- | ארגז חול | - |