جلسه دهم
مقدمه
پارادایم برنامهنویسی منطقی بر پایهٔ منطق ریاضی و بهویژه منطق گزارهای و منطق محمولات بنا شده است. در این رویکرد، برنامهنویس به جای نوشتن گامهای اجرایی، «حقایق» و «قواعد» را تعریف میکند و سیستم با استفاده از «استنتاج منطقی» به جواب میرسد.
۱) پارادایم برنامهنویسی منطقی چیست؟
- برنامه مجموعهای از حقایق و قواعد است، نه دنبالهای از دستورات.
- برنامهنویس میگوید «چه چیزی درست است»، نه «چگونه اجرا شود».
- موتور استنتاج (Inference Engine) با جستوجو در میان حقایق و قواعد، پاسخ پرسشها را پیدا میکند.
۲) مفاهیم اصلی در برنامهنویسی منطقی
الف) حقیقت (Fact)
بیانی است که یک رابطه یا ویژگی را دربارهٔ اشیاء بیان میکند؛ مثلاً اینکه یک شیء عضوی از یک دسته است یا رابطهای بین دو شیء برقرار است.
ب) قاعده (Rule)
بیانی است از نوع «اگر … آنگاه …» که بیان میکند در صورت برقرار بودن یک یا چند حقیقت، نتیجهٔ دیگری هم برقرار خواهد بود.
قواعد راه تبدیل دانش موجود به دانش جدید را مشخص میکنند.
ج) پرسوجو (Query)
سؤالی است که از سیستم منطقی پرسیده میشود تا بررسی کند آیا میتوان با استفاده از حقایق و قواعد، آن را اثبات کرد یا خیر.
۳) شیوهٔ کار در برنامهنویسی منطقی
- تعریف حوزهٔ مسئله با حقایق (مثلاً روابط بین افراد یا اشیاء).
- تعریف قواعد استنتاج برای بیان قوانین و الگوهای کلی.
- مطرح کردن پرسوجو و سپردن کار استنتاج به موتور منطقی.
- سیستم با جستوجو و تطبیق حقایق و قواعد، پاسخ را پیدا میکند یا اعلام میکند که قابل اثبات نیست.
۴) قواعد استنتاج (Inference Rules)
الف) استنتاج به جلو (Forward Chaining)
- از حقایق اولیه شروع میکنیم.
- قواعدی را که شرایطشان برقرار است اعمال میکنیم.
- حقایق جدید تولید میشود و این روند تا رسیدن به نتیجه یا اتمام امکان استنتاج ادامه مییابد.
- مناسب برای سیستمهای مبتنی بر داده (Data-Driven).
ب) استنتاج به عقب (Backward Chaining)
- از هدف یا پرسش شروع میکنیم.
- سعی میکنیم ببینیم برای اثبات آن، کدام قواعد باید برقرار باشند.
- آنقدر به عقب برمیگردیم تا نهایتاً به حقایق اولیه برسیم یا مشخص شود که اثبات ممکن نیست.
- مناسب برای پاسخ به پرسوجوهای مشخص (Goal-Driven).
۵) نقش منطق در برنامهنویسی منطقی
منطق گزارهای
- با گزارههایی سروکار دارد که یا درستاند یا نادرست.
- برای بیان روابط ساده و کلی استفاده میشود.
منطق محمولات
- امکان بیان روابط پیچیدهتر با استفاده از متغیرها و کمیتسازها (همه، وجود دارد) را فراهم میکند.
- برنامهنویسی منطقی عملی (مانند زبانهای مبتنی بر آن) معمولاً بر منطق محمولات درجهٔ اول تکیه دارد.
۶) ویژگیها و مزایای پارادایم منطقی
- تمرکز بر «دانش» و «روابط» بهجای دستورها و حالتها.
- مناسب برای مسائلی که ماهیتشان قاعدهمحور است، مثل سیستمهای خبره، استنتاج و حل معماها.
- توسعه و نگهداری آسان دانش: میتوان حقایق و قواعد جدید اضافه کرد بدون آنکه ساختار اجرایی را تغییر دهیم.
- نزدیک بودن به نحوهٔ استدلال انسانی در مسائل منطقی.
۷) محدودیتها و چالشها
- کارایی ممکن است در مسائل بزرگ و پیچیده مشکلساز شود.
- برای مسائل محاسباتی سرراست (مانند پردازش عددی سنگین) معمولاً مناسبترین انتخاب نیست.
- برنامهنویسی در این پارادایم نیازمند تغییر شیوهٔ تفکر از «چطور انجام دهیم» به «چه چیزی درست است» است که برای بسیاری از برنامهنویسان دستوری، در ابتدا نامأنوس است.
۸) کاربردها در دنیای واقعی
- سیستمهای خبره و پشتیبان تصمیمگیری.
- سیستمهای استنتاج خودکار و موتورهای قوانین.
- حل معماها، پازلها و مسائل ترکیبیاتی.
- بخشی از زیرساخت برخی زبانها و ابزارهای هوش مصنوعی.
۹) جمعبندی
- در برنامهنویسی منطقی، برنامه مجموعهای از حقایق و قواعد است و موتور استنتاج با استفاده از قواعد منطقی به پاسخها میرسد.
- مفاهیم کلیدی شامل حقیقت، قاعده، پرسوجو و شیوههای مختلف استنتاج (به جلو و به عقب) است.
- این پارادایم برای مسائل قاعدهمحور و استنتاج منطقی بسیار مناسب است و دید متفاوتی نسبت به طراحی و پیادهسازی برنامهها ارائه میدهد.