Smart-World Surf

יחידה 2: אוטומטים סופיים ושפות רגולריות

המודל החישובי הפשוט ביותר ויכולותיו.

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

אוטומטים סופיים: המודל החישובי הפשוט ביותר

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

אוטומט סופי דטרמיניסטי (DFA): מודל חישובי המוגדר על ידי חמישה רכיבים: קבוצת מצבים סופית (Q), אלפבית קלט (Σ), פונקציית מעברים דטרמיניסטית (δ: Q × Σ → Q, לכל מצב וסימן קלט יש רק מצב יחיד שאליו עוברים), מצב התחלתי יחיד (q₀ ∈ Q), וקבוצת מצבים מקבלים (F ⊆ Q).
אוטומט סופי לא-דטרמיניסטי (NFA): מודל חישובי הדומה ל-DFA אך מאפשר מעברים למספר מצבים עבור אותו סימן קלט, ואף מעברי אפסילון (ε-מעברים, ללא קריאת סימן קלט). פונקציית המעברים שלו היא δ: Q × (Σ ∪ {ε}) → P(Q) (קבוצת חזקה של Q).

מרכיבי האוטומט הסופי

  • Q: קבוצה סופית של מצבים.
  • Σ: אלפבית קלט סופי (קבוצת הסימנים שהאוטומט יכול לקרוא).
  • δ: פונקציית המעברים.
  • q₀: מצב התחלתי יחיד (q₀ ∈ Q).
  • F: קבוצת מצבים מקבלים (F ⊆ Q).

DFA

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

NFA

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

שפות רגולריות וביטויים רגולריים

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

קשרים ותכונות

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

כוחם ומגבלותיהם של אוטומטים סופיים

אוטומטים סופיים הם מודל חזק לזיהוי תבניות פשוטות, אך יש להם מגבלות מהותיות הנובעות מהזיכרון הסופי שלהם. הם אינם יכולים "לספור" או לזכור מידע שרירותי באורכו. לדוגמה, שפות כמו {aⁿbⁿ | n ≥ 0} אינן רגולריות, מכיוון שהאוטומט אינו יכול לזכור כמה 'a' ראה כדי לוודא שיש מספר זהה של 'b'.

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

יישומים ודוגמאות טיפוסיות למבחן

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

  • מנתחי מילים (Lexical Analyzers): בשלב הראשון של קומפילציה, מנתח מילים משתמש באוטומטים סופיים (לרוב ממומשים כ-DFA) כדי לזהות אסימונים (tokens) כמו מילות מפתח, מזהים ומספרים בקוד המקור.
  • עורכי טקסט ומסנני ספאם: שימוש בביטויים רגולריים לחיפוש והחלפת תבניות, או לסינון הודעות לא רצויות.
  • תכנון מעגלים דיגיטליים: אוטומטים סופיים משמשים לתאר ולתכנן התנהגות של מעגלים לוגיים סדרתיים.

דוגמאות לשאלות מבחן נפוצות:

  • בניית DFA/NFA עבור שפה נתונה (לדוגמה: "כל המילים המכילות את התת-מילה 'ab'").
  • המרת NFA ל-DFA שקול (לרוב באמצעות בניית תתי-קבוצות).
  • כתיבת ביטוי רגולרי עבור שפה נתונה.
  • הוכחה ששפה אינה רגולרית באמצעות למת הניפוח.
  • קביעה האם שפה נתונה היא רגולרית, ונימוק התשובה (לרוב על ידי בניית אוטומט/ביטוי רגולרי או שימוש בלמת הניפוח).

שאלות לדיון

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

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

  • הבדל DFA/NFA: דטרמיניזם לעומת לא-דטרמיניזם במעברים (מעבר יחיד מול אפשרויות מרובות/מעברי ε). שקילות נובעת מכך שכל NFA ניתן להמרה ל-DFA שקול (באמצעות בניית תתי-קבוצות), וכל DFA הוא למעשה NFA פרטי.
  • שפה לא רגולרית: לדוגמה, {aⁿbⁿ | n ≥ 0}. אוטומט סופי בעל זיכרון סופי אינו יכול לזכור את מספר ה-'a'ים שראה כדי לוודא התאמה מדויקת של 'b'ים. הוא אינו יכול "לספור" עד n שרירותי.
  • תכונות סגור: מאפשרות לבנות אוטומטים או ביטויים רגולריים לשפות מורכבות על ידי שילוב אוטומטים/ביטויים לשפות פשוטות יותר (לדוגמה, בניית אוטומט לאיחוד שפות על ידי יצירת NFA חדש עם מצב התחלתי חדש ומעברי ε למצבים ההתחלתיים של האוטומטים המקוריים).
  • חשיבות למת הניפוח: כלי פורמלי חיוני להוכחת מגבלותיהם של אוטומטים סופיים. היא מאפשרת להראות שקיימות שפות מסוימות שאינן ניתנות לזיהוי על ידי אף אוטומט סופי, ובכך מגדירה את גבולות מחלקת השפות הרגולריות. שלבי ההוכחה: הנחה בשלילה שהשפה רגולרית, בחירת מילה w מספיק ארוכה, פירוק w ל-xyz על פי הלמה, והדגמת סתירה על ידי ניפוח y (xyⁱz) עבור i כלשהו.
מצאתם טעות או שחסר משהו?
→ הקודמת
מבוא ורקע מתמטי
הבאה ←
תכונות של שפות רגולריות