5Padding Arguments and an Introduction to SAT

טכניקת הריפוד: ניפוח מלאכותי של הקלט מאפשר להסיק הכלה בין מחלקות מהכלה נתונה אחרת — ומכאן ש-E≠PSPACE ושאם P=NP אז EXP=NEXP; ובחלק השני, ההגדרות הלוגיות של נוסחת CNF, השפה SAT והטענה SAT∈NP.

confidence: high2 recording(s)8 summary pagespaddingtranslation-argumentspspaceexp-vs-nexpsatcnf

Builds on: lesson 1, lesson 2, lesson 3, lesson 4

The handwritten summary pages

Open page 1 full size

סיבוכיות שיעור 5 טיעוני ריפוד וסאט.pdf

Page 1 of 8 of the handwritten summary

בקצרה

  • טיעון ריפוד (padding argument) הוא טכניקה להוכחת הכלה בין מחלקות סיבוכיות בהינתן הכלה אחרת. הרעיון: לוקחים שפה קשה, "מנפחים" מלאכותית את הקלטים שלה בזנב ארוך של תו חדש, ומקבלים שפה שהיא בדיוק אותה בעיה — אבל ביחס לאורך הקלט היא נראית הרבה יותר קלה, ולכן נופלת למחלקה נמוכה יותר שעליה ההכלה הנתונה כן חלה.
  • הגרעין של כל הטכניקה הוא תצפית אחת: אם מספר הצעדים של מכונה נשאר קבוע ואורך הקלט גדל, סיבוכיות הריצה ביחס לאורך הקלט יורדת. הריפוד לא הופך שום דבר לקל יותר; הוא רק משנה את המכנה שביחס אליו מודדים.
  • מוכיחים שתי טענות מסוג "אם הכלה אז הכלה": אם E⊆PSPACE\mathrm E\subseteq\mathrm{PSPACE} אז E^⊆PSPACE\hat{\mathrm E}\subseteq\mathrm{PSPACE}, ואם NP⊆P\mathrm{NP}\subseteq\mathrm P אז NEXP⊆EXP\mathrm{NEXP}\subseteq\mathrm{EXP} — כלומר, אם P=NP\mathrm P=\mathrm{NP} אז EXP=NEXP\mathrm{EXP}=\mathrm{NEXP}, ובניסוח הנגדי־חיובי: אם EXP≠NEXP\mathrm{EXP}\ne\mathrm{NEXP} אז P≠NP\mathrm P\ne\mathrm{NP}.
  • טענות מותנות כאלה אינן חסרות שיניים: בשילוב עם משפט ההיררכיה בזמן הן נותנות תוצאה לא מותנית — E≠PSPACE\mathrm E\ne\mathrm{PSPACE}.
  • מבנה ההוכחה קבוע ואינו משתנה משאלה לשאלה: ארבע מכונות, שתיים מקבלים "מהשמיים" מתוך שייכות למחלקה ושתיים בונים בעצמנו. הדבר היחיד שדורש מחשבה הוא כמה לרפד, וגם זה נקבע מחשבון פשוט.
  • החלק השני של השיעור פותח את הפרק החדש, P\mathrm P מול NP\mathrm{NP}: מושגי הלוגיקה (ליטרל, פסוקית, נוסחת CNF, הסמה, ספיקות), הגדרת השפה SAT\mathrm{SAT}, והמכונה הא־דטרמיניסטית שמראה SAT∈NP\mathrm{SAT}\in\mathrm{NP} — היא "מנחשת" הסמה ומאמתת אותה.
  • מלכודת שהמרצה הדגיש: E≠PSPACE\mathrm E\ne\mathrm{PSPACE} היא טענה על שפות, לא על מכונות. בכל ההכלות הסטנדרטיות שראינו עד כה המכונה נשארה אותה מכונה; כאן, לראשונה, אנחנו מייצרים מכונות חדשות ומשליכים בין מודלים.

רקע ותלויות

השיעור הזה סוגר את הפרק הראשון של הקורס (הקשרים בין מחלקות) ופותח את השני (P\mathrm P מול NP\mathrm{NP}). נזכיר במלואן את התוצאות שנשתמש בהן ממש.

מהשיעורים 1–2: המחלקות והמונוטוניות

P=⋃c≥1DTime(nc),PSPACE=⋃c≥1DSpace(nc),EXP=⋃c≥1DTime ⁣(2nc).\mathrm P=\bigcup_{c\ge 1}\mathrm{DTime}(n^c),\qquad \mathrm{PSPACE}=\bigcup_{c\ge 1}\mathrm{DSpace}(n^c),\qquad \mathrm{EXP}=\bigcup_{c\ge 1}\mathrm{DTime}\!\left(2^{n^c}\right).

טענה (מונוטוניות במשאב). אם g=O(f)g=O(f) אז DTime(g)⊆DTime(f)\mathrm{DTime}(g)\subseteq\mathrm{DTime}(f) וגם DSpace(g)⊆DSpace(f)\mathrm{DSpace}(g)\subseteq\mathrm{DSpace}(f).

נשתמש גם בהבחנה בין מחלקות עדינות (DTime(f)\mathrm{DTime}(f), DSpace(f)\mathrm{DSpace}(f) — לכל פונקציה מחלקה משלה) למחלקות גסות (איחוד אינסופי, כמו P\mathrm P או PSPACE\mathrm{PSPACE}). כל פעם שנקבל שייכות למחלקה גסה, הצעד הראשון יהיה לקלף את האיחוד החוצה ולקבל שייכות למחלקה עדינה — ורק ממנה אפשר לחלץ מכונה עם חסם קונקרטי.

מהשיעור 3: משפט ההיררכיה בזמן והישימות

משפט ההיררכיה בזמן. אם ff ישימה בזמן (time-constructible), ff סופר־לינארית, ו-g=o(f)g=o(f), אז DTime(g)⊊DTime ⁣(f2).\mathrm{DTime}(g)\subsetneq\mathrm{DTime}\!\left(f^2\right).

הריבוע שם אינו קישוט — הוא מחיר המעבר ממכונה רב־סרטית למכונה סטנדרטית. נשתמש במשפט הזה פעם אחת בדיוק, בטענה E≠PSPACE\mathrm E\ne\mathrm{PSPACE}.

נשתמש גם, שוב ושוב, בשני מושגי הישימות. פונקציה ff ישימה בזמן אם אפשר לחשב אותה בזמן O(f)O(f), וישימה במקום אם אפשר לחשב אותה במקום O(f)O(f). שתי הפונקציות שיופיעו כאן, n↦n2n\mapsto n^2 ו-n↦d⋅2ncn\mapsto d\cdot 2^{n^c}, הן ישימות בזמן ובמקום. זה לא פרט טכני שאפשר לדלג עליו: המכונות שנבנה חייבות לחשב את גודל הריפוד, וללא ישימות אין לנו שום מושג כמה זה עולה.

הערה מההקלטה [00:44:21]: סטודנט הציע לחסום את המקום של שלב החישוב באורך הפלט. המרצה עצר על כך במפורש: מכונת טיורינג יכולה להשתמש בהרבה יותר מקום ממה שהיא מוציאה בסוף. הדוגמה הקיצונית שנתן — מכונת הכרעה מוציאה ביט אחד; האם המקום שלה קבוע? ודאי שלא. בדיוק בשביל זה צריך את הישימות במקום.

מהשיעור 4: המודל הא־דטרמיניסטי

מכונה א־דטרמיניסטית MM מכריעה שפה AA אם (א) כל ריצה אפשרית של MM על כל קלט עוצרת, ו-(ב) x∈Ax\in A אם ורק אם קיימת ריצה של MM על xx שמסתיימת במצב מקבל. מדד הזמן timeM(x)\mathrm{time}_M(x) הוא המקסימום על פני כל הריצות. מכאן

NP=⋃c≥1NTime(nc),NEXP=⋃c≥1NTime ⁣(2nc).\mathrm{NP}=\bigcup_{c\ge 1}\mathrm{NTime}(n^c),\qquad \mathrm{NEXP}=\bigcup_{c\ge 1}\mathrm{NTime}\!\left(2^{n^c}\right).

הוכחנו בשיעור 4 שכל מחלקה דטרמיניסטית מוכלת במקבילה הא־דטרמיניסטית שלה, ובפרט P⊆NP\mathrm P\subseteq\mathrm{NP} ו-EXP⊆NEXP\mathrm{EXP}\subseteq\mathrm{NEXP}. זו הסיבה שכל טענה על שוויון בין הזוגות האלה מצטמצמת להכלה בכיוון אחד בלבד.


הגדרות

הגדרה 1: המחלקה E\mathrm E

E=⋃c≥1DTime ⁣(2cn).\mathrm E=\bigcup_{c\ge 1}\mathrm{DTime}\!\left(2^{cn}\right).

אינטואיציה. זו מחלקת ה"אקספוננציאלי בדיוק" — החזקה היא cncn, עם nn בלי חזקות בכלל. המרצה עצר על כך במפורש: E\mathrm E אינה EXP\mathrm{EXP}. ב-EXP\mathrm{EXP} החזקה היא ncn^c, ולכן 2n1002^{n^{100}} יושב ב-EXP\mathrm{EXP} אך לא ב-E\mathrm E.

דוגמה. שפה שמוכרעת בזמן 3⋅25n3\cdot 2^{5n} שייכת ל-E\mathrm E. אי־דוגמה. שפה שזמן ההכרעה המינימלי שלה הוא 2n22^{n^2} אינה ב-E\mathrm E, אך כן ב-EXP\mathrm{EXP}. מתקיים E⊆EXP\mathrm E\subseteq\mathrm{EXP}, וההכלה היא הכלה ממש.

הגדרה 2: המחלקה E^\hat{\mathrm E}

E^=⋃c≥1DTime ⁣(2cn2).\hat{\mathrm E}=\bigcup_{c\ge 1}\mathrm{DTime}\!\left(2^{cn^2}\right).

אינטואיציה. אותו דבר בדיוק, אלא שהמעריך ריבועי במקום לינארי. זו מחלקה גדולה יותר מ-E\mathrm E (ובהמשך נוכיח שהיא גדולה ממש), ועדיין מוכלת ב-EXP\mathrm{EXP}. ההפרש בין שתי המחלקות הוא בדיוק "ריבוע במעריך" — וזה, כפי שנראה, בדיוק גודל הריפוד שיידרש.

הגדרה 3: שפת ריפוד (padded language)

תהי A⊆Σ∗A\subseteq\Sigma^* שפה, ותהי p:N→Np:\mathbb N\to\mathbb N פונקציה ישימה בזמן ובמקום. שפת הריפוד של AA ביחס ל-pp היא

B={ x# p(∣x∣) | x∈A },B=\left\{\,x\#^{\,p(|x|)}\ \middle|\ x\in A\,\right\},

כאשר #\# הוא תו חדש שאינו באלף־בית Σ\Sigma של AA.

אינטואיציה. BB מכילה בדיוק את אותו מידע ש-AA מכילה — לכל מילה ב-AA מתאימה מילה יחידה ב-BB, ולהפך. שום חישוב לא נעשה קל יותר. מה שכן משתנה: הקלט התארך, ולכן אותו מספר צעדים בדיוק נראה עכשיו, ביחס לאורך הקלט, זול הרבה יותר. זו כל התחבולה.

למה #\# חייב להיות תו חדש? כדי שהפירוק y=x#ℓy=x\#^\ell יהיה חד־משמעי. אילו #∈Σ\#\in\Sigma, לא היינו יכולים לקבוע מהסתכלות ב-yy היכן נגמר xx ומתחיל הזנב, והשלב הראשון של המכונה שנבנה לא היה מוגדר היטב.

דוגמה. עבור A={ 01, 110 }A=\{\,\texttt{01},\ \texttt{110}\,\} ו-p(n)=n2p(n)=n^2 מקבלים B={ 01####, 110#9 }B=\{\,\texttt{01}\#\#\#\#,\ \texttt{110}\#^9\,\}. אי־דוגמה. המילה 01###\texttt{01}\#\#\# אינה ב-BB, אף ש-01∈A\texttt{01}\in A: אורך הזנב אינו ∣x∣2|x|^2. זו בדיוק הבדיקה שהמכונה תבצע בשלב השני, ובלעדיה BB לא הייתה מוגדרת היטב.

הגדרה 4: ליטרל, פסוקית ונוסחת CNF

יהיו x1,…,xnx_1,\dots,x_n משתנים בוליאניים.

  • ליטרל הוא משתנה או שלילה של משתנה. למשל x2x_2 הוא ליטרל, וגם x4‾\overline{x_4}.
  • הֶסְגֵּר (או פסוקית, clause) הוא טְפֶל (tuple) סופי של ליטרלים עם ∨\vee ("או") ביניהם. למשל x1∨x2‾∨x4‾x_1\vee\overline{x_2}\vee\overline{x_4} היא פסוקית עם שלושה ליטרלים.
  • נוסחת CNF היא טפל סופי של פסוקיות עם ∧\wedge ("וגם") ביניהן. למשל (x1∨x2‾∨x4)∧(x1‾∨x3‾∨x4‾∨x5).(x_1\vee\overline{x_2}\vee x_4)\wedge(\overline{x_1}\vee\overline{x_3}\vee\overline{x_4}\vee x_5).

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

דוגמה ואי־דוגמה. אין הגבלה על מספר הליטרלים בפסוקית: x2‾∨x4∨x1∨x5\overline{x_2}\vee x_4\vee x_1\vee x_5 היא פסוקית CNF תקינה. לעומת זאת (x1∧x2)∨x3(x_1\wedge x_2)\vee x_3 אינה נוסחת CNF — היא בצורה ההפוכה (DNF).

הערה מההקלטה [01:48:51]: המרצה הוסיף בכוונה משתנה רביעי לדוגמה, "כדי שלא תחשבו שזה חייב להיות עם שלוש". פסוקיות באורך 3 הן מקרה פרטי שיזכה לשם משלו (3SAT3\mathrm{SAT}), אך אינן ההגדרה.

הגדרה 5: הסמה וספיקות

הסמה היא פונקציה v:{x1,…,xn}→{0,1}v:\{x_1,\dots,x_n\}\to\{0,1\}.

לפי הכללים הלוגיים אפשר להרחיב את vv מן המשתנים לכל נוסחה לוגית: אם v(x1)=Tv(x_1)=T אז v(x1‾)=Fv(\overline{x_1})=F; אם v(x1)=Tv(x_1)=T ו-v(x2)=Fv(x_2)=F אז v(x1∨x2)=Tv(x_1\vee x_2)=T ו-v(x1∧x2)=Fv(x_1\wedge x_2)=F; וכן הלאה.

נוסחה φ\varphi נקראת ספיקה אם קיימת הסמה vv המעניקה לה את הערך TT; אומרים אז ש-vv מספקת את φ\varphi.

אינטואיציה. ההסמה היא הסמנטיקה — האובייקט החיצוני שנותן משמעות לתחביר. ספיקות אינה תלויה בהסמה מסוימת: היא טענת קיום.

דוגמה. ההסמה v(x1)=T, v(x2)=Fv(x_1)=T,\ v(x_2)=F מספקת את x1∨x2x_1\vee x_2 ואינה מספקת את x1∧x2x_1\wedge x_2 — אבל x1∧x2x_1\wedge x_2 בכל זאת ספיקה, כי הסמה אחרת (שנותנת TT לשניהם) כן מספקת אותה. אי־דוגמה (נוסחה שאינה ספיקה). x1∧x1‾x_1\wedge\overline{x_1}. יש כאן משתנה אחד; כל הסמה נותנת FF לאחד משני הליטרלים, ולכן נותנת FF לנוסחה כולה. לא קיימת הסמה מספקת.

הערה מההקלטה [01:56:48]: "אל תגידו x1=Tx_1=T אף פעם. תביאו הסמה ותגידו: ההסמה נותנת TT ל-x1x_1." הרבה טעויות נובעות מהתייחסות למשתנים כאילו יש להם ערכים. למשתנים אין ערכים — כדי לתת להם ערך צריך אובייקט נוסף מבחוץ.

הגדרה 6: השפה SAT\mathrm{SAT}

עבור נוסחת CNF φ\varphi נסמן ב-⟨φ⟩\langle\varphi\rangle את הקידוד הבינרי שלה. מניחים שכל מחרוזת בינארית מקודדת נוסחת CNF כלשהי (מחרוזת שאינה במבנה התקין מתורגמת לנוסחה קבועה אחת) — בדיוק כפי שעשינו עם קידוד מכונות טיורינג בחישוביות. אז

SAT={ ⟨φ⟩ ∣ φ CNF, φ satisfiable }.\mathrm{SAT}=\bigl\{\,\langle\varphi\rangle\ \bigm|\ \varphi\ \text{CNF},\ \varphi\ \text{satisfiable}\,\bigr\}.

אינטואיציה. שימו את הקידוד בצד; הוא נחוץ רק מפני שמכונת טיורינג מקבלת מחרוזות. במהות, SAT\mathrm{SAT} היא אוסף כל נוסחאות ה-CNF שיש להן הסמה מספקת.

דוגמה. ⟨x1∨x2⟩∈SAT\langle x_1\vee x_2\rangle\in\mathrm{SAT}. אי־דוגמה. ⟨x1∧x1‾⟩∉SAT\langle x_1\wedge\overline{x_1}\rangle\notin\mathrm{SAT}.


משפטים והוכחות

משפט 1: אם E⊆PSPACE\mathrm E\subseteq\mathrm{PSPACE} אז E^⊆PSPACE\hat{\mathrm E}\subseteq\mathrm{PSPACE}

הוכחה. נניח E⊆PSPACE\mathrm E\subseteq\mathrm{PSPACE}, ותהי A∈E^A\in\hat{\mathrm E}. עלינו להראות A∈PSPACEA\in\mathrm{PSPACE}.

שלב א' — קבלת המכונה הראשונה. E^\hat{\mathrm E} מוגדרת על ידי איחוד, ולכן נקלף את האיחוד: קיים c>0c>0 כך ש-A∈DTime ⁣(2cn2)A\in\mathrm{DTime}\!\left(2^{cn^2}\right). זו שייכות למחלקה עדינה, ומהגדרתה קיימת מכונה MAM_A וקיים d>0d>0 כך ש-MAM_A מכריעה את AA וכן לכל xx:

timeMA(x) ≤ d⋅2 c∣x∣2.\mathrm{time}_{M_A}(x)\ \le\ d\cdot 2^{\,c|x|^2}.

שלב ב' — בניית שפת הריפוד. נגדיר

B={ x# ∣x∣2 | x∈A },B=\left\{\,x\#^{\,|x|^2}\ \middle|\ x\in A\,\right\},

כאשר #\# תו חדש שאינו ב-Σ\Sigma, האלף־בית של AA.

למה דווקא ∣x∣2|x|^2? מפני שההפרש היחיד בין E\mathrm E ל-E^\hat{\mathrm E} הוא ש-nn עולה בריבוע במעריך. אם אני מנפח את הקלט כך שאורכו יהיה סדר גודל של ∣x∣2|x|^2, אז מספר צעדים שהיה 2c∣x∣22^{c|x|^2} ביחס לקלט הישן נעשה 2c∣y∣2^{c|y|} ביחס לקלט החדש — בדיוק המעבר מ-E^\hat{\mathrm E} ל-E\mathrm E.

שלב ג' — בניית המכונה השנייה. נגדיר מכונה MBM_B שעל קלט y∈(Σ∪{#})∗y\in(\Sigma\cup\{\#\})^* פועלת כך:

  1. נבדוק ש-yy מהצורה x#ℓx\#^{\ell} כאשר x∈Σ∗x\in\Sigma^*; אחרת נדחה.
  2. נחשב את ∣x∣2|x|^2 ונבדוק ש-ℓ=∣x∣2\ell=|x|^2; אחרת נדחה.
  3. נריץ את MAM_A על xx ונחזיר את תשובתה.

נכונות: MBM_B מכריעה את BB. יהי y∈(Σ∪{#})∗y\in(\Sigma\cup\{\#\})^*.

כיוון ראשון. אם y∈By\in B אז קיים x∈Ax\in A כך ש-y=x#∣x∣2y=x\#^{|x|^2}. בהרצת MBM_B על yy: שלב 1 עובר (זהו בדיוק המבנה), שלב 2 עובר (זהו בדיוק האורך), ובשלב 3 המכונה MAM_A מקבלת את xx כי x∈Ax\in A ו-MAM_A מכריעה את AA. לכן MBM_B מקבלת את yy.

כיוון שני. נניח ש-MBM_B מקבלת את yy. מכיוון שכל שלב שנכשל גורם לדחייה, בהכרח שלושת השלבים עברו: מ-1 נובע ש-y=x#ℓy=x\#^\ell עבור x∈Σ∗x\in\Sigma^*; מ-2 נובע ℓ=∣x∣2\ell=|x|^2; ומ-3 נובע ש-MAM_A קיבלה את xx, ולכן x∈Ax\in A. מכאן y=x#∣x∣2y=x\#^{|x|^2} עם x∈Ax\in A, כלומר y∈By\in B.

בנוסף, MBM_B עוצרת תמיד: שלבים 1–2 הם סריקות סופיות, ו-MAM_A עוצרת תמיד כי היא מכריעה. לכן MBM_B מכריעה את BB.

שלב ד' — חשבון הזמן של MBM_B. יהי yy שעבר את שלב 1, ונסמן y=x#ℓy=x\#^\ell.

  • שלב 1 — סריקה אחת של הקלט: מרגע שראינו #\# לוודא שלא מופיע עוד תו מ-Σ\Sigma. עלות: O(∣y∣)O(|y|) צעדים.
  • שלב 2 — כאן נדרשת הישימות בזמן של n↦n2n\mapsto n^2: היא מבטיחה שחישוב הערך ∣x∣2|x|^2 אורך O(∣x∣2)O(|x|^2) צעדים. וכיוון ש-∣y∣=∣x∣+∣x∣2≥∣x∣2|y|=|x|+|x|^2\ge|x|^2, זהו O(∣y∣)O(|y|).
  • שלב 3 — מהגדרת MAM_A, ההרצה על xx אורכת לכל היותר d⋅2c∣x∣2d\cdot 2^{c|x|^2} צעדים. שוב ∣x∣2≤∣y∣|x|^2\le|y|, ולכן זה חסום ב-d⋅2c∣y∣d\cdot 2^{c|y|}.

סך הכול, לכל yy:

timeMB(y) ≤ O ⁣(∣y∣)+O ⁣(∣y∣)+d⋅2 c∣y∣ = O ⁣(2 c∣y∣).\mathrm{time}_{M_B}(y)\ \le\ O\!\left(|y|\right)+O\!\left(|y|\right)+d\cdot 2^{\,c|y|}\ =\ O\!\left(2^{\,c|y|}\right).

לכן B∈DTime ⁣(2cn)B\in\mathrm{DTime}\!\left(2^{cn}\right), ומכאן B∈EB\in\mathrm E.

שלב ה' — חציית הגשר. מההנחה E⊆PSPACE\mathrm E\subseteq\mathrm{PSPACE} נובע B∈PSPACEB\in\mathrm{PSPACE}. נקלף שוב את האיחוד: קיים α>0\alpha>0 כך ש-B∈DSpace(nα)B\in\mathrm{DSpace}(n^\alpha), ולכן קיימת המכונה השלישית MB~\widetilde{M_B} וקיים β>0\beta>0 כך ש-MB~\widetilde{M_B} מכריעה את BB ולכל yy:

spaceMB~(y) ≤ β⋅∣y∣α.\mathrm{space}_{\widetilde{M_B}}(y)\ \le\ \beta\cdot|y|^{\alpha}.

שלב ו' — בניית המכונה הרביעית. נגדיר MA~\widetilde{M_A} שעל קלט xx:

  1. תחשב את ∣x∣2|x|^2 ותבנה את y=x#∣x∣2y=x\#^{|x|^2}.
  2. תריץ את MB~\widetilde{M_B} על yy ותחזיר את אותה תשובה.

נכונות: MA~\widetilde{M_A} מכריעה את AA. יהי x∈Σ∗x\in\Sigma^*. אם x∈Ax\in A אז לפי הגדרת BB מתקיים x#∣x∣2∈Bx\#^{|x|^2}\in B, ולכן MB~\widetilde{M_B} מקבלת אותו, ולכן MA~\widetilde{M_A} מקבלת את xx. אם x∉Ax\notin A אז x#∣x∣2∉Bx\#^{|x|^2}\notin B (שוב לפי הגדרת BB, שכל איבריה מגיעים מאיברי AA), ולכן MB~\widetilde{M_B} דוחה אותו ו-MA~\widetilde{M_A} דוחה את xx.

שלב ז' — חשבון המקום של MA~\widetilde{M_A}. יהי x∈Σ∗x\in\Sigma^*.

  • שלב 1 — כאן נדרשת הישימות במקום של n↦n2n\mapsto n^2: חישוב הערך ∣x∣2|x|^2 דורש O(∣x∣2)O(|x|^2) מקום. כתיבת yy עצמה תופסת ∣x∣+∣x∣2=O(∣x∣2)|x|+|x|^2=O(|x|^2) תאים.
  • שלב 2 — מהגדרת MB~\widetilde{M_B}, ההרצה דורשת לכל היותר β∣y∣α\beta|y|^{\alpha} תאים, וכיוון ש-∣y∣=O(∣x∣2)|y|=O(|x|^2) זהו O ⁣(∣x∣2α)O\!\left(|x|^{2\alpha}\right).

סך הכול spaceMA~(x)=O ⁣(∣x∣2α)\mathrm{space}_{\widetilde{M_A}}(x)=O\!\left(|x|^{2\alpha}\right), כלומר A∈DSpace ⁣(n2α)A\in\mathrm{DSpace}\!\left(n^{2\alpha}\right) ולכן A∈PSPACEA\in\mathrm{PSPACE}. ■\blacksquare

התבנית ב-high level: ארבע מכונות

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

#מה קורהמקור
1A∈E^A\in\hat{\mathrm E} ⟵ מקבלים את MAM_A עם חסם זמן (כי E^\hat{\mathrm E} מוגדרת בזמן)מהשמיים
2בונים שפת ריפוד BB, ומעליה בונים את MBM_B שמשתמשת ב-MAM_A כקופסה שחורה ⟸ מסיקים B∈EB\in\mathrm Eבנייה
3ההכלה הנתונה ⟸ B∈PSPACEB\in\mathrm{PSPACE} ⟵ מקבלים את MB~\widetilde{M_B} עם חסם מקום (כי PSPACE\mathrm{PSPACE} מוגדרת במקום)מהשמיים
4בונים את MA~\widetilde{M_A} שמכריעה את AA בעזרת MB~\widetilde{M_B} ⟸ מסיקים A∈PSPACEA\in\mathrm{PSPACE}בנייה

הערה מההקלטה [00:40:10]: סטודנט שאל למה בכלל צריך את מכונות ה"גל" (  ~\widetilde{\ \ }) אם כבר יש MA,MBM_A,M_B. התשובה: על MAM_A ו-MBM_B יש לנו מידע על זמן בלבד. כדי להסיק שייכות ל-PSPACE\mathrm{PSPACE} אנחנו חייבים מכונה שאנו יודעים לחסום את המקום שלה — ולכן חייבים לקבל מכונה חדשה. המעבר הזה, ממשאב אחד למשאב אחר או ממודל אחד לאחר, הוא כל תוכן ההוכחה.

משפט 2: E≠PSPACE\mathrm E\ne\mathrm{PSPACE}

זו טענה לא מותנית — והיא מודגמת כאן כדי להראות שטענות מותנות מסוג משפט 1 אינן חסרות ערך.

כיצד מוכיחים אי־שוויון בין קבוצות? E≠PSPACE\mathrm E\ne\mathrm{PSPACE} פירושו: E⊈PSPACE\mathrm E\not\subseteq\mathrm{PSPACE} או PSPACE⊈E\mathrm{PSPACE}\not\subseteq\mathrm E. זו טענת "או", ולכן מוכיחים אותה בהפרדה למקרים: מניחים שהחלק הראשון אינו מתקיים ומוכיחים את השני. (המרצה הדגיש: לטענת "או" מספיק צד אחד, ואין צורך בהוכחה בשלילה.)

הוכחה. אם E⊈PSPACE\mathrm E\not\subseteq\mathrm{PSPACE} — סיימנו. נניח אפוא E⊆PSPACE\mathrm E\subseteq\mathrm{PSPACE}; נראה PSPACE⊈E\mathrm{PSPACE}\not\subseteq\mathrm E.

  1. ממשפט 1 נובע E^⊆PSPACE\hat{\mathrm E}\subseteq\mathrm{PSPACE}.
  2. לכל c>0c>0 מתקיים 2cn=O ⁣(2n2)2^{cn}=O\!\left(2^{n^2}\right) (שכן cn≤n2cn\le n^2 לכל n≥cn\ge c). לפי מונוטוניות במשאב, DTime ⁣(2cn)⊆DTime ⁣(2n2)\mathrm{DTime}\!\left(2^{cn}\right)\subseteq\mathrm{DTime}\!\left(2^{n^2}\right). הכלה נשמרת תחת איחוד, ולכן
E ⊆ DTime ⁣(2n2).\mathrm E\ \subseteq\ \mathrm{DTime}\!\left(2^{n^2}\right).
  1. עכשיו נפעיל את משפט ההיררכיה בזמן על שתי מחלקות עדינות. נסמן
g(n)=2n2,f(n)=22n2,sof2(n)=(22n2)2=24n2.g(n)=2^{n^2},\qquad f(n)=2^{2n^2},\qquad\text{so}\qquad f^2(n)=\left(2^{2n^2}\right)^2=2^{4n^2}.

ff סופר־לינארית וישימה בזמן, ומתקיים g=o(f)g=o(f) שכן g(n)/f(n)=2−n2→n→∞0g(n)/f(n)=2^{-n^2}\xrightarrow[n\to\infty]{}0. לכן

DTime ⁣(2n2) ⊊ DTime ⁣(24n2).\mathrm{DTime}\!\left(2^{n^2}\right)\ \subsetneq\ \mathrm{DTime}\!\left(2^{4n^2}\right).
  1. מהגדרת E^\hat{\mathrm E} (עם c=4c=4) מתקיים DTime ⁣(24n2)⊆E^\mathrm{DTime}\!\left(2^{4n^2}\right)\subseteq\hat{\mathrm E}.
  2. נשרשר: E⊆DTime ⁣(2n2)⊊DTime ⁣(24n2)⊆E^⊆PSPACE\mathrm E\subseteq\mathrm{DTime}\!\left(2^{n^2}\right)\subsetneq\mathrm{DTime}\!\left(2^{4n^2}\right)\subseteq\hat{\mathrm E}\subseteq\mathrm{PSPACE}. בשרשרת הכלות שאחת מהן ממש, ההכלה בין הקצוות היא ממש, ולכן
E ⊊ PSPACE.\mathrm E\ \subsetneq\ \mathrm{PSPACE}.
  1. מהכלה ממש נובע PSPACE⊈E\mathrm{PSPACE}\not\subseteq\mathrm E, ובפרט E≠PSPACE\mathrm E\ne\mathrm{PSPACE}. ■\blacksquare

הערה: המרצה ציין ש"בדרך הזו" השתמשנו במשפט 1 בצורה חזקה מאוד — בלעדיו לא היה לנו מסלול מ-E\mathrm E אל E^\hat{\mathrm E} בתוך PSPACE\mathrm{PSPACE}. וכן: הכלה נשמרת תחת איחוד, הכלה ממש לא — ולכן שלב 3 נעשה על מחלקות עדינות דווקא.

משפט 3: אם P=NP\mathrm P=\mathrm{NP} אז EXP=NEXP\mathrm{EXP}=\mathrm{NEXP}

בניסוח שהוצג בכיתה: הראו כי אם EXP≠NEXP\mathrm{EXP}\ne\mathrm{NEXP} אז P≠NP\mathrm P\ne\mathrm{NP}.

צמצום הניסוח. ראשית מעיפים את השלילות במעבר לנגדי־חיובי: הטענה שקולה ל"אם P=NP\mathrm P=\mathrm{NP} אז EXP=NEXP\mathrm{EXP}=\mathrm{NEXP}". שנית, כבר ידוע (שיעור 4) ש-P⊆NP\mathrm P\subseteq\mathrm{NP} ו-EXP⊆NEXP\mathrm{EXP}\subseteq\mathrm{NEXP}; לכן כל מה שהטענה מחדשת הוא ההכלה בכיוון השני, ומספיק להוכיח:

אם NP⊆P\mathrm{NP}\subseteq\mathrm P אז NEXP⊆EXP\mathrm{NEXP}\subseteq\mathrm{EXP}.

וזו כבר טענה מן הצורה "אם הכלה אז הכלה" — מועמדת מובהקת לריפוד.

הוכחה. נניח NP⊆P\mathrm{NP}\subseteq\mathrm P, ותהי A∈NEXPA\in\mathrm{NEXP}.

מכונה 1. קיים c≥1c\ge 1 כך ש-A∈NTime ⁣(2nc)A\in\mathrm{NTime}\!\left(2^{n^c}\right), ולכן קיימת מכונה א־דטרמיניסטית MAM_A וקיים d>0d>0 כך ש-MAM_A מכריעה את AA באופן א־דטרמיניסטי ולכל xx:

timeMA(x) ≤ d⋅2 ∣x∣c.\mathrm{time}_{M_A}(x)\ \le\ d\cdot 2^{\,|x|^c}.

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

כמה לרפד? זה החישוב היחיד שדורש מחשבה, והמרצה עשה אותו בקול. אני רוצה ש-BB תהיה ב-NP\mathrm{NP}, כלומר שזמן הריצה יהיה פולינומי ב-∣y∣|y|. אבל הזמן היקר הוא הרצת MAM_A, שהוא מעריכי ב-∣x∣|x|. כדי שאותו מספר צעדים ייראה פולינומי, ∣y∣|y| חייב להיות מעריכי ב-∣x∣|x|. לכן הריפוד יהיה מעריכי — וניקח מיד את הקבוע dd פנימה, כדי שהחשבון יֵצא נוח:

B={ x# d⋅2∣x∣c | x∈A },#∉Σ.B=\left\{\,x\#^{\,d\cdot 2^{|x|^c}}\ \middle|\ x\in A\,\right\},\qquad \#\notin\Sigma .

מכונה 2. נגדיר מכונה א־דטרמיניסטית MBM_B, שעל קלט y∈(Σ∪{#})∗y\in(\Sigma\cup\{\#\})^*:

  1. תוודא ש-yy מהצורה x#ℓx\#^{\ell} עם x∈Σ∗x\in\Sigma^*; אחרת תדחה.
  2. תחשב את d⋅2∣x∣cd\cdot 2^{|x|^c} ותוודא ש-ℓ=d⋅2∣x∣c\ell=d\cdot 2^{|x|^c}; אחרת תדחה.
  3. תריץ את MAM_A על xx ותחזיר את תשובתה.

שימו לב: שלבים 1 ו-2 דטרמיניסטיים לחלוטין; כל האי־דטרמיניזם של MBM_B יושב בתוך הרצת MAM_A בשלב 3. MBM_B "מחזיקה את MAM_A בבטן" ומריצה אותה, ולכן היא יורשת ממנה את האי־דטרמיניזם. (אין כאן שימוש במכונה אוניברסלית: כשאנו בונים את MBM_B אנו כבר מכירים את MAM_A וקובעים אותה בתוך המכונה.)

נכונות — בטרמינולוגיה של אי־דטרמיניזם.

כיוון ראשון. נניח y∈By\in B, כלומר y=x#d⋅2∣x∣cy=x\#^{d\cdot 2^{|x|^c}} עבור x∈Ax\in A. שלבים 1 ו-2 דטרמיניסטיים ויעברו בכל ריצה. כיוון ש-x∈Ax\in A ו-MAM_A מכריעה את AA א־דטרמיניסטית, קיימת ריצה של MAM_A על xx שמסתיימת במצב מקבל. לכן קיימת ריצה של MBM_B על yy שמסתיימת במצב מקבל — זו שבה MBM_B בוחרת בשלב 3 את הבחירות של אותה ריצה מקבלת.

כיוון שני. נניח שקיימת ריצה של MBM_B על yy המסתיימת במצב מקבל. בריצה זו שלבים 1 ו-2 עברו, ולכן קיים x∈Σ∗x\in\Sigma^* עם y=x#d⋅2∣x∣cy=x\#^{d\cdot 2^{|x|^c}}. כמו כן, בריצה זו ההרצה של MAM_A על xx הסתיימה במצב מקבל, ולכן x∈Ax\in A. מכאן y∈By\in B.

בנוסף, כל ריצה של MBM_B עוצרת, כי שלבים 1–2 סופיים וכל ריצה של MAM_A עוצרת. לכן MBM_B מכריעה את BB באופן א־דטרמיניסטי.

חשבון הזמן של MBM_B. נסמן y=x#ℓy=x\#^{\ell}.

  • שלב 1: סריקה אחת, O(∣y∣)O(|y|) צעדים.
  • שלב 2: מהישימות בזמן של n↦d⋅2ncn\mapsto d\cdot 2^{n^c}, החישוב עולה O ⁣(2∣x∣c)O\!\left(2^{|x|^c}\right) צעדים. וכיוון ש-∣y∣≥d⋅2∣x∣c|y|\ge d\cdot 2^{|x|^c}, זהו O(∣y∣)O(|y|).
  • שלב 3: מהגדרת MAM_A, לכל היותר d⋅2∣x∣cd\cdot 2^{|x|^c} צעדים — שהם, שוב, לכל היותר ∣y∣|y|.

סך הכול timeMB(y)=O(∣y∣)\mathrm{time}_{M_B}(y)=O(|y|), כלומר B∈NTime(n)⊆NPB\in\mathrm{NTime}(n)\subseteq\mathrm{NP}. הריפוד הוריד את הסיבוכיות ממעריכית ללינארית — לא מפני שהחישוב התייעל, אלא מפני שהמכנה גדל.

מכונה 3. מההנחה NP⊆P\mathrm{NP}\subseteq\mathrm P נובע B∈PB\in\mathrm P, ולכן קיים α>0\alpha>0 כך ש-B∈DTime(nα)B\in\mathrm{DTime}(n^\alpha), ולכן קיימת מכונה דטרמיניסטית MB~\widetilde{M_B} וקיים β>0\beta>0 כך ש-MB~\widetilde{M_B} מכריעה את BB ולכל yy:

timeMB~(y) ≤ β⋅∣y∣α.\mathrm{time}_{\widetilde{M_B}}(y)\ \le\ \beta\cdot|y|^{\alpha}.

מכונה 4. נגדיר מכונה דטרמיניסטית MA~\widetilde{M_A} שעל קלט xx:

  1. תחשב את d⋅2∣x∣cd\cdot 2^{|x|^c} ותבנה את y=x# d⋅2∣x∣cy=x\#^{\,d\cdot 2^{|x|^c}}.
  2. תריץ את MB~\widetilde{M_B} על yy ותחזיר את אותה תשובה.

ההוכחה ש-MA~\widetilde{M_A} מכריעה את AA זהה מילה במילה לזו שבמשפט 1: x∈A  ⟺  x#d⋅2∣x∣c∈B  ⟺  MB~x\in A\iff x\#^{d\cdot 2^{|x|^c}}\in B\iff\widetilde{M_B} מקבלת אותו.

הערה: בהרצאה השלב הזה נאמר במשפט אחד ("תשלימו בדיוק אותה הוכחה"); הפירוט המלא: אם x∈Ax\in A אז לפי הגדרת BB מתקיים y∈By\in B, ו-MB~\widetilde{M_B} מכריעה את BB ולכן מקבלת. אם x∉Ax\notin A, אז אף איבר של BB אינו מהצורה x#d⋅2∣x∣cx\#^{d\cdot 2^{|x|^c}} עבור xx זה, ולכן y∉By\notin B ו-MB~\widetilde{M_B} דוחה. בשני המקרים MA~\widetilde{M_A} מחזירה את התשובה הנכונה, והיא עוצרת תמיד.

חשבון הזמן של MA~\widetilde{M_A}. יהי x∈Σ∗x\in\Sigma^*.

  • שלב 1: מהישימות בזמן של d⋅2ncd\cdot 2^{n^c}, החישוב עולה O ⁣(2∣x∣c)O\!\left(2^{|x|^c}\right); כתיבת yy עולה עוד ∣x∣+d⋅2∣x∣c=O ⁣(2∣x∣c)|x|+d\cdot 2^{|x|^c}=O\!\left(2^{|x|^c}\right) צעדים.
  • שלב 2: לכל היותר β∣y∣α=β(∣x∣+d⋅2∣x∣c)α\beta|y|^{\alpha}=\beta\left(|x|+d\cdot 2^{|x|^c}\right)^{\alpha} צעדים.

הגורם הדומיננטי הוא השני, והעלאה בחזקת α\alpha מכניסה את α\alpha כמקדם במעריך:

timeMA~(x) ≤ O ⁣(2∣x∣c)+β(∣x∣+d⋅2∣x∣c)α = O ⁣(2 α∣x∣c) = O ⁣(2 ∣x∣c+1),\mathrm{time}_{\widetilde{M_A}}(x)\ \le\ O\!\left(2^{|x|^c}\right)+\beta\left(|x|+d\cdot 2^{|x|^c}\right)^{\alpha}\ =\ O\!\left(2^{\,\alpha|x|^c}\right)\ =\ O\!\left(2^{\,|x|^{c+1}}\right),

כאשר המעבר האחרון תקף כי α∣x∣c≤∣x∣c+1\alpha|x|^c\le|x|^{c+1} לכל ∣x∣≥α|x|\ge\alpha, וקלטים קצרים יותר נבלעים בקבוע. לכן

A∈DTime ⁣(2 nc+1)⊆EXP.■A\in\mathrm{DTime}\!\left(2^{\,n^{c+1}}\right)\subseteq\mathrm{EXP}. \qquad\blacksquare

הערה מההקלטה [01:10:09]: אודליה שאלה אם המעבר בריפוד תמיד יהיה "זמן ↔ מקום". התשובה: לא. כאן זה מזמן לזמן, אבל מא־דטרמיניסטי לדטרמיניסטי. תמיד יש איזשהו מעבר בין משהו למשהו, אך הוא לא תמיד זמן ומקום — ומבחינת מבנה ההוכחה זה שקוף לחלוטין.

משפט 4: SAT∈NP\mathrm{SAT}\in\mathrm{NP}

הוכחה. נבנה מכונת טיורינג א־דטרמיניסטית דו־סרטית MM, שעל קלט ⟨φ⟩\langle\varphi\rangle:

  1. נספור את מספר המשתנים ב-φ\varphi (בפועל: האינדקס הגדול ביותר המופיע בנוסחה) ונסמנו nn.
  2. נכתוב nn ביטים באופן א־דטרמיניסטי על הסרט השני.
  3. נתייחס לביטים כאל הסמה vv (הביט ה-ii הוא v(xi)v(x_i)) ונבדוק אם vv מספקת את φ\varphi; נקבל אם כן, ונדחה אחרת.

נכונות. אם φ\varphi ספיקה, קיימת הסמה vv המספקת אותה; קיימת ריצה של MM שבשלב 2 כותבת בדיוק את מחרוזת הביטים המתאימה ל-vv, ובריצה זו שלב 3 מוצא שהנוסחה מסופקת ומקבל. לכן קיימת ריצה מקבלת. להפך, אם קיימת ריצה מקבלת, אז המחרוזת שנכתבה בה בשלב 2 מגדירה הסמה שעברה את הבדיקה בשלב 3, כלומר הסמה שמספקת את φ\varphi — ולכן φ\varphi ספיקה. בנוסף כל ריצה עוצרת: שלב 2 כותב בדיוק nn ביטים, ושלבים 1 ו-3 דטרמיניסטיים וסופיים. לכן MM מכריעה את SAT\mathrm{SAT} באופן א־דטרמיניסטי.

הערה: בהרצאה נאמר "אם הנוסחה ספיקה קיימת אפשרות לכתוב הסמה מספקת על הסרט השני" ותו לא; הנימוק המפורט לשני הכיוונים הוא הפירוט שלנו. המרצה השאיר במפורש את המשך ההוכחה כשיעורי בית לשיעור הבא [02:05:32].

חשבון הזמן. נסמן m=∣⟨φ⟩∣m=|\langle\varphi\rangle| ו-n≤mn\le m את מספר המשתנים.

  • שלב 1: סריקה של הקידוד תוך שמירת האינדקס המרבי — O(m2)O(m^2) צעדים בגבול העליון הגס (סריקה אחת לכל השוואה); בוודאי פולינומי.
  • שלב 2: כתיבת n≤mn\le m ביטים — O(m)O(m) צעדים.
  • שלב 3: עוברים על הנוסחה ליטרל־ליטרל; לכל ליטרל ניגשים לביט המתאים בסרט השני, מה שעולה לכל היותר O(m)O(m) צעדי הזזה. מספר הליטרלים חסום ב-mm, ולכן O(m2)O(m^2) צעדים.

סך הכול timeM(⟨φ⟩)=O(m2)\mathrm{time}_M(\langle\varphi\rangle)=O(m^2) — פולינומי.

מעבר למכונה סטנדרטית. המחלקות מוגדרות באמצעות מכונות חד־סרטיות, ולכן נותר לתרגם. מהשקילות בין המודלים (שיעור 1), סימולציה של מכונה רב־סרטית במכונה חד־סרטית עולה לכל היותר ריבוע בזמן; לכן קיימת מכונה א־דטרמיניסטית חד־סרטית M^\widehat M שמכריעה את SAT\mathrm{SAT} בזמן O(m4)O(m^4). מכאן

SAT∈NTime ⁣(n4)⊆NP.■\mathrm{SAT}\in\mathrm{NTime}\!\left(n^4\right)\subseteq\mathrm{NP}. \qquad\blacksquare

הערה מההקלטה [02:03:54]: "לכתוב באופן א־דטרמיניסטי" אינו "לכתוב באקראי". אין כאן שום הסתברות: פונקציית המעברים פשוט מאפשרת גם לכתוב 00 וגם לכתוב 11, ואנחנו שואלים אם קיימת בחירה נכונה. לא בכל ריצה המכונה תבחר נכון — אבל קיימת לה אפשרות כזו. הסתברות היא מודל אחר לגמרי.


דוגמאות ותרגילים מהשיעור

דוגמה 1: מעקב אחרי מילה קונקרטית בריפוד הריבועי

ניקח Σ={0,1}\Sigma=\{0,1\} ונניח ש-x=101∈Ax=\texttt{101}\in A, כאשר A∈E^A\in\hat{\mathrm E} עם c=1c=1 ו-d=1d=1, כלומר MAM_A רצה על xx לכל היותר 2∣x∣2=29=5122^{|x|^2}=2^9=512 צעדים.

קדימה (מ-AA ל-BB): ∣x∣=3|x|=3, ולכן ∣x∣2=9|x|^2=9 ו-

y=101#########,∣y∣=3+9=12.y=\texttt{101}\#\#\#\#\#\#\#\#\#,\qquad |y|=3+9=12 .

MBM_B על yy: שלב 1 סורק 12 תווים ומוודא שאחרי ה-#\# הראשון אין תו מ-Σ\Sigma — עובר. שלב 2 מחשב 32=93^2=9 ומשווה ל-9 — עובר. שלב 3 מריץ את MAM_A על 101\texttt{101} ב-≤512\le 512 צעדים. סך הצעדים ≤12+9+512<21⋅12=4096\le 12+9+512<2^{1\cdot 12}=4096 — ואכן ההרצה נכנסת בתקציב 2c∣y∣2^{c|y|}.

אחורה (מ-BB ל-AA): MA~\widetilde{M_A} על 101\texttt{101} מחשבת 9, כותבת את אותו yy באורך 12, ומריצה עליו את MB~\widetilde{M_B} במקום ≤β⋅12α\le\beta\cdot 12^{\alpha} — שהוא O ⁣(32α)O\!\left(3^{2\alpha}\right), כלומר פולינומי ב-∣x∣|x|.

היכן זה נשבר בכוונה: המילה y′=101####y'=\texttt{101}\#\#\#\# (זנב באורך 4) תיפול בשלב 2, וזה נכון — היא באמת אינה ב-BB. וזו הסיבה ששלב 2 אינו מותרות: בלעדיו MBM_B הייתה מקבלת מילים קצרות מדי, וחשבון הזמן שנשען על ∣x∣2≤∣y∣|x|^2\le|y| היה קורס.

דוגמה 2: מעקב בריפוד המעריכי

נניח A∈NTime ⁣(2n2)A\in\mathrm{NTime}\!\left(2^{n^2}\right) (כלומר c=2c=2), d=1d=1, ו-x=10x=\texttt{10}, ∣x∣=2|x|=2. גודל הריפוד: d⋅2∣x∣c=24=16d\cdot 2^{|x|^c}=2^{4}=16, ולכן ∣y∣=2+16=18|y|=2+16=18.

MAM_A על xx רצה לכל היותר 16 צעדים. ביחס ל-yy זה ≤18\le 18 צעדים — לינארי. אותו מספר צעדים בדיוק, מכנה גדול פי תשעה. זה, בשורה אחת, כל טיעון הריפוד.

דוגמה 3: הבדיקה שהנוסחה מסופקת (הדוגמה מהסיכום)

נתונה הנוסחה

φ=(x1∨x2‾∨x3)∧(x2∨x3∨x4‾).\varphi=(x_1\vee\overline{x_2}\vee x_3)\wedge(x_2\vee x_3\vee\overline{x_4}).

יש בה ארבעה משתנים (הם חוזרים על עצמם, אך המשתנים הם x1,x2,x3,x4x_1,x_2,x_3,x_4), ולכן MM תכתוב בשלב 2 מחרוזת באורך 4.

ריצה שנכשלת: נניח שנכתב 0100\texttt{0100}, כלומר v(x1)=0, v(x2)=1, v(x3)=0, v(x4)=0v(x_1)=0,\ v(x_2)=1,\ v(x_3)=0,\ v(x_4)=0. הפסוקית הראשונה: v(x1)=0v(x_1)=0, v(x2‾)=0v(\overline{x_2})=0, v(x3)=0v(x_3)=0 — כולם FF, ולכן הפסוקית אינה מסופקת, ולכן vv אינה מספקת את φ\varphi. הריצה הזו דוחה.

ריצה שמצליחה: לו נכתב 1101\texttt{1101}, כלומר v(x1)=1, v(x2)=1, v(x3)=0, v(x4)=1v(x_1)=1,\ v(x_2)=1,\ v(x_3)=0,\ v(x_4)=1. הפסוקית הראשונה: v(x1)=1v(x_1)=1 — מסופקת. הפסוקית השנייה: v(x2)=1v(x_2)=1 — מסופקת. לכן vv מספקת את φ\varphi והריצה מקבלת.

המסקנה: קיימת ריצה מקבלת, ולכן MM מקבלת את ⟨φ⟩\langle\varphi\rangle — כנדרש, שכן φ\varphi אכן ספיקה. שימו לב שהריצה הדוחה אינה סתירה: בהכרעה א־דטרמיניסטית מספיק שקיימת ריצה מקבלת.

תרגיל 1 (נשאל בכיתה): הנוסחה שאינה ספיקה

שאלה: לפי ההגדרה מרגיש כאילו כל נוסחה ספיקה. תנו דוגמה לנוסחה שאינה ספיקה.

פתרון: φ=x1∧x1‾\varphi=x_1\wedge\overline{x_1}. יש כאן משתנה יחיד, ולכן שתי הסמות אפשריות בלבד. אם v(x1)=Tv(x_1)=T אז v(x1‾)=Fv(\overline{x_1})=F ולכן v(φ)=Fv(\varphi)=F; אם v(x1)=Fv(x_1)=F אז v(φ)=Fv(\varphi)=F. בשני המקרים FF, ולכן לא קיימת הסמה מספקת ו-⟨φ⟩∉SAT\langle\varphi\rangle\notin\mathrm{SAT}.

תרגיל 2 (השאלה המכינה מהשיעור הקודם)

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

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

תרגיל 3 (הכיוון של הריפוד — כמה לרפד?)

שאלה: בטענה על NEXP\mathrm{NEXP}, מדוע לא הספיק ריפוד ריבועי כמו במשפט 1?

פתרון: מטרתנו הייתה B∈NPB\in\mathrm{NP}, כלומר זמן פולינומי ב-∣y∣|y|. הצוואר הוא הרצת MAM_A, שעולה d⋅2∣x∣cd\cdot 2^{|x|^c} — מעריכי ב-∣x∣|x|. ריפוד ריבועי נותן ∣y∣=O ⁣(∣x∣2)|y|=O\!\left(|x|^2\right), ואז d⋅2∣x∣cd\cdot 2^{|x|^c} אינו פולינומי ב-∣y∣|y|. רק ריפוד מעריכי מביא את ∣y∣|y| לאותו סדר גודל כמו מספר הצעדים, ואז אותו מספר צעדים נעשה לינארי ב-∣y∣|y|. הכלל האצבע שהמרצה נתן: כתבו את החסם הרצוי, כתבו את החסם שיש, וראו איזה ∣y∣|y| מגשר; אם חורגים — הקטינו או הגדילו את הריפוד ונסו שוב.

תרגיל 4 (האינטואיציה מההקלטה המקבילה, [02:07:54]–[02:13:14])

שאלה: קחו את השפה A={x∣xA=\{x\mid x is a composite number in binary}\} ואת האלגוריתם הנאיבי שעובר על כל המספרים מ-11 עד xx ומנסה לחלק. מה זמן הריצה שלו, ומה קורה אם משנים את הקידוד לאונרי?

פתרון: בקידוד בינרי, אורך הקלט הוא Θ(log⁡x)\Theta(\log x) בעוד שמספר הפעולות הוא Θ(x)\Theta(x) (ואף יותר, בגלל עלות כל חילוק). לכן ביחס לאורך הקלט זמן הריצה הוא 2Θ(∣x∣)2^{\Theta(|x|)} — מעריכי. בקידוד אונרי, אורך הקלט הוא בדיוק xx; אותו אלגוריתם בדיוק, ללא שינוי של תו אחד, רץ עכשיו בזמן פולינומי (סדר גודל ∣x∣2|x|^2) ביחס לאורך הקלט.

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


הערות מהשיעור

  • [00:09:20] "בדרך תהיינה ארבע מכונות." שתיים מקבלים משייכות למחלקה, שתיים בונים. שווה לכתוב את הספירה הזו בשוליים לפני שמתחילים — היא מונעת אבדן דרך באמצע.
  • [00:19:31] שאלת סטודנט: איך MAM_A מכירה את התו #\#, הרי הוא לא באלף־בית של AA? תשובה: היא אינה מכירה אותו, ואינה צריכה — MAM_A מורצת רק על xx, לא על הזנב. בעקבות השאלה המרצה חידד את הכתיבה והוסיף במפורש "כאשר x∈Σ∗x\in\Sigma^*", וסימן Σ\Sigma = האלף־בית של AA.
  • [00:21:04] מוסכמה: אחרי כל שלב אפשר לכתוב "אחרת נדחה", במקום שלב מסכם רביעי. שתי הכתיבות שקולות; בסיכום מופיע שלב 4 מפורש, בהקלטה הוא נבלע בשלבים.
  • [00:33:10] הניסוח המדויק של הרווח: "מספר הצעדים לא השתנה, אבל הכול גדל, אז פתאום אני משלם פחות ביחס לקלט."
  • [00:45:28] הישימות אינה טכניקליות. בכל טיעון ריפוד יש לומר במפורש שפונקציית הריפוד ישימה (בזמן, במקום, או בשניהם — לפי מה שחוסמים). "היא תמיד תהיה חשובה בריפוד, אז תמיד צריך להגיד את זה" [01:34:30].
  • [00:59:45] מלכודת מושגית: E=PSPACE\mathrm E=\mathrm{PSPACE} היא טענה על שפות. אין טענה שמכונה שרצה בזמן כזה תרוץ במקום כזה; הטענה היא שאם קיימת מכונה אחת, קיימת מכונה אחרת. בכל ההכלות הסטנדרטיות שראינו עד כה המכונה נשארה אותה מכונה — כאן, לראשונה, החלפנו מכונות.
  • [01:00:17] טכניקה לטענת "או": מוכיחים בהפרדה למקרים — מניחים שהחלק הראשון אינו מתקיים ומוכיחים את השני. אין צורך להוכיח את שני הצדדים, ואין צורך בהוכחה בשלילה.
  • [01:05:46] שאלת סטודנט: מאיפה הופיעה פתאום הכלה ממש? תשובה: היא הגיעה ממשפט ההיררכיה בזמן, והיא נשמרת: בשרשרת הכלות שאחת מהן ממש, ההכלה בין הקצוות היא ממש.
  • [01:38:48] כלל עבודה: ריפוד מוכיח הכלה. אם רוצים הכלה ממש, מפרקים לשתיים — הכלה בכיוון אחד, ואי־הכלה בכיוון השני. לא מערבבים את שני המהלכים.
  • [01:06:25] הערת מבחן/תרגיל: "תקבלו תרגיל ממש ממש דומה בשיעורי הבית. תעקבו אחד לאחד וזה מסתדר." המבנה קבוע; הדבר היחיד שמשתנה בין שאלה לשאלה הוא גודל הריפוד.
  • [01:25:06] שאלת סטודנט: האם MBM_B היא מכונה א־דטרמיניסטית מפני ש"משכנו" אליה את האי־דטרמיניזם של MAM_A? תשובה: כן בדיוק. היא מחזיקה את MAM_A בתוכה ומריצה אותה, ולכן יורשת את האי־דטרמיניזם.
  • [01:45:45] טרמינולוגיה: "טפל" (tuple) ולא "סדרה" — סדרה מרמזת על אינסופיות, ופסוקית היא סופית תמיד. "הסגר" ו"פסוקית" הם שני שמות לאותו מושג.
  • [02:06:05] מה נשאר פתוח לשיעור הבא: להוכיח פורמלית ש-MM מכריעה את SAT\mathrm{SAT} באופן א־דטרמיניסטי, לחשב את זמן הריצה, ולעבור למכונה חד־סרטית ("לא לשכוח שהמחלקות מוגדרות על ידי מכונה חד־סרטית"). הפירוט המלא הוזן כאן לתוך משפט 4.

פערים בין הסיכום להקלטה

  • מקור: עמוד 6 בסיכום. הפער: כתוב "B∈NSpace(n)⊆NPB\in\mathrm{NSpace}(n)\subseteq\mathrm{NP}" מיד אחרי שחושב חסם זמן timeMB(y)≤O(∣y∣)\mathrm{time}_{M_B}(y)\le O(|y|). ההכרעה: זו פליטת קולמוס; הנכון הוא NTime(n)⊆NP\mathrm{NTime}(n)\subseteq\mathrm{NP} (ואכן NSpace(n)⊆NP\mathrm{NSpace}(n)\subseteq\mathrm{NP} אינה טענה נכונה כלל). ההקלטה [01:28:57] מאשרת: "BB הוא אפילו בזמן ליניארי, אבל זה מוכל ב-NP\mathrm{NP}". תוקן בגוף.
  • מקור: עמוד 6 בסיכום. הפער: כתוב "קיים α>0\alpha>0 כך ש-B∈DSpace(nα)B\in\mathrm{DSpace}(n^\alpha)" — אף שההנחה היא B∈PB\in\mathrm P, ואף שהשורה הבאה בסיכום עצמו נוקבת בחסם זמן timeMB~≤β∣y∣α\mathrm{time}_{\widetilde{M_B}}\le\beta|y|^\alpha. ההכרעה: אותה פליטת קולמוס (Space במקום Time). הנכון הוא B∈DTime(nα)B\in\mathrm{DTime}(n^\alpha). תוקן בגוף.
  • מקור: עמוד 5 בסיכום. הפער: מספור השלבים של MBM_B במקרה ה-NEXP\mathrm{NEXP} הוא ①,③,④ — שלב ② חסר. ההכרעה: מספור בלבד, ללא חוסר מתמטי; מוספרו כאן 1,2,3 בעקביות עם ההוכחה הראשונה.
  • מקור: ההקלטה. הפער: בהקלטה מופיעה שאלה מכינה ("מכונה שרצה מיליון צעדים על קלט גדול יותר — הסיבוכיות עלתה או ירדה?") שהיא הגרעין האינטואיטיבי של כל הטכניקה, ואינה מופיעה בסיכום כלל. ההכרעה: נכללה כתרגיל 2 וכהערה.
  • מקור: ההקלטה [00:42:15]–[00:45:28]. הפער: דיון ארוך ומהותי מדוע אי אפשר לחסום את המקום באורך הפלט, ומדוע דווקא הישימות במקום היא שמצילה — אין לו זכר בסיכום. ההכרעה: נכלל כהערה בסעיף הרקע.
  • מקור: ההקלטה [01:14:30]–[01:16:02]. הפער: ההסבר כיצד בוחרים את גודל הריפוד (כותבים את החסם הרצוי, את החסם הקיים, ומגשרים; ואם חורגים — מנסים שוב) הוא הדבר היחיד שדורש מחשבה בהוכחה, והסיכום מציג רק את התוצאה. ההכרעה: נכלל בגוף משפט 3 ובתרגיל 3.
  • מקור: ההקלטה השנייה (zcCQY3oT40Y). הפער: ההקלטה כולה, פרט לשבע הדקות האחרונות, עוסקת בחומר של שיעור אחר (המודל הא־דטרמיניסטי, דוגמת המספרים הפריקים, ואפיון NP\mathrm{NP} באמצעות מוודא ועדות והוכחת השקילות). ההכרעה: סומנה partial; מתוכה נלקחה רק ההקדמה המוטיבציונית לריפוד (בינרי מול אונרי), שנכללה כתרגיל 4. אין בה גרסה שנייה של ההוכחות, ולכן הצלבת החסמים נעשתה מול הסיכום בלבד.
  • מקור: ההקלטה [02:01:15] מול עמוד 8 בסיכום. הפער: בכתוביות האוטומטיות הפסוקית השנייה בדוגמה נשמעת "x2∨x3∨x4x_2\vee x_3\vee x_4" ללא שלילה, ובסיכום היא (x2∨x3∨x4‾)(x_2\vee x_3\vee\overline{x_4}). ההכרעה: הסיכום מנצח (וממילא ההסמה 1101\texttt{1101} מספקת את שתי הגרסאות). כמו כן, מחרוזות ההסמה בכתוביות מקוטעות ("0 10\,1", "1 0 11\,0\,1"); הסיכום נוקב ב-0100\texttt{0100} ו-1101\texttt{1101}, ואלו נבדקו ונמצאו נכונות.
  • מקור: ההקלטה [02:05:32] והסיכום עמוד 8. הפער: שני המקורות עוצרים אחרי תיאור המכונה ל-SAT\mathrm{SAT} ולפני חשבון זמן הריצה והמעבר למכונה חד־סרטית. ההכרעה: ההשלמה נכתבה כאן במלואה וסומנה כהשלמה בהערה; ראו גם open_questions.
  • מקור: עמוד 3 בסיכום. הפער: הערה סגולה בשוליים השמאליים, שנראה שהיא מסבירה מדוע הריפוד הוא בגודל n2n^2, קריאה רק חלקית. ההכרעה: שוחזרה מתוך ההסבר המקביל בהקלטה [00:50:55] ("מכיוון שההבדל בין E\mathrm E ל-E^\hat{\mathrm E} היה רק שה-nn עולה בריבוע, ריפדתי בריבוע").

סיכום ונקודות למבחן

מה לזכור בעל פה

E=⋃c≥1DTime ⁣(2cn),E^=⋃c≥1DTime ⁣(2cn2),B={x#p(∣x∣)∣x∈A}.\mathrm E=\bigcup_{c\ge1}\mathrm{DTime}\!\left(2^{cn}\right),\qquad \hat{\mathrm E}=\bigcup_{c\ge1}\mathrm{DTime}\!\left(2^{cn^2}\right),\qquad B=\left\{x\#^{p(|x|)}\mid x\in A\right\}.
  1. התבנית של ארבע המכונות: מקבלים–בונים–מקבלים–בונים. שני ה"מקבלים" באים משייכות למחלקה (אחרי קילוף האיחוד), שני ה"בונים" הם עבודה שלכם.
  2. שלושת השלבים של מכונת הריפוד: בדיקת צורה → חישוב הריפוד ובדיקת אורך → הרצת המכונה הישנה כקופסה שחורה. אף פעם לא יותר מזה.
  3. הכיוון של שתי הטענות: אם E⊆PSPACE\mathrm E\subseteq\mathrm{PSPACE} אז E^⊆PSPACE\hat{\mathrm E}\subseteq\mathrm{PSPACE} (מהקטנה לגדולה!); אם NP⊆P\mathrm{NP}\subseteq\mathrm P אז NEXP⊆EXP\mathrm{NEXP}\subseteq\mathrm{EXP}, כלומר EXP≠NEXP⇒P≠NP\mathrm{EXP}\ne\mathrm{NEXP}\Rightarrow\mathrm P\ne\mathrm{NP} — ולא ההפך.
  4. התוצאה הלא מותנית: E≠PSPACE\mathrm E\ne\mathrm{PSPACE}, ולמעשה בכל מקרה PSPACE⊈E\mathrm{PSPACE}\not\subseteq\mathrm E או E⊈PSPACE\mathrm E\not\subseteq\mathrm{PSPACE}.
  5. SAT={⟨φ⟩∣φ\mathrm{SAT}=\{\langle\varphi\rangle\mid\varphi CNF satisfiable}\}, ו-SAT∈NP\mathrm{SAT}\in\mathrm{NP} באמצעות "ניחוש" הסמה ואימותה.

מלכודות סטנדרטיות

  • לרפד בכיוון הלא נכון. הריפוד תמיד מוסיף אורך; הוא מוריד סיבוכיות יחסית, לעולם לא מוריד מספר צעדים. אם החשבון שלכם "חוסך צעדים" — טעיתם.
  • לשכוח את בדיקת אורך הזנב. בלי שלב 2, השפה BB מכילה מילים שלא התכוונתם אליהן וכל חשבון הזמן קורס.
  • לשכוח לומר "ישימה בזמן / במקום". זה נקודות במבחן, וזה גם באמת נחוץ.
  • לערבב הכלה עם הכלה ממש. הכלה נשמרת תחת איחוד; הכלה ממש לא. משפט ההיררכיה חל על מחלקות עדינות בלבד.
  • לבלבל אי־דטרמיניזם עם אקראיות. "קיימת ריצה מקבלת" אינו "בהסתברות גבוהה".
  • לכתוב x1=Tx_1=T. משתנה אינו ערך; רק הסמה נותנת ערך.
  • להניח שמכונה נשארת אותה מכונה בין שתי מחלקות. טענות ההכלה הן על שפות.

צ'ק־ליסט: מה צריך לדעת לעשות אחרי השיעור

  • בהינתן שתי מחלקות וטענה מותנית מסוג "אם הכלה אז הכלה", לקבוע מה גודל הריפוד מתוך חשבון של החסם הרצוי מול החסם הקיים.
  • לכתוב מכונת ריפוד בשלושת שלביה ולהוכיח שהיא מכריעה את השפה המרופדת, בשני הכיוונים — ובמקרה הא־דטרמיניסטי, בטרמינולוגיה של "קיימת ריצה מקבלת".
  • לבצע את שני חשבונות המשאב (של MBM_B ושל MA~\widetilde{M_A}) עד הסוף, כולל המעבר מ-∣x∣|x| ל-∣y∣|y| ובחזרה.
  • לשלב ריפוד עם משפט ההיררכיה כדי לקבל תוצאה לא מותנית, כולל ההפרדה למקרים בהוכחת טענת "או".
  • להגדיר ליטרל, פסוקית, נוסחת CNF, הסמה וספיקות במדויק, ולהבחין בין תחביר לסמנטיקה.
  • לתאר את המכונה הא־דטרמיניסטית עבור SAT\mathrm{SAT}, לנתח את זמן ריצתה, ולהסביר את המעבר למכונה חד־סרטית.

Questions left open

  • עמוד 3 בסיכום: הערה סגולה בשוליים השמאליים על הסיבה לבחירת ריפוד בגודל n² קריאה רק חלקית; שוחזרה לפי ההסבר המקביל בהקלטה [00:50:55].
  • מספרי השיעורים שאליהם מפנה סעיף הרקע (3 למשפטי ההיררכיה, 4 למודל הא־דטרמיניסטי) נגזרו מתיאור המרצה בפתיחת ההקלטה ולא מקובץ שיעור קיים; כדאי לאמת מול המניפסט.
  • ההוכחה ש-SAT∈NP נותרה חלקית בהקלטה: המרצה השאיר את חשבון זמן הריצה ואת המעבר למכונה חד־סרטית כשיעורי בית לשיעור הבא; הפירוט כאן הוא השלמה שלנו ואינו מופיע בסיכום.