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


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 )ekT(e,k)

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

(1)ij(¬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 ) )ikT(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)fi(¬T(e,f(i))¬T(e,i))

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

(3)ij¬(¬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=fi i = i (¬T(e,f(i))¬T(e,i))ii=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)|AB|AB|¬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.