אוטומטים ושפות פורמליות/תכונות של שפות חסרות הקשר/למת הניפוח לשפות חסרות הקשר

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

מבוא

עריכה

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

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

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

הגדרת הלמה

עריכה

משפט:

תהי   שפה ח"ה, אזי קיים מספר   כך שלכל מילה   הארוכה מ- , ניתן לכתוב את המילה בצורה   כך שמתקיים:

  1.  
  2.  
  3.  

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

ההוכחה זהה לאמור מעלה. תהיה L שפה ח"ה ונניח כי בדקדוק המינימלי המתאר אותה קיימים   משתנים, כאשר לכל משתנה יש לכל היותר   כללי יצירה. אזי כל מילה אשר ארוכה מ  יוצרת עץ בו קיים מסלול באורך יותר מ-  מהשורש עד לעלה (נשים לה שזה אינו עץ בינארי, אלא עץ m-ארי, לכן כמות העלים הנדרשת הינה   ולא  ). במסלול הנ"ל, כאמור, קיים משתנה שחוזר על עצמו, ועל כן, ניתן להפעיל את אותם כללי היצירה של המופע הראשון במופע השני, וליצור ניפוח. נניח שהמופע השני יוצר את תת-המחרוזת   ונסמן ב   את תתי המחרוזות הנוצרות מהמופע הראשון של R, לפני ואחרי המחרוזת   בהתאמה.

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

דוגמא

עריכה

הראה כי השפה   אינה חסרת הקשר.

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

  1.   מכילה רק סוג אחד של ספרות (למשל, ללא הגבלת כלליות, רק אפסים). אזי לפי הלמה גם המילה   שייכת לשפה, אבל מילה זו מכילה יותר אפסים מאחדים, ולכן לא יכולה להיות ב- .
  2.   מכילה שני סוגי ספרות, בהג"כ, 0 ו 1. כנ"ל, אם ננפח אזי המילה   מכילה רק n מופעים של 2 ויותר מ  אפסים ואחדים, בסתירה להיותה ב- .




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