אינדוקציה היא כלי חזק להוכחה של טענות ובפרט של תכונות של תוכניות ושפות.
ההוכחה באינדוקציה מחולקת לשלושה חלקים:
א) בסיס האינדוקציה- המקרה הכי בסיסי ופשוט שבו קל להראות שהטענה נכונה.
ב) הנחת האינדוקציה- הנחה כללית שהטענה נכונה עבור מקרה כלשהו.
ג) צעד האינדוקציה- צ״ל שאם נוסיף צעד לאיבר שידוע שעליו הטענה מתקיימת אז גם האיבר החדש מקיים את הטענה.
בדומה להגדרה רקורסיבית של פונקציות נוכל להגדיר הגדרות רקורסיביות על קבוצות באמצעות כללי נסיגה או כללים רקורסיביים אחרים שקובעים אילו איברים שייכים לקבוצה כתלות באיברים אחרים. הגדרות רקורסיביות הן כלי חשוב להוכחה באינדוקציה כפי שאפשר לראות על הוכחות בעצים
אינדוקציה מתמטית היא אינדוקציה שבבסיסה היא עוסקת במספרים טבעיים וכללים על מספרים טבעיים.
לדוגמה נגדיר את הקבוצה הבאה
בעצם
נרצה להוכיח ש
הגדרה:
נשים לב: היינו יכולים להגדיר את
באינדוקציה מתמטית הוכחנו את הטענה עבור מספר טבעי
נניח שיש לנו
בסיס האינדוקציה: נראה ש
הנחת האינדוקציה: נניח
צעד האינדוקציה: אם הטענה נכונה לאיבר
לדוגמה - עבור הדוגמה של אינדוקציה מתמטית ממקודם הבסיס יהיה האיבר
ההנחה תהיה
דוגמה 2:
נגדיר קבוצה
נרצה להוכיח את הטענה ש
בסיס האינדוקציה: איברי הבסיס הנ״ל מקיימים את הדרוש שכן סכומם הוא
הנחת האינדוקציה: נניח
צעד האינדוקציה: מההנחה מתקיים
נסמן
נוכיח טענה באמצעות אינדוקציה מבנית על עץ בינארי מלא. נרצה להוכיח את הטענה שכמות העלים שווה לכמות הקודקודים הפנימיים בעץ ועוד אחד.
לשם נוחות נסמן:
בסיס: עבור עץ
הנחה: עבור עץ
צעד: נגדיר
מתקיים גם ש
כאשר התוספת
נראה כעת כיצד להוכיח טענות על דקדוק חסר הקשר באמצעות אינדוקציה מבנית.
נייצג את המספרים הטבעיים
Production Rules:
Backus-Naur Form (BNF):
Derivation Rules:
כאשר הסימון של כללי גזירה הוא ״מלמעלה אפשר לגזור את מה שכתוב למטה״.
כעת נייצג את הקבוצה
ובאמצעות כללי גזירה :
נרצה להוכיח ש
בסיס - עבור איברי הבסיס של
הנחת האינדוקציה- יהי
צעד- אם
בסיס - איבר הבסיס של
הנחה - יהי
צעד- עבור
נשים לב שנתקלנו במבוי סתום, שכן לא ניתן לגזור מתוך החוקים של
מה עושים? הפתרון הוא להוכיח טענה חזקה יותר באמצעות אינדוקציה מבנית, במקרה הזה הפתרון הוא להוכיח ש
אם נרצה להוכיח את הנ״ל נוכל להראות ש
הכוח פה כעת הוא בהנחת האינדוקציה שכן נקבל
נגדיר דקדוק חסר הקשר שיוצר ביטויים מתמטיים עם מספרים טבעיים והאופרטורים
או באמצעות סדרת כללי הגזירה
נשים לב שהדקדוק הוא רב משמעי, למשל נראה ש
שפה מהסוג הנ״ל אפשר לבטא באמצעות Abstract Syntax Tree בעזרתו אפשר ליצור את כל המילים בשפה ונצטרך interpeter שיסביר מהי המשמעות (סמנטיקה).
נגדיר את הפונקציה הבאה בOCaml
let rec m = fun t -> match t with
| Leaf(a) -> Leaf(a)
| Node(t1,t2) -> Node(m(t2), m(t1))
פונקציה שעושה mirror לעץ בינארי (החלפה בין הילדים) ונרצה להוכיח את הטענה הבאה :
הוכחה שגויה תהיה להגיד שהפונקציה
נראה כעת כיצד להוכיח באמצעות אינדוקציה מבנית:
בסיס- t=Leaf(a)
עבור עלה כלשהו, לפי הגדרת
הנחה- יהיו
צעד-
כדרוש