הומומורפיזם (שפות פורמליות)

מתוך testwiki
גרסה מ־13:26, 18 בינואר 2023 מאת imported>דוד55 (לקריאה נוספת)
(הבדל) → הגרסה הקודמת | הגרסה האחרונה (הבדל) | הגרסה הבאה ← (הבדל)
קפיצה לניווט קפיצה לחיפוש

בתורת השפות הפורמליות, הומומורפיזם הוא פונקציה המעבירה אותיות מא"ב אחד למילים מעל א"ב אחר. באופן פורמלי, בהינתן Σ,Δ שני א"ב, הומומורפיזם הוא פונקציה h:ΣΔ*.

הרחבות

נוכל להרחיב את מושג ההומומורפיזם למילים ואף לשפות. יהיו Σ,Δ שני א"ב ויהי הומומורפיזם h:ΣΔ*.

  • ההרחבה למילים של h היא פונקציה h^:Σ*Δ* (כלומר, מעבירה מילים מעל Σ למילים מעל Δ) המוגדרת באופן הבא: תבנית:ש h^(ε):=εh^(wσ):=h^(w)h(σ) תבנית:ש נשים לב שנובע שאם w=σ1σ2σnΣ* אז מההגדרה h^(w)=h(σ1)h(σ2)h(σn), כלומר זהו שרשור המילים אליהן הועתקו אותיות המילה w על ידי h (וכן נובעת הטענה השימושית כי לכל w1,w2Σ* מתקיים h^(w1w2)=h^(w1)h^(w2)). אם לכל εwΣ* (כאשר ε המילה הריקה) מתקיים h(w)ε אז נאמר ש-h^ היא ε-חופשית.
  • ההרחבה לשפות של h היא פונקציה h^^:2Σ*2Δ* (כלומר, מעבירה שפות מעל Σ לשפות מעל Δ) המוגדרת: תבנית:ש h^^(L):={h^(w):wL} לכל שפה LΣ*.

נעיר שפעמים רבות, כשההקשר ברור משמיטים את סימני הכובעים.

דוגמה

ניתן דוגמה להומומורפיזם ולהרחבותיו. יהיו הא"ב Σ={a,b},Δ={0,1,2}. נגדיר הומומורפיזם h:ΣΔ* באופן הבא:

h(a)=012,h(b)=21.

לכן, מתקיים למשל כי

h^(bba)=h(b)h(b)h(a)=2121012.

נעיין בשפה L={aibj:i,j0}. אז

h^^(L)={h^(aibj):i,j0}={(h(a))i(h(b))j:i,j0}={(012)i(21)j:i,j0}.

סגירות משפחות של שפות תחת הומומורפיזם

משפחת השפות הרגולריות סגורה תחת הומומורפיזם. כלומר, בהינתן LΣ* רגולריות ו-h:ΣΔ* הומומורפיזם, השפה h(L)Δ* גם רגולרית.

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

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

הומומורפיזם הפוך

ניתן להגדיר הומומורפיזם הפוך. ההגדרה תהיה בהתאם להגדרת מקור תחת פונקציה. בהינתן הומומורפיזם h:ΣΔ*, ההומומורפיזם ההפוך שלו h1:Δ*2Σ* יוגדר להיות:

h1(w):={xΣ*:h(x)=w} לכל wΔ*. אם כן, h1 מעבירה כל מילה מעל Δ לשפה מעל Σ.

ניתן לבצע הרחבה לשפות (כלומר h1:2Δ*2Σ* ונשתמש באותו הסימון למען הנוחות) על ידי ההגדרה:

h1(L)={wΣ*:h(w)L} לכל LΔ*. כלומר כעת, h1 מעבירה כל שפה מעל Δ לשפה מעל Σ. נעיר שבאופן שקול יכולנו גם להגדיר h1(L)=wLh1(w).

משפחת השפות הרגולריות סגורה תחת הומומורפיזם הפוך, וכן משפחת השפות החסרות-הקשר סגורה תחת הומומורפיזם הפוך.

סגירות משפחת השפות הרגולריות תחת הומומורפיזם הפוך

משפט: יהיו h:ΣΔ* הומומורפיזם ו-LΔ* שפה רגולרית. אז גם h1(L) רגולרית.

הוכחה: מכיוון ש-L רגולרית, לפי ההגדרה קיים אוטומט סופי דטרמיניסטי A=(Δ,Q,q0,F,δ) שמקבל אותה (משמע L(A)=L). נבנה אוטומט סופי A שמקבל את h1(L), ומכאן שהיא רגולרית.

רעיון הבניה הוא כדלהלן: בהינתן wΣ*, על מנת לקבוע את שייכותה ל-h1(L), נרצה להפעיל סימולציה של A על h(w) כדי לקבוע את שייכותה ל-L (וזה יהיה אופן פעילות A). אז אם w=σ1σ2σn, נרצה לבדוק האם h(w)=h(σ1)h(σ2)h(σn)L. נרצה אם כן, שכאשר האוטומט A נמצא במצב qQ ומקבל אות קלט σΣ, הוא "יפעיל" סימולציה של A מהמצב q עם מילת הקלט h(σ).

מהמוטיבציה לעיל, נגדיר את האוטומט הסופי דטרמיניסטי A=(Σ,Q,q0,F,δ) עם פונקציית המעברים δ(q,σ):=δ^(q,h(σ)) לכל qQ ו-σΣ. כרגיל במשפטים כאלו, יהיה נוח להוכיח טענת עזר:

טענת עזר: מתקיים δ^(q0,w)=δ^(q0,h(w)) לכל wΣ*.

הוכחת טענת העזר: באינדוקציה על מבנה w.

בסיס: אם w=ε נקבל כי

δ^(q0,ε)=q0=δ^(q0,ε)=δ(q0,h(ε))

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

צעד: נניח נכונות למילים באורך n ונראה נכונות למילים באורך n+1. תהי w=uσΣ* כאשר |w|=n. אז

δ^(q0,w)=δ^(q0,uσ)=δ(δ^(q0,u),σ)=δ(δ^(q0,h(u)),σ)=δ^(δ^(q0,h(u)),h(σ))=δ^(q0,h(u)h(σ))=δ^(q0,h(uσ))=δ^(q0,h(w))

(הסבר למעברים: מעבר (2) הוא מהגדרת פונקציית המעברים המורחבת; מעבר (3) הוא מהנחת האינדוקציה על u; מעבר (4) הוא מהגדרת δ; מעבר (5) הוא מהטענה δ^(δ^(q,w1),w2)=δ^(q,w1w2); מעבר (6) הוא מהגדרת ההומומורפיזם).

נמשיך בהוכחה. נראה ש-L(A)=h1(L). אכן

wL(A)δ^(q0,w)Fδ^(q0,h(w))Fh(w)Lwh1(L)

כנדרש (הסבר למעברים: (1) הגדרת קבלה על ידי אוטומט סופי דטרמיניסטי; (2) טענת העזר; (3) כמו (1); (4) הגדרת הומומורפיזם הפוך).

סגירות משפחת השפות החסרות-הקשר תחת הומומורפיזם הפוך

משפט: יהיו h:ΣΔ* הומומורפיזם ו-LΔ* שפה חסרת-הקשר. אז גם h1(L) חסרת-הקשר.

רעיון ההוכחה: לא ניתן את ההוכחה המלאה, אך ניתן את הרעיון הכללי ובנייה. תהי LΔ* שפה חסרת הקשר. אז קיים אוטומט מחסנית M=(Q,Σ,Γ,δ,q0,,F) שמקבל אותה באמצעות מצבים מקבלים (כלומר Lf(M)=L). נבנה אוטומט מחסנית M שמקבל את h1(L), ולכן היא חסרת-הקשר. חשוב לשים לב שהאוטומט לא יכול לרוקן יותר מאות אחת מראש המחסנית בצעד אחד. לכן, בהינתן אות קלט σΣ, M לא תמיד יוכל לסמלץ את M עבור מילת הקלט h(σ) בצעד אחד. ואמנם, השימוש במסעי-ε יבוא לעזרנו. כלומר, האוטומט M יקרא אות קלט σΣ, יסמלץ את M עם מילת הקלט h(σ) בעזרת מסעי-ε, ואז יקרא עוד אות קלט ויפעל באופן זהה, עד אשר יסיים את קריאת המילה, ואז יגיע למצב מקבל.

נגדיר את מצבי M להיות Q:=Q×Δ כאשר Δ הוא אוסף כל המילים מעל Δ באורך לכל היותר max{|h(σ)|:σΣ}, כלומר האורך המקסימלי שייתכן לתת מילת קלט כלשהו ש-M יצטרך לסמלץ. כלומר, זוג (q,w)Q מייצג מצב q בו M נמצא, ויתרת מילה w שעליו לקרוא. המצב ההתחלתי יהיה q0:=(q0,ε) (כי תחילה אין מילת קלט שעל M לקרוא). המצבים המקבלים יהיו F:=F×{ε} כי על M להגיע למצב מקבל, ואין עוד יתרת מילה שעליו לקרוא. אם כן, M=(Q,Σ,Γ,δ,(q0,ε),,F×{ε}).

נותרה הגדרת פונקציית המעברים. נגדיר אותה בהתאם למוטיבציה שלעיל:

1. קריאת אות קלט על ידי M: תבנית:ש δ((q,ε),σ,Z):={((q,h(σ)),Z)} לכל qQ,σΣ,ZΓ.

2. סימולציית M - מסעי-ε: תבנית:ש δ((q,τw),ε,Z):={((p,w),α):(p,α)δ(q,τ,Z)} לכל qQ,ZΓ,τΔ{ε},wΣ* (אם τΔ מסמלצים מעבר "רגיל" של M, ואם τ=ε מסמלצים מסע-ε של M).

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

טענת עזר: לכל q,pQ,wΣ*,α,βΓ*, אם (q,h(w),α)M*(p,ε,β) אז ((q,ε),w,α)M*((p,ε),ε,β).

כעת, כל שנותר להראות הוא ש-Lf(M)=h1(L).

לקריאה נוספת

תבנית:ערך יתום