**قوانین محدودیت و برخورد** (به انگلیسی: Constraint Handling Rules) Chr، یک توسعه زبان برنامه‌نویسی توصیفی است، که در سال ۱۹۹۱ توسط تام فراویرث (به انگلیسی: thom frahwirth) معرفی شد. با وجود آن که اصالتاً برای توسعه (نمونه روسیه ی) سیستم‌های برنامه‌نویسی محدود طراحی شده بود chr بارشد زیادی به عنوان یک زبان برنامه‌نویسی همه منظوره سطح بالا مورد استفاده قرار می‌گیرد. دامنه‌های اولیه نرم‌افزار chr سیستم‌های منطقی مبتنی بر حدس، سیستم‌های چند عامله، پردازش زبان‌های طبیعی، کامپایل، زمان‌بندی، استدلال‌های زمانی – کلامی، آزمایش، بررسی و سیستم‌های برای تایپ بود.
هر چند chr یک ماشین تورینگ کامل است، اغلب به عنوان یک زبان برنامه‌نویسی مستقل مورد استفاده قرار نمی‌گیرد، بلکه برای گسترش یک زبان میز بان به وسیله محدودیت می‌پردازد.
زبان‌های کنونی شامل پرولوگ، جاوا، هاسکل می‌شوند؛ که در بین آن‌ها پرولوگ عامه پسندترین زبان میز بان است و chr در بسیاری از نسخه‌ها ی پرولوگ قرار داده شده است
یک برنامه chr، که گاه یک بررسی کننده محدودیت نامیده می‌شود، ترکیبی از قوانین مفهومی، ساده‌سازی گسترش و ترکیبی از ساده‌سازی گسترش و اصل‌های محدودیت هاست. اندوخته محدودیت‌های یک‌چند مجموعهای است. بر خلاف prolog قوانین چند مفهومی اند و زمان اجرا مفهوم آن‌ها انتخاب شده و اجرا می‌شوند.
تلاقی
اغلب برنا مه‌های chr نیازمند آن اند که پروسه بازنویسی همه ریزی شود. در غیر این صورت یک مسئله نا معین و غیرقابل پیش بینی می‌باشد. ایجاد تلاقی معمولاً با پیروی از یه خصیصه زیر انجام می‌شود.
یک برنامه chr محلا تلاقی است اگر همه جفت‌های بحران آن قابل اتصال باشند.
یک برنامه chr تمام شدنی است اگر محاسبات نا محدود آن نباشد.
یک برنامه تمام شدنی chr تلاقی است، اگر همه جفت‌های آن قابل اتصال باشند.
مثال
برنامه SWL\_PROLOG زیر شامل ۴ قاعده chr می‌شود که یک بررسی کننده برای کوچک‌تر مساوی را طراحی می‌کند .

- use\_module(library(chr)).
- op(۵۰۰، xfx، leq).
- chr\_constraint leq/2.
٪ X leq Y means variable X is less-or-equal to variable Y

reflexivity @ X leq X <=> true.
antisymmetry @ X leq Y ، Y leq X <=> X=Y.
idempotence @ X leq Y \ X leq Y <=> true.
transitivity @ X leq Y ، Y leq Z ==> X leq Z.

قاعده اول که بازتابی نامیده می‌شود (نام قواعد اختیاری هستند) یک قاعده یک طرفه ساده‌سازی است این قاعده محدودیت‌های با فرم A leg A را از انبار محدودیت‌ها حذف می‌کند. قاعده دوم، تقارنی یک قاعده ساده‌سازی هر طرف است. بین قاعده دو محدودیت معنایی leg را با یک محدودیت متناظر برابری عوض می‌کند از بررسی شده تک سازه prolog. قواعد ساده‌سازی منجر به برابری منطقی می‌شوند. (همان‌طور که درآمده است) قاعده سوم یک ترکیب ساده‌سازی و تولید است که نسخه‌های تکراری مشابه یک محدودیت یکسان را حذف می‌کند. این گونه قواعد معمولاً به دلیل معنا یی چند مجموعه‌ای chr نیاز ش د.
قاعده آخر یک قاعده تولید است که محدودیت‌های مشابه را اضا فه می‌کند. قواعد تولید مفاهیم منطقی می‌شود.
اجرا: اعمال کامل قواعد روی صف داده شده می‌شود. برای مثال اگر در خواست داده شده Aleg B، B leg C، C leg A، باشد.
قاعده تعدی A leg C را اضافه می‌کند. سپس اعمال متقارنی A leg C، C leg A، با A=c جابه‌جا می‌شوند.
حال قاعده متقارنی قابل اعمال بر قاعده دوم در خواست اصلی می‌شود. حال همه محدودیت‌های CHR حذف شده پس هیچ قاعده دیگری فابل اعمال نیست و جواب A=C، B=C بازگردانده می‌شود.

منابع
-----

ویکی‌پدیای انگلیسی

مطالعهٔ بیشتر
-------------

* The CHR Home Page بایگانی‌شده در ۲۹ دسامبر ۲۰۱۰ توسط Wayback Machine
* CHR Bibliography
* The CHR mailing list
* The K.U.Leuven CHR system[*پیوند مرده*]
* WebCHR -- a CHR web interface