שפות רגולריות

ראשית נזכיר כמה תכונות הנוגעות לשפות רגולריות.
בכלל, שפה L תקרא רגולרית אם קיים אוטומט סופי A המקבל אותה.

  1. הדוגמה הפשוטה ביותר לשפה רגולרית היא השפה הריקה. כיוון שכל אוטומט סופי דטרמיניסטי חסר מצבים מקבלים יתאר אותה.
  2. גם השפה המכילה את המילה הריקה בלבד היא רגולרית (כמו שאמרנו מספיק אוטומט עם מצב התחלתי שהוא גם מקבל).

סגירויות

השפות הרגולריות סגורות ל

תזכורת מה זה prefix ,suffix , postfix :

prefix(L)={xΣ | yΣ:xyL}suffix(L)={yΣ | xΣ:xyL}sub(L)={yΣ | x,zΣ:xyzL}

ביטוי רגולרי

דרך נוספת לתאר שפה רגולרית. מחרוזת תהיה ביטוי ריגולרי אם היא אחת מהצורות הבאות

בסיס האינדוקצייה

פעולות האינדוקצייה בהינתן r1,r2 ביטויים רגולרים

סדר פעולות :

  1. סוגריים
  2. כוכבית
  3. שרשור
  4. איחוד
  5. משמאל לימין

Pasted image 20220710120803.png

שקילות
L רגולרית אם ורק אם ישנו ביטוי רגולרי r כך ש L=L(r) .
ההוכחה של זה בכיוון הראשון (שישנו ביטוי רגולרי r ...) מבוצעת באינדוקצייה על אורך הביטוי r .
ההוכחה בכיוון השני קצת יותר מורכבת :

לשם כך צריך לבנות אוטומט סופי מוכלל שזה אוטומט סופי המאפשר שהמעברים יהיו ביטויים רגולרים. (זה אפשרי באוטומט סופי לא דטרמינסטי).

הדרישות לאוטומט סופי מוכלל :

  1. מצב מקבל יחיד בלי יציאות ומצב התחלתי יחיד בלי יציאות.
  2. קשת בין כל שני קודקודים, כולל קשתות עצמיות, המסומנות בביטויים רגולרים.

האלגוריתם המרה יעבוד באופן הבא

למת הניפוח לשפות רגולריות

אם L שפה רגולרית אז קיים קבוע N כך לשכל wL שמקיימת #wN קיימת חלוקה של w לתתי המילים x,y,zΣ כך ש w=xyz ומתקיימים התנאים:

  1. |y|>0
  2. |xy|N
  3. iN:xyizL

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

Pasted image 20220710164516.png

ניתן להשתמש גם בתכונות הסגירות כדי להפריך ששפה אינה רגולרית.