린(Lean) 정리 증명기로 안셀무스의 신 존재 증명 형식화하기

상호 작용 정리 증명기는 이용자와 상호 작용을 하면서 이용자에게 도움을 받아 증명을 구성하는 컴퓨터 프로그램입니다. 제가 배우고 있는 정리 증명기는 린(Lean)입니다. 린은 의존 유형론을 바탕으로 한 증명 보조기이자 함수형 프로그래밍 언어입니다.

그저께 린으로 안셀무스의 신 존재 증명을 형식화해 봤는데, 이에 관한 의견을 듣고 싶습니다. 아래의 한국어 문서와 린 코드를 참고해 주세요.

린 커뮤니티에도 이미 메시지를 올렸는데, 두 분만 제 형식화를 논평해 주셨습니다. 한 분의 논평은 유형 클래스를 잘 정의하는 방법에 관한 것이고, 다른 한 분의 논평은 앨빈 플랜팅아(Alvin Plantinga)가 정식화한 안셀무스의 존재론적 논증의 3단계에 관한 것입니다.

5개의 좋아요

Coq이나 Isabelle/HOL와 같은 증명 보조기의 존재는 알고 있었지만, 이게 철학에서의 논증을 증명할 때에도 쓸 수 있다는 것은 처음 알았네요. 안셀무스의 신 존재 증명이 연역 논증이라서 가능한 것일까요? 아무튼 놀랍군요.

재밌는 시도네요!

그런데 제가 Lean은 물론이거니와, 안셀무스식 신 존재 논증 역시 깊이 공부해질 못해서 조심스럽습니다만, 안셀무스의 영향을 받은 양상적 존재론적 논증(들)에 대한 Lean 형식화부터 시도해보는 것도 유용하지 않을까 싶습니다. 안셀무스식 논증의 '최신판'이기도 하거니와, 일단 양상논리로 형식화가 이루어졌다는 점에서 정밀하게 옮기는데 더 용이할테니까요.

어쨌든 증명보조기를 철학적 논증에 (필요한 상황에서라면) 도입하는 것도 유용한 도구가 될 수 있을 것 같네요!

1개의 좋아요

형식적 방법을 여러 철학 분야에 어떻게 활용할 수 있는지 설명한 스프링어 학부 철학 교과서가 있더군요.

추상적 대상 이론이저벨/HOL로 형식화한 프로젝트를 나중에 살펴보고 싶은데, 제가 형식화하려는 분야 중에서 저한테 가장 중요한 것이 사교 기하학과 고전 역학이어서 아직 시간을 못 냈습니다.

저도 그저 전기가오리 중세철학 공부 모임에서 안셀무스의 존재론적 논증을 처음 접하고 나서, 스탠퍼드 철학 백과사전 항목을 읽어 보기만 했어요. 하지만 아직 제가 양상 논리를 배운 적이 없어서 양상 존재론적 논증을 형식화할 능력이 없네요.

제가 앞으로 배울 이론은 많은데 대부분의 수학자가 양상 논리에 관심이 없다 보니, 저도 양상 논리는 나중에 여유가 생겨야 학습할 것 같습니다.

제가 Lean 언어의 신택스를 몰라서인지도 모르겠지만, 어째서 제시하신 코드가 주장하시는 바인 ‘안셀름의 전제들은 ∃x(God(x)∧inReality(x))를 증명하지 못하는지를 증명하게 하는지 이해하기 어렵습니다. 설명을 해주실 수 있을까요?

아울러 논증의 3단계를 수정하신 것은 실수입니다. 논증의 3단계는 ‘신의 모든 속성을 가지며 또한 실재하는’, 즉 신과 다르지만 신보다 큰 존재자가 상상 가능함을 1로부터 유도해 논증의 귀류법을 성립시키는 핵심적 논제이기 때문입니다.

제가 보건대, 안셀무스의 논증에서 이끌어 낼 수 있는 결론은 다음 진술이 참이라는 것뿐입니다.

theorem isGod_inReality {x : Being} : isGod x → inReality x

이 정리는 신이 현실에 존재한다고 진술하지 않습니다. 어느 한 존재자가 신이면 그 존재자는 현실에 존재한다는 얘기만 할 뿐입니다. 신이 현실에 존재함을 증명하려면, ∃ (x : Being), isGod x ∧ inReality x임을 보여야 합니다.

정리 isGod_inReality∀ {x : Being}, isGod x → inReality x임을 보여 주는데, 이것만으로는 ∃ (x : Being), isGod x ∧ inReality x임을 밝힐 수가 없습니다.

아, 그리고 린에서는 ∃ x, p x ∧ q x∃ x, (p x ∧ q x)를 뜻합니다. (∃ x, p x) ∧ q x가 아닙니다.

P와 동치도, P의 부정도 아닌 Q를 이론 T로부터 증명하는 일은 P가 T의 정리가 아님에 대한 증명이 아닙니다. 따라서, 하셔야 하는 것은 해당 명제가 안셀름의 전제들의 정리가 ‘아님을’ 보이는 일이어야지, 해당 명제를 함축 않는 다른 명제가 정리임을 보이는 일이어서는 안 된다는 말씀인 겁니다. (부기하신 부분은 기호논리학에서 “.”이 하는 역할과 같아 이해하고 있습니다.)

사실 그래서 "저는 안셀무스의 논증이 신의 존재를 보이지 않는다고 생각합니다."라고만 말했습니다. 왜냐하면 @car_nap 님이 말씀하신 그 증명을 하기 위한 배경지식이 아직 없거든요. 저는 지금 당장 저한테 긴요한 수리 논리학 지식만 배운 상태입니다.

다만 제가 제시한 내용에서 실마리를 얻어, 안셀무스의 논증에 있는 전제만으로는 그가 원한 결론을 이끌어 낼 수 없음을 증명하기가 가능할 듯합니다.

T로부터 P를 증명할 수 없음은 다음의 두 방식으로(만) 가능하다고 여겨집니다. 따라서 설계의 많은 부분을 수정하셔야 합니다.

  1. T로부터, 공리와 도출 규칙만을 사용해 유한한 sequence 안에서 P를 이끌어낼 수 없음.

  2. (건전성이 보장된 체계의 경우) 어떤 논리적 모형(model)에서 ~P가 참임.

그 외에 드릴 코멘트가 (형식화에 관해) 몇 있는데, 제가 밖이라 나중에 시간이 되면 새로 달거나 하겠습니다.

1개의 좋아요

나중에 증명론과 모형론을 본격적으로 배우고 지금의 제 코드를 보강할게요. 근데 그 두 분야가 사교 기하학의 형식화에 별로 도움이 되지 않다 보니, 지금은 그 둘의 학습을 미루고 있습니다. 결국 시간을 내긴 할 거예요!

def isMax (x : α) (p : α → Prop) := p x ∧ ∀ (y : α), p y → y ≤ x

def isGod (x : Being) := isMax x conceivable

theorem step3 {x : Being} (hgx : isGod x) (_ : inReality x) :
  conceivable x := hgx.1

원래 논증의 3단계에 해당하는 전제는 그냥 신의 정의에서 도출되더군요. 물론 제가 형식화를 잘못했을 수 있습니다. 이에 관한 앨리스터 터커의 의견을 참고해 주세요. 원래 논증의 3단계를 어떻게 린으로 옮겨야 하는지 이분과 논의했습니다.

다시 생각해 보니 제가 놓친 점이 하나 있네요. 다음 두 주장이 별개임을 강조하고 싶습니다.

  1. 안셀무스가 제시한 논증의 결론은 ∃ (x : Being), isGod x ∧ inReality x가 아니다.
  2. 안셀무스의 논증에 있는 전제에서 ∃ (x : Being), isGod x ∧ inReality x를 도출할 수 없다.

제가 작성한 문서의 요지는 첫째 주장이 말하는 바입니다. 둘째 주장이 아니라요.

제가 보건대, 안셀무스의 논증에서 이끌어 낼 수 있는 결론은 다음 진술이 참이라는 것뿐입니다.

theorem isGod_inReality {x : Being} : isGod x → inReality x

음, 근데 제가 문서에서 위의 말을 했군요. 문서의 새 버전에서 다음과 같이 수정했어요.

제가 보건대, 안셀무스가 제시한 논증의 결론은 다음 진술과 같습니다.

theorem isGod_inReality {x : Being} : isGod x → inReality x

이에 따라, 저는 안셀무스의 논증이 신의 존재를 보이지 않는다고 생각합니다.

Alistair Tucker said:

In your case you just need to demonstrate that for some instantiation of your class the proposition is false. E.g. for Anselm Nat with Conceivable := fun _ => True there is provably no x such that IsMax x Conceivable.

안셀무스의 논증에 있는 전제에서 ∃ (x : Being), isGod x이라는 결론을 도출할 수 없음을 밝히려면, ∃ (x : Being), isGod x라는 진술이 거짓인 유형 세계 단계 u, 유형 Being : Type u 그리고 Anselm Being의 사례[인스턴스]를 들기만 해도 됩니다. 새로 추가한 정리는 다음과 같습니다.

local instance : Anselm ℤ where
  conceivable := fun _ ↦ True
  inUnderstanding := fun _ ↦ True
  inReality := fun
    | .ofNat _ => True
    | .negSucc _ => False
  lt_of_inUnderstanding_not_inReality_inReality {_ _ : ℤ} := by
    repeat (first | simp | split <;> simp [not_true, not_false])
    rename_i n _ m
    calc
      -(n + 1) < (0 : ℤ) := Int.negSucc_lt_zero n
      0 ≤ ↑m := Int.zero_le_ofNat m
  isMax_conceivable_inUnderstanding := by simp
  exists_conceivable_and_inReality := by exists 0

private theorem not_exists_int_isGod : ¬ ∃ (a : ℤ), isGod a := by
  intro hex
  rcases hex with ⟨god, _hcg, hleg⟩
  have god_lt_succ_god : god < god + 1 := Int.lt_succ god
  have succ_god_le_god : god + 1 ≤ god := hleg (god + 1) trivial
  exact not_le_of_lt god_lt_succ_god succ_god_le_god

제가 아직 이게 적합한 반례인지 확인하지 못하긴 했습니다만, 네, 어떤 논증이 어떤 결론에 대한 논증일 수 없음은 이런 식으로 보이는 겁니다.

1개의 좋아요

다만 제가 정의한 유형 클래스 Anselm을 수리 논리학에서 말하는 이론의 하나로 여길 수 있을지는 잘 모르겠습니다. 이게 제 증명 목표를 달성하는 데 그리 중요하진 않지만요.