Gurugail Reasoning/Predicate Logic
Reasoning

Predicate Logic

어떤 지식 혹은 사실을 표현하는 데는 여러 가지 방법이 있다. 그 중 사람에게 가장 쉬운 것이 우리가 일상 사용하는 말 (자연어) 이다. 그러나 자연언어는 컴퓨터 상에서 사용하기에는 많은 문제점이 있다. 따라서 기호 (Symbol) 에 의한 사실의 표현방법에 관해 고찰해 보자. 우선, 명제논리 (Propositional Logic) 를 사용하여 사실을 표현할 수 있다. 모든 사실을 논리식(wff) 으로 표현함으로써 기호화할 수 있다. 그러나 기호화된 사실들이 서로 독립적이어서 상호 관계를 알 수 없고, 또 수량화시킬 수 없다는 단점이 있다. 이러한 단점은 술어 논리 (Predicate Logic)에 의해 보완될 수 있다. 다음에서는 예제를 통하여 술어 논리에 의한 사실의 표현에 대하여 검토한다 - 위 설명은 너무나도 명료하게 잘 되어 있어 aistudy.com에서 발췌 및 일부 수정함 -

Ex) '철수는 남자이다.' 에 대한 술어논리는 'man(철수)' 임

Syntax and Semantics of Predicate Logic

Atomic sentences

술어 논리에서 가장 기본적인 명제를 가리킨다. 예로 Brother (Richard, John) 를 들 수 있다. 위 예로 든 철수는 남자이다. 라는 명제도 Atomic sentence 이다. (The most basic sentences of Predicate Logic are Atomic Sentences)

Complex sentences

Atomic sentence에서 논리 연산이 추가된 명제 문장이 바로 Complex sentences 라 할 수 있다.

Ex) Richard와 John 은 형제가 아니다 라고 할 때, negative (\neg)연산이 앞에 붙어 oomplex sentence 가 된다 \negBrother (Richard, John)

Quantifiers (수량사?)

술어 논리에는 술어의 대상이 되는 개체가 있다. 술어논리의 명제가 참이냐 거짓이냐의 기준이 되는 데는 그 개체의 범위에 있어 한정하는 조건이 주어질 수 있다. 모든 개체에 대해서 참인 건인가? 혹은 참인 개체가 적어도 하나가 있는가에 해당한다.

  • Universal quantification(\forall, 전칭기호)
    '모든 왕은 사람이다' 와 같은 술어 논리로 표현할 때 수량사가 필요하며 '모든'에 해당하는 논리 연산 기호가 \forall로 표시한다.
    Ex) \forall x King(x) \wedge Person(x)
  • Existential quantification(\exists, 존재기호)
    '왕이 있다(존재한다)' 라는 것을 술어 논리로 표현한다면 존재 기호가 사용되어야 한다. Ex) \existsx King(x)
  • Nested quantifiers
    전칭기호와 존재기호가 함께 사용될 수 있는 구조이다. 주의할 점은 기호가 사용되는 순서에 따라 의미가 다르다는 것이다. 가령 \forallx\existsy Loves(x, y) 와 \existsy\forallx Loves(x, y)와는 다르다. 전자는 'Everybody loves somebody'의 의미이며 후자는 'There is someone who is loved by everyone'의 의미이다. 왜냐하면 복수개의 기호가 사용될때는 Nested(포함) 개념으로 \forallx\existsy Loves(x, y) 은 \forallx(\existsy Loves(x, y)) 로 이해할 수 있기 때문이다.
  • Connections between \forall and \exists
    \forall\exists와의 관계는 어떠할까? \forall\exists만으로는 관계 표현이 모호하다. 왜냐면 '모든(all)'의 부정은 '무(nothing)' 이기 때문이다. 하지만 명제와 섞이면 관계가 생긴다.
    \forallx \negLikes(x, Parsnips) 와 \neg\existsx Likes(x, Parsnips) 명제는 동치(equivalent) 이다.

Using Predicate Logic

술어논리를위와 같이 정의된(개발된?) 과연 어떻게 사용할 것인가? 그 활용처를 알아보자. 이미 여러 군데서 사용되고 있음을 확인할 수 있다. 술어논리가 얼마나 많은 기여를 했는지도 파악할 수 있다.

지식(knowledge)의 추가 및 질의

지식 추가(assertion)를 위해서는 아래와 같은 방식으로 TELL 인터페이스를 사용한다.
TELL (KB, King(John))
TELL (KB, \forallx King(x) => Person(x))
위 지식을 지반으로 ASK(KB, Person(John)) 이라고 질의하면 지식을 추론한 규칙 기반 시스템이라면 참(true)이라고 알려줄 것이다.

자연수, 집합 등

0 이상의 자연수의 이론을 표현할 때 술어 논리가 사용된다. 수학을 전공하신 분이면 너무나 익숙한 표현들이지만 술어 논리를 사용한다는 예로 적어본다.
NatNum(0) : 0은 자연수이다.
\foralln NatNum(n) => NatNum(S(n)) : 모든 n에 대하여, n이 자연수이면 그 다음수, S(n)도 자연수이다.
\forallm NatNum(m) => Add(0, m) = m : 모든 m에 자연수 0을 더하면 m이 된다. (0의 기능, 정의) 집합론에서는 특히 술어 논리(predicate logic)가 많이 사용된다. 아래 예로 열거해 본다.
\foralls Set(s) \leftrightarrow (s={}) \vee (\existsx, s2 Set(s2) \wedge s = {x|s2})

참고

  • http://www.aistudy.com
  • Artificial Intelligence A Modern Approach (Second Edition) / Stuart Russell & Peter Norvig / Prentice-Hall International Editions / ISBN 0-13-080302-2
  • 위키피디아