תכנות לוגי

היסטוריה

התכנות הלוגי במובן הכללי שלו, נתן בתחילה מקום למספר מימושים, כגון אלו של פישר בלאק (1964), ג'יימס סלייגל (1965), וקורדל גרין (1969). מימושים אלו היו בעצם מערכות ל"פתירת שאילתות" כמו ה Advice Taker שהוצג במאמרו של ג'ון מקארטי (1958). למרות זאת, רק ב-1969, אבסיס, שנכתבה על ידי פוסטר ואלקוק, הייתה לשפה הראשונה שעסקה בתכנות לוגי והוכרזה כשפת תכנות.
במובן הצר יותר של התכנות הלוגי, ניתן למצוא אותו כבר בדיונים הראשונים על בינה מלאכותית בסוף שנות ה-60 ותחילת ה-70. אף על פי שהייתה אכן מבוססת על לוגיקה, פלאנר, אשר פותחה ב MIT הייתה השפה הלוגית הראשונה שנבנתה על פרדיגמת התכנות הפרוצידורלי. המימוש הידוע ביותר של הפלאנר הוא המיקרו-פלאנר שנבנה על ידי ג'רי סוסמן, אגווין חארניאק, וטרי וינוגרד. השימוש בו היה למימוש השפה הטבעית של וינוגרד, והבנתה של תוכנת SHRDLU, דברים אשר היוו התקדמות רצינית ביותר באותה התקופה. מפלאנר עצמה התפתחו בנוסף גם השפות QA-4, POPLER, Conniver, QLISP, ETHER.

הייס וקוואלסקי, גם הם ניסו לקבל את גישת ההכרזה הלוגית לייצוג מידע שהוצגה על ידי פלאנר בצורתה הפרוצידורלית. הייס(1973), פיתח שפת משוואות, GOLUX, שבה ניתן לקבל פרוצדורות שונות באמצעות שינוי של אלגוריתם מציאת הפתרון לשאילתות. קוואלסקי לעומת זאת הראה כיצד ניתן לפתור באמצעות פתרון רדוקטיבי של SL-resolution את השאילתות המוצגות. לבסוף קוואלסקי, בשיתוף עם קולמיראור בעצם בנו את פרולוג על בסיס רעיונות אלו. מכאן והלאה פותחו גם ALF, Godel, Fril ועוד שפות נוספות. 

בשנת 1997 הוקמה ועדת "מייסדי התכנות הלוגי" שמטרתה הייתה לתת ל 15 האנשים הללו את מקומם הראוי בהיסטוריה בתור חלוצי התכנות הלוגי.

תחשיב יחסים בתכנות הלוגי (המובן הרחב)

תחביר: סמלים אטומיים: קובעים ומשתנים.

משתנים

משתנים ייוצגו באות ראשונה גדולה לדוגמה: X,Y,DingDong, TheWitchIsDead.

ביטוי

קבועים או משתנים ייחודיים נקראים ביטוי.

נוסחה אטומית

נוסחה אטומית היא אחת משניים, חוק או עובדה. הצורה הבסיסית של נוסחה אטומית היא: 
כל נוסחה אטומית היא פונקציה. הרצה של כל פונקציה תעשה על ידי השאילתה שתנתן.

עובדה

עובדה היא הגדרה של n אטומים כך ש n>=1 אשר עומדים ביחס מסוים. נסתכל בקטע הקוד הבא:
שורה זאת לוקחת את שני הקבועים (נשים לב אות קטנה בתחילת המילה) abraham, issac וקובעת שהם עומדים ביחס Father. (כלומר עובדה)
בניגוד לשורת הקוד הקודמת, כאן ניתן לראות, כי השם Abraham מתחיל באות גדולה ועל כן הוא משתנה.
הצורות הפשוטות ביותר של עובדה הן true, false.

תבנית

לכל פרדיקט שנבנה קיימת תבנית, התבנית בנויה ממספר ביטויים ותוגדר על ידי מספר זה. לדוגמה מספר הביטויים של father שהוגדר קודם הוא 2. אם נגדיר מחדש את father עם מספר ביטויים שונה הפרדיקט לא יוגדר כאותו פרדיקט. נגדיר אותו כ father/1 father/3 father/4 וכדומה.

שאילתה

שאילתה היא בעצם בדיקה של מאגר האקסיומות שבנינו מראש. בהרצת שאילתה כלשהי ירוץ אלגוריתם שיבדוק אחד אחד בסדר כלשהו את העובדות והחוקים שניתנו בהקדם וינסה להוכיח את השאילתה.
שאילתה זאת תחזיר לנו X=abraham, Y=issac. המשך הרצה של השאילתה עם האקסיומה היחידה שנתנו מעוד מועד יחזיר false. זאת מאחר שאין עוד ערכים שיאמתו את השאילתה. נשים לב כי הרצה של שאילתות יכולה גם להכיל קבועים בלבד ולא משתנים ואפילו להכיל מספר ביטויים שונים להוכחה.

המפרש

המפרש תפקידו לחשב סט של תשובות, תחלופות, עבור המשתנים הנתונים בשאילתה. כל תשובה מייצגת הוכחה של השאילתה, במידה ואין הוכחה אז הסט ריק. כל סט כזה מהווה ניסיון נוסף לפתור את השאילתה וניסיון נוסף לשימוש בחוקים למציאת ההוכחה. 
המפרש עובר ע"פ סדר שאינו דטרמניסטי על כל החוקים והעובדות (בפרולוג למשל הסדר הוא ע"פ סדר הכתיבה שלהם), ומחפש אלמנטים שיוכיחו את השאילתה המבוקשת. שלב זה הוא שלב הגישוש הנסוג. 
המפרש יתייחס לכל עובדה כאילו היא חוק בעל ערך true. 
אלגוריתם ההוכחה של המפרש מניח מראש כי קיים איטרטור "is" אשר עוקב אחרי הסדר של בדיקת השאילתה והחוקים והעובדות אשר נבדקו כבר.

פלט

סט המקיים את ההוכחה או סט ריק.