שאלה 3 - שפת "ויקיש" (INFERRED) - מועד 78

להלן נתונה תוכנית בשפת "ויקיש" (INFERRED):

let p1 = proc (x:?) (x 9) in let p2 = proc (y:?) zero?(y) in (if (p1 p2) then p2 else proc (z:?) zero?(-(z,5)) 7)

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

סעיף א'

הקצו לביטוי הנתון בשאלה ולתתי הביטויים שלו משתני-טיפוס (Type Variables) מתאימים, וחברו משוואות מתאימות לביטוי הנתון ולתתי הביטויים שלו.

סעיף ב'

פתרו את המשוואות שהרכבתם בסעיף א' תוך שימוש ב- substitution ו- unification בדומה למתואר בספר בעמודים 258-252. בסיום פתרון המשוואות רשמו מהו הטיפוס שאותו הקשתם עבור התוכנית הנתונה.