비 건설 증거의 카레 하워드 및 프로그램


29

이것은 후속 질문입니다

증명과 프로그램 (또는 제안과 유형)의 차이점은 무엇입니까?

어떤 프로그램이 형식의 비 구조적 (클래식) 증명에 해당 합니까? ( 가 흥미로운 결정 가능한 관계 라고 가정하자. 예를 들어 th TM는 단계로 정지하지 않는다 .)∀k T(e,k)∨¬∀k T(e,k)Tek

(ps : 나는이 질문을 부분적으로 게시하고있다. 나는 Neel이 " Godel-Gentzen 번역 은 지속적으로 통과하는 변형이다" 라는 말의 의미에 대해 더 많은 것을 배우고 싶기 때문이다 .)


2
이 강의 노트의 2쪽에있는 부분 답변 . 조금 비밀 스럽습니다. 좀 더 완전한 것을 파 내려고 노력할 것입니다.
— Dave Clarke

내가 아는 것을 단지 주장하는 것이 아니라 내가 증명 한 것을 증명하기로 결심했기 때문에 내 대답을 쓰는 데 계획보다 시간이 조금 더 걸립니다. :)
— Neel Krishnaswami

1
가장 최근의 JSL에는 이 기사 가있었습니다 . 요점은 클래식 증명의 계산 내용이 추출 방법을 선택한 방법에 따라 크게 달라질 수 있다는 것입니다. 나는 아직 그것을 소화하지는 않았지만 거기서 버릴 것이라고 생각했습니다.
— Mark Reitblatt

그러나 당신은 T가 결정 가능한 관계 라고 명시 했기 때문에 당신의 제안에 대한 건설적인 증거가 있습니다. 클래식 로직은 직관적 인 로직의 하위 집합이므로 T를 결정 가능한 호출이라고하여 해당 하위 집합에 속하도록 지정했습니다.
— 렌 로마노

렌, 저도 처음에 생각했던 것입니다! 그러나 실제로 모든 k에 대해 정량화 된 경우 문제의 P \ / ~ P 예에서 명제 P는 이러한 정량화가 반드시 결정 가능한 것은 아닙니다.
— jbapple

답변:


25

이것은 흥미로운 질문입니다. 분명히 하나는 각각 결정하는 프로그램이 기대할 수 없다 여부 이 중단 문제를 결정하는 것처럼, 보유 여부를. 이미 언급했듯이 증거를 계산적으로 해석하는 몇 가지 방법이 있습니다. Curry-Howard의 확장, 실현 가능성, 방언 등. 그러나 그들은 모두 당신이 언급 한 정리를 다음과 같은 방식으로 계산적으로 해석 할 것입니다.∀ k T ( e , k )e∀kT(e,k)

단순화를 위해 동등한 고전 정리를 고려하십시오.

(1)∃i∀j(¬T(e,j)→¬T(e,i))

이 때문에 주어진 한 것과 등가 (보강) 인 우리가 결정할 수 보유하거나 단순히의 값을 확인하여 . 만약 가 있으면 그리고 따라서 입니다. 반면에 가 (1)에 의해 않으면 가 .∀ k는 T ( 즉 , K ) ¬ T를 ( E , I ) ¬ T ( E , I ) ∃ I ¬ T ( 즉 , 나 ) ¬ ∀ I T ( E , I ) ¬ T ( E , I ) ∀ J ( ¬ T ( e , j ) → ⊥ )i∀kT(e,k)¬T(e,i)¬T(e,i)∃i¬T(e,i)¬∀iT(e,i)¬T(e,i)∀j(¬T(e,j)→⊥)∀jT(e,j)

이제 다시 Halting Problem을 해결하기 때문에 주어진 각 에 대해 (1)에서 를 계산할 수 없습니다 . 위에서 언급 한 모든 해석은 동등한 정리를 보는 것입니다.전자ie

(2)∀f∃i′(¬T(e,f(i′))→¬T(e,i′))

함수 를 Herbrand 함수라고합니다. 주어진 각 잠재적 인 증인 대한 카운터 예제 를 계산하려고 시도합니다 . (1)과 (2)는 동일하다는 것이 분명합니다. 왼쪽에서 오른쪽으로 이것은 건설적입니다. 간단히 (2)에서 를 취하십시오 . 여기서 는 (1)의 가정 된 증인입니다. 오른쪽에서 왼쪽으로 고전적으로 추론해야합니다. (1)이 사실이 아니라고 가정합니다. 그때,j i i ' = i ifjii′=ii

(3)∀i∃j¬(¬T(e,j)→¬T(e,i))

하자 함수가이 목격 될, 즉,f′

(4)∀i¬(¬T(e,f′(i))→¬T(e,i))

이제 (2)에서 를 취 하면 일부 대해 있습니다. 그러나 (4)에서 를 취 하면 우리는 그 모순의 부정을 얻습니다. 따라서 (2)는 (1)을 의미합니다. ( ¬ T ( e , f ′ ( i ′ ) ) → ¬f=f′i ′ i = i ′(¬T(e,f′(i′))→¬T(e,i′))i′i=i′

따라서 우리는 (1)과 (2)가 고전적으로 동등하다는 것을 알 수 있습니다. 그러나 흥미로운 점은 (2) 이제 매우 단순한 건설적인 증거를 가지고 있다는 것입니다. 간단히 취할 경우 보유하지 않고, 다음 (2)의 체결이 사실로 인해; 또는 유지 되면 취합니다. 이 유지되지 않고 (2)의 전제가 거짓이므로 다시 참이되기 때문입니다.T ( e , f ( 0 ) ) i ′ = 0 T (i′=f(0)T(e,f(0))i′=0¬ T ( e , f ( 0 ) )T(e,f(0))¬T(e,f(0))

따라서 (1)과 같은 고전 정리를 계산적으로 해석하는 방법은 우리의 경우 (2)에서 건설적으로 입증 될 수있는 (클래식) 등가 공식을 보는 것입니다.

위에서 언급 한 다른 해석은 함수 가 나타나는 방식에 따라 다릅니다 . 실현 가능성과 방언 해석의 경우, 이것은 어떤 형태의 부정적인 번역 (예 : Goedel-Gentzen 's)과 결합 될 때 해석에 의해 명시 적으로 제공됩니다. call-cc 및 연속 연산자가있는 Curry-Howard 확장의 경우 함수 는 프로그램이 특정 값 (이 경우 )이 사용되는 방법을 "알아낼"수 있다는 사실에서 발생합니다 . 따라서 는 연속입니다 가 계산 되는 지점 주변의 프로그램 .f i f iffifi

또 다른 중요한 점은 (1)에서 (2) 로의 통과가 "모듈 식"이되기를 원한다는 것입니다. 즉 (1)을 (1 ')을 증명하는 데 사용하는 경우 해석 (2)를 비슷한 방식으로 사용해야합니다. (1 ')의 해석을 증명하기 위해 (2')라고 말하십시오. Goedel-Gentzen 부정적인 번역을 포함하여 위에서 언급 한 모든 해석이 그렇게합니다.


8
환영! 전문가 증명 이론가를 만나는 것이 좋습니다.
— Neel Krishnaswami

1
감사합니다 Paulo, 귀하의 답변에 따라 현재 진행중인 관련 문제에서 그림의 일부가 명확 해졌습니다.
— Kaveh

17

고전적이고 직관적 인 산술이 일관된 것으로 잘 알려져 있습니다.

이것을 보여주는 한 가지 방법은 고전적 논리의 "부정적인 삽입"을 통해 직관적 논리에있는 것입니다. 따라서 는 고전적인 1 차 산술의 공식 이라고 가정 합니다. 이제 직관적 인 논리의 공식을 다음과 같이 정의 할 수 있습니다.ϕ

G(⊤)=¬¬⊤G(ϕ∧ψ)=¬¬(G(ϕ)∧G(ψ))G(⊥)=¬⊤G(¬ϕ)=¬G(ϕ)G(ϕ∨ψ)=¬(¬G(ϕ)∧¬G(ψ))G(∀x.ϕ)=∀x.¬¬G(ϕ)G(∃x.ϕ)=¬∀x.¬(G(ϕ))G(P)=¬¬P

참고 추가하지 -하지의 스틱 disjunctions 및 existentials에서 제외하고, 어디에나있는 동형은 기본적으로, 그것은 접속사와 보편로를 설정하는 모건의 이중성 드 사용합니다. (이 답변을 위해 그것을 요리했기 때문에 이것이 정확한 Godel-Gentzen 번역이 아니라고 확신합니다. 기본적으로 이중 부정 + de Morgan 이중성을 사용하여 쓰는 것은 효과가 있습니다.이 다양성은 실제로 중요합니다. 고전 논리의 계산 해석; 아래 참조)G(ϕ)

첫째 :이 번역은 고전적인 진실을 유지한다는 것이 명백합니다. 따라서 가 고전적으로 말해서 만 가 참이됩니다 .ϕG(ϕ)ϕ

둘째 : fragment의 수식의 경우 직관적이고 고전적인 논리에서의 확률이 일치 것은 덜 분명하지만 여전히 . 이를 증명하는 방법은 먼저이 문법에서 나온 수식을 보는 것입니다.∀,⟹,∧,¬

A,B::=∀x.A(x)|A⟹B|A∧B|¬A|¬¬P

그리고 우리는 ( 에 유도함으로써 ) 가 가 직관적으로 파생 될 수 있다는 것을 명예로 증명할 수 있습니다 . 이제 우리는 증거의 구조 (즉, 미적분학)를 유도함으로써 음의 공식의 등가성을 보여줄 수 있고, 이전의 정리를 사용하여 배제 된 중간의 법칙을 시뮬레이션 할 수 있습니다.AG(A)⟹A

그렇다면 직관적으로 어떻게 생각해야합니까?

  • 먼저 증명 이론적 견해. 순차적 미적분학의 규칙을 보면, 고전적이고 직관적 인 논리가 심각하게 다른 유일한 곳은 분리와 실존의 규칙에 있다는 것을 알 수 있습니다. 따라서 우리는이 사실을 사용하여 이러한 공식 중 하나의 논리에서 증명이 다른 공식에서 증명으로 변환 될 수 있음을 보여줍니다. 이것은 건설 적인 논리를 두 개의 새로운 결합 인 및 와 함께 고전적인 논리 의 확장 으로 생각하는 방법을 보여줍니다 . 우리가 "고전적 존재"와 "고전적 분리"라고 부르는 것은 , , negation과 관련된 약어 일 뿐이 므로 실제 존재에 대해 이야기하기 위해서는 새로운 연결을 도입해야했습니다.∨∃∨∀

  • 둘째, 위상 적 관점이 있습니다. 이제 고전적인 논리의 모델 (집합으로)은 부울 대수 (즉, 임의의 합집합, 교집합 및 보수로 닫힌 부분 집합 계열)입니다. 직관 논리의 모델은 위상 공간 으로서 제안이 개방 세트로 해석 된다는 것이 밝혀졌습니다 . 부정의 해석은 보완의 내부이며, 임을 쉽게 알 수 있습니다. 이는 이중 부정이 각각의 열린 덮개를 덮는 가장 작은 clopen으로 우리를 보낸다는 것을 의미합니다. 클로 펜은 부울 대수를 형성합니다.¬¬¬P=¬P

이제 Curry-Howard 덕분에 직관 논리의 증거를 기능적 프로그램으로 해석하는 방법을 알고 있습니다. 따라서 "고전 증거의 구성적인 내용은 무엇입니까?"라는 질문에 대한 한 가지 가능한 대답 (단 하나는 아님) 다음과 같습니다.

고전적 증거의 계산 내용은 (음의 번역에 따른) 증거의 번역의 계산 내용이 무엇이든간에 있습니다.

의 번역을 보자 . 따라서 배제 된 중간의 건설적인 내용은 및 유지 되지 않는 경우 (즉 이 아님)를 말하는 것과 같습니다 . 따라서 이런 의미에서 배제 된 중간의 법칙에는 실제로 많은 계산 내용이 없습니다.G(A∨¬A)=¬(¬G(A)∧¬¬G(A))¬P¬¬P

그것이 무엇인지 구체적으로 알기 위해, 부정적으로 건설적으로 부정은 로 정의됩니다 . 따라서이 공식은 입니다. 다음의 Ocaml 코드는 다음과 같습니다.( ( G ( A )¬A==A⟹⊥((G(A)⟹⊥)∧((G(A)⟹⊥)⟹⊥))⟹⊥

type bot = Void of bot
type 'a not = 'a -> bot

let excluded_middle : ('a not * 'a not not) not = fun (u, k) -> k u 

즉, A가 아니고 A가 아닌 경우, 첫 번째 부정을 두 번째 부정에 전달하여 원하는 모순을 도출 할 수 있습니다.

이제 연속 전달 스타일 변환이란 무엇입니까?

  • 계속 유형의 유형의 값 소요 뭔가 하고 그것에서 최종 답을 계산합니다.τττ
  • 연속은 프로그램 컨텍스트를 모델링하는 데 사용됩니다. 즉, 우리 는 훨씬 더 큰 프로그램 일부로 평가할 용어 가질 수 있습니다 . 그 주위의 모든 것들은 의 계산 결과를 취하고 최종 답변을 계산합니다.C [ 3 + 5 ] 3 + 53+5C[3+5]3+5
  • 따라서 유형의 연속을 함수 로 생각할 수 있습니다 . 여기서 는 응답 유형입니다.τ → α αττ→αα
  • 그래서 당신은 프로그램이있는 경우 유형의를 , 우리가 할 수있는 "CPS-변환"을 유형의 용어를 찾아 , 어떤 통과 끝날 것이다 로 계산 한 것 그 지속. (기본적으로 이것은 제어 흐름을 명시 적으로 만듭니다.)τ ( τ → α ) → α eeτ(τ→α)→αe
  • 그러나 우리는 이것을 프로그램의 모든 하위 용어가 지속적으로 명시하도록하기 위해 유 전적으로해야합니다.

지금,

  • 부정적인 번역은 기본적으로 를 보냅니다 .¬ ¬ ϕϕ¬¬ϕ
  • 그러나 우리의 번역은 부정을 사용하지만 실제로 잘못된 제안을 제거하지는 않습니다. 따라서 번역은 해당 제안에서 파라 메트릭 방식으로 작동합니다.
  • 특히, 을 모든 응답 유형 바꿀 수 있습니다 .α⊥α
  • 따라서 우리는 를 유 전적으로 대체 합니다.( ϕ → α ) → αϕ(ϕ→α)→α
  • 이것은 CPS 변환입니다.

앞에서 언급했듯이이 이론을 증명할 수있는 많은 부정적인 번역이 있으며 각 번역본은 다른 CPS 변형에 해당합니다. 운영 측면에서 각 변환은 서로 다른 평가 순서에 해당합니다 . 따라서 선택의 여지가 있고 차이 선택의 운영 특성이 매우 다르기 때문에 클래식 논리에 대한 고유 한 계산 해석이 없습니다.


3
이것은 좋은 대답입니다. : 그것은 Wadler의 논문 "통화 별 값이 호출 별 이름을 이중하다"를 생각 나게 homepages.inf.ed.ac.uk/wadler/topics/call-by-need.html 매우 기억에 남는 일화를 포함, callCC와 제외 된 중간 사이의 관계를 설명하기 위해 섹션 4에서.
— sclv

8

비 건설 증거에 관한 프로그램에 관한 모든 회의가 프로그램으로 진행 되며, 그 주제에 대한 전문가는 없습니다. 위에서 Neel Krishnaswami는 그가 준비하고있는 더 긴 대답을 암시했다. 이것은 답의 맛일뿐입니다.

현재 통화 연속 통화 의 유형은 Peirce의 법칙 으로 알려진 제안에 해당하며 , 이는 제외 된 중간 법칙을 증명하는 데 사용할 수 있습니다 ( ). callcc를 사용하여 LEM 프로그램을 작성할 수 있습니다. Coq에서 :∀P,P∨¬P

Set Implicit Arguments.

Axiom callcc : forall (A B : Set), ((A -> B) -> A) -> A.

Lemma lem : forall (A B:Set), sum A (A -> B).
Proof.
  intros.
  eapply callcc.
  intros H.
  right.
  intros.
  apply H.
  left.
  assumption.
Defined.

Recursive Extraction lem.

O'Caml 코드를 제공합니다.

type ('a, 'b) sum =
  | Inl of 'a
  | Inr of 'b

(** val callcc : (('a1 -> 'a2) -> 'a1) -> 'a1 **)

let callcc =
  failwith "AXIOM TO BE REALIZED"

(** val lem : ('a1, 'a1 -> no) sum **)

let lem =
    callcc (fun h -> Inr (fun h0 -> h (Inl h0)))

내가 본 것에 대한 가장 깨끗한 소개는 Tim Griffin의 "A type of a types control of control" 입니다.


3
Scheme으로 추출을 시도하고 추출 절차 callcc에서 Scheme 's로 추출해야한다고 알려야합니다 callcc. 그런 다음 실제로 시도해 볼 수 있습니다.
— Andrej Bauer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.