본문 바로가기
수학/🫥 이산수학

논리학 - 명제논리 (0차논리)

by 개발자 진개미 2021. 3. 26.
반응형

과학은 수학의 언어로 써져 있다고 한다. 이 말은 과학을 하는 과정에서 각종 수학적 기법을 사용하고, 과학적 관계를 묘사할 때도 수학의 언어와 수식을 사용하기 때문이다. 그렇다면 수학의 언어는 뭘까? 수학의 언어는 논리학이다. 오늘은 논리학에 대해서 알아보자. 

 


논리학의 기초

논리학은 뭐가 맞고 뭐가 틀린지를 엄밀하게 판단하기 위해 발전한 학문이다. 즉, 논리학의 대상은 참과 거짓이 확실해야 한다. 명제(Statement) 참이거나 거짓, 둘 중 하나인 문장이다. 

 

"1 + 1 = 2" 는 명제일까? 명제이다. 특히, 참인(사실인) 명제이다.

"1 + 1 = 3" 은 명제일까? 놀랍게도 이것 또한 명제이다. 특히, 거짓인 명제이다.

"1 + 1 은 쉽다" 는 명제일까? 아니다! 의견은 참과 거짓이 없기 때문에 명제가 아니다.

 

이처럼, 명제는 참인지 거짓인지 상관없이, 참과 거짓을 나눌 수 있으면 명제이다.

 

그렇다면, x > 1 은 어떨까? 명제일까? x > 1 은 명제가 될 가능성이 있지만, 명제는 아니다. 이런 문장을 빈사(부족하다는 뜻, Predicate)이라 부르고 x의 범위를 한정하면 명제가 되기 때문에 이에 대해 2장에서 자세히 다룰 것이다.

 

하지만 당연하게도, 현실세계에서도 그렇고, 수학에서도 1 + 1 = 2 같은 단순한 명제만을 다루지는 않는다. 명제는 서로 연결되어 더 복잡한 의미를 가진다. 명제를 연결해 주는 역할을 하는 것을 논리 연산자(Logical Connectives)라 한다. 연결사는 쉽게 말해, 그리고, 혹은, 그래서 같은 두 문장을 연결시켜 주는 말이다. 자주 쓰는 연결 사는 크게 5가지가 있다.

 

1. 논리부정 (Negation, ~) - 아니다(NOT)

2. 논리곱 (Conjunction, ∧) - 그리고(AND)

3. 논리합 (Disjunction, ∨) - 혹은(OR)

4. 함축 (Implication, ⇒) - 만약 - 이면 - 이다(If -, then -)

5. 동치 (Equivalence, ⇔) 같다(Equivalent)

 

용어가 너무 어렵다고 겁 먹지 말자! 논리부정은 아니다를 있어 보이게 한 용어이고, 논리곱은 그리고를 있어 보이게 한 것이다. 개인적으로는 정말 최악의 작명 센스라고 생각한다. 괄호 안에 있는 이상하게 생긴 기호들은 수학에서 연산자를 나타내는 기호이다. 코딩에서는 이를 다르게 쓰는 경우가 많다. C와 JAVA를 기준으로 논리곱은 &&로, 논리합은 ||로, 동치는 ==로 쓴다. 

 

아까 언급했다 싶이 명제는 참과 거짓 중 하나의 값을 가진다. 그렇기 때문에 논리 연산자는 명제의 참과 거짓이 연산자를 쓰면서 어떻게 바뀌는지로 정의되어 있고, 이를 예쁘게 나타낸 것을 진리표(Truth Table)라고 한다.

 

예를들어, ~T = F 이고, ~F = T 이다. 이를 표로 나타내면,

 

논리부정 ~
T F
F T

 

와 같다.

 

마찬가지로, 나머지 논리곱과 논리합의 진리표는 다음과 같다.

 

   
T T T
T F F
F T F
F F F

논리곱의 경우, 우리의 직관과 상당히 잘 맞아 떨어진다. 난 치킨과 피자를 먹을 거야! 라 할 경우 치킨과 피자 모두를 먹어야 이 문장은 참이다. 나머지 경우는 모두 거짓이다.

 

   
T T T
T F T
F T T
F F F

 

논리합의 경우는, 우리가 일상 생활에서 쓰는 혹은(OR)의 의미와는 조금 거리가 있다. 나는 치킨이나 피자를 먹을 거야!라고 한 경우, 우리가 말하고자 하는 것은 치킨이나 피자 둘 중 하나를 먹겠다는 것이다. 이런 의미의 혹은(OR)을 배타적 논리합(Exclusive OR)이라 한다. 용어가 어렵지만 쉽게 말해 둘 중 하나를 선택하라는 논리합이라는 것이다. 그에 반해 위와 같은 두 개 중 아무거나 하나라도 맞으면 참인 논리합을 Inclusive OR(포함되는 논리합, 한국 용어 없음)이라 한다. 배타적 논리합도 당연히 진리표를 만들 수 있고, 쓸 수도 있다. 하지만, 수학에서는 배타적 논리합을 쓸 이유가 없으므로 (배타적 논리합의 경우 참 거짓을 판명하기 위해 명제 두 개의 진리 값을 모두 알아야 하기 때문에 수학적으로는 의미가 없다. ) 자주 쓰이지 않는다.

 

함축은, 만약 ~하다면 ~하다라는 형식의 문장이다. 여기서 앞에 오는 명제를 전재, 뒤에 오는 명제를 결론이라고 한다. 즉, "전제 ⇒ 결론" 이다. 우선 진리표를 보자. 

 

   
T T T
T F F
F T T
F F T

 

우선 처음 2행은 직관적으로 당연해 보인다. 만약 어떤 참인 명제가 사실이고, 그 결과도 사실이라면 당연히 명제 그 자체가 사실이다. 만약 내가 사람이라면, 나는 눈코입이 있다. 내가 사람이라는 것도 참이고, 눈코입이 있는 것도 참일 경우, 당연히 이 문장은 참이다. 두 번째 행도 전재가 참이어도, 결론이 거짓이라면 문장 전체는 당연히 거짓이다. 만약 내가 사람이라면, 나는 날개가 있을 것이다. 이 문장은 명백히 거짓이다. 직관적이지 않는 것은 전재가 거짓일 경우, 어떤 결론이 오든 명제 전체가 참이라는 것이다. 왜 그럴까?

 

이렇게 생각해 보면 쉽다. 전재가 거짓일 경우 어차피 결론을 도출할 수 없다. 그렇기 때문에 결론을 볼 필요도 없이 명제 그 자체는 참인 것이다. 어차피 결론을 이끌어 낼 수 없으니, 문장 자체는 참이다! 만약 이 논리가 직관적으로 와 닿지 않더라도 상관없다. 논리학은 기본적으로 직관에서 영감을 받았지만, 어디까지나 수학의 언어로써 존재하는 것이기 때문에, 반드시 우리 직관과 일치하는 것은 아니다.

 

함축에서 특히 주의해야 할 것은, 전재와 결론이 반드시 연관되어 있을 필요는 전혀 없다는 것이다. 예를 들어, 내가 사람일 경우, 새는 날개가 있다는 문장은 참일까? 내가 사람인 것과 새가 날개가 있는 것은 전혀 관계가 없지만, 놀랍게도 이 문장은 참이다. 함축에서는 전재와 결론 간의 관계를 찾는 것이 아니다. 

 

동치는 엄청 간단하다. 동치는 두 명제 간의 진리값이 같을 경우에만 참이다. 진리표로 나타내면,

 

   
T T T
T F F
F T F
F F T

 

이다. 둘 다 참일 경우와, 둘 다 거짓인 경우에만 참이다.


논리 연산자 간의 순서 관계

논리 연산자는 서로 순서 관계가 있다. 산수를 할 때도 더하기 빼기보다 곱셈 나눗셈을 더 빨리 하는 것처럼, 논리 연산자도 순서 관계가 있다.

 

그 순서는 다음과 같다.

¬ -> -> -> ->

즉,  ¬ p  라는 문장이 있으면, P가 아니고 Q이다 가 된다.

 


여태까지 배운 걸 사용해 보자!

여태까지 우리는 명제가 뭔지, 논리 연산자가 뭔지, 진리표가 뭔지에 대해서 다뤘다. 그렇다면 실제로 이러한 개념은 어떻게 사용될까?

 

1. 일상생활에서 씌는 문장을 논리학의 언어로 번역하기

우리가 흔히 쓰는 문장을 논리학의 언어로 번역하는 게 쉽다고 생각할 수도 있다. 하지만 전혀 그렇지 않다. 일상에서 우리가 쓰는 말들은 논리적 연산자가 숨어 있기 때문이다. 예를 들어, 아래와 같은 문장을 논리의 언어로 번역해 보자.

 

  • 나는 시끄러운 걸 싫어한다. 하지만 파티는 좋아한다!

정답을 보기 전에 팬을 들고 한 번 하는 걸 강력히 추천한다. 수학은 특히 문제를 풀면서 배우는 게 많기 때문이다.

 

우선, 논리학에서는 명제를 보통 대문자로 나타낸다. P, Q, R 같은 대문자가 가장 흔히 쓰이지만, 반드시 그럴 필요는 없다. 여기서는

 

  • P: 나는 시끄러운 걸 싫어한다.
  • Q: 나는 파티를 좋아한다

로 해보자. 혹은,

 

  • P(x): 나는 x를 싫어한다.
  • Q(x): 나는 x를 좋아한다

로 놓고, P(시끄러운 것), Q(파티)로 해도 상관없다. 의미는 모두 같다.

 

위의 문장은 2개의 문장의 합으로 만들어져 있다. 즉, P(시끄러운 것) 하지만 Q(파티) 이다. 그런데, 하지만은 어떤 논리 연산자로 나타내야 할까? 우리는 그리고, 혹은, 아니다, 만약 ~이면 ~이다, 같다는 배웠어도, 하지만은 배운 기억이 없다. 조금 생각해 보면, 하지만은 그리고와 같은 의미인 것을 알게 될 것이다. 나는 시끄로운 것을 싫어한다 그리고 나는 파티를 좋아한다고 하면, 뉘앙스는 달라져도 처음 문장과 같은 의미가 된다. 즉, 정답은 P(시끄러운 것) ∧ Q(파티) 가 된다.

 

아래와 같은 문제도 풀어보자.

 

  1. 나는 갈아 만든 배를 좋아해. 근데 배는 싫어.
  2. 고양이는 물에 젖으면 사나워져.
  3. 모든 사람은 죽고, 나는 사람이라 나는 죽는다.
  4. 뭔가를 잘하면 좋아하게 될 거야.
  5. 증권사 리포트에서 중립은 곧 매도하라는 뜻이야.
  6. 아니야, 난 커닝하지 않았어.

위 문장은 반드시 사실인 것도 아니고, 무슨 의미인지 모를 수도 있다. 하지만 중요한 것은 이 문장들의 논리 구조에 집중하는 것이다.

 

2. 수학에서 나오는 명제를 논리학의 언어로 번역하기

앞에서도 언급했듯이, 논리학은 기본적으로 수학을 묘사하기 위해 처음 태어났다. 그렇기 때문에 당연히 수학의 정리들도 논리학의 언어로 쓸 수 있다.

 

  • 모든 두 짝수의 합은 짝수이다.

수학의 정리들은 대부분 ~이면 ~이다의 형식을 띄고 있다. 이 경우도 마찬가지이다. 수학의 정리들 또한 일상생활에서 씌이는 문장과 마찬가지로, 논리 연산자가 숨겨져 있는 경우가 많다. 하지만, 이렇게 다시 쓴다면 논리 연산자가 보일 것이다. 

 

  • x, y 가 짝수이면, x+y도 짝수이다.

즉, P(a) : a는 짝수이다. 이면, (P(x) ∧ P(y)) ⇒ P(x+y) 로 나타낼 수 있다.

 

아래와 같은 문제도 풀어보자.

 

  1. 모든 정수는 6으로 나눠지면, 2와 3으로도 나눠진다.
  2. 선형 독립은 두 이차원 백터의 Span은 2차원 공간이다.
  3. 두 홀수의 합은 짝수이다.

여기서도, 수학의 내용을 모르더라도 구조 자체에 집중해서 논리의 언어로 바꿔보자.


문제의 정답

1. 나는 갈아 만든 배를 좋아해 근데 배는 싫어.

 

P(x) : 나는 x를 좋아해

 

P(갈아만든 배) ∧ ~P(배)

 

2. 고양이는 물에 젖으면 사나워져.

 

P(x) : x가 물에 젖었다.

Q(x) : x가 사나워진다.

 

P(고양이) ⇒ Q(고양이)

 

3. 모든 사람은 죽고, 나는 사람이라 나는 죽는다.

 

P : 모든 사람은 죽는다.

Q : 나는 죽는다.

 

P⇒Q

 

4. 뭔가를 잘하면 좋아하게 될 거야.

 

P(x) : x를 잘한다.

Q(x) : x를 좋아한다.

 

P(모든 x) ⇒ Q(모든 x)

 

5. 증권사 리포트에서 중립은 곧 매도라는 뜻이야.

 

P : 증권사 리포트에서 중립

Q : 증권사 리포트에서 매도

 

P ⇔ Q

 

6. 아니야 나는 커닝하지 않았어.

 

P : 나는 커닝했어

 

~P


1. 모든 정수는 6으로 나눠지면, 2와 3으로도 나눠진다.

 

x | y : x는 y로 나눠진다.

 

x | 6  ⇒ ( x | 2 ∧ x | 3 )

 

2. 선형 독립인 두 이차원 백터의 Span은 2차원 공간이다.

 

P(x, y) : x, y는 선형 독립이다.

Q(x, y) : x, y의 Span은 2차원 공간이다.

 

P(x, y) ⇒ Q(x, y)

 

3. 두 홀수의 합은 짝수이다.

 

P(x) : x는 홀수이다.

Q(x) : x는 짝수이다.

 

P(x) ∧ P(y) ⇒Q(x+y)

 


논리학은 아직 시작도 안 했다고?

놀랍게도 여태까지 다룬 내용은 수학적으로 엄밀한 내용은 아닙니다. 하지만 여기서 수학적으로 더 엄밀한 버전의 논리학을 배우는 것은 지적 호기심 외에 실용성이 전혀 없으므로, 여기(예정)에서 찾아볼 수는 있지만, 흥미가 없는 분은 보지 않으셔도 앞으로의 내용을 이해하는데 전혀 지장이 없습니다.


 

반응형

댓글