برنامه نویسی منطقی با محدودیت CLP

برنامه نویسی منطقی با محدودیت CLP
مسئله های ارضای محدودیت (CSP) میتوانند بصورت کلازهای معین کد شوند. پرولوگ استاندارد این مسئله ها را همانند الگوریتم عقبگرد حل میکند.
چون عقبگرد دامنه های متغیر را می شمارد، فقط با cspهای با دامنه ی متناهی کار میکند. در پرولوگ برای هر هدف با متغیرهای بی کران، باید تعداد متناهی از جواب ها وجود داشته باشد. CSPهایی با دامنه نامتناهی (مثل متغیرهای صحیح یا حقیقی) به الگوریتم های کاملا متفاوتی نیاز دارند مثل انتشار کران ها یا برنامه ریزی خطی.
مثال زیر را در نظر بگیرید. tringle(X , Y , Z) را محمولی تعریف میکنیم که در صورتی درست است که سه آگومان آن اعدادی باشند که در نامساوی مثلث صدق کنند:
tringle (X, Y, Z) : - X>0 , Y>0 , Z>0 , X+Y>=Z , Y+Z>=X , X+Z>=Y.
اگر پرس وجوی tringle(3 ,4 , 5) را از پرولوگ بخواهیم، با موفقیت انجام میشود. از طرف دیگر، اگر پرس وجوی tringle(3 ,4 , Z) را بخواهیم، هیچ جوابی پیدا نخواهد شد، زیرا هدف فرعی Z>=0 نمی تواند توسط پرولوگ اداره شود، زیرا در پرولوگ نمی توان مقدار بی کران را با صفر مقایسه کرد.
برنامه نویسی منطقی با محدودیت (Constraint Logic Programming ( CLP اجازه میدهد متغیرها به جای کران دار بودن محدودیت داشته باشند. جواب CLP مجموعه ی ویژه ای از محدودیت ها بر روی متغیرهای پرس وجو است که میتواند از پایگاه دانش به دست آید.
برای مثال جواب پرس وجوی tringle(3 ,4 , Z) برابر با محدودیت 7>=Z>=1 است. برنامه های منطقی استاندارد حالت خاصی از CLP است که در آن، محدودیت های جواب باید محدودیت های تساوی یعنی انقیادها باشند.
سیستم های CLP الگوریتم های مختلف حل محدودیت را برای محدودیتهای مجاز در زبان ارائه میکنند. بعنوان مثال سیستمی که نامساوی خطی را روی متغیرهای حقیقی مجاز میداند، ممکن است برای جواب آن محدودیت ها، حاوی الگوریتم برنامه ریزی خطی باشد. سیستم های CLP رهیافت قابل انعطاف تری را برای جواب پرس وجوهای برنامه نویسی منطقی استاندارد ارائه میکنند.
بعنوان مثال به جای عقبگرد عمقی چپ به راست، ممکن است از الگوریتم های کارآمدتر مثل ترتیب عطفی ابتکاری، عقبگرد، شرطی سازی مجموعه برش و غیره استفاده شود. سیستم های CLP عناصر الگوریتم های ارضای محدودیت، برنامه نویسی منطقی و بانک اطلاعاتی قیاسی را با هم ترکیب میکنند.
سیستم های متعدد برنامه نویسی منطقی با محدودیت تعریف شدند که به برنامه نویس اجازه میدهند کنترل بیشتری بر روی ترتیب جست وجو برای استنتاج داشته باشند. بعنوان مثال زبان MRS به برنامه نویس اجازه میدهد فوق قوانینی بنویسند که تعیین کنند ابتدا کدام عطف ها باید بررسی شوند. کاربر میتواند قانونی بنویسد که بگوید ابتدا هدفی با کمترین متغرها باید بررسی شود، یا قوانین خاص دامنه را برای محمولات ویژه بنویسد.