03. 명제의 트랜스포머: 역, 이, 대우 그리고 파이썬 진리표

1. 학습 목표 (Learning Objectives)

  • “만약 $p$이면 $q$이다($p \rightarrow q$)” 명제의 위치를 바꾸고 부정을 취하는 세 가지 변신 모드 ‘역, 이, 대우’ 조합의 원리를 파악합니다.
  • 파이썬 스크립트를 짜서 모든 경우의 수를 브루트포스(Brute-force) 연산하여, 어떤 변신 로봇끼리 운명 공동체(참과 거짓을 항상 공유)인지 증명하는 진리표(Truth Table)를 출력시킵니다.

2. 부정의 마법 물약 ($\sim$)

우리가 명제를 이리저리 트위스트 하기 전에 가장 먼저 무장해야 할 아이템은 바로 ‘부정(Negation)’ 물약 입니다.

  • 명제 $p$: “$x$는 짝수이다.”
  • 명제 $\sim p$: “$x$는 짝수가 아니다! (홀수이다)” 물결 표시 ’~’ (낫, not)을 조건 앞에 하나 띡 붙여주면, 진리집합 요원들이 여집합($P^c$)으로 정반대로 뒤집히며 반전의 매력을 뽐냅니다.
2D 웹툰 애니 판타지 스타일: 고대 연금술사의 신비로운 연구실에서, 마법사가 가죽 장갑을 낀 손으로 불안정하게 흔들리며 번쩍이는 물약 플라스크를 들고 있는데, 그 병 중앙의 낡은 라벨에는 뚜렷하게 물결 표시 기호(~)가 적혀 있고, 주변의 모든 사물들이 물약의 빛에 닿자 정반대의 색깔이나 성질로 뒤집히는 극적인 변환(부정, Negation)의 순간

3. 원본 명제의 3단 변신: 역, 이, 대우

자, 기본 베이스 명제가 있습니다.

원본 명제 ($p \rightarrow q$) : “만약 비바람이 치면, 나는 집콕을 한다”

이 원본 명제를 가지고 철학자들은 3가지의 언어장난(조작)을 치며 새로운 트랜스포머 명제들을 뽑아냅니다.

  1. 역 (Converse, 앞뒤 스왑 스위치):
    • 화살표의 꼬리와 머리 위치 자체를 앞뒤로 확 엎어버립니다. ($q \rightarrow p$)
    • 해석: “만약 집콕을 하면, 밖엔 비바람이 치고 있는 것이다” (뭔가 억지스럽죠? 집콕을 해도 날씨는 맑을 수 있으니 원본과 다르게 참/거짓 여부가 달라질 수 있습니다.)
  2. 이 (Inverse, 더블 부정 액스):
    • 자리는 그대로 두고, 앞뒤에 부정 암흑 마법 물약($~$)을 쌍으로 끼얹습니다. ($\sim p \rightarrow \sim q$)
    • 해석: “만약 비바람이 치지 않는다면, 나는 집콕을 하지 않고 무조건 나간다.”
  3. 대우 (Contrapositive, 스왑 앤 더블부정 궁극기):
    • 역과 이를 결합한 필살기! 앞뒤 자리를 스왑(역) 시키고, 둘 다 부정 물약(이)을 부어버립니다! ($\sim q \rightarrow \sim p$)
    • 해석: “만약 내가 지금 밖에서 놀고(집콕 안함) 있다면, 날씨는 비바람이 치고 있지 않은 것이다!”
명제의 3단 트랜스폼 네트워크 (역, 이, 대우) SVG: 4개의 원이 마름모꼴로 배치되어 본명제, 역, 이, 대우의 관계와 변환 흐름을 선으로 이어 보여주는 관계도. 본명제와 대우명제를 잇는 굵은 초록색 대각선이 운명 공동체(항상 같은 진리값)임을 강조

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)

  1. 명제의 3단 트랜스폼: $p \rightarrow q$ 원본 명제에 대하여 앞뒤 순서를 스위치하면 ‘역’, 원본 양쪽에 $~$부정만 씌우면 ‘이’, 앞뒤도 바꾸고 덤으로 부정까지 거는 쌍방향 콤보는 ‘대우’ 라고 부릅니다.
  2. 운명의 데스티니 법칙: 본 명제가 참이면 ‘대우’ 명제도 무조건 프리패스 참이고, 본이 거짓이면 ‘대우’도 무조건 거짓입니다. 이를 진리표(Truth Table)를 파이썬 스크립트로 찍어 완벽하게 논리 검증할 수 있습니다.
서브목차