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

תוכן שנמחק תוכן שנוסף
Atavory (שיחה | תרומות)
Atavory (שיחה | תרומות)
שורה 22:
 
===שקילות למודל הכללי ===
כפי שנאמר לעיל, המודל של הכרעת שפות שקול למודל הכללי. נניח כי מכונה M מחשבת פונקציה (חלקית או מלאה) מסויימת <math>f: \Sigma^* \to \Sigma^*</math>. כעת נגדיר אתה השפה <math>L_f = \{ (x,f(x)) \mid x\in \Sigma^*\}</math>. קל לראות כי קיימת מכונה <math>M'</math> שעונה "כן" או "לא" עבור כל קלט עליו f מוגדרת, ואינה עוצרת על כל קלט עליו f אינה מוגדרת: <math>M'</math> על הקלט <math>(x,y)</math> תריץ את <math>M</math> על הקלט x ותשווה את התוצאה ל-y. אם התוצאה שווה, <math>M'</math> תקבל, ואחרת תדחה.
 
כפי שנאמר לעיל, המודל של הכרעת שפות שקול למודל הכללי. נניח פונקציה (חלקית או מלאה) מסויימת <math>f: \Sigma^* \to \Sigma^*</math>. נגדיר שפה <math>f' = \{ (x, f(x)) \mid x\in \text{dom}(f)\}</math>. נראה שאמ"ם יש מכונה M המחשבת את f, אז יש מכונה <math>M'</math> המכריעה האם
הכיוון השני טריוויאלי, מכיוון שהכרעת שפה היא מקרה פרטי של חישוב פונקציה כללית.
<math>(x, y)</math>
(
<math>x \in \text{dom}(f)</math>)
שייכת ל
<math>f'</math>.
 
נניח שקיימת המכונה M, ובעזרתה נבנה את המכונה
[[קטגוריה:תורת החישוביות]]
<math>M'</math>.
בהנתן הקלט x, המכונה <math>M'</math> תריץ את M על x. אם M עוצרת עם תוצאה z, המכונה
<math>M'</math>
תבדוק האם
<math>y = z</math>,
ובהתאם לתשובה תחליט האם
<math>(x, y) \in f'</math>.
(אם M איננה עוצרת על x, אז
<math>M'</math>
לא תעצור גם כן.)
 
נניח שקיימת המכונה
<math>M'</math>
, ובעזרתה נבנה את המכונה M. המכונה תעבוד בעזרת מספר לולאות מקוננות (כל אחת יכולה להשתמש בסרט אחד או יותר, לפי מה שכבר ראינו).
#בלולאה החיצונית ביותר, המכונה תעדכן מונה מספרי רץ <math>n = 0, 1, 2,\ldots</math>
#בלולה פנימית יותר, המכונה תייצר את סדרת המחרוזות <math>\{z | z \in \Sigma^*, |z| \leq n\}</math>.
# בלולאה פנימית יותר, המכונה תריץ n צעדים של <math>M'</math> על <math>(x, z)</math>.
אם בשלב כלשהו של הלולאה הפנימית ביותר
<math>M'</math>
תעצור על <math>(x, z)</math> בתשובה חיובית, אז המכונה תחזיר את z כתשובה שלה לקלט x.