בקצרה
- מוכיחים את הרדוקציה : כל נוסחת CNF ניתנת לתרגום, בזמן פולינומי, לנוסחת 3CNF שקולת‑ספיקות לה.
- הכיוון ההפוך, , הוא רדוקציית הזהות — ומכאן ש‑.
- בשילוב עם משפט קוק–לוין (SAT היא NP‑קשה; ראו שיעור 9) מתקבל ש‑ היא NP‑שלמה. זו הבעיה הנוחה ביותר להתחיל ממנה רדוקציות, כי מבנה הקלט שלה נוקשה — בדיוק 3 ליטרלים לפסוקית לכל היותר.
- לב הבנייה: פסוקית באורך נחתכת לשתי פסוקיות באורכים ו‑ בעזרת משתנה עזר חדש שמשמש כמתג. חוזרים על הצעד עד שכל הפסוקיות קצרות.
- החצי העדין הוא הכיוון ההפוך של הנכונות: להראות שמשתני העזר אינם יכולים לרמות — כל השמה שמספקת את מצטמצמת להשמה שמספקת את . זה מוכח כאן במלואו.
- בנוסף: השיעור פותח בשלוש טענות תשתית (, סגירות תחת רדוקציות, ומשמעות NP‑שלמות), ונחתם בהדגמת כוח הביטוי של CNF — קידוד "בדיוק אחד", "לא ריק ולא מלא", ובעיית 8 המלכות כנוסחת CNF.
רקע ותלויות
השיעור הזה נשען כמעט כולו על שלושה דברים שכבר נלמדו. כדי לא לשלוח את הקורא אחורה, הנה הם במלואם.
1. המחלקה NP — שתי ההגדרות השקולות (שיעור 5–6). בהגדרה הראשונה, אם קיימת מכונת טיורינג אי‑דטרמיניסטית שמכריעה את וזמן הריצה של כל ריצה שלה חסום בפולינום באורך הקלט. בהגדרה השנייה (הגדרת ה‑verifier), אם קיימות מכונה דטרמיניסטית בזמן פולינומי ופולינום כך שלכל : המחרוזת נקראת עדות (witness). בשיעור 6 הוכח ששתי ההגדרות שקולות. בהוכחות כאן נוח לעבוד עם הגדרת ה‑verifier, וכך נעשה גם בשיעור 9 — כדברי המרצה, "דטרמיניזם תמיד יותר נוח לי, כי אני יודע כל צעד מה קורה בצעד הבא" [00:02:41, תמלול 15].
הערה על סימון המכונה: מכונת טיורינג נכתבת כאן כ‑, כולל מצב ההתחלה. בכמה עמודי סיכום בקורס מושמט ; זו החלקה ידועה במקור והתיקון נעשה כאן במכוון.
2. הבעיה SAT (נלמדה בשיעור 7, ומופיעה בהקלטה [00:06:24]–[00:16:14]). היא בעיית ההכרעה שקלטיה הם נוסחאות CNF, והשאלה היא האם הנוסחה ספיקה. בשיעור 7 הוכח : המכונה האי‑דטרמיניסטית כותבת על סרט שני ביטים ( = מספר המשתנים בנוסחה), מתייחסת אליהם כהשמה, ובודקת האם ההשמה מספקת. זמן הריצה [00:25:26].
3. רדוקציית זמן פולינומי (שיעור 7, [01:04:14]–[01:08:34]). היא רדוקציית זמן פולינומי מ‑ ל‑ אם היא ניתנת לחישוב בזמן פולינומי ולכל מתקיים . מסמנים .
כיוון הרדוקציה — קראו את זה לאט. פירושו ש‑ היא הבעיה הקשה יותר: מי שיודע לפתור את יודע לפתור גם את (מתרגמים את הקלט ופותרים). הכיוון הזה מתהפך כל הזמן בדיבור, ולכן בכל פעם שנכתוב נאמר גם במילים מי הקשה. בשיעור הזה נוכיח — כלומר 3SAT היא לפחות קשה כמו SAT, וזו בדיוק המטרה: להעביר את הקושי של SAT אל 3SAT.
4. שתי הערות מתודיות שחזרו בהקלטה ושייכות גם כאן.
- ברדוקציה אין פתרון של אף בעיה: "אני לא מכריע פה את IS ולא מכריע פה את CLIQUE, כל מה שאני עושה זה להמיר קלט" [01:11:50, 01:22:33].
- יש שני שלבים נפרדים לגמרי: בניית המכונה (שנעשית בלי לדעת אם הקלט בשפה — אם היינו יודעים, היינו מכריעים בזמן פולינומי), ורק אחר כך הוכחת הנכונות, שבה מותר להניח שהקלט בשפה [01:25:54].
הגדרות
הגדרה 1: משתנים, ליטרלים, פסוקיות ונוסחת CNF
יהיו משתנים בוליאניים, כלומר משתנים שיכולים לקבל את הערכים ו‑ (נסמן גם ו‑).
- ליטרל הוא משתנה או שלילתו: או .
- פסוקית (clause) היא "או" בין ליטרלים: .
- נוסחת CNF (conjunctive normal form) היא "וגם" בין פסוקיות.
אינטואיציה. CNF היא נוסחה בוליאנית שנכפתה עליה צורה נוקשה מאוד: שתי שכבות בלבד, "או" בפנים ו"וגם" בחוץ. הנוקשות הזו היא בדיוק מה שהופך את SAT לבעיה נוחה לרדוקציות — קלט של SAT הוא אובייקט פשוט לתיאור, ולכן קל "לכתוב לתוכו" בעיות אחרות. כדי לספק נוסחת CNF צריך לספק את כל הפסוקיות, אבל בכל פסוקית מספיק ליטרל אחד מסופק [00:14:32].
דוגמה. היא נוסחת CNF בת שתי פסוקיות.
אי‑דוגמה. אינה CNF — כאן ה"וגם" נמצא בפנים וה"או" בחוץ (זו צורת DNF). היא כמובן שקולה לנוסחת CNF כלשהי, אבל בתור מחרוזת קלט היא אינה חוקית עבור SAT.
הגדרה 2: השמה וסיפוק
השמה היא פונקציה שנותנת לכל אחד מהמשתנים ערך ב‑. עבור ליטרל מסמנים . ההשמה מספקת פסוקית אם לפחות ליטרל אחד בה מקבל , ומספקת נוסחת CNF אם היא מספקת כל אחת מפסוקיותיה. נוסחה נקראת ספיקה אם קיימת השמה שמספקת אותה.
דוגמה (מההרצאה, [00:12:20]–[00:13:56]). עבור וההשמה : הפסוקית הראשונה מסופקת על ידי , השנייה על ידי , אך בשלישית — ולכן אינה מספקת את . אם משנים ל‑ ההשמה כן מספקת. שימו לב: הנוסחה ספיקה, אך ההשמה הספציפית אינה מספקת — אלה שני דברים שונים.
הגדרה 3: נוסחת 3CNF
נוסחת CNF נקראת נוסחת 3CNF אם כל פסוקית שלה מכילה לא יותר מ‑3 ליטרלים.
אינטואיציה ואי‑דוגמה. הנוסחה היא CNF ואף 5CNF ו‑4CNF, אבל אינה 3CNF, בגלל הפסוקית השנייה שאורכה 4. לעומת זאת היא 3CNF — פסוקיות באורך 2 ו‑1 מותרות, כי הדרישה היא "לכל היותר 3".
הערה חשובה על הגדרה זו. יש ספרים שמגדירים 3CNF כ"בדיוק 3 ליטרלים בכל פסוקית". ההבדל אינו מהותי (ראו משפט 7), אבל הוא משנה את פרטי הבנייה. בקורס הזה ההגדרה היא "לכל היותר 3", וזו ההגדרה שממנה נגזר האלגוריתם שלהלן — לכן אין בו טיפול נפרד בפסוקיות באורך 1 או 2.
הגדרה 4: הבעיות SAT ו‑3SAT
כמו בהרצאה, לא נעסוק בפרטי הקידוד : מניחים שהקלט מתקבל כמחרוזת תקינה שמתארת נוסחה, ואם אינו תקין — בודקים זאת בזמן פולינומי ודוחים [00:17:52]. נחזור לנקודה הזו כשנבנה את הרדוקציה, כי שם היא דורשת טיפול קטן אך אמיתי.
הגדרה 5: NP‑קשה ו‑NP‑שלמה
שפה נקראת NP‑קשה (NP-hard) אם לכל מתקיים . שפה נקראת NP‑שלמה (NP-complete) אם NP‑קשה וגם .
אינטואיציה. NP‑קשה = "לפחות קשה כמו כל דבר ב‑NP", ולאו דווקא שייכת ל‑NP בעצמה. NP‑שלמה = "הכי קשה ב‑NP, ובתוך NP". סדר הכמתים קריטי: לכל שפה ב‑NP קיימת רדוקציה — לא קיימת רדוקציה אחת שמתאימה לכולן [00:01:08, תמלול 15].
משפטים והוכחות
משפט 1:
טענה. כל שפה ב‑ ניתנת להכרעה במקום פולינומי.
הוכחה. תהא . לפי הגדרת ה‑verifier קיימות מכונה דטרמיניסטית שזמן ריצתה פולינומי — נסמן את הפולינום — ופולינום , כך שלכל :
נגדיר מכונה דטרמיניסטית , על קלט :
- חשב את .
- לכל בסדר לקסיקוגרפי (יש אפשרויות):
- 2.1 הרץ את על .
- 2.2 אם קיבלה — קבל.
- דחה.
הנקודה שכל ההוכחה תלויה בה: בונים את כך שכל איטרציה של הלולאה תשתמש באותם תאים — לפני מעבר ל‑ הבא מוחקים את סרט העבודה. מספר האיטרציות אקספוננציאלי, אבל המקום לא מצטבר.
נכונות. אם אז קיים שעבורו מקבלת את ; מכיוון ש‑ עוברת על כל המחרוזות באורך , היא תגיע ל‑ הזה, שלב 2.2 יופעל, ו‑ תקבל. אם אז לכל המכונה דוחה את , לכן שלב 2.2 לא מופעל לעולם ו‑ דוחה בשלב 3.
ניתוח מקום. פולינום, ולכן כתיבת ומונה הלולאה דורשות תאים. הרצת על : זמן הריצה של פולינומי ב‑, ומכונה אינה יכולה לבקר ביותר תאים ממספר הצעדים שעשתה, ולכן המקום שהיא דורשת חסום ב‑. בסך הכול וזהו פולינום ב‑ — הרכבה וסכום של פולינומים הם פולינום. לכן .
הערה: ההוכחה הזו היא הסיבה שלא ניתן לקוות ל"הפרדה בזול" בין ל‑ דרך מקום: כל יושבת בתוך , כלומר החיפוש האקספוננציאלי עולה הרבה זמן אך מעט מקום.
משפט 2: סגורה כלפי רדוקציות פולינומיות
טענה. אם ו‑, אז .
הוכחה. נניח . אז קיימת מכונה שמחשבת את הרדוקציה, עם פולינום כך שלכל מתקיים , ולכל : נניח . אז קיימת מכונה שמכריעה את עם פולינום כך שלכל מתקיים .
נגדיר מכונה , על קלט :
- חשב את .
- הרץ את על והחזר את אותה תשובה.
נכונות. אם אז , לכן מקבלת את , לכן מקבלת את . אם אז , לכן דוחה, לכן דוחה.
ניתוח זמן. שלב 1 לוקח לכל היותר צעדים. לשלב 2 דרוש , ולכן צריך לחסום את אורך הפלט. מכונה שרצה צעדים אינה יכולה להאריך את הקלט ביותר מ‑ תווים, ולכן ומכאן ששלב 2 עולה לכל היותר . סכום שני הביטויים הוא סכום והרכבה של פולינומים — ולכן פולינום. לכן מכריעה את בזמן פולינומי, כלומר .
הערה: החסם על אורך הפלט הוא בדיוק הצעד ש"נבלע" בדרך כלל. בלעדיו לא הייתה סיבה ש‑ מופעל על ארגומנט קטן, וההרכבה יכלה להתפוצץ. זו הסיבה שכדאי תמיד לכתוב במפורש.
מסקנות (עמוד 3 בסיכום).
- באותו אופן בדיוק — מחליפים את במחלקה המתאימה ואת חסם הזמן בחסם המתאים — מקבלים ש‑, , , ו‑ כולן סגורות כלפי רדוקציות זמן פולינומי.
- היחס טרנזיטיבי: אם דרך ו‑ דרך , אז היא רדוקציה מ‑ ל‑; היא ניתנת לחישוב בזמן פולינומי כי פולינומי ב‑ (אותו חישוב בדיוק כמו למעלה), והנכונות היא שרשור של שתי שקילויות.
- מכאן המסקנה המבצעית של כל התחום: מספיק למצוא בעיה קשה אחת. אם NP‑קשה ו‑, אז NP‑קשה — כי לכל מתקיים ולפי הטרנזיטיביות .
משפט 3: משמעות NP‑שלמות
טענה. תהא שפה NP‑שלמה. אז אם ורק אם .
הוכחה. אם : מכיוון ש‑ NP‑שלמה בפרט . נניח . ההכלה ידועה. לכיוון השני, תהא שרירותית. מכיוון ש‑ NP‑קשה מתקיים , ומכיוון ש‑, לפי משפט 2 מתקבל . מכאן , ובסך הכול .
זו הסיבה שכל התחום מתעניין בבעיות NP‑שלמות: אלגוריתם פולינומי לאחת מהן מפיל את כולן. הצעד הבא — קיומה של בעיה NP‑קשה ראשונה — הוא משפט קוק–לוין: SAT היא NP‑קשה (שיעור 9). כל מה שנעשה כאן מתבסס עליו כקופסה שחורה.
משפט 4: , ומכאן
טענה. .
הוכחה. הרדוקציה היא פונקציית הזהות: בהינתן מחזירים . זמן החישוב הוא זמן ההעתקה, כלומר — פולינומי. הנכונות: אם נוסחת 3CNF ספיקה, אז בפרט נוסחת CNF ספיקה (כל 3CNF היא CNF), כלומר . ולהפך, אם ו‑ 3CNF, אז לפי ההגדרה. (קלט שאינו 3CNF תקין נדחה על ידי שתי הבעיות ולכן אינו מפר את השקילות.)
מסקנה: . נובע ממשפט 4, מ‑ (שיעור 7) ומסגירות תחת רדוקציות פולינומיות (מסקנה 1 למשפט 2). לחלופין ישירות: מנחשים השמה ובודקים.
הערה: בהקלטה של השיעור העוקב המרצה מזכיר בדיוק את זה: "הראנו גם את הרדוקציה בכיוון השני, שהיא כמעט הייתה טריוויאלית — הרדוקציה מחזירה לכל נוסחה את עצמה" [00:00:00, תמלול 15].
משפט 5 (הלמה המרכזית): נכונות צעד הפיצול
זהו הלב המתמטי של השיעור. נגדיר תחילה את הצעד הבודד.
אלגוריתם 1. על קלט , נוסחה מצורת CNF:
- אם היא כבר נוסחת 3CNF — החזר את .
- אחרת, נסמן ב‑ את הפסוקית הראשונה ב‑ שיש בה יותר מ‑3 ליטרלים, ונכתוב (כאשר ). נגדיר כאשר הוא משתנה חדש שאינו מופיע ב‑.
- נגדיר את כנוסחה המתקבלת מ‑ על ידי החלפת ב‑ (במקומה, כך ש‑ נשארת הפסוקית הארוכה הראשונה).
- החזר את .
האינטואיציה — מה עושה. הוא מתג שאומר "הליטרלים הראשונים לא סיפקו את , מישהו מאוחר יותר יסדר את זה". אם אז מסופקת בזכות בלבד, ואז ולכן חייבת להיות מסופקת על ידי אחד מ‑. אם אז מסופקת בזכות בלבד, ואז חייבת להיות מסופקת על ידי או . בשני המקרים "מישהו אמיתי" מתוך חייב להיות אמיתי — וזו בדיוק .
בניסוח קומפקטי: לכל השמה למשתני , כלומר אינה שקולה ל‑ — היא שקולה לה רק אחרי שמכמתים קיומית את . השקילות שאנחנו צריכים היא שקילות ספיקות (equisatisfiability), לא שקילות לוגית. זו נקודה שנופלים עליה במבחן.
טענה (משפט 5). תהא נוסחת CNF, ונסמן ב‑ את פלט אלגוריתם 1 על . אז ספיקה ספיקה.
הוכחה. נפריד לשני מקרים.
מקרה A: . זה קורה בדיוק כאשר כבר 3CNF, ואז הטענה טריוויאלית.
מקרה B: . נסמן כמו באלגוריתם: היא הפסוקית הראשונה באורך , ו‑, , כאשר חדש. שימו לב לעובדה שתשמש שוב ושוב: פסוקיות ו‑ זהות פרט לכך ש‑ הוחלפה ב‑, ו‑ אינו מופיע באף פסוקית אחרת.
כיוון ראשון: ספיקה ספיקה.
תהא השמה המספקת את . מכיוון ש‑ מספקת את היא בפרט מספקת את , ולכן קיים עם . נפריד לשני תת‑מקרים לפי מה שקורה בשני הליטרלים הראשונים.
מקרה B.1: וגם . נגדיר השמה עבור :
- כל פסוקית של שאינה ואינה : היא גם פסוקית של , ולכן מספקת אותה. המשתנה אינו מופיע ב‑, ולכן ו‑ נותנות את אותם ערכים לכל משתני . מכאן ש‑ מספקת את .
- : מכיוון ש‑, הליטרל מספק את .
- : מספקת את ומתקיים , ולכן קיים כך ש‑. הליטרל הוא מעל משתנה של , כלומר משתנה ששונה מ‑, ולכן מהגדרת מתקיים . לכן מספקת את .
מכאן ש‑ מספקת את כל פסוקיות , כלומר ספיקה.
מקרה B.2: או . נגדיר השמה עבור :
הערה: בסיכום הכתוב, המקרה הזה מסוכם במילים "באופן דומה מספקת את ". הנה הפירוט המלא.
- כל פסוקית שאינה : בדיוק כמו קודם — פסוקית של , אינו מופיע בה, מסכימה עם על משתניה, ו‑ מספקת אותה. לכן מספקת את .
- : הליטרלים הם מעל משתנים של , ולכן ו‑. לפי ההנחה אחד מהם שווה , ולכן מספקת את .
- : מכיוון ש‑ מתקיים , והליטרל מספק את .
לכן מספקת את , ו‑ ספיקה. הכיוון הזה הושלם.
כיוון שני (החצי העדין): ספיקה ספיקה.
כאן צריך להראות שמשתנה העזר אינו יכול לרמות — שאי אפשר "לספק" את בזכות בלבד ולהשאיר את בלתי מסופקת. שימו לב שכאן אין לנו חופש בבחירת ההשמה: היא נתונה לנו, ולעומת זאת בכיוון הראשון אנחנו אלה שבנינו אותה.
תהא השמה המספקת את . נגדיר השמה עבור על ידי צמצום: לכל משתנה המופיע ב‑ נגדיר . (זה מוגדר היטב, כי כל משתני הם משתני .)
כל פסוקית של שאינה : היא גם פסוקית של , ולכן מספקת אותה; נותנת אותם ערכים כמו לכל משתני , ולכן מספקת את .
נותר להראות ש‑ מספקת את . נפריד לשני מקרים לפי הערך ש‑ נתנה למשתנה החדש.
מקרה B.3: . מספקת את ובפרט את . אבל , ולכן הליטרל אינו זה שמספק את ; לכן חייב להתקיים שקיים עם . הליטרל הוא מעל משתנה של , ולכן . מכאן ש‑ מספקת את .
מקרה B.4: . מספקת בפרט את . אבל , ולכן הליטרל אינו מספק את ; לכן או . שוב מעל משתנים של , ולכן או , ומכאן ש‑ מספקת את .
בשני המקרים מספקת את כל פסוקיות , ולכן ספיקה.
למה הוכחה כזו לא יכולה להיות "ברורה מאליה": ההוכחה בכיוון השני נשענת על שתי עובדות שאינן אוטומטיות — (א) שהמשתנה מופיע בדיוק בשתי פסוקיות, פעם חיובית ופעם שלילית; (ב) שהוא חדש. אם אחת מהן נופלת, הטענה נופלת. בסעיף הדוגמאות מובאות שתי דוגמאות נגדיות מפורשות בדיוק לשני הכשלים האלה.
למה לא בנייה נאיבית? שווה לראות מה נשבר:
- ניסיון א' — לחתוך את לבלוקים: מוחלפת ב‑. זה שגוי לחלוטין: הבנייה דורשת שכל בלוק יסופק, כלומר היא חזקה מדי — עם וכל השאר מסופקת, בעוד הנוסחה החדשה אינה מסופקת.
- ניסיון ב' — פשוט לזרוק ליטרלים: מחליפים את ב‑. גם זה שגוי, מאותה סיבה בכיוון ההפוך — נוסחה ספיקה יכולה להיות ספיקה רק בזכות .
- מה שחסר בשני הניסיונות הוא בדיוק אמצעי להעביר את המידע "כבר סיפקתי" מבלוק לבלוק. משתנה עזר חדש הוא בדיוק אמצעי כזה — ולכן הוא הכרחי, ולכן הבנייה יוצרת נוסחה שאינה שקולה ללוגית ל‑ אלא רק שקולת‑ספיקות.
משפט 6:
טענה. קיימת רדוקציית זמן פולינומי מ‑ ל‑. במילים: 3SAT היא לפחות קשה כמו SAT.
הוכחה. נתבונן באלגוריתם הבא. על קלט , נוסחה מצורת CNF:
- כל עוד אינה נוסחה מצורת 3CNF:
- 1.1 הרץ את אלגוריתם 1 על ונסמן את הפלט (בכל הפעלה נבחר משתנה עזר חדש, שלא הופיע באף שלב קודם).
- 1.2 .
- החזר את .
בנוסף, אם הקלט אינו קידוד תקין של נוסחת CNF — נדחה אותו, כלומר נחזיר נוסחת 3CNF קבועה ובלתי‑ספיקה, למשל . בדיקת התקינות והפלט הקבוע נעשים בזמן לינארי. (בהרצאה הנקודה הזו נאמרה כהנחה: "אני מניח שקיבלתי נוסחה בצורת CNF... אפשר לבדוק תקינות ולדחות" [00:17:52].)
עצירה. בכל איטרציה, פסוקית באורך מוחלפת בפסוקיות באורכים ו‑; פסוקיות באורך אינן משתנות לעולם. לכן הסכום יורד בדיוק ב‑ בכל איטרציה, והוא מספר טבעי אי‑שלילי — אז הלולאה עוצרת, ובפלט כל הפסוקיות באורך , כלומר הפלט הוא 3CNF.
נכונות. נסמן ב‑ את הקלט, וב‑ את הנוסחאות אחרי כל איטרציה, כאשר הוא הפלט. לפי משפט 5, לכל מתקיים " ספיקה ספיקה". באינדוקציה על מתקבל מכיוון ש‑ היא 3CNF, זה בדיוק
הערה על תנאי הרעננות בלולאה: משפט 5 דורש ש‑ לא יופיע ב‑ הנוכחית, כלומר גם לא במשתני העזר שנוספו באיטרציות קודמות. לכן מקצים משתנה עזר חדש לכל איטרציה. הדבר גם מבטיח שהאינדוקציה למעלה חוקית: בכל צעד תנאי משפט 5 מתקיימים.
ניתוח זמן ריצה (במפורש). נסמן ב‑ את מספר מופעי הליטרלים בנוסחת הקלט; ברור ש‑.
- מספר האיטרציות. כפי שראינו בהוכחת העצירה, מספר האיטרציות שווה בדיוק ל‑, כלומר . (בסיכום כתוב לצד זה בכחול: כל הפעלה מקטינה את הפסוקית הארוכה ב‑1 — זו בדיוק הסיבה.)
- גידול אורך הנוסחה. בכל איטרציה פסוקית באורך מוחלפת בשתי פסוקיות באורכים ו‑, כלומר מספר מופעי הליטרלים גדל ב‑ בדיוק, ומספר הפסוקיות ב‑. לכן אחרי כל האיטרציות כלומר הנוסחה אינה מתנפחת — היא נשארת לינארית באורך הקלט. בפרט לכל אורך הריצה כל נוסחת ביניים היא בגודל .
- מחיר איטרציה בודדת. סריקת הנוסחה הנוכחית כדי לאתר את הפסוקית הארוכה הראשונה, והעתקתה עם הפיצול, עולים .
- סך הכול. — פולינומי.
הערה על דיוק החסם: בסיכום נכתב שאורך אינו עולה על . ספירה מדויקת של מופעי ליטרלים נותנת ולא (הקלט ועוד לכל אחת מעד איטרציות). ההבדל אינו משנה דבר — שני החסמים לינאריים ולכן זמן הריצה בעינו. הערה נוספת ברמת הביטים: הרדוקציה מוסיפה עד משתנים חדשים, וקידוד אינדקס של משתנה חדש עשוי לדרוש ביטים, כך שאורך הפלט בביטים הוא . עדיין פולינומי, וזמן הריצה עדיין פולינומי — אך כדאי לדעת שהחסם הלינארי הוא בספירת סמלים, לא בהכרח בספירת ביטים.
מסקנה: היא NP‑שלמה
- — מסקנת משפט 4.
- NP‑קשה — לפי משפט קוק–לוין NP‑קשה, לפי משפט 6 מתקיים , ולפי מסקנה 3 של משפט 2 (טרנזיטיביות) מתקבל שכל מקיימת .
לכן NP‑שלמה.
למה בכלל טורחים? אחרי משפט קוק–לוין כבר יש לנו בעיה NP‑שלמה, אז מדוע להוסיף עוד אחת? כי 3SAT היא נקודת מוצא נוחה בהרבה לרדוקציות עתידיות: קלט של 3SAT הוא אוסף פסוקיות שכל אחת מהן מכילה לכל היותר 3 ליטרלים, מבנה נוקשה שקל להעתיק לגרף, לקבוצות או לאילוצים גיאומטריים. בשיעורים הבאים כמעט כל רדוקציה תתחיל מ‑3SAT ולא מ‑SAT. בהקלטה של שיעור 9 המרצה מציין שזו בדיוק הדרך של Karp: "הוא עשה את הרדוקציה מ‑SAT ל‑3SAT שהראינו, את הרדוקציה מ‑SAT ל‑IS, ואז מ‑IS ל‑CLIQUE" [01:20:52, תמלול 15].
משפט 7 (השלמה): הווריאנט "בדיוק 3 ליטרלים"
טענה. נסמן ב‑ את הבעיה שבה כל פסוקית מכילה בדיוק 3 ליטרלים. אז , ולכן גם NP‑שלמה.
הערה: הטענה הזו אינה בסיכום ואינה בהקלטה. היא נכללת כאן כי ההגדרה השנייה נפוצה בספרות, וכי היא משלימה את ניתוח המקרים לפסוקיות באורך 1 ו‑2 — מקרים שההגדרה של הקורס פשוט אינה זקוקה לטיפול בהם.
הוכחה. בהינתן נוסחת 3CNF , נטפל בכל פסוקית לפי אורכה, עם משתנים חדשים לכל פסוקית בנפרד:
- אורך 3: משאירים כמו שהיא.
- אורך 2, : מחליפים ב‑. נכונות: אם או — שתי הפסוקיות מסופקות בכל ערך של . אם שניהם — אחת משתי הפסוקיות נכשלת, כי אחד מ‑ מקבל . כלומר הצמד מסופק אם ורק אם מסופקת, בכל השמה ל‑.
- אורך 1, : מחליפים ב‑ נכונות: אם הכול מסופק. אם , אז לכל בחירה של אחת מארבע הפסוקיות מכילה את שני הליטרלים המשלימים ומקבלת .
בשני המקרים המשתנים החדשים אינם מופיעים בשום מקום אחר, ולכן אפשר לצמצם/להרחיב השמות בדיוק כמו במשפט 5. גודל הפלט לכל היותר פי 4 מגודל הקלט, וזמן החישוב לינארי.
דוגמאות ותרגילים מהשיעור
דוגמה 1: מסלול מלא של נוסחה דרך הרדוקציה, בשני הכיוונים
ניקח את הדוגמה מעמוד 4 בסיכום:
איטרציה 1. הפסוקית הראשונה באורך היא , כלומר , , . עם משתנה חדש :
איטרציה 2. הפסוקית הארוכה היחידה היא (), עם . עם משתנה חדש : כל הפסוקיות באורך — זהו הפלט. שימו לב לאימות המספרים: מופעי ליטרלים בקלט, שתי איטרציות (כי ), ובפלט מופעים. בדיוק כמו שניתוח הזמן חזה.
מסלול קדימה ( ספיקה ספיקה). ניקח מספקת את : הפסוקית הראשונה בזכות , השנייה בזכות .
- באיטרציה 1: — זהו מקרה B.2, ולכן . בדיקה: בזכות ; בזכות .
- באיטרציה 2, ביחס לנוסחה ולהשמה שהתקבלה: ו‑ — זהו מקרה B.1, ולכן . בדיקה: בזכות ; בזכות .
ההשמה הסופית מספקת את כל ארבע הפסוקיות של .
מסלול אחורה ( ספיקה ספיקה). ניקח הפעם השמה "עוינת" ל‑ שמנסה להישען על משתני העזר: בדיקה: ; בזכות ; בזכות ; בזכות . אכן מספקת את .
נצמצם: , כלומר כל ה‑‑ים אפס. האם מספקת את ? ; . כן.
וזה בדיוק הטיעון של מקרה B.3 בפעולה: אילץ את להיות , כך שהפסוקית נאלצה להיות מסופקת על ידי ליטרל מקורי — ואכן . משתנה העזר "העביר את החוב הלאה" ולא הצליח לפרוע אותו בעצמו.
דוגמה 2: אינה שקולה ל‑
יהי , ונפצל: , .
- קחו ו‑. אז מסופקת. אבל אם בנוסף : ואילו — הצמד אינו מסופק.
- קחו . אז אינה מסופקת, ואכן בשתי הבחירות של הצמד נכשל: מפיל את , מפיל את .
המסקנה: לא לכל מתקיים כאשר מתקיימת — אלא קיים כזה. כל הוכחה שכותבת "" שגויה; הניסוח הנכון הוא שקילות ספיקות, ולכן ההוכחה חייבת לעבור דרך בניית ההשמה בכל כיוון בנפרד.
תרגיל 1: מה נשבר אם משתמשים באותו פעמיים?
התרגיל. נניח שבמקום להקצות משתנה חדש בכל איטרציה, האלגוריתם משתמש שוב ושוב באותו . תנו דוגמה נגדית.
פתרון. יהי עם אותו בשני הפיצולים מקבלים קחו את ההשמה וכל השאר . אז מסופקת (הפסוקית הראשונה בזכות , השנייה בזכות ). אבל ב‑:
- אם : הפסוקית .
- אם : הפסוקית .
יתרה מזאת, קל לבדוק ש‑ אינה ספיקה כלל תחת ההשמה הזו לשאר המשתנים, בעוד ספיקה — כלומר הרדוקציה השבורה מייצרת "לא" עבור קלט שהתשובה עליו "כן". הסיבה: משתנה עזר יחיד נדרש להעיד בו‑זמנית "בפסוקית הראשונה הסתדרנו מוקדם" ו"בפסוקית השנייה הסתדרנו מאוחר", ואלה דרישות סותרות.
תרגיל 2: מה נשבר אם אינו חדש?
התרגיל. מדוע דורשים ש‑ לא יופיע ב‑?
פתרון. נניח שהאלגוריתם "חוסך" ובוחר שכבר מופיע בנוסחה. קחו ספיקה: , ו‑ כרצוננו — הפסוקית הארוכה מסופקת בזכות . אבל הפיצול עם ו‑ נותן , ולכן שאינה ספיקה: מכריחות וסותרות את .
הכשל המדויק בהוכחה: בשלב שבו כתבנו " אינו מופיע ב‑, ולכן ו‑ מסכימות על משתני " — אם ישן, ההנחה הזו קורסת, ושינוי ערכו כדי לספק את יכול להפיל פסוקית אחרת.
תרגיל 3: כוח הביטוי של נוסחאות CNF (עמודים 7–8 בסיכום)
החלק הזה נראה כמו סטייה מהנושא, אבל הוא בדיוק ההכנה למשפט קוק–לוין: שם נצטרך לקודד ריצה של מכונת טיורינג כנוסחת CNF, וכל הטריקים כאן יחזרו. המרצה בשיעור 9 חוזר לזה שוב ושוב: "תזכרו שיהיה לכם בראש כל הזמן את בעיית 8 מלכות" [00:09:27, תמלול 15], ו"בעיית המלכות זה היה כמו משפט קוק בקטן" [00:20:03].
(א) בחירת קבוצה לא ריקה. מבטאת בחירה של תת‑קבוצה לא ריקה מתוך : מזהים תת‑קבוצה עם ההשמה . השמה מספקת את הנוסחה אם ורק אם היא נותנת ערך לפחות למשתנה אחד, כלומר .
(ב) לא ריקה וגם לא מלאה. הפסוקית השנייה דורשת שלפחות משתנה אחד יקבל , כלומר . בסך הכול ההשמות המספקות הן בדיוק אלה המתאימות ל‑.
(ג) בדיוק אחד. הפסוקית הראשונה אומרת "לפחות אחד". כל פסוקית שקולה ל‑, כלומר "לא שניהם" — ויחד הן אומרות "לכל היותר אחד". לכן השמה מספקת את הנוסחה אם ורק אם היא נותנת לבדיוק אחד מ‑. זהו הגאדג'ט המרכזי בכל השיעור הבא — "בתא הזה של הטבלה כתוב בדיוק סמל אחד".
(ד) 8 מלכות. לכל נגדיר משתנה בוליאני , שהמשמעות המיועדת לו היא "יש מלכה במשבצת ".
בדיוק מלכה אחת בכל שורה: בדיוק מלכה אחת בכל עמודה: לכל היותר מלכה אחת בכל אלכסון: והנוסחה כולה: . זו נוסחת CNF (חיתוך של נוסחאות CNF הוא CNF), והשמה מספקת אותה אם ורק אם היא מתארת מיקום חוקי של 8 מלכות על הלוח.
מה הפואנטה? לא פתרנו את בעיית 8 המלכות — קידדנו אותה. בהינתן פותר ל‑SAT היינו מקבלים גם פותר ל‑8 מלכות; וברמה הכללית, הבעיה של מלכות מצטמצמת ל‑SAT בזמן פולינומי, כי מספר המשתנים הוא ומספר הפסוקיות , וכולן ניתנות לכתיבה ישירה מ‑. אגב, כל הפסוקיות ב‑ שאינן ה"או" הגדול הן באורך 2 — כלומר הנוסחה כמעט 3CNF ממילא; רק ה"או" על שורה שלמה ( ליטרלים) דורש את הפיצול של משפט 6.
תרגיל 4: כמה גדל הפלט על פסוקית באורך 10?
התרגיל. נתונה פסוקית יחידה . כמה איטרציות יבצע האלגוריתם, כמה משתנים חדשים יוסיף, ומה תהיה הנוסחה?
פתרון. מספר האיטרציות הוא , וכך גם מספר משתני העזר . נעקוב:
- איטרציה 1: — הפסוקית השנייה באורך 9.
- איטרציה 2 מפצלת אותה לפי שני הליטרלים הראשונים שבה, : — הזנב באורך 8.
- כל איטרציה נוספת מוציאה עוד שני ליטרלים מקוריים לפסוקית באורך 3, ומוסיפה עוד לזנב.
בסוף מתקבלות פסוקיות ובהן מופעי ליטרלים — בדיוק כמו שהניתוח חוזה ( מספר האיטרציות). שימו לב לאופי המבנה: הליטרלים המקוריים יוצאים שניים‑שניים, ושרשרת ה‑ מצטברת בפסוקית הזנב עד שגם היא מתקצרת. זו התנהגות האלגוריתם של הסיכום; בנייה חלופית מקובלת בספרות שומרת משתנה עזר אחד בלבד בכל פסוקית ומייצרת פסוקיות באורך בדיוק 3.
הערות מהשיעור
קראו את זה קודם: לשיעור הזה אין הקלטה בקורפוס, ולכן אין בו הערות מההרצאה שלו עצמו. ההערות שלהלן נלקחו מהקלטות השיעורים הסמוכים (9 ו‑16 באפריל) ומובאות כאן משום שהן חלות ישירות על החומר של שיעור זה — לא משום שנאמרו בו. הציטוט המדויק והמספור של ההערה מציינים את הקובץ שממנו נלקחה.
-
מספר ההשמות הוא לפי מספר המשתנים, לא לפי מספר הליטרלים [00:19:28, תמלול 14]. סטודנט ענה "שתיים בחזקת כמות הליטרלים" והמרצה תיקן: ברגע שנתת ערך ל‑, קבעת גם את . טעות קטנה אבל היא משנה את החסם.
-
רדוקציה אינה פתרון [01:11:50, 01:13:27, תמלול 14]. סטודנט הציע "לנסות לפתור את זה באמצעות CLIQUE", והמרצה עצר: "אני לא מנסה לפתור — כל הרדוקציה זה רק ההמרה מפה לפה". זה תקף במלואו כאן: אלגוריתם 1 לא בודק ספיקות של שום דבר, הוא רק כותב מחדש את הנוסחה.
-
שני שלבים נפרדים בבניית רדוקציה [01:25:21]–[01:26:25, תמלול 14]. "כשאני מגדיר את המכונה אני לא יודע אם הקלט שייך לקבוצה. אם הייתי רוצה לדעת את זה, הייתי צריך מספר צעדים אקספוננציאלי. רק בשלב ההוכחה אני מניח שהקלט שייך ומראה שהפלט שייך." בשיעור הזה זה בולט: אלגוריתם 1 רץ בלי לדעת דבר על ספיקות, ורק משפט 5 מניח ספיקות ובונה השמה.
-
תמיד לכתוב את שתי הגרירות בנפרד, גם כשהן נראות סימטריות [01:22:33], [01:27:34, תמלול 14]. בשיעור הזה הן אינן סימטריות: בכיוון "" אנחנו בוחרים את הערך של , ובכיוון ההפוך הוא נתון לנו ואנחנו מסיקים ממנו. זה בדיוק המקום שבו סטודנטים מוותרים על החצי הקשה.
-
על התקינות של הקלט [00:17:52, תמלול 14]. המרצה בחר במפורש לא לעסוק בקידוד: "ההנחה היא שהקלט מתקבל בצורה תקינה; אפשר לבדוק תקינות ולדחות". במבחן זו הערת שוליים לגיטימית, אבל ברדוקציה חייבים להגדיר גם מה עושים על קלט פסול — אחרת הפונקציה אינה מוגדרת על כל .
-
מדוע 3SAT ולא SAT בהמשך [01:20:52, תמלול 15]. המרצה מספר על המאמר של Karp עם 21 בעיות NP‑שלמות, ובראשן השרשרת . הרדוקציה של השיעור הזה היא החוליה הראשונה בשרשרת ההיסטורית הזו.
פערים בין הסיכום להקלטה
הפער המרכזי, לפני כל השאר: לשיעור הזה אין הקלטה. נבדק כל קורפוס ההקלטות של הקורס, ולא נמצא בו ולו קטע אחד שבו נלמדת הבנייה . תמלול 14 מסתיים בחומר של שיעור 7 (CLIQUE, IS), תמלול 15 הוא כבר שיעור קוק–לוין ומזכיר את הרדוקציה רק בדיעבד, ותמלול 16 ממשיך לכיסוי קודקודים ולצביעה. הסימנים מצביעים על כך שהחומר ניתן ללימוד עצמי / כשיעורי בית, וזה מתיישב עם כך שגיא סופר כתב עליו סיכום בן 8 עמודים. המשמעות המעשית לקורא: כל מה שבקובץ הזה נשען על הסיכום הכתוב ועל השלמה מתמטית סטנדרטית שלי — ולא על הרצאה. הסיכום עצמו קריא לחלוטין ושלם מתמטית, ולכן
confidence: mediumולאlow; אך אין מקור שני להצלבה, ו‑coverageשל שני התמלולים סומנהnone.
מה מהסיכום ומה השלמה שלי. מהסיכום: כל ההגדרות (עמוד 4), אלגוריתם 1 על ארבעת שלביו והדוגמה שלו (עמוד 4), ניסוח משפט 5 והוכחתו על ארבעת המקרים (עמודים 5–6), אלגוריתם הלולאה וניתוח הזמן (עמוד 7), דוגמאות כוח הביטוי ובעיית 8 המלכות (עמודים 7–8), וכן משפטים 1–3 (עמודים 1–3). השלמה שלי, מסומנת בגוף הקובץ בהערות: פירוט מקרה B.2, טיעון העצירה של הלולאה, האינדוקציה על שרשרת האיטרציות, ספירת מופעי הליטרלים המדויקת, תנאי הרעננות בכל איטרציה, הטיפול בקלט לא תקין, הניסוחים "מדוע לא בנייה נאיבית", דוגמה 2, תרגילים 1–2, ומשפט 7.
-
מקור: הסיכום, עמוד 5. הפער: בכיוון " ספיקה ספיקה", המקרה או נכתב במילים "באופן דומה". ההכרעה: נכתב כאן במלואו (מקרה B.2), כולל הנימוק לכל אחת משלוש קבוצות הפסוקיות.
-
מקור: הסיכום, עמוד 7. הפער: נכתב שאורך הפלט אינו עולה על . ספירה מדויקת של מופעי ליטרלים נותנת (הקלט, ועוד 2 לכל אחת מעד איטרציות). ההכרעה: נכתב החסם המדויק , עם ציון שהאסימפטוטיקה אינה משתנה; נוספה הערה שברמת הביטים יש עוד גורם בשל אינדקסי המשתנים החדשים.
-
מקור: הסיכום, עמוד 8. הפער: הנוסחה (אילוץ העמודות בבעיית 8 המלכות) כתובה כמעט זהה ל‑ (אילוץ השורות) — נראה שהאינדקסים ו‑ לא הוחלפו. ההכרעה: נכתבה כאן הגרסה המתוקנת שבה סורקת עמודות; זו הכוונה הברורה מההקשר ("לבסוף נגדיר עבור האלכסונים").
-
מקור: הסיכום, עמודים 5–6. הפער: מספור המקרים אינו עקבי — בכיוון הראשון מופיעים "מקרה 1.1"/"מקרה 1.2" ובכיוון השני שוב "מקרה 1"/"מקרה 2" למשמעות אחרת לגמרי (הערך של ). ההכרעה: מוספרו כאן מחדש כ‑B.1–B.4 עם תיאור מפורש של מה מפרידים בכל מקרה.
-
מקור: הסיכום, עמודים 1–3. הפער: שליש מהעמודים מוקדשים לחומר שהוא ברובו חזרה — , סגירות תחת רדוקציות, והגדרות NP‑קשה/NP‑שלמה — שחלקו שייך תוכנית ללימוד לשיעורים 6–7. ההכרעה: נכלל כאן במלואו כי הוא מופיע ב‑PDF של שיעור זה ומשמש ישירות במסקנה על 3SAT; ייתכן שיש חפיפה עם קובצי שיעורים 6–7 ועל הרכז לבדוק זאת.
-
מקור: הסיכום, עמוד 4. הפער: ההצדקה לרדוקציה כתובה בקיצור רב ("הרדוקציה מחזירה את אותה נוסחה"), ולא נאמר מה עושים עם קלט שאינו 3CNF. ההכרעה: נכתבה הצדקה מלאה, כולל הטיפול בקלט לא תקין.
-
מקור: האלגוריתם בסיכום. הפער: הסיכום אינו מציין במפורש שיש להקצות משתנה עזר חדש בכל איטרציה של הלולאה (הוא דורש רק ש‑ יהיה חדש עבור הפעלה בודדת). ההכרעה: התנאי נוסח במפורש בהוכחת משפט 6, והכרחיותו הודגמה בתרגיל 1.
-
מקור: כל המקורות. הפער: לא נדונו פסוקיות באורך 1 ו‑2 (הן חוקיות לפי הגדרת הקורס), ולא הווריאנט "בדיוק 3 ליטרלים". ההכרעה: נוסף משפט 7 כהשלמה, עם סימון מפורש שהוא אינו מהמקורות.
סיכום ונקודות למבחן
מה חייבים לזכור בעל פה.
- הבנייה: פסוקית עם מוחלפת ב‑, כאשר חדש; חוזרים עד שכל הפסוקיות באורך .
- החשבון: מספר האיטרציות ; כל איטרציה מוסיפה 2 מופעי ליטרלים ומשתנה אחד; אורך הפלט ; זמן ריצה .
- המסקנה: (רדוקציית זהות ל‑SAT) קוק–לוין 3SAT NP‑שלמה.
- ; (וכן ) סגורות תחת ; אם NP‑שלמה אז .
המלכודות הסטנדרטיות.
- לכתוב "". לא נכון. השקילות היא בספיקות בלבד, ורק אחרי כימות קיומי על . ראו דוגמה 2.
- לוותר על הכיוון ההפוך. רוב הנקודות בשאלת רדוקציה יושבות בכיוון "הפלט ספיק הקלט ספיק", כי שם צריך להראות שמשתני העזר לא מרמים. הטיעון הוא תמיד: הוא או ; כל אחד מהם "מנטרל" את משתנה העזר באחת משתי הפסוקיות ומאלץ ליטרל מקורי לספק אותה.
- לשכוח את הרעננות. משתנה עזר חדש לכל פיצול. תרגיל 1 מראה נוסחה ספיקה שהופכת לבלתי‑ספיקה אם חוסכים משתנה.
- להפוך את כיוון ה‑. מוכיח ש‑3SAT קשה, לא ש‑SAT קלה. הכיוון ההפוך () הוא הטריוויאלי ומוכיח רק ש‑3SAT ב‑NP.
- לשכוח לחסום את אורך הפלט. בכל ניתוח סיבוכיות של רדוקציה או הרכבת רדוקציות צריך ; בלעדיו ההרכבה של הפולינומים אינה מוצדקת.
- להתעלם מקלט לא תקין. הרדוקציה היא פונקציה על כל ; יש להגדיר פלט קבוע ובלתי‑ספיק לקלט פסול.
צ'ק‑ליסט — אחרי השיעור אני יודע:
- להגדיר CNF, 3CNF, השמה, ספיקות, SAT, 3SAT, NP‑קשה, NP‑שלמה.
- לתאר את אלגוריתם הפיצול ולהריץ אותו על נוסחה קונקרטית עד לפלט 3CNF.
- להוכיח את שני כיווני הנכונות של צעד הפיצול, בפירוט מקרים מלא.
- לנתח את זמן הריצה ואת גודל הפלט של הרדוקציה ולהסביר מדוע הוא פולינומי.
- להסביר מדוע נדרש משתנה חדש ולתת דוגמה נגדית לגרסה שחוסכת.
- להוכיח וסגירות תחת , ולנסח את משמעות NP‑שלמות.
- לקודד אילוצים פשוטים ("לפחות אחד", "לכל היותר אחד", "בדיוק אחד") כנוסחת CNF — הכנה ישירה למשפט קוק–לוין.
