תורת החישוביות/כריעות שפות/משפט רייס
משפט רייס טוען שבהנתן קידוד של מ״ט , קשה לדעת האם השפה מקיימת תכונה לא-טריוויאלית כלשהי (מושג שנגדירו במדוייק בהמשך). זהו כלי עזר חזק בהוכחה שבעיות אינן כריעות או אפילו נתנות למניה רקורסיבית.
בתכונות של שפות נגדיר במדוייק מהן תכונות של שפות, ובפרט מהן תכונות לא-טריוויאליות שלהן. במשפט רייס נוכיח שההחלטה האם לשפת המ"ט ישנה תכונה כזו - איננה כריעה. בדוגמאות ליישומי משפט רייס נראה דוגמאות לשימוש נכון ושגוי במשפט. במניה רקורסיבית של שפות בעלות תכונה נוכיח שההחלטה האם לשפת המ"ט יש תכונה לא טריוויאלית - בעקרון איננה אפילו נתנת למניה רקורסיבית (ונדון במקרים מיוחדים בהם היא כן).
תכונות של שפות
[עריכה]הגדרה: תכונה של שפות ב־ היא תת קבוצה .
דוגמאות:
- התכונה "(כל השפות כך ש...) שייך לשפה" היא תת הקבוצה
- התכונה "(כל השפות כך ש...) השפה היא סופית" היא תת הקבוצה היא סופית
- התכונה "השפה היא " היא תת הקבוצה
בתכונה האחרונה קיימת רק שפה אחת, אבל נשים לב שקיימות אינסוף מ״ט שמקבלות את השפה הנ״ל.
הגדרה: בהנתן תכונה נגדיר את השפה בתור אוסף מ״ט שהשפה שלהן מקיימת את התכונה . |
הערה: יש להבחין בין תכונה של שפות לבין תכונה של מכונות־טיורינג, כגון "למכונה יש מס' זוגי של מצבים". עבור מסויימת תתכן בעלת התכונה ו־ ללא התכונה כך שמתקיים .
הגדרה: S תיקרא טריוויאלית אם או |
אם טריוויאלית, אזי או שהיא אינה מכילה אף שפה, או שהיא מכילה את כל השפות ב־RE. עבור תכונה שכזו, השפה :
- אם , אזי אף שפה לא מקיימת את התכונה, לכן , וזו שפה כריעה.
- אם , אזי כל שפה שמתקבלת ע״י מ"ט מקיימת את התכונה, ומשתמע שקידודי כל מ״ט יהיו ב־ , כלומר, שגם היא שפה כריעה. (מקרה קצה: גם מחרוזות שאינן קידוד תקין של מ״ט מסמלות, לפי הגדרתנו, מ״ט שדוחה כל מילה בצעד הראשון. השפה של "מכונות" אלו היא , ושפה זו נמצאת ב־ ולכן גם ב־. לכן, גם קידודי "מכונות" אלו שייכים ל־.)
תרגיל : וודא שהנך מבין מדוע אם היא תכונה לא טריוויאלית, אז התכונה המשלימה לה, , גם היא לא טריוויאלית. | ||
---|---|---|
|
משפט רייס
[עריכה]המשפט הבא מראה כי לא ניתן להכריע בעזרת מ״ט האם השפה של מכונה מסויימת מקיימת או לא תכונה לא טריוויאלית S.
משפט: לכל תכונה לא טריוויאלית S של שפות ב־RE מתקיים: |
הוכחה: נראה כי על־ידי הרדוקציה . כלומר, נניח על דרך השלילה , ונראה כי אפשר להכריע לכל מ"ט וקלט , האם עוצרת על (מה שידוע שאינו נכון).
בלי הגבלת הכלליות, נניח כי השפה הריקה אינה ב־ (כלומר ). אחרת, פשוט נוכיח את המשפט לגבי התכונה המשלימה . כפי שראינו לעיל, גם המשלים של תכונה לא-טריוויאלית הוא תכונה לא טריוויאלית, והכרעה רקורסיבית לגבי שקולה להכרעה רקורסיבית לגבי .
היות ש־ אינה טריוויאלית, בהכרח קיימת שפה כך ש־. מכיוון ש־ היא קבוצה של שפות ב־, גם , ונניח כי היא מ"ט המקבלת אותה.
נגדיר מ״ט הפועלת כך: בהנתן קלט , המ״ט ,
- מריצה את על (ומתעלמת מהתוצאה), ואז
- מריצה את על , ומקבלת/דוחה כמותה
מהנחתנו בשלילה ש־, נובע שקיימת מ"ט רקורסיבית המכריעה את . כדי להכריע האם עוצרת על , נשאל את האם :
- אם איננה עוצרת על , אז גם איננה עוצרת על אף . אם כך, , ו־ תכריע ש־.
- אם עוצרת על x, אז מתנהגת בדיוק כמו . אם כך, , ו־ תכריע ש־.
נשים לב שאכן ניתן לבנות את : בהנתן , קל לבנות מ״ט המשרשרת את שתי המכונות ויוצרת את תיאור . כמו כן, לפי הנחת השלילה, הקריאה ל־ עוצרת על כל קלט.
כדאי לדעת: באופן פורמלי, ההוכחה לעיל שקולה להגדרת פונקציית הרדוקציה , ושימוש במשפט הרדוקציה ההפכי. קל לראות שפונקציית הרדוקציה בת־חישוב ומלאה (מקרה הקצה בו אינו קידוד תקין, יוגדר כפלט ). תקפות הרדוקציה נובעת מ:
|
דוגמאות ליישומי משפט רייס
[עריכה]משפט רייס מאפשר בצורה קלה מאד להוכיח שבעיות רבות אינן כריעות. עם זאת, יש להשתמש בו בזהירות. כפי שצויין בתכונות של שפות, למרות שהחלטת התכונה פורמאלית מופעלת על ייצוג של מ"ט, התכונה היא למעשה של שפות, ובפרט שפות ניתנות למניה רקורסיבית. כדי להשתמש במשפט רייס, יש לתרגם את השאלה כך שהיא פועלת על שפות נתנות למניה רקורסיבית. להלן מספר דוגמאות נכונות ושגויות לשימוש במשפט רייס (בדף התרגילים אפשר למצוא דוגמאות נוספות).
דוגמה: החלט האם הבעיה הבאה היא כריעה: נתון ייצוג של מ"ט . האם תקבל כל פלינדרום. הבעיה היא כדי להמיר זאת לפורמט מתאים לבעיית רייס, נכתוב את התכונה כעת, בפורמט המתאים, נוכל לשים לב שמשפט רייס חל. התכונה איננה טריוויאלית: השפה (הנתנת למניה רקורסיבית) בעלת התכונה, ואילו השפה הריקה איננה. |
להלן עוד דוגמה לשימוש נכון.
דוגמה: נגדיר את השפה . |
להלן דוגמה לשימוש שגוי במשפט רייס:
דוגמה: החלט האם הבעיה הבאה היא כריעה: נתון ייצוג של מ"ט . האם תקבל כל קלט תוך מספר זוגי של צעדים? כאן לא נוכל להמיר את הבעיה לפורמט מתאים לבעיית רייס, משום שמדובר בתכונה של מ"ט, לא תכונה של שפה. נקח מ״ט כלשהי, ונבנה מ״ט אחרת הנבדלת ממנה בכך שיש לה מצב התחלתי נוסף, ממנו עוברים למצב ההתחלתי המקורי. שתי המכונות מקבלות בדיוק אותה שפה, אך במספר שונה של צעדים. |
מאידך, נשים לב שלמרות שמשפט רייס מדבר על שפות, עצם העובדה שמ"ט מופיעות בהגדרת שפה, איננה פוסלת את השימוש במשפט באופן אוטומטי. פשוט צריך לשים לב האם אכן מדובר בתכונה של שפה. להלן דוגמה לשימוש נכון.
דוגמה: החלט האם הבעיה הבאה היא כריעה: נתון ייצוג של מ״ט . האם אפשר לבצע אופטימיזציה למכונה, כך לאחר האופטימיזציה, זמן הריצה שידרש לקבלת קלט כלשהו יהיה קצר מאורך הקלט ? לכאורה הבעיה עוסקת במכונה עצמה, אבל למעשה היא עוסקת בתכונה של השפה המתקבלת. כדי להמיר זאת לפורמט מתאים לבעיית רייס, נכתוב את התכונה באופן הבא כעת אפשר לראות שמדובר בתכונה של שפות, הגם שהן מוגדרות ע״י מכונות טיורינג. המשך דוגמה זו מופיע בתרגיל: אופטימיזציית מ"ט. |
מניה רקורסיבית של שפות בעלות תכונה
[עריכה]בחלק קודם ראינו שאם התכונה איננה טריוויאלית, אז שאלת השייכות ל- איננה ב-. בחלק זה נעסוק בשאלה מהם התנאים ל- כך ששאלת השייכות ל- תהיה ב-.
ללא תנאים נוספים, אם תכונה לא טריוויאלית, אז שאלת השייכות ל- איננה ב-. בתרגיל: הכרעת תכונות לא-טריוויאליות איננה נתנת למניה רקורסיבית תתבקש להוכיח את המשפט הבא:
משפט: עבור כל תכונה לא-טריוויאלית של שפות ב־, כך ש־ מתקיים: |
עם זאת, ישנם תנאים נוספים ל-, שקיומם מהווה תנאי מספיק והכרחי לכך ששאלת השייכות היא ב-.
משפט: בהנתן תכונה , אז אם"ם מתקיימות כלל התכונות הבאות:
|
בתרגיל: הכרחיות תנאי 1 למניה רקורסיבית של שפות בעלות תכונה, תרגיל: הכרחיות תנאי 2 למניה רקורסיבית של שפות בעלות תכונה, ותרגיל: הכרחיות תנאי 3 למניה רקורסיבית של שפות בעלות תכונה, תתבקש להראות שכ"א מתנאים אלה הכרחי להיות הבעיה ב-.
כעת נראה שתנאים אלה מספיקים לכך שההחלטה ב-.
הוכחה: להלן תיאור מכונה המקבלת קידוד של מ״ט , ובהכרח עוצרת בתשובה חיובית אם , ולעולם לא עוצרת בתשובה חיובית אם . הרעיון הכללי הוא להשתמש ב"הרצה במקביל" (dovetailing) (טכניקה שכבר ראינו במודל לבעיות הכרעה).
נשים לב שמתנאי 3 נובע שישנה מכונה אשר בהנתן שפה סופית השייכת ל־, עוצרת בשלב כלשהו ומקבלת את השפה. המכונה משתמשת ב.
המכונה פועלת במספר לולאות מקוננות:
- בלולאה החיצונית ביותר, היא מקדמת אינדקס . עבור כל , היא מייצרת את המחרוזת ה- בסדר לקסיקורפי.
- בלולאה פנימית יותר, עבור ערך והמחרוזת ה-, היא מפעילה את למשך שלבים. אם המילה מתקבלת, מוסיפה אותה לרשימת מילים ש- מקבלת.
- בלולאה פנימית יותר, עבור רשימת המילים שהתקבלו ע"י עד כה, המכונה מייצרת את כל תת-הקבוצות האפשריות של המילים שהתקבלו עד כה.
- בלולאה הפנימית ביותר, עבור ערך ותת-קבוצה של מילים מתקבלות, המכונה מריצה את לשאול האם תת-הקבוצה שייכת ל. אם כן, המכונה עוצרת בתשובה חיובית.
נשים לב שמתכונה 1 נובע שאם , אז יש לה תת-שפה סופית שגם היא ב-. שיטת הdovetailing כאן מבטיחה שהחל משלב כלשהו, תשקל על ידי . תנאי 3 מבטיח שבזמן סופי כלשהו, תזהה את כשייכת ל-. שוב פעם, שיטת הdovetailing מבטיחה שלאחר מספיק איטרציות תפעל מספיק פעמים על . כלומר, אם התשובה חיובית, אז בוודאות תחזיר תשובה חיובית.
נותר להראות ש- לא תחזיר תשובה חיובית במקרה שאיננו נכון. אך נשים לב שזה בדיוק מה שתנאי 1 אומר שאינו קורה: השפה היא תת-שפה של , עפ"י בניה. היא שייכת ל- עפ"י תנאי 3 והעובדה ש זיהתה אותה. השפה נתנת למניה רקורסיבית (שהרי זו שפה של מ״ט). מכאן נובע ש- גם היא ב-.
קישורים חיצוניים
[עריכה]
הפרק הקודם: רדוקציה חישובית |
משפט רייס תרגילים |
הפרק הבא: אי-הפרדתיות רקורסיבית |