2017-02-25 5 views
1

나는 하나∀X ∃Y r (X, Y), ∃X ∀Y r (X, Y)는 어떻게 표현하나요?

  • 및 FORALL 수식을 표현하는 방법을 알고 싶습니다; X ∃ Y의 R (X, Y)를; 및
  • ∃ X 및 FORALL; Y의 R (X, Y) 프롤로그

.


UPDATE (나의 이해는. 내 프롤로그 교과서에서 그들처럼 아무것도 찾을 수 없습니다, 프롤로그는이 공식을 표현할 수 있어야한다는 것입니다)

나는 j4n의 bur53의 정보 대답에서 수집하는 , Prolog에서 내 질문에 대한 대답은 다소 r의 성격에 달려있다.보다 구체적으로는 r의 주장이 속한 세트의 특성에 달려있다.

따라서 구체성을 위해 아래에서 내가 현재 관심이있는 두 가지 사례를 설명합니다 (그리고 정식으로는 정식입니다). (공교롭게도 FORALL 케이스 및 모두, X ∃ Y의 R (X, Y)는 사실과 ∃ X 및 FORALL; Y의 R (X, Y) 거짓이다.)을들 수 1가 r하자

케이스 명시 적으로 다음과 같은 두 가지 사실 (아무것도 더)에 의해 :

r(1, 2). 
r(2, 1). 

사례 2r는 (긍정적 인) 자연 번호에 대한 ≤을하자 N = {1, 2, 3, ... }. 따라서 r(1, Y)Y의 모든 허용 가능한 인스턴스화에 대해 true이지만, r(X, Y)Y의 모든 인스턴스에 대해 true가되도록 X이라는 인스턴스가 없습니다.

답변

1

도메인 관련 수량 기호를 사용하는 것이 가장 쉬운 방법은 X와 Y가 도메인 a (.)와 b (.)에 있다고 가정 할 수 있습니다. 다음과 같이 다음을 표현하는 것입니다 :

∀X (a(X) -> ∃Y (b(Y) & r(X, Y)))   (1) 
∃X (a(X) & ∀Y (b(Y) -> r(X, Y)))   (2) 

가 이제 함께 (&)/2이 바로 연계를 프롤로그 (,)/2. 그리고 암시 (->)/2에 대해 다음과 같은 논리적 동등성을 관찰하라. A → B == ~ (A & ~ B).

그래서 우리는 우리에게 실패 (+)와 같은 부정을 허용하는 경우 다음과 같이 우리가 (예를 들어 SWI-Prolog를) 많은 프롤로그 시스템에 사전 정의 된 메타 술어를 정의 할 수 있습니다/(1) 부정 (~)에 대한/1 :

forall(F, G) :- \+ (F, \+ G). 

여기에서 모든 변환을 허용하면 결국 두 개의 쿼리는 다음 Prolog 쿼리의 양을 가져옵니다. 하지 이러한 상황에서

?- forall(a(X), (b(Y),r(X,Y))). 
?- a(X), forall(b(Y), r(X,Y)). 

접근 방식은 일반적으로 데이터 로그를 위해 작동하지만 않습니다 : (.) ​​(.) A 또는 B가 무한 인 경우

  • .
  • 만약 r (.,.)은 추가 매개 변수를 갖습니다. 즉, 실패의 부정은 바인딩을 삭제합니다.
  • 고전적 추론이 필요하다면 여기에서 실패의 부정은 너무 약합니다.
  • 제약 조건이 관련되어 있으면 for/2 대신에 foreach/2가 필요할 수 있습니다.
  • 그 밖의 무엇?
관련 문제