2강 / 20강
진리표 — 모든 경우를 빠짐없이 적는 표
그리고 · 또는 · 아니다
명제 하나로는 할 수 있는 일이 별로 없습니다. 재미는 명제를 붙일 때 시작돼요.
| 이름 | 기호 | 파이썬 | 참이 되는 때 |
|---|---|---|---|
| 부정 | ¬p | not p | p 가 거짓일 때 |
| 논리곱 (그리고) | p ∧ q | p and q | 둘 다 참일 때 |
| 논리합 (또는) | p ∨ q | p or q | 하나라도 참일 때 |
| 배타적 논리합 | p ⊕ q | p != q | 둘이 서로 다를 때 |
여기서 꼭 짚고 갈 것 하나. 수학의 또는(∨)은 일상어와 다릅니다. "커피 또는 홍차"라고 하면 보통 둘 중 하나만 고르라는 뜻이지만, 논리의 ∨는 둘 다여도 참입니다. 둘 중 하나만 참일 때만 참인 것은 따로 이름이 있어요 — 배타적 논리합 ⊕입니다.
경우가 4개뿐이니 전부 적어 볼 수 있습니다 — 이것이 진리표입니다.
Python
브라우저에서 실행
진리표란
진리표(truth table)는 명제들이 가질 수 있는 모든 참·거짓 조합과
그 결과를 적은 표입니다. 명제가 n개면 줄 수는 2n개예요.
1개면 2줄, 2개면 4줄, 3개면 8줄, 10개면 1024줄.
이 "2의 거듭제곱"은 이 강의 내내 따라다닙니다. 컴퓨터가 비트 n개로
2n가지를 표현하는 것과 정확히 같은 이유예요.
같은 뜻인 두 식 — 동치
겉모습이 달라도 진리표가 완전히 같으면 두 식은 같은 명제입니다.
이것을 논리적 동치(logically equivalent)라 하고 ≡로 씁니다.
가장 유명한 동치가 드모르간 법칙(De Morgan's laws)입니다.
¬(p ∧ q) ≡ ¬p ∨ ¬q— "둘 다는 아니다" = "하나는 아니거나 다른 하나가 아니다"¬(p ∨ q) ≡ ¬p ∧ ¬q— "둘 다 아니다" = "이것도 아니고 저것도 아니다"
말로 들으면 헷갈리지만 진리표로 확인하면 1초입니다.
네 줄이 모두 같으면 증명 끝입니다. 이것이 '진리표에 의한 증명'이에요.
Python
브라우저에서 실행
항상 참, 항상 거짓
- 항진명제(tautology) — 어떤 경우에도 참. 예:
p ∨ ¬p("비가 오거나 안 오거나") - 모순명제(contradiction) — 어떤 경우에도 거짓. 예:
p ∧ ¬p
프로그램에서 조건이 항진명제가 되면 그 if는 있으나 마나이고,
모순명제가 되면 그 안의 코드는 영원히 실행되지 않습니다. 컴파일러가
"이 코드는 도달할 수 없습니다"라고 경고하는 것이 바로 이 계산의 결과예요.
식을 하나 더 만들어 넣어 보세요.
Python
브라우저에서 실행
🤔 확인 문제
p가 참, q가 거짓일 때 p ∨ q 와 p ⊕ q 의 값은?해설 ∨(또는)는 하나라도 참이면 참이므로 참입니다. ⊕(배타적)는 둘이 서로 다를 때 참인데 참·거짓으로 다르므로 역시 참이에요. 둘의 값이 갈리는 것은 p, q 가 모두 참일 때입니다 (∨는 참, ⊕는 거짓).
🤔 확인 문제
명제 3개로 만든 진리표의 줄 수는?
해설 각 명제가 참·거짓 두 가지이므로 2 × 2 × 2 = 8줄입니다. 일반적으로 명제
n개면 2n줄이에요 — 비트 n개가 2n가지를 나타내는 것과 같은 계산입니다.🤔 확인 문제
not (재고있음 and 결제완료) 와 같은 뜻인 것은?해설 드모르간 법칙입니다 — ∧ 를 뒤집으면 ∨ 가 됩니다. "둘 다 참인 것은 아니다"는 "적어도 하나는 거짓이다"와 같은 말이에요. 연산자까지 함께 바꾸는 것을 잊으면 안 됩니다.