מודלים חישוביים, חישוביות וסיבוכיות - Notes

‫מודלים חישוביים‪ ,‬חישוביות וסיבוכיות‬
‫סשה גולדשטיין‪sashag@cs ,‬‬
‫‪ 20‬ביוני ‪2011‬‬
‫תקציר‬
‫הסיכום להלן מהווה תקציר של חומר הקורס ואיני נוטל עליו כל אחריות‪ .‬אתם יכולים להיעזר גם בהקלטות השיעורים וכמובן‬
‫בספר הלימוד‪ .‬החומר מבוסס על הרצאותיו של ד"ר גיא קינדלר ושיעורי התרגול של מר רועי פוקס‪.‬‬
‫ניתן למצוא את הגרסה המעודכנת ביותר של סיכום זה ב־ ‪Heaven‬־‪ .Notes‬אשמח לקבל הערות ותיקונים לסיכום‪ ,‬גם אחרי מועד‬
‫המבחן‪ ,‬לכתובת המייל שכתובה למעלה‪.‬‬
‫תוכן עניינים‬
‫‪ I‬מודלים חישוביים‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪II‬‬
‫‪3‬‬
‫מבוא לשפות פורמליות ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫קבוצות וגדלים של קבוצות ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪1.1‬‬
‫שפות פורמליות ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪1.2‬‬
‫אוטומטים ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫אוטומטים סופיים דטרמיניסטיים ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪2.1‬‬
‫אוטומטים סופיים לא דטרמיניסטיים ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪2.2‬‬
‫פעולות על שפות רגולריות ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪2.3‬‬
‫למת הניפוח לשפות רגולריות ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪2.4‬‬
‫משפט ‪Nerode‬־‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Myhill‬‬
‫‪2.5‬‬
‫ביטויים רגולריים ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪2.6‬‬
‫בעיות הכרעה לגבי שפות רגולריות ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪2.7‬‬
‫שפות חסרות הקשר ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫דקדוקים חסרי הקשר ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪3.1‬‬
‫פעולות על שפות חסרות הקשר ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪3.2‬‬
‫צורה נורמלית של חומסקי ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪3.3‬‬
‫למת הניפוח לשפות חסרות הקשר ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪3.4‬‬
‫בעיות הכרעה לגבי שפות חסרות הקשר ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪3.5‬‬
‫אוטומט מחסנית ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪3.6‬‬
‫חישוביות‬
‫‪4‬‬
‫‪5‬‬
‫‪3‬‬
‫‪3‬‬
‫‪4‬‬
‫‪4‬‬
‫‪4‬‬
‫‪5‬‬
‫‪7‬‬
‫‪8‬‬
‫‪9‬‬
‫‪10‬‬
‫‪11‬‬
‫‪11‬‬
‫‪11‬‬
‫‪12‬‬
‫‪13‬‬
‫‪14‬‬
‫‪15‬‬
‫‪15‬‬
‫‪17‬‬
‫מכונות טיורינג ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫מכונות טיורינג "פשוטות" ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪4.1‬‬
‫וריאציות על מכונות טיורינג ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪4.2‬‬
‫מכונת טיורינג אוניברסלית ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪4.3‬‬
‫מכונת טיורינג לא דטרמיניסטית ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪4.4‬‬
‫פונקציות חשיבות ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪4.5‬‬
‫‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Random Access Machine‬‬
‫‪4.6‬‬
‫כריעות ואי־כריעות ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫המחלקות ‪ RE ,R‬ואי־כריעות ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪5.1‬‬
‫סגירות ‪ R‬ו־ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RE‬‬
‫‪5.2‬‬
‫רדוקציית מיפוי ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪5.3‬‬
‫אנומרטורים )מונים( ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪5.4‬‬
‫אוניברסאליות של דקדוקים חסרי הקשר ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪5.5‬‬
‫משפט רייס ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪5.6‬‬
‫‪1‬‬
‫‪17‬‬
‫‪17‬‬
‫‪19‬‬
‫‪20‬‬
‫‪21‬‬
‫‪21‬‬
‫‪22‬‬
‫‪23‬‬
‫‪23‬‬
‫‪24‬‬
‫‪25‬‬
‫‪26‬‬
‫‪27‬‬
‫‪28‬‬
‫‪5.7‬‬
‫‪5.8‬‬
‫‪5.9‬‬
‫דקדוקים פורמליים ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫בעיית ה־ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . PCP‬‬
‫פונקציות לא־חשיבות ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪ III‬סיבוכיות‬
‫‪6‬‬
‫‪7‬‬
‫‪8‬‬
‫‪28‬‬
‫‪29‬‬
‫‪30‬‬
‫‪31‬‬
‫מחלקות זמן‪ P ,‬ו־ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . NP‬‬
‫מחלקות זמן ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪6.1‬‬
‫הצגת ‪ NP‬באמצעות מוודאים ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪6.2‬‬
‫בעיות קלאסיות ב־ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . NP‬‬
‫‪6.3‬‬
‫רדוקציות מיפוי פולינומיאליות‪ ,‬קושי ושלמות ב־ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . NP‬‬
‫‪6.4‬‬
‫משפט ‪Levin‬־‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cook‬‬
‫‪6.5‬‬
‫עוד בעיות ‪NP‬־שלמות ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪6.6‬‬
‫בעיות חיפוש ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪6.7‬‬
‫סגירות של ‪ NP‬ו־ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . coNP‬‬
‫‪6.8‬‬
‫אינטראקטאביליות )‪ (Intractability‬וסימולציה בזמן ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪6.9‬‬
‫סיבוכיות זיכרון ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫מחלקות זיכרון‪ PSPACE ,‬ו־ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . NPSPACE‬‬
‫‪7.1‬‬
‫שלמות ב־ ‪ ,NL‬רדוקציית ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . LOGSPACE‬‬
‫‪7.2‬‬
‫שלמות ב־ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . PSPACE‬‬
‫‪7.3‬‬
‫סימולציה במקום ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪7.4‬‬
‫פרוטוקולים אינטראקטיביים ורנדומיות ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫מבוא לרנדומיות במכונות טיורינג ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪8.1‬‬
‫מבוא לפרוטוקולים אינטראקטיביים ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪8.2‬‬
‫בעיית הזהות )‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (Identity‬‬
‫‪8.3‬‬
‫פולינומים ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪8.4‬‬
‫שקילות נוסחאות ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪8.5‬‬
‫‪ IP‬ו־ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . coNP‬‬
‫‪8.6‬‬
‫שיתוף סוד ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪8.7‬‬
‫‪2‬‬
‫‪31‬‬
‫‪31‬‬
‫‪32‬‬
‫‪33‬‬
‫‪33‬‬
‫‪34‬‬
‫‪35‬‬
‫‪38‬‬
‫‪38‬‬
‫‪39‬‬
‫‪41‬‬
‫‪41‬‬
‫‪42‬‬
‫‪43‬‬
‫‪45‬‬
‫‪46‬‬
‫‪46‬‬
‫‪46‬‬
‫‪47‬‬
‫‪48‬‬
‫‪49‬‬
‫‪51‬‬
‫‪52‬‬
‫להלן מספר דוגמאות לבעיות חישוביות‪ .‬במהלך הקורס ננסה להפריד בין הבעיות האלה‪:‬‬
‫‪ .1‬בהנתן גרף ‪ ,G‬רוצים לבדוק האם יש בו מסלול אוילר‪.‬‬
‫‪ .2‬נתונים המספרים ‪ a1 , . . . , an , t‬ורוצים לבדוק האם ניתן להציג את ‪ t‬כסכום של ת"ק של ‪.a1 , . . . , an‬‬
‫‪ .3‬נתונות שתי סדרות מחרוזות בינאריות ‪ x1 , . . . , xn , y1 , . . . , yn‬ורוצים לבדוק האם יש סדרת אינדקסים ‪ i1 , . . . , ik‬כך ש־‬
‫‪.xi1 , . . . , xik = yi1 , . . . , yik‬‬
‫‪ .4‬בהנתן טענה מתמטית‪ ,‬רוצים לבדוק האם יש לה הוכחה‪.‬‬
‫‪ .5‬בהנתן תוכנית מחשב וקלט‪ ,‬רוצים לבדוק האם התוכנית נכנסת ללולאה אינסופית בריצתה על הקלט‪.‬‬
‫במהלך הקורס נראה שהבעיה הראשונה "קלה" מבחינה חישובית‪ ,‬השנייה "קשה" אך עדיין ניתנת לפתרון‪ ,‬ושלוש הבעיות האחרונות‬
‫אינן ניתנות לפתרון באמצעות מחשב‪.‬‬
‫חלק‬
‫‪I‬‬
‫מודלים חישוביים‬
‫‪1‬‬
‫מבוא לשפות פורמליות‬
‫בפרק זה נראה מספר מושגי יסוד‪.‬‬
‫‪1.1‬‬
‫קבוצות וגדלים של קבוצות‬
‫הגדרה ‪ |A| ≤ |B| 1.1‬אם קיימת ‪ f : A → B‬חח"ע‪.‬‬
‫|‪ |A| = |B‬אם |‪ |A| ≤ |B‬וגם |‪.|B| ≤ |A‬‬
‫= |‪.|A‬‬
‫|‪ |A| < |B‬אם |‪ |A| ≤ |B‬וגם |‪6 |B‬‬
‫משפט ‪) 1.2‬קנטור־ברנשטיין( |‪ |A| = |B‬אםם קיימת ‪ f : A → B‬חח"ע ועל‪.‬‬
‫הגדרה ‪ |N| = ℵ0 1.3‬ונאמר שאם ‪ |A| = ℵ0‬אז ‪ A‬בת־מניה‪.‬‬
‫הערה ‪ 1.4‬מתקיים איפוא ש־ ‪.|Z| = |Q| = ℵ0‬‬
‫הגדרה ‪|[0, 1]| = ℵ 1.5‬‬
‫טענה ‪ℵ0 < ℵ 1.6‬‬
‫הוכחה‪ :‬קל לראות ש־ ‪ ℵ0 ≤ ℵ‬ע"י ההתאמה ‪.f : n 7→ n1‬‬
‫נשתמש בטיעון האלכסון של קנטור כדי להראות שלא קיימת פונקציה על ]‪ .f : N → [0, 1‬נראה זאת אפילו לגבי )‪ .[0, 1‬נכתוב‬
‫בשורה את ערכי ‪:f‬‬
‫‪0.a11 a12 a13 . . .‬‬
‫=‬
‫)‪f (1‬‬
‫‪0.a21 a22 a23 . . .‬‬
‫=‬
‫)‪f (2‬‬
‫‪0.a31 a32 a33 . . .‬‬
‫=‬
‫)‪f (3‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫וכעת נגדיר מספר חדש ‪ x = 0.b1 b2 b3 . . .‬עם הדרישה ‪ .bi 6= aii‬ברור שאין ל־ ‪ x‬מקור ביחס ל־ ‪ f‬ולכן היא אינה על‪.‬‬
‫‪3‬‬
‫‪1.2‬‬
‫שפות פורמליות‬
‫הגדרה ‪ 1.7‬א"ב ‪ Σ‬זו קבוצה סופית לא ריקה‪ ,‬שלאיבריה נקרא אותיות או תווים‪.‬‬
‫מילה מעל ‪ Σ‬היא המילה הריקה )ללא אותיות( המסומנת ‪ ε‬או איבר ב־ ‪ Σn‬עבור ‪ n ∈ N‬כלשהו‪.‬‬
‫שלהן‪.‬‬
‫אם ‪ u, w‬מילים מעל ‪ Σ‬אז המילה ‪) uw‬לפעמים נסמן ‪ (u · w‬היא השרשור ‪S‬‬
‫∗‪ Σ‬זהו אוסף כל המילים מעל ‪ Σ‬כולל המילה הריקה‪) .‬כלומר‪(Σ∗ = n∈N∪{0} Σn ,‬‬
‫שפה מעל ‪ Σ‬היא תת־קבוצה של ∗‪.Σ‬‬
‫דוגמאות לשפות‪:‬‬
‫‪ .1‬השפה הריקה )מעל א"ב כלשהו(‪.‬‬
‫‪ .2‬שפת כל המילים )מעל א"ב כלשהו(‪.‬‬
‫‪ .3‬שפת המילים מעל }‪ {a, b‬באורך ‪ 23‬לכל היותר‪.‬‬
‫‪ .4‬שפת המילים מעל }‪ {a, b‬שבהן שלוש אותיות זהות רצופות‪.‬‬
‫‪ .5‬שפת המספרים העשרוניים החיוביים השלמים המתחלקים ב־‪.3‬‬
‫‪ .6‬שפת המספרים הראשוניים‪.‬‬
‫‪ .7‬שפת הטענות המתמטיות שיש להן הוכחה במערכת ההיסק של פרגה מאקסיומות ‪.ZFC‬‬
‫הגדרה ‪ 1.8‬אם ∗‪ L1 , L2 ⊆ Σ‬נגדיר את הפעולות הבאות‪:‬‬
‫} ‪= {uw : w ∈ L1 , x ∈ L2‬‬
‫‪L1 · L2‬‬
‫‪L1 ∩ L2‬‬
‫‪Ln1‬‬
‫‪Σ∗ \ L1‬‬
‫[‬
‫=‬
‫‪L1 ∪ L2‬‬
‫‪L1‬‬
‫=‬
‫‪L∗1‬‬
‫}‪n∈N∪{0‬‬
‫דוגמאות לפעולות על שפות‪:‬‬
‫יהיו ‪ L1‬שפת המילים מעל }‪ {a, b‬המתחילות ב־ ‪ a‬ו־ ‪ L2‬שפת המילים מעל אותו א"ב המסתיימות ב־ ‪ .b‬אז ‪ L1 ∩ L2‬אלה מילים‬
‫המתחילות ב־ ‪ a‬ומסתיימות ב־ ‪ .b‬במקרה ספציפי זה‪ ,‬גם ‪ L1 · L2‬זה בדיוק אותו הדבר‪.‬‬
‫∗‬
‫הערה ‪ 1.9‬יהי ‪ Σ‬א"ב לא ריק‪ .‬אזי ‪ |Σ∗ | = ℵ0‬ו־ ‪.|2Σ | = ℵ‬‬
‫‪2‬‬
‫אוטומטים‬
‫האוטומטים שנציג בפרק זה הם מודלים חישוביים פשוטים יחסית שלא מתקרבים ליכולתו של מחשב‪.‬‬
‫‪2.1‬‬
‫אוטומטים סופיים דטרמיניסטיים‬
‫הגדרה ‪ 2.1‬אוטומט סופי דטרמיניסטי )‪ (DFA‬הוא חמישייה סדורה ) ‪ A = (Q, Σ, δ, q0 , F‬כאשר ‪ Q‬קבוצת מצבים סופית‪ Σ ,‬הוא‬
‫א"ב‪ q0 ∈ Q ,‬המצב ההתחלתי‪ F ⊆ Q ,‬קבוצת המצבים המקבלים‪ ,‬ו־ ‪ δ : Q × Σ → Q‬פונקציית המעברים‪.‬‬
‫דוגמאות לאוטומטים‪:‬‬
‫אוטומט שמקבל את המילים שבהן ביט שחוזר על עצמו שלוש פעמים ברציפות‪:‬‬
‫‪4‬‬
‫אוטומט שמקבל את המילים שבהן מספר האפסים מתחלק ב־‪ 3‬עם שארית ‪:1‬‬
‫הגדרה פורמלית של האוטומט הזה‪ F = {q1 } ,q0 = q0 ,Σ = {0, 1} ,Q = {q0 , q1 , q2 } :‬ונותר להגדיר את פונקציית המעברים‪.‬‬
‫נעשה זאת באמצעות טבלה‪:‬‬
‫‪δ(q, σ) σ = 0 σ = 1‬‬
‫‪q = q0‬‬
‫‪q1‬‬
‫‪q0‬‬
‫‪q = q1‬‬
‫‪q2‬‬
‫‪q1‬‬
‫‪q = q2‬‬
‫‪q0‬‬
‫‪q2‬‬
‫בדרך כלל נסתפק בציור של האוטומט‪.‬‬
‫הגדרה ‪ 2.2‬בהנתן ‪ A‬עם פונקציית מעברים ‪ ,δ‬נגדיר ‪ δ ∗ : Q × Σ∗ → Q‬באינדוקציה על האורך של ∗‪:w ∈ Σ‬‬
‫אם ‪ w = ε‬אז ‪ δ ∗ (q, w) := q‬לכל ‪;q ∈ Q‬‬
‫אם הגדרנו את ∗ ‪ δ‬עבור מילים באורך ‪ n‬ו־ ‪ w‬היא מילה באורך ‪ ,n + 1‬אז נכתוב את ‪ w = ua‬כאשר ‪ a ∈ Σ‬ונגדיר‬
‫)‪.δ ∗ (q, w) = δ ∗ (q, ua) := δ(δ ∗ (q, u), a‬‬
‫הערה ‪ 2.3‬נאמר שבריצתו על ‪ w‬האוטומט מגיע למצב ‪ q‬אם ‪ .δ ∗ (q0 , w) = q‬האוטומט מקבל את המילה אם ‪.δ ∗ (q0 , w) ∈ F‬‬
‫הגדרה ‪ 2.4‬יהי ‪ A‬אוטומט סופי דטרמיניסטי מעל ‪ .Σ‬השפה ‪ L‬המתקבלת ע"י ‪ A‬היא‬
‫} ‪L := {w ∈ Σ∗ : δ ∗ (q0 , w) ∈ F‬‬
‫שפה המתקבלת ע"י ‪ DFA‬כלשהו נקראת רגולרית‪.‬‬
‫אוסף השפות הרגולריות יסומן ‪.REG‬‬
‫‪2.2‬‬
‫אוטומטים סופיים לא דטרמיניסטיים‬
‫הגדרה ‪ 2.5‬אוטומט סופי לא דטרמיניסטי )‪ (NFA‬הוא חמישייה סדורה ) ‪ A = (Q, Σ, δ, Q0 , F‬כאשר ‪ Q‬קבוצת מצבים סופית‪ Σ ,‬א"ב‪,‬‬
‫‪ Q0 ⊆ Q‬קבוצת המצבים ההתחלתיים‪ F ⊆ Q ,‬קבוצת המצבים המקבלים‪ ,‬ו־ ‪ δ : Q × Σ → 2Q‬פונקציית המעברים‪.‬‬
‫דוגמא לאוטומט סופי לא דטרמיניסטי‪:‬‬
‫‪5‬‬
‫הגדרה ‪ 2.6‬בהנתן ‪ A‬עם פונקציית מעברים ‪ ,δ‬נגדיר ‪ δ ∗ : 2Q × Σ∗ → 2Q‬באינדוקציה על האורך של ∗‪:w ∈ Σ‬‬
‫אם ‪ w = ε‬אז ‪ δ ∗ (S, w) := S‬לכל ‪;S ⊆ Q‬‬
‫אם הגדרנו את ∗ ‪ δ‬עבור מילים באורך ‪ n‬ו־ ‪ w‬היא מילה באורך ‪ ,n + 1‬אז נכתוב את ‪ w = ua‬כאשר ‪ a ∈ Σ‬ונגדיר‬
‫)‪δ(q, a‬‬
‫[‬
‫=‪δ ∗ (S, w) = δ ∗ (S, ua) :‬‬
‫)‪q∈δ ∗ (S,u‬‬
‫הערה ‪ 2.7‬נאמר שהאוטומט מקבל את המילה ∗‪ w ∈ Σ‬אם ∅ =‪.δ ∗ (Q0 , w) ∩ F 6‬‬
‫הגדרה ‪ 2.8‬ריצה חוקית של ‪ A‬על המילה ) ‪ w = (w1 , . . . , wn‬היא סדרת מצבים ‪ q1 , . . . , qn ∈ Q‬כך ש־ ‪ q0 ∈ Q0‬וגם ≤ ‪∀1 ≤ i‬‬
‫) ‪.n, qi ∈ δ(qi−1 , wi‬‬
‫טענה ‪ 2.9‬יהי ‪ NFA A‬מעל ‪ w ∈ L(A) .Σ‬אםם קיימת ריצה חוקית של ‪ A‬על ‪ w‬שהמצב האחרון בה שייך ל־ ‪.F‬‬
‫הוכחה‪ :‬טריוויאלית‪ ,‬אינדוקציה על אורך המילה‪.‬‬
‫הערה ‪ 2.10‬בהגדרה שלנו של ‪) NFA‬כשמציירים אותו על דף( אנו מרשים מעברי ‪ .ε‬ניתן להשתכנע )ר' תרגול ‪ (2‬שאין צורך אמיתי‬
‫במעברים אלה‪ .‬למשל‪ ,‬אם } ‪ δ(q, a) = {q 0‬ויש מעבר ‪ ε‬בין ‪ q 0‬ל־ ‪ ,q 00‬אנו יכולים להרחיב את ‪ δ‬כך ש־ } ‪ .δ(q, a) = {q 0 , q 00‬כלומר‪,‬‬
‫השוני המרכזי של ‪ NFA‬מ־ ‪ DFA‬אינו מעברי ‪ ,ε‬אלא היכולת "להתפצל"‪.‬‬
‫משפט ‪ 2.11‬יהי ) ‪ A = (QA , Σ, δA , Q0 , FA‬אוטומט סופי לא דטרמיניסטי‪ .‬אזי קיים אוטומט סופי דטרמיניסטי ) ‪B = (QB , Σ, δB , q0 , FB‬‬
‫המקיים )‪ .L(B) = L(A‬יתר על כן‪ ,‬קיים ‪ B‬כזה שעבורו | ‪ ,|QB | ≤ 2|QA‬והחסם הדוק‪.‬‬
‫הוכחה‪ :‬נגדיר את ‪ B‬כדלהלן‪ .q0 = Q0 ,QB = 2QA .‬את פונקציית המעברים נגדיר כך‪:‬‬
‫‪→ QB‬‬
‫∗‬
‫‪δA‬‬
‫)‪(S, a‬‬
‫‪δB : QB × Σ‬‬
‫)‪δB (S, a‬‬
‫=‬
‫∗‬
‫∗‬
‫‪ δB‬ומכאן מתקבל הדרוש‪:‬‬
‫‪(S, w) = δA‬‬
‫ולבסוף }∅ =‪ .FB = {S ∈ 2QA : S ∩ FA 6‬כעת יש להראות באינדוקציה ש־ )‪(S, w‬‬
‫∗‬
‫∗‬
‫‪w ∈ L(A) ⇐⇒ δA‬‬
‫‪(Q0 , w) ∩ FA 6= ∅ ⇐⇒ δB‬‬
‫)‪(q0 , w) ∈ FB ⇐⇒ w ∈ L(B‬‬
‫דוגמה לדטרמיניזציה‪:‬‬
‫ר' תרגיל ‪ 2‬שאלה ‪3‬ב'‪.‬‬
‫טענה ‪ 2.12‬החסם במשפט הדוק‪ ,‬כלומר יש משפחה אינסופית של שפות שה־ ‪ DFA‬המינימלי שמזהה אותן הוא בעל מספר אקספוננציאלי‬
‫של מצבים לעומת ה־ ‪ NFA‬השקול‪.‬‬
‫‪6‬‬
‫הוכחה‪ :‬המשפחה היא‬
‫}‪w, u ∈ {a, b}∗ , |u| = k − 1‬‬
‫‪Lk = {wau :‬‬
‫ה־ ‪ NFA‬שמזהה את ‪ Lk‬נראה כך‪:‬‬
‫בסה"כ באוטומט הזה יש ‪ k + 1‬מצבים‪ .‬לעומת זאת‪ ,‬ב־ ‪ DFA‬הקטן ביותר שמזהה את ‪ Lk‬יש לפחות ‪ 2k‬מצבים‪ .‬אינטואיטיבית‪,‬‬
‫האוטומט צריך לזכור בכל מצב האם היה ‪ a‬עד אותו שלב או לא )לפחות בחלון של ‪ k‬אותיות אחורה צריך לזכור את כל האותיות‬
‫שנקראו(‪ .‬מספר האפשרויות האלה הוא ‪.2k‬‬
‫פורמלית‪ :‬נתבונן בכל המילים ‪ Σk‬שמספרן ‪ 2k‬במקרה שלנו‪ ,‬ונניח בשלילה שיש ‪ Ak DFA‬שבו ‪ .|Q| < 2k‬אז כעת יש ‪y 6= x ∈ Σk‬‬
‫כך ש־ )‪ δ ∗ (q0 , x) = δ ∗ (q0 , y‬משיקולי שובך היונים‪.‬‬
‫מכך ש־ ‪ x 6= y‬קיים ‪ i‬כך ש־ ‪ .xi 6= yi‬בה"כ ‪ xi = a‬ו־ ‪ .yi = b‬נוסיף לשתי המילים את הסיפא ‪ .z = bk−1‬מתקיים ש־‬
‫∈ ‪ .yz‬זו הסתירה‪.‬‬
‫)‪ δ ∗ (q0 , xz) = δ ∗ (q0 , yz‬אבל ברור ש־ ‪ xz ∈ L‬ו־ ‪/ L‬‬
‫הערה ‪ 2.13‬לכאורה‪ ,‬בדרך כלל אי־דטרמיניסטיות עוזרת לנו‪ .‬אבל יש מקרים )גם פשוטים( שבהם לא ניתן לצמצם אוטומט‬
‫דטרמיניסטי ע"י מעבר לאוטומט לא דטרמיניסטי שקול‪ .‬למשל‪ ,‬האוטומט הדטרמיניסטי שמקבל את } ‪ L = {ak‬הוא בעל ‪k + 1‬‬
‫מצבים‪ ,‬וניתן להוכיח )באמצעות ניפוח( שגם באוטומט לא דטרמיניסטי שמקבל את ‪ L‬חייבים להיות לפחות ‪ k + 1‬מצבים‪.‬‬
‫‪2.3‬‬
‫פעולות על שפות רגולריות‬
‫∗‬
‫בהנתן ‪ L, M‬שפות רגולריות מעל א"ב ‪ ,Σ‬נרצה לבדוק האם ‪ L ∩ M, L ∪ M, L · M, L, L‬הן רגולריות‪.‬‬
‫טענה ‪L ∈ REG =⇒ L ∈ REG 2.14‬‬
‫הוכחה‪ :‬יש אוטומט ) ‪ A = (Q, Σ, δ, q0 , F‬המקבל את ‪ .L‬האוטומט ) ‪ A0 = (Q, Σ, δ, q0 , Q \ F‬זהו האוטומט המבוקש המקבל את‬
‫‪ L‬ולכן היא רגולרית‪) .‬כמובן‪ ,‬הוכחה זו לא שלמה‪(.‬‬
‫טענה ‪L, M ∈ REG =⇒ L ∩ M ∈ REG 2.15‬‬
‫הוכחה‪ :‬יהיו ) ‪ A = (Q, Σ, δA , q0 , FA‬ו־ ) ‪ B = (R, Σ, δB , r0 , FB‬אוטומטים המזהים את ‪ L, M‬בהתאמה‪.‬‬
‫) ‪) C = (Q × R, Σ, δC , (q0 , r0 ), FA × FB‬המכונה גם "אוטומט המכפלה"( עם‬
‫אזי האוטומט‬
‫))‪δC ((q, r), a) = (δA (q, a), δB (r, a‬‬
‫מקבל בדיוק את ‪ .L ∩ M‬תחילה נראה באינדוקציה ש־‬
‫∗‬
‫∗‬
‫∗‬
‫‪δC‬‬
‫‪((q0 , r0 ), w) = (δA‬‬
‫‪(q0 , w), δB‬‬
‫))‪(r0 , w‬‬
‫∗‬
‫∗‬
‫∗‬
‫‪ δC‬ולהיפך‪.‬‬
‫‪ δB‬ולכן ‪((q0 , r0 ), w) ∈ FA × FB‬‬
‫‪ δA‬ו־ ‪(r0 , w) ∈ FB‬‬
‫)זה טריוויאלי(‪ .‬כעת‪ ,‬אם ‪ w ∈ L ∩ M‬אז ‪(q0 , w) ∈ FA‬‬
‫טענה ‪L, M ∈ REG =⇒ L ∪ M ∈ REG 2.16‬‬
‫הוכחה‪ :‬כמו הטענה הקודמת‪ ,‬אלא שקבוצת המצבים המקבלים של ‪ C‬תהיה ) ‪.(FA × R) ∪ (Q × FB‬‬
‫טענה ‪L, M ∈ REG =⇒ L · M ∈ REG 2.17‬‬
‫‪7‬‬
‫הוכחה‪ :‬יהיו ) ‪ A = (Q, Σ, δA , q0 , FA‬ו־ ) ‪ B = (R, Σ, δB , r0 , FB‬אוטומטים המזהים את ‪ L, M‬בהתאמה‪ .‬נבנה ‪C = NFA‬‬
‫) ‪ (Q ∪ R, Σ, δ 0 , q0 , FB‬כאשר ‪ δ 0‬מתנהגת כמו ‪ δA‬ו־ ‪ ,δB‬אבל בנוסף מאפשרת מעבר ‪ ε‬מכל ‪ q ∈ FA‬ל־ ‪.r0‬‬
‫ברור מהבנייה של האוטומט שאם מילה היא ב־ ‪ L · M‬אז ישנה ריצה של האוטומט שמקבלת אותה‪ ,‬ולהיפך ‪ -‬אם האוטומט‬
‫מקבל את המילה‪ ,‬אפשר לשבור אותה לשני חלקים בדיוק סביב מעבר ה־ ‪ ε‬שבוצע עליה )שהרי אין שום חיבור אחר בין ‪ Q‬ל־ ‪.(R‬‬
‫טענה ‪L ∈ REG =⇒ L∗ ∈ REG 2.18‬‬
‫הוכחה‪ :‬ניקח ‪ NFA‬שמקבל את ‪ L‬ונבנה ממנו ‪ NFA‬שנראה אותו הדבר‪ ,‬אבל ‪ δ‬מחברת במעבר־‪ ε‬כל מצב מקבל שלו לכל מצב התחלתי‬
‫שלו‪ .‬כדי לקבל גם את ‪ ε‬נוסיף מצב מקבל והתחלתי ללא כל מעברים ממנו‪.‬‬
‫לדוגמא‪ ,‬עבור האוטומט‬
‫האוטומט החדש הוא‬
‫‪2.4‬‬
‫למת הניפוח לשפות רגולריות‬
‫נרצה להראות שקיימות גם שפות לא רגולריות‪ .‬הדבר ברור משיקולי ספירה )קבוצת האוטומטים המגדירים שפות רגולריות היא‬
‫בת־מניה‪ ,‬בעוד שקבוצת השפות אינה בת־מניה(‪ ,‬אבל אנו מחפשים דרך לטעון על שפה ספציפית שהיא לא רגולרית‪.‬‬
‫∈ ‪.L‬‬
‫טענה ‪ 2.19‬יהי }‪ Σ = {0, 1‬ו־ }‪ .L = {0n 1n : n ∈ N‬אזי ‪/ REG‬‬
‫הוכחה‪ :‬אינטואיטיבית זה ברור ‪ -‬האוטומט צריך "לזכור" כמה אפסים וכמה אחדים היו עד עכשיו‪ ,‬וזה דורש אינסוף מצבים‪ .‬פורמלית‪:‬‬
‫נניח בשלילה ש־ ‪ L ∈ REG‬והאוטומט ) ‪ A = (Q, Σ, δ, q0 , F‬מקבל אותה‪ ,‬ויהי |‪ .k = |Q‬נתבונן על ריצת האוטומט על המילה‬
‫‪ .0k+1 1k+1 ∈ L‬האוטומט עובר בין ‪ k + 1‬מצבים במהלך הטיפול באפסים‪ ,‬ואז עוד ‪ k + 1‬מצבים במהלך הטיפול באחדים‪.‬‬
‫ב־ ‪ k + 1‬המצבים הראשונים יש מצב אחד שחוזרים עליו לפחות פעמיים )שובך היונים(‪ ,‬ונסמן אותם ‪ qi = qj‬כאשר ‪.i < j‬‬
‫כלומר‪ ,‬אחרי ‪ 0i‬הגענו למצב ‪ qi‬ולאחר עוד ‪ 0j−i‬שוב הגענו למצב ‪ .qi‬כלומר‪ ,‬הריצה שלנו על המילה ‪ 0i 0j−i 0k−j 1k‬צריכה להיות‬
‫זהה לריצה על ‪ ,0i 0j−i 0j−i 0k−j 1k‬אז אנחנו אמורים לקבל גם אותה ‪ -‬אבל המילה הזאת אינה בשפה בכלל!‬
‫זוהי סתירה‪ ,‬ולכן נסיק שהשפה אינה רגולרית כנדרש‪.‬‬
‫משפט ‪) 2.20‬למת הניפוח‪ (Pumping Lemma ,‬אם ‪ L‬רגולרית אז‬
‫‪∀i ∈ N ∪ {0} xy i z ∈ L‬‬
‫‪w = xyz, |y| > 0, |xy| ≤ p‬‬
‫∗‪∃p > 0 ∀w ∈ L, |w| > p ∃x, y, z ∈ Σ‬‬
‫הוכחה‪ :‬ההוכחה דומה למה שעשינו קודם‪ ,‬כאשר ‪ p‬ייבחר להיות ‪ |Q| + 1‬עבור האוטומט‪.‬‬
‫דוגמא לשימוש בלמת הניפוח‪:‬‬
‫‪8‬‬
‫מעל }‪ ,Σ = {a, b‬נראה ש־ } ∗‪ L = {uu : u ∈ Σ‬אינה רגולרית‪ .‬נניח בשלילה שהיא רגולרית‪ ,‬ואז קיים ‪ p > 0‬מהלמה‪ .‬המילה‬
‫‪ ap+1 bap+1 b ∈ L‬מקיימת את תנאי הלמה‪ ,‬ולכן יש לה פירוק ‪ xyz‬כך ש־ ‪ xy‬מורכב מ־ ‪a‬־ים בלבד‪ ,‬וגם ‪.|y| > 0‬‬
‫נסמן ‪ .z = ap+1−r−m bap+1 b ,y = ar ,x = am‬כעת אנחנו יכולים לייצר מילים שאינן בשפה‪ ,‬למשל המילה ‪ xyyz‬לפי הלמה‬
‫צריכה להיות בשפה‪ ,‬אולם ‪ xyyz = ap+r+1 bap+1 b‬וכמובן אינה בשפה‪ .‬זוהי סתירה ולכן ‪ L‬אינה רגולרית‪.‬‬
‫‪2.5‬‬
‫משפט ‪Nerode‬־‪Myhill‬‬
‫∗‬
‫למת הניפוח מהווה תנאי הכרחי לכך ששפה תהיה רגולרית‪ ,‬אך היא אינה תנאי מספיק‪ .‬למשל‪ ,‬השפה ‪L = {w ∈ {a, b} :‬‬
‫= )‪ #a (w‬אינה רגולרית‪ ,‬אך היא מקיימת את למת הניפוח‪ .‬אנו רוצים תנאי הכרחי ומספיק לרגולריות‪.‬‬
‫})‪6 #b (w‬‬
‫∈ ‪.uv, wv‬‬
‫הגדרה ‪ 2.21‬תהי ∗‪ .L ⊆ Σ‬נאמר ש־ ∗‪ u, w ∈ Σ‬שקולות ביחס ל־ ‪ L‬אם לכל ∗‪ v ∈ Σ‬מתקיים ש־ ‪ uv, wv ∈ L‬או ‪/ L‬‬
‫∈ ‪(.v, w‬‬
‫)בפרט עבור ‪ v = ε‬ברור ש־ ‪ v, w ∈ L‬או ‪/ L‬‬
‫אם יש ∗‪ v ∈ Σ‬שאינה מקיימת את התנאי הנ"ל‪ ,‬נאמר שהיא מפרידה בין ‪.u, w‬‬
‫אם ‪ u, w‬שקולות ביחס ל־ ‪ L‬נסמן ‪.u ∼L w‬‬
‫הערה ‪ 2.22‬היחס ‪ ∼L‬הוא יחס שקילות על מילים ב־ ∗‪.Σ‬‬
‫דוגמאות ליחס השקילות‪:‬‬
‫תהי })‪ .L1 = {w : #a (w) ≡ 1(mod3‬מהן מחלקות השקילות ביחס ל־ ‪ ?L1‬יש שלוש מחלקות שקילות ‪[a], [aa], [aaa] = -‬‬
‫]‪ .[ε‬ראינו כבר ‪ DFA‬מתאים‪ ,‬ולמעשה המצבים באוטומט "זוכרים" את מחלקת השקילות של המילה‪.‬‬
‫תהי })‪ .L2 = {w : #a (w) > #b (w‬כאן כל ] ‪ [ak‬עם ‪ k ≥ 0‬מגדירה מחלקת שקילות נפרדת‪ .‬למשל ‪ a 6∼L aa‬שכן המילה ‪b‬‬
‫מפרידה ביניהן‪ .‬גם כל ] ‪ [bk‬עם ‪ k ≥ 0‬מהווה מחלקת שקילות‪ .‬למעשה‪ ,‬יש מחלקת שקילות לכל מספר ‪ z ∈ Z‬המכילה את המילים‬
‫‪ w‬כך ש־ ‪.#a (w) − #b (w) = z‬‬
‫טענה ‪ 2.23‬אם ∗‪ L ⊆ Σ‬ו־ ‪ DFA A‬המקבל את ‪ ,L‬וכן המילים ∗‪ u, w ∈ Σ‬מקיימות )‪ δ ∗ (q0 , u) = δ ∗ (q0 , w‬אז ‪.u ∼L w‬‬
‫הוכחה‪ :‬לכל ∗‪ v ∈ Σ‬נקבל )‪ ,δ ∗ (q0 , uv) = δ ∗ (q0 , wv‬ולכן ‪ uv ∈ L‬אםם ‪ ,wv ∈ L‬כלומר ‪.u ∼L w‬‬
‫משפט ‪Nerode) 2.24‬־‪ L ∈ REG (Myhill‬אםם מספר מחלקות השקילות של היחס ‪ ∼L‬הוא סופי‪.‬‬
‫הוכחה‪ (⇐) :‬תהי ‪ DFA A ,L ∈ REG‬המזהה אותה‪ ,‬ו־ ‪ Q‬קבוצת המצבים שלו‪ .‬נניח בה"כ שלכל ‪ q ∈ Q‬יש מילה שנסמנה ‪ wq‬כך‬
‫ש־ ‪ .δ ∗ (q0 , wq ) = q‬זה בה"כ כי מצבים שאי אפשר להגיע אליהם אפשר לסלק מהאוטומט ללא שינוי השפה שלו‪.‬‬
‫נסתכל על קבוצת מחלקות השקילות }‪ .{[wq ] : q ∈ Q‬זו קבוצה סופית והיא מכילה את כל מחלקות השקילות של ‪ ,∼L‬שכן לכל‬
‫∗‪ w ∈ Σ‬אם ‪ δ ∗ (q0 , w) = q‬אז ] ‪ w ∈ [wq‬לפי הטענה הקודמת‪ .‬לכן מספר מחלקות השקילות הוא סופי‪.‬‬
‫)⇒( תהי ∗‪ L ⊆ Σ‬שמספר מחלקות השקילות שלה לפי ‪ ∼L‬הוא ‪ .n‬אז נראה ש־ ‪ L‬רגולרית‪ ,‬נציג ‪ DFA‬בעל ‪ n‬מצבים בדיוק‬
‫המקבל את ‪ ,L‬ונראה שאין ‪ DFA‬כזה בעל פחות מ־ ‪ n‬מצבים‪.‬‬
‫אם יש ‪ DFA‬עם פחות מ־ ‪ n‬מצבים שמקבל את ‪ ,L‬אז יש פחות מ־ ‪ n‬מחלקות שקילות לפי הטענה הקודמת‪ ,‬וזו סתירה‪ .‬כעת נבנה‬
‫אוטומט עם המצבים ‪ q0 , q1 , . . . , qn−1‬המתאימים למחלקות השקילות של ‪ ,∼L‬כאשר ]‪ .q0 = [ε‬נגדיר את = )‪δ(q, a) = δ([w], a‬‬
‫]‪ .[wa‬נשים לב שההגדרה לא תלויה בבחירת ‪ w‬כך ש־ ‪ ,[w] = q‬שהרי אם גם ‪ [w0 ] = q‬אז ‪ .w0 a ∼L wa‬אוסף המצבים המקבלים‬
‫יהיה }‪ ; {δ ∗ (q0 , w) : w ∈ L‬אפשר להסתכל על זה כמחלקות השקילות המכילות מילים בשפה )שהרי אם מחלקת שקילות מכילה‬
‫מילה אחת בשפה‪ ,‬כל המילים בה הן בשפה(‪.‬‬
‫נותר לשים לב ש־ ]‪ δ ∗ (q0 , w) = [w‬באינדוקציה קלה על אורך המילה‪.‬‬
‫כעת ‪ w ∈ L‬אםם ]‪ [w‬מכילה מילים ב־ ‪ L‬אםם ‪ [w] ∈ F‬אםם ‪ ,δ ∗ (q0 , w) ∈ F‬כלומר אםם כשמריצים את ‪ A‬על ‪ w‬מגיעים‬
‫למצב מקבל‪ .‬לכן ‪ L(A) = L‬כנדרש‪.‬‬
‫שימושים במשפט ‪Nerode‬־‪:Myhill‬‬
‫∈ ‪ L = {ak : k‬מעל }‪ .Σ = {a‬לבדיקת רגולריות נספור כמה מחלקות שקילות יש ליחס‬
‫‪ .1‬נתבונן בשפה }}‪/ {20 , 21 , 22 , . . .‬‬
‫‪n‬‬
‫‪t‬‬
‫‪n‬‬
‫∈ ‪ .yz‬לכן‬
‫‪ .∼L‬נתבונן במילים ‪ x = a2‬ו־ ‪ y = a2‬עבור ‪ .n < t‬יש להן סיפא מפרידה‪ ,‬למשל ‪ z = a2‬ואז ‪ xz ∈ L‬אבל ‪/ L‬‬
‫]‪ .[x] 6= [y‬זה נכון לכל ‪ n < t‬ולכן יש אינסוף מחלקות שקילות‪ ,‬כלומר ‪ L‬אינה רגולרית‪.‬‬
‫‪ .2‬נתבונן בשפה }‪ .L = {w ∈ {a, b}∗ : w ends with a‬נסתכל על מילים ‪ x, y‬ו־ ‪ z‬שעשויה להפריד ביניהן‪ .‬אם ‪ z‬מסתיימת‬
‫∈ ‪ .xz, yz‬כמו כן‪ ,‬יש שתי מחלקות שקילות שמופרדות ע"י ‪ - ε‬המילים בשפה והמילים שאינן בשפה‪.‬‬
‫ב־ ‪ a‬אז ‪ xz, yz ∈ L‬ואחרת ‪/ L‬‬
‫כל שאר ה־ ‪z‬־ים לא יכולים להפריד בין מילים‪ ,‬ולכן ‪ L‬רגולרית‪ ,‬וכמובן האוטומט המזהה אותה הוא‪:‬‬
‫‪9‬‬
‫באוטומט זה המצב המקבל מתאים למחלקת השקילות ‪ L‬והמצב ההתחלתי מתאים למחלקת השקילות ‪.L‬‬
‫‪ .3‬מינימיזציה של ‪ :DFA‬נתאר אלגוריתם המקבל ‪ A DFA‬ומייצר ממנו ‪ DFA‬שקול עם מספר מינימלי של מצבים‪ .‬הפלט צריך‬
‫להיות מחלקות השקילות ביחס ל־ )‪ ,L(A‬שמשרות את האוטומט שראינו בהוכחת משפט ‪Nerode‬־‪.Myhill‬‬
‫נגדיר את היחס החדש ‪ ∼k‬כך ש־ ∗‪ x, y ∈ Σ‬מקיימות ‪ x 6∼k y‬אם קיימת ∗‪ z ∈ Σ‬עם ‪ |z| ≤ k‬המפרידה בין המילים‪ .‬היחס‬
‫‪ ,∼0‬למשל‪ ,‬מפריד בין מילים שמלכתחילה אחת מהן שייכת לשפה והשניה לא‪ ,‬כי המפריד היחיד זו המילה הריקה‪ .‬עבור ‪ ∼0‬מחלקות‬
‫השקילות הן }‪.{L, L‬‬
‫עבור היחסים ‪ ∼1 , . . . , ∼k‬יכולות להתווסף מחלקות שקילות‪ .‬האלגוריתם יראה שהיחס ∼ המקורי מתקבל בתור ‪ ∼n‬סופי‬
‫כלשהו‪.‬‬
‫• נתחיל ב־ }‪ ∼0 ← {L, L‬ו־ ‪.i ← 0‬‬
‫• לכל ‪p, q ∈ Q‬‬
‫– נאמר ש־ ‪ p ∼i+1 q‬אלא אם כן‪:‬‬
‫– ‪ ;p 6∼i q‬או‬
‫– קיים ‪ σ ∈ Σ‬כך ש־ )‪.δ(q, σ) 6= δ(p, σ‬‬
‫• ‪ i ← i + 1‬וחוזרים על התהליך עד שלא מתקבלים יותר שינויים במהלך הלולאה הפנימית‪.‬‬
‫אינטואיטיבית‪ ,‬מספר מחלקות השקילות הוא סופי וברור שהתהליך הזה עוצר בשלב כלשהו‪ ,‬ומתקבלת הקבוצה המינימלית של‬
‫מחלקות שקילות‪ .‬מהן אפשר לבנות אוטומט מצומצם לפי המצבים הנמצאים באותה מחלקת שקילות‪.‬‬
‫‪2.6‬‬
‫ביטויים רגולריים‬
‫הגדרה ‪ 2.25‬ביטוי רגולרי מעל א"ב ‪ Σ‬הוא מהצורה‪:‬‬
‫‪ - ”∅” .1‬עם השפה ∅ = ∅‪;L‬‬
‫‪ - ”ε” .2‬עם השפה }‪;Lε = {ε‬‬
‫‪ .3‬עבור ‪ ,a ∈ Σ‬הביטוי ”‪ - ”a‬עם השפה }‪;La = {a‬‬
‫‪ .4‬אם ‪ R1 , R2‬ביטויים רגולריים מעל ‪ ,Σ‬אז ”) ‪ ”(R1 ) ∪ (R2‬הוא ביטוי רגולרי ‪ -‬עם השפה ‪;L(R1 )∪(R2 ) = LR1 ∪ LR2‬‬
‫‪ .5‬אם ‪ R1 , R2‬ביטויים רגולריים מעל ‪ ,Σ‬אז ”) ‪ ”(R1 ) · (R2‬הוא ביטוי רגולרי ‪ -‬עם השפה ‪;L(R1 )·(R2 ) = LR1 · LR2‬‬
‫‪ .6‬אם ‪ R‬ביטוי רגולרי מעל ‪ ,Σ‬אז ” ∗)‪ ”(R‬ביטוי רגולרי ‪ -‬עם השפה ∗) ‪;L(R)∗ = (LR‬‬
‫‪ .7‬אם ‪ R‬ביטוי רגולרי מעל ‪ ,Σ‬אז ” ‪ ”(R)+‬מוגדר להיות כינוי לביטוי הרגולרי ” ∗)‪.”R(R‬‬
‫דוגמאות לביטויים רגולריים‪:‬‬
‫• שפת המילים המכילות ‪ aba‬ומסתיימות ב־ ‪ b‬מתוארת ע"י ‪R = (a ∪ b)∗ aba(a ∪ b)∗ b‬‬
‫• שפת כל המילים מעל }‪ {a, b‬מתוארת ע"י ∗)‪R = (a ∪ b‬‬
‫• שפת המילים שאינן מכילות שני אפסים רצופים‪ ,‬ואם אינן ריקות מתחילות באפס ומסתיימות באחד מתוארת ע"י = ‪R‬‬
‫∗) ‪((0(1)+‬‬
‫• שפת המילים הלא ריקות באורך גדול מ־‪ 1‬המתחילות ומסתיימות באותה אות מתוארת ע"י הביטוי ∪ ‪R = (a(a ∪ b)∗ a) ∪ (b(a‬‬
‫)‪b)∗ b‬‬
‫• נשים לב גם ש־ )”‪L(”∅∗ ”) = L(”ε‬‬
‫משפט ‪ 2.26‬יהי ‪ R‬ביטוי רגולרי מעל ‪ .Σ‬אזי ‪.LR ∈ REG‬‬
‫הוכחה‪ :‬באינדוקציה שלמה על האורך של ‪.R‬‬
‫עבור ‪ |R| = 1‬הביטויים הרגולריים ”‪ ”∅”, ”ε”, ”a‬משרים כמובן שפות רגולריות‪.‬‬
‫עבור ‪ |R| = n‬כאשר הוכחנו כבר עבור > ‪ ,n‬מתבוננים בשלושת המקרים‪:‬‬
‫‪ R = (R1 ) ∪ (R2 ) .1‬נובע מכך שאיחוד של שפות רגולריות הוא רגולרי‪ ,‬ולגבי ‪ R1 , R2‬משתמשים בהנחת האינדוקציה‪.‬‬
‫‪ R = (R1 ) · (R2 ) .2‬נובע מכך ששרשור של שפות רגולריות הוא רגולרי‪.‬‬
‫‪ R = (R1 )∗ .3‬נובע מכך שהסגור של קלייני של שפה רגולרית הוא שפה רגולרית‪.‬‬
‫בזאת השלמנו את האינדוקציה‪.‬‬
‫‪10‬‬
‫הערה ‪ 2.27‬מהמשפט מקבלים גם תהליך רקורסיבי לבניית ‪ NFA‬המזהה את הביטוי כולו מה־‪NFA‬־ים המזהים את חלקי הביטוי השונים‪.‬‬
‫משפט ‪ 2.28‬לכל שפה רגולרית ‪ L‬קיים ביטוי רגולרי ‪ R‬כך ש־ ‪.L = LR‬‬
‫הוכחה‪) :‬לא פורמלית( נתבונן ב־‪ DFA‬שמזהה את ‪ ,L‬ונרצה "להיפטר" מכל המצבים פרט למצב ההתחלתי והמצב המקבל‪ .‬כדי להיפטר‬
‫ממצב ביניים מסוים‪ ,‬נכתוב על הקשת החדשה שמדלגת על המצב את הביטוי הרגולרי המתאים‪ .‬ניתן להראות פורמלית שתהליך זה‬
‫מביא לביטוי רגולרי שנשאר על הקשת האחת מהמצב ההתחלתי למצב המקבל‪.‬‬
‫הערה ‪ 2.29‬המעבר בין שני הייצוגים של שפה ‪ -‬בתור אוטומט ובתור ביטוי רגולרי ‪ -‬עלול לקחת זמן אקספוננציאלי‪) .‬לא הוכחנו‬
‫זאת‪(.‬‬
‫‪2.7‬‬
‫בעיות הכרעה לגבי שפות רגולריות‬
‫נשאל מספר שאלות לגבי שפות רגולריות‪ ,‬ובהמשך נחזור עליהן גם לגבי מודלים מורכבים יותר‪.‬‬
‫‪ .1‬ריקנות‪ :‬בתרגיל ‪ 2‬ראינו כיצד אפשר לבדוק האם השפה של ‪ DFA‬מסוים היא ריקה ‪ -‬מחפשים מהלך בגרף מהמצב ההתחלתי‬
‫אל המצב המקבל‪.‬‬
‫‪ .2‬הכלה‪ :‬בהינתן ‪DFA‬־ים ‪ A, B‬כיצד נבדוק האם )‪?L(A) ⊆ L(B‬‬
‫השאלה שקולה לבדיקה ∅ = )‪ .L(A) ∩ L(B‬אנו יודעים למצוא את המשלים של אוטומט דטרמיניסטי באופן יעיל‪ ,‬ואת החיתוך‬
‫באמצעות אוטומט מכפלה‪ ,‬והצטמצמנו בחזרה לבדיקת ריקנות‪.‬‬
‫‪ .3‬אוניברסאליות‪ :‬באופן דומה אפשר לבדוק האם ∗‪ L(A) = Σ‬ע"י בדיקה האם ∅ = )‪.L(A‬‬
‫‪ .4‬הבעיות הנ"ל לגבי ‪ NFA‬אינן כה טריוויאליות‪ .‬כפי שראינו בתרגיל ‪ ,11‬ניתן לבנות ‪ NFA‬ששפתו היא ההשמות הלא־מספקות‬
‫של נוסחת ‪ .3CN F‬כלומר‪ ,‬בדיקה האם ∗‪ L(A) = Σ‬עבור ‪ A NFA‬מאפשרת לבדוק האם נוסחת ‪ 3CN F‬ניתנת לסיפוק‪ ,‬בעוד ש־‬
‫‪1‬‬
‫‪.3SAT ∈ N P C‬‬
‫לעומת זאת‪ ,‬אנו יודעים לבדוק ריקנות של ‪ NFA‬בזמן פולינומי )ואף במקום לוגריתמי(‪ ,‬באופן דומה ל־ ‪) DFA‬חיפוש בגרף(‪ .‬ניתן‬
‫להסיק שאנו לא יודעים למצוא משלים של ‪ NFA‬בזמן שאינו אקספוננציאלי‪.‬‬
‫‪3‬‬
‫שפות חסרות הקשר‬
‫שפות חסרות הקשר משמשות למשל לתיאור של שפות תכנות‪ ,‬והן חזקות יותר מהשפות הרגולריות‪ .‬למשל‪ ,‬כבר השפה הפשוטה של‬
‫הסוגריים המאוזנים אינה רגולרית )לפי למת הניפוח(‪ ,‬אבל ניתנת לתיאור ע"י דקדוק חסר הקשר‪.‬‬
‫‪3.1‬‬
‫דקדוקים חסרי הקשר‬
‫הגדרה ‪ 3.1‬דקדוק חסר הקשר )‪ (CFG‬הוא רביעייה )‪ G = (V, Σ, R, S‬כאשר ‪ V‬קבוצה סופית של משתנים‪ Σ ,‬קבוצה סופית של‬
‫טרמינלים ומתקיים ∅ = ‪ R ,V ∩ Σ‬קבוצה סופית של כללי גזירה‪ ,‬ו־ ‪ S‬משתנה ההתחלה‪.‬‬
‫כלל גזירה הוא זוג סדור המכיל משתנה יחיד מצד שמאל שלו ומצד ימין הוא מכיל מחרוזת מעל הא"ב }‪.Σ ∪ V ∪ {ε‬‬
‫דוגמאות לדקדוקים חסרי הקשר‪:‬‬
‫‪ .1‬שפת הסוגריים המאוזנים‪:‬‬
‫‪→A‬‬
‫)‪(A‬‬
‫→ ‪A‬‬
‫‪AA‬‬
‫→ ‪A‬‬
‫‪ε‬‬
‫→ ‪A‬‬
‫‪ .2‬השפה }‪:L = {an bm : m ≥ n‬‬
‫‪→A‬‬
‫‪→ aAb‬‬
‫‪A‬‬
‫‪→ B‬‬
‫‪A‬‬
‫‪→ Bb‬‬
‫‪B‬‬
‫‪→ ε‬‬
‫‪B‬‬
‫‪1‬ולמעשה‪ ,‬במופעים קודמים של הקורס אף הופיעה הוכחה שבדיקת אוניברסאליות של ‪ NFA‬היא שלמה ב־ ‪ .PSPACE‬לכן לא ניתן לצפות לפתרון יעיל של הבעיה‬
‫אלא אם כן ‪.P = PSPACE‬‬
‫‪11‬‬
‫‪ .3‬שפת כל המילים מהצורה ‪ ai bj ck‬כאשר ‪ i, j ≥ 0‬ו־ ‪:k ≥ 1‬‬
‫‪→S‬‬
‫‪ABC‬‬
‫→‬
‫‪S‬‬
‫‪aA‬‬
‫→ ‪A‬‬
‫‪ε‬‬
‫→ ‪A‬‬
‫‪bB‬‬
‫→‬
‫‪B‬‬
‫‪ε‬‬
‫→‬
‫‪B‬‬
‫‪cC‬‬
‫‪c‬‬
‫→‬
‫→‬
‫‪C‬‬
‫‪C‬‬
‫הגדרה ‪ 3.2‬השפה המתאימה לדקדוק חסר הקשר ‪ G‬תסומן )‪ L(G‬ומכילה בדיוק את המילים מעל ‪ Σ‬המתקבלות כאשר מתחילים‬
‫במחרוזת ‪ S‬ובכל שלב מפעילים כלל גזירה ע"י החלפת המשתנה שבו במחרוזת שבצד ימין שלו‪ ,‬עד שנשארים עם טרמינלים בלבד‪.‬‬
‫שפה המתאימה לדקדוק חסר הקשר תיקרא שפה חסרת הקשר )‪ .(CFL‬קבוצת השפות חסרות ההקשר תסומן ‪.CF L‬‬
‫הערה ‪ 3.3‬ניתן לדבר גם על עץ הגזירה של מילה מסוימת בשפה‪ ,‬שבו טרמינלים ומשתנים‪:‬‬
‫משפט ‪REG ⊂ CF L 3.4‬‬
‫הוכחה‪ :‬תהי ‪ L ∈ REG‬ו־ ‪ DFA A‬שמקבל אותה‪ .A = (Q, Σ, δ, q0 , F ) ,‬נבנה ‪ G CFG‬עם אותה השפה‪ .‬נסמן ) ‪G = (Q, Σ, R, q0‬‬
‫ונגדיר ב־ ‪ R‬את כללי הגזירה‪:‬‬
‫לכל ‪ a ∈ Σ, q1 , q2 ∈ Q‬שעבורם ‪ δ(q1 , a) = q2‬יהיה כלל גזירה מהצורה ‪ .q1 → aq2‬בנוסף יהיה כלל ‪ q → ε‬לכל ‪.q ∈ F‬‬
‫נשאר להראות ש־ )‪ .L(A) = L(G‬הטענה העיקרית היא שאחרי ‪ t‬צעדי גזירה נקבל מחרוזת מהצורה ‪ wq‬כאשר )‪,q = δ ∗ (q0 , w‬‬
‫או מחרוזת מהצורה ‪ w‬כאשר )‪ .w ∈ L(A‬את זה אפשר להראות באינדוקציה על מספר צעדי הגזירה‪ ,‬ולכן )‪.L(G) ⊆ L(A‬‬
‫להיפך‪ ,‬לכל ∗‪ w ∈ Σ‬המילה ‪ wq‬עבור )‪ q = δ ∗ (q0 , w‬נגזרת מ־ ‪ ,G‬ושוב מראים זאת באינדוקציה על אורך המילה‪.‬‬
‫הערה ‪ 3.5‬דקדוק חסר הקשר נקרא דקדוק שמאלי אם כל כלל גזירה הוא מהצורות ‪ A → ε‬או ‪ A → wB‬כאשר ‪ w‬מכילה רק‬
‫טרמינלים ו־ ‪ B‬משתנה‪ .‬קל לראות שדקדוק שמאלי נותן שפות רגולריות בלבד‪) .‬תרגיל ‪ ,4‬שאלה ‪(.5‬‬
‫הגדרה ‪ 3.6‬דקדוק חסר הקשר הוא חד־משמעי אם כל מילה ניתנת לגזירה בדרך אחת בלבד‪ .‬למשל‪ ,‬הדקדוק הבא אינו חד משמעי‪,‬‬
‫‪→A‬‬
‫‪→ AA|(A)|ε‬‬
‫‪A‬‬
‫משום שניתן לגזור ממנו את המילה )( במספר דרכים‪ .‬למשל‪ A → (A) → () :‬היא דרך אחת‪ ,‬ו־ )( → )‪ A → AA → (A‬היא‬
‫דרך שניה‪.‬‬
‫הערה ‪ 3.7‬לא לכל שפה חסרת הקשר יש דקדוק חסר הקשר חד־משמעי שמתאר אותה‪) .‬לא ראינו מדוע‪(.‬‬
‫‪3.2‬‬
‫פעולות על שפות חסרות הקשר‬
‫∗‬
‫בהנתן ‪ L, M‬שפות חסרות הקשר מעל א"ב ‪ ,Σ‬נרצה לבדוק האם ‪ L ∩ M, L ∪ M, L · M, L, L‬הן חסרות הקשר‪ ,‬בדומה למה‬
‫שעשינו עבור שפות רגולריות‪.‬‬
‫טענה ‪L, M ∈ CF L =⇒ L1 ∪ L2 ∈ CF L 3.8‬‬
‫הוכחה‪ :‬ראשית נשנה את שמות המשתנים כדי שמשתני ‪ L1 , L2‬יהיו קבוצות זרות‪ .‬ואז‪ ,‬אם ‪ S1 , S2‬המשתנים ההתחלתיים אז ניצור‬
‫משתנה חדש ‪ S‬שיהיה המשתנה ההתחלתי של ‪ L1 ∪ L2‬וכללי גזירה חדשים ‪ S → S1‬ו־ ‪ .S → S2‬קל לראות שהדקדוק המתקבל‬
‫הוא הדרוש‪.‬‬
‫‪12‬‬
‫הערה ‪ 3.9‬לעומת זאת‪ ,‬שפות חסרות הקשר אינן סגורות לחיתוך )ולכן גם לא למשלים(‪ .‬למשל‪ ,‬נראה בהמשך שהשפה } ‪{an bn cn‬‬
‫אינה חסרת הקשר‪ ,‬אבל היא מתקבלת בתור } ‪ {al bn cn } ∩ {an bn cl‬שהן שתיהן שפות חסרות הקשר‪ .‬למשל‪ ,‬להלן הדקדוק עבור‬
‫השפה } ‪:{an bn cl‬‬
‫‪→S‬‬
‫‪→ aAb|ε‬‬
‫‪A‬‬
‫‪→ cC|ε‬‬
‫‪C‬‬
‫ובאופן דומה אפשר למצוא דקדוק חסר הקשר ל־ } ‪.{al bn cn‬‬
‫טענה ‪L, M ∈ CF L =⇒ L · M ∈ CF L 3.10‬‬
‫הוכחה‪ :‬בדומה להוכחה המתאימה לשפות רגולריות‪ ,‬כאשר משתמשים באוטומט מחסנית‪.‬‬
‫טענה ‪L ∈ CF L =⇒ L∗ ∈ CF L 3.11‬‬
‫הוכחה‪ :‬בדומה להוכחה המתאימה לשפות רגולריות‪ ,‬כאשר משתמשים באוטומט מחסנית‪.‬‬
‫טענה ‪L ∈ REG, M ∈ CF L =⇒ L ∩ M ∈ CF L 3.12‬‬
‫הוכחה‪) :‬תרגיל ‪ ,5‬שאלה ‪ (1‬סקיצת ההוכחה‪ :‬בניית מכפלה של ‪ DFA‬שמזהה את ‪ L‬ו־ ‪ PDA‬שמזהה את ‪ .M‬כיוון שה־ ‪ DFA‬לא צריך‬
‫מחסנית‪ ,‬אין "התנגשות"‪.‬‬
‫‪3.3‬‬
‫צורה נורמלית של חומסקי‬
‫אנו מחפשים צורה פשוטה לתאר דקדוקים כדי שיהיה לנו יותר קל להוכיח דברים על שפות חסרות הקשר‪ .‬אם נראה שכל דקדוק‬
‫חסר הקשר ניתן להצגה בצורה פשוטה יחסית שגם חוסמת בקלות את גודל המילה המתקבלת משרשרת גזירה חסומה‪ ,‬זה יקל עלינו‬
‫מאוד‪.‬‬
‫הגדרה ‪ 3.13‬נאמר שדקדוק חסר הקשר הוא בצורה נורמלית של חומסקי )‪ (Chomsky Normal Form‬אם כל כללי הגזירה שלו הם‬
‫מהצורות הבאות‪:‬‬
‫‪ S → ε .1‬ואין חוקים נוספים מהצורה ‪A → ε‬‬
‫‪ A → BC .2‬כאשר ‪ B, C‬משתנים שאינם המשתנה ההתחלתי אבל יכולים להיות זהים או שווים ל־ ‪A‬‬
‫‪ A → σ .3‬כאשר ‪) σ ∈ Σ‬טרמינל(‬
‫טענה ‪ 3.14‬לכל דקדוק חסר הקשר קיים דקדוק חסר הקשר בעל אותה שפה שהוא בצורה נורמלית של חומסקי‪.‬‬
‫הוכחה‪ :‬נראה אלגוריתם להפיכת ‪ CFG‬לצורה נורמלית של חומסקי‪:‬‬
‫‪ .1‬נוסיף משתנה התחלתי חדש ‪ S0‬וכלל גזירה ‪ .S0 → S‬קל לראות שהשפה לא משתנה כתוצאה מזה‪ ,‬אלא רק הארכנו כל גזירה‬
‫של מילה בעוד שלב אחד‪.‬‬
‫‪ .2‬לכל כלל גזירה מהצורה ‪) A → ε‬כאשר ‪ (A 6= S0‬נעבור על כל הכללים מהצורה ‪ B → wAu‬ונוסיף להם את החוק ‪B → wu‬‬
‫)כאשר ‪ w, u‬מחרוזות כלשהן( ‪ .2‬את הכלל ‪ A → ε‬נוכל להסיר כעת‪ ,‬וגם זה לא פוגע בשפה‪.‬‬
‫‪ .3‬לכל כלל מהצורה ‪) A → B‬כאשר ‪ (3 A 6= B‬נעבור על כללים מהצורה ‪ C → wAu‬ונוסיף את הכלל ‪ .C → wBu‬לבסוף נוכל‬
‫להסיר את הכלל ‪ A → B‬וגם זה לא פוגע בשפה‪ .‬את זאת נעשה גם עבור כללים שבהם ‪.B ∈ Σ‬‬
‫‪ .4‬לכל כלל מהצורה ‪ A → v1 . . . vk‬כאשר ‪ k > 2‬נוסיף משתנים חדשים ‪ u2 , . . . , uk−1‬ואת כללי הגזירה החדשים ‪,A → v1 u2‬‬
‫‪ u3 → v3 u4 ,u2 → v2 u3‬וכו' עד ‪ .uk−1 → vk−1 vk‬כמובן‪ ,‬לא פגענו בשפה‪.‬‬
‫‪ .5‬נוסיף משתנים מיוחדים ‪ Xσ‬לכל ‪ σ ∈ Σ‬ואת הכללים ‪ .Xσ → σ‬בכל כלל שבו באגף ימין יש ‪ σ‬נחליף אותו ב־ ‪.Xσ‬‬
‫נותר להוכיח )לא עשינו זאת( שהתהליך מסתיים‪ .‬את זה שהשפה לא משתנה קל לראות‪.‬‬
‫הערה ‪ 3.15‬כתוצאת לוואי‪ ,‬אנו מגלים האם דקדוק גוזר את המילה הריקה‪ .‬אם קיבלנו את הכלל ‪ S0 → ε‬אז כן‪ ,‬אחרת לא‪.‬‬
‫‪2‬לדוגמה‪ ,‬אם היה הכלל ‪ B → ACAD‬אז נצטרך להוסיף את הכללים ‪ B → CAD ,B → ACD‬ו־ ‪.B → CD‬‬
‫‪3‬שכן כללים מהצורה ‪ A → A‬אפשר להסיר מהדקדוק ללא פגיעה בשפה‪.‬‬
‫‪13‬‬
‫דוגמת הרצה של האלגוריתם‪:‬‬
‫נתחיל מהדקדוק הבא‪:‬‬
‫‪→S‬‬
‫‪→ ASA|aB‬‬
‫‪S‬‬
‫‪→ B|S‬‬
‫‪A‬‬
‫‪→ b|ε‬‬
‫‪B‬‬
‫הכלל ה"תקין" היחיד הוא ‪ .B → b‬נתחיל את התהליך‪.‬‬
‫‪ .1‬ניצור כלל ‪ S0 → S‬חדש‪.‬‬
‫‪ .2‬נתקן את ‪ B → ε‬ע"י הסרתו על חשבון החוקים ‪ A → ε‬ו־ ‪.S → a‬‬
‫‪ .3‬נתקן את הכלל ‪ A → ε‬ע"י הסרתו על חשבון החוקים ‪ S → AS‬ו־ ‪.S → SA‬‬
‫‪ .4‬נתקן את הכלל ‪ A → B‬ע"י חסרתו על חשבון החוקים ‪.S → ASB ,S → BSA ,S → BSB ,S → SB ,S → BS‬‬
‫אנו רחוקים מסיום אך נעצור כאן‪.‬‬
‫‪3.4‬‬
‫למת הניפוח לשפות חסרות הקשר‬
‫גם עבור שפות חסרות הקשר למת הניפוח עובדת‪ ,‬אבל יהיה קצת יותר קשה להראות מדוע‪ .‬הצורה הנורמלית של חומסקי מאוד‬
‫תעזור לנו כדי לתאר היטב את עץ הגזירה של הדקדוק דנן‪.‬‬
‫למה ‪ 3.16‬תהי ‪ .L ∈ CF L‬אז‬
‫‪∀i ∈ N ∪ {0} uxi yz i v ∈ L‬‬
‫‪w = uxyzv, |xz| > 0, |xyz| ≤ p‬‬
‫‪∃p > 0 ∀w ∈ L, |w| > p‬‬
‫הוכחה‪ :‬תהי ∗‪ L ⊆ Σ‬חסרת הקשר ויהי ‪ G‬דקדוק חסר הקשר )‪ G = (Q, Σ, R, S‬שגוזר אותה‪ .‬יהי ‪ n‬האורך המקסימלי של מחרוזת‬
‫המופיעה בכלל גזירה מתוך ‪.R‬‬
‫נגדיר את קבוע הניפוח להיות ‪ p := n|Q|+1‬ונראה שהוא מקיים את הדרוש‪ .‬תהי ‪ w ∈ L‬עם ‪ .|w| > p‬יהי ‪ T‬עץ גזירה מינימלי‬
‫הגוזר את ‪ w‬ע"פ ‪) G‬מינימלי מבחינת כמות הצמתים בעץ(‪.‬‬
‫הגובה של ‪ :T‬אם העץ בגובה ‪ l‬אז מספר העלים הוא לכל היותר ‪) nl‬בגלל החסם על אורך כלל גזירה(‪ .‬לכן הגובה של ‪ T‬הוא‬
‫גדול מ־ ‪ ,|Q| + 1‬כי המילה באורך < ‪ p‬וכל אות בה היא עלה בעץ הגזירה‪.‬‬
‫לכן‪ ,‬יש מסלול ‪ S0 , S1 , . . . , Sl = S‬באורך < |‪ |Q‬המתחיל בעלה ומגיע לשורש של ‪ .T‬לפי עיקרון שובך היונים‪ ,‬חייב להיות איזה‬
‫אינדקס ראשון ‪ i‬כך שקיים אינדקס ‪ i > j‬המקיים ‪ ,Si = Sj‬כלומר ‪ i‬הוא המקום הראשון שבו חוזרים על משתנה שכבר ראינו‬
‫במהלך המסלול‪.‬‬
‫נסמן ב־ ‪ Ti‬את תת־העץ שתלוי על ‪ Si‬וב־ ‪ Tj‬את תת־העץ התלוי על ‪ .Sj‬כעת ידועה לנו החלוקה של ‪ w‬מהלמה‪ .‬כל הטרמינלים‬
‫משמאל ל־ ‪ Ti‬יהיו ‪ u‬ואלה שמימין לו יהיו ‪ .v‬בתוך ‪ Ti‬כל הטרמינלים משמאל ל־ ‪ Tj‬יהיו ‪ ,x‬מימין ל־ ‪ Tj‬יהיו ‪ ,z‬ובתוך ‪ Tj‬יהיו ‪.y‬‬
‫עתה נפנה לטענות הלמה‪:‬‬
‫‪ .1‬הגובה של ‪ Ti‬הוא ≥ ‪ |Q| + 1‬ולכן מספר העלים בו ≥ ‪ .p = n|Q|+1‬כלומר‪ |xyz| ≤ p ,‬כפי שרצינו‪.‬‬
‫‪ .2‬נניח בשלילה ש־ ‪ ,xz = ε‬אז אם נחליף את ‪ Ti‬ב־ ‪ Tj‬נקבל עץ גזירה חוקי ע"פ ‪ G‬שעדיין גוזר את ‪ w‬ולבטח יש בו פחות‬
‫צמתים )לפחות חסכנו את הצומת ‪ ,(Si‬וזו סתירה‪ .‬מותר לנו לעשות את ההחלפה הזאת כי ‪ Si = Sj‬והצומת הקודם ל־ ‪ Si‬השתמש‬
‫בכלל גזירה שבו אותו משתנה‪ .‬לכן ‪.|xz| > 0‬‬
‫‪ .3‬על מנת לנפח ב־ ‪ i = 0‬עלינו להחליף את ‪ Ti‬ב־ ‪ ,Tj‬בדיוק כמו ב־ )‪ .(2‬קל לראות שזה מספק מילה בשפה מאותם שיקולים‪.‬‬
‫‪ .4‬על מנת לנפח ב־ ‪ i = 2‬עלינו להדביק במקום ‪ Tj‬עותק של ‪) Ti‬עם ‪ Tj‬בפנים(‪ .‬קל להשתכנע שזה עובד גם עבור ‪i > 2‬‬
‫)אינדוקציה(‪.‬‬
‫דוגמאות לשימוש בלמה‪:‬‬
‫‪ .1‬נתבונן בשפה הבאה מעל }‪:Σ = {a, b, #‬‬
‫}‪L = {w#u : w, u ∈ {a, b}∗ ∧ ∃x, y : w = xuy‬‬
‫נוכיח שהיא אינה חסרת הקשר בעזרת למת הניפוח‪ .‬נניח בשלילה שהיא חסרת הקשר‪ .‬מהלמה קיים ‪ p‬כך שאפשר לפרק את‬
‫המילה ‪ w = ap bp #ap bp ∈ L‬ל־ ‪ w = uvxyz‬לפי תנאי הלמה‪ .‬אז ‪ |vxy| ≤ p‬ונחלק למקרים‪:‬‬
‫‪14‬‬
‫‪ vxy .1‬נמצא משמאל ל־ ‪ .#‬במקרה זה אפשר לנפח את ‪ vy‬באמצעות ‪ i = 0‬וזה מקטין את הביטוי ‪ ,ap bp‬מה שגורם לזה‬
‫שהמילה כבר לא בשפה‪ ,‬כי הביטוי מימין ל־ ‪ #‬כבר לא יכול להיות תת־מחרוזת של ביטוי קצר יותר משמאל‪.‬‬
‫‪ vxy .2‬נמצא מימין ל־ ‪ .#‬במקרה זה אפשר לנפח באמצעות ‪ i = 2‬וזה שוב גורם לצד ימין להיות ארוך יותר מצד שמאל‪ ,‬ולכן‬
‫הוא לא יכול להיות תת־מחרוזת‪.‬‬
‫‪ vxy .3‬מכיל את ‪ .#‬גם כאן נחלק למקרים‪:‬‬
‫)א( ‪ v‬מכיל ‪ .#‬אפשר לנפח עם ‪ i = 0‬ולקבל מילה שאין בה בכלל ‪ #‬ולכן כמובן אינה בשפה‪.‬‬
‫)ב( ‪ y‬מכיל ‪ .#‬כנ"ל‪.‬‬
‫)ג( ‪ x‬מכיל ‪ .#‬זה אומר ש־ ‪ v‬מורכב רק מ־ ‪b‬־ים ו־ ‪ y‬מורכב רק מ־ ‪a‬־ים‪ .‬שוב נחלק למקרים‪:‬‬
‫‪ |v| > 0 .i‬אז ננפח ב־ ‪ i = 0‬ואז בצד שמאל הקטנו את מספר ה־ ‪b‬־ים ובצד ימין לא‪ ,‬ולכן לא יכול להיות שצד ימין‬
‫הוא תת מחרוזת של צד שמאל‪.‬‬
‫‪ |y| > 0 .ii‬אז ננפח ב־ ‪ i = 2‬ואז הגדלנו את מספר ה־ ‪a‬־ים מימין ולא שינינו את מספרם משמאל ושוב המילה אינה‬
‫בשפה‪.‬‬
‫בזאת השלמנו את ההוכחה ש־ ‪ L‬אינה חסרת הקשר‪.‬‬
‫∈ }‪ .L = {an bn cn : n ∈ N‬נניח בשלילה ש־ ‪ L ∈ CF L‬ויהי ‪ p‬קבוע הניפוח שלה‪ .‬נעיין במילה‬
‫‪ .2‬נוכיח ש־ ‪/ CF L‬‬
‫‪ .w = a5p b5p c5p‬ע"פ למת הניפוח אפשר לחלק אותה ל־ ‪ .w = uxyzv‬גם ב־ ‪ x‬וגם ב־ ‪ z‬יופיעו אותיות מסוג אחד בלבד‪ ,‬ואז הניפוח‬
‫)למשל עם ‪ (i = 2‬ייצור מצב שמספר מופעי אות אחת לפחות יגדל ומספר מופעי אות אחת לפחות לא ישתנה‪ .‬המילה המתקבלת‬
‫אינה ב־ ‪ ,L‬בסתירה‪.‬‬
‫‪3.5‬‬
‫בעיות הכרעה לגבי שפות חסרות הקשר‬
‫‪ .1‬נתחיל מבעיית ה־ ‪ - membership‬האם מילה ‪ w‬נגזרת מהדקדוק ‪?G‬‬
‫תחילה נשים לב שמספיק להסתכל על דקדוקים בצורה נורמלית של חומסקי‪.‬‬
‫נתאר אלגוריתם תכנון דינאמי לבעיה‪ .‬נחזיק טבלה ‪ n × n‬עבור המילה ‪ ,w = σ1 . . . σn‬כאשר בתא ה־ ‪ i, j‬יהיו כל המשתנים‬
‫של ‪ G‬שמהם יש גזירה של ‪ σi . . . σj‬באמצעות כללי הגזירה של ‪.G‬‬
‫מקרה הבסיס הוא כאשר ‪ i = j‬ומחפשים את המשתנים שמהם אפשר לגזור את ‪ ;σi‬שאר המקרים מתקבלים בצורה רקורסיבית‪:‬‬
‫עבור ‪ j > i‬המשתנים ‪ X‬שמהם אפשר לגזור את ‪ σi . . . σj‬הם כאלה שעבורם יש כלל מהצורה ‪ X → Y Z‬ופירוק = ‪σi . . . σj‬‬
‫‪ σi . . . σk σk+1 . . . σj‬כך שרקורסיבית אפשר לגזור מ־ ‪ Y‬את ‪ σi . . . σk‬ומ־ ‪ Z‬את ‪.σk+1 . . . σj‬‬
‫‪ S‬מופיע בתא ה־ ‪ 1, n‬של הטבלה אםם אפשר לגזור את המילה ‪ w‬מ־ ‪.G‬‬
‫‪ .2‬באופן די דומה אפשר לפתור גם את בעיית הריקנות‪.‬‬
‫נתחיל בכך ש"נסמן" את כל הטרמינלים‪ .‬לכל כלל גזירה מהצורה ‪ A → X1 . . . Xk‬נבדוק האם ‪ X1 , . . . , Xk‬כולם מסומנים‪ .‬אם‬
‫כן‪ ,‬נסמן גם את ‪ .A‬נמשיך באופן כזה עד שלא מסמנים יותר שום דבר‪.‬‬
‫אם ‪ S‬סומן‪ ,‬השפה של הדקדוק אינה ריקה; אחרת‪ ,‬היא ריקה‪) .‬הוכחת נכונות וזמן ריצה ‪ -‬שהוא פולינומיאלי באורך הייצוג של‬
‫הדקדוק ‪ -‬בסיכום תרגול ‪(.4‬‬
‫דרך אחרת היא להעביר את הדקדוק לצורה נורמלית של חומסקי‪ ,‬ולבדוק האם ‪ S0 → ε‬זהו כלל בדקדוק‪.‬‬
‫‪ .3‬בהמשך נראה שלא ניתן להכריע את בעיית ה־ ‪ - ALLCF G‬כלומר לקבוע האם דקדוק מסוים מקבל את כל המילים‪.‬‬
‫‪3.6‬‬
‫אוטומט מחסנית‬
‫אוטומט מחסנית )‪ PDA‬־ ‪ (Pushdown Automaton‬הוא אוטומט לא דטרמיניסטי עם זיכרון עזר בצורת מחסנית‪ .‬נשים לב שמילת הקלט‬
‫אינה מופיעה במחסנית )בניגוד למכונות טיורינג שנראה בהמשך(‪ .‬נשתמש בו לזיהוי שפות חסרות הקשר‪.‬‬
‫הגדרה ‪ 3.17‬אוטומט מחסנית הוא שישייה סדורה ) ‪ A = (Q, Σ, Γ, δ, q0 , F‬כאשר ‪ Q‬קבוצת מצבים סופית‪ Γ ,‬א"ב המחסנית‪ Σ ,‬א"ב‬
‫השפה‪ q0 ∈ Q ,‬מצב התחלה‪ F ⊆ Q ,‬קבוצת המצבים המקבלים‪ ,‬ו־ ‪ δ‬פונקציית המעברים }‪.δ : Q × Σ ∪ {ε} × Γ ∪ {ε‬‬
‫הערה ‪ 3.18‬בגלל הגדרה זו‪ ,‬אין לנו צורך במספר מצבי התחלה‪ .‬בניגוד ל־ ‪ ,NFA‬כאן אנו "מרפדים" את המילה ב־ ‪ε‬־ים‪ ,‬כלומר‬
‫החישוב יכול להתחיל במעבר ‪.ε‬‬
‫דוגמא לאוטומט מחסנית‪:‬‬
‫אוטומט המחסנית הבא מזהה את השפה } ‪ L = {wwR‬מעל הא"ב }‪:Σ = {a, b‬‬
‫‪15‬‬
‫בציורים של אוטומט מחסנית‪ ,‬כשנכתוב ‪) a, b → c‬כאשר }‪ (a ∈ Σ ∪ {ε}, b, c ∈ Γ ∪ {ε‬הכוונה היא שכאשר האוטומט קורא‬
‫את האות ‪ a‬מהקלט ושולף מהמחסנית את האות ‪ ,b‬הוא עובר למצב הבא ודוחף את האות ‪ c‬למחסנית‪.‬‬
‫הגדרה ‪ 3.19‬קונפיגורציה של ‪ PDA‬מורכבת מהמצב שבו הוא נמצא‪ ,‬וגם מתוכן המחסנית‪ .‬הקונבנציה שלנו תהיה לכתוב את תחתית‬
‫המחסנית מצד ימין ואת ראשה בצד שמאל‪ .‬למשל‪ ,‬האוטומט מהדוגמה הקודמת לאחר קריאת המילה ‪ ab‬יהיה בקונפיגורציה‬
‫)‪.(qw , ba$‬‬
‫צעד חישוב הוא מעבר חוקי בין הקונפיגורציות‪ .‬צעד חישוב חוקי על האות ‪ α‬הוא מעבר ) ‪ (q1 , s1 ) → (q2 , s2‬כאשר ‪ s1 = as‬ו־‬
‫‪.(q2 , b) ∈ δ(q1 , α, a) ,a, b ∈ Γ ∪ {ε} ,s2 = bs‬‬
‫חישוב מקבל הוא חישוב חוקי המסתיים במצב מקבל‪ ,‬ושפת האוטומט היא אוסף המילים שעבורן קיים חישוב מקבל‪) .‬ולהיפך ־‬
‫מילה אינה מתקבלת ע"י האוטומט אםם כל חישוב שלו עליה לא מקבל‪(.‬‬
‫הערה ‪ 3.20‬בהחלט ייתכן שנרצה בצעד מסוים להוציא אות מסוימת ולהכניס למחסנית אותה ‪ +‬אות נוספת‪ .‬במודל שלנו‪ ,‬נצטרך‬
‫לעשות את זה באמצעות שני מצבים ־ בראשון נוציא את האות ונחזיר אותה‪ ,‬ובשני נכניס את האות הנוספת שרצינו‪.‬‬
‫משפט ‪ 3.21‬יהי ‪ G‬דקדוק חסר הקשר‪ .‬אזי קיים ‪ A‬אוטומט מחסנית כך ש־ )‪.L(A) = L(G‬‬
‫הוכחה‪) :‬בערך( אפשר להכליל אוטומט מחסנית )ע"י הוספה של הרבה מצבים( כדי שנוכל בכל שלב לקרוא מילה )ב־ ∗‪ (Γ‬מהמחסנית‬
‫ולכתוב מילה למחסנית‪.‬‬
‫אם כך‪ ,‬נוכל לבנות את האוטומט הבא עם ‪ Σ‬הטרמינלים של הדקדוק‪:‬‬
‫כאשר הקשת → ‪ ε, A‬משוכפלת לכל כלל גזירה מהצורה → ‪ A‬והקשת ‪ a, a → ε‬משוכפלת לכל טרמינל ‪.a ∈ Σ‬‬
‫כעת‪ ,‬אם מוציאים מהמחסנית משתנה אז אנחנו "מנסים לגזור אותו" ואם מוציאים טרמינל מהמחסנית אז משווים אותו לאות‬
‫הנוכחית במילה‪ ,‬וממשיכים‪.‬‬
‫משפט ‪ 3.22‬יהי ‪ A‬אוטומט מחסנית‪ .‬אזי קיים דקדוק חסר הקשר ‪ G‬כך ש־ )‪.L(G) = L(A‬‬
‫הוכחה‪ :‬נניח בה"כ ש‪:‬‬
‫‪ .0‬בתחילת הריצה ‪ A‬דוחף ‪ $‬למחסנית‪.‬‬
‫‪ .1‬ל־ ‪ A‬מצב מקבל יחיד‪ .‬זה בה"כ כי אחרת נוסיף מצב מקבל וקשתות ‪ ε, ε → ε‬מהמצבים המקבלים הקודמים למצב המקבל‬
‫החדש‪.‬‬
‫‪ A .2‬מקבל רק אם המחסנית ריקה‪ .‬זה בה"כ כי אחרת נוסיף מצב מקבל חדש ומהמצב המקבל הישן נוסיף קשתות עצמיות‬
‫‪ ε, σ → ε‬לכל ‪ ,σ ∈ Γ‬ועוד מעבר ‪ ε, $ → ε‬למצב המקבל החדש‪.‬‬
‫‪ .3‬בכל מעבר ‪ A‬דוחף אות למחסנית או מוציא אות מהמחסנית‪ ,‬אך לא שניהם‪ .‬זה בה"כ ‪ -‬נטפל בשני המקרים‪:‬‬
‫עבור מעבר ‪ a, ε → b‬נבנה מצב נוסף ומעברים ‪ a, ε → b‬ו־ ‪.ε, b → ε‬‬
‫עבור מעבר ‪ a, b → c‬נבנה מצב נוסף ומעברים ‪ a, b → ε‬ו־ ‪.ε, ε → c‬‬
‫‪16‬‬
‫נשים לב של־ ‪ A‬יש ריצה מקבלת על ‪ w‬אםם ל־ ‪ A‬יש ריצה מ־ ‪ q0‬ל־ ‪) qacc‬המצב המקבל( כך שהמחסנית ריקה בתחילת הריצה‬
‫ובסופה‪.‬‬
‫‪ Apq‬אםם יש ל־ ‪ A‬ריצה מ־ ‪ p‬ל־ ‪ q‬שמשמרת‬
‫כעת לכל ‪ p, q ∈ Q‬יהיה משתנה ‪ Apq‬כך שלכל מילה ∗‪ x ∈ Σ‬מתקיים ש־ ‪x‬‬
‫את ריקנות המחסנית‪(∗) .‬‬
‫נבחין בין שני מצבים‪:‬‬
‫‪ .1‬במהלך הריצה מ־ ‪ p‬ל־ ‪ q‬המחסנית מתרוקנת במצב ‪ .r‬אם כך‪ ,‬החלק של ‪ w‬שעברנו עליו בין ‪ p‬ל־ ‪ r‬נגזר מ־ ‪ Apr‬תוך שמירה‬
‫על ריקנות המחסנית‪ ,‬והחלק של ‪ w‬שעברנו עליו בין ‪ r‬ל־ ‪ q‬נגזר מ־ ‪ Arq‬תוך שמירה על ריקנות המחסנית‪.‬‬
‫‪ .2‬במהלך הריצה כנ"ל המחסנית מתרוקנת רק בהגיענו למצב ‪ .q‬אם כך‪ ,‬נתבונן על המצב ‪ r‬שהוא המצב הראשון בדרך מ־ ‪p‬‬
‫ל־ ‪ q‬ועל המצב ‪ s‬שהוא המצב האחרון לפני ‪ q‬בדרך הנ"ל‪ .‬במקרה זה‪ ,‬האות שנשלפת בין ‪ s‬ל־ ‪ q‬היא אותה אות שנדחפה בין ‪ p‬ל־‬
‫‪ - r‬לפי ההנחות שלנו‪.‬‬
‫מכאן מוגדרים החוקים‪:‬‬
‫‪ .1‬לכל ‪ r, p, q ∈ Q‬נגדיר את הכלל ‪Apq → Apr Arq‬‬
‫‪ .2‬לכל ‪ p, q, r, s ∈ Q‬ולכל }‪ γ ∈ Γ, a, b ∈ Σ ∪ {ε‬נגדיר את הכלל ‪ Apq → aArs b‬אם מתקיים )‪ (r, γ) ∈ δ(p, a, ε‬ו־‬
‫)‪.(q, ε) ∈ δ(s, b, γ‬‬
‫‪ .3‬לכל ‪ p ∈ Q‬נגדיר את הכלל ‪.App → ε‬‬
‫בנוסף‪ ,‬המשתנה ההתחלתי יהיה ‪.Aq0 ,qacc‬‬
‫עכשיו יש להוכיח את )∗( ‪ -‬זה נעשה באינדוקציה‪) .‬ר' סיכום תרגול ‪ 5‬לעוד פרטים‪(.‬‬
‫חלק‬
‫‪II‬‬
‫חישוביות‬
‫‪4‬‬
‫מכונות טיורינג‬
‫בפרק זה נתבונן במכונות טיורינג‪ ,‬השקולות למחשב מבחינת יכולת חישוב‪.‬‬
‫‪4.1‬‬
‫מכונות טיורינג "פשוטות"‬
‫למעשה‪ ,‬מכונת טיורינג היא אוטומט סופי דטרמיניסטי המצויד גם בסרט חישוב דו־כיווני )רשימה מקושרת דו־כיוונית(‪ .‬לראש‬
‫הקריאה של האוטומט יש אפשרות לנוע ימינה ושמאל על הסרט‪ ,‬שהוא אמנם סופי אבל לא חסום‪ .‬הקלט של המכונה מגיע על הסרט‬
‫ונוכל לקרוא אותו כמה פעמים שנרצה ולכתוב מידע חדש על הסרט כרצוננו‪.‬‬
‫הגדרה ‪ 4.1‬מכונת טיורינג היא שביעייה סדורה )‪ M = (Q, Σ, Γ, q0 , qrej , qacc , δ‬כאשר ‪ Q‬קבוצת המצבים‪ Σ ,‬א"ב הקלט‪ Γ ,‬א"ב‬
‫הסרט כאשר ‪ Σ ⊆ Γ‬ו־ ‪ t ∈ Γ‬תו מיוחד‪ q0 ∈ Q ,‬המצב ההתחלתי‪ qrej ∈ Q ,‬המצב הדוחה‪ qacc ∈ Q ,‬המצב המקבל‪ ,‬ו־ ‪ δ‬פונקציית‬
‫המעברים }‪) .δ : Q × Γ → Q × Γ \ {t} × {R, L‬המשמעות של ‪ R, L‬היא "ללכת ימינה" או "ללכת שמאלה"‪(.‬‬
‫קונפיגורציה של מכונת טיורינג היא )‪ (u, q, v‬כאשר ‪ u, v ∈ Γ∗ ,q ∈ Q‬מתארים את מה שמשמאל לראש הקורא‪/‬כותב ומה‬
‫שמימין לו‪.‬‬
‫נסמן ‪ v = av 0‬כאשר }‪ a ∈ Γ \ {t‬אם ‪ v 6= ε‬או ‪ a = t‬ו־ ‪ v 0 = ε‬אחרת‪ .‬נניח ש־ )‪ .δ(q, a) = (q 0 , b, R‬במקרה זה‬
‫הקונפיגורציה העוקבת של )‪ (u, q, v‬היא ) ‪ .(ub, q 0 , v 0‬כנ"ל עבור ‪.L‬‬
‫ריצה חוקית של מכונת טיורינג היא סדרה )שאינה בהכרח סופית( של קונפיגורציות עוקבות‪ .‬הריצה מסתיימת אם הסדרה סופית‬
‫והמצב בקונפיגורציה האחרונה הוא ‪ qacc‬או ‪.qrej‬‬
‫המכונה מקבלת את המילה )המילה בשפה של המכונה( אם יש ריצה שהקונפיגורציה ההתחלתית שלה היא )‪ (ε, q0 , w‬והקונפיגורציה‬
‫הסופית שלה היא ב־ ‪.qacc‬‬
‫המכונה מכריעה את השפה ‪ L‬אם היא תמיד עוצרת‪ ,‬והיא עוצרת במצב מקבל רק על קלטים ‪.w ∈ L‬‬
‫∈ ‪ w‬היא עוצרת ודוחה או שאינה עוצרת‪.‬‬
‫המכונה מזהה את השפה ‪ L‬אם היא עוצרת ומקבלת על קלטים ‪ ,w ∈ L‬ועל קלטים ‪/ L‬‬
‫הערה ‪ .1 4.2‬השפה של הפולינומים )‪ p(x, y, z‬ומספרים ‪ a, b, c‬כך ש־ ‪ p(a, b, c) = 0‬ניתנת להכרעה ע"י מכונת טיורינג‪.‬‬
‫‪ .2‬השפה של הפולינומים במקדמים שלמים ) ‪ p(x1 , . . . , xk‬כך שקיימים ‪ a1 , . . . , ak‬שלמים המאפסים את הפולינום ניתנת לזיהוי‬
‫ע"י מכונת טיורינג )ניתן לעבור על כל האפשרויות( אבל אינה ניתנת להכרעה‪ .‬זוהי בעיה מספר ‪ 10‬של הילברט‪.‬‬
‫‪) .3‬ללא קשר( ניתן לגרום למכונה להתמודד עם שפות אינסופיות ע"י החלפת ‪ qrej‬ב־ ‪) .qloop‬לא פיתחנו עוד את הרעיון הזה‪(.‬‬
‫‪ .4‬על פני אוטומט רגיל‪ ,‬הוספנו את האפשרות לכתוב ולזוז שמאלה וימינה על הסרט‪ .‬כל אחד משני הפיצ'רים האלה לא מספק‬
‫עדיין את הכוח של מכונת טיורינג אלא נשאר בתחום השפות הרגולריות‪.‬‬
‫‪ .5‬מכונת טיורינג יכולה לקבל‪ ,‬לדחות‪ ,‬או "להיתקע" ‪ -‬כלומר לעולם לא לעצור‪ .‬בניגוד לאוטומט‪ ,‬מכונת טיורינג יכולה לא לעצור‬
‫ובכל זאת לא לחזור על אותה קונפיגורציה פעמיים )שכן הסרט אינו חסום(‪.‬‬
‫‪17‬‬
‫דוגמאות למכונות טיורינג‪:‬‬
‫‪ .1‬להלן מכונת טיורינג בעלת השפה }‪ L = {0∗ #‬מעל הא"ב }‪:Σ = {0, 1, #‬‬
‫‪ .2‬השפה } ∗}‪ L = {w#w : w ∈ {0, 1‬מעל הא"ב }‪ {0, 1, #‬אינה חסרת הקשר‪ .‬ניתן להראות זאת ישירות באמצעות למת‬
‫הניפוח לשפות חסרות הקשר‪.‬‬
‫אבל‪ ,‬אפשר לזהות אותה באמצעות מכונת טיורינג‪ .‬תחילה‪ ,‬נתאר אלגוריתם ואז נבנה את המכונה ממש )מה שלא נעשה בדרך‬
‫כלל‪ ,‬כי זה מגעיל וארוך(‪:‬‬
‫‪ .1‬החלף את האות מתחת לראש ב־ ‪ x‬וזכור אותה‬
‫‪ .2‬לך ימינה עד ‪#‬‬
‫‪ .3‬לך ימינה צעד אחד‪ ,‬וימינה כל עוד יש ‪x‬‬
‫‪ .4‬אם האות מתחת לראש היא כמו שזכרת‪ ,‬סמן ‪ x‬ולך שמאלה עד ‪#‬‬
‫‪ .5‬לך שמאלה עד ‪ ,x‬ולך ימינה צעד אחד‬
‫‪ .6‬אם האות היא לא ‪ ,#‬חזור ל־ )‪(1‬‬
‫‪ .7‬לך ימינה על ‪x‬־ים‪ ,‬אם הגעת ל־ ‪ ,t‬קבל‬
‫להלן ציור של המכונה‪ ,‬כאשר לא ציירנו את הקשתות שהולכות למצב הדוחה ‪:qrej‬‬
‫‪ .3‬נבנה מכונת טיורינג שבודקת האם גרף לא מכוון הוא קשיר‪ .‬נשתמש ב־ ‪ hi‬כדי לסמן קידוד של משהו‪ ,‬למשל ‪ .hGi‬קידוד‬
‫סביר של גרף הוא רשימה של הקודקודים בתור מספרים בינאריים מופרדים ע"י ‪ ,#‬שאחריהם רשימה של הצלעות בתור מספרים‬
‫בינאריים‪ .‬לדוגמא‪:‬‬
‫‪hGi = 000#001#010# . . . ###(000#001)(010#000) . . .‬‬
‫‪18‬‬
‫פיסת הקידוד הנ"ל מתארת את הקודקודים ‪ v0 , v1 v2‬והצלעות ) ‪.(v0 , v1 ), (v2 , v0‬‬
‫המכונה תשתמש בשני סרטים )בהמשך נראה שזה שקול למכונה עם סרט אחד( ותפעל כך‪:‬‬
‫‪ .1‬בדוק שהקלט מהווה קידוד חוקי של גרף‪.‬‬
‫‪ .2‬סמן את הקודקוד הראשון של ‪ G‬ע"י העברתו לסרט של הקודקודים שכבר סומנו‪.‬‬
‫‪ .3‬חזור עד שלא מסומנים קודקודים חדשים‪ :‬לכל קודקוד ב־ ‪ ,G‬סמן אותו אםם יש קשת בינו לבין קודקוד שכבר סומן‪.‬‬
‫‪ .4‬עבור על כל קודקודי ‪ .G‬אם כולם מסומנים‪ ,‬עצור וקבל; אחרת‪ ,‬עצור ודחה‪.‬‬
‫הערה ‪ .1 4.3‬ניתן לתאר אלגוריתם באמצעות מכונת טיורינג בכמה מישורים ‪ -‬התיאור הפורמלי באמצעות שביעייה‪ ,‬תיאור ברמת‬
‫המימוש )האופן שבו המכונה פועלת(‪ ,‬ותיאור בשפה טבעית של האלגוריתם‪ .‬בדרך כלל נפנה לאפשרות האחרונה‪.‬‬
‫‪ .2‬כאשר אנו מדברים על מכונות טיורינג שמקבלות קידוד של "משהו" כקלט‪ ,‬בהחלט ייתכן שלא כל גיבוב תווים מעל הא"ב של‬
‫המכונה יהיה קלט חוקי‪ ,‬כלומר קידוד חוקי של "משהו"‪ .‬מקרים כאלה לא יעניינו אותנו במיוחד‪ ,‬כי בדרך כלל אפשר בזמן קצר מאוד‬
‫לוודא בתחילת הריצה שאכן מדובר בקלט לא חוקי‪ ,‬ולדחות אותו )או לעשות כל דבר אחר שנרצה(‪.‬‬
‫‪4.2‬‬
‫וריאציות על מכונות טיורינג‬
‫הגדרה ‪ 4.4‬מכונת טיורינג עם שני סרטים מוגדרת כך ‪ -‬המילה כתובה על הסרט הראשון‪ ,‬והמכונה יכולה להשתמש בשני הסרטים‬
‫לצורך עבודה‪ .‬פונקציית המעברים היא ‪ δ : Q × Γ2 → Q × Γ2 × {R, L}2‬מכיוון שיש שני ראשים קוראים‪/‬כותבים שהמכונה‬
‫משתמשת בהם‪.‬‬
‫טענה ‪ 4.5‬לכל מכונת טיורינג עם שני סרטים יש מכונת טיורינג שקולה )בעלת אותה השפה ‪ -‬גם מבחינת קבלה ודחייה‪ ,‬וגם מבחינת‬
‫עצירה(‪.‬‬
‫הוכחה‪ :‬נעבוד עם א"ב מחסנית של רביעיות‪ Γ0 = Γ × Γ × {0, 1} × {0, 1} ,‬כאשר אות כמו )‪ (a, b, 1, 0‬משמעותה שעל הסרט‬
‫הראשון כתוב ‪ ,a‬על הסרט השני כתוב ‪ ,b‬הראש של הסרט הראשון נמצא מעל האות והראש השני של המכונה לא נמצא מעל האות‪.‬‬
‫‪0‬‬
‫‪0‬‬
‫‪ .M 0 = (Q0 , Σ, Γ0 , δ 0 , q00 , qacc‬המכונה פועלת בשני שלבים‪:‬‬
‫‪, qrej‬‬
‫נגדיר )‬
‫‪ .1‬נעבור על כל הסרט ונהפוך כל אות ‪ σ ∈ Σ‬לאות )‪ (σ, t, 0, 0‬ואת האות השמאלית ביותר ל־ )‪ - (σ, t, 1, 1‬שכן שני הראשים‬
‫מתחילים באותו המקום‪.‬‬
‫‪ .2‬נרוץ על הסרט ונחפש אות מהצורה ) ‪ - (, , 1,‬מה שנמצא מתחת לראש של הסרט הראשון‪ .‬נזכור מה האות בסרט‬
‫הראשון‪ .‬נמשיך ימינה עד הסוף‪.‬‬
‫‪ .3‬נחזור שמאלה ונחפש אות מהצורה )‪ - (, , , 1‬מה שנמצא מתחת לראש של הסרט השני‪ .‬נזכור מה האות בסרט השני‪.‬‬
‫נחזור שמאלה עד ‪.t‬‬
‫‪ .4‬נרוץ ימינה ונחפש אות מהצורה )‪ ,(t, t, 1, t‬נבצע סימולציה של פעולת ‪ M‬על הסרט הראשון‪ .‬כנ"ל לסרט השני‪.‬‬
‫‪ .5‬אם ‪ M‬אומרת לעבור ל־ ‪ qacc‬או ‪ ,qrej‬אז ‪ M 0‬תפעל בצורה דומה‪.‬‬
‫הערה ‪ 4.6‬אם המכונה המקורית מבצעת ‪ n‬צעדים‪ ,‬על צעד של המכונה המקורית אנו מבצעים )‪ O(n‬צעדים‪ ,‬ובסה"כ ) ‪ O(n2‬צעדים‪.‬‬
‫כלומר‪ ,‬עלות הסימולציה היא ריבועית ‪ -‬לא כל כך נורא‪.‬‬
‫הגדרה ‪ 4.7‬מכונת טיורינג עם סרט דו־מימדי היא מכונה שהסרט שלה גדל בשני כיוונים ‪ -‬למטה וימינה‪) .‬אפשר להסתכל עליה בתור‬
‫מטריצה "אינסופית"‪ (.‬מילת הקלט מגיעה על השורה הראשונה‪ ,‬הראש הקורא‪/‬כותב מתחיל בתא )‪ (1, 1‬ופונקציית המעברים היא‬
‫}‪.δ : Q × Γ → Q × Γ × {U, D, L, R‬‬
‫נדרוש גם שלא "ניפול" ‪ -‬אם הגענו לעמודה הראשונה והולכים שמאלה‪ ,‬אפשר לא לזוז‪ .‬כנ"ל לגבי עלייה למעלה כאשר הגענו‬
‫לשורה הראשונה‪.‬‬
‫טענה ‪ 4.8‬למכונת טיורינג עם סרט דו־מימדי יש מכונת טיורינג שקולה עם סרט אחד‪.‬‬
‫הוכחה‪ :‬אם יש מכונת טיורינג עם סרט אינסופי בשני הכיוונים‪ ,‬קל לבנות ממנה מכונה עם סרט דו־מימדי בעלת אותה השפה‪ .‬פשוט‬
‫צריך "לקפל" את הסרט סביב נקודת ההתחלה‪.‬‬
‫להיפך‪ ,‬בהינתן מכונת טיורינג עם סרט דו־מימדי יש לנו את הפונקציה ‪) f‬החשיבה ‪ -‬ר' להלן( שיכולה להתאים כל תא מהסרט‬
‫הדו־מימדי לתא אחד ויחיד על הסרט החד־מימדי‪ .‬בתא הזה נשים את האות שהייתה בסרט הדו־מימדי באותו המקום‪ .‬בנוסף‪ ,‬עלינו‬
‫לקודד את המידע על כך שהראש נמצא במקום האמור בטבלה ‪ -‬ואפשר לצורך כך להחזיק עוד סרט אחד‪ ,‬למשל‪.‬‬
‫כדי לעשות את הסימולציה‪ ,‬נרוץ ונחפש היכן נמצא הראש‪ ,‬ואז נרוץ על הסרט הראשון עד האות שעליה הראש נמצא‪ .‬כדי לרוץ‬
‫ימינה‪/‬שמאלה‪/‬למעלה‪/‬למטה עלינו לחשב את האינדקס שעליו עמדנו )בשביל זה צריך לדעת לספור( ואז לבצע את החישוב הדרוש‬
‫על האינדקס ‪ -‬למצוא את ‪ f −1‬שלו‪ ,‬להוסיף ל־ ‪ i‬או ל־ ‪ j‬בהתאם לכיוון‪ ,‬לחשב את ‪ f‬של התוצאה ולפעול בהתאם‪.‬‬
‫וריאציות נוספות‪:‬‬
‫‪ .1‬מכונת טיורינג עם סרט חד־כיווני ‪ -‬כלומר‪ ,‬הסרט חסום משמאל ולא חסום מימין‪ .‬המודל הזה עדיין שקול למכונת טיורינג‬
‫רגילה )תרגיל ‪ 5‬שאלה ‪ .(4‬למשל‪ ,‬אפשר להשתמש בשני סרטים כדי לסמלץ את החלקים ה"שמאלי" וה"ימני" של הסרט; אפשר גם‬
‫‪19‬‬
‫לכתוב על הסרט החד־כיווני את ‪ u#v‬כאשר ‪ u‬החלק ה"שמאלי" ו־ ‪ v‬החלק הימני‪ ,‬ובכל פעם שהמכונה צריכה עוד מקום משמאל‪,‬‬
‫מזיזים את המחרוזת ימינה‪.‬‬
‫‪ .2‬אוטומט סופי דטרמיניסטי עם שתי מחסניות‪ .‬המודל הזה שקול למכונת טיורינג רגילה )תרגיל ‪ 6‬שאלה ‪ .(1‬למשל‪ ,‬אפשר‬
‫לסמלץ אוטומט בעל שתי מחסניות בעזרת מכונת טיורינג בעלת שני סרטים )סרט אחד לשתי המחסניות‪ ,‬מופרדות ב־ ‪ #‬וסרט אחד‬
‫לקלט(; ואפשר לסמלץ מכונת טיורינג בעלת סרט דו־כיווני באמצעות אוטומט בעל שתי מחסניות‪ ,‬כך שמחסנית אחת מכילה את כל‬
‫החלק של הסרט שמשמאל לראש והמחסנית השניה את כל החלק של הסרט שמימין לראש‪.‬‬
‫‪ .3‬מכונת טיורינג עם סרט בגודל קבוע )‪ .(LBA‬המודל הזה אינו שקול )חלש יותר!( למכונת טיורינג רגילה‪ .‬למעשה‪LBA ,‬־ים מזהים‬
‫בדיוק את כל השפות הרקורסיביות‪) .‬לא הוכחנו זאת פורמלית‪ ,‬אבל בהמשך ראינו ש־ ‪ ALBA‬היא ‪PSPACE‬־שלמה ובפרט כריעה‪,‬‬
‫בעוד ש־ ‪ AT M‬אינה כריעה‪(.‬‬
‫‪4.3‬‬
‫מכונת טיורינג אוניברסלית‬
‫זוהי מכונת טיורינג המקבלת כקלט מכונת טיורינג אחרת ומריצה אותה‪ .‬ראשית צריך יהיה לקודד מכונת טיורינג כקלט‪.‬‬
‫הא"ב יהיה }‪ .ΣU = {0, 1, #‬נקודד את ‪ M‬באמצעות ‪:ΣU‬‬
‫• שמות המצבים יהיו מספרים טבעיים } ‪ Q = {q0 , q1 , . . . , qn‬ונקודד אותם פשוט בתור מספרים‪ ,‬כאשר ‪ #‬מפרידה בין המצבים‬
‫ו־ ‪ ###‬מסמנת את סוף הקידוד‪:‬‬
‫‪hQi = 0000 · · · 000#0000 · · · 001#0000 · · · 010# · · · ###‬‬
‫• גם את אותיות ‪ Σ‬ו־ ‪ Γ‬נציג כמספרים טבעיים‪ ,‬שהרי גם ‪ .Σ ⊆ Γ‬נכתוב אותם בזה אחר זה‪ ,‬קודם ‪ hΣi‬ואח"כ ‪ hΓ \ Σi‬בקידוד‬
‫בינארי‪ ,‬מופרדים ע"י ‪.###‬‬
‫• נקודד את ‪ δ‬בתור זוגות כאשר מספר האפשרויות ל־ ‪ Q × Γ‬הרי סופי‪ .‬למשל‪ ,‬כדי לקודד את העובדה ש־ = ) ‪δ(q1 , γ2‬‬
‫)‪ (q0 , σ1 , L‬נכתוב על הסרט לפי הסדר את ‪ hq1 i, hγ2 i‬וכו'‪:‬‬
‫‪0000 · · · 001#10#0000 · · · 000#01#0##‬‬
‫• לבסוף‪ ,‬כדי לקודד את ‪ q0 , qacc , qrej‬נכתוב אותם בזה אחר זה על הסרט‪.‬‬
‫מטרתנו‪ .MU (hM i, hwi) = M (w) :‬יהיו לנו שלושה סרטים ‪ -‬וניתן להראות בקלות שזה שקול למכונת טיורינג רגילה עם סרט אחד‪:‬‬
‫‪ .1‬סרט הקלט של המכונה ‪ MU‬שעליו יהיו כתובות ‪hM i, hwi‬‬
‫‪ .2‬סרט שיכיל את הסימולציה של הסרט של ‪M‬‬
‫‪ .3‬סרט שיכיל את המצב שבו ‪ M‬נמצאת‬
‫האלגוריתם‪:‬‬
‫‪ .1‬שלב האתחול ‪ -‬נרצה לכתוב על סרט ‪ 2‬את המילה ‪ hwi‬ועל סרט ‪ 3‬את ‪ .hq0 i‬כדי לעשות זאת נרוץ ימינה בסרט ‪ 1‬עד שספרנו‬
‫‪ 7‬פעמים ‪ ###‬ושם תהיה ‪ .hwi‬מעתיקים אותה אות אחר אות‪ ,‬ומחזירים את הראש בסרט ‪ 1‬למקום שבו מקודד ‪hq0 i‬‬
‫ומעתיקים אותו לסרט ‪.3‬‬
‫‪ .2‬שלב הסימולציה ‪ -‬ראשית בודקים האם הגענו ל־ ‪ qacc , qrej‬ע"י השוואת סרט ‪ 3‬למה שכתוב בסרט ‪ 1‬במקומות המתאימים‪.‬‬
‫אחרת‪ ,‬צריך סימולציה של צעד ‪ ,δ‬ומוצאים "מה צריך לעשות" בסרט ‪ ,1‬מעתיקים לסרטים ‪ 2,3‬את התוצאה ומזיזים את הראש‬
‫על סרט ‪ 2‬ע"פ התוצאה‪.‬‬
‫נשים לב שניתן להרחיב את הרעיון הזה עוד ‪ -‬למשל‪ ,‬לבנות מכונה שמקבלת את השפה המשלימה לזו של ‪ ,M‬או מכונה שמקבלת‬
‫בנוסף מספר ‪ t‬שהוא מקסימום הצעדים שמותר לסימולציה לעשות‪ ,‬או חסם על גודל הסרט שאפשר להשתמש בו‪ ,‬וכו'‪.‬‬
‫‪20‬‬
‫‪4.4‬‬
‫מכונת טיורינג לא דטרמיניסטית‬
‫הגדרה ‪ 4.9‬מכונת טיורינג לא דטרמיניסטית מוגדרת בדיוק כמו מכונת טיורינג‪ ,‬למעט העובדה ש־ ‪ δ‬היא פונקציה → ‪δ : Q × Γ‬‬
‫)}‪.P(Q × Γ × {L, R‬‬
‫הערה ‪ 4.10‬משמעות הדבר שלמכונה כזו יכולות להיות כמה ריצות חוקיות על הקלט‪ ,‬ובכל שלב ייתכנו כמה מעברים חוקיים‪.‬‬
‫הגדרה ‪ 4.11‬נאמר שמכונת טיורינג לא דטרמיניסטית מקבלת את המילה ‪ w‬אם קיימת ריצה מקבלת שלה על ‪ .w‬נאמר שהמכונה‬
‫דוחה את ‪ w‬אם כל הריצות שלה על ‪ w‬דוחות‪ .‬לבסוף‪ ,‬נאמר שהמכונה אינה עוצרת על ‪ w‬אם לא קיימת ריצה מקבלת‪ ,‬אך קיימת‬
‫ריצה שאינה עוצרת‪.‬‬
‫הערה ‪ 4.12‬כלומר‪ ,‬גם במקרה שהמכונה מקבלת את המילה‪ ,‬ייתכנו ריצות שאינן עוצרות‪.‬‬
‫טענה ‪ 4.13‬תהי ‪ M‬מכונת טיורינג לא דטרמיניסטית‪ .‬אזי קיימת מכונת טיורינג דטרמיניסטית ‪ D‬כך ש־ ) ‪.L(D) = L(N‬‬
‫הוכחה‪ :‬אפשר להציג את הריצה של ‪ N‬על מילת קלט מסוימת בתור עץ שעוברים בו בין הקונפיגורציות שלה‪ .‬כמובן‪ ,‬ייתכן שהעץ‬
‫אינסופי‪.‬‬
‫נבנה את המכונה ‪ D‬בעזרת שלושה סרטים ‪ -‬סרט קלט‪ ,‬הסרט של המכונה ‪ ,N‬וסרט הכתובת‪ .‬לכל קונפיגורציה בעץ ניתן‬
‫כתובת ‪ -‬ההחלטות שצריך לקבל כדי להגיע לקונפיגורציה הזאת מהקונפיגורציה ההתחלתית‪) .‬הכוונה ב"החלטה" לבחירה בין מספר‬
‫אפשרויות במצב שבו למכונה יש מספר אפשרויות‪(.‬‬
‫בהינתן כתובת על סרט הכתובת אנחנו נדע לסמלץ על הסרט של ‪ N‬את המסלול המתאים לכתובת )שהוא דטרמיניסטי(‪ .‬כל‬
‫שנותר הוא לעבור על הכתובות לפי סדר ‪ ,BFS‬וברור שאפשר לעשות את זה‪ .‬כאשר נתקלים בקונפיגורציה מקבלת ‪ -‬מקבלים‪ .‬אם כל‬
‫הענפים הסתיימו בקונפיגורציות דוחות ‪ -‬דוחים‪.‬‬
‫הערה ‪ 4.14‬הקושי עם הבנייה הנ"ל הוא מבחינת זמן הריצה‪ .‬בכל צומת יכול להיות מספר סופי של התפצלויות‪ ,‬לכל היותר‬
‫|}‪ .b = |Q × Γ × {L, R‬נתבונן למשל במקרה שבו המכונה מקבלת‪ .‬נניח שהריצה המקבלת הקצרה ביותר על ‪ w‬היא באורך )|‪,g(|w‬‬
‫אז ‪ D‬עלולה לעבור על ))|‪ bO(g(|w‬קונפיגורציות‪ ,‬כלומר מספר אקספוננציאלי של פעולות ביחס למכונה המקורית‪.‬‬
‫‪4.5‬‬
‫פונקציות חשיבות‬
‫במקום מכונת טיורינג שהפלט שלה הוא כן‪/‬לא‪ ,‬נסתכל על פונקציות‪.‬‬
‫הגדרה ‪ 4.15‬פונקציה ∗‪ f : Σ∗ → Σ‬היא חשיבה )‪ (computable‬אם קיימת מכונת טיורינג ‪ M‬שמקבלת ∗‪ ,w ∈ Σ‬רצה ותמיד עוצרת‪,‬‬
‫והתוכן של הסרט הוא )‪) .f (w‬אפשרות שקולה היא שלמכונה יהיו שני סרטים‪(.‬‬
‫דוגמאות לפונקציות חשיבות‪:‬‬
‫‪ .1‬למשל‪ ,‬ראינו )פחות או יותר( שפונקציה שמוסיפה ‪ 1‬למספר הנתון בבינארי היא פונקציה חשיבה‪:‬‬
‫‪ .2‬כמובן‪ ,‬הפונקציה לא חייבת לפעול על מספרים‪ .‬למשל‪ ,‬פונקציה שמקבלת ‪ hAi‬קידוד של ‪ NFA‬ומחשבת ‪ hBi‬קידוד של ‪DFA‬‬
‫השקול לו היא פונקציה חשיבה ‪ -‬צריך לשתכנע שאלגוריתם הדטרמיניזציה אכן ניתן למימוש בעזרת מכונת טיורינג‪.‬‬
‫‪ .3‬ראינו ש־ ‪ |N| = ℵ0‬ובדיסקרטית מוכיחים ש־ ‪ |N × N| = ℵ0‬ע"י כך שיוצרים פונקציה חח"ע ועל מ־ ‪ N‬ל־ ‪ .N × N‬נרצה‬
‫עכשיו להסתכל על פונקציה אחת כזאת‪:‬‬
‫···‬
‫‪4‬‬
‫‪10‬‬
‫‪3‬‬
‫‪6‬‬
‫‪9‬‬
‫‪2‬‬
‫‪3‬‬
‫‪5‬‬
‫‪8‬‬
‫‪1‬‬
‫‪1‬‬
‫‪2‬‬
‫‪4‬‬
‫‪7‬‬
‫‪i/j‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪21‬‬
‫אפשר לכתוב לה גם נוסחא סגורה‪:‬‬
‫)‪(i + j − 2)(i + j − 1‬‬
‫‪+j‬‬
‫‪2‬‬
‫= )‪f (i, j‬‬
‫הפונקציה הזאת‪ ,‬כמובן‪ ,‬חשיבה ‪ -‬אנו יודעים לחסר‪ ,‬לחבר‪ ,‬לכפול ולחלק בשתיים )שלמים( באמצעות מכונת טיורינג‪.‬‬
‫‪ .4‬לפונקציה )‪ (3‬יש גם הפכית ‪ -‬אפשר לכתוב לה במפורש נוסחא אריתמטית והיא תהיה חשיבה‪ .‬אולם אנו נרצה אלגוריתם אחר‬
‫ נניח שרוצים למצוא את )‪:f −1 (k‬‬‫• נכתוב על הסרט את המשבצת השמאלית עליונה‪ ,‬נפעיל את ‪ f‬ונקבל )‪.f (1, 1‬‬
‫• אם קיבלנו את ‪ - k‬דיינו‪.‬‬
‫• אחרת‪ ,‬נתקדם לתא הבא ‪ (2, 1) -‬ומשם ל־ )‪ (1, 2‬ומשם ל־ )‪ (3, 1‬וכן הלאה‪.‬‬
‫האופן המדויק שבו מקדמים את )‪ (i, j‬הוא כזה ‪ -‬אם ‪ i = 1‬אז מוסיפים לו ‪ 1‬ואת ‪ j‬מחזירים ל־ ‪ ;1‬אחרת‪ ,‬מקדמים את ‪ j‬ומחסרים‬
‫‪ 1‬מ־ ‪.i‬‬
‫כיוון ש־ ‪ k‬מספר טבעי‪ ,‬מובטח שהמכונה תעצור בסופו של דבר‪ .‬לכן ‪ f −1‬חשיבה‪.‬‬
‫‪ .5‬נבנה פונקציה }‪ f : {hM i} → {hM i‬המקבלת קידוד של מכונת טיורינג ומייצרת קידוד של מכונת טיורינג בעלת אותה שפה‬
‫שלעולם לא מגיעה למצב הדוחה‪ .‬כיצד הפונקציה פועלת? כאשר המכונה המקורית פונה ל־ ‪ qrej‬שלה‪ ,‬המכונה החדשה תפנה למצב‬
‫שבו היא תיתקע בלולאה אינסופית‪.‬‬
‫‪4.6‬‬
‫‪Random Access Machine‬‬
‫נרצה להראות שקילות בין מכונות טיורינג‪ ,‬שעדיין לא נראות כל כך כמו מחשב‪ ,‬לבין מודל שלכאורה נראה חזק יותר ומאוד דומה‬
‫למחשב‪ ,‬אבל למעשה לא מציע שום כוח חישוב נוסף‪.‬‬
‫• ל־ ‪ RAM‬יש מערך זיכרון אינסופי וממוספר‪ ,‬כאשר התוכן של כל תא הוא מספר טבעי‪.‬‬
‫• התוכן ההתחלתי בכל תא הוא ‪.0‬‬
‫• יש פונקציה }‪ c : N ∪ {0} → N ∪ {0‬שמחזירה את התוכן של כל תא‪.‬‬
‫• יש תוכנית שהמכונה מריצה‪ ,‬ששמורה מחוץ לזיכרון‪.‬‬
‫• יש קלט ‪ -‬סדרה סופית של מספרים טבעיים‪.‬‬
‫• יש מונה )‪ (PC‬שזוכר איפה בריצת התוכנית אנחנו נמצאים‪.‬‬
‫• יש פונקציה ‪ v‬שאומרת מה הערך של האופרנד בפקודות שמיד נראה‪ .‬הפונקציה מוגדרת כך‪:‬‬
‫– ‪ - v(”= x”) = x‬אופרנד ששווה למספר קבוע כלשהו‬
‫– )‪ - v(”x”) = c(x‬אופרנד שקורא זיכרון ממקום כלשהו‬
‫– ))‪ - v(”∗x”) = c(c(x‬אופרנד שמבצע מיעון עקיף מהזיכרון‬
‫הפקודות האפשריות של המכונה הן‪:‬‬
‫המשמעות‬
‫)‪c(0) ← v(op‬‬
‫)‪c(v(op)) ← c(0‬‬
‫)‪c(0) ← c(0) + v(op‬‬
‫)‪c(0) ← c(0) − v(op‬‬
‫‪c(v(op)) ← NextInput‬‬
‫)‪P C ← v(op‬‬
‫)‪If c(0) > 0 then P C ← v(op‬‬
‫‪Accept‬‬
‫‪Reject‬‬
‫הפקודה‬
‫)‪LOAD(op‬‬
‫)‪STORE(op‬‬
‫)‪ADD(op‬‬
‫)‪SUB(op‬‬
‫)‪READTO(op‬‬
‫)‪JUMP(op‬‬
‫)‪JUMPIF > 0(op‬‬
‫‪ACCEPT‬‬
‫‪REJECT‬‬
‫טענה ‪ 4.16‬קיימת מכונת טיורינג שמקבלת קידוד של תוכנית ל־ ‪ RAM‬וקלט ואומרת האם התוכנית מקבלת או דוחה את הקלט‪.‬‬
‫‪22‬‬
‫הוכחה‪) :‬סקיצה( נצטרך ‪ 9‬סימנים לסימון סוגי הפקודות‪ ,‬קידוד של האופרנדים‪ ,‬וכן קידוד של הקלט‪ .‬את כל אלה נרשום ונפריד‬
‫ביניהם עם ‪ #‬כרגיל ‪ -‬על סרט הקלט‪ .‬על סרט נוסף נחזיק ייצוג של הזיכרון של המכונה שמריצה את התוכנית‪ ,‬ועוד סרטים לפי‬
‫הצורך עבור חישובים‪ .‬על הסרט הראשון נסמן גם על איזו פקודה אנחנו נמצאים‪ .‬על סרט הזיכרון נרשום זוגות )‪ (i, j‬עם המשמעות‬
‫שבתא ה־ ‪ i‬בזיכרון נמצא הערך ‪ ,j‬ובתנאים שלא נשתמשנו בהם נניח שמופיע ‪.0‬‬
‫כעת עלינו ללמוד לבצע את הפקודות של התוכנית‪.‬‬
‫‪ .1‬טיפול באופרנד ‪ -‬נרצה לשים על סרט החישוב השלישי את )‪ .v(op‬עבור ”‪ ” = x‬פשוט נעתיק את המספר ‪ x‬לסרט החישוב‪.‬‬
‫במקרים שדרושה גישה לזיכרון‪ ,‬נצטרך לרוץ על סרט הזיכרון ולחפש את הזוג )‪ (x, j‬ולהעתיק את ‪ j‬לסרט החישוב )או ‪ 0‬אם הוא‬
‫לא נמצא(‪ .‬עבור מיעון עקיף‪ ,‬נצטרך לחזור על זה פעמיים‪.‬‬
‫‪ .2‬טיפול בפקודות ‪ -‬עבור פקודות הקריאה‪/‬כתיבה מהזיכרון‪ ,‬מחשבים את )‪ v(op‬ומחפשים אותו בסרט הזיכרון‪ .‬את הפעולות‬
‫האריתמטיות אנחנו במילא יודעים לעשות‪ .‬עבור הפעולה ‪ READTO‬נצטרך לרוץ על ‪ w‬ולזכור מה עוד לא קראנו מתוכה‪ ,‬למשל‬
‫ע"י מחיקת החלקים שכבר קראנו‪ .‬עבור הפעולה ‪ JUMP‬נצטרך לעבור על הסרט הראשון למקום המתאים בתוכנית‪ ,‬וכנ"ל עבור‬
‫‪.JUMPIF > 0‬‬
‫לגבי ביצועים ‪ -‬על סרט הזיכרון‪ ,‬אם המכונה עשתה ‪ n‬צעדים‪ ,‬יש ‪ n‬תאים לכל היותר שכל אחד מכיל מספר עד ‪ ,k‬ואנו משתמשים‬
‫ב־ )‪ O(n log k‬מקום‪ .‬מספר מעברי ה־ ‪ δ‬יהיה )‪ O(n2 log k‬כי יש ‪ n‬צעדים‪ .‬בשאר הסרטים המקום די קבוע‪ .‬כלומר‪ ,‬הסימולציה‬
‫שלנו היא במספר פולינומיאלי של צעדים ביחס למספר הצעדים של המכונה המקורית‪.‬‬
‫‪5‬‬
‫כריעות ואי־כריעות‬
‫לאחר שראינו את המודל של מכונת טיורינג‪ ,‬נשאלת השאלה האם מודל זה יכול להכריע את כל השפות‪ .‬אפילו משיקולי ספירה ניתן‬
‫לראות שאין זה המצב; בפרק זה נגיע למסקנות פורמליות בנושא‪.‬‬
‫‪5.1‬‬
‫המחלקות ‪ RE ,R‬ואי־כריעות‬
‫הגדרה ‪ 5.1‬נסמן ב־ ‪) R‬שפות רקורסיביות‪ (recursive ,‬את מחלקת השפות הניתנות להכרעה ע"י מכונת טיורינג‪ .‬נסמן ב־ ‪) RE‬שפות‬
‫הניתנות למניה רקורסיבית‪ (recursively enumerable ,‬את מחלקת השפות שניתנות לזיהוי ע"י מכונת טיורינג‪.‬‬
‫נסמן ב־ ‪ coRE‬את מחלקת השפות ‪ L‬כך ש־ ‪) .L ∈ RE‬במילים אחרות‪ ,‬קיימת מכונת טיורינג שעוצרת ומקבלת מילים שאינן‬
‫ב־ ‪ ,L‬אבל על מילים ב־ ‪ L‬היא דוחה או נתקעת‪(.‬‬
‫הערה ‪ 5.2‬כמובן‪ .R ⊆ RE ,‬בהמשך נראה ש־ ∅ =‪.RE \ R 6‬‬
‫משפט ‪) RE ∩ coRE = R 5.3‬כלומר‪ ,‬אם אפשר לזהות שפה ואת המשלים שלה ‪ -‬אזי היא ניתנת להכרעה(‪.‬‬
‫הוכחה‪ :‬תחילה נראה ש־ ‪ .R ⊆ RE ∩ coRE‬אנו יודעים שאם ‪ L ∈ R‬אז גם ‪ ,L ∈ R‬שהרי אם במכונת טיורינג נחליף את ‪ qacc‬ב־‬
‫‪ qrej‬ולהיפך נקבל מ"ט עבור השפה המשלימה‪ .‬מכאן המסקנה‪.‬‬
‫כעת נראה ש־ ‪ .RE ∩ coRE ⊆ R‬אם ‪ M‬מזהה את ‪ L‬ו־ ‪ M‬מזהה את ‪ ,L‬נרצה להריץ במקביל את שתי המכונות ומובטח‬
‫שאחת מהן תעצור על כל מילה‪ .‬נעשה זאת כך‪:‬‬
‫המכונה החדשה ‪ ,M 0‬על המילה ‪:w‬‬
‫‪ .1‬תאתחל ‪i ← 1‬‬
‫‪ .2‬הרץ את ‪ M‬על ‪ w‬במשך ‪ i‬צעדים‪ :‬אם היא קיבלה‪ ,‬עצור וקבל‬
‫‪ .3‬הרץ את ‪ M‬על ‪ w‬במשך ‪ i‬צעדים‪ :‬אם היא קיבלה‪ ,‬עצור ודחה‬
‫‪ i ← i + 1 .4‬וחזור לשלב ‪2‬‬
‫ברור שכל איטרציה של הלולאה באמת עוצרת בזמן סופי‪ ,‬וכן ברור שנעצור בסופו של דבר ונצא מהלולאה ‪ -‬הרי אם ‪ w ∈ L‬אז‬
‫∈ ‪ w‬אז כנ"ל לגבי ‪ .M‬לכן ‪ M 0‬מכריעה את ‪ ,L‬כלומר ‪.L ∈ R‬‬
‫קיים ‪ i‬כך ש־ ‪ M‬עוצרת ומקבלת את ‪ w‬תוך ‪ i‬צעדים‪ ,‬ואם ‪/ L‬‬
‫∈ ‪.L‬‬
‫משפט ‪ 5.4‬קיימת שפה ‪/ R‬‬
‫הוכחה‪ :‬משיקולי ספירה‪ .‬למשל‪ ,‬קבוצת כל השפות מעל }‪ {0, 1‬היא מעוצמה ‪ .2ℵ0‬לעומת זאת‪ ,‬קבוצת כל מכונות הטיורינג מעל‬
‫אותה שפה היא קבוצה בת מניה‪ ,‬שכן מכונת טיורינג ניתנת לתיאור )קידוד( סופי‪ .‬מכאן‪ ,‬יש שפה שאין מכונת טיורינג שמכריעה‬
‫∈ ‪(.L‬‬
‫אותה‪) .‬זה גם אומר שיש שפה ‪/ RE‬‬
‫הערה ‪ 5.5‬אפשר להשתמש באותו טיעון גם להרבה דברים מעניינים נוספים‪ .‬למשל‪ ,‬יש מספר ממשי שלא ניתן לחשב‪ ,‬כלומר שלא‬
‫קיימת תוכנית שמדפיסה אותו‪ .‬זה שוב משיקולי ספירה ‪ -‬תוכנית מחשב ניתנת לקידוד סופי‪ ,‬ולכן קבוצת תוכניות המחשב היא בת‬
‫מניה‪ ,‬ואילו קבוצת המספרים הממשיים אינה בת מניה‪.‬‬
‫משפט ‪.R ( RE 5.6‬‬
‫‪23‬‬
‫∈ ‪ .AT M‬תחילה‪,‬‬
‫הוכחה‪ :‬נצביע במפורש על השפה }‪ AT M = {hM, wi : M accepts w‬ונראה ש־ ‪ AT M ∈ RE‬אבל ‪/ R‬‬
‫‪ AT M ∈ RE‬שכן קיימת ‪ MT M‬מכונת טיורינג שמזהה את ‪ AT M‬ופועלת כך‪ :‬היא מריצה את ‪ M‬על ‪ ,w‬ופועלת כמוה‪ .‬אכן‪MT M ,‬‬
‫תקבל את ‪ hM, wi‬אםם ‪ M‬מקבלת את ‪.w‬‬
‫כעת נניח בשלילה שקיימת מכונת טיורינג ‪ H‬שמכריעה את ‪ ,AT M‬כלומר על קלט ‪ hM, wi‬היא מקבלת אםם ‪ M‬מקבלת את ‪,w‬‬
‫ואחרת ‪ -‬דוחה )אבל תמיד עוצרת(‪ .‬נבנה בעזרתה את המכונה ‪ D‬שמקבלת קידוד ‪ hM i‬של מכונת טיורינג ופועלת כך‪:‬‬
‫(‬
‫‪ACC‬‬
‫= )‪D(hM i‬‬
‫‪REJ‬‬
‫‪M (hM i) = ACC‬‬
‫‪M (hM i) = REJ‬‬
‫אופן הפעולה של ‪ D‬הוא כזה‪ :‬על קלט ‪ ,hM i‬היא כותבת על הסרט ‪ hM ihM i‬ואז מריצה את ‪ H‬על הקלט החדש‪ .‬לבסוף‪ ,‬נבנה‬
‫מ־ ‪ D‬את המכונה ‪ D0‬הפועלת כך‪:‬‬
‫‪M (hM i) = ACC‬‬
‫‪M (hM i) = REJ‬‬
‫‪REJ‬‬
‫‪ACC‬‬
‫(‬
‫‪0‬‬
‫= )‪D (hM i‬‬
‫את זה אנחנו כבר יודעים לעשות ע"י החלפת המצב המקבל והדוחה ב־ ‪ .D‬כעת נותר רק להריץ את ‪ D0‬על עצמה‪:‬‬
‫‪D0 (hD0 i) = ACC‬‬
‫‪D0 (hD0 i) = REJ‬‬
‫(‬
‫‪REJ‬‬
‫‪ACC‬‬
‫‪0‬‬
‫‪0‬‬
‫= )‪D (hD i‬‬
‫∈ ‪.AT M‬‬
‫שתי האפשרויות לא ייתכנו‪ ,‬ולכן קיבלנו סתירה‪ .‬לכן‪/ R ,‬‬
‫∈ ‪.AT M‬‬
‫מסקנה ‪/ coRE 5.7‬‬
‫המסקנה היא מרחיקת לכת‪ .‬יש בעיות שלא ניתן להכריע אותן ‪ -‬ויש לנו כעת הכלי התיאורטי כדי להראות את זה‪ .‬אז הנה דוגמה‬
‫נוספת‪ ,‬שנשתמש בה ברדוקציה )נגדיר בהמשך במדויק מהי רדוקציה(‪.‬‬
‫∈ }‪) HALTT M = {hM, wi : M halts on w‬בעיית העצירה(‪.‬‬
‫טענה ‪/ R 5.8‬‬
‫הוכחה‪ :‬נראה שאם ‪ HALTT M ∈ R‬אז גם ‪ AT M ∈ R‬ונקבל את הסתירה‪ .‬ובכן אם ‪ HALTT M ∈ R‬אז תהי ‪ T‬מ"ט שמכריעה‬
‫את ‪ .HALTT M‬נבנה מ"ט ‪ S‬שמכריעה את ‪ AT M‬כך‪ :‬על קלט ‪:hM i, w‬‬
‫‪ .1‬נריץ את ‪ T‬על הזוג ‪ .hM i, w‬אם ‪ T‬דוחה‪ ,‬נדחה‪.‬‬
‫‪ .2‬אם ‪ T‬מקבלת את ‪ hM i, w‬אז נריץ את ‪ M‬על ‪ w‬ונענה כמוה )מובטח לנו ש־ ‪ M‬תעצור!(‪.‬‬
‫∈ }‪.REGT M = {hM i : M is a TM, L(M ) ∈ REG‬‬
‫טענה ‪/ R 5.9‬‬
‫הוכחה‪ :‬נניח בשלילה שיש מ"ט ‪ T‬המכריעה את ‪ REGT M‬ונבנה מ"ט ‪ S‬שמכריעה את ‪ .AT M‬בהינתן ‪ hM i, w‬נייצר מ"ט ‪ M 0‬מעל‬
‫הא"ב }‪ {0, 1‬אשר על קלט ∗}‪ x ∈ {0, 1‬פועלת כך‪:‬‬
‫‪ .1‬אם ‪ x‬מהצורה ‪ ,0n 1n‬נקבל‪.‬‬
‫‪ .2‬אחרת‪ ,‬נריץ את ‪ M‬על ‪ w‬ונקבל אםם ‪ M‬מקבלת את ‪.w‬‬
‫∈ }‪ .L(M 0 ) = {0n 1n : n ≥ 0‬לעומת זאת‪ ,‬אם ‪ M‬מקבלת את ‪ ,w‬אז‬
‫כעת נשים לב שאם ‪ M‬לא מקבלת את ‪ ,w‬אז ‪/ REG‬‬
‫‪ .L(M 0 ) = Σ∗M 0 ∈ REG‬כלומר‪ M 0 ∈ REGT M ⇐⇒ L(M 0 ) ∈ REG ⇐⇒ (hM i, w) ∈ AT M ,‬ובזאת השלמנו את הבנייה‪.‬‬
‫‪5.2‬‬
‫סגירות ‪ R‬ו־ ‪RE‬‬
‫טענה ‪.L, M ∈ RE =⇒ L ∪ M ∈ RE .1 5.10‬‬
‫‪.L, M ∈ RE =⇒ L ∩ M ∈ RE .2‬‬
‫‪.L ∈ R =⇒ L ∈ R .3‬‬
‫‪.L ∈ RE =⇒ L∗ ∈ RE .4‬‬
‫‪L, M ∈ RE =⇒ L · M ∈ RE .5‬‬
‫‪24‬‬
‫הוכחה‪ .1 :‬מריצים את המכונות "במקביל" ומקבלים אם אחת מהן מקבלת‪) .‬ההרצה "במקביל" משמעותה שמבצעים ‪ t‬צעדים של כל‬
‫אחת מהמכונות‪ ,‬מסתכלים על התוצאה‪ ,‬ואז מקדמים את ‪ t‬במידת הצורך‪(.‬‬
‫‪ .2‬מריצים את שתי המכונות "במקביל" ומקבלים אם שתיהן מקבלות‪) .‬כאן אין אפילו צורך בהרצה אינקרמנטלית‪ ,‬כי אם אחת‬
‫המכונות נתקעת‪ ,‬במילא המילה אינה בחיתוך השפות‪(.‬‬
‫‪ .3‬מחליפים בין ‪ qacc‬ל־ ‪ .qrej‬נשים לב שזה לא נכון לגבי ‪) RE‬למשל‪ AT M ∈ RE ,‬אבל ‪/ RE‬‬
‫∈ ‪ ,AT M‬שכן אחרת‬
‫‪ AT M ∈ coRE‬ואז ‪.(AT M ∈ RE ∩ coRE = R‬‬
‫‪ .4‬נשתמש במכונת טיורינג עם סרט דו־מימדי‪ .‬כשמקבלים את מילת הקלט ‪ ,w‬נכתוב את כל החלוקות האפשריות שלה ל־‬
‫‪ ,w1 , . . . , wk‬כל חלוקה על שורה משלה של הסרט‪ .‬עבור ‪ t‬הולך וגדל‪ ,‬נריץ את המכונה של ‪ L‬במקביל על כל שורה )כאשר בכל‬
‫שורה‪ L ,‬רצה במקביל על כל החלקים( במשך ‪ t‬צעדים‪ .‬אם ∗‪ ,w ∈ L‬יהיה ‪ t‬ושורה מתאימה שעבורם נקבל‪ .‬לכן‪.L∗ ∈ RE ,‬‬
‫אפשרות אחרת היא להשתמש במכונת טיורינג לא דטרמיניסטית‪ ,‬שבוחרת בצורה לא דטרמיניסטית חלוקה של ‪ w‬ומריצה עליה‬
‫את ‪ L‬כנ"ל‪) .‬ובכל מקרה‪ ,‬ר' תרגיל ‪ 6‬שאלה ‪(.4‬‬
‫אם מתמקדים ב־ ‪ ,R‬אפשר גם להשתמש באלגוריתם תכנון דינאמי )ר' תרגיל ‪ ,9‬שאלה ‪ .(5‬הרעיון הוא להסתכל על כל התת־‬
‫מחרוזות ולבדוק האם הן ב־ ∗‪ ,L‬כאשר מקרה הבסיס הוא התת־מחרוזת הריקה ותת־מחרוזות שהן ב־ ‪ .L‬זה מאפשר גם לקבל זמן‬
‫ריצה יעיל ‪ -‬ריבועי בזמן הריצה של המכונה המכריעה את ‪.L‬‬
‫‪ .5‬בדומה ל־ ∗‪ ,L‬בהינתן מילה ‪ w‬נסתכל על כל המקומות ‪ i‬שבהם ניתן לחלק את המילה לשני חלקים‪ ,‬ונכתוב כל אפשרות על‬
‫שורה משלה‪ .‬עבור ‪ t‬הולך וגדל‪ ,‬נריץ את המכונה של ‪ L‬והמכונה של ‪ M‬במקביל על כל שורה )כאשר בכל שורה‪ L ,‬רצה על החלק‬
‫הראשון ו־ ‪ M‬על החלק השני( במשך ‪ t‬צעדים‪.‬‬
‫‪5.3‬‬
‫רדוקציית מיפוי‬
‫הגדרה ‪ 5.11‬שפה ∗‪ A ⊆ Σ‬ניתנת לרדוקציית מיפוי לשפה ∗‪ B ⊆ Σ‬ונסמן ‪ A ≤m B‬אם קיימת פונקציה חשיבה ∗‪ f : Σ∗ → Σ‬כך‬
‫שלכל ∗‪ w ∈ Σ‬מתקיים ‪.w ∈ A ⇐⇒ f (w) ∈ B‬‬
‫הערה ‪ 5.12‬רדוקציית מיפוי אינה סימטרית‪ ,‬כלומר אם ‪ A ≤m B‬אין הכרח שגם ‪ .B ≤m A‬למשל‪ 01∗ ≤m AT M ,‬אבל ממש לא‬
‫ההיפך‪ .‬זאת משום שההפכית של פונקציה חשיבה אינה בהכרח חשיבה‪/‬קיימת!‬
‫משפט ‪ 5.13‬אם ‪ A ≤m B‬ו־ ‪ ,B ∈ R‬אז ‪.A ∈ R‬‬
‫הוכחה‪ :‬בהינתן מכונת טיורינג ‪ MB‬המכריעה את ‪ B‬נבנה מ"ט ‪ MA‬המכריעה את ‪ .A‬היא תפעל כך על הקלט ‪ :w‬תחשב את )‪f (w‬‬
‫ותריץ את ‪ MB‬על התוצאה‪ MA .‬תחזיר את את התשובה של ‪.MB‬‬
‫∈ ‪.B‬‬
‫∈ ‪ ,A‬אז ‪/ R‬‬
‫מסקנה ‪ 5.14‬אם ‪ A ≤m B‬ו־ ‪/ R‬‬
‫טענה ‪ 5.15‬אם ‪ A ≤m B‬ו־ ‪ ,B ∈ RE‬אז ‪.A ∈ RE‬‬
‫הוכחה‪ :‬באופן סימטרי לחלוטין ל"משפט" שראינו קודם‪.‬‬
‫∈ ‪.B‬‬
‫∈ ‪ ,A‬אז ‪/ RE‬‬
‫מסקנה ‪ .1 5.16‬אם ‪ A ≤m B‬ו־ ‪/ RE‬‬
‫‪ .2‬אם ‪ A ≤m B‬ו־ ‪ ,B ∈ coRE‬אז ‪.A ∈ coRE‬‬
‫∈ ‪.B‬‬
‫∈ ‪ ,A‬אז ‪/ coRE‬‬
‫‪ .3‬אם ‪ A ≤m B‬ו־ ‪/ coRE‬‬
‫טענה ‪) 5.17‬טריוויאלית( רדוקציית מיפוי היא טרנזיטיבית‪ ,‬כלומר ‪.A ≤m B ∧ B ≤m C =⇒ A ≤m C‬‬
‫דוגמאות לרדוקציות מיפוי פשוטות‪:‬‬
‫‪ .1‬פורמליזציה של ‪ .AT M ≤m REGT M‬בנינו את הפונקציה החשיבה שמייצרת מ־ )‪ (hM i, w‬את המ"ט ‪ ,M 0‬ומתקיים‬
‫‪.(hM i, w) ∈ AT M ⇐⇒ f (hM i, w) ∈ REGT M ⇐⇒ M 0 ∈ REGT M ⇐⇒ L(M 0 ) ∈ REG‬‬
‫‪0‬‬
‫‪ .2‬פורמליזציה של ‪ .AT M ≤m HALTT M‬נבנה את הפונקציה החשיבה שמייצרת מ־ )‪ (hM i, w‬את המ"ט ‪ M‬שמריצה את ‪M‬‬
‫על ‪ ,w‬מקבלת אם ‪ M‬מקבלת את ‪ w‬ואחרת נכנסת ללולאה אינסופית )כלומר אפילו אם ‪ M‬דוחה‪ M 0 ,‬נכנסת ללולאה אינסופית(‪.‬‬
‫אז מתקיים ‪.(hM i, w) ∈ AT M ⇐⇒ M 0 ∈ HALTT M‬‬
‫‪ε‬‬
‫‪ .3‬נראה ש־ }‪ AεT M = {hM i : M accepts ε‬אינה כריעה באמצעות רדוקציה ‪ .AT M ≤m AT M‬בהינתן זוג ‪ hM i, w‬הרדוקציה‬
‫תפלוט מכונה ‪ hM 0 i‬שתפעל כך‪ :‬בתחילת הריצה היא תדפיס את המילה ‪ w‬על הסרט‪ ,‬תחזיר את הראש לתחילת הסרט‪ ,‬ותמשיך‬
‫לרוץ על פי כללי המעבר של ‪ .M‬קל לראות ש־ ‪.(hM i, w) ∈ AT M ⇐⇒ hM 0 i ∈ AεT M‬‬
‫∈ }‪.IN FT M = {hM i : L(M ) is infinite‬‬
‫טענה ‪/ RE ∪ coRE 5.18‬‬
‫‪25‬‬
‫הוכחה‪ :‬תחילה נראה ש־ ‪ .AT M ≤m IN FT M‬ובכן‪ ,‬עבור ‪ hM i, w‬נבנה מ"ט ‪ T‬שפועלת כך על קלט ‪:x‬‬
‫‪ T .1‬מסמלצת את ‪ M‬על ‪.w‬‬
‫‪ .2‬אם ‪ M‬דוחה את ‪ T ,w‬דוחה;‬
‫‪ .3‬אחרת‪ ,‬אם |‪ |x‬זוגי אז ‪ T‬מקבלת ‪ ,4‬ואחרת ‪ T‬דוחה‪.‬‬
‫מקבלים ש־ ∅ = ) ‪ L(T‬אם ‪ M‬לא מקבלת את ‪ ,w‬ואחרת ) ‪ L(T‬אינסופית‪ .‬כלומר‪.(hM i, w) ∈ AT M ⇐⇒ hT i ∈ IN FT M ,‬‬
‫∈ ‪.AT M‬‬
‫∈ ‪ ,IN FT M‬שהרי ‪/ coRE‬‬
‫לכן ‪/ coRE‬‬
‫כעת נראה ש־ ‪ .AT M ≤m IN FT M‬בהינתן ‪ hM i, w‬נבנה מ"ט ‪ T‬שפועלת כך על קלט ‪:x‬‬
‫‪ .1‬אם ‪ M‬מקבלת את ‪ w‬תוך |‪ |x‬צעדים‪ ,‬אז ‪ T‬דוחה‪.‬‬
‫‪ .2‬אחרת‪ T ,‬מקבלת‪.‬‬
‫כעת אם ‪ M‬לא מקבלת את ‪ ,w‬הרי ש־ ∗‪ L(T ) = Σ‬ובפרט אינסופית‪ .‬לעומת זאת‪ ,‬אם ‪ M‬מקבלת את ‪ w‬אז יש ריצה באורך‬
‫‪ t‬המקבלת את ‪ ,w‬ולכן }‪ ,L(T ) ⊆ {x : |x| < t‬ובפרט סופית‪ .‬קיבלנו ש־ ‪ .(hM i, w) ∈ AT M ⇐⇒ hT i ∈ IN FT M‬לכן‬
‫∈ ‪.AT M‬‬
‫∈ ‪ ,IN FT M‬שהרי ‪/ RE‬‬
‫‪/ RE‬‬
‫טענה ‪ AT M 5.19‬היא ‪RE‬־שלמה‪ ,‬כלומר לכל ‪ L ∈ RE‬מתקיים ‪.L ≤m AT M‬‬
‫הוכחה‪ :‬תרגיל ‪ ,8‬שאלה ‪) .4‬זה ממש קל‪(.‬‬
‫∈ } ∗‪ALLT M = {hM i : L(M ) = Σ‬‬
‫טענה ‪/ RE ∪ coRE 5.20‬‬
‫∈ }) ‪EQT M = {hM1 , M2 i : L(M1 ) = L(M2‬‬
‫מסקנה ‪/ RE ∪ coRE 5.21‬‬
‫הוכחה‪) :‬תרגיל ‪ ,8‬שאלה ‪ (3‬מדובר ברדוקציות הבסיסיות ביותר מ־ ‪ AT M‬ו־ ‪ .AT M‬למשל‪ AT M ≤m ALLT M ,‬על ידי כך שמ־‬
‫‪ hM, wi‬בונים מכונה ‪ M 0‬שעל כל קלט מריצה את ‪ M‬על ‪ w‬ועונה כמוה‪ .‬ולהיפך‪ AT M ≤ ALLT M ,‬על ידי כך שמ־ ‪ hM, wi‬בונים‬
‫מכונה ‪ M 0‬שעל קלט |‪ |x‬מריצה את ‪ M‬על ‪ w‬במשך |‪ |x‬צעדים‪ ,‬ומקבלת אםם ‪ M‬לא מקבלת‪ .‬את המסקנה אפשר להוכיח ישירות‪,‬‬
‫או ע"י רדוקציה ‪ ALLT M ≤m EQT M‬באמצעות מכונה שמקבלת את ∗‪.Σ‬‬
‫‪5.4‬‬
‫אנומרטורים )מונים(‬
‫הגדרה ‪ 5.22‬אנומרטור )‪ (enumerator‬זו מכונת טיורינג עם מדפסת‪ .‬אופי העבודה ‪ -‬יש למכונה סרט עבודה אבל מדי פעם היא כותבת‬
‫משהו על סרט הפלט שלה‪ ,‬שממנו היא לא יכולה לקרוא או למחוק‪ .‬מילה היא בשפה של האנומרטור אםם היא מודפסת בסופו של‬
‫דבר ע"י האנומרטור‪.‬‬
‫משפט ‪ L ∈ RE 5.23‬אםם קיים אנומרטור ‪ E‬כך ש־ ‪.L(E) = L‬‬
‫הוכחה‪ (⇒) :‬בהינתן ‪ E‬נייצר ‪ M‬שמזהה את )‪ .L(E‬היא תפעל כך‪ :‬בהינתן מילה ‪ M ,w‬מריצה את ‪ ,E‬ובכל פעם ש־ ‪ E‬מדפיסה‬
‫מילה ‪ M ,y‬בודקת האם ‪ w = y‬ואם כן ‪ -‬עוצרת ומקבלת‪.‬‬
‫)⇐( בהינתן ‪ M‬שמזהה את ‪ L‬נבנה ‪ E‬כך ש־ ‪ .L(E) = L‬אנו יודעים ש־ ∗‪ Σ‬בת מניה‪ ,‬ונתבונן בסידור )למשל‪ ,‬לקסיקוגראפי(‬
‫של ∗‪ .Σ‬לסידור נקרא ‪ .w0 , w1 , . . .‬כעת ‪ E‬תפעל כך‪ :‬עבור ‪ i = 1, 2, . . .‬היא תריץ את ‪ M‬על המילים ‪ w0 , w1 , . . . , wi‬במשך ‪i‬‬
‫צעדים על כל מילה‪ .‬אם ‪ M‬קיבלה מילה מסוימת‪ E ,‬תדפיס אותה‪.‬‬
‫ואמנם‪ ,‬כל מילה ‪ w‬שמתקבלת ע"י ‪ ,M‬מתקבלת תוך איזה ‪ j‬צעדים‪ ,‬ותודפס ע"י ‪ E‬אינסוף פעמים החל מהאיטרציה ה־ ‪.j‬‬
‫טענה ‪ 5.24‬תהי ‪ L ∈ RE‬שפה אינסופית‪ .‬אז קיימת שפה אינסופית ‪ L0 ⊆ L‬כך ש־ ‪) .L0 ∈ R‬מסיכום תרגול ‪(7‬‬
‫הוכחה‪ :‬יהי ‪ E‬האנומרטור של ‪ .L‬נגדיר את השפה‬
‫}‪w‬‬
‫‪before printing‬‬
‫‪w‬‬
‫‪only prints words shorter than‬‬
‫‪L0 = {w ∈ L : E‬‬
‫קל לראות שהשפה אינסופית‪ ,‬שכן אם היא הייתה סופית יש בה את המילה הארוכה ביותר ‪ w0‬ו־ ‪ E‬לא מדפיס מילים יותר‬
‫ארוכות מ־ ‪ w0‬לאחר הדפסתה ‪ -‬בסתירה לכך ש־ ‪ L‬אינסופית‪.‬‬
‫כמו כן‪ - L0 ∈ R ,‬נבנה מ"ט שבהינתן מילה ‪ w‬מריצה את ‪ E‬כל עוד מודפסות מילים שקצרות מ־ ‪ .w‬יש מספר סופי של כאלה‪.‬‬
‫אם מודפסת מילה ארוכה יותר‪ ,‬עוצרים ודוחים; אם ‪ w‬הודפסה‪ ,‬מקבלים‪.‬‬
‫‪4‬הבחירה בתנאי הזה שרירותית לחלוטין‪.‬‬
‫‪26‬‬
‫‪5.5‬‬
‫אוניברסאליות של דקדוקים חסרי הקשר‬
‫נרצה לבדוק האם ניתן להכריע באמצעות מכונת טיורינג את השפה‪:‬‬
‫} ‪ALLCF G = {hGi : G ∈ CF G ∧ L(G) = Σ∗G‬‬
‫כלומר‪ ,‬לזהות דקדוקים חסרי הקשר שניתן לגזור מהם את כל המילים‪.‬‬
‫ראינו קודם אלגוריתם לבדיקת שייכות של מילה לדקדוק‪ ,‬זה היה אלגוריתם תכנון דינאמי‪ .‬מהאלגוריתם הנ"ל ניתן להסיק ש־‬
‫‪ ALLCF G ∈ coRE‬באמצעות מכונת טיורינג כדלקמן‪:‬‬
‫• על כל מילה ‪) w ∈ Σ∗G‬למשל‪ ,‬בסדר לקסיקוגראפי( נבדוק האם )‪ .w ∈ L(G‬אם לא‪ ,‬נדחה את ‪.hGi‬‬
‫• אחרת‪ ,‬ממשיכים למילה הבאה‪.‬‬
‫∈ ‪ w‬ונדחה ולכן ‪.ALLCF G ∈ coRE‬‬
‫ברור שאם ∗‪ ,L(G) 6= Σ‬בסופו של דבר נגיע למילה )‪/ L(G‬‬
‫∈ ‪.(ALLCF G‬‬
‫∈ ‪) ALLCF G‬למעשה מספיק להראות ש־ ‪/ RE‬‬
‫אבל כעת נראה ש־ ‪/ R‬‬
‫משפט ‪ 5.25‬לכל מ"ט ‪ M‬מעל א"ב ‪ ΣM‬וקלט ‪ w ∈ Σ∗M‬קיים ‪ A‬אוטומט מחסנית כך ש־ ‪ L(A) = Σ∗A‬אםם ‪ M‬לא מקבלת את ‪.w‬‬
‫הוכחה‪ :‬נסתכל על הריצה של ‪ M‬על ‪ ,w‬המורכבת מסדרת קונפיגורציות ‪ .c0 , c1 , . . . , ck‬כל קונפיגורציה כזו אפשר לקודד ‪ -‬היא‬
‫מורכבת ממצב הסרט )מספר סופי של אי־‪ ,(t‬מיקום הראש‪ ,‬והמצב באוטומט‪ .‬נפריד בין הקונפיגורציות באמצעות ‪ #‬למשל‪ .‬נדבר‬
‫ספציפית של שפת הקידודים של סדרת קונפיגורציות שהיא תקינה עבור המכונה ‪ M‬והמילה ‪ w‬ומקבלת‪ .‬סדרה כזאת קיימת אםם‬
‫‪ M‬מקבלת את ‪ ;w‬אחרת‪ ,‬אין כזאת‪.‬‬
‫קידוד של סדרת קונפיגורציות תקינה ומקבלת מקיים‪:‬‬
‫‪ c0 .1‬היא הקונפיגורציה ההתחלתית של ‪ M‬על ‪) .w‬המצב הוא ‪ ,q0‬הסרט מכיל את ‪ ,w‬והראש נמצא בתחילת הסרט‪(.‬‬
‫‪ ck .2‬היא קונפיגורציה מקבלת‪) .‬המצב הוא ‪(.qacc‬‬
‫‪ .3‬כל מעבר מ־ ‪ ci‬ל־ ‪ ci+1‬תקין ב־ ‪.M‬‬
‫לכן קידוד שאינו כזה מקיים לפחות אחד משלושת הבאים‪:‬‬
‫‪ c0 .1‬אינה הקונפיגורציה ההתחלתית‪.‬‬
‫‪ ck .2‬אינה קונפיגורציה מקבלת‪.‬‬
‫‪ .3‬קיים מעבר ‪ ci → ci+1‬שאינו תקין‪.‬‬
‫נרצה לבנות אוטומט מחסנית שמקבל בדיוק את סדרות הקונפיגורציות שמקיימות אחד משלושת התנאים הנ"ל‪ .‬ניתן לעשות זאת‬
‫לכל תנאי בנפרד כי אוטומט מחסנית הוא לא דטרמיניסטי ולכן יכול "להתפצל"‪:‬‬
‫‪ c0 .1‬היא מחרוזת קבועה כלשהי‪ ,‬אז אפשר כמובן לבנות "ענף" של האוטומט שיבדוק האם הוא קיבל משהו שאינו המחרוזת‬
‫הקבועה הזאת‪.‬‬
‫‪ .2‬בכל פעם שרואים ‪) #‬המפריד בין קונפיגורציות(‪" ,‬ננחש" באופן לא דטרמיניסטי שהגענו לקונפיגורציה האחרונה ובודקים האם‬
‫המצב שלה מקבל‪ .‬אם כן‪ ,‬צריך לבדוק שבאמת הגענו לקונפיגורציה האחרונה כדי להחליט‪.‬‬
‫‪ .3‬נצטרך "לנחש" בכל פעם מהו ה־ ‪ i‬שעבורו בודקים את התקינות‪ .‬חלק מהעניין זה לבדוק שמצב הסרט לא השתנה בין שתי‬
‫קונפיגורציות‪ ,‬וזה קצת דומה לשפה }‪ {ww‬שהיא לא חסרת הקשר! כדי להתמודד עם זה‪ ,‬לכל קונפיגורציה אי־זוגית על הסרט נעשה‬
‫‪- reverse‬‬
‫‪hc0 i#hc1 iR #hc2 i#hc3 iR # . . .‬‬
‫עכשיו זה כבר יותר דומה לשפה } ‪ {wwR‬שהיא חסרת הקשר ‪ -‬חוץ ממקום אחד שבו הסרט השתנה‪.‬‬
‫לסיכום‪ ,‬ראינו סקיצה של ‪ PDA‬שמקבל בדיוק את סדרת הקונפיגורציות הלא תקינות ו‪/‬או לא מקבלות של המכונה ‪ .M‬הדבר‬
‫היחיד שהאוטומט לא מקבל זו הריצה התקינה והמקבלת של ‪ ,M‬אם יש כזו‪ .‬לכן ‪ L(A) = Σ∗A‬אםם ‪ M‬לא מקבלת את ‪ ,w‬כנדרש‪.‬‬
‫∈ ‪.ALLCF G‬‬
‫מסקנה ‪/ R 5.26‬‬
‫הוכחה‪ :‬נניח בשלילה שכך המצב‪ ,‬אז יש מ"ט ‪ M0‬שמכריעה את ‪ .ALLCF G‬כעת נבנה מ"ט ‪ M1‬שמכריעה את ‪ AT M‬ונגיע לסתירה‬
‫)זוהי דוגמה לשימוש ברדוקציה באופן לא פורמלי(‪ M1 .‬תבנה את ה־ ‪ PDA‬מהמשפט ותכתוב את הקידוד שלו על הסרט‪ .‬לאחר מכן‬
‫היא תהפוך את הקידוד הזה לקידוד של ‪) CFG‬ראינו שזה אפשרי(‪ .‬נריץ את ‪ M0‬על הקידוד הזה ונדע האם ה־ ‪ PDA‬היה אוניברסאלי‪.‬‬
‫אם ‪ M0‬מחזירה "כן"‪ ,‬נחזיר "לא" ולהיפך‪ .‬לפי המשפט‪ ,‬זה בדיוק "האם ‪ M‬מקבלת את ‪ ,"w‬כלומר הכרענו את ‪ AT M‬וזו סתירה לכך‬
‫∈ ‪.AT M‬‬
‫ש־ ‪/ R‬‬
‫‪27‬‬
‫‪5.6‬‬
‫משפט רייס‬
‫∈ }‪.L1 = {hM i : ∃w ∈ L(M ), |w| > 5‬‬
‫טענה ‪/ coRE 5.27‬‬
‫הוכחה‪ :‬נראה רדוקציה ‪ .AT M ≤m L1‬מהקלט ‪ hM i, w‬נייצר את המכונה ‪ T‬שפועלת על קלט ‪ x‬כך‪:‬‬
‫‪ T .1‬מסמלצת את ‪ M‬על ‪.w‬‬
‫‪ .2‬אם ‪ M‬דוחה‪ T ,‬דוחה;‬
‫‪ .3‬אחרת‪ ,‬אם ‪ x = 0101101‬אז ‪ T‬מקבלת;‬
‫‪ .4‬אחרת‪ T ,‬דוחה‪.‬‬
‫קיבלנו ש־ }‪ L(T ) = {0101101‬כאשר ‪ M‬מקבלת את ‪ ,w‬ו־ ∅ = ) ‪ L(T‬אחרת‪ .‬לכן זוהי רדוקציה‪ ,‬ומכאן המסקנה‪.‬‬
‫נראה מתבקש שתהיה הכללה כלשהי לטענות מהסוג הזה‪ ,‬שתאפשר לטעון משהו על שפות של מכונות טיורינג‪ .‬לצורך כך נצטרך‬
‫הגדרה‪:‬‬
‫הגדרה ‪ P 5.28‬קבוצה של מכונות טיורינג נקראת תכונה‪ .‬תכונה נקראת סמנטית אם היא תלויה בשפה של המכונה‪ ,‬כלומר לכל שתי‬
‫מכונות טיורינג ‪ M1 , M2‬אם ) ‪ L(M1 ) = L(M2‬אזי ‪ .M1 ∈ P ⇐⇒ M2 ∈ P‬נאמר שתכונה היא טריוויאלית אם ∅ = ‪ P‬או ‪P‬‬
‫היא קבוצת כל המכונות טיורינג‪.‬‬
‫נסמן ב־ ‪ T0‬מ"ט המקיימת ∅ = ) ‪ .L(T0‬נסמן } ‪.L(P ) = {hM i : M ∈ P‬‬
‫∈ ) ‪(.L(P‬‬
‫∈ ‪ .T0‬אזי ) ‪) .AT M ≤m L(P‬ולכן גם ‪/ coRE‬‬
‫למה ‪ 5.29‬תהי ‪ P‬תכונה סמנטית לא טריוויאלית‪ .‬נניח ש־ ‪/ P‬‬
‫הוכחה‪ :‬תהי ‪ H ∈ P‬מכונה כלשהי )יש כזו כי ‪ P‬אינה טריוויאלית(‪ .‬עבור ‪ hM i, w‬נבנה מכונת טיורינג ‪ T‬הפועלת על הקלט ‪ x‬כך‪:‬‬
‫‪ T .1‬מסמלצת את ‪ M‬על ‪.w‬‬
‫‪ .2‬אם ‪ M‬דוחה‪ ,‬אז ‪ T‬דוחה;‬
‫‪ .3‬אחרת‪ T ,‬מריצה את ‪ H‬על ‪ x‬ועונה כמוה‪.‬‬
‫∈ ‪ T‬כי ‪ P‬היא תכונה סמנטית‪ .‬לחלופין‪ ,‬אם ‪M‬‬
‫התוצאה היא שאם ‪ M‬לא מקבלת את ‪ ,w‬אז ∅ = ) ‪ L(T0 ) = L(T‬ולכן ‪/ P‬‬
‫מקבלת את ‪ w‬אז )‪ L(T ) = L(H‬ושוב ‪ T ∈ P‬כי ‪ .H ∈ P‬בזאת השלמנו את הרדוקציה‪.‬‬
‫משפט ‪) 5.30‬משפט רייס( תהי ‪ P‬תכונה סמנטית לא טריוויאלית‪ .‬אז השפה } ‪ L(P ) = {hM i : M ∈ P‬אינה כריעה‪.‬‬
‫הוכחה‪ :‬כדי להוכיח את המשפט עלינו לטפל רק במקרה שבו ‪ P‬מכילה גם מכונות בעלות שפה ריקה‪ .‬ובכן‪ ,‬אם ‪ T0 ∈ P‬אז התכונה‬
‫∈ ) ‪ ,L(P‬אבל בעצם ) ‪ L(P ) = L(P‬ולכן קיבלנו את המשפט‪.‬‬
‫∈ ) ‪ .L(P‬לכן ‪/ RE‬‬
‫∈ ‪ T0‬ולפי הלמה ‪/ coRE‬‬
‫המשלימה ‪ P‬מקיימת ‪/ P‬‬
‫דוגמא לשימוש במשפט‪:‬‬
‫נתבונן בשפה }) ‪ .L = {hM i : ∀w ∈ Σ∗ , w ∈ L(M ) ⇐⇒ wwR wwR ∈ L(M‬נרצה להראות שהשפה אינה כריעה‪ ,‬ובשביל‬
‫זה צריך להשתכנע שהתכונה של ‪ M‬סמנטית ולא טריוויאלית‪ .‬קל לראות שזו תכונה סמנטית‪ ,‬שכן היא מתייחסת רק לשפה של‬
‫∈ ‪ ,L‬ולמעשה לפי הגרסה ההפוכה‬
‫המכונה ולא למכונה עצמה‪ .‬התכונה גם לא טריוויאלית‪ ,‬שהרי ‪ .hT0 i ∈ L‬לכן לפי משפט רייס ‪/ R‬‬
‫∈ ‪.L‬‬
‫של הלמה‪/ RE ,‬‬
‫‪5.7‬‬
‫דקדוקים פורמליים‬
‫הגדרה ‪ 5.31‬דקדוק פורמלי )‪ formal grammar‬או ‪sensitive grammar‬־‪ (context‬הוא רביעייה )‪ G = (V, Σ, R, S‬כאשר ‪ V‬קבוצת‬
‫משתנים‪ Σ ,‬א"ב של טרמינלים המקיים ∅ = ‪ R ,Σ ∩ V‬אוסף כללי גזירה ו־ ‪ S ∈ V‬משתנה התחלה; ובנוסף כלל גזירה הוא ביטוי‬
‫מהצורה ‪ x → y‬כאשר ∗) ‪ x ∈ (Σ ∪ V )∗ · V · (Σ ∪ V‬ו־ ∗) ‪.y ∈ (Σ ∪ V‬‬
‫דוגמא לדקדוק פורמלי‪:‬‬
‫‪→S‬‬
‫‪aBc‬‬
‫→‬
‫‪S‬‬
‫‪b|Bc|ε‬‬
‫→‬
‫‪C‬‬
‫‪bC‬‬
‫→‬
‫‪Bc‬‬
‫בדקדוק זה‪ ,‬אפשר לגזור את המילה ‪ ab‬באופן הבא‪.S → aBc → abC → ab :‬‬
‫טענה ‪ L ∈ RE 5.32‬אםם קיים דקדוק פורמלי ‪ G‬כך ש־ ‪.L(G) = L‬‬
‫‪28‬‬
‫הוכחה‪) :‬ר' תרגיל ‪ ,8‬שאלה ‪ (5‬סקיצת הוכחה‪:‬‬
‫בהינתן דקדוק פורמלי ומילה‪ ,‬אנו יכולים לבדוק את כל אפשרויות הגזירה של המילה בדקדוק באמצעות ‪) BFS‬כל התפצלות כי‬
‫מקום שבו אפשר להשתמש ביותר מאשר כלל גזירה אחד(‪ .‬אם המילה נגזרת מהדקדוק‪ ,‬בסופו של דבר נגיע אליה ונגזור אותה‪.‬‬
‫בכיוון השני‪ ,‬בהינתן שפה הניתנת למניה רקורסיבית ומ"ט המזהה אותה‪ ,‬ניתן לבנות דקדוק פורמלי שפעולתו מחקה את מהלך‬
‫הריצה של המכונה על מילת קלט כלשהי וניתן לגזור ממנו רק מילים שמתקבלות ע"י המכונה )ר' גם הטענה הבאה(‪.‬‬
‫טענה ‪ 5.33‬תהי })‪ .AG = {(hGi, w) : w ∈ L(G‬אזי ‪.AT M ≤m AG‬‬
‫הוכחה‪ :‬בהינתן קלט )‪ (hM i, w‬נבנה דקדוק ‪ G‬עם הכללים הבאים שגורמים לכך שתהליך הגזירה של ‪ G‬יחקה את תהליך הריצה‬
‫של ‪ M‬על ‪:w‬‬
‫‪w1‬‬
‫‪w2 w3 . . . wn #‬‬
‫‪q0‬‬
‫‪#‬‬
‫→‬
‫‪S‬‬
‫כאשר כאן ‪ wq01‬משמעו שהמצב הנוכחי הוא ‪ q0‬והראש הקורא‪/‬כותב נמצא מעל ‪ .w1‬עבור כלל מעבר מהצורה )‪δ(q1 , a) = (q2 , b, R‬‬
‫נייצר לכל ‪ c ∈ Γ‬את הכלל‪:‬‬
‫‪a‬‬
‫‪c‬‬
‫‪c → b‬‬
‫‪q1‬‬
‫‪q2‬‬
‫וכן את הכלל‬
‫‪a‬‬
‫‪t‬‬
‫‪#→b‬‬
‫‪q1‬‬
‫‪q2‬‬
‫וכנ"ל עבור כללים שבהם הראש הקורא‪/‬כותב פונה שמאלה‪ .‬כללי הגזירה האלה גורמים לכך שהדקדוק אחרי ‪ t‬צעדים גוזר‬
‫בדיוק את המילה המייצגת את ריצתה של ‪ M‬על ‪ w‬אחרי ‪ t‬צעדים‪ .‬אם ‪ M‬הגיעה למצב מקבל‪ ,‬היינו צריכים לגזור את‬
‫‪σ‬‬
‫‪σk+1 . . . σm #‬‬
‫‪ #σ1 σ2 . . . σk qacc‬ל־ ‪ ,ε‬ונעשה את זה על פי הכללים הבאים‪ ,‬לכל ‪:σ, a ∈ Γ‬‬
‫‪σ‬‬
‫‪P‬‬
‫→‬
‫‪qacc‬‬
‫→ ‪Pa‬‬
‫‪P‬‬
‫→‬
‫‪aP‬‬
‫‪ε‬‬
‫→‬
‫‪P‬‬
‫‪P‬‬
‫כעת ברור שאפשר לגזור את ‪ ε‬אםם ‪ M‬מגיעה ל־ ‪ ,qacc‬כלומר ‪ (hM i, w) ∈ AT M ⇐⇒ (hGi, ε) ∈ AG‬ובזאת השלמנו את‬
‫הרדוקציה‪.‬‬
‫‪5.8‬‬
‫בעיית ה־ ‪PCP‬‬
‫‪. xyii‬‬
‫אוסף הזוגות נמצא‬
‫הקלט הוא קבוצה של זוגות מחרוזות ) ‪ (x1 , y1 ), . . . , (xn , yn‬מעל א"ב ‪ .Σ‬כשנצייר אותם‪ ,‬יהיה נוח לכתוב‬
‫בשפה ‪ P CP‬אם קיימת סדרה לא ריקה של אינדקסים )מותרות חזרות( }‪ i1 , . . . , ik ∈ {1, . . . , n‬כך ש־ ‪.yi1 · · · yik = xi1 · · · xik‬‬
‫אם כן‪,‬‬
‫} ‪P CP = {(hxi , yi i)ni=1 : ∃(i1 , . . . , ik ) xi1 · · · xik = yi1 · · · yik‬‬
‫הערה ‪ 5.34‬קל לראות ש־ ‪ - P CP ∈ RE‬נעבור על כל סדרות האינדקסים בסדר לקסיקוגראפי ונבדוק האם קיבלנו פתרון‪ .‬אם יש‬
‫פתרון ‪ -‬בסופו של דבר אנחנו נמצא אותו‪.‬‬
‫∈ ‪.P CP‬‬
‫טענה ‪/ R 5.35‬‬
‫‪29‬‬
‫הוכחה‪ :‬נראה זאת באמצעות רדוקציה מ־ ‪ ,AG‬וכבר ראינו ש־ ‪ .AT M ≤m AG‬המטרה היא שצירוף "אבני הדומינו" של ‪ PCP‬יהיה‬
‫גזירה של מילה בדקדוק הפורמלי‪.‬‬
‫נתבונן בדוגמא של הדקדוק הפורמלי הבא‪:‬‬
‫‪→S‬‬
‫‪→ aSS|b‬‬
‫‪→ b‬‬
‫‪S‬‬
‫‪aS‬‬
‫וגזירה לדוגמא בדקדוק זה‪.S → aSS → bS → bb :‬‬
‫ניסיון ראשון‪ :‬מה שמופיע בחלק התחתון בשלב הגזירה הבא צריך להופיע בחלק העליון בשלב הקודם‪ .‬למשל‪ ,‬אם עד עכשיו גזרנו‬
‫‪β‬‬
‫את ‪ ,α‬אז השלב הבא יהיה‬
‫‪ α‬אם אפשר לגזור ‪ .α → β‬במונחי הדוגמא מקודם‪ ,‬נשים לב למשל שעבור השלב ‪ aSS → bS‬שמיוצג‬
‫‪b‬‬
‫‪ aS‬אנו צריכים לבטא גם את ה־ ‪ S‬שנשאר‪ .‬אז אפשר להשאיר גם בלוק מהצורה ‪ σσ‬לכל ‪ ,σ ∈ Σ ∪ V‬אבל זה בעייתי כי אז נוצר‬
‫ע"י‬
‫פתרון ל־‪ PCP‬אפילו בנוכחות בלוק אחד כזה‪ .‬נצטרך להימנע מהם‪.‬‬
‫ניסיון שני‪ :‬הבלוקים יהיו כדלקמן‪:‬‬
‫‪ σ‬את אותה משמעות כמו ל־ ‪ σ‬מבחינת חוקי הדקדוק המקורי‪.‬‬
‫‪ .1‬לכל ‪ σ ∈ Σ ∪ V‬יהיה לנו הבלוק ˜‪ σσ‬והבלוק ˜‪ , σσ‬כאשר נייחס ל־ ˜‬
‫˜‬
‫‪β‬‬
‫‪β‬‬
‫‪.α‬‬
‫‪ .2‬לכל כלל גזירה ‪ α → β‬יהיה לנו הבלוק ‪ α‬והבלוק ˜‬
‫‪ S#‬כאשר מסמן התחלה ו־ ‪ #‬מסמנת הפרדה בין שלבי הגזירה‪.‬‬
‫‪ .3‬בלוק התחלה‪:‬‬
‫‬
‫‬
‫‪ .4‬בלוק סיום‪ w# :‬כאשר מסמן סוף ו־ ‪ w‬היא מילת הקלט‪.‬‬
‫כדי לטפל בתווי ‪ ,#‬נאפשר בסוג הראשון של הבלוקים גם ‪ .σ = #‬להלן דוגמא לגזירה של המילה ‪ bb‬בדקדוק הפורמלי שהראינו‬
‫קודם‪:‬‬
‫‬
‫‪bb#‬‬
‫‪#‬‬
‫˜‬
‫‪#‬‬
‫‪b‬‬
‫‪˜b‬‬
‫‪b‬‬
‫‪˜b‬‬
‫˜‬
‫‪#‬‬
‫‪#‬‬
‫‪˜b‬‬
‫‪S‬‬
‫‪˜b‬‬
‫‪b‬‬
‫‪#‬‬
‫˜‬
‫‪#‬‬
‫‪S‬‬
‫˜‪S‬‬
‫‪b‬‬
‫‪a‬‬
‫˜‪˜S‬‬
‫˜‬
‫‪#‬‬
‫‪#‬‬
‫‪a‬‬
‫˜‪˜S˜S‬‬
‫‪S‬‬
‫‪S#‬‬
‫‬
‫נשים לב ששלב הגזירה האחרון היה הכרחי כי אין לנו בלוק שבחלקו התחתון יש ‪ ,˜b˜b‬אלא רק בלוק שיש בו ‪ .bb‬לכן אנו עושים‬
‫עוד צעד העתקה קצת מיותר שכזה‪.‬‬
‫כעת יש לנו תהליך חישוב שבונה קלט ל־‪ PCP‬מ־ ‪ .hGi, w‬אם )‪ w ∈ L(G‬אז יש גזירה ‪ S = γ1 → . . . → γm = w‬של המילה‬
‫ב־ ‪ .G‬הפתרון ‪ PCP‬המתאים הוא ‪˜ 2 # . . . #γm #‬‬
‫‪ ,S#γ˜1 #γ‬כאשר אם ‪ m‬אי־זוגי צריך בסוף ‪ γm˜#γm #‬כמו בגזירה מקודם‪.‬‬
‫להיפך‪ ,‬בהינתן פתרון לבעיית ה־‪ ,PCP‬ברור שבלוק ההתחלה צריך להיות ראשון ובלוק הסיום צריך להיות אחרון בהתאמת‬
‫המחרוזות‪ ,‬וכל שלבי הביניים מתאימים לכללי גזירה של ‪ .G‬כלומר‪ ,‬במחרוזת פתרון ה־‪ ,PCP‬כל מעבר הוא גזירה חוקית ב־ ‪.G‬‬
‫לכן ‪ AG ≤m P CP‬כפי שרצינו‪.‬‬
‫‪5.9‬‬
‫פונקציות לא־חשיבות‬
‫‪5‬‬
‫לפני שנעסוק בפונקציות‪ ,‬ננסה לחשוב על מספרים חשיבים‪ .‬למשל‪ ,‬האם לכל מספר ממשי ‪ x‬קיימת תוכנית מחשב )או מכונת טיורינג(‬
‫שפולטת את ‪ ?x‬קל לראות משיקולי ספירה שהתשובה היא שלילית ‪ -‬קבוצת המספרים הממשיים אינה בת־מניה‪ ,‬ואילו קבוצת‬
‫תוכניות המחשב ‪ -‬ואפילו קבוצת כל המחרוזות הסופיות ‪ -‬היא בת־מניה‪.‬‬
‫נרצה לראות שתי דוגמאות קונקרטיות לפונקציות לא־חשיבות ‪.f : N → N‬‬
‫‪ .1‬נסדר את כל המ"ט לפי סדר לקסיקוגראפי של התיאור שלהן ‪ .M1 , M2 , . . . -‬כעת נגדיר את הפונקציה ‪ f (i) = 1‬אם ‪Mi‬‬
‫עוצרת על ‪ ,ε‬ו־ ‪ 0‬אחרת‪ .‬כיוון שבעיית העצירה אינה כריעה‪ ,‬הפונקציה הזאת אינה חשיבה‪.‬‬
‫‪ .2‬עבור א"ב סרט }‪ {0, 1, t‬נגדיר את הפונקציה ‪ BB : N → N‬כך ש־ )‪ BB(k‬הוא מספר ה־ ‪1‬־ים המקסימלי שיכול להיות על‬
‫הסרט לאחר שמ"ט ‪ M‬כלשהי בעלת ‪ k‬מצבים עם א"ב סרט כנ"ל עוצרת בריצתה על ‪) .ε‬כלומר‪ ,‬עוברים על כל המ"ט שיש להן ‪k‬‬
‫מצבים מעל הא"ב הנתון‪ ,‬ובודקים כמה ‪1‬־ים יש על הסרט כשהן מסיימות את ריצתן על ‪(.ε‬‬
‫ראשית‪ ,‬ברור ש־ ‪ BB‬מונוטונית עולה ממש‪ .‬בהינתן מ"ט שמדפיסה )‪ BB(k‬אחדות על הסרט בריצתה )העוצרת( על ‪ ,ε‬נחליף‬
‫את המצב המקבל שלה במצב נוסף שזז על הסרט ימינה עד שהוא מוצא משהו שאינו ‪ ,1‬ואז כותב ‪ 1‬ועובר למצב המקבל‪ .‬מכאן‬
‫)‪.BB(k + 1) ≥ BB(k) + 1 > BB(k‬‬
‫נניח בשלילה ש־ ‪ BB‬חשיבה‪ ,‬ותהי ‪ H‬מכונת טיורינג המחשבת אותה‪ .‬נניח בה"כ ש־ ‪ H‬מקבלת את הקלט שלה בבינארי ופולטת‬
‫את הפלט שלה באונארי‪ ,‬כלומר מקבלת מספר בינארי ‪ k‬ועוצרת כשעל הסרט כתובות )‪ BB(k‬אחדות‪.‬‬
‫נניח שב־ ‪ H‬יש ‪ n‬מצבים‪ .‬נבנה את המכונה ‪ M‬שבה ‪ dlog ne + 1‬מצבים שתוכל לעצור על ‪ ε‬כאשר על הסרט שלה כתוב‬
‫בבינארי ‪ .2n‬כעת נבנה את המכונה ‪ M 0‬שבהינתן ‪ ε‬מתחילה בתור ‪ M‬ואחרי ש־ ‪ 2n‬נכתב על הסרט )בבינארי(‪ ,‬היא מעבירה את‬
‫‪5‬החומר להלן לא נלמד במהלך הקורס‪ ,‬אלא מופיע בסיכום הרשמי של תרגול ‪.8‬‬
‫‪30‬‬
‫השליטה ל־ ‪ H‬שמדפיסה את )‪ .BB(2n‬אבל זוהי סתירה‪ ,‬כי ל־ ‪ M 0‬יש ‪ n + dlog ne + 1‬מצבים והיא עוצרת עם )‪ BB(2n‬אחדות‬
‫על הסרט‪ ,‬ולכן מקבלים ש־ )‪ ,BB(n + dlog ne + 1) ≥ BB(2n‬וזו סתירה למונוטוניות )שהרי ‪.(2n > n + dlog ne + 1‬‬
‫)אפשר לחשוב על הנ"ל בתור תוכנית מחשב ‪ -‬אם יש פונקציה שאומרת כמה אחדות יכולה לפלוט כל פונקציה בעלת מספר מוגבל‬
‫של תוים‪ ,‬אפשר לכתוב פונקציה חדשה שמעבירה לפונקציה המקורית מספר שגדול ממספר התוים בפונקציה המקורית ‪ +‬בפונקציה‬
‫החדשה‪(.‬‬
‫חלק‬
‫‪III‬‬
‫סיבוכיות‬
‫‪6‬‬
‫מחלקות זמן‪ P ,‬ו־ ‪NP‬‬
‫בפרק זה נתחיל למדוד את משאבי החישוב של מכונות טיורינג‪ ,‬ונתעניין בשאלה האם אפשר להכריע בעיה מסוימת תוך זמן מוגדר‬
‫היטב‪ ,‬ולא "סתם להכריע" אותה‪.‬‬
‫‪6.1‬‬
‫מחלקות זמן‬
‫הגדרה ‪ 6.1‬תהי ‪ L ∈ R‬ותהי ‪ M‬מ"ט המכריעה אותה‪ .‬נאמר ש־ )‪ ,tM (n‬הזמן שלוקח ל־ ‪ M‬לרוץ על קלט באורך ‪ ,n‬הוא‬
‫}‪{number of steps of M before it stops on x‬‬
‫‪max‬‬
‫∗‪|x|≤n, x∈Σ‬‬
‫= )‪tM (n‬‬
‫הערה ‪ 6.2‬כמובן‪ ,‬הגדרה זו תלויה במכונה ‪ -‬ורוצים לשאול מהו הזמן עבור מ"ט אופטימלית שמזהה את ‪ .L‬כמו כן‪ ,‬נשים לב שאפשר‬
‫להגדיר את )‪ tM (n‬על כל מכונת טיורינג שעוצרת תמיד‪ ,‬ולא רק על כזאת שמכריעה את ‪.L‬‬
‫הגדרה ‪ 6.3‬תהי ‪ f : N → R+‬פונקציה מונוטונית עולה‪ ,‬ויהי ‪ Σ‬א"ב‪ .‬אזי‪:‬‬
‫}))‪TIME[f (n)] = {L ⊆ Σ∗ : ∃M TM that decides L, tM (n) = O(f (n‬‬
‫במילים אחרות‪ L ∈ TIME[f (n)] ,‬אם קיימת מכונת טיורינג דטרמיניסטית כך שלכל ∗‪ w ∈ Σ‬המכונה עוצרת תוך ))|‪O(f (|w‬‬
‫צעדים‪ ,‬ומכריעה את ‪.L‬‬
‫נתחיל במחלקה המתבקשת ביותר‪ .TIME[n] ,‬ברור ש־ ]‪ REG ⊆ TIME[n‬שכן מכונת טיורינג היא בפרט אוטומט סופי דטרמיניסטי‪,‬‬
‫ואוטומטים פועלים בזמן ליניארי‪ .‬ההיפך‪ ,‬כמובן‪ ,‬לא ברור‪:‬‬
‫משפט ‪) 6.4‬ללא הוכחה( תהי ‪ f : N → R+‬מונוטונית עולה כך ש־ ‪= 0‬‬
‫)‪f (n‬‬
‫‪n log n‬‬
‫∞→‪ limn‬וגם ‪ .f (n) ≥ n‬אזי ‪.TIME[f (n)] = REG‬‬
‫טענה ‪ 6.5‬תהי })‪ .L = {w ∈ {a, b}∗ : #a (w) = #b (w‬אזי ]‪.L ∈ TIME[n log n‬‬
‫הוכחה‪ :‬ראינו כבר ש־ ‪/ REG‬‬
‫∈ ‪ L‬וקל לראות ש־ ] ‪ .L ∈ TIME[n2‬כדי להראות את החסם הדרוש צריך קצת להתחכם‪ .‬למשל‪,‬‬
‫הרעיון של למיין את המחרוזת הוא נחמד אבל במכונת טיורינג לא ניתן למיין בזמן )‪ - O(n log n‬למשל‪ ,‬פעולת ‪ swap‬בין שני‬
‫אלמנטים לא תיקח זמן קבוע‪ .‬במקום זה‪:‬‬
‫נעשה ‪ n‬שלבים שבכל אחד מהם נקטין את מספר ה־ ‪a‬־ים פי שניים ואת מספר ה־ ‪b‬־ים פי שניים‪ ,‬על ידי מעבר על המחרוזת‬
‫משמאל לימין ומחיקת כל ‪ a‬שני וכל ‪ b‬שני‪ ,‬וכמובן זוכרים האם היה מספר זוגי כדי לוודא בסוף שהמספרים מסתדרים‪ .‬אם מספר‬
‫ה־ ‪a‬־ים וה־ ‪b‬־ים לא היה בעל אותה זוגיות‪ ,‬דוחים‪ ,‬ואחרת עושים סבב נוסף על המחרוזת‪ .‬כל שלב לוקח )‪ O(n‬זמן ולכן סך זמן‬
‫הריצה הוא )‪ O(n log n‬כנדרש‪.‬‬
‫הגדרה ‪6.6‬‬
‫] ‪TIME[nk‬‬
‫∞‬
‫[‬
‫‪k=1‬‬
‫זוהי מחלקת השפות שניתנות להכרעה בזמן פולינומיאלי‪.‬‬
‫‪31‬‬
‫= ‪P‬‬
‫דוגמאות לבעיות ב־ ‪ :P‬קשירות של גרף‪ ,‬רשת זרימה‪ ,‬הפיכות של מטריצה ‪ -‬כמעט כל מה שלמדנו באלגוריתמים‪.‬‬
‫הגדרה ‪ 6.7‬נסמן ב־ ])‪ NTIME[f (n‬את מחלקת השפות המקיימות את הדרישות של ])‪ TIME[f (n‬עבור מכונת טיורינג לא דטרמיניסטית‪.‬‬
‫במילים אחרות‪ L ∈ NTIME[f (n)] ,‬אם קיימת מכונת טיורינג לא דטרמיניסטית אשר על ‪ w ∈ L‬יש לה ריצה מקבלת תוך‬
‫∈ ‪ w‬כל הריצות שלה דוחות תוך ))‪ O(f (n‬צעדים‪ ,‬ובפרט כולן עוצרות‪.‬‬
‫))|‪ O(f (|w‬צעדים‪ ,‬ועל ‪/ L‬‬
‫∞‬
‫[‬
‫] ‪NTIME[nk‬‬
‫= ‪NP‬‬
‫‪k=1‬‬
‫היחסים בין ‪ P‬ל־ ‪ N P‬מאוד מתוחים‪ ,‬וכבר מזה ‪ 40‬שנה לא ידוע האם ‪.P 6= N P‬‬
‫הערה ‪ 6.8‬נשים לב שאנו לא דורשים מהמכונה הלא דטרמיניסטית לעצור תוך ))|‪ O(f (|w‬צעדים בכל הריצות‪ ,‬אלא רק בחלק מהן‪.‬‬
‫טענה ‪ L ∈ N P 6.9‬אםם קיים קבוע ‪ k‬ומכונה לא דטרמיניסטית ‪ M‬כך ש־ ‪ M‬עוצרת על כל הקלטים תוך זמן ) ‪ O(nk‬ומכריעה‬
‫את ‪.L‬‬
‫‪0‬‬
‫הוכחה‪ :‬אנו יודעים שקיימת מ"ט ‪ M 0‬המקיימת את ההגדרה עם זמן ריצה ≥ ‪ .c0 nk‬נבצע סימולציה לא דטרמיניסטית למכונה זו‬
‫‪0‬‬
‫במשך ‪ c0 nk‬צעדים‪ .‬אם היא עדיין לא סיימה את כל ריצותיה‪ ,‬נדחה‪ .‬אחרת‪ ,‬נענה כמוה‪ .‬הסימולציה היא פולינומיאלית כנדרש‪.‬‬
‫הגדרה ‪ 6.10‬נוסחא במשתנים בוליאניים מוגדרת באינדוקציה בקורס בלוגיקה‪ .‬אנחנו נסתפק בהגדרה ע"י דוגמא‪ ,‬למשל ∧ ) ‪(x1 ∨ x2‬‬
‫) ‪ (x3 ∨ x2 ∨ x4‬זו נוסחא במשתנים בוליאניים‪.‬‬
‫טענה ‪.SAT = {hϕi : ϕ is a satisfiable Boolean formula} ∈ N P 6.11‬‬
‫הוכחה‪ :‬קל לראות שע"י מעבר על כל האפשרויות‪ SAT ∈ TIME[2n ] ,‬כאשר ‪ n‬הוא מספר המשתנים הבוליאניים בנוסחא‪ .‬כיצד‬
‫ניתן להכריע את ‪ SAT‬בזמן פולינומי באמצעות מכונה לא דטרמיניסטית? ובכן‪ ,‬המכונה רושמת על הסרט באופן לא דטרמיניסטי‬
‫אחד מ־ ‪ 2n‬הצירופים שיש‪ ,‬וקוראת לפרוצדורה ליניארית שבודק האם ההשמה מספקת‪ .‬אם יש השמה ‪ -‬המכונה תעצור ותחזיר את‬
‫התשובה הנכונה‪ ,‬כלומר יש ריצה מקבלת‪ ,‬בזמן ליניארי‪ .‬לכן ‪.SAT ∈ N P‬‬
‫‪6.2‬‬
‫הצגת ‪ NP‬באמצעות מוודאים‬
‫הגדרה ‪ 6.12‬מוודא )‪ (verifier‬לשפה ‪ L‬זו מכונת טיורינג דטרמיניסטית ‪ V‬כך ש‪:‬‬
‫}) ‪L = {x : ∃y : hx, yi ∈ L(V‬‬
‫כאשר ‪ y‬נקרא העד של ‪ ,x‬וגם ש־ ‪ V‬עוצרת על כל הקלטים בזמן פולינומיאלי ב־ |‪.|x‬‬
‫דוגמאות למוודאים‪:‬‬
‫‪ .1‬במקרה של ‪ ,SAT‬העד של שייכות נוסחא ל־ ‪ SAT‬היא השמה של ערכי אמת לפסוקיות‪ ,‬והמוודא זוהי פרוצדורת הבדיקה‬
‫שמוודאת שההשמה אכן מספקת‪.‬‬
‫‪ .2‬נתבונן בשפה }‪ .HAMPATH = {hGi : G contains a Hamiltonian path‬כמובן יש מוודא לשפה ‪ -‬המוודא מקבל את‬
‫הגרף ומסלול בגרף‪ ,‬ובודק האם זה אכן מסלול המילטוני‪ .‬כלומר‪,‬‬
‫}‪L(V ) = {hG, P i : P is a Hamiltonian path in G‬‬
‫כמובן‪ ,‬זמן הריצה בשני המקרים הוא פולינומיאלי באורך הקלט המקורי‪.‬‬
‫טענה ‪ 6.13‬תהי ‪ L‬שפה‪ .‬קיים מוודא ‪ V‬ל־ ‪ L‬אםם ‪.L ∈ N P‬‬
‫‪32‬‬
‫הוכחה‪ (⇒) :‬העד לשייכות ‪ L‬ל־ ‪ N P‬זוהי סדרת קונפיגורציות שמייצגת ריצה מקבלת של מ"ט לא דטרמיניסטית ‪ M‬המכריעה‬
‫את ‪ L‬בזמן פולינומי‪ .‬המוודא בודק שסדרת הקונפיגורציות היא חוקית ומסתיימת בקבלה‪ .‬נשים לב שאורך סדרת הקונפיגורציות‬
‫הוא פולינומי באורך הקלט כי כל קונפיגורציה היא בגודל פולינומי ויש מספר פולינומי של קונפיגורציות‪ ,‬ולכן גם המוודא פועל בזמן‬
‫פולינומי‪) .‬אפשרות "קצרה" יותר‪ :‬במקום סדרת קונפיגורציות‪ ,‬להציג רק את הבחירות שהתקבלו בכל מקום שהייתה למכונה אפשרות‬
‫לא דטרמיניסטית לפעולה‪ ,‬כאשר הבחירה מוצגת כמספר למשל‪ .‬בתרגול קראנו לזה ה"כתובת" של הריצה‪(.‬‬
‫)⇐( יהי ‪ V‬מוודא פולינומי ב־ |‪ |x‬ונראה שיש ‪ N‬מ"ט לא דטרמיניסטית כך ש־ ‪ L(N ) = L‬המכריעה תוך ) ‪ O(nk‬צעדים‪ .‬נניח‬
‫ש־ ‪ V‬מכריע תוך ) ‪ O(|x|k‬צעדים‪ .‬לכן אורך עד ל־ ‪ x‬יכול להיות לכל היותר ) ‪ ,|y| = O(|x|k‬כי אם העד המינימלי ארוך מזה לא‬
‫ייתכן זמן ריצה קצר יותר‪ ,‬שהרי ‪ V‬צריך לקרוא את העד‪.‬‬
‫המכונה ‪ N‬תרשום ‪ y‬כלשהו על הסרט )אחד מכל העדים האפשריים באורך ) ‪ (O(nk‬בקידוד ‪ hx, yi‬ותפעיל עליהם את המוודא‬
‫‪ .V‬זוהי ריצה דטרמיניסטית ופולינומיאלית ב־ |‪ .|x‬ברור שאם קיים עד ‪ ,y‬באחת הריצות נקבל; אחרת‪ ,‬אף ריצה לא תקבל וכל‬
‫הריצות ידחו‪.‬‬
‫הערה ‪ 6.14‬בהוכחה זו‪ ,‬וגם בהוכחות אחרות נשתמש בחופשיות ב־ ‪ .O‬כמובן‪ ,‬כשהמכונה ‪ N‬צריכה לכתוב על הסרט עדים‪ ,‬היא‬
‫צריכה לדעת בדיוק את הקבוע של ‪.cnk‬‬
‫‪6.3‬‬
‫בעיות קלאסיות ב־ ‪NP‬‬
‫הבעיות הבאות הן בעיות קלאסיות ב־ ‪ .NP‬בהמשך נחזור אליהן כדי לראות שהן גם ‪NP‬־שלמות‪.‬‬
‫‪ .1‬קבוצה בת"ל ‪ - Independent Set -‬האם בגרף ‪ G‬קיימת קבוצה בת"ל בגודל ‪?k‬‬
‫‪ .2‬קליקה ‪ - Clique -‬האם בגרף ‪ G‬קיימת קליקה בגודל ‪?k‬‬
‫‪ .3‬מסלול המילטוני ‪ - Hamiltonian Path -‬האם בגרף ‪ G‬קיים מסלול המילטוני?‬
‫‪ .4‬כיסוי ע"י קבוצות ‪ - Set Cover -‬נתון אוסף של ת"ק }‪ A1 , . . . , Am ⊆ {1, . . . n‬ושואלים האם }‪ {1, . . . , n‬מתקבל כאיחוד של‬
‫≥ ‪ k‬מהקבוצות ‪?A1 , . . . , Am‬‬
‫‪ .5‬כיסוי ע"י קודקודים ‪ - Vertex Cover -‬האם בגרף ‪ G‬ניתן לגעת בכל הצלעות בעזרת ‪ k‬קודקודים?‬
‫‪ - CNFSAT .6‬האם נוסחא בוליאנית בצורת ‪ (Conjunctive Normal Form) CNF‬היא ספיקה? )נוסחא בצורת ‪ CNF‬היא נוסחא‬
‫המחברת ב־ ∧ בין פסוקיות בסוגריים שבתוכן יש ∨ בין מספר ליטרלים‪ ,‬למשל ) ‪(.x1 ∧ (x3 ∨ x2 ∨ x4 ) ∧ (x2 ∨ x1‬‬
‫‬
‫‪ m‬אפשרויות לבחור ‪ k‬ת"ק מתוך ‪ m‬הקבוצות הנתונות‪ ,‬והבדיקה האם אוסף של ‪ k‬ת"ק‬
‫נראה‪ ,‬למשל‪ ,‬ש־ ‪ .SetCover ∈ N P‬יש ‪k‬‬
‫מכסה את }‪ {1, . . . , n‬לוקחת זמן ליניארי ב־ ‪ .n‬לכן המכונה הלא דטרמיניסטית יכולה פשוט לכתוב על הסרט צירוף כלשהו של‬
‫‪ A1 , . . . , Am‬בגודל ‪ ,k‬ואז להריץ מוודא דטרמיניסטי ולינארי שבודק את הכיסוי‪.‬‬
‫במובן מסוים‪ ,‬כל הבעיות האלה הן ב־ ‪ N P‬כי בתנאי שיש פתרון ‪" -‬קל יחסית" )בזמן פולינומיאלי( לבדוק שזהו הפתרון הנכון‪.‬‬
‫עבור אף אחת מהבעיות הנ"ל לא ידוע האם "קל יחסית" )בזמן פולינומיאלי( למצוא את הפתרון‪.‬‬
‫‪6.4‬‬
‫רדוקציות מיפוי פולינומיאליות‪ ,‬קושי ושלמות ב־ ‪NP‬‬
‫הגדרה ‪ 6.15‬יהיו ∗‪ .L1 , L2 ⊆ Σ‬רדוקציית מיפוי פולינומיאלית )או רדוקציית ‪ (Karp‬מ־ ‪ L1‬ל־ ‪ L2‬היא רדוקציית מיפוי מ־ ‪ L1‬ל־‬
‫‪ L2‬שרצה בזמן פולינומיאלי‪ .‬אם יש רדוקציה כזאת‪ ,‬נכתוב ‪.L1 ≤p L2‬‬
‫טענה ‪.CNFSAT ≤p IndependentSet 6.16‬‬
‫הוכחה‪ :‬בהינתן נוסחא‪ ,‬נייצר גרף שבו קודקוד לכל הופעה של ליטרל בנוסחא‪ .‬נחבר בצלע בין שני ליטרלים אם הם באותה פסוקית‪,‬‬
‫או אם הם סותרים‪ .‬נקבע את ‪ k‬להיות מספר הפסוקיות בנוסחא‪.‬‬
‫לדוגמא‪ ,‬עבור הנוסחא ‪ (x1 ∨ x2 ) ∧ (x1 ∨ x2 ) ∧ x1‬נייצר את הגרף הבא‪:‬‬
‫קל לראות שהתהליך הזה הוא פולינומיאלי‪ ,‬אבל מדוע זאת רדוקציה? ובכן‪ ,‬בתוך כל פסוקית חיברנו את כל הקודקודים‪ ,‬כך‬
‫שאם בחרנו קודקוד מתוך פסוקית‪ ,‬שאר הקודקודים בפסוקית לא יהיו באנטי־קליקה‪ ,‬ולכן מספר הקודקודים באנטי־קליקה לא יעלה‬
‫על מספר הפסוקיות‪ .‬בנוסף‪ ,‬חיברנו את הליטרלים הסותרים ולכן באנטי־קליקה לא תהיה סתירה בין הליטרלים‪.‬‬
‫‪33‬‬
‫הגדרה ‪ 6.17‬תהי ‪ L‬שפה כך שלכל ‪ L0 ∈ N P‬מתקיים ‪ .L0 ≤p L‬אז נגיד ש־ ‪ L‬היא ‪N P‬־קשה‪.‬‬
‫אם בנוסף ‪ L ∈ N P‬אז נגיד ש־ ‪ L‬היא ‪N P‬־שלמה‪.‬‬
‫נסמן ב־ ‪ N P C‬את אוסף השפות ה־ ‪N P‬־שלמות‪.‬‬
‫משפט ‪Levine) 6.18‬־‪) .CNFSAT ∈ N P C (1972 ,Cook‬הוכחה בהמשך‪(.‬‬
‫מסקנה ‪.IndependentSet ∈ N P C 6.19‬‬
‫טענה ‪.CLIQUE ∈ N P C 6.20‬‬
‫הוכחה‪ :‬מספיק להראות ש־ ‪ .IndependentSet ≤p CLIQUE‬ואמנם‪ ,‬הרדוקציה היא פשוט לפלוט את הגרף המשלים )בצלעות(‪.‬‬
‫טענה ‪.VC ∈ N P C 6.21‬‬
‫הוכחה‪ :‬נשים לב שאם ‪ U ⊆ V‬אז הוא כיסוי בקודקודים של הצלעות אםם ‪ V \ U‬קבוצה בת"ל‪ .‬אכן‪ ,‬אם ‪ u, v ∈ V \ U‬ויש ביניהם‬
‫צלע‪ ,‬הרי שהיא לא מכוסה‪ .‬לכן בגרף יש כיסוי בקודקודים בגודל ‪ k‬אםם יש בו קבוצה בת"ל בגודל ‪ |V | − k‬ולכן הרדוקציה היא‬
‫‪.hG, ki → hG, |V | − ki‬‬
‫‪6.5‬‬
‫משפט ‪Levin‬־‪Cook‬‬
‫הגדרה ‪6.22‬‬
‫}‪∃y, |y| ≤ t, M accepts w#y in time ≤ t‬‬
‫‪BoundedAN T M = {(hM i, w, 1t ) :‬‬
‫הערה ‪ 6.23‬קל לראות ש־ ‪ ,BoundedAN T M ∈ N P‬שכן מכונה לא דטרמיניסטית יכולה לנחש את ‪ y‬שהוא באורך ‪ t‬לכל היותר‪,‬‬
‫ולבצע סימולציה של ‪ M‬במשך ≥ ‪ t‬צעדים‪ ,‬שזה ייקח זמן פולינומיאלי ב־ ‪ t‬כנדרש‪ .‬זו גם הסיבה שבגללה אנו מעבירים את ‪ t‬בייצוג‬
‫אונארי ‪ -‬כדי לקבל זמן ריצה פולינומיאלי ב־ ‪.t‬‬
‫טענה ‪.BoundedAN T M ∈ N P C 6.24‬‬
‫הוכחה‪ :‬תהי ‪ .L ∈ N P‬ראינו שיש מ"ט דטרמיניסטית ‪ M‬וקבועים ‪ c, k‬כך שלכל ∗‪ w ∈ Σ‬מתקיים ש־ ‪ w ∈ L‬אםם קיים עד ‪ y‬כך‬
‫ש־ ‪ M‬מקבלת את ‪ w#y‬תוך לכל היותר ‪ cnk‬צעדים‪ ,‬כאשר ‪.|w| = n‬‬
‫‪k‬‬
‫בהינתן קלט ‪ ,w‬הפלט של הרדוקציה הוא ) ‪ (hM i, w, 1t‬כאשר ‪ M‬המכונה הנ"ל ו־ ‪ .t = cn‬הרדוקציה לוקחת זמן פולינומיאלי‪,‬‬
‫וכמובן ‪ w ∈ L‬אםם ‪ (hM i, w, 1t ) ∈ BoundedAN T M‬לפי הגדרתה‪.‬‬
‫הגדרה ‪ 6.25‬בהינתן ‪ x1 , . . . , xk‬משתנים‪ A ,‬קבוצת ההשמות הבוליאניות למשתנים‪ p : A → {0, 1} ,‬נקראת פרדיקט )‪ (predicate‬על‬
‫המשתנים ‪.x1 , . . . , xk‬‬
‫דוגמאות לפרדיקטים‪:‬‬
‫‪ .1‬הנוסחא ) ‪ x4 ∧ x1 ∧ (x1 ∨ x2 ∨ x3 ∨ x4‬מגדירה פרדיקט‪ ,‬כי עכשיו לכל השמה של ערכים בוליאניים למשתנים אנו מקבלים‬
‫ערך אמת עבור הנוסחא‪ .‬בעצם‪ ,‬כל נוסחת ‪ CNF‬ובכלל כל נוסחא בוליאנית מגדירה פרדיקט‪.‬‬
‫‪ .2‬הפסוק "אם ‪ x1‬או ‪ x2‬אז ‪ x3‬וגם ‪ "x4‬מגדיר פרדיקט‪.‬‬
‫‪ .3‬כל פונקציה }‪ f : {0, 1}k → {0, 1‬מגדירה פרדיקט ‪ pf‬על ‪ x1 , . . . , xk‬באופן ברור‪.‬‬
‫טענה ‪ 6.26‬לכל }‪ f : {0, 1}k → {0, 1‬הפרדיקט ‪ pf‬ניתן להצגה ע"י נוסחת ‪.CNF‬‬
‫‪αi = 1‬‬
‫הוכחה‪ :‬דרך אחת לעשות זאת ‪ -‬בהינתן ‪α = (α1 , . . . , αk ) ∈ {0, 1}k‬נגדיר ‪ Dα = l1 ∧ . . . ∧ lk‬כאשר‬
‫‪αi = 0‬‬
‫‪W‬‬
‫‪.pf = α:f (α)=1 Dα‬‬
‫‪αi = 1‬‬
‫הבעיה היא שקיבלנו נוסחת ‪ DNF‬ולא נוסחת ‪ ,CNF‬ונתקן את זה ע"י הגדרת ‪ Cα = l1 ∨ . . . ∨ lk‬כאשר‬
‫‪αi = 0‬‬
‫‪V‬‬
‫‪ ,pf = α:f (α)=0 Cα‬וזו כבר נוסחת ‪.CNF‬‬
‫‪xi‬‬
‫‪xi‬‬
‫(‬
‫= ‪ .li‬כעת‬
‫(‬
‫‪xi‬‬
‫= ‪ li‬ואז‬
‫‪xi‬‬
‫מסקנה ‪ 6.27‬אם רוצים נוסחת ‪ ,CNF‬אפשר להסתפק בגימום של הרבה פרדיקטים שכל אחד מהם הוא ב־ ‪ .CNF‬עדיף שכל פרדיקט‬
‫יהיה מעל מספר קטן מאוד של משתנים‪ ,‬שהרי הצגת ‪ CNF‬של פרדיקט מעל ‪ k‬משתנים עשויה להיות באורך ) ‪.O(k · 2k‬‬
‫‪34‬‬
‫משפט ‪) BoundedAN T M ≤p CNFSAT 6.28‬משפט ‪Levin‬־‪(1972 ,Cook‬‬
‫הוכחה‪ :‬בהינתן ) ‪ (hM i, w, 1t‬הרדוקציה תבנה קבוצת משתנים בוליאניים ונוסחת ‪ ϕ CNF‬מעליהם‪ .‬לכל ריצה באורך ≥ ‪ t‬של ‪M‬‬
‫תהיה השמה יחידה למשתנים ה"מקודדת" את הריצה‪ .‬ההשמות היחידות ש־ ‪ ϕ‬מקבלת יהיו ייצוגים של ריצות מקבלות על ‪w#y‬‬
‫כאשר ‪.|y| ≤ t‬‬
‫כאשר מייצגים ריצה של ‪ M‬ע"י השמה‪ ,‬נרצה לקודד את מצב הסרט‪ ,‬את המצב של המכונה‪ ,‬ואת המיקום של הראש הקורא‪/‬כותב‪.‬‬
‫אין טעם להסתכל על מקומות בסרט מעבר לתא ‪ t‬או מעבר לתא ‪ .−t‬כמו כן‪ ,‬נסכים בינינו שאם הגענו למצב מקבל‪/‬דוחה תוך פחות‬
‫מ־ ‪ t‬צעדים‪ ,‬אז נחזור על אותה קונפיגורציה עד שיעברו ‪ t‬צעדים‪ .‬לכל "עובדה" מהריצה הזאת יהיה לנו משתנה בוליאני‪:‬‬
‫‪ .1‬משתני הסרט ‪-‬‬
‫‪Xs,a,i‬‬
‫‪∀s ∈ {0, . . . , t}, i ∈ {−t, . . . , t}, a ∈ Γ ∪ {t} :‬‬
‫כאשר המשתנה ‪ Xs,a,i‬מייצג את הטענה‪" :‬בזמן ‪ s‬במקום ה־ ‪ i‬על הסרט כתובה האות ‪."a‬‬
‫‪ .2‬מיקום הראש ‪-‬‬
‫‪hs,i‬‬
‫‪∀s ∈ {0, . . . , t}, i ∈ {−t, . . . , t} :‬‬
‫כאשר המשתנה ‪ hs,i‬מייצג את הטענה‪" :‬בזמן ‪ s‬הראש נמצא במקום ה־ ‪."i‬‬
‫‪ .3‬משתני המצב ‪-‬‬
‫‪gs,q‬‬
‫‪∀s ∈ {0, . . . , t}, q ∈ Q :‬‬
‫כאשר המשתנה ‪ gs,q‬מייצג את הטענה‪" :‬בזמן ‪ s‬מצב המכונה הוא ‪."q‬‬
‫כעת נבנה את הנוסחא שלנו‪ ,‬שתהיה מורכבת מגימום של פרדיקטים‪:‬‬
‫‪ .1‬מניעת ריבוי ‪ -‬הראש נמצא במקום אחד בלבד‪ ,‬בכל תא של הסרט כתובה רק אות אחת‪ ,‬המכונה נמצאת במצב אחד בלבד‪,‬‬
‫וכו'‪ .‬למשל עבור מצב הסרט‪ ,∀s, i, a 6= b : Xs,a,i ∨ Xs,b,i :‬ועבור מצב המכונה‪gs,q1 ∨ gs,q2 :‬‬
‫‪.∀s, q1 6= q2 : W‬‬
‫‪.∀s, i :‬‬
‫‪ .2‬קיום מצבים ‪ -‬יש מקום שבו הראש נמצא‪ ,‬וכו'‪ .‬למשל‪ ,‬עבור מצב הסרט‪a∈Γ∪{t} Xs,a,i :‬‬
‫‪ .3‬כללי מעבר ‪ -‬עבור כל שוויון מהצורה )‪ δ(q1 , a) = (q2 , b, R‬נגדיר את הפרדיקט לכל ‪" :s, i‬אם ‪ Xs,a,i‬וגם ‪ hs,i‬וגם ‪gs,q1‬‬
‫אז ‪ Xs+1,b,i‬וגם ‪ hs+1,i+1‬וגם ‪ ."gs+1,q2‬נשים לב שהפרדיקט הוא על מספר קבוע של משתנים‪ ,‬ולכן תרגומו ל־ ‪ CNF‬לא יגרום‬
‫להתפוצצות אקספוננציאלית באורך הקלט )גודל הנוסחא(‪ .‬כמו כן‪ ,‬צריך להוסיף כאן את ההתייחסות לכך שאם כבר הגענו למצב‬
‫מקבל‪/‬דוחה‪ ,‬אנו שומרים על אותו מצב כמו קודם ‪ -‬זו פשוט תוספת להגדרת ‪.δ‬‬
‫‪ .4‬תנאי התחלה ‪ -‬המילה נמצאת על הסרט‪ ∀0 ≤ i ≤ |w| − 1 : X0,wi ,i :‬וה־ ‪ #‬נמצאת על הסרט‪ ;X0,#,|w| :‬מצב ההתחלה‬
‫ ‪ h0,0‬וגם ‪ .g0,q0‬באופן דומה יש לפרט את המשתנים לגבי ‪.y‬‬‫‪ .5‬הריצה מקבלת ‪ -‬כלומר ‪.gt,qacc‬‬
‫ברור שקיבלנו רדוקציה פולינומיאלית‪ ,‬ולכן השלמנו את ההוכחה ‪ CNFSAT -‬היא ‪N P‬־שלמה‪.‬‬
‫‪6.6‬‬
‫עוד בעיות ‪NP‬־שלמות‬
‫נראה מספר דוגמאות לרדוקציות שבסופן נשתכנע שכל השפות שראינו הן ‪N P‬־שלמות‪.‬‬
‫‪ .1‬השפה ‪ 3DMatching‬היא כל הקלטים המתארים שלוש קבוצות שוות גודל‪ ,‬ושלשות המוגדרות על איברי הקבוצות‪ ,‬כך שקיים‬
‫זיווג תלת־מימדי של איברי שלוש הקבוצות )כלומר‪ ,‬הכללה של זיווג בגרף דו"צ(‪ .‬בהינתן ‪ X, Y, Z‬שלוש קבוצות שגודל כל אחת ‪,m‬‬
‫ו־ ‪ T ⊆ X × Y × Z‬אנו מחפשים ‪ m‬שלשות כך שכל איבר בכל קבוצה משתתף בשלשה אחת בדיוק‪.‬‬
‫קל לראות ש־ ‪ 3DM ∈ N P‬כי יש מוודא פולינומיאלי לזיווג מושלם‪ .‬נראה שהבעיה קשה ע"י רדוקציה מ־ ‪) 3SAT‬בהמשך נראה‬
‫ש־ ‪ .(6 CNFSAT ≤p 3SAT‬בהינתן קלט של ‪ - 3SAT‬נוסחא ‪ ϕ‬בעלת ‪ k‬פסוקיות ו־ ‪ n‬משתנים ‪ -‬נבנה שני סוגים של ‪gadget‬־ים‬
‫עבור הבעיה החדשה‪ :‬הסוג הראשון עבור משתנים‪ ,‬כדי לוודא שההשמה של ערכי האמת היא חוקית‪ ,‬והסוג השני הוא עבור פסוקיות‪,‬‬
‫כדי לוודא שההשמה היא מספקת‪.‬‬
‫• לכל משתנה ‪ ,x‬ניצור ‪ gadget‬כך‪ k :‬נקודות ב־ ‪ k ,X‬נקודות ב־ ‪ Y‬ו־ ‪ 2k‬נקודות ב־ ‪ ,Z‬ונחבר אותם בשלשות כמו בציור ‪:7‬‬
‫‪6‬חשוב לציין שיש סיבה לבחירה ב־ ‪ .3‬למשל‪ ,‬אם מצמצמים את מספר הליטרלים בכל פסוקית ל־ ‪ ,2‬מקבלים שפה שניתן להכריע בקלות בזמן פולינומי )ע"י בדיקה‬
‫שהנוסחא לא מכילה סתירה(‪ .‬ר' תרגיל ‪ ,9‬שאלה ‪.4‬‬
‫‪7‬הציורים נגנבו ללא בושה מסיכום תרגול ‪.10‬‬
‫‪35‬‬
‫• בכל ‪ gadget‬של משתנה ‪ x‬יש לנו ‪ 2k‬נקודות ב־ ‪ .Z‬נסמן אותן } ‪ {z1 , z2 , . . . , z2k‬ונייחס להן את המשמעות הבאה‪ z1 :‬יקושר‬
‫לעובדה ש־ ‪ x‬מקבל ערך ‪ T‬בפסוקית ‪ z2 ,c1‬יקושר לעובדה ש־ ‪ x‬מקבל ערך ‪ F‬בפסוקית ‪ ,c1‬וכן הלאה‪ .‬לבסוף ‪ z2k‬יקושר‬
‫לעובדה ש־ ‪ x‬מקבל ערך ‪ F‬בפסוקית ‪.ck‬‬
‫• לכל פסוקית ‪ ,ci‬נוסיף שתי נקודות ‪ xi ∈ X‬ו־ ‪ .yi ∈ Y‬לכל ליטרל ‪ l‬המופיע ב־ ‪ ci‬נוסיף שלשה ) ‪ (xi , yi , zj‬כאשר ‪ zj‬מקושר‬
‫)מהסעיף הקודם( לעובדה ש־ ‪ l‬מקבל את הערך המתאים בפסוקית ‪ .ci‬כלומר‪ ,‬אם למשל ‪ ,l = a‬אז ‪ zj‬יהיה הקודקוד המקושר‬
‫לעובדה ש־ ‪ a‬מקבל ערך ‪ F‬בפסוקית ‪ .ci‬למשל‪ ,‬עבור הפסוקית ‪ c1 = x1 ∨ x2 ∨ x3‬נקבל את המצב )החלקי( הבא‪:‬‬
‫• לבסוף‪ ,‬יש לנו יותר איברים ב־ ‪ Z‬מאשר בקבוצות האחרות‪ .‬נוסיף נקודות נוספות ב־ ‪ X‬וב־ ‪ Y‬המחוברות בשלשות לכל‬
‫איברי ‪ .Z‬יש לנו ‪ (n − 1)k‬שלשות כאלה‪.‬‬
‫ברור שתהליך הבנייה הוא פולינומיאלי‪ ,‬ונותר להראות שזוהי רדוקציה‪ .‬מהשמה מספקת של נוסחא‪ ,‬לכל משתנה ‪ x‬שקיבל את הערך‬
‫‪ T‬אנו נבחר את השלשות שמכילות את ה־ ‪zi‬־ים כך ש־ ‪ zi‬מקושר לעובדה ש־ ‪ x‬קיבל את הערך ‪ F‬בנוסחא )הפוך מההשמה(‪ ,‬מה‬
‫שמשאיר את ה־ ‪zi‬־ים המקושרים לעובדה ש־ ‪ x‬קיבל את הערך ‪ T‬פנויים‪ .‬כעת מכל פסוקית נבחר משתנה כלשהו שמספק אותה‪,‬‬
‫והשלשה שמחברת אותו עם ה־ ‪ zj‬המתאים לו‪ ,‬שהוא בהכרח נותר פנוי‪.‬‬
‫להיפך‪ ,‬בהינתן זיווג בגרף‪ ,‬כל המעגלים הפנימיים ב־ ‪ gadgets‬של המשתנים מכוסים‪ ,‬וזה אפשרי רק אם בחרנו את כל השלשות‬
‫הזוגיות או כל השלשות האי־זוגיות‪ .‬מהזוגיות מתקבלת ההשמה למשתנים‪ .‬גם כל ה־ ‪ gadgets‬של הפסוקיות מכוסים‪ ,‬ושוב זה אפשרי‬
‫רק אם ה־ ‪z‬־ים המתאימים פנויים‪ .‬לכן התאמה משרה השמה מספקת‪.‬‬
‫‪ .2‬כעת נראה ש־ ‪ .3DM ≤p SubsetSum‬ניזכר ש־‬
‫}‪si = t‬‬
‫‪X‬‬
‫‪SubsetSum = {hs1 , . . . , sn , ti : ∃I ⊆ {1, . . . , n},‬‬
‫‪i∈I‬‬
‫כאשר כל המספרים הם טבעיים‪ .‬נראה כיצד הרדוקציה פועלת על הקבוצות‬
‫‪T = {t0 , . . . , tn } ⊆ X × Y × Z‬‬
‫‪Z = {z0 , . . . , zm−1 },‬‬
‫‪Y = {y0 , . . . , ym−1 },‬‬
‫‪X = {x0 , . . . , xm−1 },‬‬
‫לשלשה ) ‪ (xi , yj , zk‬נתאים מספר טבעי בעל ‪ 3m‬ספרות בבסיס ‪ b‬המחולק לשלושה חלקים‪ ,‬כל אחד בגודל ‪ ,m‬שיש בו ‪ 1‬במקומות‬
‫‪ i, m + j, 2m + k‬ובשאר המקומות ‪0‬־ים‪ .‬פורמלית‪,‬‬
‫‪36‬‬
‫‪(xi , yj , zk ) 7−→ bk + bm+j + b2m+i‬‬
‫כך מהקבוצה ‪ T‬אנו מייצרים את המספרים ‪ .s1 , . . . , sn‬בנוסף נייצר את המספר ‪ 3m) t = 1 . . . 1‬ספרות( בבסיס ‪ .b‬אין ספק‬
‫שתהליך זה הוא פולינומיאלי‪ ,‬וכעת נראה שזו באמת רדוקציה‪.‬‬
‫בהינתן זיווג לבעיית ‪ 3DM‬אנו יודעים שיש ת"ק של ‪ T‬כך שעל כל ‪ X, Y, Z‬עוברים בדיוק פעם אחת על כל איבר‪ .‬אם מסכמים‬
‫את ה־ ‪si‬־ים הרלוונטיים לאותה ת"ק של ‪ ,T‬נקבל כמובן את ‪ 3m) 1 . . . 1‬ספרות(‪ .‬להיפך‪ ,‬בהינתן ת"ק של ‪ s1 , . . . , sn‬המסתכמת‬
‫ל־ ‪ ,T‬נרצה למצוא זיווג‪ .‬נגדיר כעת ש־ ‪ b = n + 1‬וכעת ברור שלא יכול להיות נשא בחיבור‪ ,‬כי צריך לחבר לפחות ‪1 n + 1‬־ים כדי‬
‫לקבל נשא בחיבור בבסיס ‪ .n + 1‬כלומר‪ ,‬כל ספרה מסתכמת לחוד וכל ספרה מסתכמת ל־ ‪ ,1‬ולכן יש בדיוק שלשה אחת שנוגעת‬
‫בכל איבר מ־ ‪ X, Y, Z‬כפי שרצינו‪.‬‬
‫‪ .3‬נראה ש־ ‪ CNFSAT ≤p 3SAT‬כדי להשלים את העבודה‪ .‬ב־ ‪ SAT‬יש לנו פסוקיות ‪ ϕ = c1 ∧ . . . ∧ ck‬אבל כל פסוקית‬
‫‪i‬‬
‫‪ .ci = l1i ∨ . . . ∨ lm‬אנחנו רוצים רדוקציה לנוסחא שבה רק שלושה ליטרלים‪ ,‬ונעשה את‬
‫מהווה איווי של מספר כלשהו של ליטרלים‪,‬‬
‫‪i‬‬
‫זה עבור כל פסוקית בנפרד‪.‬‬
‫• אם מספר הליטרלים ‪ mi = 1‬נפלוט את הפסוקית ‪ c0i = l1i ∨ l1i ∨ l1i‬וכמובן שמרנו על ספיקות‪.‬‬
‫• אם ‪ mi = 2‬נפלוט פסוקית עם שכפול של אחד הליטרלים‪.c0i = l1i ∨ l2i ∨ l2i :‬‬
‫• אם ‪ mi = 3‬נפלוט את הפסוקית כפי שהיא‪.‬‬
‫• אם ‪ mi > 3‬נפצל את ‪ ci‬ל־ ‪ mi − 2‬פסוקיות עם משתנים חדשים מקשרים באופן הבא‪:‬‬
‫‪= l1i ∨ l2i ∨ z1i‬‬
‫‪c1i‬‬
‫‪= z1i ∨ l3i ∨ z2i‬‬
‫‪c2i‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪i‬‬
‫‪i‬‬
‫‪i‬‬
‫‪zm‬‬
‫‪∨ lm‬‬
‫‪∨ zm‬‬
‫‪i −2‬‬
‫‪i −4‬‬
‫‪i −3‬‬
‫=‬
‫‪i −3‬‬
‫‪cm‬‬
‫‪i‬‬
‫‪i‬‬
‫‪i‬‬
‫‪i‬‬
‫‪zm‬‬
‫‪∨ lm‬‬
‫‪∨ lm‬‬
‫‪i −1‬‬
‫‪i‬‬
‫‪i −3‬‬
‫=‬
‫‪i −2‬‬
‫‪cm‬‬
‫‪i‬‬
‫כעת כדי להפוך השמה של ‪ CNF‬להשמה של ‪ 3CNF‬נצטרך לתת ערכי אמת לכל ה־ ‪z‬־ים שיצרנו‪ .‬לכל ה־ ‪z‬־ים שלפני הליטרל‬
‫הראשון שקיבל ‪ T‬ניתן את הערך ‪ ,T‬ועל כל אלה שאחריו ‪ -‬ניתן ‪ .F‬להיפך‪ ,‬מהשמה של ‪ 3CNF‬צריך להראות השמה של ‪ .CNF‬אם‬
‫‪i‬‬
‫‪ zm‬הוא ‪ T‬אז בפסוקית האחרונה אחד הליטרלים הוא ‪ .T‬אם‬
‫‪ zi1‬הוא ‪ F‬אז בפסוקית הראשונה אחד הליטרלים הוא ‪ ,T‬ואם‬
‫‪i −3‬‬
‫‪i‬‬
‫‪i‬‬
‫‪i‬‬
‫‪2‬‬
‫הראשון ‪ T‬והאחרון ‪ F‬אז יש מעבר מ־ ‪ T‬ל־ ‪ F‬איפשהו‪ ,‬למשל ב־ ‪ ,ci‬ואז שם ‪ z1 = T‬ו־ ‪ z2 = F‬אז בהכרח ‪ ,l3 = T‬וכן הלאה‪.‬‬
‫‪ .4‬מסקנה מכל הנ"ל‪:‬‬
‫‪CNFSAT ≤p 3SAT ≤p 3DM ≤p SubsetSum‬‬
‫ולכן כל הבעיות האלה הן ‪N P‬־שלמות‪.‬‬
‫‪ .5‬השפה }‪ DS = {hG, ki : G has a dominating set of size at most k‬היא ‪N P‬־שלמה‪ .‬ראינו זאת בתרגיל ‪ ,9‬שאלה ‪2‬‬
‫באמצעות רדוקציה מ־ ‪ .VC‬את כל קודקודי הגרף המקורי נשאיר כפי שהם‪ ,‬ונוסיף קודקוד ‪ ve‬לכל צלע ‪ e‬בגרף המקורי‪ .‬כמו כן‪,‬‬
‫נייצר צלעות בין כל קודקודי הגרף המקורי‪ ,‬וצלעות בין כל ‪ ve‬לקודקודים של הצלע ‪ e‬בגרף המקורי‪ .‬גודל ה־ ‪ DS‬שמחפשים הוא‬
‫כגודל ה־ ‪.VC‬‬
‫‪ .6‬השפה ‪) UHAMPATH‬גרפים לא מכוונים שיש בהם מסלול המילטוני( היא ‪N P‬־שלמה‪ .‬ראינו זאת בתרגיל ‪ ,10‬שאלה‬
‫‪ 2‬באמצעות רדוקציה מ־ ‪) HAMPATH‬עבור גרפים מכוונים(‪ .‬במהלך הרדוקציה‪ ,‬יצרנו שלושה קודקודים ‪ vin , vmid , vout‬עבור‬
‫כל קודקוד של הגרף המקורי‪ ,‬חיברנו צלעות ) ‪ (vin , vmid ), (vmid , vout‬ודאגנו לכך שהצלעות המכוונות יהפכו לצלעות מן הצורה‬
‫) ‪ .(vout , uin‬תודות לבנייה הזאת‪ ,‬אנו מבטיחים שמסלול המילטוני בגרף החדש קיים אםם קיים מסלול המילטוני בגרף המקורי‪.‬‬
‫‪ .7‬השפה ‪ NOTALLSAT‬של נוסחאות ה־ ‪ 3CNF‬כך שקיימת השמה שבכל פסוקית משאירה ליטרל אחד לא מסופק וליטרל‬
‫אחד מסופק היא ‪N P‬־שלמה‪ .‬ראינו זאת בתרגיל ‪ ,10‬שאלה ‪ 3‬באמצעות רדוקציה מ־ ‪ .3SAT‬כל פסוקית מהצורה ) ‪(ai ∨ bi ∨ ci‬‬
‫הופכת ל־‬
‫)‪(ai ∨ bi ∨ xi ) ∧ (xi ∨ ci ∨ yi ) ∧ (xi ∨ yi ∨ z‬‬
‫כאשר ‪ z‬הוא משתנה חדש המשותף לכל הפסוקיות‪ ,‬ו־ ‪ xi , yi‬ספציפיים עבור כל פסוקית‪ .‬לנוסחא המקורית יש השמה מספקת‬
‫אםם לנוסחא החדשה יש השמה המקיימת את הדרישות מ־ ‪.NOTALLSAT‬‬
‫‪37‬‬
‫‪ .8‬השפה }‪ MAXCUT = {hG, ki : G has a cut of size at least k‬היא ‪N P‬־שלמה‪ .‬ראינו זאת בתרגיל ‪ ,10‬שאלה ‪3‬‬
‫באמצעות רדוקציה מ־ ‪ .NOTALLSAT‬בגרף ‪ G‬החדש‪ :‬לכל ליטרל יוצרים קודקוד‪ ,‬ובין כל שני ליטרלים המופיעים באותה פסוקית‬
‫יוצרים צלע‪ .‬בנוסף‪ ,‬על כל הופעה של משתנה בנוסחא‪ ,‬יוצרים את הקודקודים ‪ x, x‬ומחברים ביניהם בצלע‪ .‬בסה"כ בגרף ‪ 6m‬צלעות‬
‫והפלט של הרדוקציה הוא ‪.hG, 5mi‬‬
‫קל לראות שהשמה מתאימה מייצרת חתך בגודל ‪) 5m‬צדדי החתך נקבעים לפי ערך האמת של הליטרלים(‪ ,‬כי בכל פסוקית יש‬
‫שתי צלעות בחתך וכל זוג ‪ x, x‬שהוספנו תורם עוד צלע‪ .‬להיפך‪ x, x ,‬בהכרח נמצאים בשני צדדים שונים של החתך ‪ -‬אם מעבירים‬
‫צד את זה שיש לו פחות צלעות בחתך‪ ,‬במקרה הטוב לא מרוויחים שום דבר‪.‬‬
‫‪ .9‬השפה }‪ 3COLOR = {hGi : there is a 3-coloring of G‬היא ‪N P‬־שלמה‪ .‬ראינו זאת בתרגיל ‪ ,11‬שאלה ‪ 1‬באמצעות‬
‫רדוקציה מ־ ‪ .3SAT‬אנו יוצרים שלושה קודקודים המייצגים את הצבעים ‪ T, F, K‬ומחברים אותם זה לזה ‪ -‬כך מובטח שהם ייצבעו‬
‫בשלושה צבעים‪ .‬כל משתנה ושלילתו מחברים ביניהם ול־ ‪ - K‬כך מובטח שהם ייצבעו ב־ ‪ T, F‬מה שישרה את ההשמה‪ .‬כדי להבטיח‬
‫את התקינות לגבי הפסוקיות‪ ,‬מהפסוקית ‪ l1 ∨ l2 ∨ l3‬מייצרים ‪ gadget‬מהצורה‪:‬‬
‫ע"י בדיקה מייגעת של ‪ 7‬מקרים מקבלים שזו אכן רדוקציה‪.‬‬
‫גם הבעיה }‪ COLOR = {hG, ki : there is a k -coloring of G‬היא ‪N P‬־שלמה באופן טריוויאלי‪ ,‬וגם ‪k -COLOR = {hGi :‬‬
‫}‪ k > 3, there is a k -coloring of G‬היא ‪N P‬־שלמה באמצעות רדוקציה מ־ ‪ 3COLOR‬ע"י הוספת ‪ k − 3‬קודקודים המחוברים‬
‫לעצמם ולכל קודקודי הגרף המקורי‪.‬‬
‫‪6.7‬‬
‫בעיות חיפוש‬
‫לעתים התשובה לשאלה צריכה להיות לא בוליאנית אלא ממש "להראות משהו"‪ .‬למשל‪ ,‬לא רק להגיד שקיים זיווג בגרף‪ ,‬אלא להצביע‬
‫על הזיווג הזה; לא רק להגיד שקיימת קליקה בגודל ‪ ,k‬אלא ממש להצביע עליה‪ .‬בעיות חיפוש הן לא קלות יותר מבעיות ההכרעה‬
‫המתאימות‪ ,‬אבל בדרך כלל הן גם לא יותר קשות‪.‬‬
‫‪ .1‬נניח שאנו מחפשים את גודל הקליקה המקסימלית בהינתן קופסה שחורה ‪ -‬מ"ט פולינומיאלית ‪ - A‬שמכריעה את ‪.CLIQUE‬‬
‫אפשר לעשות חיפוש בינארי‪ ,‬או סתם לעבור סדרתית על המספרים ‪ -‬עד שמגלים את גודל הקליקה המקסימלית ‪ ,k‬ובכל מקרה גודל‬
‫הקליקה לא יעלה על מספר הקודקודים‪ .‬כדי למצוא את הקליקה עצמה‪ ,‬בודקים לכל ‪ v ∈ V‬האם ב־ }‪ G \ {v‬עדיין יש קליקה‬
‫בגודל ‪ .k‬אם כן‪ ,‬אפשר להשמיט את ‪ - v‬וכך בסוף מגיעים לקליקה עצמה‪.‬‬
‫‪ .2‬נניח שאנו מחפשים השמה מספקת של נוסחת ‪ ,CNF‬בהינתן מ"ט פולינומיאלית ‪ A‬שמכריעה את ‪) CNFSAT‬לחלופין יכולנו‬
‫להניח‪ ,‬כמו בתרגיל ‪ ,10‬ש־ ‪ .(P = N P‬נפעל כך‪ :‬ניתן ל־ ‪ x1‬ערך ‪ T‬ונבדוק בעזרת ‪ A‬האם הנוסחא החדשה ספיקה‪ .‬אם כן ‪ -‬נמשיך‬
‫ל־ ‪ .x2‬אם לא ‪ -‬ניתן ל־ ‪ x1‬ערך ‪ F‬וכן הלאה‪.‬‬
‫‪ .3‬נניח שאנו מחפשים חתך בגודל מקסימלי בגרף‪ ,‬בהינתן מ"ט פולינומיאלית שמכריעה את ‪) MAXCUT‬תרגיל ‪ ,10‬שאלה ‪.(4‬‬
‫תחילה נמצא את גודל החתך המקסימלי‪ - k ,‬למשל ע"י חיפוש ליניארי‪ .‬לאחר מכן‪ ,‬עלינו לבדוק עבור כל צלע האם הסרתה מהגרף‬
‫משפיעה על גודל החתך המקסימלי‪ ,‬ולחלק את הקודקודים בצדי הצלע בהתאם‪.‬‬
‫‪6.8‬‬
‫סגירות של ‪ NP‬ו־ ‪coNP‬‬
‫טענה ‪ 6.29‬אם ‪ L1 , L2 ∈ N P‬אזי‪:‬‬
‫‪L1 ∪ L2 ∈ N P .1‬‬
‫‪L1 ∩ L2 ∈ N P .2‬‬
‫‪L∗1 ∈ N P .3‬‬
‫הוכחה‪) :‬סקיצה( ‪ .1‬ננחש באופן לא דטרמיניסטי באיזו שפה הקלט נמצא ונריץ את המכונה המתאימה‪.‬‬
‫‪ .2‬באמצעות מוודא ‪ -‬מקבלים שני עדים‪ ,‬ומוודאים את שניהם באמצעות שני המוודאים‪.‬‬
‫‪ .3‬בהינתן מילה‪ ,‬נבקש מהעד את החלוקה לתת־מילים ועדים לגבי כל תת־מילה‪.‬‬
‫הערה ‪ 6.30‬אבל‪ ,L1 ∈ N P ∧ L1 ⊆ L ; L ∈ N P ,‬למשל עבור ∅ = ‪ L1‬ו־ ‪ .L = AT M‬באופן דומה‪L1 ∈ N P ∧ L ⊆ L1 ; ,‬‬
‫‪ ,L ∈ N P‬למשל עבור ∗‪ L1 = Σ‬ו־ ‪.L = AT M‬‬
‫יתר על כן‪ ,‬לא ידוע האם ‪ .L ∈ N P =⇒ L ∈ N P‬לכן‪:‬‬
‫הגדרה ‪ ,coN P = {L : L ∈ N P } 6.31‬כלומר מחלקת השפות שהמשלים שלהן ב־ ‪.N P‬‬
‫∈ ‪ hki‬יכול להיות מחלק שלו‬
‫לדוגמא‪ ,‬השפה }‪ PRIME = {hii : i ∈ N is prime‬היא ב־ ‪ ,coN P‬שכן העד לכך ש־ ‪/ PRIME‬‬
‫)שהוא בהכרח קטן ממנו(‪ .‬אגב‪ ,‬הוכיחו ב־ ‪ 2002‬ש־ ‪.PRIME ∈ P‬‬
‫‪38‬‬
‫הערה ‪ 6.32‬יש בעיות שיודעים שהן ב־ ‪ N P ∩ coN P‬אבל לא יודעים האם הן ב־ ‪ .P‬לא ידועים גם היחסים בין ‪ N P‬ל־ ‪.coN P‬‬
‫מה שכן ברור זה ש־ ‪ ,P ⊆ N P ∩ coN P‬כי ‪ P‬סגורה למשלים‪.‬‬
‫טענה ‪ 6.33‬אם ‪ L1 ∈ coN P‬ו־ ‪ ,L2 ≤p L1‬אזי ‪.L2 ∈ coN P‬‬
‫הוכחה‪ :‬נובעת מיידית מכך שאם ‪ A ≤p B‬אז ‪.A ≤p B‬‬
‫הגדרה ‪ 6.34‬אם ‪ L ∈ coN P‬ולכל ‪ L0 ∈ coN P‬מתקיים ‪ L0 ≤p L‬אזי נאמר ש־ ‪ L‬היא ‪coN P‬־שלמה‪.‬‬
‫טענה ‪ L .1 6.35‬היא ‪coN P‬־שלמה אםם ‪ L‬היא ‪N P‬־שלמה‪.‬‬
‫‪ .2‬אם ‪ L‬היא ‪coN P‬־שלמה ו־ ‪ ,L ∈ N P‬אז ‪.N P = coN P‬‬
‫הוכחה‪ :‬תרגיל ‪ ,11‬שאלה ‪) .3‬זה ממש קל‪(.‬‬
‫הפילוסופיה של ‪ coNP‬ו־ ‪:IP‬‬
‫בהינתן טענה מתמטית ‪ P‬ומקום ‪ 1t‬לכתיבת ההוכחה שלה‪ ,‬ברור שבהינתן הוכחה אנו יכולים לוודא בזמן פולינומי שאכן מדובר‬
‫בהוכחה כשרה‪ .‬לכן הבעיה של מציאת הוכחה באורך ‪ t‬לטענה המתמטית ‪ P‬היא ב־ ‪ ,N P‬ומסתבר שהיא גם ‪N P‬־שלמה‪ .‬זו אחת‬
‫הסיבות שאנו מאמינים ש־ ‪ - P 6= N P‬אם ‪ ,P = N P‬להוכיח טענה זה קל באותה מידה כמו לבדוק בצורה טכנית שההוכחה נכונה‪.‬‬
‫הבעיה המשלימה היא‪ :‬בהינתן ‪ P‬טענה מתמטית‪ ,‬לא קיימת הוכחה באורך ‪ t‬לטענה‪ .‬זו כבר בעיה ‪coN P‬־שלמה‪ .‬לא ברור מהו‬
‫העד לכך שאין הוכחה )שאפשר לבדוק בזמן פולינומי!(‪ ,‬בעוד שהיה ברור לגמרי מהו העד לקיום ונכונות הוכחה ‪ -‬ההוכחה עצמה‪.‬‬
‫אותו קושי נכון להרבה בעיות ‪coN P‬־שלמות‪ :‬איך משתכנעים שאין בגרף מעגל המילטון? איך משתכנעים שאין בגרף קליקה בגודל‬
‫‪?k‬‬
‫האלטרנטיבה למוודאים שקיימת עבור ‪ coN P‬היא "לדבר עם מישהו" בזמן פולינומי ולהשתכנע‪ .‬קוראים לזה פרוטוקול‬
‫אינטראקטיבי ונראה בהמשך ש־ ‪.coN P ⊆ IP‬‬
‫‪6.9‬‬
‫אינטראקטאביליות )‪ (Intractability‬וסימולציה בזמן‬
‫∈ ‪ .L‬לדוגמא‪ ,‬נרצה למצוא‬
‫מטרתנו עבור )‪ t(n‬כלשהי למצוא ])‪ L ∈ TIME[t(n‬כך שעבור )‪/ TIME[r(n)] ,r(n) < t(n‬‬
‫∈ ‪ .L‬מהדיון ינבע גם ש־ ‪ ,P ( EXPTIME‬כלומר איפשהו בין ‪ P‬ל־ ‪ EXPTIME‬באמת‬
‫] ‪ L ∈ TIME[n3‬אבל ] ‪/ TIME[n2‬‬
‫מתווספות שפות חדשות‪.‬‬
‫הרעיון הכללי‪ :‬יהיו לנו מכונות טיורינג ‪ M, M 0‬כך ש־ ‪ M 0‬מסיימת לחשב מהר יחסית ו־ ‪ M‬עובדת יותר זמן‪ .‬רוצים להשתמש‬
‫ב־ ‪ M‬כדי לחשב שפה ש־ ‪ M 0‬לא יכולה לחשב‪ .‬כדי ש־ ‪ M 0‬תמיד לא תצליח לחשב את מה ש־ ‪ M‬מחשבת‪ M ,‬יכולה לסמלץ ריצה‬
‫של ‪ M 0‬ולענות את ההיפך‪ .‬כמובן‪ M ,‬לא מכירה את ‪ M 0‬ולכן צריכה לסמלץ את כל המכונות שרצות בזמן של ‪ ,M 0‬ולעשות את‬
‫זה בזמן יעיל‪) .‬כשראינו מכונת טיורינג אוניברסאלית‪ ,‬עלות הסימולציה הייתה ) ‪ ,O(n2‬וזה לא יאפשר לנו להפריד בין מחלקות כמו‬
‫] ‪ TIME[n3‬ו־ ] ‪(.TIME[n2‬‬
‫הגדרה ‪ 6.36‬תהי ‪ t : N → N‬ומתקיים )‪ .t(n) = Ω(n log n‬נאמר ש־ ‪ t‬חשיבה בזמן אם קיימת מכונת טיורינג שבהינתן הקלט ‪1n‬‬
‫מחשבת את )‪ t(n‬בייצוג בינארי בזמן ))‪.O(t(n‬‬
‫הסיבה לחסם התחתון היא שאפילו רק למצוא את אורך הקלט שנתון בייצוג אונארי לוקח זמן ‪.n log n‬‬
‫דוגמאות‪:‬‬
‫‪ t(n) = n2 .1‬חשיבה בזמן ‪ -‬לוקח ‪ n log n‬זמן למצוא את ‪) n‬קידום מונה באורך ‪ log n‬במשך ‪ n‬צעדים( ואז העלאה בריבוע‬
‫לוקחת זמן שהוא פולינומי ב־ ‪.log n‬‬
‫‪ t(n) = nblog2 nc .2‬חשיבה בזמן‪.‬‬
‫‪ t(n) = 2n .3‬חשיבה בזמן )‪ ,O(n‬שכן נכתוב ‪ 1‬ואז על כל ספרה של הקלט נוסיף ‪ 0‬לפלט‪.‬‬
‫מחשבת את הקונפיגורציה של ‪ M‬בריצתה על‬
‫משפט ‪) 6.37‬משפט הסימולציה בזמן( קיימת מכונת טיורינג ‪ S‬שבהינתן )‪ (hM i, w, t‬‬
‫‪ w‬במשך ‪ t‬צעדים‪ ,‬ומתקיים‪ :‬אם |‪ n = |hM i| + |w‬ו־ ‪ t ≥ n‬אזי ‪ S‬מסיימת לרוץ בזמן )‪.O t(|hM i|3 + log t‬‬
‫הוכחה‪ :‬קצת אינטואיציה ‪ -‬בביטוי המפחיד שאנו רוצים להוכיח‪ |hM i| ,‬מופיע כי אנו צריכים גישה לקידוד של ‪ M‬בכל צעד של‬
‫הסימולציה‪ ,‬ו־ ‪ log t‬מופיע כי צריך לספור מ־ ‪ 0‬עד ‪ t‬את צעדי הסימולציה‪ .‬כעת נעבור להוכחה‪.‬‬
‫נשים לב שבהינתן מצב ‪ q‬של ‪ M‬ואות ‪ a‬מתוך א"ב העבודה שלה‪ ,‬ניתן לחשב את )‪ δM (q, a‬בזמן ) ‪ .O(|hM i|3‬איפה הבעיות?‬
‫‪ .1‬צריך להפריד את ‪ hM i‬מהסרט של ‪ M‬תוך כדי סימולציה )אנחנו צריכים מכונה בעלת סרט אחד(‪.‬‬
‫‪ .2‬צריך להחזיר את הראש בכל פעם לקידוד של ‪ M‬וכשהריצה נמצאת בשלבים מתקדמים‪ ,‬יכול להיות שזה כבר ייקח יותר מאשר‬
‫) ‪ O(|hM i|3‬זמן‪.‬‬
‫‪ .3‬צריך לעצור אחרי ‪ t‬צעדים‪ ,‬כלומר צריך לשמור את המונה שסופר צעדים‪ .‬אם שומרים אותו בתחילת הסרט‪ ,‬שוב כדי לעדכנו‬
‫צריך לחזור לתחילת הסרט וזה ייקח זמן שגדול מ־ ‪.log t‬‬
‫‪39‬‬
‫אילוסטרציה‪:‬‬
‫‪M 0 s head‬‬
‫↓‬
‫]‪[. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪t #hM i #‬‬
‫‪M 0 s tape‬‬
‫כדי לפתור את הבעיות הנ"ל‪ ,‬נצטרך לאחסן את המידע שמשתמשים בו בסמוך למקום שבו צריך אותו‪ ,‬כלומר בסמוך לראש‬
‫המסומלץ‪ .‬את תאי הסרט של ‪ S‬נחלק לשלוש שכבות‪ ,‬כלומר כל תא יהיה שלשה‪:‬‬
‫סרט העבודה של ‪ - M‬בקידוד לא"ב של ‪S‬‬
‫המצב הנוכחי ‪ q‬והקידוד של ‪ ,M‬משמאלו‬
‫המונה שסופר את מספר הצעדים שבוצעו‬
‫בנוסף‪ ,‬נצטרך סימן מיוחד‪ ,‬למשל ˙‬
‫ )נקודה מעל(‪ ,‬כדי לציין את המקום שבו הראש של ‪ M‬נמצא על סרט העבודה‪ .‬נשים לב‬
‫שגם ‪ q‬וגם ‪ hM i‬יהיו כתובים‪ ,‬ככל הנראה‪ ,‬על מספר תאים‪ ,‬אבל בכל מקרה בשכבה השניה מתחת למקום שבו נמצא הראש של ‪.M‬‬
‫כנ"ל לגבי המונה‪.‬‬
‫למשל‪ ,‬כאשר סרט החישוב של ‪ M‬מכיל ‪ ,ab‬הראש נמצא מעל ‪ ,a‬והמצב הוא ‪ ,q‬תמונת המצב של הסרט של ‪ S‬תהיה כזו‪:‬‬
‫˙‪a‬‬
‫‪b‬‬
‫‪hM i‬‬
‫‪q‬‬
‫המונה‬
‫ולאחר שהראש זז ימינה והחליף את ‪ a‬ב־ ‪ ,c‬תמונת המצב של הסרט של ‪ S‬תהיה כזו‪:‬‬
‫‪c‬‬
‫˙‪b‬‬
‫‪q‬‬
‫‪hM i‬‬
‫המונה‬
‫כלומר‪ ,‬בכל צעד אנו כותבים את המונה‪ ,‬המצב‪ ,‬והקידוד של המכונה מתחת לתא שאליו זזנו‪ ,‬וצריך לחסר מהמונה‪ .‬כל צעד‬
‫חישוב של ‪ M‬ניתן לפיכך לסמלץ בזמן )‪ O(|hM i|3 + log t‬ולכן מתקבל החסם הנדרש לגבי עלות כל הסימולציה‪ ,‬שנמשכת ‪ t‬צעדים‪.‬‬
‫הערה ‪ 6.38‬הדרישה ‪ t ≥ n‬נועדה להבטיח שיצירת המצב ההתחלתי )שלוקחת זמן ליניארי ב־ ‪ (n‬לא תשפיע על ההתנהגות‬
‫האסימפטוטית של הסימולציה‪.‬‬
‫מסקנה ‪ 6.39‬אם ‪ t : N → N‬פונקציה חשיבה בזמן‪ ,‬אז קיימת מכונת סימולציה ‪ S 0‬המקיימת‪:‬‬
‫‪ .1‬על קלט באורך ‪ S 0 ,n‬רצה בזמן ))‪;O(t(n‬‬
‫)‪t(n‬‬
‫‪ .2‬על קלט מהצורה )‪ S 0 ,(hM i, w‬מחשבת את הקונפיגורציה של ‪ M‬בריצתה על הקלט )‪ (hM i, w‬במשך ‪b |hM i|3 +log t(n) c‬‬
‫צעדים‪.‬‬
‫)‪ .t0 = b |hM i3t(n‬ניתן למכונה ‪ S‬מהמשפט לטפל בקלט‬
‫הוכחה‪ :‬פעולת המכונה תהיה כך‪ .‬ראשית‪ ,‬מ־ )‪ (hM i, w‬נחשב את ‪|+log t(n) c‬‬
‫) ‪ (hM i, (hM i, w), t0‬ונחזיר את מה ש־ ‪ S‬מחזירה‪) .‬יש גם תקינות קלט שלוקחת זמן ליניארי‪(.‬‬
‫נבדוק זמנים‪ :‬לחשב את |‪ |hM i| + |w‬לוקח זמן ‪ n log n‬וזה בסדר כי ‪ t‬חשיבה בזמן )כלומר‪ ,‬חסומה מלרע ע"י ‪ .(n log n‬כדי‬
‫לחשב את ‪ ,t0‬צריך לחשב את )‪ - t(n‬בזמן ))‪ O(t(n‬כי היא חשיבה בזמן‪ ,‬לחשב )‪ log t(n‬לוקח זמן ))‪ ,O(log t(n‬לחשב את ‪|hM i|3‬‬
‫אפשר בזמן פולי־לוגריתמי‪ ,‬ולבסוף לחשב את המנה )בשלמים!( כנ"ל‪.‬‬
‫‬
‫כלומר‪ ,‬חישוב ‪ t0‬לוקח זמן ))‪ .O(t(n‬בניית הקלט ל־ ‪ S 0‬זניחה לעומת הריצה של ‪ S‬שהוא ) ‪ .O t0 (|hM i|3 + log t0‬גם כאן‬
‫מקבלים ))‪ O(t(n‬כנדרש‪.‬‬
‫)משפט הסימולציה בזמן( אם ‪ t : N → N‬חשיבה בזמן‪ ,‬אזי קיימת שפה ])‪ L ∈ TIME[t(n‬אבל אי אפשר להכריע את‬
‫‪6.40‬‬
‫‬
‫משפט ‬
‫)‪t(n‬‬
‫‪ L‬בזמן )‪.o log t(n‬‬
‫הוכחה‪ :‬נצביע במפורש על השפה הזאת‪ .‬זוהי השפה הבאה‪:‬‬
‫‬
‫‬
‫)‪t(n‬‬
‫‪0‬‬
‫=‪L = {(hM i, w) : n := |hM i| + |w|, t :‬‬
‫‪:‬‬
‫)‪|hM i|3 + log t(n‬‬
‫}‪M does not accept (hM i, w) within t0 steps‬‬
‫ראשית‪ ,‬ברור ש־ ])‪ L ∈ TIME[f (n‬כי בהינתן ‪ hM i, w‬נריץ את ‪ M‬על ‪ w‬ונבדוק האם היא מקבלת תוך ‪ t0‬צעדים‪ .‬לפי משפט‬
‫הסימולציה‪ ,‬יש לנו מכונה שעושה את זה בזמן ))‪ ,O(f (n‬ואם ‪ M‬לא קיבלה ‪ -‬נקבל‪.‬‬
‫‪40‬‬
‫כעת נניח בשלילה שקיימת מ"ט ‪ M0‬המכריעה את ‪ L‬ורצה בזמן‬
‫‪k‬‬
‫קלט מהצורה )‪ .(hM0 i, w‬עבור ‪ n‬גדול מספיק מתקיים ‪= t0‬‬
‫‬
‫)‪t(n‬‬
‫)‪log t(n‬‬
‫)‪t(n‬‬
‫)‪|hM0 i|3 +log t(n‬‬
‫‬
‫‪j‬‬
‫‪ .r(n) = o‬בפרט הדבר נכון כאשר ‪ M0‬רצה על‬
‫< )‪ r(n‬כיוון ש־ |‪ |hM0 i‬קבוע‪ .‬נבחר קלט מהצורה‬
‫)‪ (hM0 i, w‬שאורכו ‪ n‬מספיק גדול כנ"ל‪.‬‬
‫∈ )‪ (hM0 i, w‬וזו סתירה כי ‪ M0‬מכריעה את‬
‫כעת אם ‪ M0‬מקבלת את )‪ (hM0 i, w‬אז היא מקבלת אותו בזמן ‪ r(n) < t0‬ולכן ‪/ L‬‬
‫‪ .L‬להיפך‪ ,‬אם ‪ M0‬דוחה את )‪ (hM0 i, w‬אז זה אומר שהיא לא מקבלת תוך ‪ r(n) < t0‬צעדים ולכן ‪ (hM0 i, w) ∈ L‬וזו שוב סתירה‬
‫כי ‪ M0‬אמורה לקבל את )‪ (hM0 i, w‬כי היא מכריעה את ‪.L‬‬
‫‪7‬‬
‫סיבוכיות זיכרון‬
‫בפרק זה נתבונן על מדד אחר של "ביצועי" מכונת טיורינג ‪ -‬כמות הזיכרון שהיא משתמשת בה‪ .‬נשים לב שלכל המודלים של מ"ט‬
‫שראינו )מספר סרטים‪ RAM ,‬וכו'( הצלחנו לעשות סימולציה בזיכרון ליניארי אפילו אם הזמן היה ריבועי או יותר‪ .‬זה די מתבקש‪,‬‬
‫שהרי אפשר להשתמש שוב ושוב באותו הזיכרון‪ ,‬מה שאי אפשר לעשות לגבי זמן‪.‬‬
‫‪7.1‬‬
‫מחלקות זיכרון‪ PSPACE ,‬ו־ ‪NPSPACE‬‬
‫הגדרה ‪ 7.1‬אם ‪ M‬מכונת טיורינג דטרמיניסטית שלכל קלט ‪ x‬עוצרת תוך שימוש ב־ )|‪ O(f (|x‬תאי סרט‪ ,‬אז נאמר ש־ ∈ ) ‪L(M‬‬
‫])‪.SPACE[f (n‬‬
‫)המטרה של ה־ ‪ O‬כאן היא להבטיח שלא תהיה חשיבות לא"ב של הסרט‪ ,‬כל עוד הוא לא אונארי‪(.‬‬
‫אם ‪ N‬מכונת טיורינג לא דטרמיניסטית שלכל קלט ‪ x‬עוצרת תוך שימוש ב־ ))|‪ O(f (|x‬תאי סרט‪ ,‬ובנוסף‪:‬‬
‫‪ .1‬אם ‪ N‬מקבלת את ‪ ,x‬אז קיימת ריצה מקבלת‪.‬‬
‫‪ .2‬אם ‪ N‬דוחה את ‪ ,x‬אז כל הריצות דוחות‪.‬‬
‫אז נאמר ש־ ])‪.L(N ) ∈ NSPACE[f (n‬‬
‫לגבי שפה כלשהי ‪ ,L‬נאמר ש־ ])‪ L ∈ SPACE[f (n‬אם קיימת מ"ט דטרמיניסטית שמכריעה אותה בזמן ))‪ ,O(f (n‬וכנ"ל לגבי‬
‫])‪.NSPACE[f (n‬‬
‫הערה ‪ 7.2‬יש בעיה עם ההגדרה הזאת עבור מחלקות מקום תת־ליניאריות‪ ,‬שכן הקלט עצמו כבר תופס מקום שהוא ליניארי באורך‬
‫הקלט‪ .‬כדי להתמודד עם זה‪ ,‬כל המכונות שלנו יהיו בעלות שני סרטים‪:‬‬
‫‪ .1‬סרט הקלט ‪ -‬הקלט כתוב עליו ואסור לשנותו‪.‬‬
‫‪ .2‬סרט החישוב ‪ -‬מותר לשנותו‪.‬‬
‫והשאלה על ‪ SPACE‬היא לגבי סרט החישוב‪ .‬כעת ‪ f‬יכולה להיות גם פונקציה תת־ליניארית‪ ,‬כמו למשל ‪ .log‬למשל‪ ,‬כל שפה‬
‫רגולרית תהיה ב־ ]‪ ,SPACE[0‬כי קיימת מ"ט שמכריעה אותה והיא פשוט ‪.DFA‬‬
‫הגדרה ‪7.3‬‬
‫] ‪SPACE[nk‬‬
‫[‬
‫=‬
‫‪PSPACE‬‬
‫‪k∈N‬‬
‫] ‪NSPACE[nk‬‬
‫[‬
‫=‬
‫‪NPSPACE‬‬
‫]‪SPACE[log n‬‬
‫=‬
‫‪L = LOGSPACE‬‬
‫]‪NSPACE[log n‬‬
‫=‬
‫‪N L = NLOGSPACE‬‬
‫‪k∈N‬‬
‫לדוגמא‪ - SAT ∈ PSPACE ,‬נעבור על כל ההשמות‪ ,‬כלומר נכתוב אחת על הסרט בכל רגע ונבדוק האם היא מספקת את הנוסחא‪.‬‬
‫ברור שכמות הזיכרון היא פולינומיאלית ‪ -‬ולמעשה ליניארית ‪ -‬באורך הנוסחא‪.‬‬
‫הערה ‪ 7.4‬בהינתן מכונה שעובדת ב־ ])‪ TIME[f (n‬ברור שהיא גם ב־ ])‪ SPACE[f (n‬שהרי היא לא יכולה להשתמש ביותר תאי‬
‫סרט מאשר צעדי חישוב‪ .‬לכן‪:‬‬
‫])‪⊆ SPACE[f (n‬‬
‫])‪⊆ NSPACE[f (n‬‬
‫])‪TIME[f (n‬‬
‫])‪NTIME[f (n‬‬
‫להיפך‪ ,‬בהינתן מכונה שעובדת ב־ ])‪ ,SPACE[f (n‬יש מספר חסום של קונפיגורציות שמשתמשות ב־ ))‪ O(f (n‬תאי סרט‪ .‬אם‬
‫רצים יותר זמן‪ ,‬חוזרים על אותה קונפיגורציה פעמיים ‪ -‬ולכן הריצה לא תסתיים‪ .‬קונפיגורציה מורכבת ממצב המכונה‪ ,‬מקום הראש‬
‫‪41‬‬
‫על הסרט הראשון‪ ,‬מקום הראש על הסרט השני‪ ,‬ומצב הסרט השני )שהרי מצב סרט הקלט תמיד קבוע(‪ .‬יש לנו |‪ |Q‬מצבים‪|x| ,‬‬
‫אפשרויות למקום הראש על סרט הקלט‪ O(f (x)) ,‬מצבים לראש על סרט החישוב‪ ,‬ו־ ))|‪ |Γ|O(f (|x‬מצבים של סרט החישוב‪ .‬זה חסם‬
‫לא מדויק במיוחד‪ ,‬והוא נותן‪:‬‬
‫] ))‪SPACE[f (n)] ⊆ TIME[n · 2O(f (n‬‬
‫כאשר נשים לב שבסיס החזקה לא משנה בגלל ה־ ‪ O‬במעריך‪ .‬באותו אופן‪,‬‬
‫] ))‪NSPACE[f (n)] ⊆ NTIME[n · 2O(f (n‬‬
‫נוכל להסיק מכאן‪:‬‬
‫‪NL ⊆ NP‬‬
‫‪L ⊆ P,‬‬
‫‪N P ⊆ NPSPACE,‬‬
‫‪P ⊆ PSPACE,‬‬
‫שאלה פתוחה‪ :‬האם ‪?L ( N L‬‬
‫מכאן נובע העניין בבעיות ‪N L‬־שלמות וקשות‪ ,‬וכדי לדבר עליהן נצטרך להגדיר רדוקציה חלשה יותר מאשר רדוקציה פולינומיאלית‪.‬‬
‫זאת משום שנראה בהמשך ש־ ‪ N L ⊆ P‬ולכן רדוקציה פולינומיאלית היא חזקה מדי ‪ -‬הרדוקציה יכולה פשוט להכריע את הבעיה‬
‫ולהמשיך הלאה‪ .‬אנחנו נצטרך רדוקציה שרצה ב־ ‪.LOGSPACE‬‬
‫‪7.2‬‬
‫שלמות ב־ ‪ ,NL‬רדוקציית ‪LOGSPACE‬‬
‫הבעיה הקנונית של ‪ N L‬היא ‪.PATH‬‬
‫הגדרה ‪7.5‬‬
‫}‪PATH = {hG, s, ti : G is a directed graph, there is a path in G from s to t‬‬
‫טענה ‪.PATH ∈ N L 7.6‬‬
‫הוכחה‪ :‬נציג מכונת טיורינג לא דטרמיניסטית שמכריעה את ‪ PATH‬ופועלת בזיכרון לוגריתמי באורך הקלט‪ .‬האלגוריתם שהמכונה‬
‫מממשת‪:‬‬
‫‪ .1‬אתחל ‪v ← s‬‬
‫‪ .2‬באופן לא דטרמיניסטי‪) v ← u : (v, u) ∈ E ,‬מתוך כל הצלעות המקיימות זאת(‬
‫‪ .3‬אם ‪ ,v = t‬קבל‬
‫‪ .4‬אחרת‪ ,‬חזור על שלב ‪ ,2‬אבל לא יותר מאשר | ‪ |V‬פעמים‬
‫‪ .5‬דחה‬
‫ברור שהמגבלה על | ‪ |V‬תקינה כי אם יש מסלול‪ ,‬יש מסלול שמשתמש בלא יותר מאשר | ‪ |V‬צלעות‪ ,‬בפרט מסלול פשוט‪ ,‬ונכונות‬
‫האלגוריתם ברורה‪ .‬כמות המקום שמשתמשים בו‪ :‬אנו צריכים מקום למונה ול־ ‪ ,v‬כל אחד מהם בין ‪ 1‬ל־ | ‪ |V‬ולכן כמות המקום ‪-‬‬
‫בייצוג בבסיס ‪ - 2‬היא )| ‪ O(log |V‬ולכן ‪.PATH ∈ N L‬‬
‫הגדרה ‪ 7.7‬יהיו ‪ A, B‬שפות כלשהן‪ .‬רדוקציית ‪ LOGSPACE‬זוהי פונקציה חשיבה ‪ f : Σ∗A → Σ∗B‬הפועלת ב־ ‪ LOGSPACE‬כך‬
‫ש־ ‪ .x ∈ A ⇐⇒ f (x) ∈ B‬המשמעות של "חשיבה ב־ ‪ "LOGSPACE‬היא שיש שלושה סרטים‪:‬‬
‫‪ .1‬סרט הקלט ‪ -‬לקריאה בלבד‪.‬‬
‫‪ .2‬סרט חישוב ‪ -‬לקריאה ולכתיבה‪.‬‬
‫‪ .3‬סרט הפלט ‪ -‬לכתיבה בלבד‪.‬‬
‫והדרישה היא שמספר התאים שמשתמשים בהם בסרט החישוב יהיה )‪.O(log n‬‬
‫אם קיימת רדוקציית ‪ LOGSPACE‬בין ‪ A‬ל־ ‪ ,B‬נסמן ‪.A ≤L B‬‬
‫טענה ‪ 7.8‬אם ‪ A ∈ N L‬אז ‪.A ≤L PATH‬‬
‫‪42‬‬
‫הוכחה‪ :‬בהינתן קלט ‪ x‬נבנה ‪ hG, s, ti‬כדלקמן‪ :‬יש לנו את ‪ ,N‬מ"ט לא דטרמיניסטית שמכריעה את ‪ A‬ב־ ‪ .LOGSPACE‬בגרף ‪,G‬‬
‫הקודקודים ‪ V‬יהיו הקונפיגורציות של ‪ N‬ו־ ‪ E‬הקשתות שמחברות בין שתי קונפיגורציות שניתן לעבור ביניהן באמצעות מעבר ‪.δ‬‬
‫אנחנו לא צריכים את כל הקונפיגורציות‪ ,‬אלא רק קונפיגורציות עם סרט באורך )|‪ - O(log |x‬והקבוע של ה־ ‪ O‬ידוע לנו מהמכונה‪.‬‬
‫יש מספר פולינומיאלי ב־ |‪ |x‬של קונפיגורציות כאלה‪ s .‬יהיה הקונפיגורציה ההתחלתית על ‪ ,x‬ו־ ‪ t‬תהיה קונפיגורציה מיוחדת שיש‬
‫אליה מעבר מכל קונפיגורציה מקבלת )כך אנו מטפלים באפשרות שיש כמה קונפיגורציות מקבלות ‪ -‬למשל‪ t ,‬מייצגת את ‪ qacc‬כאשר‬
‫על הסרט לא כתוב שום דבר(‪.‬‬
‫צריך להראות שהרדוקציה נכונה ופועלת ב־ ‪ .LOGSPACE‬כל קונפיגורציה מכילה )|‪ O(log |x‬ביטים ‪ -‬אינדקס‪ ,‬מספר המצב‪,‬‬
‫מצב הסרט שהוא בעצמו בגודל )|‪ ,O(log |x‬ומצב הראש שהוא מספר בין ‪ 1‬ל־ |‪ ;|x‬לאחר מכן עלינו לעבור על זוגות קונפיגורציות‬
‫)עדיין ‪ (LOGSPACE‬וכמובן כנ"ל לגבי ‪ .s, t‬הפלט כאן הוא בכלל לא ‪ ,LOGSPACE‬אבל על סרט החישוב אנחנו בהחלט משתמשים‬
‫רק ב־ )|‪ O(log |x‬מקום‪ .‬כמובן‪ ,‬הנכונות קלה‪.‬‬
‫לכן ‪ PATH‬היא ‪N L‬־שלמה‪.‬‬
‫הערה ‪ 7.9‬יש אלגוריתם פולינומיאלי בזמן שמכריע את ‪ ,PATH‬למשל ‪ BFS‬או ‪ .Dijkstra‬לכן ‪ .PATH ∈ P‬כמובן‪ ,‬אם יש רדוקציה‬
‫חשיבה ב־ ‪ LOGSPACE‬אז מהאבחנות שלנו קודם היא חשיבה ב־ ‪ P‬כמות שהיא )מספר הקונפיגורציות הוא פולינומיאלי(‪ ,‬כלומר‬
‫‪ ≤L‬גורר ‪ .≤p‬מזה נסיק ש־ ‪.N L ⊆ P‬‬
‫היררכיית המחלקות הידועה לנו כרגע‪:‬‬
‫‪L ⊆ N L ⊆ P ⊆ N P ⊆ NPSPACE‬‬
‫וגם‪:‬‬
‫‪P ⊆ PSPACE ⊆ NPSPACE‬‬
‫טענה ‪ 7.10‬אם ‪ A ≤L B‬ו־ ‪ B ∈ N L‬אז ‪.A ∈ N L‬‬
‫הוכחה‪ :‬נשים לב שזה לא טריוויאלי ‪ -‬הפלט של הרדוקציה יכול להיות פולינומיאלי‪ ,‬אין לנו חסם עליו בניגוד לרדוקציה פולינומיאלית‬
‫בזמן‪ .‬הרעיון הכללי הוא כזה‪ :‬לא חייבים להחזיק את כל )‪ f (x‬אלא אפשר לחשב אותו מספר פעמים‪.‬‬
‫בהינתן ‪ x‬קלט של ‪ A‬ורדוקציית ‪ LOGSPACE‬ל־ ‪ B‬שנסמנה ‪ ,f‬אנחנו מסמלצים את המכונה ‪ M‬שמכריעה את ‪ .B‬בכל פעם‬
‫ש־ ‪ M‬מנסה לקרוא קלט‪ ,‬אנחנו נחשב את )‪ f (x‬ב־ ‪ LOGSPACE‬ונפלוט רק את האות שהראש של ‪ M‬צריך כרגע ‪ -‬את זה נעשה‬
‫לכל צעד של ‪ .M‬כיוון ש־ ‪ B‬פועלת ב־ ‪ LOGSPACE‬ואנחנו לא שומרים את כל )‪ f (x‬אף פעם‪ ,‬מקבלים מכונה להכרעת ‪ A‬ב־‬
‫‪ LOGSPACE‬כנדרש‪.‬‬
‫הגדרה ‪ 7.11‬מוודא ‪ LOGSPACE‬זוהי מכונת טיורינג בעלת שלושה סרטים שהקלט שלה הוא זוג ‪ .x, y‬הסרט הראשון הוא סרט‬
‫קלט שעליו כתוב ‪ ,x‬וזהו סרט לקריאה בלבד‪ .‬הסרט השני הוא סרט העד שעליו כתוב ‪ ,y‬וזהו סרט לקריאה בלבד בכיוון אחד )ימינה‬
‫בלבד(‪ .‬הסרט השלישי הוא סרט העבודה‪ ,‬ואנו דורשים שצריכת המקום עליו תהיה )|‪.O(log |x‬‬
‫טענה ‪ A ∈ N L 7.12‬אםם קיים מוודא ‪ LOGSPACE‬עבורה ‪ V‬כך ש־ }) ‪.A = {x : ∃y, hx, yi ∈ L(V‬‬
‫הוכחה‪) :‬תרגיל ‪ ,12‬שאלה ‪ (3‬סקיצת הוכחה‪ :‬בהינתן מוודא‪ ,‬מ"ט לא דטרמיניסטית עבור ‪ A‬יכולה לסמלץ את המוודא על סרט‬
‫העבודה שלה‪ ,‬כאשר סרט הקלט שלה הוא גם סרט הקלט של המוודא‪ .‬מה לגבי סרט העד? ובכן‪ ,‬בכל פעם שהמוודא מבקש אות‬
‫מסרט העד‪ ,‬המכונה שלנו בוחרת אות באופן לא דטרמיניסטי ‪ -‬אין צורך לשמור את האות כי הסרט הוא חד־פעמי‪.‬‬
‫להיפך‪ ,‬העד הוא מהלך הריצה המקבלת )"כתובת"( של המ"ט הלא דטרמיניסטית עבור ‪ A‬על הקלט‪ .‬המוודא יכול לבדוק את‬
‫תקינות המהלך והעובדה שהריצה מקבלת בדומה להוכחה עבור מוודאים ב־ ‪.N P‬‬
‫‪7.3‬‬
‫שלמות ב־ ‪PSPACE‬‬
‫אנו רוצים למצוא שפה שלמה ב־ ‪ ,PSPACE‬ומשתמשים ברדוקציות פולינומיאליות בזמן לשם כך‪ .‬אפשר היה באופן עקרוני להגדיר‬
‫רדוקציית ‪ PSPACE‬ולהשתמש בה‪ ,‬אבל המטרה שלנו היא להפריד בין ‪ P‬ל־ ‪ .PSPACE‬כיוון שבמילא ‪ ,P ⊆ PSPACE‬רדוקציית‬
‫‪ PSPACE‬מבעיה ב־ ‪ P‬יכולה בעצמה לפתור את הבעיה‪ ,‬כלומר היא חזקה מדי‪.‬‬
‫השפה שנתבונן בה תהיה ‪ ,TQBF‬שפת הנוסחאות הבוליאניות הסגורות )עם כמתים ‪ (Totally Quantified Boolean Formula -‬שערך‬
‫האמת שלהן הוא ‪.T‬‬
‫בנוסחא כזו אנו מרשים להשתמש גם בכמת ∃ וגם בכמת ∀‪ ,‬ודורשים שכל המשתנים יהיו תחת כמת‪ .‬לכן‪ ,‬ערך האמת של הנוסחא‬
‫קבוע ואינו תלוי בהשמה על המשתנים‪ .‬למשל‪ ,‬לנוסחא )‪ ∀x∃y(x ∨ y) ∧ (x ∨ y‬יש ערך אמת ‪ ,T‬שכן לכל ‪ x‬אפשר לבחור ‪.y = x‬‬
‫לעומת זאת‪ ,‬לנוסחא )‪ ∃y∀x(x ∨ y) ∧ (x ∨ y‬יש ערך אמת ‪ .F‬נרשה להכניס לנוסחא גם את הקבועים ‪.T, F‬‬
‫‪43‬‬
‫טענה ‪.TQBF ∈ PSPACE 7.13‬‬
‫הוכחה‪ :‬אלגוריתם להכרעת ‪ TQBF‬במקום פולינומיאלי על הנוסחא ‪:ϕ‬‬
‫‪ .1‬אם ב־ ‪ ϕ‬יש רק קבועים‪ ,‬נעבור עליה ונחשב את ערך האמת‪.‬‬
‫‪ .2‬אחרת‪ ,‬אם הכמת הראשון הוא ∃‪ ,‬כלומר ‪ ,ϕ = (∃x)ϕ0‬אז נציב פעם אחת ‪ x = T‬ופעם אחת ‪ ,x = F‬ובכל פעם נבצע קריאה‬
‫רקורסיבית כדי לבדוק האם הנוסחא החדשה היא ב־ ‪ .TQBF‬נחזיר "כן" אם אחת ההצבות הצליחה‪.‬‬
‫‪ .3‬אם ‪ ,ϕ = (∀x)ϕ0‬נעשה כנ"ל אבל נחזיר "כן" רק אם שתי ההצבות הצליחו‪.‬‬
‫קל להוכיח את נכונות האלגוריתם באינדוקציה על מספר הכמתים בנוסחא‪ .‬לגבי כמות המקום שמשתמשים בה‪ :‬יש כאן רקורסיה‪,‬‬
‫ובכל שלב של הרקורסיה אנחנו צריכים לזכור מה היה הערך ‪ -‬כלומר צריך מחסנית קריאות‪ .‬כל ‪ frame‬במחסנית תופס רק מקום‬
‫קבוע )כי אנחנו לא צריכים לשמור את כל הנוסחא‪ ,‬וגם אם כן זה יהיה בסדר(‪ ,‬ועומק הרקורסיה הוא כמספר המשתנים‪ .‬לכן כמות‬
‫המקום היא אכן פולינומיאלית באורך הנוסחא‪.‬‬
‫הערה ‪ 7.14‬בכל הדיון הזה לא הוכחנו ש־ ‪ TQBF‬היא שלמה ב־ ‪ .PSPACE‬ניתן למצוא את ההוכחה המלאה בוויקיפדיה או בספר‪,‬‬
‫והיא מתבססת על הרעיון של ‪ CANYIELD‬מהמשפט הבא‪.‬‬
‫עיקר העניין הוא שאפשר לבנות נוסחא המייצגת את מצב המכונה )בדומה למה שעשינו בהוכחה ש־ ‪ SAT‬היא ‪N P‬־שלמה(‪ ,‬ואף‬
‫נוסחא עבור קונפיגורציות ‪ ϕc1 ,c2 ,t‬שמקבלת ערך אמת ‪ T‬אםם המכונה המתאימה יכולה לעבור מ־ ‪ c1‬ל־ ‪ c2‬תוך ‪ t‬צעדים‪ .‬אז‪,‬‬
‫השאלה על קבלת מילה תוך ‪ x‬צעדים מצמטצמת לבדיקת הנכונות של הנוסחא ‪.ϕc0 ,cacc ,x‬‬
‫כאן העסק מסתבך מעט כי צריך להראות שאפשר לחשב את הרדוקציה בזמן פולינומי‪ ,‬ובאופן עקרוני עושה רושם שהנוסחא‬
‫מתפוצצת באופן אקספוננציאלי‪ .‬אבל‪ ,‬אנו יכולים לנצל את שני הכמתים כדי לשים לב למאפיין הבא‪:‬‬
‫‪ϕc1 ,c2 ,t ≡ ∃c0 ∀c3 , c4 ∈ {(c1 , c0 ), (c0 , c2 )}ϕc3 ,c4 ,d 2t e‬‬
‫ואת הנוסחא הזאת אפשר לבנות בזמן פולינומיאלי‪.‬‬
‫משפט ‪) 7.15‬משפט ‪ (Savitch‬אם )‪ f (n) = Ω(log n‬אז‪:‬‬
‫])‪NSPACE[f (n)] ⊆ SPACE[f 2 (n‬‬
‫הוכחה‪ :‬אנו נעשה כמה הנחות מקלות שמגבילות את הכלליות ‪ -‬נדרוש )‪ f (n) = Ω(n‬וגם ש־ ‪ f‬חשיבה ב־ ])‪ .SPACE[f (n‬נניח ש־‬
‫‪ N‬מ"ט לא דטרמיניסטית שעובדת ב־ ])‪ SPACE[f (n‬ונבנה מ"ט דטרמיניסטית שעובדת ב־ ])‪.SPACE[f 2 (n‬‬
‫נרצה לשאול על ‪ N‬את השאלה )‪ CANYIELD(c1 , c2 , t‬שמשמעותה ‪ -‬האם ניתן להגיע מהקונפיגורציה ‪ c1‬לקונפיגורציה ‪ c2‬תוך‬
‫ביצוע ‪ t‬צעדי חישוב‪.‬‬
‫להלן האלגוריתם )‪:CANYIELD(c1 , c2 , t‬‬
‫‪ .1‬אם ‪ ,t = 1‬ניתן לענות מהתבוננות ב־ ‪.δN‬‬
‫‪ .2‬אחרת‪ ,‬לכל ‪ c0‬אפשרית‪ :‬אם גם )‪ CANYIELD(c1 , c0 , b 2t c‬וגם )‪ CANYIELD(c0 , c2 , d 2t e‬קבל‪.‬‬
‫‪ .3‬דחה‪.‬‬
‫נכונות האלגוריתם ברורה מאינדוקציה על ‪ .t‬צריך לציין שאנו מסתכלים על ‪ c0‬שאורך תוכן הסרט שלה הוא לא יותר מאשר‬
‫))‪ ,O(f (n‬מהנתון על ‪.N‬‬
‫צריכת המקום של האלגוריתם‪ :‬כל רמה של הרקורסיה דורשת לשמור את ‪ c0‬כדי שנוכל למצוא את ה־ ‪ c0‬הבא‪ ,‬וכן עוד מספר‬
‫קבוע של קונפיגורציות‪ .‬כלומר‪ ,‬כל רמה צורכת מקום ))‪ O(f (n‬וכן צריך לשמור את ‪ .t‬עומק הרקורסיה הוא ‪.dlog2 te‬‬
‫כעת בהינתן ‪ x‬נרצה לבדוק האם ‪ N‬מקבלת את ‪ ,x‬וזה קורה אםם יש ריצה מהקונפיגורציה ההתחלתית על ‪ x‬לקונפיגורציה‬
‫מקבלת כלשהי‪ .‬נדרוש שתהיה ל־ ‪ N‬קונפיגורציה מקבלת יחידה ‪ -‬צריך בשביל זה מעבר מ־ ‪ qacc‬למצב מקבל חדש שבדרך אליו‬
‫מוחקים את כל הסרט ושמים את הראש במקום הראשון ‪ -‬וזה כמובן לא מגביל את הכלליות‪.‬‬
‫מספר הקונפיגורציות האפשריות בסה"כ הוא ))‪ ,2O(f (n‬כלומר ‪ N‬תרוץ לכל היותר במשך ))‪ 2O(f (n‬צעדים‪ .‬לכן‪ N ,‬מקבלת את‬
‫‪ x‬אםם ) ))‪ CANYIELD(c0 , cacc , 2O(f (n‬כאשר ‪ c0 , cacc‬הקונפיגורציות ההתחלתית והמקבלת בהתאמה‪.‬‬
‫כיוון שאנו יודעים את ‪ ,t‬עומק הרקורסיה הוא ))‪ O(f (n‬עם צריכת זיכרון של ))‪ O(f (n‬לכל ‪ ,frame‬ולכן סה"כ צריכת הזיכרון‬
‫היא ))‪ O(f 2 (n‬כנדרש‪ .‬נשים לב שכדי לרשום את ‪ t‬אנו צריכים ) ))‪ log(2O(f (n‬מקום‪ ,‬אבל זה בדיוק ))‪ O(f (n‬עדיין‪.‬‬
‫מסקנה ‪NPSPACE = PSPACE = coPSPACE = coNPSPACE 7.16‬‬
‫הוכחה‪ :‬מסקנה ישירה מהמשפט והעובדה ש־ ‪ PSPACE = coPSPACE‬שכן זו מחלקה של שפות המוגדרות ע"י מכונות דטרמיניסטיות‬
‫ואפשר להחליף את ‪ qacc‬ו־ ‪ qrej‬כפי שראינו בעבר כדי לקבל את השפה המשלימה‪.‬‬
‫טענה ‪ 7.17‬תהי ‪ f : N → N‬כך ש־ ‪ .f (n) ≥ n‬אז מתקיים ])‪.NTIME[f (n)] ⊆ SPACE[f (n‬‬
‫‪44‬‬
‫הוכחה‪) :‬תרגיל ‪ ,11‬שאלה ‪ (5‬סקיצת הוכחה‪ :‬בהינתן מ"ט לא דטרמיניסטית ‪ N‬המכריעה ])‪ ,L ∈ NTIME[f (n‬בונים מ"ט‬
‫דטרמיניסטית הפועלת במקום ))‪ O(f (n‬שמבצעת סימולציה של כל הריצות האפשריות של ‪ .N‬כדי לכתוב את הריצה הנוכחית אנו‬
‫צריכים ))‪ O(f (n‬מקום וכדי לבצע את הסימולציה עצמה ‪ -‬כנ"ל‪.‬‬
‫טענה ‪ 7.18‬השפה }‪w‬‬
‫‪is an LBA that accepts‬‬
‫‪ ALBA = {hM, wi : M‬היא ‪PSPACE‬־שלמה‪.‬‬
‫הוכחה‪) :‬תרגיל ‪ ,12‬שאלה ‪ (2‬סקיצת הוכחה‪ :‬ניזכר ש־ ‪ ALBA‬זוהי מכונת טיורינג דטרמיניסטית שאסור לה לחרוג בעבודתה מעבר‬
‫לקטע הסרט שעליו נמצא הקלט שלה‪ .‬ההוכחה היא באמצעות רדוקציה מכל ‪ .L ∈ PSPACE‬יש ל־ ‪ L‬מ"ט ‪ D‬הפועלת במקום‬
‫‪k‬‬
‫≥ ‪ cnk‬על מילים באורך ‪ .n‬בהינתן ‪ ,w‬הרדוקציה מייצרת את הזוג ‪ hM, w#c|w| i‬כאשר ‪ M‬פועלת כמו ‪ D‬כשהיא מתייחסת ל־ ‪#‬‬
‫כמו למקום ריק על הסרט‪ .‬כמובן‪ ,‬המקום שיש ל־ ‪ M‬מספיק מההנחה על ‪.D‬‬
‫‪7.4‬‬
‫סימולציה במקום‬
‫נרצה להגיע למשפט סימולציה במקום ומשפט היררכיה במקום בדומה למה שעשינו לגבי זמן‪.‬‬
‫הגדרה ‪ s : N → N 7.19‬המקיימת ‪ s(n) ≥ log n‬נקראת חשיבה במקום אם יש מ"ט ‪ M‬שבהינתן קלט מהצורה ‪ 1n‬פולטת את‬
‫הייצוג הבינארי של )‪ s(n‬תוך שימוש במקום ))‪.O(s(n‬‬
‫משפט‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪) 7.20‬משפט הסימולציה במקום( קיימת מ"ט ‪ S‬שבהינתן )‪ (hM i, w, s‬מקיימת את התנאים הבאים‪:‬‬
‫אם בריצתה על ‪ w‬המכונה ‪ M‬משתמשת ביותר מ־ ‪ s‬תאי סרט‪ ,‬או נכנסת ללולאה אינסופית‪ ,‬אז ‪ S‬תדחה‪.‬‬
‫אם בריצתה על ‪ w‬המכונה ‪ M‬משתמשת ב־ ≥ ‪ s‬תאי סרט ועוצרת‪ ,‬אז ‪ S‬תענה כמו ‪.M‬‬
‫‪ S‬משתמשת לכל היותר ב־ )‪ O(s log n‬תאי סרט‪ ,‬כאשר |‪.n = |hM i‬‬
‫הוכחה‪) :‬חלקית בלבד( אנו צריכים לסמלץ ‪ s‬תאים של ‪ ,M‬כל אחד בקידוד שלא יעלה על ‪ log n‬אותיות בא"ב של ‪ .S‬כמו כן נשים‬
‫לב שמכונה המשתמשת ב־ ‪ s‬תאי סרט ולא נתקעת רצה לכל היותר ) ‪ O(ns‬צעדים‪ .‬לכן‪:‬‬
‫‪ .1‬נחשב את ‪ .ns‬אם הסימולציה תימשך יותר צעדים מזה‪ ,‬נדחה‪) .‬נשים לב שהמקום הדרוש לשמירת מספר זה הוא בדיוק‬
‫‪(.s log n‬‬
‫‪ .2‬נקצה על סרט העבודה מקום ל־ ‪ s‬תוים של הא"ב־סרט של ‪ .M‬תוך כדי הסימולציה‪ ,‬אם חורגים מהמקום הנ"ל ‪ -‬נדחה‪.‬‬
‫‪ .3‬נבצע את הסימולציה כאשר סופרים בכל פעם כמה צעדים כבר עשינו‪ ,‬ונחזיר לבסוף את מה ש־ ‪ M‬מחזירה‪ .‬כאן למשל נצטרך‬
‫לרשום את המצב שמסמלצים תוך שימוש בא"ב של כמה שכבות‪ ,‬כמו שעשינו במשפט הסימולציה בזמן‪.‬‬
‫משפט ‪) 7.21‬משפט ההיררכיה במקום( אם ‪ s : N → N‬חשיבה במקום‪ ,‬אז קיימת ])‪ L ∈ SPACE[s(n‬אבל ‪ L‬לא ניתנת להכרעה‬
‫במקום ))‪.o(s(n‬‬
‫הוכחה‪) :‬תרגיל ‪ (12‬ההוכחה דומה מאוד להוכחת משפט ההיררכיה בזמן‪ .‬אנו בונים את השפה‬
‫}‬
‫‪space‬‬
‫)|‪f (|hM, wi‬‬
‫|‪log |hM i‬‬
‫‪using‬‬
‫‪hM, wi‬‬
‫‪does not accept‬‬
‫‪L = {hM, wi : M‬‬
‫)|‪ k = s(|hM,wi‬במקום ))‪ ,O(s(n‬כי ‪ s‬חשיבה במקום‪ .‬כעת מריצים את מכונת‬
‫ראשית‪ L ∈ SPACE[s(n)] ,‬כי אפשר לחשב את |‪log |hM i‬‬
‫הסימולציה על ‪ hM, w, ki‬וזה נעשה תוך זמן )‪ k log |hM i| = s(n‬כנדרש‪.‬‬
‫כעת מניחים בשלילה שקיימת מ"ט ‪ T‬המכריעה את ‪ L‬במקום ))‪ .o(s(n‬אז תהי )‪ r(n‬פונקציית סיבוכיות המקום של מכונה‬
‫)‪ .r(n) < logs(n‬נתבונן בהתנהגות של ‪ T‬על מילת קלט כלשהי ‪ hT, wi‬שארוכה מ־ ‪ n‬זה‪ .‬כמו‬
‫כזאת‪ ,‬ועבור ‪ n‬גדול מספיק מתקיים |‪|hT i‬‬
‫)|‪s(|hT,wi‬‬
‫|‪log |hT i‬‬
‫קודם‪ ,‬אם ‪ T‬מקבלת את הקלט‪ ,‬היא עושה זאת בשימוש בפחות מ־‬
‫‪ -‬אם ‪ T‬אינה מקבלת את הקלט‪ ,‬אז מילת הקלט כן בשפתה‪ ,‬וזו שוב סתירה‪.‬‬
‫מקום‪ ,‬ואז הקלט אינו בשפתה‪ ,‬וזו סתירה‪ .‬וגם להיפך‬
‫מסקנה ‪L ( PSPACE 7.22‬‬
‫והנה המצב המעודכן ביותר של מחלקות בזמן והמקום הידועות לנו כרגע‪:‬‬
‫‪L ⊆ N L ⊆ P ⊆ N P ⊆ PSPACE ⊆ EXPTIME‬‬
‫אנו יודעים שאחת ההכלות בין ‪ P‬ל־ ‪ EXPTIME‬היא הכלה ממש בגלל משפט ההיררכיה בזמן‪ ,‬ויודעים שאחת ההכלות בין ‪L‬‬
‫ל־ ‪ PSPACE‬היא הכלה ממש בגלל משפט ההיררכיה במקום‪ .‬לגבי שאר ההכלות‪ ,‬אנחנו רק מאמינים שהן הכלות ממש‪.‬‬
‫‪45‬‬
‫‪8‬‬
‫פרוטוקולים אינטראקטיביים ורנדומיות‬
‫בפרק זה נראה מודלים חישוביים חדשים‪ ,‬למשל מודל שבו "מוכיח" ו"מוודא" המנהלים ביניהם תקשורת פולינומיאלית כדי להשתכנע‬
‫בנכונות של טענה כלשהי בהסתברות גבוהה‪.‬‬
‫‪8.1‬‬
‫מבוא לרנדומיות במכונות טיורינג‬
‫הגדרה ‪ 8.1‬מכונת טיורינג המשתמשת ברנדומיות היא בעלת שלושה סרטים‪:‬‬
‫‪ .1‬סרט הקלט ‪ -‬לקריאה בלבד‪.‬‬
‫‪ .2‬סרט עבודה ‪ -‬לקריאה וכתיבה‪ ,‬כרגיל‪.‬‬
‫‪ .3‬סרט אקראיות ‪ -‬מחרוזת בינארית של ‪ 0/1‬באורך מסוים שניתן לקרוא כל ביט שלה פעם אחת בלבד‪ ,‬כאשר כל סדרה‬
‫בינארית מופיעה על הסרט בהסתברות אחידה‪ .‬כל קריאה מסרט האקראיות שקולה להטלת מטבע‪.‬‬
‫המכונה פועלת על הקלט ‪ x‬ועל המחרוזת האקראית ‪ .R‬עבור ‪ x‬נתון‪ ,‬אנו יכולים לשאול עבור כמה מה־ ‪R‬־ים האפשריים המכונה‬
‫תקבל ועבור כמה היא תדחה‪ ,‬ונסמן‪:‬‬
‫]‪Pr[M (x) = ACC‬‬
‫] ‪Pr[M (x) = REJ‬‬
‫כך נוכל להגדיר מספר מודלים של חישוב הסתברותי‪:‬‬
‫‪ - random polynomial time - RP .1‬אסור לטעות‪:‬‬
‫‪1‬‬
‫‪2‬‬
‫‪Pr[M (x) = REJ ] = 1‬‬
‫≥ ]‪Pr[M (x) = ACC‬‬
‫⇒=‬
‫‪x∈L‬‬
‫⇒=‬
‫∈‪x‬‬
‫‪/L‬‬
‫‪:coRP .2‬‬
‫‪Pr[M (x) = ACC] = 1‬‬
‫‪1‬‬
‫≥ ] ‪Pr[M (x) = REJ‬‬
‫‪2‬‬
‫⇒=‬
‫‪x∈L‬‬
‫⇒=‬
‫∈‪x‬‬
‫‪/L‬‬
‫‪:BP P .3‬‬
‫‪2‬‬
‫‪3‬‬
‫‪2‬‬
‫≥ ] ‪Pr[M (x) = REJ‬‬
‫‪3‬‬
‫≥ ]‪Pr[M (x) = ACC‬‬
‫⇒=‬
‫‪x∈L‬‬
‫⇒=‬
‫∈‪x‬‬
‫‪/L‬‬
‫הערה ‪ 8.2‬אנו יודעים ש־ ‪ ,P ⊆ RP ⊆ BP P‬ורוב החוקרים סבורים ש־ ‪.BP P ⊆ P‬‬
‫‪8.2‬‬
‫מבוא לפרוטוקולים אינטראקטיביים‬
‫הגדרה ‪ 8.3‬שני גרפים ‪ G1 , G2‬נקראים איזומורפיים אם הם זהים עד כדי שמות הקודקודים‪ .‬לדוגמא‪ ,‬הגרפים הבאים הם איזומורפיים‬
‫‪ -‬אפשר לקבל את ‪ G1‬מ־ ‪ G2‬ע"י החלפת הקודקוד ‪ 2‬ב־ ‪.1‬‬
‫הערה ‪ 8.4‬כמובן‪ GraphIso ∈ N P ,‬שכן העד זוהי פשוט פרמוטציה של הקודקודים‪ ,‬וכמובן הווידוא לוקח זמן פולינומיאלי‪ .‬לעומת‬
‫זאת‪ ,‬להשתכנע בכך ששני גרפים הם לא איזומורפיים זה די קשה‪ ,‬אלא אם כן למשל הדרגות של הקודקודים אינן אותו הדבר‪ .‬אם‬
‫זאת‪ ,‬מעצם ההגדרה‪.GraphNonIso ∈ coN P ,‬‬
‫‪46‬‬
‫אנו זקוקים למודל של אינטראקציה ‪ -‬המכונה הפולינומיאלית "מדברת" עם גוף כל־יכול )נקרא לו "קהל"( שיכול לענות על שאלות‪,‬‬
‫שמחליף את ה"עד" מקודם‪ .‬הפרוטוקול הוא כזה‪:‬‬
‫‪ .1‬מטילים מטבע כדי לדעת האם מסתכלים על ‪ G1‬או על ‪.G2‬‬
‫‪ .2‬מגרילים פרמוטציה אקראית ‪ π‬ומפעילים אותה על הגרף שנבחר‪.‬‬
‫‪ .3‬מראים ל"קהל" את הגרפים ושואלים ‪ -‬מאיזה מהם הגענו לגרף החדש לאחר הפעלת ‪) ?π‬כלומר‪ ,‬מה הביט שהגרלנו בשלב ‪(.1‬‬
‫‪ .4‬אם הקהל צדק‪ ,‬נאמר ש־ ‪ G1‬ו־ ‪ G2‬אינם איזומורפיים‪) .‬ולהיפך‪(.‬‬
‫הנקודה היא שאם הקהל הכל־יכול הזה טועה‪ ,‬אז הגרפים איזומורפיים ‪ -‬שכן אפשר לקבל את הגרף שהתקבל לאחר הפעלת ‪ π‬גם‬
‫מ־ ‪ G1‬וגם מ־ ‪) G2‬רק צריך עוד פרמוטציה בדרך(‪ .‬אם כן‪ ,‬במקרה שהגרפים לא איזומורפיים אנו תמיד צודקים‪ .‬אם הגרפים כן‬
‫איזומורפיים‪ ,‬אנו צודקים בהסתברות ≤ ‪. 21‬‬
‫אמנם‪ ,‬ההסתברות הזאת ) ‪ ( 12‬לא נראית טובה במיוחד ‪ -‬אבל אנחנו יכולים לחזור על הפרוטוקול שוב ושוב ובכל פעם אנו מקטינים‬
‫את הסיכוי לטעות באופן אקספוננציאלי‪ .‬אחרי ‪ k‬הפעלות של הפרוטוקול נקבל הסתברות לטעות של ≥ ‪. 21k‬‬
‫נשים לב גם שהפרוטוקול רץ בזמן פולינומיאלי‪.‬‬
‫הגדרה ‪ 8.5‬מחלקת השפות שאפשר להכריע ע"י ביצוע פרוטוקול כנ"ל בזמן פולינומיאלי נקראת ‪.IP‬‬
‫‪8.3‬‬
‫בעיית הזהות )‪(Identity‬‬
‫‪n‬‬
‫בעיית הזהות מוגדרת כך‪ :‬שני אנשים‪ ,‬אליס ובוב‪ ,‬מקבלים שניהם מחרוזות בינאריות‪ .‬אליס מקבלת את המחרוזת }‪ x ∈ {0, 1‬ובוב‬
‫מקבל את המחרוזת ‪ .y ∈ {0, 1}n‬בוב טוען ש־ ‪ y = x‬ורוצה להוכיח זאת לאליס‪.‬‬
‫‪Alice‬‬
‫‪Bob‬‬
‫‪B‬‬
‫‪A‬‬
‫→←‬
‫‪n‬‬
‫‪y ∈ {0, 1}n‬‬
‫}‪x ∈ {0, 1‬‬
‫פתרון טריוויאלי הוא להעביר לאליס את כל ‪ ,y‬ודרושים לשם כך ‪ n‬ביטים‪ .‬במקום זאת‪ ,‬אנו רוצים פתרון הסתברותי )למשל‪ ,‬עם‬
‫הסתברות לטעות > ‪ ( 41‬אבל תוך שימוש במספר קבוע של ביטים‪.‬‬
‫הרעיון הוא להשתמש במקור אקראיות משותף‪" ,‬לווין בחלל" שיבחר ביטים רנדומיים וישדר אותם ליקום‪ .‬גם אליס וגם בוב יוכלו‬
‫להאזין לביטים האלה‪ ,‬ולדעת שהם קיבלו את אותם ביטים של רנדומיות‪) .‬מכאן ‪ -‬רנדומיות משותפת‪(.‬‬
‫‪Satellite‬‬
‫‪.‬‬
‫&‬
‫‪B‬‬
‫‪β‬‬
‫‪A‬‬
‫‪α‬‬
‫→←‬
‫לשם הפשטות‪ ,‬אנו נניח שבוב לא מנסה לרמות ולשכנע את אליס ש־ ‪ α = β‬כשהם לא‪ .‬הדרישות האחרות שלנו מהפרוטוקול הן‬
‫כאלה‪:‬‬
‫‪ .1‬שלמות )‪ - (completeness‬אם ‪ α = β‬אז ‪.Pr[”yes”] = 1‬‬
‫‪ .2‬נאותות )‪ - (soundness‬אם ‪ α 6= β‬אז ‪.Pr[”yes”] ≤ 12‬‬
‫כמו כן‪ ,‬רוצים לצמצם ככל האפשר את מספר הביטים המועברים‪.‬‬
‫הצעות‪:‬‬
‫‪ .1‬נתייחס לביטים שהלווין משדר כאינדקס ‪ i‬בין ‪ 0‬ל־ ‪ ,n − 1‬ונשלח את ‪ βi‬לאליס‪ .‬אליס יודעת שנשלח לה ‪) βi‬כי הרנדומיות‬
‫משותפת( ומשווה ‪ .αi =? βi‬אם הם שונים‪ ,‬אליס תדחה; אם הם שווים‪ ,‬נמשיך לעשות את זה ‪ n2‬פעמים‪ .‬ברור שהשלמות מתקיימת‪,‬‬
‫וגם הנאותות מתקיימת כי הסיכוי שהביט השונה לא ייבחר הוא ‪ . 21‬מספר הביטים המועברים הוא ‪ n2‬במקום ‪.n‬‬
‫‪ .2‬נריץ פונקציית ‪ hash‬כלשהי ‪ -‬משתמשים בביטים המקריים כדי לבחור פונקציה מסוימת מתוך משפחת פונקציות ‪ hash‬ומשווים‬
‫את תוצאת הפעלת הפונקציה‪ ,‬שיכולה להכיל מספר קבוע של ביטים‪.‬‬
‫‪ .3‬בעזרת הרנדומיות המשותפת אליס ובוב יבחרו איבר ) ‪ - z = (z0 , . . . , zn ) ∼ U({0, 1}n‬כלומר מחרוזת בינארית רנדומית‬
‫באורך ‪ n‬בהתפלגות אחידה‪ .‬כעת כל צד יחשב‪:‬‬
‫!‬
‫‪n−1‬‬
‫‪X‬‬
‫= ‪a‬‬
‫‪zi αi mod2‬‬
‫‪i=0‬‬
‫!‬
‫‪mod2‬‬
‫‪zi βi‬‬
‫‪n−1‬‬
‫‪X‬‬
‫‪i=0‬‬
‫‪47‬‬
‫=‬
‫‪b‬‬
‫בוב ישלח לאליס את ‪ ;b‬אליס תקבל אםם ‪.a = b‬‬
‫כמובן‪ ,‬מועבר רק ביט אחד ומתקיימת שלמות‪ .‬הנאותות נובעת מהתרגיל הבא בהסתברות‪:‬‬
‫"מטילים ‪ 100‬מטבעות הוגנים ובלתי תלויים‪ .‬מה ההסתברות שמספר הפעמים שיופיע "פלי" הוא זוגי?"‬
‫מקרה א'‪ :‬עד המטבע ה־ ‪ 99‬ראינו מספר זוגי של "פלי"‪ .‬הסיכוי שהמטבע האחרון ישאיר את זה כך הוא ‪. 12‬‬
‫מקרה ב'‪ :‬עד המטבע ה־ ‪ 99‬ראינו מספר אי־זוגי של "פלי"‪ .‬גם כאן הסיכוי הוא ‪. 12‬‬
‫‪P‬מהם הוא הוגן ולא תלוי בשאר‪.‬‬
‫ההוגנות‪/‬אי־תלות של ‪ 100‬המטבעות; די שאחד‬
‫‪P‬‬
‫בעצם‪ ,‬לא היינו צריכים את‪P‬‬
‫אםם ‪ .( zi (αi − βi )) mod2 = 0‬נשים לב שאם ‪ α 6= β‬אז יש ‪ i‬כך ש־ ‪αi 6= βi‬‬
‫= ‪zi αi‬‬
‫לענייננו‪ a = b ,‬אםם ‪zi βi‬‬
‫ולכן קיבלנו את אותה הבעיה כמו עם המטבעות ‪ -‬אנו רוצים לדעת את הזוגיות של מספר ה־ ‪zi‬־ים שהם ‪ 1‬עבור ה־ ‪i‬־ים שבהם‬
‫‪:αi 6= βi‬‬
‫‪zi‬‬
‫‪X‬‬
‫‪zi (αi − βi ) ≡mod2‬‬
‫‪i:αi 6=βi‬‬
‫‪n−1‬‬
‫‪X‬‬
‫‪i=0‬‬
‫ולכן הסכום הזה הוא ‪) 0‬מודולו ‪ (2‬בהסתברות ‪ 12‬בדיוק כמו שרצינו עבור הנאותות‪.‬‬
‫‪ .4‬מתבקש עידון כדי לקבל נאותות "טובה יותר"‪ ,‬למשל הסתברות ‪ 41‬לטעות‪ .‬כדי לקבל זאת‪ ,‬אפשר לבצע את הפרוטוקול פעמיים‬
‫ כלומר בוחרים שני ‪z‬־ים ומעבירים שני ביטים‪ .‬אפשר להקטין את ההסתברות לטעות כרצוננו ל־ ‪ 21k‬ע"י העברת ‪ k‬ביטים כאלה‪.‬‬‫‪ .5‬וריאציה על הבעיה‪ :‬מה קורה אם בוב מנסה לשכנע את אליס ש־ ‪ α = β‬למרות שזה לא באמת המצב? )שאלה למחשבה ‪-‬‬
‫התשובה היא שזה לא עוזר לו‪(.‬‬
‫‪ .6‬וריאציה נוספת על הבעיה‪ :‬מה קורה אם אין רנדומיות משותפת‪ ,‬אלא לכל צד יש רנדומיות פרטית? הפרוטוקול הנ"ל‪ ,‬כמובן‪,‬‬
‫לא עובד יותר‪ ,‬וגם כל מני רעיונות פשוטים אחרים לא עובדים‪.‬‬
‫‪8.4‬‬
‫פולינומים‬
‫טענה ‪ 8.6‬אם )‪ p(x‬פולינום שאינו פולינום האפס ו־ ‪ ,deg(p) = d‬אז מספר השורשים של ‪ p‬הוא ≥ ‪.d‬‬
‫מסקנה ‪ 8.7‬אם )‪ p(x) 6= q(x‬ושניהם מדרגה ≥ ‪ ,d‬אז ‪.|{z : p(z) = q(z)}| ≤ d‬‬
‫מכאן מתקבל הפרוטוקול לבעיית הזהות תוך שימוש ברנדומיות פרטית‪:‬‬
‫‪Pn−1‬‬
‫‪ .1‬אליס תגדיר פולינום ‪p(x) = i=0 αi xi‬‬
‫‪Pn−1‬‬
‫‪ .2‬בוב יגדיר פולינום ‪q(x) = i=0 βi xi‬‬
‫‪ .3‬אליס תגריל )} ‪ z ∼ U({1, . . . , n2‬ותשלח אותו לבוב‬
‫‪ .4‬בוב ישלח את )‪ q(z‬לאליס‬
‫‪ .5‬אליס מקבלת אםם )‪p(z) = q(z‬‬
‫כעת נשים לב שאם ‪ α = β‬אז ‪ p ≡ q‬ולכן ‪ .Pr[”yes”] = 1‬לעומת זאת‪ ,‬אם ‪ α 6= β‬אז )‪ p(x) 6= q(x‬ומתקיים ≤ )‪deg(p), deg(q‬‬
‫‪ .n − 1‬מכאן‬
‫‪1‬‬
‫‪n−1‬‬
‫≤‬
‫‪2‬‬
‫‪n‬‬
‫‪n‬‬
‫≤ ])‪Pr[”yes”] = Pr[p(z) = q(z‬‬
‫שהרי מתוך ‪ n2‬הערכים שמתוכם ‪ z‬מוגרל‪ ,‬יש לכל היותר ‪ n − 1‬ערכים שעליהם )‪.p(z) = q(z‬‬
‫כמה ביטים מועברים כאן? כאשר השדה הוא ‪ ,Q‬מספר הביטים הדרושים להעברת ‪ z‬יכול להיות מאוד גדול‪ .‬כדי לטפל בזה‬
‫נעבוד מעל שדה סופי ‪ Zp‬כש־ ‪ p‬ראשוני לא גדול במיוחד‪.‬‬
‫כדי לתקן את הפרוטוקול‪ ,‬אליס ובוב יבחרו את ‪ p‬להיות הראשוני הראשון שגדול מ־ ‪ ;n2‬מספיק לנו לדעת ש־ ‪.n2 < p ≤ 2n2‬‬
‫מכאן כל הפרוטוקול נשאר אותו הדבר‪ ,‬הנאותות והשלמות נשמרות‪ ,‬אבל כמות הביטים שעוברים היא )‪ ,O(log n‬שהרי ב־ ‪ z‬יש לכל‬
‫היותר ‪ 2 log n‬ביטים וב־ )‪ q(z‬יש לכל היותר ‪ 2 log p ≤ 4 log n‬ביטים‪.‬‬
‫הגדרה ‪ 8.8‬פולינום בכמה משתנים הוא סכום של מונומים‪ ,‬כאשר כל מונום הוא מהצורה‬
‫‪n‬‬
‫‪a(ei )ni=1 xe11 · · · xen‬‬
‫‪48‬‬
‫‪Pn‬‬
‫כאשר כל ‪ ei ≥ 0‬טבעי‪ ,‬האינדקס של המקדם ‪ a‬הוא סדרת החזקות‪ ,‬והדרגה של המונום היא ‪ . i=1 ei‬ניתן להציג את הפולינום‬
‫בתור‬
‫‪X‬‬
‫‪Y e‬‬
‫= ) ‪f (x1 , . . . , xn‬‬
‫) ‪a(ei‬‬
‫‪xj j‬‬
‫) ‪(ei‬‬
‫‬
‫‪ n+d−1‬מונומים שונים מדרגה ‪ .d‬זה אקספוננציאלי‪ ,‬כלומר כדי לתאר פולינום מדרגה ‪ d‬מעל שדה ‪ Zp‬אנו‬
‫ללא המקדמים‪ ,‬יש לנו‬
‫‪n−1‬‬
‫נצטרך מקום אקספוננציאלי‪ .‬אם נבחר בייצוג שבו כותבים רק את המונומים שמשתתפים בסכום‪ ,‬אפשר לכתוב את חלק מהפולינומים‬
‫האלה מעל ‪ Zp‬במקום פולינומיאלי ‪ -‬בתנאי שמשתתף בהם מספר פולינומיאלי של מונומים‪.‬‬
‫אנו נשתמש בייצוג של פולינומים כאלה באמצעות נוסחא אריתמטית‪.‬‬
‫הגדרה ‪ 8.9‬נוסחא אריתמטית מוגדרת באינדוקציה ע"י‪:‬‬
‫‪ .1‬משתנה ‪ xi‬או קבוע ‪ 1‬הוא נוסחא‪.‬‬
‫‪ .2‬אם ‪ p, q‬נוסחאות אז )‪ p + q, p − q, p · q, (−q‬גם כן נוסחאות‪.‬‬
‫למשל‪ ,‬את הפולינום ‪ x3 y + y + 2‬נוכל לייצג בתור ‪ ,x · x · x · y + y + 1 + 1‬ונוכל גם להוסיף סוגריים לפי הצורך‪.‬‬
‫טענה ‪ 8.10‬אם ‪ F‬נוסחא באורך ‪ ,n‬היא מגדירה פולינום שדרגתו לכל היותר ‪.n‬‬
‫הוכחה‪ :‬אינדוקציה על ‪.n‬‬
‫משפט ‪) 8.11‬משפט שוורץ־זיפל‪Zippel ,‬־‪ (Schwartz‬אם ‪ p 6≡ 0‬פולינום ב־ ‪ n‬משתנים מדרגה ‪ d‬מעל ‪ ,Zp‬ו־ ) ‪ ,r1 , . . . , rn ∼ U(Zp‬אז‬
‫‪d‬‬
‫‪p‬‬
‫≤ )‪Pr[p(r1 , . . . , rn ) = 0‬‬
‫הוכחה‪ :‬אינדוקציה על ‪ .n‬עבור ‪ n = 1‬זה נכון‪ ,‬כי ל־ ‪ p‬יש לכל היותר ‪ d‬שורשים‪ ,‬ולכן ההסתברות שבחרנו שורש באופן אחיד היא‬
‫לכל היותר ‪. dp‬‬
‫‪P 0‬‬
‫‪i‬‬
‫נשים לב ש־ ‪ ,p(x1 , . . . , xn ) = i pi (x2 , . . . , xn )x1‬כלומר אפשר להסתכל על ‪ p‬כפולינום במשתנה ‪ x1‬שהמרכיבים שלו הם‬
‫פולינומים מעל ‪ .x2 , . . . , xn‬הפולינומים } ‪ {p0i‬יכולים להיות זהותית אפס או לא; ניקח את ‪ k‬להיות ה־ ‪ i‬המקסימלי כך ש־ ‪.p0i 6≡ 0‬‬
‫בפרט‪ p0k 6≡ 0 ,‬והדרגה שלו היא לכל היותר ‪) d − k‬כי ה־ ‪" xk1‬לקח" ‪ k‬מהדרגה המקסימלית של ‪ p‬כולו(‪.‬‬
‫‪ .Pr[p0k (r2 , . . . , rn ) = 0] ≤ d−k‬נתבונן בפולינום במשתנה אחד ) ‪ q = p(x1 , r2 , . . . , rn‬ונניח ש־‬
‫לפי הנחת האינדוקציה‪,‬‬
‫‪p‬‬
‫‪k‬‬
‫‪ .p0k (r2 , . . . , rn ) 6= 0‬אז הפולינום ‪ q‬הוא מדרגה ‪ .k‬לפי מקרה הבסיס שראינו‪ ,‬מתקיים ‪ ,Pr[p(x1 , r2 , . . . , rn ) = 0] ≤ p‬כאשר‬
‫ההסתברות היא על בחירת ‪.x1‬‬
‫כעת נכתוב נוסחת הסתברות שלמה עבור מה שאנחנו רוצים‪:‬‬
‫‪= Pr[p(r1 , . . . , rn ) = 0 | p0k (r2 , . . . , rn ) = 0] · Pr[p0k (r2 , . . . , rn ) = 0] +‬‬
‫]‪Pr[p(r1 , . . . , rn ) = 0‬‬
‫]‪Pr[p(r1 , . . . , rn ) = 0 | p0k (r2 , . . . , rn ) 6= 0] · Pr[p0k (r2 , . . . , rn ) 6= 0‬‬
‫]‪Pr[p0k (r2 , . . . , rn ) = 0] + Pr[p(r1 , . . . , rn ) = 0 | p0k (r2 , . . . , rn ) = 0‬‬
‫‪d−k k‬‬
‫‪d‬‬
‫= ‪+‬‬
‫‪p‬‬
‫‪p‬‬
‫‪p‬‬
‫‪8.5‬‬
‫≤‬
‫=‬
‫שקילות נוסחאות‬
‫הגדרה ‪ 8.12‬אם ‪ F1 , F2‬נוסחאות אריתמטיות במשתנים ‪ ,x1 , . . . , xn‬נאמר שהנוסחאות שקולות אם כל מקדמי המונומים בפולינומים‬
‫המתאימים שווים‪.‬‬
‫הערה ‪ .1 8.13‬לא נכון להסתכל על ערכי הצבות בנוסחאות‪ ,‬שכן אנחנו מדברים על פולינומים ולא על פונקציות‪ .‬למשל‪ ,‬מעל ‪Z3‬‬
‫הפולינומים ‪ 0‬ו־ )‪ x(x − 1)(x − 2‬אינם שקולים כפולינומים‪ ,‬אבל כן שקולים כפונקציות‪.‬‬
‫‪ .2‬דוגמא לשקילות‪.(x1 − x2 )(x1 + x2 ) ∼ x1 · x1 − x2 · x2 :‬‬
‫‪ .3‬כמובן‪ ,‬מתקיים ש־ ‪ F1 ∼ F2‬אםם ‪.F1 − F2 ∼ 0‬‬
‫‪49‬‬
‫הגדרה ‪ 8.14‬בעיית שקילות הנוסחאות )‪ (equivalence‬מוגדרת ע"י השפה‬
‫}‪EQ = {F : F ∼ 0‬‬
‫הערה ‪ 8.15‬צריך לשים לב שפתיחת סוגריים והשוואת מקדמים תפעל בזמן אקספוננציאלי‪ ,‬כלומר ‪ .EQ ∈ EXPTIME‬בבירור‪,‬‬
‫‪ EQ ∈ coN P‬כי אפשר לבדוק הצבה בזמן פולינומיאלי )בתנאי שהמספרים שמציבים הם בגודל פולינומי באורך הנוסחא‪ ,‬או אם‬
‫מסתכלים על זמן פולינומי באורך הנוסחא והמספרים שמציבים(‪ .‬אנחנו רוצים להשתכנע שאם ‪ F 6∼ 0‬אז יש מספרים לא גדולים‬
‫שאפשר להציב בנוסחא ולראות שהיא לא ‪.0‬‬
‫משפט ‪ 8.16‬אם ‪ p‬פולינום ב־ ‪ n‬משתנים מעל שדה ‪ F‬ודרגתו ≥ ‪ S ⊆ F ,p 6≡ 0 ,d‬קבוצה סופית‪ ,‬ונגריל )‪ ,z1 , . . . , z1 ∼ U(S‬אזי‬
‫מתקיים‬
‫‪d‬‬
‫|‪|S‬‬
‫≤ ]‪Pr[p(z1 , . . . , zn ) = 0‬‬
‫הוכחה‪ :‬זוהי וריאציה קלה ביותר על משפט זיפל־שוורץ שהוכחנו קודם‪.‬‬
‫מסקנה ‪ 8.17‬קיימת הצבה כנ"ל במספרים נמוכים יחסית‪ ,‬למשל עבור } ‪ S = {1, . . . , n5‬ולכן ‪ EQ ∈ coN P‬כפי שרצינו‪.‬‬
‫אלגוריתם ל־ ‪:EQ‬‬
‫בהינתן נוסחא ‪ F‬באורך ‪ n‬מעל השדה ‪ ,Q‬נציב ב־ ‪ F‬ערכים רנדומיים מתוך הקבוצה } ‪ S = {1, . . . , n5‬ונקבל אםם הערך של‬
‫הנוסחא עבור ההצבה שבחרנו הוא ‪.0‬‬
‫שלמות‪ :‬אם ‪ F ∼ 0‬אז ‪.Pr[”yes”] = 1‬‬
‫נאותות‪ :‬אם ‪ F 6∼ 0‬אז‬
‫) ‪deg(pF‬‬
‫‪n‬‬
‫‪1‬‬
‫‪2‬‬
‫≤ ‪≤ 5 = 4‬‬
‫|‪|S‬‬
‫‪n‬‬
‫‪n‬‬
‫‪3‬‬
‫≤ ]”‪Pr[”yes‬‬
‫זמן הריצה‪ :‬הצבה אחת‪ ,‬ולכן פולינומיאלי‪.‬‬
‫מכאן אנו מקבלים ש־ ‪.EQ ∈ RP‬‬
‫כמובן‪ ,‬לא לכל פולינום יש נוסחא בגודל סביר שמייצגת אותו ‪ -‬משיקולי ספירה‪ .‬לנוסחא יש הרבה פחות "דרגות חופש"‪ .‬כך‬
‫שהתוצאה שקיבלנו מעניינת‪ ,‬אבל לא ישימה לכל פולינום‪.‬‬
‫הגדרה ‪ 8.18‬יהיו ‪ F1 , F2‬נוסחאות אריתמטיות במשתנים ‪ .x1 , . . . , xn‬נאמר ש־ ‪) F1 ∼B F2‬שקולה בוליאנית( אם = ) ‪F1 (z1 , . . . , zn‬‬
‫) ‪ F2 (z1 , . . . , zn‬עבור כל }‪.z1 , . . . , zn ∈ {0, 1‬‬
‫הערה ‪8.19‬‬
‫⇒⇐ ‪F1 ∼B F2 ⇐⇒ F1 − F2 ∼B 0 ⇐⇒ (F1 − F2 )2 ∼B 0‬‬
‫‪X‬‬
‫⇒⇐‬
‫‪(F1 − F2 )2 (u1 , . . . , un ) = 0‬‬
‫}‪u1 ,...,un ∈{0,1‬‬
‫הגדרה ‪8.20‬‬
‫}‪F 2 (u1 , . . . , un ) = 0‬‬
‫‪X‬‬
‫‪variables,‬‬
‫‪n‬‬
‫‪is a formula in‬‬
‫‪BEQ = {F : F‬‬
‫}‪u1 ,...,un ∈{0,1‬‬
‫הערה ‪ 8.21‬אם היינו יודעים להכריע את ‪ BEQ‬היינו מקבלים בחינם גם מכונה להכרעת הבדיקה האם שתי נוסחאות שקולות בוליאנית‪.‬‬
‫ברור ש־ ‪ BEQ ∈ EXPTIME‬כי אפשר לעבור על ‪ 2n‬הצבות בוליאניות ולבדוק בזמן פולינומי כל אחת ‪ -‬אבל אנחנו רוצים משהו‬
‫יותר טוב‪ .‬ברור גם ש־ ‪ BEQ ∈ coN P‬כי העד הוא פשוט הצבה בוליאנית‪ ,‬וקל לבדוק אותו‪.‬‬
‫לא ידוע היום האם ‪ EQ ∈ P‬והאם ‪ .BEQ ∈ N P‬לא ידוע גם האם יש אלגוריתם רנדומי פולינומי‪ .‬נשים לב שאותו רעיון כמו‬
‫קודם לא עובד כי בחירת הצבה בוליאנית לא יכולה להשתמש במשפט שוורץ־זיפל‪.‬‬
‫‪50‬‬
‫‪8‬‬
‫פרוטוקול אינטראקטיבי להכרעת ‪:BEQ‬‬
‫הפרוטוקול הוא בין ‪ V‬המוודא ל־ ‪ P‬המוכיח‪ ,‬כאשר ‪ V‬שואל שאלות ו־ ‪ P‬עונה עליהן‪.‬‬
‫מספר השלבים בפרוטוקול יהיה ליניארי ב־ ‪) n‬ספציפית‪ ,(n + 2 ,‬כאשר ‪ V‬מבצע חישוב פולינומי ב־ ‪ n‬בכל שלב‪ ,‬ולכן סך זמן‬
‫הריצה שלו יהיה פולינומי‪.‬‬
‫פולינומי‪.‬‬
‫באורך‬
‫הן‬
‫שלו‬
‫והתשובות‬
‫כלשהו‪,‬‬
‫‪ P‬יכול לעשות חישוב‬
‫‪P‬‬
‫שלמות‪ :‬אם ‪ P, V‬עוקבים אחרי הפרוטוקול אז בסופו של דבר ‪ V‬מחזיר את המספר ) ‪.s = u1 ,...,un ∈{0,1} F (u1 , . . . , un‬‬
‫נאותות‪ :‬אם ‪ V‬עוקב אחרי הפרוטוקול‪ ,‬אז לכל אסטרטגיה של ‪ P‬ההסתברות ש־ ‪ V‬מחזיר מספר שאינו ‪ s‬תהיה קטנה או שווה‬
‫ל־ ‪. 14‬‬
‫כלומר‪ ,‬לא מובטח ש־ ‪" P‬מתנהג יפה" אבל זה לא יקלקל יותר מדי ‪ -‬או ש־ ‪ V‬בכל מקרה ייתן את ‪ ,s‬או שהוא יגיד "אני לא‬
‫מוכן לדבר עם ה־ ‪ P‬הזה"‪.‬‬
‫)?(‬
‫‪"s‬‬
‫"‬
‫עונה‪:‬‬
‫‪P‬‬
‫‪ V .1‬שואל‪" :‬מהו ‪,"?s‬‬
‫‪P‬‬
‫נגדיר את הפולינום ) ‪ ,p1 (x1 ) = u2 ,...,un ∈{0,1} F (x1 , u2 , . . . , un‬פולינום במשתנה אחד מדרגה ≥ ‪ .n‬אנחנו לא יודעים לחשב‬
‫אותו ‪ -‬רק מגדירים אותו‪.‬‬
‫)?(‬
‫‪ V .2‬שואל‪" :‬מהו ) ‪ P ,"?p1 (x1‬עונה‪"p1 (x1 )" :‬‬
‫נשים לב ש־ ‪ p1‬הוא פולינום במשתנה אחד‪ ,‬ויש לו ‪ n + 1‬מקדמים לכל היותר‪ .‬לכן אין בעיה לשלוח אותו מצד לצד ‪ -‬הבעיה‬
‫היא רק לחשב אותו‪ .‬נשים לב גם ש־ ‪.p1 (0) + p1 (1) = s‬‬
‫)?(‬
‫)?(‬
‫)?(‬
‫)?(‬
‫כעת אם )) ‪ ,n < deg(p1 (x1‬אז ‪ V‬דוחה‪ ,‬וגם אם ‪ ,p1 (0) + p1 (1) 6= s‬אז ‪ V‬דוחה‪.‬‬
‫)?(‬
‫)?(‬
‫‪5‬‬
‫לבסוף ‪ V‬בוחר )} ‪ .z1 ∼ U({1, . . . , n‬הרעיון הוא שאם ‪ ,p1 6= p1‬אז בסיכוי גבוה גם ) ‪ p1 (z1 ) 6= p1 (z1‬בגלל משפט‬
‫זיפל־שוורץ‪.‬‬
‫‪P‬‬
‫נגדיר את הפולינום ) ‪.p2 (x2 ) = u3 ,...,un ∈{0,1} F (z1 , x2 , u3 , . . . , un‬‬
‫)?(‬
‫‪ V .3‬שואל‪" :‬מהו ) ‪ P ,"?p2 (x2‬עונה‪"p2 (x2 )" :‬‬
‫)?(‬
‫)?(‬
‫)?(‬
‫)?(‬
‫אם )) ‪ n < deg(p2 (x2‬או ) ‪ ,p2 (0) + p2 (1) 6= p1 (z1‬אז ‪ V‬דוחה‪.‬‬
‫‪5‬‬
‫כעת ‪ V‬בוחר )} ‪.z2 ∼ U({1, . . . , n‬‬
‫‪P‬‬
‫נגדיר את הפולינום ) ‪.p3 (x3 ) = u4 ,...,un ∈{0,1} F (z1 , z2 , x3 , u4 , . . . , un‬‬
‫)?(‬
‫‪ V .4‬שואל‪" :‬מהו ) ‪ P ,"?p3 (x3‬עונה‪"p3 (x3 )" :‬‬
‫ושוב ‪ V‬מוודא את הדרגה ואת הסכום‪ ,‬וממשיכים כך כאשר האבחנה היא שאם ‪ pk‬היה שקרי ו־ ‪ pk+1‬היה אמיתי‪ ,‬הסיכוי‬
‫להתלכדות הערכים בשלב הבא הוא קטן‪ .‬כך המשכנו‪ ,‬וייתכן ש־ ‪ P‬שיקר לנו במשך כל הדרך‪ .‬הגענו לשלב ה־ ‪:n‬‬
‫‪ .n‬בחרנו )} ‪ zn−1 ∼ U({1, . . . , n5‬ומגדירים ) ‪.pn (xn ) = F (z1 , . . . , zn−1 , xn‬‬
‫)?(‬
‫‪ V‬שואל‪" :‬מהו ) ‪ P ,"?pn (xn‬עונה‪"pn (xn )" :‬‬
‫)?(‬
‫)?(‬
‫)?(‬
‫כעת ‪ V‬מוודא דרגה ומוודא ש־ ) ‪.pn (0) + pn (1) = pn−1 (zn−1‬‬
‫)?(‬
‫‪ .n+1‬בוחרים )} ‪ zn ∼ U({1, . . . , n5‬ואי אפשר להמשיך‪ .‬עכשיו ‪ V‬יבדוק ש־ ) ‪ pn (zn ) = pn (zn ) = F (z1 , . . . , zn‬וידחה אם‬
‫אין שוויון‪ .‬אחרת‪ V ,‬יחזיר את )?(‪ s‬שאנו חושבים שהוא ‪.s‬‬
‫נשים לב שאין בעיה להעריך את ) ‪ pn (zn‬כי זהו פולינום במשתנה אחד ‪ -‬אין יותר סכום של מספר אקספוננציאלי של מונומים‪.‬‬
‫שלמות‪ :‬קל לראות שהיא מתקיימת‪.‬‬
‫נאותות‪ :‬רוצים להראות שאם ‪ ,s(?) 6= s‬אז ‪ V‬דוחה בדרך כלל‪ ,‬ואם הוא מקבל ‪ -‬זה קורה בהסתברות ≥ ‪ . 41‬ובכן‪ ,‬בשלב ‪V 1‬‬
‫)?(‬
‫)?(‬
‫)?(‬
‫בודק ש־ )?(‪ .p1 (0) + p1 (1) = s‬כלומר‪ ,‬אם ‪ P‬רוצה לרמות הוא מוכרח להחזיר לנו ‪ p1‬שאינו ‪ p1‬האמיתי‪.‬‬
‫)?(‬
‫)?(‬
‫)?(‬
‫)?(‬
‫בשלב ‪ 2‬היה לנו ‪ z1‬רנדומי‪ ,‬וכעת ‪ P‬נותן לנו את ‪ p2‬ושוב צריך להתקיים ש־ ) ‪ .p2 (0) + p2 (1) = p1 (z1‬כעת יש שתי‬
‫אפשרויות‪:‬‬
‫)?(‬
‫או ש־ ) ‪ - p1 (z1 ) = p1 (z1‬ההסתברות לזה היא ≥ ‪ , n14‬כי בחרנו את ‪ z1‬מתוך ‪ n5‬מספרים שונים והפולינום הוא מדרגה ‪;n‬‬
‫)?(‬
‫)?(‬
‫אחרת ) ‪ ,p1 (z1 ) 6= p1 (z1‬ואז ‪ P‬צריך לשקר ולהחזיר איזשהו ‪ p2‬שאינו ‪.p2‬‬
‫)?(‬
‫)?(‬
‫כך זה ממשיך‪ ,‬עד ) ‪ pn (xn ) 6= pn (xn‬ובוחרים ‪ zn‬רנדומי ובודקים האם ) ‪ .pn (zn ) = pn (zn‬אם עד עכשיו ‪ P‬שיקר‪ ,‬הסיכוי‬
‫שהשוויון האחרון מתקיים הוא שוב ≥ ‪. n14‬‬
‫‪1‬‬
‫כלומר‪ ,‬בכל שלב בפרוטוקול יש הזדמנות של ≥ ‪ n4‬ש־ ‪ P‬יוכל לשקר ולשכנע את ‪ .V‬בסה"כ‪ ,‬ההסתברות של ‪ P‬לשקר בהצלחה‬
‫לא תעלה על ) ‪ ,O( n13‬וזה מה שרצינו מראש‪.‬‬
‫‪8.6‬‬
‫‪ IP‬ו־ ‪coNP‬‬
‫טענה ‪3SAT ≤p BEQ 8.22‬‬
‫הוכחה‪ :‬יש אלגוריתם פולינומי אשר בהינתן נוסחא בוליאנית כלשהי ‪ ϕ‬מחזיר פולינום ‪ pϕ‬מעל אותם משתנים בדיוק כך שלכל השמה‬
‫בוליאנית ‪ (u1 , . . . , un ) ∈ {0, 1}n‬למשתנים ‪ x1 , . . . , xn‬מתקיים ) ‪.pϕ (u1 , . . . , un ) = ϕ(u1 , . . . , un‬‬
‫האלגוריתם פועל באינדוקציה‪ .‬במקרה הבסיס ‪ ϕ = 1‬נחזיר את הפולינום ‪.pϕ = 1‬‬
‫עבור ‪ ϕ = xi‬נחזיר את הפולינום ‪.pϕ = xi‬‬
‫‪8‬שימו לב ‪ -‬לפי הודעת סגל הקורס‪ ,‬פרוטוקול זה אינו כלול בחומר למבחן‪.‬‬
‫‪51‬‬
‫עבור ‪ ϕ = xi‬נחזיר את הפולינום ) ‪.pϕ = (1 − xi‬‬
‫עבור ‪ ϕ = ϕ1 ∧ ϕ2‬נחזיר את הפולינום ‪.pϕ = pϕ1 · pϕ2‬‬
‫‪.pP‬‬
‫עבור ‪ ϕ = ϕ1 ∨ ϕ2‬נחזיר את הפולינום ‪ϕ = pϕ1 + pϕ2 − pϕ1 · pϕ2‬‬
‫מכאן ש־ ‪ ϕ‬אינה ספיקה אםם ‪ u1 ,...,un ∈{0,1} p2ϕ (u1 , . . . , un ) = 0‬וזו הרדוקציה‪.‬‬
‫מסקנה ‪coN P ⊆ IP 8.23‬‬
‫הוכחה‪ :‬מיידית מהעובדה ש־ ‪ 3SAT‬היא ‪N P‬־שלמה ולכן ‪ 3SAT‬היא ‪coN P‬־שלמה‪ ,‬וראינו ש־ ‪.BEQ ∈ IP‬‬
‫‪8.7‬‬
‫שיתוף סוד‬
‫רוצים לחלק ל־ ‪ n‬אנשים חלקים של סוד‪ ,‬כך שרק כל ‪ k‬מתוכם יוכלו להרכיב את הסוד השלם‪ ,‬אבל ל־ ‪ k − 1‬מתוכם לא יהיה מה‬
‫לעשות שהוא יותר טוב מאשר לנחש את הסוד‪.‬‬
‫אנו עובדים מעל שדה סופי ‪ Zp‬עבור ‪ p‬ראשוני כלשהו‪ .‬פורמלית‪ ,‬אם ‪ D ∈ Zp‬הסוד שנבחר בהתפלגות אחידה‪ ,‬אנו רוצים ש־‬
‫‪ k‬אנשים יוכלו לבצע חישוב פולינומיאלי שהתוצאה שלו היא ‪ D‬בוודאות‪ ,‬ואילו ‪ k − 1‬אנשים לא יוכלו בחישוב פולינומיאלי לקבל‬
‫תוצאה שהיא יותר טובה מהתפלגות אחידה על ‪.Zp‬‬
‫הדרישה ש־ ‪ D‬נבחר בהתפלגות אחידה לא מזיקה‪ ,‬כי במקרה שהיא לא‪ ,‬אפשר להגריל ‪ D0‬בהתפלגות אחידה ולהשתמש ב־‬
‫‪ ,xor) D ⊕ D0‬שהיא פעולה הפיכה( בתור הסוד‪ .‬נדרוש גם ‪.D, n < p‬‬
‫הסכימה של שמיר‪:‬‬
‫נגדיר פולינום )‪ f (x‬עם מקדמים ) ‪ .a0 = D; a1 , . . . , ak−1 ∼ U(Zp‬זהו פולינום מדרגה ≥ ‪ ,k − 1‬ומתקיים ‪ .f (0) = D‬כעת‬
‫נציב בפולינום )‪ f (1), f (2), . . . , f (n‬וזה מה שמחלקים לאנשים ‪ -‬לאיש ה־ ‪ i‬נותנים את הזוג ))‪.(i, f (i‬‬
‫כעת ‪ k‬מהאנשים יכולים לחלץ את ‪ .D‬בהינתן ) ‪ (x1 , y1 ), . . . , (xk , yk‬נגדיר את הפולינומים‬
‫‪deg(li ) = k − 1‬‬
‫‪Y x − xm‬‬
‫‪,‬‬
‫‪xi − xm‬‬
‫= )‪li (x‬‬
‫‪m6=i‬‬
‫ומתקיים ‪ li (xi ) = 1‬ולכל ‪ j 6= i‬מתקיים ‪ .li (xi ) = 0‬את פולינום האינטרפולציה מקבלים כך‪:‬‬
‫)‪yi li (x‬‬
‫‪k‬‬
‫‪X‬‬
‫= )‪fˆ(x‬‬
‫‪i=1‬‬
‫ואכן קל לוודא שלכל ‪ ,j‬מתקיים ‪ .fˆ(xj ) = yj‬כיוון שפולינום ממעלה ≥ ‪ k − 1‬נקבע ביחידות ע"י ‪ k‬נקודות‪ ,‬קיבלנו מתוך ‪k‬‬
‫הנקודות את ‪ ,f‬כלומר ‪ .fˆ ≡ f‬כל שנותר לאנשים לעשות זה להציב )‪ fˆ(0‬ולקבל את ‪ .D‬כמובן‪ ,‬כל התהליך היה פולינומיאלי ‪-‬‬
‫מדובר בחיבור‪ ,‬חיסור‪ ,‬כפל וחילוק של מספרים ב־ ‪.Zp‬‬
‫נראה גם של־ ‪ k − 1‬אנשים אין משהו טוב לעשות‪ .‬כמה פולינומים שונים אפשר לקבל אם ‪ x1 , . . . , xk‬קבועים ול־ ‪y1 , . . . , yk‬‬
‫יש ערכים כלשהם? יש ‪ pk‬זוגות שונים של ) ‪ (x1 , y1 ), . . . , (xk , yk‬כאלה‪ .‬הפעלת אינטרפולציה על כל ‪k‬־יה מתוך ‪ pk‬ה־‪k‬־יות נותנת‬
‫פולינום שונה מכל האחרים‪ .‬למשל‪ ,‬בהינתן ) ‪ (x1 , y1 ), . . . , (xk , yk‬ו־ ) ‪ (x1 , y10 ), . . . , (xk , yk‬מתקבלים ‪ fˆ, fˆ0‬שונים‪ ,‬שהרי הם שונים‬
‫אפילו על ‪ .x1‬מכאן יש לפחות ‪ pk‬פולינומים שונים מדרגה ≥ ‪ k − 1‬מעל ‪.Zp‬‬
‫מצד שני‪ ,‬אפשר לספור את הפולינומים באמצעות המקדמים שלהם‪ .‬יש ‪ k‬מקדמים שכל אחד מהם נבחר מ־ ‪ Zp‬ולכן מספר‬
‫הפולינומים השונים מדרגה ≥ ‪ k − 1‬הוא ‪ pk‬לכל היותר‪ .‬לכן‪ ,‬יש בדיוק ‪ pk‬פולינומים שונים מעל ‪.Zp‬‬
‫בהינתן רק ‪ k − 1‬זוגות‪ ,‬יש לנו את ‪ y1 , . . . , yk−1‬בנקודות ‪ .x1 , . . . , xk−1‬נוסיף נקודה נוספת‪ x0 = 0 ,‬ונבחר לו ערך כלשהו‬
‫מ־ ‪ ,Zp‬כלומר איזה ) ‪ .d = y0 ∼ U(Zp‬כל מספר שנבחר יספק פולינום אחר‪ .‬כעת מכיוון שבחירת ‪ a0 , . . . , ak−1‬הייתה בהתפלגות‬
‫אחידה‪ ,‬הסיכוי ש־ ‪ y0 = d‬זהה לסיכוי שבחרנו פולינום ספציפי כלשהו‪ ,‬כלומר לא למדנו שום דבר על ‪ ,y0‬כנדרש‪.‬‬
‫‪52‬‬