משפט מייהיל-נרוד
בתורת השפות הפורמליות, משפט מייהיל-נרוד הוא משפט אשר מספק אפיון של מחלקת השפות הרגולריות ומסייע להבנת המבנה של האוטומט המינימלי אשר מקבל אותן. המשפט נקרא על שם אניל נרוד וג'ון מייהיל אשר הוכיחו אותו בשנת 1958.
ניסוח פורמלי
המשפט מתבסס על יחס שקילות המוגדר בצורה הבאה: בהינתן שפה מעל אלפבית , היחס עיבוד הנוסחה נכשל (שגיאת המרה. השרת ("https://en.wikipedia.org/api/rest_") השיב: "Cannot get mml. Server problem."): {\displaystyle \ R_{L}} מוגדר מעל בצורה הבאה: אם ורק אם לכל עיבוד הנוסחה נכשל (שגיאת המרה. השרת ("https://en.wikipedia.org/api/rest_") השיב: "Cannot get mml. Server problem."): {\displaystyle \ z\in \Sigma ^{*}} המילים שייכות שתיהן לשפה או ששתיהן אינן שייכות לשפה . מילה שאינה מקיימת תנאי זה נקראת מילה המפרידה בין .
משפט נרוד אומר כי מספר המצבים המינימלי באוטומט סופי דטרמיניסטי אשר מקבל את הוא כמספר מחלקות השקילות של עיבוד הנוסחה נכשל (שגיאת המרה. השרת ("https://en.wikipedia.org/api/rest_") השיב: "Cannot get mml. Server problem."): {\displaystyle \ R_{L}} . בפרט, אם קיימות אינסוף מחלקות שקילות לא קיים אוטומט שכזה, ולכן השפה אינה רגולרית. המשפט גם מתאר את מבנה האוטומט המינימלי המקבל את השפה במקרה שמספר מחלקות השקילות הוא סופי, ומספק דרך קונסטרוקטיבית לבנות אוטומט כזה במקרה שמחלקות השקילות ידועות לנו: מצבי האוטומט יהיו מחלקות השקילות (כשהמצב ההתחלתי הוא ), המצבים המקבלים יהיו מחלקות שמיוצגות בידי מילים השייכות לשפה ופונקציית המעברים של האוטומט תוגדר על ידי עיבוד הנוסחה נכשל (שגיאת המרה. השרת ("https://en.wikipedia.org/api/rest_") השיב: "Cannot get mml. Server problem."): {\displaystyle \ \delta (\left[x\right],a)=\left[xa\right]} (קל להראות כי פונקציה זו מוגדרת היטב).
דוגמאות
שפה רגולרית
עבור שפת כל המילים שאורכן זוגי (כולל אורך אפס), קיימות עבור היחס עיבוד הנוסחה נכשל (שגיאת המרה. השרת ("https://en.wikipedia.org/api/rest_") השיב: "Cannot get mml. Server problem."): {\displaystyle \ R_{L}} בדיוק שתי מחלקות שקילות - מחלקה אחת היא קבוצת כל המילים מאורך זוגי, והמחלקה השנייה היא קבוצת כל המילים מאורך אי זוגי. כדי לראות זאת די לשים לב כי אם הזוגיות של אורך המילים זהה, היא נותרת כזו גם כאשר מוסיפים לשתיהן סיפא כלשהי. לכן, עבור כל שתי מילים בעלות זוגיות זהה מתקיים היחס עיבוד הנוסחה נכשל (שגיאת המרה. השרת ("https://en.wikipedia.org/api/rest_") השיב: "Cannot get mml. Server problem."): {\displaystyle \ R_{L}} . (ועבור מילים בעלות זוגיות שונה, לא מתקיים היחס).
מכאן ניתן גם ללמוד שהאוטומט המינימלי שמקבל את השפה מכיל שני מצבים, שהראשון שבהם הוא מקבל, והאוטומט מחליף מצב עם כל אות שהוא קורא.
שפה שאינה רגולרית
ישנן מספר הוכחות לכך שהשפה עיבוד הנוסחה נכשל (שגיאת המרה. השרת ("https://en.wikipedia.org/api/rest_") השיב: "Cannot get mml. Server problem."): {\displaystyle \ L=\left\{a^{n}b^{n}|n\in \mathbb {N} \right\}} אינה רגולרית. הוכחה המתבססת על משפט נרוד מראה כי עבור היחס עיבוד הנוסחה נכשל (שגיאת המרה. השרת ("https://en.wikipedia.org/api/rest_") השיב: "Cannot get mml. Server problem."): {\displaystyle \ R_{L}} קיימות אינסוף מחלקות שקילות. לשם כך אין צורך למצוא את כל מחלקות השקילות או לכתוב אותן במפורש, אלא די להציג קבוצה אינסופית של מילים כך שאין שתי מילים מתוכה הנמצאות באותה מחלקת שקילות.
בהקשר של השפה הנוכחית, קבוצה כזו היא למשל . כדי לראות זאת די להראות כי עבור עיבוד הנוסחה נכשל (שגיאת המרה. השרת ("https://en.wikipedia.org/api/rest_") השיב: "Cannot get mml. Server problem."): {\displaystyle \ m,n} שרירותיים השונים זה מזה, ו-עיבוד הנוסחה נכשל (שגיאת המרה. השרת ("https://en.wikipedia.org/api/rest_") השיב: "Cannot get mml. Server problem."): {\displaystyle \ a^{m}} אינם שייכים לאותה מחלקת שקילות - כלומר, קיימת מילה שמפרידה בינן. דוגמה למילה שכזו היא , שכן עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ a^nz=a^nb^n\isin L} ואילו עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ a^mz=a^mb^n\notin L} .
רעיון ההוכחה
אם מספר מחלקות השקילות של עיבוד הנוסחה נכשל (שגיאת המרה. השרת ("https://en.wikipedia.org/api/rest_") השיב: "Cannot get mml. Server problem."): {\displaystyle \ R_{L}} הוא סופי, האוטומט שהוצג לעיל שמצביו הם מחלקות השקילות של עיבוד הנוסחה נכשל (שגיאת המרה. השרת ("https://en.wikipedia.org/api/rest_") השיב: "Cannot get mml. Server problem."): {\displaystyle \ R_{L}} מקבל את . כדי לראות זאת די להוכיח באינדוקציה כי לאחר קריאת המילה עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ w} האוטומט יגיע למצב עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ \left[w\right]} . מכיוון שהמצבים המקבלים הוגדרו בתור המחלקות שמיוצגות על ידי המילים ששייכות לשפה, ומכיוון שאם במחלקה יש מילה השייכת לשפה כל המילים בה שייכות לשפה, הדבר מבטיח את נכונות האוטומט.
מינימליות מספר המצבים של האוטומט הזה מתבססת על שימוש ביחס שקילות נוסף. בהינתן אוטומט כלשהו , היחס עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ R_A} מתקיים עבור כל שתי מילים שקריאתן מביאה את האוטומט לאותו המצב. מספר מצבי האוטומט הוא לפחות כמספר מחלקות השקילות של היחס עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ R_A} , כי לכל מצב שניתן להגיע אליו באוטומט ניתן להתאים מחלקת שקילות שנציגתה היא מילה שמביאה את האוטומט למצב זה.
אם היא שפה רגולרית ו- אוטומט כלשהו עבורה, ניתן להראות כי היחס עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ R_A} מעדן את היחס עיבוד הנוסחה נכשל (שגיאת המרה. השרת ("https://en.wikipedia.org/api/rest_") השיב: "Cannot get mml. Server problem."): {\displaystyle \ R_{L}} , כלומר עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ R_A\subseteq R_L} . מכך נובע שמספר מחלקות השקילות של עיבוד הנוסחה נכשל (שגיאת המרה. השרת ("https://en.wikipedia.org/api/rest_") השיב: "Cannot get mml. Server problem."): {\displaystyle \ R_{L}} קטן ממספר מחלקות השקילות של עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ R_A} - בפרט, הוא סופי, ומספר מצבי האוטומט שמושרה על ידי עיבוד הנוסחה נכשל (שגיאת המרה. השרת ("https://en.wikipedia.org/api/rest_") השיב: "Cannot get mml. Server problem."): {\displaystyle \ R_{L}} קטן או שווה למספר מצבי האוטומט .
האבחנה לפיה עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ R_A\subseteq R_L} נובעת מכך שאם עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ xR_A y} אז לאחר קריאת שתי המילים יגיע האוטומט לאותו מצב, ועל כן לכל סיפא שקורא האוטומט לאחר מכן הוא יגיע גם כן לאותו מצב. כלומר, האוטומט יחזיר תשובה זהה על עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ xz} ועל עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ yz} לכל , ועל כן .
לקריאה נוספת
- שמואל זקס ונסים פרנסיז, אוטומטים ושפות פורמליות א, האוניברסיטה הפתוחה, 2000 (הספר במיזם פא"ר)
- שמואל זקס ונסים פרנסיז, אוטומטים ושפות פורמליות ב, האוניברסיטה הפתוחה, 2000 (הספר במיזם פא"ר)
קישורים חיצוניים
- גדי אלכסנדרוביץ', משפט מייהיל-נרוד, באתר "לא מדויק"