Smart-World Surf

יחידה 3: תכונות של שפות רגולריות

הבנת המגבלות והיכולות של שפות רגולריות.

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

שפות רגולריות: הגדרה וייצוגים

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

שפה רגולרית: שפה שניתן לתאר באמצעות אוטומט סופי דטרמיניסטי (DFA), אוטומט סופי לא-דטרמיניסטי (NFA), או ביטוי רגולרי. כל הייצוגים הללו שקולים בכוחם התיאורי.
אוטומט סופי דטרמיניסטי (DFA): מודל חישובי בעל מספר סופי של מצבים, פונקציית מעברים דטרמיניסטית (לכל מצב וקלט יש מעבר יחיד), מצב התחלה יחיד, וקבוצת מצבים מקבלים.
אוטומט סופי לא-דטרמיניסטי (NFA): מודל חישובי הדומה ל-DFA אך מאפשר מספר מעברים אפשריים מאותו מצב עם אותו קלט, ואף מעברים ללא קלט (מעברי אפסילון).
ביטוי רגולרי: דרך קומפקטית לתיאור שפות רגולריות באמצעות אופרטורים של איחוד (+), שרשור (·) וכוכב קליני (*).

DFA

מודל חישובי עם "זיכרון" סופי. קל למימוש, אך לעיתים דורש יותר מצבים מ-NFA שקול. כל DFA הוא NFA.

NFA

מודל גמיש יותר, לעיתים קרובות קומפקטי יותר לתיאור שפות. ניתן להמיר כל NFA ל-DFA שקול (לרוב עם יותר מצבים).

ביטוי רגולרי

כלי תיאורי נוח ואינטואיטיבי. נפוץ בשימוש מעשי (למשל, חיפוש טקסט). ניתן להמיר כל ביטוי רגולרי ל-NFA או DFA שקול.

תכונות סגירות של שפות רגולריות

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

  • איחוד (Union): אם L1 ו-L2 רגולריות, אז L1 ∪ L2 רגולרית.
  • שרשור (Concatenation): אם L1 ו-L2 רגולריות, אז L1 · L2 רגולרית.
  • כוכב קליני (Kleene Star): אם L רגולרית, אז L* רגולרית.
  • משלים (Complement): אם L רגולרית, אז Lᶜ רגולרית.
  • חיתוך (Intersection): אם L1 ו-L2 רגולריות, אז L1 ∩ L2 רגולרית. (ניתן להוכיח באמצעות דה-מורגן וסגירות לאיחוד ולמשלים, או בבניית אוטומט מכפלה).
  • היפוך (Reversal): אם L רגולרית, אז Lᴿ רגולרית.

מגבלות של שפות רגולריות: למת הניפוח

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

למת הניפוח לשפות רגולריות: זוהי אחת הנקודות החשובות ביותר ביחידה ובקורס כולו, ומופיעה לעיתים קרובות במבחנים. היא מאפשרת להוכיח ששפה אינה רגולרית על ידי שימוש בטיעון של סתירה. הבנת הלמה ושיטת ההוכחה באמצעותה היא מיומנות חובה.
למת הניפוח לשפות רגולריות: אם L היא שפה רגולרית, אז קיים מספר טבעי p (מספר הניפוח) כך שלכל מילה s ב-L שאורכה לפחות p (|s| ≥ p), ניתן לפרק את s לשלושה חלקים s = xyz, באופן שמתקיימים התנאים הבאים:
  1. |y| > 0 (החלק האמצעי אינו ריק).
  2. |xy| ≤ p (החלקים x ו-y יחד אינם ארוכים יותר מ-p).
  3. לכל i ≥ 0, המילה xyⁱz נמצאת ב-L (ניתן "לנפח" את y מספר שרירותי של פעמים, והמילה המתקבלת עדיין תהיה בשפה).

שיטת הוכחה באמצעות למת הניפוח (בדרך השלילה):

  1. הנחה בשלילה: נניח ש-L היא שפה רגולרית.
  2. בחירת p: לפי למת הניפוח, קיים מספר p.
  3. בחירת מילה s: נבחר מילה s ∈ L כך ש-|s| ≥ p, ובאופן שיקשה על הלמה להתקיים (לרוב, מילה "קשה" שחושפת את הצורך בזיכרון אינסופי).
  4. פירוק s: לפי הלמה, s מתפרקת ל-xyz כאשר |y| > 0 ו-|xy| ≤ p.
  5. ניפוח/כיווץ: נבחר i (לרוב i=0 או i=2) כך שהמילה xyⁱz אינה ב-L.
  6. סתירה: הגענו לסתירה להנחה ש-L רגולרית. לכן, L אינה רגולרית.

דוגמה קלאסית: השפה L = {aⁿbⁿ | n ≥ 0} אינה רגולרית. נניח בשלילה ש-L רגולרית. קיים p. נבחר s = aᵖbᵖ. |s| = 2p ≥ p. לפי הלמה, s = xyz, כאשר |y| > 0 ו-|xy| ≤ p. מכיוון ש-|xy| ≤ p, החלק y חייב להיות מורכב כולו מ-'a'ים (או ריק, אבל |y|>0). כלומר, y = aᵏ עבור k > 0. ננפח את y פעם אחת (i=2): xy²z = x(aᵏ)aᵏz. המילה החדשה תהיה מהצורה aᵖ⁺ᵏbᵖ. מכיוון ש-k > 0, מספר ה-'a'ים אינו שווה למספר ה-'b'ים. לכן, xy²z ∉ L. זוהי סתירה! לכן, L אינה רגולרית.

שפות לא רגולריות נפוצות

הבנת דוגמאות לשפות לא רגולריות עוזרת להפנים את מגבלות האוטומטים הסופיים:

  • {aⁿbⁿ | n ≥ 0}: דורשת ספירה והשוואה.
  • {w | w מכילה מספר שווה של a's ו-b's}: דורשת ספירה מתמשכת.
  • {ww | w ∈ {a,b}*}: דורשת "זכירת" מחצית המילה והשוואתה למחצית השנייה.
  • {aⁿ | n הוא מספר ראשוני}: דורשת זיהוי תכונה מתמטית מורכבת.

שאלות לדיון

  • הסבירו מדוע תכונות הסגירות חשובות בתכנון מנתחי לקסיקליים (Lexical Analyzers) בקומפיילרים.
  • האם שפה סופית (שפה המכילה מספר סופי של מילים) יכולה להיות לא רגולרית? נמקו.
  • הוכיחו באמצעות למת הניפוח שהשפה L = {aⁱbʲcᵏ | i=j או j=k} אינה רגולרית.
  • תארו מצב מעשי בו ידע על מגבלות שפות רגולריות יכול למנוע טעות תכנונית.

נקודות לתשובת מודל

  • הוכחת אי-רגולריות באמצעות למת הניפוח:
    • הנחה בשלילה ש-L רגולרית.
    • קביעת p (מספר הניפוח).
    • בחירת מילה s מתאימה מ-L (אורך לפחות p) באופן אסטרטגי.
    • הסבר כיצד s מתפרקת ל-xyz לפי תנאי הלמה (|y|>0, |xy|≤p).
    • הצגת ניפוח/כיווץ (בחירת i) המוביל למילה שאינה ב-L.
    • הסקת סתירה והמסקנה ש-L אינה רגולרית.
  • הבנת תכונות סגירות:
    • הגדרה ברורה של כל תכונה (איחוד, שרשור, כוכב קליני, משלים, חיתוך, היפוך).
    • הסבר קצר על משמעות הסגירות (התוצאה נשארת באותה מחלקת שפות).
  • הבחנה בין שפות רגולריות ללא רגולריות:
    • שפות רגולריות: דפוסים פשוטים, ללא צורך ב"ספירה" או "השוואה" שרירותית.
    • שפות לא רגולריות: דורשות זיכרון אינסופי או יכולות ספירה/השוואה מורכבות.
מצאתם טעות או שחסר משהו?
→ הקודמת
אוטומטים סופיים ושפות רגולריות
הבאה ←
דקדוקים חסרי הקשר ואוטומטי מחסנית