제약 조건 처리 규칙

Constraint Handling Rules
제약 조건 처리 규칙(CHR)
패러다임구속 로직, 선언적
설계자톰 프뤼와트
처음 등장한1991년; 31년 전(1991년)
웹 사이트constraint-handling-rules.org
영향을 받다
프롤로그

제약사항 처리 규칙(CHR)선언적인 규칙 기반 프로그래밍 언어로 1991년 Tom Frühwirth가 독일 [1][2]뮌헨에 있는 유럽컴퓨터산업연구센터(ECRC)와 함께 도입했습니다.원래 제약 프로그래밍을 위해 고안된 CHR은 문법 유도,[3] 유형 시스템,[4] 유괴적 추론, 다중 에이전트 시스템, 자연 언어 처리, 컴파일, 스케줄링, 공간-시간적 추론, 테스트검증에서 응용 프로그램을 찾습니다.

제약 조건 핸들러라고도 불리는 CHR 프로그램은 논리식의 다중 집합인 제약 조건 저장소를 유지하는 규칙 집합입니다.규칙을 실행하면 저장소에서 수식이 추가되거나 제거되어 프로그램 상태가 변경될 수 있습니다.주어진 제약 조건 저장소에서 규칙이 "발화"되는 순서는 그것의 추상적 의미론 및 그것의 정제[6]의미론에 따르면 결정론적([5]상향적 규칙 적용)이 아니다.

ChR은 튜링 [7]완전하지만, 그 자체로 프로그래밍 언어로 일반적으로 사용되는 것은 아닙니다.오히려 제약이 있는 호스트 언어를 확장하기 위해 사용됩니다.프롤로그는 지금까지 가장 인기 있는 호스트 언어이며 CHR은 SICStusSWI-Prolog를 포함한 여러 프롤로그 구현에 포함되어 있습니다.단, Haskell,[8] Java, C,[9] SQL [10]및 JavaScript에도 [11]CHR 구현이 존재합니다.프롤로그와 달리 CHR 규칙은 멀티헤드이며 포워드 체인 알고리즘을 사용하여 커밋 선택 방식으로 실행됩니다.

언어의 개요

CHR 프로그램의 구체적인 구문은 호스트 언어에 따라 달라지며, 실제로 프로그램은 일부 규칙을 처리하기 위해 실행되는 호스트 언어로 문을 포함합니다.호스트 언어는 논리 변수를 포함하여 용어를 표현하기 위한 데이터 구조를 제공합니다.용어는 제약조건을 나타내며, 이는 프로그램의 문제 영역에 대한 "사실"로 간주할 수 있습니다.전통적으로 Prolog는 호스트 언어로 사용되므로 데이터 구조와 변수가 사용됩니다.이 섹션의 나머지 부분에서는 CHR 문헌에서 흔히 볼 수 있는 중립 수학 표기법을 사용합니다.

그러면 CHR 프로그램은 제약조건 저장소라고 불리는 이러한 용어의 다중 집합을 조작하는 규칙으로 구성됩니다.규칙에는 다음 [5]세 가지 유형이 있습니다.

  • 단순화 규칙은 h, n 1,…, b , …, b, \의 형식을 가집니다.이러한 규칙은 , h, h, h_n합니다m} hold, 심플화 규칙은 헤드를 …, bb_에 다시 쓸 수 있습니다.
  • 전파규칙의 1,…, , 1, o, \,\입니다이러한 규칙은 헤드를 제거하지 않고 본문의 구속조건을 저장소에 추가합니다.
  • Simpagation 규칙은 단순화와 전파를 결합합니다. 1, h +1,… , n1,… , 1, … , \ , \ , + , \ ,} \ long , { , 머리와 간수들은 진실해야 합니다displaystyle보다 의 \ 제약조건은 전파규칙으로 유지됩니다.n - \ n -제약조건은 삭제됩니다.

Simpagation 규칙은 단순화와 전파를 포함하므로 모든 CHR 규칙은 형식을 따릅니다.

서 각 Hk, r (\H_}, H_}, 제약조건의 조합입니다. k r {\k}, {\ B에는 CHR 제약이 있으며 가드G {\ G 내장되어 있습니다. k r \k}, 만 비워둘 필요가 있습니다.

호스트 언어에는 용어에 대한 기본 제공 제약 조건도 정의해야 합니다.규칙의 가드는 기본 제공 제약 조건이기 때문에 호스트 언어 코드를 효과적으로 실행합니다.기본 제공 제약 조건 이론은 적어도 다음을 포함해야 합니다.true(항상 유지되는 제약),fail(절대 유지되지 않고 실패를 알리는 데 사용되는 제약 조건) 및 용어의 동일성(예:[7] 통일).호스트 언어가 이러한 기능을 지원하지 않는 경우 이러한 기능을 [9]CHR과 함께 구현해야 합니다.

CHR 프로그램의 실행은 초기 제약 조건 스토어에서 시작합니다.그런 다음 프로그램은 스토어에 대해 규칙을 대조하고 규칙을 적용하는 으로 진행되며 규칙이 더 이상 일치하지 않을 때까지(성공) 또는fail제약이 도출됩니다.전자의 경우, 호스트 언어 프로그램에 의해서 제약 스토어를 읽어내, 관심 있는 사실을 찾을 수 있다.매칭은 "단방향 통합"으로 정의됩니다. 즉, 방정식의 한쪽에서만 변수를 바인딩합니다.패턴 매칭은 호스트 언어가 [9]지원하는 통합 시 쉽게 구현할 수 있습니다.

프로그램 예시

프롤로그 구문에서 다음 CHR 프로그램은 덜 같거나 같은 제약조건에 대한 솔버를 구현하는 4가지 규칙을 포함합니다.규칙은 편의를 위해 라벨이 붙어 있습니다(CR에서는 라벨은 옵션입니다).

 % X leq Y는 변수 X가 변수 Y보다 작거나 같다는 것을 의미합니다.  반사성  @ X 레크 X <=> 진실의.  반대칭성 @ X 레크 Y, Y 레크 X <=> X = Y.  투과성 @ X 레크 Y, Y 레크 Z ==> X 레크 Z.  무능력  @ X 레크 Y \ X 레크 Y <=> 진실의. 

규칙은 두 가지 방법으로 해석할 수 있습니다.선언적 판독에서는 다음 세 가지 규칙이 부분 순서의 공리를 지정합니다.

  • 반사성: XX
  • 반대칭성: X y Y 및 Y x X이면 X = Y
  • 투과성: X y Y Y z Z이면 X z Z

3가지 규칙은 모두 암묵적으로 보편적으로 수량화되어 있습니다(대문자로 구분된 식별자는 Prolog 구문의 변수입니다).Idempotence 규칙은 논리적 관점에서의 반복이지만 프로그램의 두 번째 판독에 목적이 있습니다.

위의 내용을 읽는 두 번째 방법은 객체에 대한 사실(제한사항)의 집합인 제약사항 저장소를 유지하기 위한 컴퓨터 프로그램입니다.제약 조건 저장소는 이 프로그램의 일부가 아니지만 별도로 제공해야 합니다.규칙은 다음과 같은 계산 규칙을 나타냅니다.

  • 반사성은 단순화된 규칙입니다. 이것은 스토어에서 X x X 형식의 사실이 발견되면 제거될 수 있음을 나타냅니다.
  • 반대칭도 단순화 규칙이지만 두 의 헤드가 있습니다.저장소에서 X y Y 및 Y x X 형식의 두 가지 사실을 찾을 수 있다면(X와 Y일치함), 단일 팩트 X = Y로 대체할 수 있다.이러한 동등성 제약은 내장된 것으로 간주되며 일반적으로 기본 Prolog 시스템에 의해 처리되는 통합으로 구현됩니다.
  • 이동성은 전파 규칙입니다.단순화와 달리 제약 스토어에서 아무것도 제거하지 않고 대신 X y Y 및 Y z Z 형태의 팩트(Y 값이 동일)가 스토어 내에 있는 경우에는 제3 팩트 X z Z를 부가해도 된다.
  • 마지막으로, Idempotence는 단순화와 전파의 조합인 Simpagation 규칙입니다.중복된 사실을 발견하면 저장소에서 제거합니다.제약 조건 저장소가 여러 팩트 집합이기 때문에 중복이 발생할 수 있습니다.

지정된 쿼리

Aleq B, Bleq C, Cleq A

다음과 같은 변환이 발생할 수 있습니다.

전류 제약 제약에 적용되는 규칙 규칙 적용으로부터의 결론
A leq B, B leq C, C leq A 투과성 A leq C
A leq B, B leq C, C leq A, A leq C 반대칭성 A = C
A leq B, B leq A, A = C 반대칭성 A = B
A = B, A = C 없음.

트랜티비티 규칙에 따라A leq C그리고 나서, 반대칭 법칙을 적용함으로써,A leq C그리고.C leq A제거 및 교체됨A = C이제 원래 쿼리의 처음 두 가지 제약조건에 대해 반대칭 규칙을 적용할 수 있게 되었습니다.이것으로 모든 CHR 제약조건이 제거되어 더 이상의 규칙을 적용할 수 없습니다.A = B, A = C반환됨: 3가지 변수 모두가 동일한 개체를 참조해야 한다는 것을 CHR이 올바르게 추론했습니다.

CHR 프로그램 실행

특정 제약 조건 저장소에서 "발화"해야 하는 규칙을 결정하려면 CHR 구현에서 일부 패턴 일치 알고리즘을 사용해야 합니다.후보 알고리즘에는 RETE[12]TREAT가 포함되지만, 대부분의 구현에서는 [13]LEAP라고 하는 게으른 알고리즘을 사용합니다.

CHR의 시멘틱스의 원래 사양은 전적으로 비결정론적이었지만, Duck 등의 이른바 "정밀화된 운영 시멘틱스"는 애플리케이션 작성자가 프로그램의 [5][14]성능과 정확성을 실행 순서에 의존할 수 있도록 비결정론의 대부분을 제거했다.

대부분의 CHR 어플리케이션에서는 재작성 프로세스가 합류할 필요가 있습니다.그렇지 않으면 만족스러운 할당을 검색하는 결과는 확정적이지 않고 예측할 수 없습니다.합류 확립은 보통 다음 3가지 [2]속성을 통해 이루어집니다.

  • 모든 크리티컬 가입 가능한 경우 CHR 프로그램은 로컬로 합류합니다.
  • 무한 연산이 없는 경우 CHR 프로그램을 종료라고 합니다.
  • 종단하는 CHR 프로그램은 모든 크리티컬 쌍이 가입 가능한 경우 합류합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ 톰 프뤼와트.심플화 규칙 소개내부 보고서 ECRC-LP-63, ECRC 뮌헨, 1991년 10월, 독일 구센/베를린, 구센/베를린, 프로그래밍 관련 워크숍 및 독일 다그스툴, 1991년 10월, 개서 및 제약에 관한 워크숍에서 발표.
  2. ^ a b 톰 프뤼와트.구속조건 처리규칙의 이론과 실천구속 로직 프로그래밍에 관한 특집호(P. Stuckey 및 K).메리어트, Eds), 로직 프로그래밍 저널, Vol 37(1-3), 1998년 10월.doi:10.1016/S0743-1066(98)10005-5
  3. ^ 달, 베로니카, 그리고 J. 에밀리오 미랄레스."엄브 문법: 문법 귀납을 위한 제약 해결"제9회 제약사항 처리규칙 워크숍의 진행. vol.기술 보고서 CW. Vol. 624. 2012.
  4. ^ 앨브스, 산드라, 그리고 마리오 플로리도."제약 처리 규칙을 사용한 형식 추론"이론 컴퓨터 과학 분야 전자 노트 64 (2002) : 56 ~72 。
  5. ^ a b c Sneyers, Jon; Van Weert, Peter; Schrijvers, Tom; De Koninck, Leslie (2009). "As time goes by: Constraint Handling Rules – A Survey of CHR Research between 1998 and 2007" (PDF). Theory and Practice of Logic Programming. 10: 1. arXiv:0906.4474. doi:10.1017/S1471068409990123. S2CID 11044594.
  6. ^ Frühwirth, Thom (2009). Constraint handling rules. Cambridge University Press. ISBN 978-0521877763.
  7. ^ a b Sneyers, Jon; Schrijvers, Tom; Demoen, Bart (2009). "The computational power and complexity of constraint handling rules" (PDF). ACM Transactions on Programming Languages and Systems. 31 (2): 1–42. doi:10.1145/1462166.1462169. S2CID 2691882.
  8. ^ "CHR: Constraint Handling Rules library". 5 September 2021.
  9. ^ a b c Peter Van Weert; Pieter Wuille; Tom Schrijvers; Bart Demoen. "CHR for imperative host languages". Constraint Handling Rules: Current Research Topics. Springer.
  10. ^ "CHR2 to SQL converter". 15 March 2021.
  11. ^ CHR.js - JavaScript용 CHR 트랜스파일러
  12. ^ Miranker, Daniel P. (July 13–17, 1987). "TREAT: A Better Match Algorithm for AI Production Systems" (PDF). AAAI'87: Proceedings of the sixth National conference on Artificial intelligence. Seattle, Washington: Association for the Advancement of Artificial Intelligence, AAAI. pp. 42–47. ISBN 978-0-262-51055-4.
  13. ^ Leslie De Koninck (2008). Execution Control for Constraint Handling Rules (PDF) (Ph.D. thesis). Katholieke Universiteit Leuven. pp. 12–14.
  14. ^ Duck, Gregory J.; Stuckey, Peter J.; García de la Banda, María; Holzbaur, Christian (2004). "The refined operational semantics of Constraint Handling Rules" (PDF). Logic Programming. Lecture Notes in Computer Science. 3132: 90–104. doi:10.1007/978-3-540-27775-0_7. ISBN 978-3-540-22671-0. Archived from the original (PDF) on 2011-03-04. Retrieved 2014-12-23.

추가 정보

  • 크리스티안센, 헤닝"CHR 문법"논리프로그래밍 이론과 실천 5.4-5(2005) : 467-501.

외부 링크