חומרי לימוד - מדעי המחשב

‫ט"ז‪/‬טבת‪/‬תשע"ה‬
‫שפות רגולריות‬
‫שפה שניתן לבנות עבורה אוטומט סופי כלשהו המקבל‬
‫אותה‪ ,‬ורק אותה‪ ,‬נקראת שפה רגולרית‪.‬‬
‫שפות רגולריות ‪ -‬סיכום‬
‫‪1‬‬
‫שפות רגולריות וסופיות‬
‫‪‬‬
‫‪‬‬
‫כלל סופיות ורגולריות‬
‫שפה סופית ‪ ‬שפה רגולרית‪.‬‬
‫(הכיוון ההפוך אינו נכון‪ ,‬שפה רגולרית ‪ ‬לא בהכרח סופית)‬
‫שפות רגולריות ‪ -‬סיכום‬
‫‪2‬‬
‫‪1‬‬
‫ט"ז‪/‬טבת‪/‬תשע"ה‬
‫רגולריות של שפות – הוכחה‬
‫‪‬‬
‫איך מוכיחים באופן מלא ששפה היא‪:‬‬
‫‪‬‬
‫רגולרית (אחת מהדרכים‪ ,‬לפי סדר עדיפות) –‬
‫א‪-‬‬
‫ב‪-‬‬
‫ג‪-‬‬
‫‪‬‬
‫הוכחה שהשפה סופית (מספר תווים מקסימלי למילה) – כמובן‪ ,‬רק‬
‫עבור שפות סופיות‪.‬‬
‫חלוקת השפה לשפות "קטנות" יותר (ציון במפורש מהן השפות)‬
‫שפעולות עליהן יוצרות את השפה המקורית (להראות במפורש)‪.‬‬
‫על השפות "קטנות" יותר עדיין יש להוכיח שרגולריות ע"י א'‪ ,‬ב'‪ ,‬או ג'‪.‬‬
‫בניית אוטומט סופי (מלא‪/‬לא מלא דטרמיניסטי‪/‬לא דטרמיניסטי)‬
‫המקבל את השפה‪.‬‬
‫לא רגולרית – קצת ארוך‪ ,‬תבנית בעמוד ‪ 57 -‬בספר מודלים‬
‫(מבט לחלונות)‪.‬‬
‫שפות רגולריות ‪ -‬סיכום‬
‫‪3‬‬
‫רגולריות של שפות – נימוק‬
‫‪‬‬
‫איך מנמקים (באופן לא מלא) ששפה היא‪:‬‬
‫לא רגולרית – ע"י הסבר שישנה תלות אינסופית בין חלקי‬
‫השפה‪ .‬חייבים להראות בדיוק מהי התלות‪.‬‬
‫למשל – עבור השפה –‬
‫א"ב – }‪L1 = {anbn | n > 0}, {a, b‬‬
‫השפה אינה רגולרית‪ ,‬כיוון שישנה תלות אינסופית בין מספר‬
‫ה‪ a-‬בתחילת המילה למספר ה‪ b-‬בסופה כך שהמספר חייב‬
‫להיות זהה‪.‬‬
‫‪‬‬
‫שימו לב – נימוק ≠ הוכחה‬
‫שפות רגולריות ‪ -‬סיכום‬
‫‪4‬‬
‫‪2‬‬
‫ט"ז‪/‬טבת‪/‬תשע"ה‬
‫רגולריות של שפות – נימוק‬
‫‪‬‬
‫איך מנמקים (באופן לא מלא) ששפה היא‪:‬‬
‫רגולרית – ע"י הסבר שמראה שאין תלות אינסופית בין חלקי‬
‫השפה‪.‬‬
‫למשל – עבור השפה –‬
‫א"ב – }‪L2 = {anbm | n, m > 0}, {a, b‬‬
‫השפה רגולרית‪ ,‬כיוון שאין תלות אינסופית בין חלקי השפה‪.‬‬
‫‪‬‬
‫שימו לב – נימוק ≠ הוכחה‬
‫שפות רגולריות ‪ -‬סיכום‬
‫‪5‬‬
‫שפות רגולריות – סגירות‬
‫‪‬‬
‫סגירות ‪ -‬שומר על התכונה ‪ -‬לעניין רגולריות‬
‫הכלה (חלקיות)‬
‫• כל המילים בשפה המוכלת גם בשפה המכילה‬
‫• אין סגירות‬
‫• הסבר ‪ L1 -‬רגולרית‪ L1  L ,‬או ‪ L1  L‬עדיין לא ידוע כלום לגבי ‪L‬‬
‫איחוד (או)‬
‫• מספיק שעונה לתנאי אחת מהשפות‬
‫• יש סגירות‬
‫• הסבר ‪ L1, L2 -‬רגולריות ‪ L  L1  L2 = L ‬רגולרית‬
‫חיתוך (וגם)‬
‫• עונה לכל תנאי השפות‬
‫• יש סגירות‬
‫• הסבר ‪ L1, L2 -‬רגולריות ‪ L  L1  L2 = L ‬רגולרית‬
‫שפות רגולריות ‪ -‬סיכום‬
‫‪6‬‬
‫‪3‬‬
‫ט"ז‪/‬טבת‪/‬תשע"ה‬
‫שפות רגולריות – סגירות‬
‫‪‬‬
‫סגירות ‪ -‬שומר על התכונה ‪ -‬לעניין רגולריות‬
‫משלים‬
‫הופכי‬
‫‪Reverse‬‬
‫שרשור‬
‫• לא בשפה המקורית‬
‫• יש סגירות‬
‫‪ L‬רגולרית‬
‫• הסבר ‪ L -‬רגולרית ‪¯ ‬‬
‫• כל המילים הפוכות‬
‫• יש סגירות‬
‫• הסבר ‪ L -‬רגולרית ‪ R(L) ‬רגולרית‬
‫• כל המילים מהשפה הראשונה משורשות לכל המילים בשנייה‬
‫• יש סגירות‬
‫• הסבר ‪ L1, L2 -‬רגולריות ‪ L  L1  L2 = L ‬רגולרית‬
‫שפות רגולריות ‪ -‬סיכום‬
‫‪7‬‬
‫שפות רגולריות – סגירות‬
‫•אם השאלה היא רק האם השפה רגולרית‪ ,‬מומלץ לבדוק‬
‫האם ניתן לחלק אותה לרכיבים ולהיעזר בטבלת הסגירות‬
‫לעניין רגולריות‪.‬‬
‫שפות רגולריות ‪ -‬סיכום‬
‫‪8‬‬
‫‪4‬‬
‫ט"ז‪/‬טבת‪/‬תשע"ה‬
‫שיטות לבניית אוטומטים לשפות מורכבות‬
‫• ללא קשר ישיר לנושא הרגולריות (קשור רק להוכחות כללי‬
‫הסגירות אותן אתם לא נדרשים להוכיח)‪ ,‬בשקפים הבאים‬
‫מתוארות השיטות לבניית אוטומטים לשפות מורכבות‪.‬‬
‫יכול לעזור בבניית אוטומט‪.‬‬
‫שפות רגולריות ‪ -‬סיכום‬
‫‪9‬‬
‫בניית אוטומט עבור שפת המשלים‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫אם האוטומט אינו מלא – יש להופכו למלא‪.‬‬
‫הפיכת כל מצב מקבל באוטומט המקורי‪ ,‬למצב שאינו‬
‫מקבל באוטומט החדש‪.‬‬
‫הפיכת כל מצב שאינו מקבל באוטומט המקורי‪ ,‬למצב‬
‫מקבל באוטומט החדש‪.‬‬
‫שפות רגולריות ‪ -‬סיכום‬
‫‪10‬‬
‫‪5‬‬
‫ט"ז‪/‬טבת‪/‬תשע"ה‬
‫בניית אוטומט עבור שפת ההיפוך (‪)Reverse‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫הפיכת כיוון כל החצים‪.‬‬
‫המצב ההתחלתי הופך למצב מקבל‪.‬‬
‫קבוצת המצבים המקבלים הופכת לקבוצת המצבים התחלתים‪.‬‬
‫אם קבוצת המצבים ההתחלתיים כוללת יותר מאשר מצב אחד‪.‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫יש ליצור מצב חדש ‪ -‬רק הוא יהיה מצב התחלתי‪.‬‬
‫יש לשחזר כל המעברים שיצאו מקודם ממצבים שהיו התחלתיים‪.‬‬
‫כלומר‪ ,‬יש לשחזר כל אחת מהאפשרויות לעבור מהמצב שהיה התחלתי‬
‫קודם למצבים אחרים‪ ,‬כך שניתן יהיה לעבור מהמצב ההתחלתי החדש‬
‫לכל המצבים שניתן היה להגיע אליהם מקודם עם אותו קלט‪.‬‬
‫יתכן שעבור אוטומט דטרמיניסטי‪ ,‬יתקבל אחרי התהליך אחד‬
‫שאינו דטרמיניסטי‪.‬‬
‫שפות רגולריות ‪ -‬סיכום‬
‫‪11‬‬
‫בניית אוטומט עבור שפת השרשור‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫המצב ההתחלתי של השפה הראשונה הוא המצב‬
‫ההתחלתי של האוטומט החדש‪.‬‬
‫קבוצת המצבים המקבלים של השפה השניה היא קבוצת‬
‫המצבים המקבלים של האוטומט החדש‪.‬‬
‫מכל מצב שהיה מצב מקבל בשפה הראשונה‪ ,‬יש ליצור‬
‫מעברים חדשים‪ ,‬כך שכל המעברים שיצאו ממנו יוכלו‬
‫להגיע אל המצב שהיה המצב התחלתי בשפה השניה‪.‬‬
‫כך שניתן יהיה לקרוא את כל מילות השרשור מהמצב‬
‫ההתחלתי החדש‪ ,‬ועד למצבים המקבלים החדשים‪.‬‬
‫שפות רגולריות ‪ -‬סיכום‬
‫‪12‬‬
‫‪6‬‬
‫ט"ז‪/‬טבת‪/‬תשע"ה‬
‫בניית אוטומט עבור שפת האיחוד (דרך ב')‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫יצירת מצב התחלתי חדש‪.‬‬
‫באופן לא דטרמיניסטי‪ ,‬יש לשחזר עבור כל אחד משני‬
‫המצבים ההתחלתיים של שני האוטומטים את כל‬
‫המעברים שיצאו מהם‪.‬‬
‫כלומר‪ ,‬יש לשחזר כל אחת מהאפשרויות המעבר מהמצב‬
‫שהיה התחלתי קודם (בכל אחד משני האוטומטים)‬
‫לשכניו‪ ,‬כך שניתן יהיה לעבור מהמצב ההתחלתי החדש‬
‫לכל המצבים שניתן היה להגיע אליהם מקודם (בכל אחד‬
‫משני האוטומטים) עבור אותה מילה‪.‬‬
‫האוטומט החדש שיתקבל אחרי התהליך יהיה כמובן לא‬
‫דטרמיניסטי‪.‬‬
‫שפות רגולריות ‪ -‬סיכום‬
‫‪13‬‬
‫‪7‬‬