בתרגיל במבוא למדמח, לקחנו קלט, נניח שלושה מערכי מספרים, הכנסנו לתכונית שלנו וקיבלנו איזושהי תוצאה מסויימת, או שקיבלנו מערך וערך וכתבנו תוכנית שענתה על השאלה על השאלה באיזה אינדקס נמצא הערך במערך אם בכלל.
באופן כללי, כשאנו כותבים תוכנית, אנו עושים זאת כדי לפתור בעיה מסויימת.
בעיה חישובית היא בעצם התאמה בין קבוצת קלטים לקבוצת פלטים.
הכלים שעומדים לרשותינו לכתיבת תוכניות המחשבות פלט עבור בעיה חישובית הינם:
אוסף פקודות(פעולות אריתמטיות , לולאות, תנאים והשמות).
זכרון שעומד לרשותנו.
מנקודת מבט תיאורטית, נקרא לאוסף הפקודות והזכרון מודל חישובי ואנו נסתכל על המגבלות שלהם.
למודלים שונים יכול להיות אוסף פקודות שונה ומגבלות שונות לשימוש בזיכרון.
אוטומט הינו מודל חישובי פשוט בעל אוסף פקודות מוגבל ושימוש מוגבל בזיכרון ואנו ננסה להבין אילו בעיות חישוביות נוכל לפתור בעזרתו.
הגדרה (בעיית הכרעה)
נקרא לבעיה בעיית הכרעה כאשר הקלט שלה הוא רצף ביטים והפלט שלה הוא ביט יחיד.
שפות ומילים
הגדרה 1 (א"ב)
א"ב הוא קבוצה סופית ולא ריקה של אותיות, כאשר אותיות הן פשוט סימנים.
Σ1={0,1}Σ2={0,1,…,9}Σ3={a,b,c}
הגדרה 2 (מילה)
מילה מעל א"ב Σ היא רצף סופי של אותיות מתוך Σ.
0110 היא מילה מעל Σ1 (וגם מעל Σ2)
המילה ababbc היא מעל Σ3.
באופן פורמלי, ניתן לכתוב כי 0110 זו בעצם הרביעיה הסדורה (0,1,1,0)∈Σ14.
הגדרה 3 (המילה הריקה)
מעל כל א"ב מוגדרת המילה הריקה שהיא רצף באורך 0. נסמנו ε.
דוגמה
האורך של abba הוא 4 (∣abba∣=4).
האורך של b הוא 1.
האורך של ε הוא 0.
הגדרה 4 (שפה)
שפה מעל Σ היא קבוצת מילים מעל Σ.
דוגמה
L1={0,00,001}
L1 היא שפה מעל Σ1 או Σ2.
L2={w∣Σ2 מעל w זוגי, ∣w∣}
נראה כמה איברים: L2={ε,00,01,02,03,…} - היא ∞-ית..
L3=∅
השפה הריקה מעל כל א"ב.
L4={w∣w∈Σ3}L4={ε,a,b,c,aa,ab,…}
הערה
נסמן שפה שבה יש את כל המילים מא"ב מסויים כ-Σ∗.
הערה
ε יכולה להיות שייכת או לא שייכת לשפה מסויימת.
נראה כי ε∈L1,ε∈L3,ε∈L2,L4.
פעולות על מילים ושפות
שרשור מילים
הגדרה 5 (שרשור מילים)
עבור u=σ1…σk ו-v=σ1′…σm′השרשור שלהן הוא:
u⋅v=σ1…σkσ1′…σm′
הערה
נשים לב כי הפעולה אינה קומוטטיבית, שכן:
aba⋅bc=ababcbc⋅aba=bcaba
נשים לב גם כי האדיש השרשורי הינו המילה הריקה - ε.
חזקה של מילים
הגדרה 6 (חזקה של מילים)
עבור מילה w נאמר כי:
wi= פעמים iw⋅w⋅…⋅w
פורמלית נכתוב כי לכל w∈Σ∗ מתקיים w0=ε ו-
∀i∈N+:wi=wi−1⋅w
דוגמה
(ab)3=(ab)2ab=ababab
שרשור שפות
הגדרה 7 (שרשור שפות)
יהיו L1,L2 שפות מעל Σ.
L1⋅L2={u⋅v∣u∈L1∧v∈L2}
דוגמה
{a,ab}⋅{bbc,ε,a}={abbc,a,aa,abbc,ab,aba}
הערה
לכל שפה L מתקיים:
L⋅∅=∅
ונראה כי:
L⋅{ε}=L
זוהי גם פעולה לא קומוטטיבית, שכן הסדר של האותיות במילה תלוי במילים בכל שפה.
חזקה של שפות
הגדרה 8 (חזקה של שפות)
לכל שפה L מעל א"ב Σ מתקיים:
L0={ε}∀i∈N+:Li=Li−1⋅L
כלומר: Li=iL⋅L⋅…⋅L
דוגמה
{a,bb}2={abb,aa,bbbb,bba}
אוטומטים
אוטומט סופי
דטרמיניסטי
נניח ונרצה לכתוב תוכנית שקלט שלה הוא מערך מעל Σ={a,b} והיא מחזירה TRUE ⇔ מספר אותיות a הוא אי-זוגי.
איך נעשה זאת?
נקצה מונה c מאותחל ל-0
נסרוק את המערך משמאל לימין. בכל מעבר על a נבצע c++.
נחזיר c%2.
נשים לב כי אנו לא באמת זקוקים למונה, אלא רק למשתנה בוליאני שיגיד לנו אם מספר ה-a-ים הוא זוגי או לא. בכל איטרציה, אם נקבל a נבצע t=!t.
נשים לב כי התוכנית הזו מאוד פשוטה ונוכל לצייר את אופן הפעולה שלה כך:
כאשר אנו מגיעים לעיגול כפול בסוף התוכנית, אזי נקבל true, אחרת, נקבל false - נקרא למצב זה מצב מקבל.
הגדרה (הגדרה לא פורמלית לאוטומט סופי דטרמיניסטי)
אוטומט סופי דטרמיניסטי מייצג תוכנית פשוטה שהקלט שלה הוא מילה מעל Σ.
הריצה שלה מתחילה במצב התחלתי, קוראת את המילה אות לאחר אות ומתקדמת בהתאם במעברים.
הפלט שלה בסוף הקריאה הוא true/false בהתאם לסוג המצב(מקבל/לא מקבל - דוחה) שבו היא נמצאת.
הגדרה 9 (אוטומט סופי דטרמיניסיטי - DFA)
תהי קבוצת מצבים Q=∅ וסופית, כאשר בה קיים מצב התחלתי q0∈Q. תהי גם את קבוצת המצבים המקבלים: F⊆Q.
נגדיר פונקציה δ:Q×Σ→Q אשר מספר לנו לאן לעבור בכל מצב ועם כל אות.
נגדיר את האוטומט הסופי הדטמיניסיטיA להיות:
A=(Q,Σ,q0,δ,F)
כעת נרצה לתאר כיצד האוטומט עובד.
הגדרה 10 (ריצה של אוטומט על מילה)
ריצה של A מעל w=σ1σ2…σk מעל Σ תהא סדרה מהצורה:
s0⟶σ1s1⟶σ2s2…⟶σksks0…sk∈Q,s0=q0
ולכל 0≤i<k מתקיים δ(si,σi+1)=si+1.
נניח בריצה של האוטומט שראינו ממקודם על aba:
t0⟶at1⟶bt1⟶at0
הגדרה 11 (ריצה מקבלת)
ריצה נקראת מקבלת אם sk∈F, אחרת, תקרא דוחה.
נניח למילה w והאוטומט A נגיד ש-A מקבלת את w או ש-A דוחה את w.
דוגמה
בריצה על המילה aba נגיד כי A דוחה את aba אך A מקבלת את aaa.
הגדרה 12 (שפה של אוטומט)
השפה של A היא קבוצת כל המילים ש-A מקבל.
דוגמה
בדוגמה שלנו:
L(A)={w∈{a,b}∗∣#a(w)mod2=0}
כאשר #a(w) הוא מספר מופעי a במילה w.
פונקציית המעברים המורחבת
הגדרה 13 (הפונקציה δ מעל מילים)
נרחיב את δ כך שתספר לכל מצב(q) ולכל מילה, לאיזה מצב האוטמט יגיע בקריאת המילה מ-q.
לכל w∈Σ∗ ולכל מצב q:
δ∗(q,ε)=q
לכל מילה מהצורה w=uσ כאשר u היא מילה ו-σ היא אות, נגדיר:
מכיוון ששפות רגולריות סגורות תחת משלים וחיתוך, אזי לפי דה-מורגן, הן סגורות תחת איחוד.
L1∪L2=L1∩L2
3. סגירות תחת איחוד
במקום כללי דה-מורגן, ניתן להשתמש במבנה המכפלה ולהגדיר את קבוצת המצבים המקבלים כך:
(F1×P)∪(Q×F2)
משפט
שפות רגולריות סגורות תחת פעולות בסיסיות על קבוצות.
3.1 איחוד סופי
משפט
שפות רגולריות סגורות תחת איחוד סופי.
יהיו L1,…,Ln רגולריות. אזי ⋃1≤i≤nLi רגולרית.
רעיון ההוכחה:
באינדוקציה פשוטה עם כלל התחלה i=0: האיחוד הוא ∅: שפה רגולרית. הצעד נובע מיידית מסגירות לאיחוד.
הערה
שפות רגולריות לא סגורות תחת איחוד ∞.
כלומר, קיימת סדרה ∞ של שפות רגולריות, כך שהאיחוד האינסופי שלהן(⋃i≥1Li) לא רגולרית.
שפות לא רגולריות
אינטואיציה: אוטומט סופי דטרמיניסטי הוא תוכנית פשוטה שאינה מסוגלת לבצע חישובים הדורשים זכרון לא מוגבל, למשל לספור עד גודל לא חסום.
נציג כעת שפה מעל Σ={a,b} ונוכיח כי היא אינה רגולרית:
Lab={aibi∣i∈N}Lab={ε,ab,aabb,aaabbb,…}
נוכיח כי Lab אינה רגולרית. כלומר, לא קיים אוטומט סופי דטרמיניסטי כך ש-L(A)=Lab. הוכחה:
נניח בשלילה כי קיים אוטומט סופי דטרמיניסטי A.
A=(Q,{a,b},q0,δ,F)
כך ש-L(A)=Lab. נסמן ∣Q∣=n.
נתבונן בקבוצת המילים: S={a,a2,a3,…,an+1}. מעקרון שובך היונים(לא - היא לא הגדירה את זה קודם), קיימות שתי מילים ai,aj∈S כאשר i<j כך ש:
δ∗(q0,ai)=δ∗(q0,aj)סימון=q
נתבונן ב-δ∗(q,bi)=p. באמצעות למת השרשור, נדע כי מתקיים: δ∗(q0,aibi)=δ∗(q0,ajbi)=p.
האם p∈F?
אם לא, אז δ∗(q0,aibi)∈F ולכן aibi∈L(A) - סתירה.
אם כן, אז δ∗(q0,ajbi)∈F ולכן ajbi∈L(A) - סתירה. ∎
הערה
נראה אי-סגירות לאיחוד אינסופי:
Lab=i≥0⋃רגולרית{aibi}={ε}∪{ab}∪{aabb}…
הערה
כל שפה סופית היא רגולרית, שכן היא איחוד סופי של יחידונים.
מסקנה
כל שפה לא רגולרית היא אינסופית. אך לא כל שפה אינסופית היא לא רגולרית.
שיטות להוכחת רגולריות או אי-רגולריות של שפות
למת הניפוח לשפות רגולריות
נראה תכונה שקיימת לכל שפה רגולרית, ולכן אם L לא מקיימת אותה, אזי L לא רגולרית.
תהי L שפה רגולרית ויהי A אוטומט סופי דטרמיניסטי עבור L עם n מצבים. נניח כי קיימת w∈L כך ש-∣w∣≥n.
w=σ1σ2…σmm≥n
נתבונן בריצה של A על w:
S0σ1S1σ2⋯σnSnσn+1⋯σmSm
מספר המצבים בסדרה (m+1=)n<. למעשה, כבר אחרי קריאת הרישא σ1…σn עוברים ב-n+1 מצבים.
לפי עקרון שובך היונים, קיימים 0≤i<j≤n כך ש-Si=Sj=q. נתבונן במסלול הריצה על A כאשר נסמן w=xyz.
[ציור]
מכיוון ש: δ∗(q,y)=q מתקיים כי לכל i∈N : xyiz∈L.
כלומר, ברגע שקיימת מילה ארוכה מספיק ב-L, אפשר לחלק אותה ל-3 חלקים כך שישנן ∞ מילים שגם הן ב-L שנוצרות ע"י "ניפוח" החלק האמצעי.
למה (הניפוח)
תהי L שפה רגולרית. אזי קיים n∈N+ כך שלכל מילה w∈L כך ש-∣w∣≥n קיים פירוק w=xyz כך ש: ∣xy∣≤n, y=ε ולכל i≥0 מתקיים xyiz∈L.
הוכחה:
אם L סופית, אזי עבור <n אורך מילה מקסימלית ב-L, התנאי מתקיים באופן ריק.
אחרת, n הוא מספר המצבים באוטומט סופי דטרמיניסטי עבור השפה L, והנכונות נובעת מהדיון הנ"ל. ∎
מסקנה
אם L לא מקיימת את תנאי למת הניפוח, אזי היא אינה רגולרית.
איך נדע כי שפה לא מקיימת את התנאים? כעת, ננסח במדוייק.
משפט (שלילת הלמה)
לכל n≥1 קיימת w∈L, ∣w∣≥n כך שלכל פירוק של w: w=xyz, כך ש-y=ε,∣xy∣≤n קיים i≥0 כך ש: xyiz∈L.
דוגמה (לשימוש בלמת הניפוח כדי להוכיח ששפה אינה רגולרית)
Lab={aibi∣i≥n}. הוכחה:
יהי n≥1. נבחר w=anbn. w∈L,∣w∣≥n ולכן היא כבילה.
נעבור על כל הפירוקים החוקיים של w. נבחר את x להיות רצף של a-ים, את y להיות רצף של a-ים ואת z להיות רצף של a-ים ואז b-ים.
לכן, ∣xy∣=n. כל הפירוקים של w לפי תנאי הלמה הם מהצורה הבאה w=xasyatzan−s−tbn.
לכל s,t כך ש-t=0, s+t≤n קיים פירוק שונה.
לכל פירוק שכזה נבחר i=2. xy2z=asatatan−s−tbn שזה בעצם xy2z=an+tbn. מכיוון ש-t>0 אזי an+tbn∈L.
הראנו כי Lab לא עומדת בתנאי הלמה, ולכן אינה רגולרית. ∎
הערה (מה מותר ומה אסור לבחור בהוכחה שכזו?)
לא בוחריםnפירוקבוחרים(שאורכה תלוי ב-n)w(כתלות בפירוק)i
דוגמה
נסתכל על Σ={a} ו-Lp={ap∣ ראשוני p}. נוכיח כי Lp לא רגולרית. הוכחה: נוכיח בעזרת למת הניפוח.
יהי n≥1. נבחר ראשוני p≥n (יש כזה כי ישנם ∞ ראשוניים) ואת המילה wp=ap.
כל הפירוקים של ap הם מהצורה: asatap−s−t כך ש: s+t≤n ו-t>0.
אנו כעת נחפש i כך ש: as(at)iap−s−t מילה מאורך פריק.
asaitap−s−t=ap+it−t=ap+t(i−1)
נבחר i=p+1 ואז נקבל כי asaitap−s−t=ap+t(p+1)=ap(1+t) ולכן מכיוון ש-t+1>1,p>1 ומכיוון שכפולה של שני מספרים הגדולים מ-1 היא אינה מספר ראשוני, אזי נקבל a בחזקת מספר שאינו ראשוני ולכן היא לא נמצאת בשפה.
הראנו כי Lp לא מקיימת את תנאי הלמה, ולכן אינה רגולרית. ∎
דוגמה ("הדוגמה החביבה של הסמסטר" - שרי)
שפת הפולינדורמים מעל {a,b}. (פולינדרום: מילה הנקראת באופן זהה בשני הכיוונים. דוגמה: abba, אבא, אמא, aibohphobia) הוכחה:
יהי n≥1 ונבחר(שווה להשקיע קצת זמן בבחירה טובה) את המילה anban.
[המשיכו בבית]
דוגמה (לשפה שהיא לא רגולרית אבל כן ניתנת לניפוח)
זוהי דוגמה ללא הוכחה.
L={aibjck∣j=k אז i>0אם }
נשים לב כי החלק הראשון הוא רגולרי וכן ניתן לניפוח. אך החלק השני הוא החלק הלא רגולרי.
משפט מייהיל-נרוד
המשפט נותן איפייון של שפות רגולריות שאינו בעזרת מודל חישובי, מאפשר למצוא אס"ד מינימלי (מבחינת מספר מצבים) לשפה רגולרית והוא כלי להוכחה ששפה אינה רגולרית.
יחס מייהיל-נרוד של שפה L
נניח כי L רגולרית ויהי A אס"ד עבור L. יהיו u,v שתי מילים כך ש: q=δ∗(q0,u)=δ∗(q0,v).
לכל z∈Σ∗ מתקיים כי vz∈L⟺uz∈L.
הגדרה 18 (יחס מייהיל-נרוד)
תהי L שפה. יחס מייהיל-נרוד של L היא יחס מעל Σ∗ המוגדר:
vz∈L⟺uz∈L:z∈Σ∗לכל ⟺uL∼v
דוגמה
Σ={a,b}L={w∣יש ב-w את ba}
נתבונן ב-a,ab. עבור z=ε מתקיים: a⋅ε∈L וגם ab⋅ε∈L ולכן, ε הוא זנב מפריד שמוכיח שהמילים אינן ביחס L∼. כלומר: aL∼ab.
נתבונן ב-a,aa. שני אלו כן ביחס מייהיל-נרוד ונראה כמה אפשרויות: אם נשרשר מילים שיש בהן רק a אז המילים לא יהיו בשפה ואם נשרשר מילה כלשהי שיש בה b אז שתי המילים כן יהיו בשפה.
לכל z, אם ב-z אין b מתקיים az,aaz∈L ואחרת: az,aaz∈L. ולכן aL∼aa.
נתבונן ב: ε,a. הם לא ביחס אחד עם השני. נראה כי ε⋅b∈La⋅b∈L⟸εL∼a.
טענה
לכל L מעל Σ, L∼ הוא יחס שקילות מעל Σ∗.
הוכחה:
רפלקסיבי: לכל u∈Σ∗ ולכל z∈Σ∗ מתקיים uz∈L⟺uz∈L.
סימטרי: לכל u,v∈Σ∗, אם uL∼v אז לכל z: vz∈L⟺uz∈L⟺uz∈L⟺vz∈L⟺vL∼u
טרנזיטיבי: לכל u,v,w∈Σ∗ אם לכל z מתקיים vz∈L⟺uz∈L וכן מתקיים wz∈L⟺vz∈L אז לכל z מתקיים: wz∈L⟺uz∈L ∎
היחס L∼ מחלק את Σ∗ למחלקות שקילות. נבחין כי אם u∈L ו-v∈/L אז uL∼v כי ε מפרידה ביניהן.
מסקנה
לכל מחלקת שקילות S או S⊆L או S⊆L.
המשפט
טענה
אם L רגולרית, אז מספר מחלקות השקילות של L∼ הוא סופי.
נסמן: Rank(L∼).
הוכחה:
תהי L רגולרית מעל Σ ויהי A אס"ד עבור L. יהי q מצב ב-A.
ראינו כי לכל u,v שמגיעות ל-q, לכל z: vz∈L⟺uz∈L ולכן uL∼v. לכן, כל המילים שמגיעות לאותו המצב הן באותה מחלקת שקילות.
נסמן ב-Lq את קבוצת המילים שמגיעות ל-q. אז קיימת מחלקת שקילות S של L∼ כך ש-Lq⊆S.
לכן, מספר המצבים ב-Rank(L∼)≤A. (המצבים באוטומט מחלקים את Σ∗: כל מילה מגיעה למצב יחיד) ⟸Rank(L∼) סופי. ∎
משפט (מייהיל-נרוד)
סופיRank(L∼)⟺ רגולריתL
הוכחה:
⇐: הוכחנו כעת.
⇒: תהי L עבורה Rank(L∼) סופי: S1,S2,…,Sk. נבנה DFA שבו המצבים הם S1,…,Sk וכל מילה u מגיעה ל-[u]:
A=({S1,…,Sk},Σ,[ε],δ,{S∣S⊆L})
לכל [w] ולכל σ:
δ([w],σ)=[wσ]
נראה כי δ הינה פונקציה ואינה תלויה בנציג. נניח בשלילה שקיימות u,v כך ש: [u]=[v] אך [uσ]=[vσ].
אם uσL∼vσ קיים z מפריד כך ש-uσz∈L וגם vσz∈L (או להפך) אבל אז σz מפריד בין u,v בסתירה לכך ש-uL∼v.
לכן, A הוא אוטומט סופי דטרמיניסטי.
טענה (טענת עזר)
לכל w∈Σ∗ מתקיים δ∗([ε],w)=[w]
הוכחה: באינדוקציה על w. (לבד!!!)
וכעת, מקבלδ∗⟺w∈L(A) ולכן, לפי טענת העזר:
w∈L(A)⟺ מקבל[w]⟺[w]⊆L⟺w∈L
∎
הערה
נשים כי האוטומט שבנינו הוא אס"ד מינימלי עבור L כי Rank(L∼)=∣Q∣.
משפט (הנוגד הלוגי למייהיל-נרוד)
אינסופיRank(L∼)⟺ לא רגולריתL
כלומר, אם נוכיח של-L∼ של-L יש ∞ מחלקות שקילות ⟸ היא לא רגולרית.
דוגמה
נוכיח שוב ש-Lab={anbn∣b∈N} אינה רגולרית בעזרת מייהיל-נרוד.
נחפש קבוצה אינסופית של מילים שכל אחת מהן במחלקת שקילות שונה. כלומר, נראה שבין כל שתיים מהן יש זנב מפריד.
נבחר: T={ai∣i∈N}. נראה שבין כל שתיים מהמילים ב-T יש מילה מפרידה: יהיו aj,aj′ שתי מילים שונות מ-T. bj היא מילה מפרידה שכן:
ajbj∈L∧aj′bj∈/L
ולכן, לא קיימות שתמי מילים ב-T באותה מחלקת שקילות ולכן, כל מילה ב-T שייכת למחלקת שקילות שונה ולכן T אינסופית ולכן ישנן ∞ מחלקות שקילות ולכן, לפי מייהיל-נרוד השפה Lab אינה רגולרית.
דגשים
הקבוצה T חייבת להיות ∞.
הקבוצה T לא חייבת להיות מוכלת ב-L או ב-L.
ההוכחה עבור T חייבת להיות כללית. כלומר, לכל שתי מילים מ-T.
אי-דטרמיניסטי
באוטומט סופי דטרמיניסטי יש מצב התחלתי יחיד והמעברים הם פונקציה. כלומר, לכל מצב + אות יש מצב יעד יחיד.
באוטומט סופי לא דטרמיניסטי ישנה קבוצת מצבים התחלתיים והמעברים הם יחס עם איברים מהצורה (q,σ,p).
דבר זה נראה מעט מוזר שכן לא ברור לאן אנו הולכים מכל אות, שכן יש לנו כמה דרכים שאנו יכולים ללכת בהן.
דוגמה
נשים לב למשהו מעניין פה - באוטומט זה ישנן ריצות שונות על מילים כגון w=aa:
q0aq0aq0q0aq0aq1q0aq1aq2
נדרש להגדיר מחדש את ההגדרה שלנו לאילו מילים בשפה, שכן יש מילים שמתקבלים בחלק מהריצות ולא באחרות.
הגדרה 19 (מילה מתקבלת באוטומט סופי לא דטרמיניסטי)
מילה w מתקבלת ע"י אוטומט סופי אי דטרמיניסטי(NFA) אם קיימת ריצה מקבלת על w.
בדוגמה שראינו, על המילה w=ba כלל לא קיימת ריצה. ובפרט, לא קיימת ריצה מקבלת.
משפט
מילה w לא מתקבלת באוטומט סופי אי דרטמיניסטי A אם כל הריצות של A על w דוחות.
הערה
תנאי ה"לכל" יכול להתקיים באופו ריק. כלומר: אם אין ל-A ריצה על w, אזי w לא מתקבלת.
הגדרה 20 (אוטומט סופי לא דטרמיניסטי)
יהי A אוטומט סופי לא דרטמיניסטי.
A=(Q,Σ,I,R,F)
כאשר:
Q היא קבוצת המצבים, כמו בדטרמיניסטי.
Σ היא א"ב של האוטומט, בדיוק כמו בדטרמיניסטי.
I היא קבוצת המצבים ההתחלתיים. I⊆Q
R הוא יחס המעברים המוגדר: R⊆Q×Σ×Q
F היא קבוצת המצבים הסופיים, כמו בדטרמיניסטי.
ריצה של אוטומט A על w=σ1…σn היא סדרה:
∈IS0σ1S1σ2S2⋯σnSn
כך ש-S0∈I ולכל 1≤i≤n: (Si−1,σi,Si) כמו בוגמות על aa.
הריצה מקבלת אילו Sn∈F.
נשים לב לבעיה - איך נוכל להגדיר איך נראת ריצה על מילה? באוטומט סופי דטרמיניסטי, מכיוון שהייתה לנו פונקציית מצבים δ, יכלנו להגדיר פונקציה מורחבת δ∗ כך שהיא תהא ריצה על מילה שלמה. פה לא נוכל לעשות את זה כי δ לא קיימת. במקום זאת, יבוא לעזרתינו הסימון הבא:
משפט
נסמן qA⟶wp אם אפשר להגיע ל-p בקריאה של w מ-q.
סימון זה הוא תחליף ל-δ∗.
הגדרה 21 (שפת אוטומט סופי לא דטרמיניסטי)
השפה של אוטומט סופי לא דרטמינסיטי A היא:
L(A)={w∣∃q0∈I,∃p∈F:];q0A⟶wp}
דוגמה
נזכר בדוגמה ממקודם ונמצא לאוטומט A את השפה שלו.
נסתכל על כל האפשרויות שלנו ונייצג כל אחת מהן כקבוצה:
q1מילים שלא עוברות דרך {aibi∣i≥0,j≥1}∪מילים שעברו ב-q{aibi∣i≥2,j≥0}∪סוג שני של מילים שעברו ב-q{aibi∣i≥1,j≥1}
נשים לב שהקבוצה השמאלית מוכלת בקבוצה הימנית ולכן נוכל לצמצם אותה בתיאור.
נבנה כעת DFA עבור L(A):
ראינו תרגום מאוטומט לא דטרמיניסטי לאחד דטרמיניסטי. האם זה תמיד אפשרי או שקיימים אוטומטים אי דרטרמינסיים שלא ניתן לתרגם אותם? נוכל לשאול את עצמנו, האם השפה של אוטומט לא דטרמיניסטי היא רגולרית בכלל?
נגלה כי אוטומטיים לא דטרמינסיים, עדיין יכולים לתאר רק שפות רגולרייות.
משפט
לכל שפה רגולרית קיים אוטוטמט סופי לא דטרמיניסטי המתאר אותה.
הוכחה:
קל לראות שלכל שפה רגולרית L קיים אוטומט סופי לא דטרמיניסטי A כך ש-L(A)=L. L רגולרית ⇐ קיים אוטומט סופי דטרמיניסטי B כך ש-L(B)=L.
B=(Q,Σ,q0,δ,F)
ונגדיר: A=(Q,Σ,{q0},δ,F).
הריצה של B על w מקבלת ⟺w∈L(B)⟸ קיימת ריצה מקבלת של A על w⟸w∈L(A).
הריצה של B על w דוחה ⟺w∈L(B)קבוצת הריצותהיא יחידון⟸ כל הריצות של A על w דוחות ⟸w∈L(A). ∎
משפט
יהי A אוטומט סופי לא דטרמיניסטי. אזי L(A) רגולרית.
הוכחה:
יהי A=(Q,Σ,I,R,F) אוטומט סופי לא דטרמיניסטי. נבנה אוטומט סופי דטרמיניסטי D כך ש-L(D)=L(A).
הערה (ענן המחשבות שלנו)
נחזור לאוטומט המכפלה. היו לנו שם שני אוטומטים ורצינו לרוץ על שתי הריצות בו זמנית. לכך בנינו אוטומט המורכב משני מצבים.
נרצה להשתמש באותו הרעיון פה להוכחה זו.
D יעקוב אחרי קבוצת המצבים שמגיעים אליהן כשמתקדמים על כל הריצות של A על w בו
כל מצב ב-D ייצג קבוצת מצבים ב-A ומצב ב-D יהיה מקבל אם הוא מייצג קבוצה אשר קיים בה לפחות מצב מקבל אחד.
נגדיר:
D=(P(Q),Σ,I,δ,{S∈P(Q)∣S∩F=∅})
כאשר I∈P(Q) מצב יחיד וקבוצת המצבים המקבלים היא כל תת הקבוצות של Q שיש בהן מצב מקבל של A.
כעת, נותר לנו רק להגדיר את δ.
∀σ∈Σ,∀S∈P(Q):δ(S,σ)={q∃q∈S:qA⟶σp}
כעת נוכיח את נכונות האוטומט.
טענה (טענת עזר)
∀w∈Σ∗,∀S∈P(Q):δ∗(S,w)={p∃q∈S:qA⟶wp}
הוכחה:
באינדוקציה על אורך w. בסיס:w=ε.
δ∗(S,ε)δ=S={p∃q∈S:qA⟶εp}
צעד: נניח נכונות עבור w באורך n ונוכיח עבור wσ לכל σ∈Σ:
השפה L רגולרית ⟺ קיים אוטומט סופי לא דטרמינסיטי A כך ש-L(A)=A.
דוגמה
נסתכל על האוטומט A ממקודם:
וכעת, נבנה לו אוטומט סופי דטרמיניסטי - D:
ועוד שלושה מצבים שלא הגענו אליהם.
דוגמה (דוגמה לשפה עם NFA קטן ו-DFA גדול)
Σn={1,2,…,n}
נגדיר: Ln={w∈Σn∗∣w שלא מופיעה ב-Σnקיימת אות מ-}
נראה אוטומט סופי לא דטרמיניסטי עבור Ln:
שימושי NFA
בניות בעזרת NFA
ראינו כי בהינתן אוטומט סופי דטרמיניסטי A1,A2 אפשר להסתמך על בניית המכפלה כדי לבנות אוטומט סופי דטרמיניסטי עבור L(A1)∪L(A2).
אם ב-A1 ישנם n1 מצבים וב-A2 ישנם n2 מצבים, אזי, ב-A ישנם n1⋅n2 מצבים.
כעת, נניח כי יש לנו אוטומט סופי לא דטרמיניסטי A1,A2 נבנה עבור L(A1)∪L(A2):
A=(QA1∪QA2,Σ,IA1∪IA2,RA1∪RA2,F1∪F2)
נראה כי:
w∈L(A)⟺קיימת עליה ריצה מקבלת באחד מהם⟺w∈L(A1)∪L(A2)
מספר המצבים: n1+n2.
הוכחת סגירות רגולריות להיפוך
נגדיר wR=σnσn−1…σ1 כאשר w=σ1…σn−1σn.
עבור שפות, בהנתן שפה L:
LR={wR∣w∈L}
דוגמה
L={ε,ab,abb}⟹LR={ε,ba,bba}
טענה
אם L רגולרית, גם LR רגולרית.
סקיצת הוכחה:
נקח אוטומט סופי לא דטרמיניסטי עבור L. נסמנו A.
כעת, נבנה אוטומט עבור LR:
A′=(Q,Σ,FA,R′,IA)R′={(p,σ,q)∣(q,σ,p)∈RA}
שיעורי בית (HW)
השלימו את החסר
∎
מעברי ε
הרעיון: מעברי ε מאפשרים להמשיך את הריצה ממצב אחר מבלי להתקדם על הקלט.
נראה ריצה לדוגמה:
→q0aq1bq2εq0aq1bq2εq3
זוהי ריצה מקבלת על המילה abab.
הערה
לא חובה לעבור במעבר ε. אם יש מעבר qεp והריצה מגיעה ל-q, היא יכולה להישאר ב-q או להמשיך ב-p.
מעברי ε במהותם הם אי דטרמיניסטים, לכןף הם אינם קיימים באוטומט סופי דטרמיניסטי.
אפשר לעבור במעברי ε לפני/באמצע/בסוף המילה.
מותר לעבור בכמה מעברי ε ברצף.
נקרא למודל ε−NFA ונראה: ε−NFA≡NFA.
הגדרה 22 (ε−NFA)
A=(Q,Σ,I,R,F)
ההבדל היחיד בין NFA לאוטומט הנוכחי הוא:
R⊆Q×(Σ∪{ε})×Q
טענה
L היא רגולרית ⟺ קיים ε−NFA כך ש-L(A)=L.
רעיון הוכחה:
נראה תרגום בין NFA ל-ε−NFA.
⇐: יהי אוטומט סופי לא דטרמיניסטי A. הוא ε−NFA שאין בו מעברי ε. כלומר, NFA הוא מקרה פרטי של ε−NFA.
⇒: יהי A אוטומט סופי לא דטרמיניסטי בעל מעברי ε. אנו נבנה אוטומט סופי לא דטרמיניסטי ללא מעברי ε בעזרת שני השינויים הבאים:
אם אפשר להגיע ל-q ממצב התחלתי ע"י קריאה של ε-ים בלבד: q יהיה מצב התחלתי.
אם אפשר להגיע ממצב q למצב p ע"י קריאה של אות σ (כלומר מתקיים qεq′σp′εp) נוסיף מעבר ישיר עם σ מ-q ל-p.
הוכחה:
יהי ε−NFA:
A=(Q,Σ,I,R,F)
נבנה אוטומט סופי דטרמיניסטי B כך:
B=(Q,Σ,I′,R′,F)
כאשר:
I′={q∃p∈I:pA⟶εq}
נשים לב שכל q∈I שייך ל-I′.
R′={(q,σ,p)qA⟶σp}
נשים לב כי הם לאו דווקא מחוברים בעזרת מעבר ישיר.
הוכחת נכונות: ניתן להראות כי לכל w ולכל מצב p:
קיים q∈I כך ש-⟺qA⟶wp קיים q′∈I′ כך ש-qB⟶wp.
מסקנה: ⟺w∈L(A) קיים q∈I,p∈F כך ש-qA⟶wp⟺ קיים q′∈I′ ו-p∈F כך ש-q′B⟶wp⟺w∈L(B). ∎
ולכן: w∈L(A).
⇒: תהי w∈L(A). אזי קיים q0∈I1 וקיים q∈F2 כך ש-q0A⟶wp.
מכיוון ש-q0 ב-Q1 ו-p ב-Q2, הריצה חייבת לעבור במעבר ε שהוספנו. כלומר, קיים q1∈F1 ו-p0∈I2 כך ש-w ניתנת לפירוק: w=uv כך ש:
q0uqεp0vp
מהבניה קיבלנו כי:
u∈L(A1)∧v∈L(A2)
ולכן, w∈L1∘L2. ∎
הערה (תזכורת)
L∗=i≥0⋃Li=L0∪L1∪…
כלומר, שפת כל השרשורים (באורך סופי כלשהו) של מילים מ-L.
אם w∈L∗: אם w=ε אזי מתקבלת ע"י p ⇐ w∈L(A′). אחרת, w=u1u2…uk וכולן ב-L. לכל אחת מהן ריצה מקבלת q0iuipi ב-A. נדביק אותן יחד: q01u1p1εq02u2p2⋯ukpk וזו ריצה מקבלת על w.
אם w∈L(A′): אם הגיעה ל-p: w=ε ⇐ w∈L∗. אחרת, נפרק את הריצה המקבלת עליה לפי מעברי ε: q0u1εε⋯εukp. מהבניה: ui∈L לכל 1≤i≤k ⇐ w∈L∗. ∎
ביטויים רגולריים
ביטויים רגולרים הם עוד דרך להציג שפה. רק שבמקום שנשתמש במודל חישובי, נשתמש בביטויים.
יהי Σ א"ב. תחילה נרצה לגדיר קבוצת ביטויים רגולריים RΣ מעל Σ: בסיס:∅,ε הם ביטויים רגולריים. בנוסף, לכל σ∈Σ: σ∈RΣ. צעד: אם r1,r2∈RΣ אזי הביטויים הבאים גם ב-RΣ:
נוכל לכתוב ליד כל עלה בעץ את הקבוצה המתאימה וכך לבנות.
כעת, נוכל להגדיר שפות רגולריות ונבנה עבורן ביטויים.
נתחיל עם השפה {a,b}∗:
((a+b)∗)
נכתוב ביטוי עבור שפת כל המילים מעל {a,b} שמתחילות ב-a ונגמרות ב-b:
((a⋅((a+b)∗))⋅b)
הערה
באופן לא פורמלי, נסיר סוגריים מיותרים. (כגון הסוגריים החיצוניים)
במקרה הזה נכתוב:
a⋅(a+b)∗⋅b
נכתוב ביטוי עבור שפת כל המילים שיש להן תת-מילה ab:
(a+b)∗⋅a⋅b⋅(a+b)∗
נכתוב ביטוי עבור שפת כל המילים באורך אי-זוגי:
שרשורים של כל המילים באורך 2∣∣כל המילים באורך זוגי((a+b)⋅(a+b))∗⋅(a+b)
נכתוב ביטוי לשפת כל המילים שיש בהן מספר זוגי של a:
(b∗ab∗ab∗)∗+b∗
שקילות בין שפות רגולריות וביטויים רגולריים
משפט
יהי Σ א"ב.
שפה L מעל Σ היא רגולרית ⟺ קיים ביטוי רגולרי r∈RΣ כך ש-L[r]=L.
הוכחה:
⇒: יהי r∈RΣ. נחלק למקרים לפי מבנה r:
אם r בסיס: r∈{ε,∅,σ} עבור σ∈Σ כלשהי. בכל המקרים הללו: L[ε]={ε}L[∅]=∅L[σ]={σ}
הוכנו כבר בעבר שכל הביטויים הללו הם רגולריים.
אחרת: r=(r1+r2)∨r=(r1⋅r2)∨r=(r1∗) עבור r1,r2∈Rε כלשהם.
נניח כי L[r1],L[r2] הן רגולריות. הראנו ששפות רגולריות סוגורות תחת ∪,⋅,∗ ולכן בכל אחד מהמקרים: L[r] רגולרית.
⇐: תהי L שפה רגולרית. נבנה r כך ש-L[r]=L. נציג אלגוריתם לבניית r על סמך אוטומט סופי לא דטרמיניסטי עבור L.
יהי אוטומט סופי לא דטרמיניסטי A עבור L. נוסיף מצב מקבל חדש, אליו עוברים בכל מעבר למצב מקבל ב-A והוא יהיה המקבל היחיד. נוסיף גם התחלתי יחיד שעובר לכל המצבים שאפשר להגיע אליהם מהמצב ההתחלתיים ב-A ואם הם הגיעו למצב מקבל: גם לחדש. בנוסף, אם קיים מצב התחלתי מקבל, נוסיף מעבר-ε למקבל החדש.
נמחק מצבים באופן הבא: לכל מצב(מקורי) ולכל
נבצע:
pr1⋅r2⋅r3q
בשלב השני של מחיקת המצבים, לכל p,q שיש ביניהם אוסף של מעברים r1,r2,…,rk נחליף אותם במעבר pr1+⋯+rkq. נחזור על שלב 2 עד אשר לא ישאר לנו רק מעבר אחד.
הביטוי שיהיה מעל המעבר יהיה הביטוי הרגולרי של האוטומט. ∎