בתורת השפות הפורמליות, **הומומורפיזם** הוא פונקציה המעבירה אותיות מא"ב אחד למילים מעל א"ב אחר. באופן פורמלי, בהינתן {\displaystyle \Sigma ,\Delta } שני א"ב, הומומורפיזם הוא פונקציה {\displaystyle h\colon \Sigma \to \Delta ^{\*}}.

הרחבות
------

נוכל להרחיב את מושג ההומומורפיזם למילים ואף לשפות. יהיו {\displaystyle \Sigma ,\Delta } שני א"ב ויהי הומומורפיזם {\displaystyle h\colon \Sigma \to \Delta ^{\*}}.

* **ההרחבה למילים** של h היא פונקציה {\displaystyle {\hat {h}}\colon \Sigma ^{\*}\to \Delta ^{\*}} (כלומר, מעבירה מילים מעל \Sigma  למילים מעל \Delta ) המוגדרת באופן הבא:   
 {\displaystyle {\begin{aligned}{\hat {h}}(\varepsilon )&:=\varepsilon \\{\hat {h}}(w\sigma )&:={\hat {h}}(w)\cdot h(\sigma )\end{aligned}}}   
 נשים לב שנובע שאם {\displaystyle w=\sigma \_{1}\sigma \_{2}\dots \sigma \_{n}\in \Sigma ^{\*}} אז מההגדרה {\displaystyle {\hat {h}}(w)=h(\sigma \_{1})h(\sigma \_{2})\dots h(\sigma \_{n})}, כלומר זהו שרשור המילים אליהן הועתקו אותיות המילה w על ידי h (וכן נובעת הטענה השימושית כי לכל {\displaystyle w\_{1},w\_{2}\in \Sigma ^{\*}} מתקיים {\displaystyle {\hat {h}}(w\_{1}w\_{2})={\hat {h}}(w\_{1})\cdot {\hat {h}}(w\_{2})}). אם לכל {\displaystyle \varepsilon \neq w\in \Sigma ^{\*}} (כאשר \varepsilon  המילה הריקה) מתקיים {\displaystyle h(w)\neq \varepsilon } אז נאמר ש-{\displaystyle {\hat {h}}} היא {\displaystyle {\boldsymbol {\varepsilon }}}**-חופשית**.
* **ההרחבה לשפות** של h היא פונקציה {\displaystyle {\hat {\hat {h}}}\colon 2^{\Sigma ^{\*}}\to 2^{\Delta ^{\*}}} (כלומר, מעבירה שפות מעל \Sigma  לשפות מעל \Delta ) המוגדרת:   
 {\displaystyle {\hat {\hat {h}}}(L):=\left\{{\hat {h}}(w):w\in L\right\}} לכל שפה {\displaystyle L\subseteq \Sigma ^{\*}}.

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

דוגמה
-----

ניתן דוגמה להומומורפיזם ולהרחבותיו. יהיו הא"ב {\displaystyle \Sigma =\{a,b\},\Delta =\{0,1,2\}}. נגדיר הומומורפיזם {\displaystyle h\colon \Sigma \to \Delta ^{\*}} באופן הבא:

{\displaystyle h(a)=012,h(b)=21}.

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

{\displaystyle {\hat {h}}(bba)=h(b)h(b)h(a)=2121012}.

נעיין בשפה {\displaystyle L=\{a^{i}b^{j}:i,j\geq 0\}}. אז

{\displaystyle {\hat {\hat {h}}}(L)=\left\{{\hat {h}}(a^{i}b^{j}):i,j\geq 0\right\}=\{(h(a))^{i}(h(b))^{j}:i,j\geq 0\}=\{(012)^{i}(21)^{j}:i,j\geq 0\}}.

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

משפחת השפות הרגולריות סגורה תחת הומומורפיזם. כלומר, בהינתן {\displaystyle L\subseteq \Sigma ^{\*}} רגולריות ו-{\displaystyle h\colon \Sigma \to \Delta ^{\*}} הומומורפיזם, השפה {\displaystyle h(L)\subseteq \Delta ^{\*}} גם רגולרית.

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

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

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

ניתן להגדיר הומומורפיזם הפוך. ההגדרה תהיה בהתאם להגדרת מקור תחת פונקציה. בהינתן הומומורפיזם {\displaystyle h\colon \Sigma \to \Delta ^{\*}}, **ההומומורפיזם ההפוך** שלו {\displaystyle h^{-1}\colon \Delta ^{\*}\to 2^{\Sigma ^{\*}}} יוגדר להיות:

{\displaystyle h^{-1}(w):=\{x\in \Sigma ^{\*}:h(x)=w\}} לכל {\displaystyle w\in \Delta ^{\*}}. אם כן, {\displaystyle h^{-1}} מעבירה כל **מילה** מעל \Delta  ל**שפה** מעל \Sigma .

ניתן לבצע **הרחבה לשפות** (כלומר {\displaystyle h^{-1}\colon 2^{\Delta ^{\*}}\to 2^{\Sigma ^{\*}}} ונשתמש באותו הסימון למען הנוחות) על ידי ההגדרה:

{\displaystyle h^{-1}(L)=\{w\in \Sigma ^{\*}:h(w)\in L\}} לכל {\displaystyle L\subseteq \Delta ^{\*}}. כלומר כעת, {\displaystyle h^{-1}} מעבירה כל **שפה** מעל \Delta  ל**שפה** מעל \Sigma. נעיר שבאופן שקול יכולנו גם להגדיר {\displaystyle h^{-1}(L)=\bigcup \_{w\in L}h^{-1}(w)}.

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

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

***משפט:*** יהיו {\displaystyle h\colon \Sigma \to \Delta ^{\*}} הומומורפיזם ו-{\displaystyle L\subseteq \Delta ^{\*}} שפה רגולרית. אז גם {\displaystyle h^{-1}(L)} רגולרית.

***הוכחה:*** מכיוון ש-L רגולרית, לפי ההגדרה קיים אוטומט סופי דטרמיניסטי {\displaystyle A=(\Delta ,Q,q\_{0},F,\delta )} שמקבל אותה (משמע {\displaystyle L(A)=L}). נבנה אוטומט סופי {\displaystyle A'} שמקבל את {\displaystyle h^{-1}(L)}, ומכאן שהיא רגולרית.

**רעיון הבניה** הוא כדלהלן: בהינתן {\displaystyle w\in \Sigma ^{\*}}, על מנת לקבוע את שייכותה ל-{\displaystyle h^{-1}(L)}, נרצה להפעיל סימולציה של A על {\displaystyle h(w)} כדי לקבוע את שייכותה ל-L (וזה יהיה אופן פעילות {\displaystyle A'}). אז אם {\displaystyle w=\sigma \_{1}\sigma \_{2}\dots \sigma \_{n}}, נרצה לבדוק האם {\displaystyle h(w)=h(\sigma \_{1})h(\sigma \_{2})\dots h(\sigma \_{n})\in L}. נרצה אם כן, שכאשר האוטומט {\displaystyle A'} נמצא במצב {\displaystyle q\in Q} ומקבל אות קלט {\displaystyle \sigma \in \Sigma }, הוא "יפעיל" סימולציה של A מהמצב q עם מילת הקלט {\displaystyle h(\sigma )}.

מהמוטיבציה לעיל, נגדיר את האוטומט הסופי דטרמיניסטי {\displaystyle A'=(\Sigma ,Q,q\_{0},F,\delta ')} עם פונקציית המעברים {\displaystyle \delta '(q,\sigma ):={\hat {\delta }}(q,h(\sigma ))} לכל {\displaystyle q\in Q} ו-{\displaystyle \sigma \in \Sigma }. כרגיל במשפטים כאלו, יהיה נוח להוכיח טענת עזר:

**טענת עזר:** מתקיים {\displaystyle {\hat {\delta '}}(q\_{0},w)={\hat {\delta }}(q\_{0},h(w))} לכל {\displaystyle w\in \Sigma ^{\*}}.

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

בסיס: אם {\displaystyle w=\varepsilon } נקבל כי

{\displaystyle {\hat {\delta '}}(q\_{0},\varepsilon )=q\_{0}={\hat {\delta }}(q\_{0},\varepsilon )=\delta (q\_{0},h(\varepsilon ))}

מהגדרת פונקציית המעברים המורחבת וכן מהגדרת ההומומורפיזם. למילים באורך 1 הטענה מתקיימת ישירות מהגדרתנו ל-{\displaystyle \delta '}.

צעד: נניח נכונות למילים באורך n ונראה נכונות למילים באורך n+1. תהי {\displaystyle w=u\sigma \in \Sigma ^{\*}} כאשר {\displaystyle |w|=n}. אז

{\displaystyle {\hat {\delta '}}(q\_{0},w)={\hat {\delta '}}(q\_{0},u\sigma )=\delta '({\hat {\delta '}}(q\_{0},u),\sigma )=\delta '({\hat {\delta }}(q\_{0},h(u)),\sigma )={\hat {\delta }}({\hat {\delta }}(q\_{0},h(u)),h(\sigma ))={\hat {\delta }}(q\_{0},h(u)h(\sigma ))={\hat {\delta }}(q\_{0},h(u\sigma ))={\hat {\delta }}(q\_{0},h(w))}

(הסבר למעברים: מעבר (2) הוא מהגדרת פונקציית המעברים המורחבת; מעבר (3) הוא מהנחת האינדוקציה על u; מעבר (4) הוא מהגדרת {\displaystyle \delta '}; מעבר (5) הוא מהטענה {\displaystyle {\hat {\delta }}({\hat {\delta }}(q,w\_{1}),w\_{2})={\hat {\delta }}(q,w\_{1}w\_{2})}; מעבר (6) הוא מהגדרת ההומומורפיזם). {\displaystyle \blacksquare }

נמשיך בהוכחה. נראה ש-{\displaystyle L(A')=h^{-1}(L)}. אכן

{\displaystyle w\in L(A')\Leftrightarrow {\hat {\delta '}}(q\_{0},w)\in F\Leftrightarrow {\hat {\delta }}(q\_{0},h(w))\in F\Leftrightarrow h(w)\in L\Leftrightarrow w\in h^{-1}(L)}

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

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

***משפט:*** יהיו {\displaystyle h\colon \Sigma \to \Delta ^{\*}} הומומורפיזם ו-{\displaystyle L\subseteq \Delta ^{\*}} שפה חסרת-הקשר. אז גם {\displaystyle h^{-1}(L)} חסרת-הקשר.

***רעיון ההוכחה:*** לא ניתן את ההוכחה המלאה, אך ניתן את הרעיון הכללי ובנייה. תהי {\displaystyle L\subseteq \Delta ^{\*}} שפה חסרת הקשר. אז קיים אוטומט מחסנית {\displaystyle M=(Q,\Sigma ,\Gamma ,\delta ,q\_{0},\dashv ,F)} שמקבל אותה באמצעות מצבים מקבלים (כלומר {\displaystyle L\_{f}(M)=L}). נבנה אוטומט מחסנית M' שמקבל את {\displaystyle h^{-1}(L)}, ולכן היא חסרת-הקשר. חשוב לשים לב שהאוטומט לא יכול לרוקן יותר מאות אחת מראש המחסנית בצעד אחד. לכן, בהינתן אות קלט {\displaystyle \sigma \in \Sigma }, M' לא תמיד יוכל לסמלץ את M עבור מילת הקלט {\displaystyle h(\sigma )} בצעד אחד. ואמנם, השימוש במסעי-\varepsilon  יבוא לעזרנו. כלומר, האוטומט M' יקרא אות קלט {\displaystyle \sigma \in \Sigma }, יסמלץ את M עם מילת הקלט {\displaystyle h(\sigma )} בעזרת מסעי-\varepsilon , ואז יקרא עוד אות קלט ויפעל באופן זהה, עד אשר יסיים את קריאת המילה, ואז יגיע למצב מקבל.

נגדיר את מצבי M' להיות {\displaystyle Q':=Q\times \Delta '} כאשר {\displaystyle \Delta '} הוא אוסף כל המילים מעל \Delta  באורך לכל היותר {\displaystyle \max\{|h(\sigma )|:\sigma \in \Sigma \}}, כלומר האורך המקסימלי שייתכן לתת מילת קלט כלשהו ש-M' יצטרך לסמלץ. כלומר, זוג {\displaystyle (q,w)\in Q'} מייצג מצב q בו M נמצא, ויתרת מילה w שעליו לקרוא. המצב ההתחלתי יהיה {\displaystyle q\_{0}':=(q\_{0},\varepsilon )} (כי תחילה אין מילת קלט שעל M לקרוא). המצבים המקבלים יהיו {\displaystyle F':=F\times \{\varepsilon \}} כי על M להגיע למצב מקבל, ואין עוד יתרת מילה שעליו לקרוא. אם כן, {\displaystyle M'=(Q',\Sigma ,\Gamma ,\delta ',(q\_{0},\varepsilon ),\dashv ,F\times \{\varepsilon \})}.

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

1. קריאת אות קלט על ידי M':   

{\displaystyle \delta '((q,\varepsilon ),\sigma ,Z):=\{((q,h(\sigma )),Z)\}} לכל {\displaystyle q\in Q,\sigma \in \Sigma ,Z\in \Gamma }.

2. סימולציית M - מסעי-\varepsilon :   

{\displaystyle \delta '((q,\tau w),\varepsilon ,Z):=\{((p,w),\alpha ):(p,\alpha )\in \delta (q,\tau ,Z)\}} לכל {\displaystyle q\in Q,Z\in \Gamma ,\tau \in \Delta \cup \{\varepsilon \},w\in \Sigma ^{\*}} (אם {\displaystyle \tau \in \Delta } מסמלצים מעבר "רגיל" של M, ואם {\displaystyle \tau =\varepsilon } מסמלצים מסע-\varepsilon  של M).

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

**טענת עזר:** לכל {\displaystyle q,p\in Q,\,w\in \Sigma ^{\*},\,\alpha ,\beta \in \Gamma ^{\*}}, אם {\displaystyle (q,h(w),\alpha )\vdash \_{M}^{\*}(p,\varepsilon ,\beta )} אז {\displaystyle ((q,\varepsilon ),w,\alpha )\vdash \_{M'}^{\*}((p,\varepsilon ),\varepsilon ,\beta )}.

כעת, כל שנותר להראות הוא ש-{\displaystyle L\_{f}(M')=h^{-1}(L)}.

לקריאה נוספת
------------

* שמואל זקס ונסים פרנסיז, **אוטומטים ושפות פורמליות**, האוניברסיטה הפתוחה, 2001
* שפות רגולריות - תכונות סגור (חלק ב') בבלוג "לא מדויק"

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