עידן דויטש u.multinet.co.il מודלים חישוביים – פתרון תרגיל 2 .1 הוכח את הגרסה היותר כללית למשפט רייס בו סמנטיקה מוגדרת להיות שקילות בשפה .כלומר אם ) L(p1)=L(p2אז ).P(p1)=P(p2 הוכחה: נחלק את הבעיות הלא-טריוויאליות והסמנטיות ל 2-סוגים :סוג א' וסוג ב' .בעיות מסוג א' הן בעיות שמחזירות Fעבור התוכנית שמתבדרת לכל קלט ) .(loopyובעיות מסוג ב' הן בעיות שמחזירות Tעבור התוכנית שמתבדרת לכל קלט ) .(loopyתהי Pלא טריוויאלית וסמנטית ונניח בשלילה ש Pכן כריעה ונראה רדוקציה .halt0 ≤ P אם Pהיא בעיה מסוג א: .P(loopy) = F .1 .2קיימת תוכנית yesכך ש) P(yes) = T -כי Pאינה טריוויאלית(. נגדיר את הרדוקציה :halt0 ≤ P )( yes ( y ) f () = f g = λy. yes ( y ) otherwise where ) halt 0 ( f ) := P( g אם Pהיא בעיה מסוג ב: .P(loopy) = T .1 .2קיימת תוכנית noכך ש) P(no) = F -כי Pאינה טריוויאלית(. נגדיר את הרדוקציה :halt0 ≤ P )( no( y ) f () = f g = λy. ) no( y ) otherwise where ) halt 0 ( f ) := not ( P( g הוכחת נכונות: התוכנית עוצרת :הנחנו ש P-היא בעיה כריעה ,לכן עבור כל תוכנית יוחזר Tאו Fוערך זה יועבר ל halt0ומכאן שבכל מקרה התוכנית תעצור. הערך המוחזר נכון: עבור בעיות מסוג א' – אם fעוצרת ,אזי הביטוי )( f()=fניתן לחישוב )כלומר אינו נכנס ללולאה אינסופית( ויחזיר .Tבמקרה זה ,עבור כל ,yהתוכנית gתתנהג באותה הצורה כמו yesובפרט ,תחזיר Tעבור אותם ערכים ש yes-מחזירה עבורם ) Tורק עבורם(. כלומר gשקולה ל) yes-השפות של שתיהן שקולות( .היות ו P-סמנטיתP(g)=P(yes)=T , ולכן halt0יחזיר Tכנדרש .אם fאינה עוצרת ,אז לכל קלט yשיועבר ל ,g-התוכנית g תכנס ללולאה אינסופית )כי חישוב הביטוי )( f()=fיכנס ללולאה אינסופית( ומכאן שg- לא תחזיר Tעבור אף ערך .כלומר g ,שקולה לתוכנית ) loopyהשפות שלהן שקולות(. היות ו P-סמנטית .P(g)=P(loopy)=Fכלומר halt0 ,יחזיר Fכנדרש. עבור בעיות מסוג ב' – אם fעוצרת ,אזי הביטוי )( f()=fניתן לחישוב )כלומר אינו נכנס ללולאה אינסופית( ויחזיר .Tבמקרה זה ,עבור כל ,yהתוכנית gתתנהג באותה הצורה כמו noובפרט ,תחזיר Tעבור אותם ערכים ש no-מחזירה עבורם ) Tורק עבורם( .כלומר gשקולה ל) no-השפות של שתיהן שקולות( .היות ו P-סמנטית P(g)=P(no)=F ,ולכן לאחר notיוחזר מ halt0-הערך Tכנדרש .אם fאינה עוצרת ,אז לכל קלט yשיועבר ל,g- התוכנית gתכנס ללולאה אינסופית )כי חישוב הביטוי )( f()=fיכנס ללולאה אינסופית( ומכאן ש g-לא תחזיר Tעבור אף ערך .כלומר g ,שקולה לתוכנית ) loopyהשפות שלהן שקולות( .היות ו P-סמנטית P(g)=P(loopy)=Fולאחר notיוחזר מ halt0 -הערך Fכנדרש. סה"כ הראנו רדוקציה .halt0 ≤ Pכיוון ש halt0-אינה חשיבה ,נסיק שגם Pאינה חשיבה. 1 u.multinet.co.il עידן דויטש u.multinet.co.il .2 .a כתוב רדוקציית מיפוי .Halt-- ≤m Sort פיתרון: .i טענה :הפונקציה Sortהיא פונקציה חשיבה. הוכחה: יהי lרשימה של מספרים .נכתוב פונקציה שמקבלת את lועוברת איבר איבר ברשימה החל מתחילתה .בכל שלב ,התוכנית תשווה בין 2איברים עוקבים. התוכנית תמשיך לרוץ כל עוד li≤li+1או עד שנגיע לסוף הרשימה .אם במהלך הבדיקה נגלה כי קיים iעבורו li>=li+1נחזיר .Fאם הגענו לסוף הרשימה מבלי לעצור ,נחזיר .T הוכחת נכונות: התוכנית תעצור :הרשימה היא סופית ולכן בכל מקרה או שנעצור מתישהו במהלך סריקת הרשימה )כי היא לא מסודרת( או שנעצור בסופה )כאשר נגיע לסוף הרשימה(. הערך המחוזר נכון :ע"פ ההגדרה ,אם הרשימה ממוינת לכל איבר ברשימה מתקיים .li≤li+1אם מצאנו 2איברים עוקבים להם לא מתקיים תנאי זה – הרי שהרשימה אינה ממוינת .אם הגענו לסוף הרשימה מבלי להפר את התנאי ,כל האיברים ממוינים כראוי ע"פ טרנזיטיביות של ≤. .iiנראה רדוקציית מיפוי list (5,6,7) p( x) = T f = λp, x. list (5,2,7) otherwise where ))halt − −( p, x) := Sort ( f ( p, x הוכחת נכונות: התוכנית עוצרת f :מוגדרת ע"י הפרדיקט pוהקלט p .xהוא פרדיקט בשפה c-- וככל תוכנית בשפה זו ,הוא חייב לעצור .לכן pיעצור ויחזיר ערך Tאו .Fבכל מקרה ,התוכנית fלאחר מכן תחזיר רשימה )מסודרת או לא( ובפרט תעצור. הערך המוחזר נכון f :מקבלת את הפרדיקט pוהקלט .xכיוון ש pבהכרח עוצרת ,הפלט המוחזר מ p(x)-הוא בהכרח Tאו f .Fבודקת איזה ערך מחזיר ) .p(xאם מוחזר f ,Tתחזיר רשימה מסודרת )שתועבר ל sort-אשר יחזיר T כנדרש( .אם מוחזר f ,Fתחזיר רשימה שאינה ממוינת )שתועבר ל sort-אשר יחזיר Fכנדרש(. מסקנות מרדוקציית המיפוי כיוון ש fחשיבה וכן כיוון ש Sortחשיבה ,רדוקציית המיפוי שהראנו מוכיחה כי גם halt-- חשיבה. .b הוכחת הנכונות שלנו ברדוקציית המיפוי ל halt---מסתמכת על כך שהפונקציה fעוצרת. fבוודאות עוצרת כיוון ש p-היא תוכנית הכתובה בשפה c--ולכן חייבת לעצור .בשפות אחרות כמו ,c++אין הכרח ש p-תעצור ולכן fאינה תעצור בוודאות .בשל כך ,לא ניתן לבצע רדוקצייה ל halt-אך כן ניתן לבצע לפונקציה .halt-- .c כתוב רדוקציית מיפוי A ≤m Haltכאשר Aשפה רקורסיבית )כריעה(. פתרון: Aהיא שפה כריעה ולכן קיים פרדיקט pהמכריע אותה .נגדיר: p( x) = T > < λx.T ,1 f = λx. < λx.loopy ( x),1 > otherwise where ))A( x) := Halt ( f ( x הוכחת נכונות: התוכנית עוצרת A :היא שפה כריעה ולכן הפרדיקט שמכריע את השפה יחזיר Tאו F )ובוודאות יעצור( .התוכנית fמשתמשת בפרדיקט זה ובהתאם לערך שהוא מחזיר מחזירה זוג סדור של פונקציה וערך .אין הרצה נוספת ב f-ולכן fבוודאות תעצור. 2 u.multinet.co.il עידן דויטש u.multinet.co.il הערך המוחזר נכון :אם xשייך לשפה ,Aהפרדיקט pהמכריע את Aחייב להחזיר בעבורו .Tלכן fתחזיר את הזוג הסדור של התוכנית שתמיד מחזירה Tוהערך .1תוכנית זו עוצרת על כל ערך ובפרט על הערך 1ולכן כאשר תועבר ל Haltיוחזר Tכנדרש. אם xאינו שייך לשפה ,Aהפרדיקט pהמכריע את Aחייב להחזיר בעבורו .Fלכן fתחזיר את הזוג הסדור של התוכנית loopyשאינה עוצרת והערך .1תוכנית זו אינה עוצרת על אף ערך ובפרט אינה עוצרת עבור הערך 1ולכן כאשר תועבר ל Haltיוחזר Fכנדרש. .d הוכח או הפרך :אם קיימת רדוקציה A≤Bאז קיימת גם רדוקציית מיפוי .A≤mB פיתרון :הטענה אינה נכונה. הוכחה: נגדיר את השפה divergeהמכילה את כל הזוגות הסדורים > <p.xכך ש) p(xמתבדרת. נשים לב כי למעשה divergeהיא משלים לתוכנית .haltבין התוכניות קיימת רדוקציה halt ≤ divergeהמוגדרת להיות )) .halt(p,x):=not(diverge(p,xנכונות הרדוקציה נובעת ישירות מכך ש divergeהוא משלים של ) haltנשים לב כי haltכריעה למחצה(. נניח בשלילה שהטענה כן נכונה .כלומר ,קיימת גם רדוקציית מיפוי .halt≤mdivergeלכן, ע"פ מה שהוכחנו בכיתה קיימת גם רדוקצית המיפוי של המשלימים . halt ≤ m diverge הראנו בכיתה ש halt ∉ REולכן ,ע"פ רדוקציית המיפוי של המשלימים גם . diverge ∉ RE / Rאבל diverge = haltוכן מתקיים . halt ∈ RE / Rקיבלנו סתירה ולכן ההנחה בשלילה אינה נכונה .כלומר אם קיימת רדוקציה בין 2שפות ,אין הכרח שקיימת גם רדוקצית מיפוי בינהן. .3 הוכח או הפרך :הפונקציה s : N → N s (n) = max{ f i ( j ) : i, j ≤ n} + 1 חשיבה. כאשר f 0 , f 1 ... הוא סידור של כל הפונקציות המספריות החשיבות. פיתרון: הטענה אינה נכונה .נניח בשלילה ש s-חשיבה .היות ו s-חשיבה ,היא תופיע בסידור הפונקציות המספריות החשיבות f 0 , f 1 ... .נניח שמיקומה של sבסידור הוא .t ניתן להסתכל על קבוצת הפלטים מסמלות את הפונקציות }{ f i ( j ) : i, j ≤ n f 0 , f 1 ... f n −1 כמטריצה Aבגודל nXnכאשר השורות והעמודות מסמלות קלטים אפשריים )כלומר את המספרים הטבעיים .(1…nנשים לב כי הפונקציה sבוחרת למעשה את הערך המקסימאלי במטריצה זו ומוסיפה לו .1 לכל ,n>tהפונקציה sנמצאת בשורה ה t+1של הפונקציה )מספור הפונקציות מתחיל מ.(0- כלומר ערך הפונקציה ) s(nהוא .At+1,nע"פ ההגדרה של At+1,n ,sהוא הערך המקסימאלי במטריצה .אך sמוסיפה לערך זה ,1כלומר קיבלנו כי .s(n)=s(n)+1 <= s(n) = At+1,n + 1 זו כמובן סתירה ולכן הטענה המקורית אינה נכונה. .4 הוכח שהמחלקה Rסגורה תחת הפעולות הבאות )ניתן להשתמש במילים במקום בקוד(: .a איחוד נראה שהשפה כאשר p1 , p 2 L1 ∪ L2 )p(c) = p1 (c) ∨ p 2 (c כריעה ע"י הגדרת פרדיקט שיכריע אותה: הם פרדיקטים המכריעים את השפות L1 , L2 בהתאמה. הוכחת נכונות: L1 , L2הן שפות כריעות .לכן ,קיימים p1 , p 2 c ∈ L1 , p1 (c ) = Tאחרת p1 (c ) = Fוכן לכל c ∈ L2 , p 2 (c ) = Tאחרת . p 2 (c ) = Fיהי , c ∈ L1 ∪ L2אזי c ∈ L1או ) c ∈ L2או לשניהם כמובן( .אם c ∈ L1אז p1 (c ) = Tואם c ∈ L2אז . p 2 (c ) = Tכלומר ,אם c ∈ L1 ∪ L2על פרדיקטים ,כך שלכל 3 u.multinet.co.il עידן דויטש u.multinet.co.il אחד הפרדיקטים לפחות להחזיר .Tלכןp(c) = p1 (c) ∨ p 2 (c) = T , אם c ∉ L1 ∪ L2אזי c ∉ L1או c ∉ L2ולכן p1 (c ) = Fוגם . p 2 (c ) = Fלכן, p (c ) = p1 (c ) ∨ p 2 (c) = F ∨ F = Fכנדרש. . .b חיתוך נראה שהשפה כאשר p1 , p 2 L1 ∩ L2 )p(c) = p1 (c) ∧ p 2 (c כריעה ע"י הגדרת פרדיקט שיכריע אותה: הם פרדיקטים המכריעים את השפות L1 , L2 בהתאמה. הוכחת נכונות: L1 , L2הן שפות כריעות .לכן ,קיימים p1 , p 2 c ∈ L1 , p1 (c ) = Tאחרת p1 (c ) = Fוכן לכל c ∈ L2 , p 2 (c ) = Tאחרת . p 2 (c ) = Fיהי , c ∈ L1 ∩ L2אזי c ∈ L1וגם . c ∈ L2לכן . p(c) = p1 (c) ∧ p 2 (c) = T ∧ T = Tאם c ∉ L1 ∩ L2אזי c ∉ L1או c ∉ L2 )או שאינו שייך לשניהם( .לכן p1 (c ) = F ,או ) p 2 (c ) = Fאו שניהם( .ומכאן שגם, p (c ) = p1 (c ) ∧ p 2 (c ) = Fכנדרש. פרדיקטים ,כך שלכל .c שרשור נראה ש Rסגור גם עבור שירשור ,ע"י הגדרת פרדיקט שיכריע שרשור של 2שפות: )p(c { ;)len = length(c )for (int i=0; i<= len; i++ { ))p1 (subStr(c,0,i)) && p 2 (subStr(c,i,len (if { ;return true } } ;return false } כאשר: .1 p1 , p 2 הם פרדיקטים המכריעים את השפות L1 , L2 בהתאמה. length(s) .2היא פונקציה המחזירה את אורך המחרוזת ) sמספר התווים במחרוזת(. subStr(s,st,en) .3היא פונקציה המחזירה את תת המחרוזת המתחילה בתו הst- ומסתיימת בתו ה enשל המחרוזת .s נשים לב ,שהפונקציות lengthו subStr -הן פונקציות חשיבות ומוגדרות היטב. הוכחת נכונות: עצירה :אורך המחרוזת cהוא סופי .לכן pתעבור על כל המחרוזת בזמן סופי ובסופו של דבר תיעצר )כשהתנאי שבתוך הלולאה יתקיים או כשהלולאה forתיעצר( .בסיום הריצה תמיד יוחזר ערך Tאו .F הערך המוחזר נכון :אם cהוא שרשור של 2מחרוזות ,אחת מL1 - והשנייה מ , L2 -לאחר שהאינדקס iיגיע לאורך המחרוזת הראשונה בשרשור ,חלוקת המחרוזת תהיה בדיוק ל- 2תת-המחרוזות המקוריות .לכן ,עבור תת מחרוזת אחת, p1 יחזיר Tועבור השנייה p2 יחזיר .Tמכאן ,שהתנאי בתוך הלולאה יהיה גם ,Tהלולאה תפסק ו p-יחזיר .T אם cאינו שרשור של 2המחרוזות ,בכל שלב של ריצת הלולאה ,לפחות אחד הפרדיקטים p1 , p 2 יחזיר Fעל אחד מתתי-המחרוזת .לכן ,התנאי בתוך הלולאה תמיד יהיה ,Fהלולאה תסתיים באופן טבעי ו p-יחזיר .F 4 u.multinet.co.il עידן דויטש u.multinet.co.il .d Kleene Star נראה ש Rסגור גם עבור ,Kleene Starע"י הגדרת פרדיקט שיכריע שרשור של 2שפות. פעולת הפרדיקט :הפרדיקט מקבל מחרוזת sומתחיל את הבדיקה .מאפסים אינדקס i להיות 0ובודקים האם תת המחרוזת עד האינדקס iשייכת לשפה )באמצעות הפרדיקט המקורי של .(Lאם לא ,מגדילים את iב 1-וחוזרים על הבדיקה בשנית .אם כן ,חותכים את תת-המחרוזת מתחילת sוממשיכים בסבב בדיקות חדש על המחרוזת שנשארה וכך הלאה .פעולת הבדיקה מתבצעת בדומה לרקורסיה .לצורכי נוחות נתייחס לכל "עומק" של רקורסיה כמעגלים ,כך שהמעגל הראשון הוא הבדיקה המקורית .אם הגענו למצב בו באחד משלבי הרקורסיה ,האינדקס המקומי הגיע לסוף המחרוזת והיא אינה שייכת ל ,L-נחזור "מעגל" אחד אחורה ,נקדם את האינדקס במעגל זה ב 1-ונמשיך בבדיקה .אם בשלב מסוים הגענו לסוף המחרוזת וגם זנב המחרוזת האחרון שייך ל ,L-נחזיר .Tאם נגיע לסוף המחרוזת במעגל החיצוני וגם המחרוזת השלמה sאינה שייכת לשפה )בבדיקה האחרונה האפשרית( ,נחזיר .F הוכחת נכונות: עצירה :אורך המחרוזת cהוא סופי .לכן pתעבור רקורסיבית על כל המחרוזת בזמן סופי ובסופו של דבר תיעצר )כאשר נגיע באחד המעגלים לסוף המחרוזת והיא תהיה שייכת לשפה או כאשר במעגל הראשון נגיע לסוף והיא תהיה שייכת/אינה שייכת לשפה(. בסיום הריצה תמיד יוחזר ערך Tאו .F הערך המוחזר נכון :אם cהוא שרשור של מספר מחרוזות סופי מ ,L-הרקורסיה תמצא חלוקה זו )כי אנו למעשה עוברים על כל החלוקות האפשריות למחרוזת( .במקרה כזה, עבור כל תת מחרוזת בחלוקה ,הפרדיקט של Lיחזיר Tולכן ,במעגל האחרון של אפשרות זו יוחזר גם לזנב המחרוזת Tולכן גם הבדיקה הכללית של sתחזיר .T אם cאינו שרשור של מחרוזות מ ,L-בכל אפשרות חלוקה תהיה לפחות תת מחרוזת אחת שאינה שייכת ל L-ועבורה יוחזר .Fלכן ,נגיע לאחר כל הבדיקות לבדיקה האחרונה s ,כמחרוזת שלמה אינה שייכת ל L-ולכן גם בבדיקה זו יוחזר Fוכפועל יוצא הפרדיקט שהגדרנו יחזיר גם Fכנדרש. .5 קבע לכל אחת מהשפות האם היא שייכת ל co-RE/R,RE/R ,R-או לאף אחת מהקבוצות .הוכח נכונות. .a קלט :תוכנית .pשאלה :האם קיים xעבורו pעוצרת? פתרון :נראה ש זוהי שפה הכריעה למחצה )שייכת ל.(RE/R- .i טענה :זוהי שפה הכריעה למחצה )שייכת ל.(RE/R- הוכחה: נראה אלגוריתם המשתמש בשיטת השבלול באמצעות סטפר .יהי s1 , s 2 ,... קלטים אפשריים עבור .pנרוץ על הקלטים באופן הבא :עבור כל i ∈ Νנרוץ על הקלטים s1 ,..., s iלמשך iצעדים .במידה ועבור אחד הקלטים הסטפר עצר באופן טבעי ,נחזיר Tונסיים את הבדיקה ,אחרת נמשיך הלאה. הוכחת נכונות: במידה וקיים קלט xעבורו התוכנית pעוצרת ,נגיע לקלט זה לאחר i1צעדים. כיוון שהתוכנית pעוצרת עבור קלט זה ,קיים ,i2מספר צעדים שעבורו )p(x עוצרת באופן טבעי .לכן ,כאשר האלגוריתם שלנו יגיע ל} i=max{i1, i2הסטפר יעצור באופן טבעי והתוכנית תחזיר Tכנדרש. במידה ולא קיים קלט xעבורו pעוצרת ,הסטפר לא ייעצר באופן טבעי בשום שלב ולכן התוכנית תתבדר. .ii טענה :זוהי אינה שפה כריעה )אינה שייכת ל.(R- הוכחה: נניח בשלילה שהשפה כן כריעה ונראה רדוקציה ל .haltכלומר קיים פרדיקט stopsForSomeXהמכריע את השפה )מחזיר Tאם בשפה קיים xשעבורה התוכנית עוצרת ו F-אחרת(. 5 u.multinet.co.il עידן דויטש u.multinet.co.il )Halt(p,x) := stopsForSomeX (g) where g:= λz.if z=x then return p(x )(else return loopy הוכחת נכונות: התוכנית עוצרת :אנו מניחים כי stopsForSomeXכריעה ולכן תעצור עבור כל קלט Halt .מוגדרת להיות הערך ש stopsForSomeX-מחזירה ולכן תמיד תעצור )כי ע"פ ההנחה stopsForSomeXתמיד עוצרת(. הערך המוחזר נכון :אנו רוצים לבדוק האם התוכנית pעוצרת עבור .xהתוכנית אינה עוצרת בוודאות עבור קלטים השונים מ .x-כאשר xניתן כקלט ל,g- התוכנית תעצור רק אם ) p(xעוצרת .כלומר ,אם ) p(xעוצרת ,קיים xעבורו p עוצרת ולכן stopsForSomeXיחזיר Tכנדרש .אחרת g ,לא תעצור עבור אף קלט ו stopsForSomeX-תחזיר .F .b קלט :תוכנית .pשאלה :האם כל מספר זוגי הגדול מ ,2-ניתן להציג כסכום של 2 מספרים ראשוניים? פתרון :נראה שזוהי שפה כריעה )שייכת ל.( R- הנחת גולדבאך אומנם עדיין לא הוכחה או הופרכה אך באופן כללי לשאלה זו יש תשובה יחידה Tאו .Fלכן שפה זו היא שפה טריוויאלית :אין תלות בקלט pובהכרח ניתן להכריע אותה ע"י התוכנית λp, x.Tאו . λp, x.Fנשים לב ,שאין צורך שנדע את התשובה לשפה טריוויאלית ,כמו בדוגמה של שפת חברי הכנסת ה 18-שטרם הוכרעה רשמית )נכון לכתיבת שורות אלו( כפי שהוצגה בכיתה. .c קלט :תוכנית pו 2-משתנים x :ו .y-שאלה :האם pעוצרת בדיוק על 1משני המשתנים? פתרון :נראה ששפה זו אינה שייכת לאף אחת מהקבוצות .R,RE/R,co-RE/R .i טענה :שפה זו אינה שייכת ל R-ואינה שייכת ל.co-RE/R- הוכחה: נוכיח באמצעות רדוקציית מיפוי .נניח בשלילה שקיים )haltsOnOne(p,x,y ונראה רדוקציה מ.halt- Halt (p,x) := haltsOnOne(f(p,x)) where >f:= λp,x.<g,x,ε )g:= λz.if (z==x) then return p(x )(else return loopy הוכחת נכונות: התוכנית עוצרת :אנו מניחים כי haltsOnOneכריעה ולכן תעצור עבור כל קלט. Haltמוגדרת להיות הערך ש haltOnOneמחזירה ולכן תמיד תעצור )כי ע"פ ההנחה haltsOnOneתמיד עוצרת(. הערך המוחזר נכון :אנו רוצים לבדוק האם התוכנית pעוצרת עבור .xהתוכנית gאינה עוצרת עבור כל ערך השונה מ .x-כמו כן ,עבור קלט השווה לg ,x- מחזירה את ) p(xולכן תעצור רק במקרה ו p(x)-עוצרת .נשים לב :כאשר )p(x אינה עוצרת g ,אינה עוצרת על 2הקלטים ולכן haltsOnOneתחזיר Fכנדרש. כאשר ) p(xעוצרת g ,תעצור רק עבור xולכן haltsOnOneתחזיר Tכנדרש. הראנו כי קיימת רדוקצית מיפוי מ halt-ל haltsOnOne-זאת בסתירה לכך שhalt- אינה כריעה .לכן ,גם haltsOnOneאינה כריעה .היות ו haltגם אינה שייכת ל- Co-RE/Rנוכל להסיק בצורה דומה שגם haltsOnOneאינה שייכת ב.Co-RE/R- .ii טענה :שפה זו אינה שייכת ל.RE/R- הוכחה: נוכיח באמצעות רדוקציית מיפוי. >f:= λp,x.<g,x,ε )g:= λz.if (z==x) then return p(x else return T halt (p,x) := haltsOnOne(f(p,x)) where הוכחת נכונות: התוכנית עוצרת :אנו מניחים כי haltsOnOneכריעה ולכן תעצור עבור כל קלט. 6 u.multinet.co.il עידן דויטש u.multinet.co.il haltמוגדרת להיות הערך ש haltOnOneמחזירה ולכן תמיד תעצור )כי ע"פ ההנחה haltsOnOneתמיד עוצרת(. הערך המוחזר נכון :אנו רוצים לבדוק האם התוכנית pאינה עוצרת עבור .x התוכנית gעוצרת עבור כל ערך השונה מ .x-כמו כן ,עבור קלט השווה לg ,x- מחזירה את ) p(xולכן תעצור רק במקרה ו p(x)-עוצרת .נשים לב :כאשר )p(x אינה עוצרת g ,עוצרת רק על קלט 1ולכן haltsOnOneתחזיר Tכנדרש .כאשר ) p(xעוצרת g ,תעצור על 2הקלטים ולכן haltsOnOneתחזיר Fכנדרש. הראנו כי קיימת רדוקצית מיפוי מ halt -ל .haltsOnOne-היות ו halt אינה שייכת ל ,RE/R-נסיק כי גם haltsOnOneאינה שייכת לקבוצה זו. סה"כ הראנו ב 2-הטענות כי השפה אינה שייכת לאף קבוצה. .d קלט :תוכנית .pשאלה?|L(p)|>3 : פתרון :נראה שזוהי שפה הכריעה למחצה )שייכת ל.(RE/R- .i טענה :זוהי שפה הכריעה למחצה )שייכת ל.(RE/R- הוכחה: נראה אלגוריתם המשתמש בשיטת השבלול באמצעות סטפר .יהי s1 , s 2 ,... קלטים אפשריים עבור .pנרוץ על הקלטים באופן הבא :עבור כל i ∈ Ν על הקלטים s1 ,..., s iלמשך iצעדים .בכל פעם שעבור אחד הקלטים נרוץ הסטפר עצר באופן טבעי לראשונה ,נקדם מונה ב .1-אם המונה יגיע ל 4-נחזיר Tונסיים את הבדיקה ,אחרת נמשיך הלאה. הוכחת נכונות: במידה וקיימים יותר מ 3-קלטים עבורם pמחזירה ,Tנגיע לפחות ל 4-מהם לאחר i1צעדים .כיוון שהתוכנית pמחזירה Tבוודאות עבור כל אחד מהקלטים הללו )ולכן בהכרח עוצרת( ,קיים ,i2מספר צעדים שעבורו pעוצרת עבור כל אחד מהקלטים באופן טבעי ומחזירה .Tלכן ,כאשר האלגוריתם שלנו יגיע ל} i=max{i1, i2הסטפר יעצור בפעם הרביעית ,המונה יתעדכן ל ,4-והתוכנית תחזיר Tכנדרש. במידה ולא קיימים לפחות 4קלטים עבורם pמחזירה ,Tהסטפר לא ייעצר באופן טבעי מספיק פעמים והמונה לא יגיע ל .4-לכן ,התוכנית תמשיך לרוץ, ובמילים אחרות -התוכנית תתבדר. .ii טענה :זוהי אינה שפה כריעה )אינה שייכת ל.(R- הוכחה: נניח בשלילה שהשפה כן כריעה ונראה רדוקציה מ .haltכלומר קיים פרדיקט moreThan3המכריע את השפה )מחזיר Tאם בשפה יש יותר מ 3-קלטים שעבורם התוכנית pעוצרת ,ו F-אחרת(. )Halt(p,x) := moreThan3(g) where g:= λz.if z=x then return p(x else if z=next(x) then T else if z=next(next(x)) then T else if z=next(next(next(x))) then T )(else return loopy הוכחת נכונות: התוכנית עוצרת :אנו מניחים כי moreThan3כריעה ולכן תעצור עבור כל קלט. Haltמוגדרת להיות הערך ש moreThan3מחזירה ולכן תמיד תעצור )כי ע"פ ההנחה moreThan3תמיד עוצרת(. הערך המוחזר נכון :אנו רוצים לבדוק האם התוכנית pעוצרת עבור .xהתוכנית gעוצרת בוודאות עבור 3קלטים .עבור יתר הקלטים )פרט לקלט ,(xתכנס g ללולאה אינסופית .כאשר נשלח ל g-הקלט xמוחזר הערך של ) .p(xלכן ,אם עבור xהתוכנית pעוצרת ,הרי ש g-תעצור עבור יותר מ 3-קלטים ולכן יוחזר T כנדרש .אחרת p ,תעצור עבור 3קלטים בדיוק ולכן יוחזר Fכנדרש. 7 u.multinet.co.il עידן דויטש u.multinet.co.il .e קלט :תוכנית .pשאלה?|L(p)|≤3 : פתרון :זוהי שפה שהמשלים שלה היא שפה הכריעה למחצה )שייכת ל.(Co-RE/R- .i טענה :זוהי שפה שהמשלים שלה היא שפה הכריעה למחצה )שייכת ל(Co-RE- הוכחה :נשים לב כי המשלים הוא .|L(p)|>3כפי שהוכחנו בסעיף הקודם, המשלים שייך ל RE/R-ואינו שייך ל .R-לכן ,באופן מיידי )ע"פ מה שהוכחנו בכיתה( נסיק כי שפה זו שייכת ל.Co-RE- טענה :זוהי אינה שפה כריעה )אינה שייכת ל.(R- הוכחה: נניח בשלילה שהשפה כן כריעה .מכאן שגם המשלים של השפה שייך ל R-אך בסעיף הקודם הראנו כי הוא אינו שייך ל .R-קיבלנו סתירה ולכן השפה אינה שייכת ל.R- .f קלט :פרדיקט .Pשאלה :האם ) L(Pהיא כריעה? פתרון :נראה ששפה זו אינה שייכת לאף אחת מהקבוצות .R,RE/R,co-RE/R .i טענה :שפה זו אינה כריעה ואינה שייכת ל.co-RE/R- הוכחה: נוכיח באמצעות רדוקציית מיפוי מ:halt נניח שהשפה כריעה ומוכרעת ע"י הפרדיקט .Qנסמן את הפרדיקט של השפה haltεכPε - )שפת התוכניות שעוצרות עבור הערך אפסילון(. )g := λp, x.λz.Pε ( z) ∨ f ( z )p(x) = p(x T f := λz. loopy() o.w. halt (p,x) := Q(g(p,x)) where הוכחת נכונות: התוכנית עוצרת :אנו מניחים כי Qכריעה ולכן תעצור עבור כל קלט .התוכנית gתעצור בוודאות כיוון שהיא בסך הכל מחזירה תוכנית חדשה )ולא מפעילה תוכנית זו עדיין( halt .מוגדרת להיות הערך ש Qמחזירה ולכן תמיד תעצור )כי ע"פ ההנחה Qתמיד עוצרת(. הערך המוחזר נכון :אנו רוצים לבדוק האם התוכנית pאינה עוצרת עבור .xאם pעוצרת על ,xל Q-יועבר הפרדיקט , λz.Pε ( z) ∨ f ( z) = λz.Pε ( z) ∨ T = T כלומר הפרדיקט המחזיר Tלכל ערך .במקרה כזה ,השפה המוגדרת ע"י הפרדיקט היא שפת כל המחרוזות והיא כמובן שפה כריעה .לכן Qיחזיר T כנדרש .אם pאינה עוצרת על ,xל Q-יועבר הפרדיקט ). λz.Pε ( z) ∨ f ( z בעת בדיקת ערך בפרדיקט זה ,אם הערך שייך ל , haltε -יוחזר ) Tוהתנאי השני לא ייבדק( .אם הערך לא שייך ל , haltε -יוחזר מהפרדיקט של haltε Fולכן ננסה לבדוק באמצעות ) .f(zבמקרה זה ,כיוון ש p-אינה עוצרת, הפרדיקט כולו יתבדר )הערה :כדי לא לסבך את הקוד השתמשתי בתנאי "או" פשוט .כיוון ש haltε -אינה כריעה ,נאלץ להשתמש בסטפר עד שאחת הפונקציות תחזיר .(Tכלומר ,עבור קלטים השייכים לhaltε - קלטים שאינם שייכים לhaltε - הפרדיקט היא בעצם . haltεזו שפה שאינה כריעה ולכן Qיחזיר Fכנדרש. יוחזר Tועבור הפרדיקט יתבדר .לכן ,השפה שתוגדר ע"י הראנו כי קיימת רדוקצית מיפוי מ halt -ל .Q-היות ו halt אינה כריעה ואינה שייכת ל ,co-RE/R-נסיק כי גם Qאינה שייכת לקבוצה זו. 8 u.multinet.co.il עידן דויטש u.multinet.co.il .ii טענה :שפה זו אינה שייכת ל.RE/R- הוכחה: נסמן את השפה כ . L Rבכיתה הראנו והוכחנו כי קיימת רדוקצית מיפוי מHalt- לשפה המשלימה . Lכלומר מתקיים R בכיתה( גם מתקיים היות וhalt - halt ≤ m LR ≤ m LR ⇒ halt ≤ m LR ומכאן )ע"פ מה שהוכחנו . halt אינה כריעה ואינה שייכת ל RE/R-נסיק כי גם LR אינה שייכת כריעה ואינה שייכת ל.RE/R- הראנו כי קיימת רדוקצית מיפוי מ halt-ל haltsOnOne-זאת בסתירה לכך שhalt- אינה כריעה .לכן ,גם haltsOnOneאינה כריעה .היות ו haltגם אינה שייכת ל- Co-RE/Rנוכל להסיק בצורה דומה שגם haltsOnOneאינה שייכת ב.Co-RE/R- סה"כ הראנו ב 2-הטענות כי השפה אינה שייכת לאף קבוצה. .g קלט :פרדיקט .pשאלה :האם ) L(Pמוכרעת למחצה? פתרון :זוהי שפה כריעה )שייכת ל.(R- הוכחה: ע"פ ההגדרה ,כל שפה ) L(pמוכרעת למחצה ע"י הפרדיקט שלה .pכלומר ,השפה )L(P מוגדרת להיות כל הערכים להם Pמחזיר אמת .לכן ,השפה ) L(pמעצם ההגדרה מוכרעת למחצה ע"י .Pמכאן ששאלה זו היא שאלה טריוויאלית ומוכרעת ע"י הפרדיקט . λx.Tהראנו כי קיים פרדיקט המכריע את השפה ולכן שפה זו שייכת ל.R- .h קלט :תוכנית pללא קלט ,שמקיימת ).|p|<bb(1000 שאלה :האם pעוצרת? פתרון :זוהי שפה כריעה )שייכת ל.(R- הוכחה: מספר התוכניות ללא קלט שמקיימות את התנאי ) |p|<bb(1000הוא מספר סופי .לכן, קיימים מספר סופי של שאילתות שניתן לבצע על הבעיה .ע"פ מה שנלמד בכיתה ,כל בעיה עם מספר סופי של שאילתות היא בעיה כריעה )בדומה לבעיית חברי הכנסת ה- .(18לכן ,זוהי שפה כריעה. הערה :נשים לב ,שמשפט רייס אינו תופס במקרה זה כיוון שהבעיה אינה סמנטית .תהי fתוכנית עוצרת באורך ) .bb(1000התוכנית ) g = λx. f ( xשקולה לתוכנית fהיות והערכים שהיא מחזירה זהים לערכים של .fעם זאת ,ברור שהאורך של gגדול מ) .bb(1000לכן ,למרות שהתוכניות שקולות סמנטית ,הבעיה תחזיר עבור F gכי היא אינה שייכת לשפה. .6 נתון: .a ∈ RE / R . L1 , L2הוכח האם הביטויים הבאים אפשריים: L1 ∪ L2 ∈ R פתרון :מצב זה הוא מצב אפשרי. הוכחה: נגדיר }L1 = {< p, x > | p halts on x or | p | is even } L2 = {< p, x > | p halts on x or | p | is odd 9 u.multinet.co.il עידן דויטש u.multinet.co.il L1ו L2הן שפות כריעות למחצה )כלומר ∈ RE / R :( L1 , L2פונקצית האורך היא פונקציה מוגדרת היטב שתמיד עוצרת .כמו כן הפרדיקטים oddו even-הם פרדיקטים שעוצרים תמיד ומוגדרים היטב .עם זאת הראנו ש halt-היא בעיה הכריעה למחצה )כאשר התוכנית עוצרת נוכל תמיד בקלות להחזיר Tאך כאשר התוכנית אינה עוצרת, גם הפרדיקט המכריע את haltיתבדר(. נשים לב כי }> ∪ L2 = {< p, x . L1כלומר ,זוהי שפה טריוויאלית של כל התוכניות והקלטים ולכן מוכרעת על ידי הפרדיקט . λp, x.Tפרדיקט זה תמיד עוצר ומחזיר T לכל תוכנית ולכן מתקיים .b L1 ∪ L2 ∈ R וגם L1 ∪ L2 ∈ R כנדרש. L1 ∩ L2 ∈ R פתרון :מצב זה אינו אפשרי. הוכחה: נניח בשלילה שהמצב כן אפשרי .היות וL1 ∪ L2 ∈ R - השפה . L1 ∪ L2כמו כן ,היות ו L1 ∩ L2 ∈ R -קיים פרדיקט p2המכריע את השפה . L1 ∩ L2נראה כעת כי ניתן להכריע את השפה L1באמצעות הגדרת פרדיקט: קיים פרדיקט p1המכריע את )p1 ( x) ∧ p 2 ( x T Pl1 ( x) = F )¬p1 ( x ) g ( x ) p ( x ) ∧ ¬p ( x 1 2 כאשר ) g(xהיא תוכנית המקבלת מחרוזת xומשתמשת בסטפר בצורה הבאה :בכל פעם היא מפעילה את הסטפר iפעמים לחילופין על הפרדיקט שמכריע את L1 והפרדיקט שמכריע את .L2אם הפרדיקט של L1עוצר באופן טבעי בשלב מסויים ומחזיר g ,Tמחזירה .Tאם L2עוצר באופן טבעי בשלב מסויים ומחזיר g ,Tמחזירה .F הוכחת נכונות: התוכנית עוצרת :שפות האיחוד והחיתוך הן שפות כריעות על פי ההנחה .לכן, הפרדיקטים המכריעים אותן יעצרו בוודאות על כל ערך .כמו כן ,הפונקציה gתעצור תמיד כיוון שאם xשייך לאיחוד ואינו שייך לחיתוך ,הוא שייך רק לאחת מהשפות .לכן, בשלב מסוים הפרדיקט של השפה אליה הוא שייך יסתיים באופן טבעי ויחזיר L1) TוL2- הן שפות כריעות למחצה לכן אחד הפרדיקטים חייב להסתיים(. התשובה המוחזרת נכונה :אם xשייך לאיחוד ולחיתוך ,הוא שייך ל 2-השפות בוודאות ובפרט שייך ל .L1-לכן P ,מחזירה Tכנדרש .אם xלא שייך לאיחוד x ,אינו שייך לאף אחת מהשפות ובפרט אינו שייך ל ,L1-לכן p ,מחזירה Fכנדרש .אם xשייך לאיחוד אך לא שייך לחיתוך ,אז xשייך בדיוק לאחת השפות .התוכנית gקובעת לאיזה מהשפות הוא שייך ע"י הרצת סטפר .כיוון ש L1ו L2-הן שפות כריעות למחצה ,הפרדיקט המכריע את השפה אליה שייך xבטוח יעצור ויחזיר ) Tוהוא היחיד שיחזיר Tעבור xמהשתיים(. לכן ,אם xשייך ל ,L1-הפרדיקט של L1בטוח יעצור ויחזיר Tולכן גם gתחזיר Tכנדרש ואם xאינו שייך ל ,L1-הפרדיקט של L2בטוח יעצור ויחזיר Tולכן gתחזיר Fכנדרש. סה"כ הראנו שניתן להכריע את L1בסתירה לנתון ש ∈ RE / R . L1לכן ,ההנחה בשלילה אינה מתקיימת והמצב אינו אפשרי. 10 u.multinet.co.il
© Copyright 2024