술어 논리

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색

술어 논리(predicate logic)는 \forall, \exists 등의 술어 기호를 사용하는 논리 구조를 의미한다. 일반적으로 1차 술어논리가 많이 사용되지만, 2차 논리 등 고차 술어논리도 사용된다.

함수논리 또는 양화(量化)의 논리라고도 하며, 명제 논리(命題論理)보다 확장된 논리이다.

명제논리와 술어논리의 차이[편집]

명제논리에서는 명제가 한 단위로 취급되어 그 내부구조 속으로 파고들어간 분석은 이루어질 수 없다. 예를 들어 다음과 같은 두 명제논리

'소크라테스는 사람이다'
'플라톤은 사람이다'

는 완전히 별개의 사실이며, 이것으로부터 '소크라테스'와 '플라톤'이 모두 사람이라는 유사점을 발견할 수 없다. 즉, 명제논리는 지식표현을 일반화할 수 없다. 따라서

'모든 사람은 죽는다'

라는 명제를 추가할 때, 이 세 명제로부터 소크라테스와 플라톤은 죽는다는 사실을 유도해 낼 수 없게 되는 것이다.

술어논리는 명제논리의 이러한 문제를 해결할 수 있다. 술어논리는 하나의 명제를 술어와 그 술어의 수식을 받는 객체로 분리하여 '술어(객체)'의형태로 표현한다. 예를 들면 앞의 세 명제는 다음과 같이 술어논리식으로 표현될 수 있다.

소크라테스는 사람이다 : Man(SOCRATES)
플라톤은 사람이다 : Man(PLATO)
모든 사람은 죽는다 : \forallx{man(x)->Die(x)}

여기서 Man은 '사람이다'라는 술어에 해당되고, SOCRATES와 PLATO는 각각 '소크라테스'와 '플라톤'을 나타내는 객체가 된다. 이때 SOCRATES와 PLATO는 모두 Man이라는 공통된 술어의 수식을 받고 있다. 이때 Man(SOCRATES), Man(PLATO)가 모두 참이라면 \forallx{man(x)->Die(x)}에 의해 Die(SOCRATES)와 Die(PLATO)가 모두 참이라는 사실을 유도해 낼 수 있다.

술어논리의 표현[편집]

하나의 명제를 술어와 객체로 분리하여 표현한다. 하나의 술어는 하나 이상의 객체를 수식할 수 있다. 또한 객체는 상수가 사용될 수도 있고 변수가 사용될 수도 있다.

x가 한국인이라면 x는 인간이다. : Korean(x) -> Man(x)

변수 x가 나타내는 객체의 집합 D를 정의역(domain)이라 한다. 이 정의역 (x의 범위) 내에서 “한국인”인 x만을 지정하는 기호로 '∃'와 '∀'를 사용할 수 있다. '∃x'는 '적어도 어느 하나의 x가 존재함'을 나타내며 '존재기호'라 부른다. '∀x'는 '모든 x에 대하여'라는 의미로 사용되며 '전칭기호'라 부른다.

'∃'와 '∀'를 총칭하여 '한정기호'라 하며 한정기호를 포함하고 있는 논리식에 대해서는 다음의 등식이 성립힌다.

  1. ~(∃x)P(x)≡(∀x){~P(x)}
  2. ~(∀x)P(x)≡(∃x){~P(x)}
  3. (∀x){P(x)∧Q(x)}≡(∀x)P(x)∧(∀x)Q(x)
  4. (∃x){P(x)∨Q(x)}≡(∃x)P(x)∨(∃x)Q(x)
  5. (∀x)P(x)≡(∀y)P(y)
  6. (∃x)P(x)≡(∃y)P(y)

또한 다음과 같이 술어논리에서는 객체사이의 관계를 나타내는 함수기호를 사용할 수 있다.

father(철수) 

는 '철수'의 아버지에 해당되는 객체를 나타낸다.