Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>
 george boole

논리학

논리학은 플라툰의 제자인 아리스토텔레스를 통해서 완성되었다고 보고 있다. 물론 그 이전에도 특히 변증법의 발견으로 논리학의 완성을 위한 토대가 만들어져왔지만, 이를 집대성 해서 완성시킨 학자로는 아리스토텔레스를 인정하고 있다.

그러나 변화가 많았던 다른 학문영역과는 달리, 논리학은 아리스토텔레스가 완성한 이후 19세기까지, 그러니까 거의 2000년이 넘는 시간동안 거의 발전이 없었다. 아리스토텔레스가 논리학을 거의 완벽하게 완성시켰기 때문이기도 하겠고, 다른 학문과 비교해서 진의를 명료하게 가져갈 수 있다는 장점 때문이기도 할 것이다. 큰 변화가 없었던 또다른 이유는 우리가 일상적으로 사용하는 언어로는 논리를 복잡하게 전개해 나가기가 쉽지 않았기 때문인 것으로 생각된다.

예를 들어 논리학에서의 모순율은 다음과 같은 명제들로 표현할 수가 있다.
  • 사람은 사람이 아닌게 아니다
  • 어떤 명제도 참이면서 동시에 거짓일 수는 없다
  • A 이면서 동시에 A가 아닌 것은 없다
모순율이라는 가장 기본적인 율조차 이렇게 다양하게 나타내어질 수 있다는 것은, 논리학을 배우고자 하는 자에게 부담이 될 것이다. 게다가 위의 명제의 경우 모순율의 가장 단순한 형태를 보여주고 있음에도 불구하고, 종종 잘못해석 될 수도 있을 것이다. 하물며 논리의 다양한 율들이 함께 사용되는 경우에는 파악은 고사하고 명제를 전달하는 것 조차 쉽지가 않을 것이다. 논리학이 언어로 기술됨으로써, 오랫동안 제자리 걸음이였다는 설은 일리가 있다.

기호논리학

이러한 논리학이 현대논리학으로 급격하게 발전한데에는 boole(George Boole)의 기호논리학이 결정적인 역할을 한다. 이는 수학에서 복잡한 자연현상을 간결하게 표현하기 위해서 기호를 사용하던걸, 논리학에도 사용함으로써 그 기능을 하게 된다. 위의 A는 A가 아닌게 아니다라는 모순율은 boole의 기호 논리학에 의해서 다음과 같이 간결하게 표현가능 하게 된다.

A~A = 0
모순율을 논리기호를 이용해서 나타낸 것이다. 해석하자면, A 와 ~A의 두가지가 동시에 될 수 없다는 것을 의미한다. 이제 우리는 모순율을 복잡하고 실수하기 쉬운 언어대신에 ~와 =의 기호를 사용해서 (마치 수학처럼)간결하고 명확하게 전달하고 설명할 수 있게 되었다.

논리학에 있어서 가장 기본이 되는 3개의 율들은 다음과 같이 표현된다.
A=A 동일률 A는 A와 같다.
A~A = 0 모순률 A이면서 동시에 A가 아닌 것은 있을 수 없다.
A+~A = 1 배중률 모든 것은 A이거나 A가 아닌것 중 하나다.

프로그래밍 언어와 boolean 연산자

프로그램은 컴퓨터 위에서 주어진 일을 실행하는 실행객체이다. 컴퓨터가 논리기계인 만큼 컴퓨터 위에서 실행되는 프로그램역시 미리 만들어진 - 프로그래밍된 - 순서에 따라서 논리계산을 함으로써, 주어진 일을 실행한다.

이러한 프로그램을 만드는 프로그래밍 언어역시 논리를 제대로 표현할 수 있어야 함은 당연한 요구사항으로, 모든 프로그래밍 언어들은 논리계산을 위한 논리 연산자를 제공한다. 이것을 boolean operater라고 한다. C(:12)언어를 비롯한 대부분의 언어가 boolean 연산자를 지원한다.

C언어의 경우 다음과 같은 논리 연산자를 제공한다.
  • && : AND
  • || : OR
  • ! : NOT
이 3가지 논리 연산자와 관계 연산자 이용하면, 논리학에서의 3가지 율인 동일률, 모순률, 배중률을 증명할 수 있다.
  • A = A : A == A
  • A ~ A : A && (!A)
  • A + ~A : A || (!A)
#include <stdio.h>

int main(int argc, char **argv)
{
  int A=0;

  printf("%d\n", A==A);
  printf("%d\n", A&&(!A));
  printf("%d\n", A||(!A));
}

참고

  1. 논리학 - 김준섭 :