2. 절대 진리의 씨앗: 5개의 공리와 5개의 공준
[도입부] 학습 목표 (Learning Objectives)
- 증명할 필요조차 없는 우주의 쌩초보 기본법칙 ‘공통 상식(Common Notions, 공리)’ 5가지의 정체를 밝혀냅니다.
- 기하학이라는 매트릭스 세계를 시뮬레이션하기 위한 5가자의 필수 기하학적 약속, ‘공준(Postulates)’을 엔진에 로드합니다.
- 파이썬(Python) 단언문(
assert)을 활용하여 공리가 무너지면 프로그램 전체가 패닉(Panic)에 빠지는 현상을 실습합니다.
1. 상식 중의 상식: 5개의 공리 (Common Notions)
유클리드는 책을 딱 펴자마자 독자에게 목에 칼을 들이밀며 묻습니다. “야, 내가 지금부터 말하는 5가지는 너무 당연해서 증명 따위 안 할 건데, 수락(Accept)할래? 안 할 거면 책 덮어.” 이 5가지 수학 전반의 보편적 진리를 공리(Axioms, Common Notions) 라고 합니다.
- 에이전트 이퀄: 어떤 것과 같은(Equal) 것들은, 지들끼리도 같다. ($A=C$ 이고 $B=C$ 이면 $A=B$ 이다)
- 덧셈 무결성: 같은 것들에 같은 것을 더하면, 그 전체 결과도 같다.
- 뺄셈 무결성: 같은 것들에서 같은 것을 빼면, 그 남은 것도 같다.
- 합체 무결성: 서로 포개어 완벽하게 일치하는 것은 서로 같은 것이다.
- 전체와 부분: 전체는 언제나 부분보다 크다. (피자 한 판은 피자 한 조각보다 무조건 크다)
누가 들어도 “당연한 소리 아냐?” 싶겠지만, 유클리드는 이 당연한 벽돌 5장만으로 그 어마어마한 수학의 성을 100% 무결점으로 쌓아 올렸습니다.
2. 기하학 매트릭스 설정: 5개의 공준 (Postulates)
‘공리’가 수학 전반의 철학이라면, ‘공준(Postulates)’ 은 오직 기하학(도형)이라는 게임을 시작하기 위한 5가지 초기 설정(Setup) 룰입니다. 플레이어는 오직 화면 안에서 이 5가지 행동만 할 수 있습니다!
- 임의의 두 점을 이으면 항상 일직선을 그릴 수 있다. (직선의 창조)
- 이 일직선은 유한하지만 양쪽 끝으로 끝없이 연장할 수 있다. (무한 연장의 마법)
- 임의의 한 점을 중심(Center)으로 하고, 임의의 반경(Radius)을 가진 원을 그릴 수 있다. (원의 창조)
- 모든 직각(Right Angles, $90^\circ$)은 서로 크기가 같다. (공간의 균일성 보장)
- [주의! 평행선 공준] 두 직선과 교차하는 한 직선이 있을 때, 같은 쪽에 있는 두 교각의 합이 두 직각($180^\circ$)보다 작으면, 이 두 직선을 한없이 연장할 때 교각의 합이 두 직각보다 작은 쪽에서 무조건 만난다.
1번부터 4번까지는 심플하고 섹시합니다. 그런데 저 징그럽게 길고 복잡한 5번 공준이 보이시나요? 저주받은 ‘제5공준’ 은 훗날 2000년 동안 전 세계 수학자들을 미쳐버리게 만드는 시한폭탄이 됩니다. (나중에 다룹니다)
3. 💻 파이썬(Python) 절대 진리 코어 assert
프로그래밍에서 유클리드의 ‘공리’와 가장 똑같은 문법이 바로 assert (단언) 입니다. 컴퓨터에게 “야, 분모가 0보다 큰지 먼저 검사해! 아니면 프로그램 터뜨려!” 라고 멱살을 잡는 진리 강제 주입 함수입니다.
🐍 파이썬 예제: 유클리드 5번 공리(전체는 부분보다 크다) 방어선 구축
print("--- 🛡️ Axiom 5: 전체는 부분보다 크다 ---")
def test_pizza_slice(whole_pizza_weight, slice_weight):
# 유클리드 5번 공리를 assert 문으로 강제 세팅!
# "전체는 무조건 부분보다 커야만 한다. 아니면 런타임 에러(Panic) 발생!"
assert whole_pizza_weight > slice_weight, "[SYSTEM ERROR] 유클리드 공리 위반! 부분이 전체보다 클 수 없습니다."
print(f"👉 [통과] 전체({whole_pizza_weight}g)가 부분({slice_weight}g)보다 큽니다. 우주의 질서가 평온합니다.")
# 1. 정상적인 우주
print("\n[상황 1: 정상적인 로직 투입]")
test_pizza_slice(1000, 200)
# 2. 미쳐버린 우주 (오류 발생)
print("\n[상황 2: 마법으로 부분 조각이 2000g으로 커진 미친 데이터 투입]")
try:
test_pizza_slice(1000, 2000)
except AssertionError as e:
print(e)
# 결과창:
# --- 🛡️ Axiom 5: 전체는 부분보다 크다 ---
#
# [상황 1: 정상적인 로직 투입]
# 👉 [통과] 전체(1000g)가 부분(200g)보다 큽니다. 우주의 질서가 평온합니다.
#
# [상황 2: 마법으로 부분 조각이 2000g으로 커진 미친 데이터 투입]
# [SYSTEM ERROR] 유클리드 공리 위반! 부분이 전체보다 클 수 없습니다.
assert 가 발동된 순간, 코드는 뒤쪽 방어 로직을 짤 필요도 없이 폭파됩니다. 유클리드의 원론 역시 이처럼 가장 바탕이 되는 10개의 공리와 공준 벽돌이 무너지면, 465개의 모든 증명 데이터가 AssertionError 로 와르르 붕괴되는 초연결 렌더링 엔진입니다.
[결론] 학습 정리 (Summary)
- 공리(Axioms): “같은 것들끼리 같다”, “전체가 부분보다 크다” 등 그 누구도 감히 반박할 수 없는 5가지 절대 상식을 선언하여 논리의 출발 타격점을 세웠습니다.
- 공준(Postulates): 선 긋기, 원 그리기, 직각 보장 등 우리가 모니터상에 기하학을 렌더링 하기 전에 반드시 마우스 커서에 세팅해 놔야 하는 5가지 액션 권한입니다.
- 가장 간결한 시작: 수십 개의 규칙도 아니고, 오직 5+5=10개의 규칙만을 메모리에 로드한 채 거대한 우주 기하학을 전부 증명해 냈다는 데서 유클리드의 쌉재능을 엿볼 수 있습니다.