본문 바로가기

추론 규칙과 논증의 타당성

전제에서 결론을 이끄는 논증이 타당하다는 것이 무엇인지 정하고, 진리표로 타당성을 검사하는 함수를 만듭니다. 긍정논법과 부정논법 같은 추론 규칙, 그럴듯하지만 틀린 후건 긍정과 전건 부정, 여러 줄로 이어지는 논증과 양화사가 있는 추론을 다룹니다.

"오류가 생기면 경고등이 켜진다. 경고등이 켜졌다. 따라서 오류가 생겼다." 이 말은 그럴듯하게 들리지만, 경고등은 점검 중일 때처럼 다른 이유로도 켜질 수 있습니다. 앞의 두 문장이 모두 참이어도 마지막 문장은 거짓일 수 있는 것입니다. 이 글에서는 조건명제를 바탕으로, 몇 개의 문장에서 결론을 이끄는 과정이 정당한지를 판단하는 방법을 익힙니다. 이 판단은 다음 장에서 증명을 쓸 때 한 줄 한 줄을 확인하는 기준이 됩니다.

전제와 결론, 그리고 타당성

몇 개의 명제에서 다른 명제를 이끌어 내는 것을 논증(argument)이라 하고, 근거가 되는 명제들을 전제(premise), 이끌어 낸 명제를 결론(conclusion)이라고 합니다. 전제가 모두 참인 모든 경우에 결론도 반드시 참이면, 그 논증은 타당하다(valid)고 합니다. 진리표로 말하면, 모든 전제가 참인 줄들을 골랐을 때 그 줄들에서 결론이 하나도 빠짐없이 참이어야 합니다.

타당하다는 것은 전제가 실제로 참이라는 뜻이 아니라는 점에 주의해야 합니다. "모든 새는 날 수 있다. 펭귄은 새다. 따라서 펭귄은 날 수 있다"는 타당한 논증이지만, 첫 전제가 사실이 아니므로 이 논증만으로는 결론이 사실이라고 말할 수 없고, 실제로 펭귄은 날지 못합니다. 전제가 거짓이어도 결론이 우연히 참일 수는 있으므로, 전제가 거짓이라는 것에서 결론이 거짓이라고 이끌면 뒤에서 볼 전건 부정과 같은 잘못이 됩니다. 타당성은 전제와 결론 사이의 연결이 올바른지만을 말합니다. 결론을 믿으려면 논증이 타당하고 전제도 실제로 참이어야 합니다.

진리표로 타당성 검사하기

명제가 몇 개 안 된다면 진리표의 모든 줄을 계산해 타당성을 기계적으로 검사할 수 있습니다. 아래의 counterexamples는 전제가 모두 참이면서 결론이 거짓인 줄, 곧 반례를 모두 찾아 돌려줍니다. 반례가 하나도 없으면 타당한 논증이고, 하나라도 있으면 타당하지 않습니다.

from itertools import product


def implies(p, q):
    return (not p) or q


def counterexamples(premises, conclusion, count):
    rows = []
    for values in product([True, False], repeat=count):
        if all(premise(*values) for premise in premises) and not conclusion(*values):
            rows.append(values)
    return rows


arguments = {
    "긍정논법": ([lambda p, q: implies(p, q), lambda p, q: p], lambda p, q: q),
    "부정논법": ([lambda p, q: implies(p, q), lambda p, q: not q], lambda p, q: not p),
    "후건 긍정": ([lambda p, q: implies(p, q), lambda p, q: q], lambda p, q: p),
    "전건 부정": ([lambda p, q: implies(p, q), lambda p, q: not p], lambda p, q: not q),
}
for name, (premises, conclusion) in arguments.items():
    print(name, counterexamples(premises, conclusion, 2))
긍정논법 []
부정논법 []
후건 긍정 [(False, True)]
전건 부정 [(False, True)]

전제 P→QP\to Q와 P에서 Q를 이끄는 긍정논법(modus ponens)은 반례가 없어 타당합니다. "입장권이 유효하면 입장할 수 있다"와 "입장권이 유효하다"에서 "입장할 수 있다"를 이끄는 것입니다. P→QP\to Q와 ¬Q\neg Q에서 ¬P\neg P를 이끄는 부정논법(modus tollens)도 타당합니다. Q가 거짓인데 P가 참이라면 P→QP\to Q가 거짓이 되어 전제와 맞지 않기 때문이며, 이것은 대우를 쓰는 것과 같습니다.

그럴듯하지만 틀린 추론

처음의 경고등 논증은 P→QP\to Q와 Q에서 P를 이끄는 후건 긍정(affirming the consequent)입니다. 위 결과에서 P가 거짓, Q가 참인 줄이 반례로 나왔습니다. 이 줄에서 "오류가 생기면 경고등이 켜진다"는 가정이 거짓이라 참이고, "경고등이 켜졌다"도 참이지만, "오류가 생겼다"는 거짓입니다. 오류 없이 점검 때문에 경고등이 켜진 경우가 바로 이 줄입니다. 조건명제의 역을 원래 명제처럼 쓴 것이라 타당하지 않습니다.

P→QP\to Q와 ¬P\neg P에서 ¬Q\neg Q를 이끄는 전건 부정(denying the antecedent)도 같은 줄에서 틀립니다. "오류가 생기면 경고등이 켜진다. 오류가 없다. 따라서 경고등이 꺼져 있다"는 점검 때문에 경고등이 켜진 경우를 놓칩니다. 이것은 조건명제의 이를 원래 명제처럼 쓴 것입니다. 예외를 떠올리는 감각이 진리표에서는 반례 한 줄로 정확하게 드러납니다.

자주 쓰는 추론 규칙

타당함이 이미 확인된 짧은 논증들에는 이름이 붙어 있어서, 긴 논증을 이 규칙들의 연결로 적을 수 있습니다.

전제결론이름
P→QP\to Q, PPQQ긍정논법
P→QP\to Q, ¬Q\neg Q¬P\neg P부정논법
P→QP\to Q, Q→RQ\to RP→RP\to R가언 삼단논법
P∨QP\lor Q, ¬P\neg PQQ선언 삼단논법
P∧QP\land QPP단순화
PP, QQP∧QP\land Q결합

가언 삼단논법은 조건명제를 이어 붙이는 규칙이고, 선언 삼단논법은 둘 중 하나가 참인데 하나가 거짓이면 나머지가 참이라는 규칙입니다. 모두 앞의 counterexamples로 반례가 없음을 확인할 수 있습니다.

여러 줄로 이어지는 논증

전제가 P→QP\to Q, Q→RQ\to R, ¬R\neg R일 때 ¬P\neg P를 이끌어 보겠습니다. 먼저 Q→RQ\to R과 ¬R\neg R에 부정논법을 써서 ¬Q\neg Q를 얻습니다. 다음으로 P→QP\to Q와 방금 얻은 ¬Q\neg Q에 다시 부정논법을 써서 ¬P\neg P를 얻습니다. 결론이 한눈에 보이더라도 이렇게 한 줄마다 어떤 전제와 어떤 규칙을 썼는지 적어 두면, 어디서 무엇을 썼는지 다른 사람이 확인할 수 있습니다.

경우를 나누는 논증도 자주 씁니다. 전제가 P∨QP\lor Q, P→RP\to R, Q→RQ\to R이면 R을 이끌 수 있습니다. P가 참인 경우에는 P→RP\to R로 R을 얻고, Q가 참인 경우에는 Q→RQ\to R로 R을 얻습니다. P∨QP\lor Q에 따라 둘 중 적어도 한 경우는 반드시 일어나므로, 어느 경우든 R이 참입니다. 둘 다 참인 경우도 두 경우에 모두 들어가 있으므로 빠진 경우가 없습니다.

from itertools import product


def implies(p, q):
    return (not p) or q


def counterexamples(premises, conclusion, count):
    return [values for values in product([True, False], repeat=count)
            if all(premise(*values) for premise in premises) and not conclusion(*values)]


chain = [lambda p, q, r: implies(p, q), lambda p, q, r: implies(q, r), lambda p, q, r: not r]
cases = [lambda p, q, r: p or q, lambda p, q, r: implies(p, r), lambda p, q, r: implies(q, r)]
print(counterexamples(chain, lambda p, q, r: not p, 3))
print(counterexamples(cases, lambda p, q, r: r, 3))
[]
[]

진리표 검사는 명제가 몇 개일 때는 확실하지만, 명제가 n개이면 줄이 2ⁿ개라서 명제가 많아지면 쓸 수 없습니다. 그래서 수학과 컴퓨터 과학에서는 타당하다고 알려진 규칙들을 한 줄씩 이어 붙이는 방식으로 논증을 쓰고, 이것이 다음 장에서 다룰 증명입니다.

양화사가 있는 추론

양화사가 들어 있는 명제에도 추론 규칙이 있습니다. ∀x P(x)\forall x\,P(x)가 참이면 정의역의 어떤 특정한 원소 a에 대해서도 P(a)P(a)를 이끌 수 있습니다. "모든 정수의 제곱은 0 이상이다"에서 "(−3)2(-3)^2은 0 이상이다"를 이끄는 것입니다. 이것을 전칭 예화(universal instantiation)라고 합니다.

반대로 ∃x P(x)\exists x\,P(x)에서는 아무 원소에 대해서나 P(a)P(a)를 이끌 수 없습니다. 그런 원소가 적어도 하나 있다는 것만 알 뿐, 어느 것인지는 모르기 때문입니다. 그래서 존재 명제를 쓸 때는 그 원소에 c처럼 새 이름을 붙이고 "P(c)P(c)인 c가 있다"에서 논증을 이어 갑니다. 이때 c는 앞에서 이미 다른 뜻으로 쓴 이름이면 안 되고, P(c)P(c) 말고는 c에 대해 아무것도 가정하면 안 됩니다. 예를 들어 "짝수인 소수가 있다"에서 그 수를 c라 부르고 c가 3보다 크다고 덧붙이면, 근거 없는 가정을 더한 것이 됩니다.

정리

  • 논증이 타당하다는 것은 전제가 모두 참인 모든 경우에 결론도 참이라는 뜻이며, 전제가 실제로 참이라는 뜻은 아닙니다.
  • 명제가 적으면 진리표의 모든 줄을 계산해, 전제가 모두 참이고 결론이 거짓인 반례가 있는지로 타당성을 검사할 수 있습니다.
  • 긍정논법과 부정논법은 타당하지만, 후건 긍정과 전건 부정은 P가 거짓이고 Q가 참인 반례가 있어 타당하지 않습니다.
  • 긴 논증은 가언 삼단논법, 선언 삼단논법 같은 규칙을 한 줄씩 이어 쓰고, 경우를 나누어 각 경우에서 같은 결론을 얻을 수도 있습니다.
  • 전칭 명제에서는 특정한 원소에 대한 명제를 이끌 수 있지만, 존재 명제에서는 새 이름의 원소 하나를 잡고 그 성질 말고는 아무것도 가정하지 않아야 합니다.

연습 문제

1. 경우를 나누는 논증

전제 P∨QP\lor Q, P→RP\to R, Q→RQ\to R에서 R을 이끄는 논증을 말로 설명하고, 둘 다 참인 경우가 빠지지 않았는지 확인하세요.

해설 보기

P가 참인 경우에는 P→RP\to R에 긍정논법을 써서 R을 얻고, Q가 참인 경우에는 Q→RQ\to R에 긍정논법을 써서 R을 얻습니다. P∨QP\lor Q가 참이므로 P와 Q 가운데 적어도 하나는 참이고, 따라서 적어도 한 경우가 일어나 R이 참입니다. P와 Q가 모두 참인 경우는 P가 참인 경우에도 들어가므로 따로 다루지 않아도 됩니다. 본문의 counterexamples로 계산해도 반례가 없습니다.

2. 두 논증의 판정

"P→QP\to Q, ¬Q\neg Q, 따라서 ¬P\neg P"와 "P→QP\to Q, Q, 따라서 P"가 각각 타당한지 판정하고 이유를 설명하세요.

해설 보기

첫째는 부정논법이라 타당합니다. Q가 거짓일 때 P→QP\to Q가 참이려면 P도 거짓이어야 하므로, 두 전제가 참인 줄에서는 늘 ¬P\neg P가 참입니다. 둘째는 후건 긍정이라 타당하지 않습니다. P가 거짓이고 Q가 참인 줄에서 두 전제는 모두 참인데 결론 P는 거짓이기 때문입니다. 첫째는 대우를, 둘째는 역을 쓴 것으로 생각하면 기억하기 쉽습니다.

3. 일상의 논증 판정하기

"비가 오면 경기가 취소된다. 경기가 취소되지 않았다. 그러므로 비가 오지 않았다."와 "비가 오면 경기가 취소된다. 비가 오지 않았다. 그러므로 경기가 취소되지 않았다."를 각각 판정하세요.

해설 보기

P를 "비가 온다", Q를 "경기가 취소된다"라고 하면 첫째는 P→QP\to Q와 ¬Q\neg Q에서 ¬P\neg P를 이끄는 부정논법이라 타당합니다. 둘째는 P→QP\to Q와 ¬P\neg P에서 ¬Q\neg Q를 이끄는 전건 부정이라 타당하지 않습니다. 비가 오지 않았어도 선수가 다치는 등 다른 이유로 경기가 취소될 수 있고, 이것이 P가 거짓이고 Q가 참인 반례입니다.

반례를 찾기 어려우면 진리표를 다시 만들어 보세요. 다음 장의 직접증명, 대우와 모순에서는 이 장의 추론 규칙을 이어 붙여 수학적 명제를 증명하는 방법을 다룹니다.