원시 재귀 함수의 클래스는 태아가 종료 한 것으로 입증 된 함수의 클래스와 동등합니까?


9

Foetus를 들어 보지 못했다면 여기에서 읽을 수 있습니다 . '호출 행렬'및 '호출 그래프'시스템을 사용하여 함수에서 재귀 호출의 모든 '재귀 동작'을 찾습니다. 함수가 종료됨을 나타 내기 위해 함수에 대한 재귀 호출의 모든 재귀 동작이 특정 '사전 순서'를 준수 함을 보여줍니다. 종료 검사기는 Ackermann 함수와 같은 모든 기본 재귀 함수 및 함수를 허용합니다. 기본적으로 다중 인수 기본 재귀를 허용합니다. 이것은 또한 기본적으로 Agda의 종료 검사기입니다. 나는 Coq가 비슷한 시설을 가지고 있지만 더 일반적이라고 생각합니다.

DA Turner의 "Total Functional Programming" 논문을 읽음 . 그는 자신의 제안 된 언어가 Godel이 연구 한 System T에서 볼 수 있듯이 모든 "기본 재귀 기능"을 표현할 수 있다고 설명합니다. 그는이 시스템이 "순서 논리로 전체를 증명할 수있는 모든 재귀 함수를 포함하는 것으로 알려져있다"고 말합니다.

선량 태아는 모든 원시 재귀 기능을 허용합니까? 그렇다면 원시 재귀 함수가 아닌 함수를 허용합니까? 이에 대한 답변을 위해 인용을 제공 할 수 있습니까? (실제로 관심이 있기 때문에 실제로는 필요하지 않습니다. 문제에 대한 일부 결혼 생활이 좋을 것입니다)

보너스 질문 : 원시 재귀 함수는 결합 자 측면에서 매우 간결한 정의를 갖습니다. 유형 S 및 K (고정 소수점 결합자를 표현할 수 없음), 0, 후속 함수 및 반복 함수; 그게 다야. 간결한 정의를 가지며 모든 표현이 끝나는 다른 일반적인 언어가 있습니까?


Agda vs Coq에서 : 나는 항상 Agda의 종료 검사기를 더 발전시키고 더 많은 기능을 수용한다고 읽습니다. 당신의 반대 주장의 첫 번째 주장입니다 (Agda의 전술 부족을 제외하고는 Agda를 Coq와 비교할 때 가장 좋은 규칙입니다 : Agda 안정성이 덜 확립 된 확장성에 대해보다 연구적이고 개방적이다). Andreas Abel은 크기가 큰 유형을 기반으로 한 고급 종단 검사기를 개발하고 있으며 MiniAgda 및 이 백서 에 대한 작업을 참조하십시오 .
Blaisorblade

"더 많은 함수 정의를 받아들이십시오"및 "더 큰 클래스의 계산 가능한 함수를 가짐"이 있습니다. 두 사람은 비교할 수 없습니다. 아그다는 첫 번째 카운트에서 승리하지만, Coq는 두 번째 카운트에서 분명히 승리합니다.
코디

나는 Coq를 전혀 사용하지 않았고 Agda는 조금만 사용했다는 것을 분명히해야합니다. 내가 읽은 내용에서 Coq가 더 많은 종류의 계산 가능한 함수를 정의 할 수 있었지만 나는 몰랐다. "믿지 않는"과 "아마도"는 내가 몰랐다는 것을 전달하는 데 사용되었습니다.
Jake

답변:


7

예, 태아 체커는 Goedel 's T의 모든 것을 타입 검사 할 수 있습니다. 체커를 사용하여 T의 반복 연산자가 종료되고 있음을 보여줌으로써이를 확인할 수 있습니다. 예를 들어 다음 정의가 작동합니다.

나는이자형아르 자형:()나는이자형아르 자형나는에프0=나는나는이자형아르 자형나는에프(+1)=에프(나는이자형아르 자형나는에프)

Fetus 체커 (또는 대부분의 다른 터미네이션 검사기)는 구조적으로 재귀적인 정의이므로 확인하기가 매우 쉽습니다.

Agda와 Coq는 모두 1 차 산술에서 아마도 총계를 훨씬 능가하는 함수의 종료를 증명합니다. 이를 가능하게하는 기능은 데이터에 대한 재귀를 통해 유형을 정의 할 수 있다는 것입니다.이를 "큰 제거"라고합니다. (ZF 세트 이론에서 대체 공리 체계 는 거의 같은 목적으로 사용됩니다.)

T를 넘어서는 것의 쉬운 예는 Goedel의 T 자체의 일관성입니다! 구문을 데이터 유형으로 제공 할 수 있습니다.

data T : Set where 
   N : T 
   _⇒_ : T → T → T

data Term : T → Set where 
   zero : Term N
   succ : Term (N ⇒ N)
   k    : {A B : T} → Term (A ⇒ B ⇒ A)
   s    : {A B C : T} → Term ((A ⇒ B ⇒ C) ⇒ (A ⇒ B) ⇒ A ⇒ C)
   r    : {A : T} → Term (A ⇒ (A ⇒ A) ⇒ N ⇒ A)
   _·_  : {A B : T} → Term (A ⇒ B) → Term A → Term B

타입 의존성은 우리가 잘 타이핑 된 T의 항만을 포함하는 항의 데이터 타입을 정의 할 수있게한다. 그런 다음 타입에 대한 해석 함수를 제공 할 수있다.

interp-T : T → Set 
interp-T N       = Nat 
interp-T (A ⇒ B) = (interp-T A) → (interp-T B)

이것은 NAgda 자연수 여야하며 T의 화살표는 Agda 함수 공간으로 해석되어야합니다. 데이터 유형 T의 구조에 대한 재귀 로 집합 을 정의하기 때문에 이것은 "큰"제거입니다 .

그런 다음 Goedel 's T의 모든 항을 Agda 항으로 해석 할 수 있음을 보여주는 해석 함수를 정의 할 수 있습니다.

interp-term : {A : T} → Term A → interp-T A
interp-term zero    = 0 
interp-term succ    = \n → n + 1
interp-term k       = \x y → x
interp-term s       = \x y z → x z (y z)
interp-term r       = Data.Nat.fold 
interp-term (f · t) = (interp-term f) (interp-term t)

(이 기계에는 Agda가 없으므로 수입, 고정 선언 및 오타가 누락되어 있습니다. 고정은 독자가 원하는 경우 편집자가 될 수있는 연습입니다.)

나는 Agda의 일관성 강도가 무엇인지 모르지만 Benjamin Werner는 유도 성 건축의 계산법 (Coq의 커널 미적분학)이 ZFC와 수많은 접근 불가능한 추기경과 일치한다는 것을 보여주었습니다.


귀하의 예에서는 큰 제거를 사용하지 않았습니다. 큰 제거는 실제로 계산 능력을 추가하지 않습니다. Impredicativity는 다음을 수행합니다. 시스템 F에는 전자가 없지만 시스템 T에서 표현할 수없는 기능을 표현할 수 있습니다.
cody

@cody : interp-T 함수는 용어에서 집합을 계산합니다. 큰 제거가 힘을 더하는 것은 분명합니다. Martin-Loef 유형 이론은 큰 제거없이 0에서 1까지 불일치를 도출 할 수 없습니다. (이것을보기 위해, 우주 / 대형 제거가 없다면 모든 의존성을 지우고 간단히 타이핑 된 용어를 얻을 수 있다는 것을 주목하라 : 이것은 하퍼와 펜닝이 LF에 대한 타당성 증명에서 한 것이다.)
Neel Krishnaswami

죄송합니다 : 예 interp-T 기능은 실제로 큰 제거를 사용합니다. 또한 0! = 1을 증명하는 데 실제로 필요하다는 것에 동의합니다. 그러나 계산 가능한 함수를 정의하는 것은 수학적 진술입증 하는 것과 다릅니다 . 내 대답은 이것을 조금 명확하게합니다. 예를 들어, 순수한 구성의 미적분은 0! = 1을 증명할 수 없습니다. 그러나 Ackermann 함수를 비교적 쉽게 정의 할 수 있습니다.
코디

이것은 Agda가 시스템 T에 대한 인터프리터를 작성할 수있는 더 일반적인 의미를 나타내지 만 날씨를 나타내지 않거나 의존하지 않는 언어 인 Foetus가 더 일반적임을 나타냅니다. 태아가 이것을 할 수 있습니까? "대규모 제거"가 아닌 경우에도 Agda가이를 수행 할 수 있습니까?
Jake

1
Agda의 문서에 따르면 종료 검사기가 태아 알고리즘을 사용한다고합니다. Foetus가 확인한 패턴 일치 및 재귀 정의로 T를 가져 와서 확장하면 T에 대한 인터프리터를 작성할 수 없습니다. 실제로, T로 계산할 수있는 함수를 전혀 바꾸지 않을 것입니다. Fetus 계산에서 Peano 산술에서 모든 종결 순서가 잘 정립되어 있습니다. 자세한 내용은 cody의 답변을 참조하십시오. Fetus 알고리즘을 사용하면 계산할 수 있는 함수 집합을 변경하지 않고도 더 많은 정의 를 작성할 수 있습니다. Agda의 대규모 제거는 실제로 기능 세트를 증가시킵니다.
Neel Krishnaswami

3

설명을 위해, Fetus는 Andreas Abel에 의해 개발되었으며 , Agda원래 종료 검사기를 개발 했으며 이후로 고급 종료 기술을 연구했습니다 .

귀하의 질문에 대한 답변은 약간 실망 스러울 수 있습니다. 입니다 정확히 시스템에서 정의 할 수있는 기능에프. 이유 : 위에서 언급 한 클래스는 2 차 산술에서 함수를 종료 할 가능성이 있습니다 (2) 차례로 시스템에서 정의 할 수있는 기능과 동일 에프(예 : 증명 및 유형 , 11 장 참조 ). 또한 다형성을 제거하면 다음과 같이 정의 할 수있는 함수로 넘어갑니다.시스템에서 정의 할 수있는 것과 일치하는 .

다시 말하지만,이에 대한 RESON은 "통화 행렬"에 의해 캡처 감소가 있다는 것이다 라도 유용 잘 설립 , 그 증거가 전적으로 수행 할 수.

그러나 이것이 태아가 시스템 보다 유용 하지 않다는 것을 의미하지는 않습니다.! 실제로 계산 기능의 특정 표현 을 수용하려면보다 복잡한 종료 분석이 필요 합니다. 예를 들어 통일 함수를 작성할 때마다 Peano Arithmetic에서 복잡한 증명을 수행하고 싶지는 않습니다. 따라서 이러한 점에서 Fetus는 매우 강력하며 Coq, Agda 또는 기타 일반적인 증거 시스템에서 허용되지 않는 방식으로 함수를 정의 할 수 있습니다.


입증 적으로 종료되는 (PA ^ 2) 함수 클래스는 내가 아는 한 종료 할 수없는 시스템 F의 함수 클래스와 어떻게 동일합니까? 또한 나는 당신이 나에게 질문에 어떻게 대답하고 있는지 이해하지 못합니다. 시스템 T가 더 많은 종류의 계산 가능한 기능을 가지고 있거나 태아가 있다고 말하고 있습니까? 나는 당신의 논리에 내가 실제로보다 더 많은 배경을 가지고 있다고 예상했던 도약이 있다고 생각합니다. 또한 귀하가 제공 한 링크가 제대로 렌더링되지 않는 잘못된 페이지로 연결되는 것 같습니다.
Jake

시스템 F의 기능이 모두 종료됩니다. 태아는 시스템 T보다 더 많은 종류의 계산 가능한 함수를 캡처하지만, 다형성을 제거하면 "우연히", 태아는 정확히 시스템 T 만 캡처합니다. 어떤 링크가 작동하지 않는지 말해 주실 수 있습니까? (및 사용중인 브라우저 :)
cody

1

원시 재귀 함수 (Functionals)에 의해 당신이 의미하는 경우 원시 재귀 함수를 하고 태아 후 태아가 아커 만 함수로 홍보 기능의 클래스와 일치하지 않는 아커 만 함수가 포함되어 있는지 알고 원시적 인 재귀 없습니다. 이것은 Ackermann에 의해 보여졌고 나중에 Rosza Peter에 의해 " Konstruktion nichtrekursiver Funktionen "1935 (불행히도 내가 아는 한 독일어로만)에서 간단한 증거가 주어졌다 .

Fetus가 캡처 한 함수 클래스와 일치하는 종료가 보장되는 더 큰 재귀 함수 클래스를 찾으면 Rosza Peter의 다른 작업이 관심을 가질 수 있습니다.

Ackermann 함수는 Rosza Peter가 " Uber die mehrfache Rekursion "1937 에서 정의한 다중 재귀 함수 클래스에 포함되어 있습니다 . 비공식적으로 다중 재귀의 기본 개념은 재귀 단계 후에 변경 될 수있는 다중 재귀 변수를 가질 수 있다는 것입니다. 예를 들어에프(,) 전화 할지도 모른다 에프(,1) 또는 에프(1,).

그러나 Rosza Peter의 " Zusammenhang der mehrfachen und transfiniten Rekursion "에 설명 된 transfinite 재귀의 개념에 의해 더 강력한 클래스가 제공됩니다 . 영구 재귀의 경우 선행 명령을 특별한 순서로 호출 할 수있는 하나의 재귀 변수가 있습니다.<

예를 들어, 정수를 정수 쌍으로 해석하고 순서를 사용할 수 있습니다

(,)<(,)(<)(<)
이것은 3 배의 정수 등으로 일반화 될 수 있습니다. 베드로는이 명령을 부른다ω2,ω등등. 한 단계 더 나아가 정수를 임의의 수의 정수로 해석 할 수 있습니다. 허락하다나는 ~이다 나는-소수. 그럼 우리는 고려할 수 있습니다=12엑스1엑스2 어디 에 인코딩 된 정수의 수를 나타냅니다 그리고 엑스나는의 담당자가 포함되어 있습니다. 값. 그녀는 다음과 같은 정수 목록의 순서를 나타냅니다.ωω이러한 재귀는 다중 재귀보다 더 강력하다는 것을 대각선으로 보여줍니다. 그러나이 클래스의 구문 적 특성이 있는지 확실하지 않습니다.

원시 재귀 함수는 아래 주석에서 언급 한 원시 재귀 함수와 동일하지 않습니다. 그러나 나는 무한 재귀의 개념을 기능으로 옮길 수 있다고 생각합니다. 그러나 기능 설정에서 여전히 더 강력한 지 여부는 확실하지 않습니다.


2
유한 유형의 원시 재귀 함수 클래스는 원시 재귀 함수 클래스보다 일반적입니다. 예를 들어 Ackermann 기능을 표현할 수 있으며 Godel의 시스템 T에서 볼 수 있습니다.
Jake
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.