03. 명제의 트랜스포머: 역, 이, 대우 그리고 파이썬 진리표
1. 학습 목표 (Learning Objectives)
- “만약 $p$이면 $q$이다($p \rightarrow q$)” 명제의 위치를 바꾸고 부정을 취하는 세 가지 변신 모드 ‘역, 이, 대우’ 조합의 원리를 파악합니다.
- 파이썬 스크립트를 짜서 모든 경우의 수를 브루트포스(Brute-force) 연산하여, 어떤 변신 로봇끼리 운명 공동체(참과 거짓을 항상 공유)인지 증명하는 진리표(Truth Table)를 출력시킵니다.
2. 부정의 마법 물약 ($\sim$)
우리가 명제를 이리저리 트위스트 하기 전에 가장 먼저 무장해야 할 아이템은 바로 ‘부정(Negation)’ 물약 입니다.
- 명제 $p$: “$x$는 짝수이다.”
- 명제 $\sim p$: “$x$는 짝수가 아니다! (홀수이다)” 물결 표시 ’~’ (낫, not)을 조건 앞에 하나 띡 붙여주면, 진리집합 요원들이 여집합($P^c$)으로 정반대로 뒤집히며 반전의 매력을 뽐냅니다.
3. 원본 명제의 3단 변신: 역, 이, 대우
자, 기본 베이스 명제가 있습니다.
원본 명제 ($p \rightarrow q$) : “만약 비바람이 치면, 나는 집콕을 한다”
이 원본 명제를 가지고 철학자들은 3가지의 언어장난(조작)을 치며 새로운 트랜스포머 명제들을 뽑아냅니다.
- 역 (Converse, 앞뒤 스왑 스위치):
- 화살표의 꼬리와 머리 위치 자체를 앞뒤로 확 엎어버립니다. ($q \rightarrow p$)
- 해석: “만약 집콕을 하면, 밖엔 비바람이 치고 있는 것이다” (뭔가 억지스럽죠? 집콕을 해도 날씨는 맑을 수 있으니 원본과 다르게 참/거짓 여부가 달라질 수 있습니다.)
- 이 (Inverse, 더블 부정 액스):
- 자리는 그대로 두고, 앞뒤에 부정 암흑 마법 물약($~$)을 쌍으로 끼얹습니다. ($\sim p \rightarrow \sim q$)
- 해석: “만약 비바람이 치지 않는다면, 나는 집콕을 하지 않고 무조건 나간다.”
- 대우 (Contrapositive, 스왑 앤 더블부정 궁극기):
- 역과 이를 결합한 필살기! 앞뒤 자리를 스왑(역) 시키고, 둘 다 부정 물약(이)을 부어버립니다! ($\sim q \rightarrow \sim p$)
- 해석: “만약 내가 지금 밖에서 놀고(집콕 안함) 있다면, 날씨는 비바람이 치고 있지 않은 것이다!”
4. 파이썬 진리표 (Truth Table) 운명 공동체 코딩
논리학의 가장 경이로운 법칙은, [원본 명제] 와 그 명제의 궁극기 변형인 [대우 명제] 는 영혼이 이어져 있어서 아바타처럼 항상 100% 참(True)과 거짓(False)의 생사를 영원히 함께 공유한다는 점입니다!
정말 그런지, 헷갈리는 인간의 두뇌를 대신해 무려 파이썬 Boolean 진리표(Truth Table) 논리연산 회로를 짜서 모조리 테스트해 증명해 봅시다!
# p와 q가 가질 수 있는 모든 영혼의 경우의 수 4가지 (True, False 조합)
conditions = [
(True, True),
(True, False),
(False, True),
(False, False)
]
# 파이썬에서 p -> q (만약 p이면 q이다) 를 논리로 직역하는 함축 연산자(Implication)
# 논리학 수학에서 (p -> q) 는 사실상 (not p OR q) 와 100% 동일한 연산을 합니다.
def implies(p, q):
return (not p) or q
print("=" * 70)
print(f"{'p(조건)':<7} | {'q(결론)':<7} || [본] p->q | [역] q->p | [이] ~p->~q | [대우] ~q->~p")
print("-" * 70)
# 4개의 타임라인 유니버스를 순회하며 트랜스포머 4종류 명제 연산 타격!
for p, q in conditions:
original = implies(p, q) # 본 명제
converse = implies(q, p) # 역 (앞뒤 바꿈)
inverse = implies(not p, not q) # 이 (부정)
contrapositive = implies(not q, not p) # 대우 (자리 바꿈 + 부정)
# 예쁘게 출력
print(f"{str(p):<7} | {str(q):<7} || {str(original):^9} | {str(converse):^9} | {str(inverse):^10} | {str(contrapositive):^10}")
print("=" * 70)
파이썬 로직 엔진의 충격적 증명 요약:
======================================================================
p(조건) | q(결론) || [본] p->q | [역] q->p | [이] ~p->~q | [대우] ~q->~p
----------------------------------------------------------------------
True | True || True | True | True | True
True | False || False | True | True | False
False | True || True | False | False | True
False | False || True | True | True | True
======================================================================
테이블을 자세히 보세요!
- [본] 라인과 궁극기 [대우] 라인의 위아래 모든 T/F 패턴 쌍이 토씨 하나 틀리지 않고 (T F T T) 로 100% 동일합니다!!
- 번외로, [역] 라인과 [이] 라인도 서로 티키타카 환상의 (T T F T) 동일 운명 공동체 파트너를 맺고 있습니다.
이 위대한 발견 덕분에, 수학자들은 원래 풀기 귀찮고 까다로운 본 명제에 막히면, 아주 노련하게 그 문장의 [대우 명제]로 즉각 변신시켜서 편하게 돌아 풀어내는 증명법 테크닉을 보유하게 되었습니다.
5. 학습 정리 (Summary)
- 명제의 3단 트랜스폼: $p \rightarrow q$ 원본 명제에 대하여 앞뒤 순서를 스위치하면 ‘역’, 원본 양쪽에 $~$부정만 씌우면 ‘이’, 앞뒤도 바꾸고 덤으로 부정까지 거는 쌍방향 콤보는 ‘대우’ 라고 부릅니다.
- 운명의 데스티니 법칙: 본 명제가 참이면 ‘대우’ 명제도 무조건 프리패스 참이고, 본이 거짓이면 ‘대우’도 무조건 거짓입니다. 이를 진리표(Truth Table)를 파이썬 스크립트로 찍어 완벽하게 논리 검증할 수 있습니다.
서브목차