制約論理プログラミング
Constraint Handling Rules(CHR)は1991年にThom Frühwirthが発表した、ユーザ定義の制約が書けるように設計された宣言型プログラミング言語である 。 多重集合の書換え規則に基づく制約処理モデルを特徴とし、ルールにより制約をより単純な制約に書き換えることで、さまざまな制約下での解を求める。CHRはチューリング完全だが、 独立した言語としてではなく既存言語の拡張機能として、主にPrologなどのホスト言語上に実装されたライブラリとして提供される。 CHRの特徴は以下の通りである。
頭部にゴール(制約)の多重集合が書ける
多重集合書換えに基づく言語の中では強力
多くの応用プログラムがある
CHRは単純化規則(Simplification rule)と伝播規則(Propagation rule)、およびそれらの組み合わせである単純化伝播規則("Simpagation" rule)からなる。
単純化規則(Simplification rule)は、複数の制約を論理的に等価なより単純な制約に変換する。(例えば、X≦Y, Y≦X ⇔ X=Y. や X≦X ⇔ true.)
伝播規則(Propagation rule)は、論理的には冗長だが単純化に結び付くような制約を新しく追加する。(例えば、X≦Y, Y≦Z ⇒ X≦Z.)