2012-05-05 4 views
3

특정 프롤로그 문제에서 순방향 체인 커를 사용해야합니다. 바닐라 메타 인터프리터를 처음부터 구현하지 않으려합니다 (하지만 다른 옵션을 사용할 수없는 경우 수행해야 할 작업입니다). 메타 인터프리터를 사용하면 속도가 느려질 것이고 또한 좋은 구현이 주위에 있어야한다고 확신합니다. YAP 또는 SWI Prolog에 기본적이고 효율적인 전달 체인저가 포함되어 있는지 아는 사람이 있습니까? 그렇다면 설치 방법/사용법에 대한 포인터가 크게 감사 할 것입니다.YAP 프롤로그에서 전방 체인?

이 두 Prolog 엔진에서 네이티브 포워드 체인커를 사용할 수없는 경우 다른 사람이 외부 Prolog 라이브러리로 사용할 수있는 바닐라 메타 인터프리터를 기반으로 한 좋은 오픈 소스 구현을 추천 할 수 있습니까?

미리 감사드립니다.

답변

3
모두의 구현을 포함 YAP 및 SWI

구속 조건 처리 규칙 - http://dtai.cs.kuleuven.be/projects/CHR/ - 전진 체인 규칙 시스템입니다.

특정 문제와 관련하여 성능에 대해 말할 수는 없지만 CHR은 효율적이라고 알려져 있습니다 (CHR 사이트에서 링크 된 논문 참조).

CHR에는 Java, Haskell 및 C 구현도 포함되어 있으므로 나중에 더 나은 성능이 필요한 경우 규칙을 해당 언어 중 하나로 쉽게 이식 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. @NickMain. 패키지가 기본적으로 YAP 설치에 포함되어 있는지 알고 있습니까? 효율성과 관련된 한 가지 질문 : 어떻게 든 YAP와 같이 고도로 최적화 된 Prolog 엔진에서 구현 된 포워드 체인저는 Java 또는 C와 같은 논리적 언어로 된 동일한 소프트웨어보다 빠르다고 생각했습니다. 반드시 그런 것은 아니겠습니까? – Sergio

+0

YAP 설명서에는 CHR - http://www.dcc.fc.up.pt/~vsc/Yap/documentation.html#CHR에 대한 섹션이 포함되어 있습니다. SWI에서는'-use_module (library (chr)) '만 필요하다. –

+2

CHR의 C 구현에 대한 논문 중 하나는 SWI, Java 및 C 버전을 비교하는 벤치 마크를 포함한다. http : //people.cs.kuleuven .be/~ pieter.wuille/static/chr07.pdf. SWI와 Java는 비슷하지만 C는 훨씬 빠릅니다. –

4

해시 체인과 포워드 체인을 최소 논리라는 측면에서 설명하고 해상도 정리의 관점에서 설명하지 않겠습니다. Normal backward chaining 프롤로그 룰은 최소 논리의 왼쪽 함축 도입 규칙의 적용으로 볼 수 있습니다. 동일한 규칙은 지금을 모델링하는 데 사용할 수 있습니다

-------- (Id) 
P |- P   G, A -> P |- A 
--------------------------------- (Left ->) 
     G, A -> P |- P 

: 그러니까 기본적으로 우리가 목표 P 및 규칙 A-> P있을 때, 결합 된 추론 규칙은 우리가 목표 A로 목표 P를 대체 할 수 있음을 말한다 순방향 연쇄 어플리케이션. 이번에는 목표 P가 없지만 조건 A가 전제에서 구체화되었습니다. 규칙 A -> P가있을 때이 규칙은 헤드 P를 구체화하도록 라이센스를 부여합니다. 다음과 같이 결합 된 추론 규칙을 읽 우리의 작은 프로그램의

------- (Id) 
A |- A   G, A, A -> P, P |- B 
--------------------------------------- (Left ->) 
     G, A, A -> P |- B 

생각은 완전히 fixpoint F (M) = 전방 체인 프로세스의 M을 계산하는 것이다. 우리가하는 일은 M0, M1, M2 등의 반복을 계산하는 것입니다. 프로세스가 유한 한 결과로 끝나는 경우에만 작동합니다. 연역적 데이터베이스로부터 Mn + 1과 Mn 사이의 델타 만 계산한다는 아이디어를 채택했습니다. 비교적 적은 노력으로 F (Mn) \ Mn = G (Mn \ Mn-1, Mn-1)이되도록 G를 찾을 수 있습니다.

중복이 현재 제거되지 않으므로 순환 데이터에서 G의 현재 구현이 불안정해질 수 있습니다. 사실 제거를 허용하는 전진 체인저에서는 중복을 제거하기 위해 특별한 전진 규칙을 사용할 수 있습니다. Fullblown 순방향 연쇄 시스템은 사실을 제거 할 수 있어야하며, 제약 조건 해결 시스템을 구현하는 데에도 사용할 수 있습니다.

그러나 간단한 생각과 그에 따른 단순한 코드로 지금 당장 떠날 수 있습니다. f 함수에서

G 코드 (델타/2) (일본어 규칙)
http://www.xlog.ch/jekejeke/forward/delta.p

을 장난감 전문가 시스템 전방 추론
http://www.xlog.ch/jekejeke/forward/expert.p