logo

추론

여러 가지 추론 방법

  • Forward chaining: 이미 알려진 사실에서 출발해 적용 가능한 규칙을 계속 써서 새 결론을 만들어가는 자료 주도 추론
  • Backward chaining: 증명하고 싶은 목표에서 출발해 그 목표를 만족시키는 하위 조건들을 거꾸로 찾는 목표 주도 추론
  • Resolution: 문장들에서 서로 반대되는 리터럴을 제거해 새 절을 만들고, 최종적으로 모순을 유도하는 절 기반 추론

Forward Chaining

  • 개별 명제가 지식 베이스에 추가 → 적용 가능한 모든 규칙을 실행
  • 실행 결과는 지식 베이스에 새로운 명제로 추가
  • 더 이상 새로운 명제를 추론할 수 없을 때까지 위 과정이 계속
  • 필요한 경우 추론을 사전에 수행해서 저장할 수 있음
  • 불필요한 사실이 추론되고 저장될 수 있다는 단점
  • 규칙엔진(rule engine)에 주로 사용

Backward Chaining

  • 특정 명제를 증명하기 위해 규칙을 역방향으로 적용
  • 규칙을 적용하는데 필요한 모든 명제가 지식베이스에 있으면 증명 완료
  • 논리 프로그래밍에서 주로 사용
  • 비교) 가추법(abduction)
    • 참인 결론으로부터 알려지지 않은 전제를 추론
    • 가추법은 항상 옳은 것은 아님

분해법 Resolution

  • 모든 명제를 CNF(논리곱 정규형, Conjunctive Normal Form)으로 변형
    • CNF = 절 ∧ 절 ∧ ...
    • 절(clause) = 리터럴 ∨ 리터럴 ∨ ...
  • 절과 절을 짝지어, 부정 관계인 리터럴을 제거하여 하나의 절로 만듦

1차 술어 논리의 CNF 변환

  • 스콜렘화: 존재양화사가 있는 경우, 함수 형태로 변형(아래에서 F, G)
  • 동물을 사랑하는 모든 사람은 누군가에게 사랑받는다
    • Animal(F(x)) ∨ Loves(G(x), x)
    • ¬Loves(x, F(x)) ∨ Loves(G(x), x)
  • 동물을 죽이는 모든 사람은 누구에게도 사랑받지 못한다
    • ¬Loves(y, x) ∨ ¬Animal(z) ∨ ¬Kills(x, z)
  • 잭은 모든 동물을 사랑한다
    • ¬Animal(x) ∨ Loves(Jack, x)
  • 잭이 튜나를 죽였거나 또는 호기심이 튜나를 죽였다
    • Kills(Jack, Tuna) ∨ Kills(Curiosity, Tuna)
  • 튜나는 고양이다, 고양이는 동물이다
    • Cat(Tuna)
    • ¬Cat(x) ∨ Animal(x)
  • 호기심이 튜나를 죽였을까?
    • ¬Kills(Curiosity, Tuna)

1차 술어 논리의 분해법

  • "호기심이 고양이를 죽이지 않았다"라는 명제를 가정하면
  • 모순적인 결론에 도달:
    • 아무도 잭을 좋아하지 않는다 ¬Loves(y, Jack)
    • 누군가 잭을 좋아한다 Loves(G(Jack), Jack)
  • 따라서 호기심이 고양이를 죽인 것으로 결론
Previous
의미 표현