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

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