موضوع مقاله: رزلوشن SLD | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # رزلوشن SLD | مقدمه: رزلوشن بند معین خطی انتخابی با کوته‌نوشت SLD قاعده استنتاج اصلی استفاده شده در برنامه‌نویسی منطقی است. | ## بخش 1: رزلوشن SLD | این رزلوشن یک روش اصلاحی از رزلوشن معمولی است و مزیت اصلی‌اش آن است که برای بندهای هورن، استوار و کامل ابطال است. قاعده رزلوشن SLD اگر به ما یک بند هدف به صورت زیر داده شود: و لیترال انتخابی ما باشد و نیز یک بند معین ورودی به صورت زیر داشته باشیم: که در آن لیترال مثبت (اتم) با اتم از لیترال انتخابی همان‌سازی شود، رزلوشن SLD یک بند هدف دیگر را نتیجه می‌دهد، که در این بند، لیترال انتخابی با لیترال‌های منفی بند ورودی جایگزین شده‌اند، و نیز جایگزینی همان‌سازی در آن اعمال شده‌است: به صورت ساده، در منطق گزاره‌ای، اتم‌های و همان هستند، و جایگزینی همان‌سازی پوچ و بی‌معنی است. با این حال، در حالت کلی‌تر، این جایگزینی همانی، برای آنکه دو لیترال همان‌سازی شوند، لازم است. هم در SL و هم در SLD، حرف «L» به این واقعیت اشاره دارد که یک اثبات رزلوشن را می‌توان به ترتیب خطی بندها محدود کرد: که در آن «بند ابتدا» یعنی یک بند ورودی است، و هر بند دیگر یک حل مسئله است که والدین آن بند قبلی است. اما در رزلوشن SL، والد دیگر یا یک بند ورودی است، یا یک بند جد (نیا)‌ی قبلی موجود در ترتیب است. حرف «S» هم در SL و هم در SLD به معنی آن است که تنها لیترالی که در هر بند دربرابر آن حل مسئله انجام می‌شود آن لیترالی است که به صورت یکتا، توسط یک قاعده گزینش یا تابع گزینش، انتخاب شده‌است. در رزلوشن SL، لیترال انتخابی محدود به همان لیترالی است که جدیدتر به بند معرفی شده‌است. در ساده‌ترین حالت، این تابع گزینش ورودی-آخر-خروجی-اول را می‌توان با ترتیبی که لیترال‌ها توسط آن نوشته شده‌اند، تعیین نمود، مثلاً پرولوگ از این روش استفاده می‌کند. با این حال، تابع گزینش در رزلوشن SLD همگانی‌تر از رزلوشن SL و رزلوشن پرولوگ است؛ یعنی هیچ محدودیتی روی لیترال گزینش شده وجود ندارد. تفسیر محاسباتی رزلوشن SLD در منطق بندی، یک انکار SLD، نشان‌دهنده آن است که مجموعه ورودی بندها صدق‌ناپذیر هستند. استنتاج بند از یک نتیجه خروجی، به کمک استنتاج پسگرد، از مجموعه جدیدی از زیرهدف‌ها است که از یک بند ورودی به عنوان فرایند کاهش هدف استفاده می‌کند. جایگزین همان‌ساز دو کار می‌کند: هم ورودی را از زیرهدف انتخابی به بدنه فرایند انتقال می‌دهد، و هم به صورت همزمان خروجی را از انتهای فرایند به زیرهدف‌های باقیمانده و گزینش نشده انتقال می‌دهد. | ## بخش 2: رزلوشن SLD | بند خالی یعنی یک مجموعه خالی از زیرهدف‌ها، نشان‌دهنده آن است که «عطف اولیه زیرهدف‌ها در بند اولیه» حل شده‌است. راهبرد رزلوشن SLD رزلوشن SLD به صورت ضمنی یک درخت جستجو از محاسبات مختلف را تعریف می‌کند، که در آن «بند هدف اولیه» با «ریشه درخت» مرتبط است. برای هر گره در درخت، و برای هر بند معین در برنامه که لیترال مثبت آن با لیترال انتخابی در بند هدف مرتبط با گره، همان‌سازی می‌شود، یک گره فرزند مرتبط با بند هدف وجود دارد که این گره فرزند، از رزلوشن SLD به دست آمده‌است. یک گره برگ (که هیچ فرزندی ندارد) موقعی گره موفقیت است که بند هدف مرتبط با آن بند خالی باشد. و موقعی یک گره شکست است که بند هدف مرتبط با آن غیرخالی باشد، و نیز لیترال انتخاب شده‌اش با هیچ لیترال مثبتی از هر بند ورودی همان‌سازی نشود. رزلوشن SLD از یک نظر غیرمعین است: زیرا راهبرد جستجو برای کاوش درخت جستجو را تعیین نمی‌کند. پرولوگ، درخت را به صورت اول-عمق جستجو می‌کند، یعنی یک شاخه در هر زمان بررسی می‌شود، و موقعی که به یک گره شکست می‌رسد، از پس‌گرد استفاده می‌کند. راهبردهای دیگر جستجو، شامل اول-سطح، اول-بهترین، و جستجوی شاخه و حد، هم ممکن هستند. بعلاوه جستجو را می‌توان به صورت ترتیبی یا موازی انجام داد، یعنی در حالت ترتیبی هر زمان یک گره را بررسی کنیم یا به صورت موازی باشد یعنی همزمان چندین گره بررسی شوند. رزلوشن SLD از این نظر که قاعده گزینش توسط قاعده استنتاج تعیین نمی‌شود، یک الگوریتم «غیر معین» است، این قاعده گزینش را می‌توان توسط یک فرایند تصمیم جداگانه تعیین کرد، که می‌تواند نسبت به موارد پویای فرایند اجرای برنامه حساس باشد. فضای جستجوی رزلوشن SLD یک درخت or است، که در آن شاخه‌های مختلف نشان دهنده محاسبات متفاوت هستند. در حالت برنامه‌های منطق گزاره‌ای، می‌توان SLD را به شیوه ای تعمیم داد که فضای جستجو یک درخت and-or بشود، که در آن گره‌ها توسط لیترال منفرد برچسب‌زنی می‌شوند، و نشان دهنده زیرهدف هستند، و این گره‌ها یا با عطف یا با فصل به یکدیگر پیوند می‌یابند. | ## بخش 3: رزلوشن SLD | به صورت کلی، موقعی که زیرهدف‌های عطفی، متغیرهای مشترک دارند، نمایش درخت and-or پیچیده‌تر است. مثال اگر به ما برنامه منطقی زیر داده شده باشد: q :- p p و هدف سطح بالای ما اینطوری باشد: q فضای جستجو شامل فقط یک شاخه است، که در آن q به p کاهش می‌یابد که آن هم به مجموعه خالی از زیرهدف‌ها کاهش می‌یابد، که این موضوع اشاره به محاسبات موفقیت می‌کند. در این حالت برنامه بسیار ساده است، و در آن نقشی برای تابع گزینش وجود ندارد و هیچ نیازی به جستجو هم نیست. در منطق بندها، برنامه توسط مجموعه‌ای از بندها نمایش می‌یابد: و هدف سطح بالا، توسط بند هدف با یک لیترال منفی منفرد نمایش می‌یابد: و فضای جستجو شامل یک ابطال منفرد است: که در آن نشان‌دهنده بند خالی است. اگر این بند به برنامه اضافه گردد: q :- r آنوقت یک شاخه اضافی به فضای جستجو اضافه می‌شود، که در آن گره برگ r یک گره شکست است. در پرولوگ، اگر این بند به جلوی برنامه اصلی اضافه شود، آنوقت پرولوگ از ترتیب نوشته شدن بندها استفاده می‌کند تا در شاخه‌های فضای جستجو، ترتیب بررسی را تعیین کند. پرولوگ این شاخه جدید را اول امتحان می‌کند، و شکست می‌خورد، و سپس پس‌گرد می‌کند تا شاخه منفرد برنامه اصلی را بررسی کند، و سپس موفق می‌شود. اگر اکنون بند زیر p :- p به برنامه اضافه شود، آنوقت درخت جستجو شامل یک شاخه نامتناهی می‌شود، و اگر این بند را اول امتحان کند، پرولوگ وارد یک حلقه نامتناهی می‌شود، و شاخه موفق را پیدا نمی‌کند. در SLDNF، بندهای هدف می‌تواند شامل نفی به صورت لیترال شکست باشد، که فرم دارند، که این لیترال فقط موقعی قابل گزینش است که شامل هیچ متغیری نباشد. موقعی که چنین لیترالی فاقد متغیری گزینش شود، یک زیراثبات (یا زیرمحاسبه) سعی می‌کند تا تعیین کند که «آیا یک انکار SLDNF با شروع از لیترال غیرمنفی متناظر به عنوان بند اولیه، وجود دارد یا نه». | ## جمع‌بندی | زیرهدف گزینش شده موقعی موفقیت است که زیراثبات شکست بخورد، و موقعی شکست می‌خورد که زیراثبات موفق باشد.