תורת החישוביות/כריעות שפות/משפט רייס: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
Atavory (שיחה | תרומות)
Gran (שיחה | תרומות)
שורה 38:
לכל תכונה לא טריוויאלית S של שפות ב־RE מתקיים:{{רווח קשיח|10}} <math>L_S \notin R</math>{{רווח קשיח|10}}}}
{{הוכחה|1=
נראה כי <math>L_S \notin R</math> על־ידי הרדוקציה <math>\text{HP} \le L_S</math>. מכיוון שראינו ש־<math>\text{HP}\notin R</math> נובע המשפט.
 
בלי הגבלת הכלליות, נניח כי ה[[תורתאוטומטים החישוביות/כריעותושפות פורמליות/שפות פורמליות|שפה הריקה]] אינה ב־<math>S</math> (כלומר
נראה כי <math>L_S \notin R</math> על־ידי הרדוקציה <math>\text{HP} \le L_S</math>. כלומר, נניח על דרך השלילה <math>L_S \in R</math>, ונראה כי אפשר להכריע לכל מ"ט <math>M</math> וקלט <math>x</math>, האם <math>M</math> עוצרת על <math>x</math> ((מה ש[[תורת_החישוביות/כריעות_שפות/שפות_שאינן_כריעות#שפות_שאינן_כריעות|ידוע שאינו נכון]]).
 
בלי הגבלת הכלליות, נניח כי ה[[תורת החישוביות/כריעות שפות|שפה הריקה]] אינה ב־<math>S</math> (כלומר
<math>\emptyset \notin S</math>).
אחרת, פשוט נוכיח את המשפט לגבי התכונה המשלימה <math>\overline S</math> -
שורה 47 ⟵ 46:
 
 
היות ש-ש־<math>S</math> אינה טריוויאלית, בהכרח קיימת שפה <math>L_0</math> כך ש־<math>L_0 \in S</math>. מכיוון ש־<math>S</math> היא קבוצה של שפות ב־<math>RE</math>, גם <math>L_0 \in RE</math>, ונניח כי <math>M_0</math> היא המ"טמ״ט המקבלת אותה.
 
נגדיר את הרדוקציה ע"י מ"ט <math>M_x</math>f(\langle M \rangle, הפועלתx) כך.= בנהתן\langle קלטM_x <math>w\rangle</math>, המ"טבאופן <math>M_x</math>:הבא.
בהנתן קלט <math>w</math>, המ"ט <math>M_x</math>:
# מריצה את <math>M</math> על <math>x</math> (ומתעלמת מהתוצאה, אם יש), ואז
# מריצה את <math>M_0</math> על <math>w</math>, ומקבלת/דוחה כמותה
(הערה: אם הקלט אינו <math>(\langle M \rangle, x)</math> פלט הפונקציה f מוגדר בתור מ״ט הדוחה כל קלט (באופן זה השפה של מכונה הפלט הוא <math>L(M)=\emptyset \notin S</math>)
 
כעת נראה ש־f מקיימת את תכונות הרדוקציה כפי שהגדרנו בפרק [[תורת החישוביות/כריעות שפות/רדוקציה|רדוקציה]]:
 
#f פונקציה מלאה: הגדרנו את f לכל קלט אפשרי
מהנחתנו בשלילה ש-<math>L_S \in R</math>, נובע שיש מ"ט רקורסיבית <math>Q</math> המכריעה זאת. כדי להכריע האם <math>M</math> עוצרת על <math>x</math>, נשאל את <math>Q</math> האם <math>M_x \in L_S</math>:
# f פונקציה ברת־חישוב: ייצור <math>\langle M_X \rangle</math> מתוך המחרוזת <math>(\langle M \rangle, x)</math> ומתוך המחרוזת הקבועה <math>\langle M_0\rangle</math> קל לביצוע ע״י מ״ט שצריכה רק לשנות מעט את קידודי המכונות כדי שירוצו אחת אחר השניה...
# אם <math>M</math> איננה עוצרת על <math>x</math>, אז גם <math>M_x</math> איננה עוצרת על אף <math>w</math>. אם כך, <math>L(M_x) = \emptyset \notin S</math>, ו-<math>Q</math> תכריע ש-<math>M_x \notin L_S</math>.
# f רדוקציה תקפה:
# אם <math>M</math> עוצרת על x{{כ}}, אז <math>M_X</math> מתנהגת בדיוק כמו <math>M_0</math>{{כ}}. אם כך, <math>L(M_x)=L(M_0)\in S</math>, ו-<math>Q</math> תכריע ש-<math>M_x \in L_S</math>.
#* אם <math>M</math> איננהלא עוצרת על <math>x</math>, אז גם <math>M_x</math> איננהלא עוצרת על אף <math>w</math>. אם כך, <math>L(M_x) = \emptyset \notin S</math>, ו-<math>Q</math> תכריע ש-<math>M_x \notin L_S</math>.
 
#* אם <math>M</math> עוצרת על x{{כ}}, אז <math>M_X</math> מתנהגת בדיוק כמו <math>M_0</math>{{כ}}. אם כך, <math>L(M_x)=L(M_0)\in S</math>, ו-<math>Q</math> תכריע ש-<math>M_x \in L_S</math>.
נשים לב שהרדוקציה אכן ברת חישוב - בהנתן <math>(\langle M \rangle, x)</math>, קל לבנות פונקציה המשרשרת את שתי המכונות ויוצרת את תיאור <math>M_x</math>. כמו כן, לפי הנחתנו בשלילה, הקריאה ל<math>Q</math> מסתיימת גם כן.
#: לפיכך
#:: אם <math>(\langle M \rangle, x)\in\text{HP}</math> אז M עוצרת על x, ומתקיים <math>L(M_x)=L_0\in S</math>, ולכן <math>\langle M_x\rangle \in L_S</math>
#:: אם <math>(\langle M \rangle, x)\notin\text{HP}</math> אז M לא עוצרת על x, ומתקיים <math>L(M_x)=\emptyset\notin S</math>, ולכן <math>\langle M_x\rangle \notin L_S</math>
}}