일반 데이터 유형에 대한 원시 재귀 함수 정의


9

원시 재귀 함수는 자연수에 대해 정의됩니다. 그러나 개념이 다른 데이터 형식으로 일반화되는 것처럼 보이므로 예를 들어 목록을 이진 트리에 매핑하는 기본 재귀 함수에 대해 이야기 할 수 있습니다. 유추하여 자연수에 대한 부분 재귀 함수는 모든 데이터 유형의 계산 가능한 함수로 훌륭하게 일반화되며 원시 재귀 함수에 대해 동일한 종류의 일반화를 만드는 방법을 이해하고 싶습니다.

직관적으로, 목록 (예 : 연결, 머리와 꼬리 가져 오기, 요소 비교)과 같은 기본 작업을 허용하는 간단한 명령 언어와 반복 횟수를 미리 알아야하는 반복 형식을 정의하려는 경우 ( 불변 목록의 요소를 반복하는 것과 같이) 그런 언어는 목록에 대한 기본 재귀 함수를 계산할 수 있어야합니다. 그러나 이것을 공식적으로 어떻게 이해할 수 있습니까? 더 구체적으로 말하면, 언어가 하위 집합이 아닌 목록에 대한 모든 기본 재귀 함수를 계산한다는 것을 어떻게 증명할 수 있습니까?

분명히하기 위해, 나는 원시 재귀 자체의 작동보다는 단순한 재귀 함수를 잘 정의 된 함수 클래스로 이해하는 데 관심이 있습니다. 나는 일반적인 데이터 구조에 대한 원시 재귀에 쓰여지거나 실제로 자연수 이외의 다른 맥락에서 작성된 것에 대한 포인터에 관심이 있습니다.

업데이트 : 나는 McAllester와 Arkoudas의 Walther Recursion이라는 논문 에서 답 을 찾았을 것입니다. ( CADE 1996의 절차 .) 이것은보다 강력한 Walther 재귀뿐만 아니라 일반화 된 버전의 원시 재귀를 포함하는 것으로 보인다. 이 내용을 요약하면 자체 답변을 작성하려고하지만 그 동안이 메모는 동일한 질문을 가진 다른 사람들에게 도움이 될 수 있습니다.


1
정확히 무엇을 찾고 있는지 명확하지 않습니다. W 타입 을 찾으려고하는 것처럼 보이지만 그렇지 않을 수도 있습니다.
Andrej Bauer

3
"일반적인"(트리와 같은) 데이터 유형은 자연수로 매우 간단하게 인코딩 될 수 있으며 자연에 대한 PR 함수는 원하는 것을 매우 잘 표현합니다. 또는 "보통"반복자를 사용하여 Gödel의 System T 확장을 엄격하게 양의 1 차 데이터 유형으로 사용할 수 있습니다.
코디

1
이 "기능"을 제거 하려면 제거기의 출력 유형을 기본 유형으로 제한 할 수 있습니다 .
코디

1
여전히 제한된 W 유형의 형태가 당신이 찾고있는 것 같습니다. 유한 분기를 갖는 W 타입과 리 커서는 다른 제한된 W 타입으로 제거하는 것으로 제한됩니다.
Andrej Bauer

1
CADE 컨퍼런스 1996 방문 : dblp.org/db/conf/cade/cade96
John Fisher

답변:


5

일반적으로 데이터 유형 (목록, 트리 등)이있는 언어에서는 원시 재귀가 예상하는 것처럼 정확하게 작동하는 함수 언어를 쉽게 설명 할 수 있습니다.

예를 들어 데이터 유형이 이고 생성자 은 유형이1,,

나는:1나는2나는케이1나는

출력 유형 대한 리 커서 는 유형을 갖습니다.아르 자형이자형영형영형

아르 자형이자형영형:(11케이11영형영형)영형

운영 의미론은 다음과 같습니다.

아르 자형이자형영형 에프1  에프 (나는 1케이나는 1미디엄)에프나는 1케이나는 (아르 자형이자형영형 에프1 에프 1)(아르 자형이자형영형 에프1에프 미디엄)

각각의 .나는

입 가득! 자연수의 경우, 적어도

아르 자형이자형영형:(영형영형)영형영형

아르 자형이자형영형 에프0 에프1 0에프1 0
아르 자형이자형영형 에프0 에프1 (에스 )에프0  (아르 자형이자형영형 에프0 에프1 )

원하는대로 (제로 생성자는 인수가 0입니다!).

이제 우리는 상수 함수와 프로젝션을 허용 하고 비 함수 타입 대해 의 임의의 사용을 허용 하면 정확히 기본 재귀를 갖습니다.아르 자형이자형영형영형

모든 가 작동하지 않는 경우 데이터 유형의 일반적인 Gödel 인코딩은 동일한 기본 재귀 함수를 제공합니다.나는제이


이 프로세스에 대해 좀 더 우아한 설명을하는 것이 좋습니다. 카를로스의 대답은 다음과 같습니다. 이러한 데이터 유형은 다항식 펑터 ( polynomial functors) 라고 불리는 특정 펑터 의 초기 대수학 으로 범주 이론에서 더 우아하게 설명 될 수 있습니다 . 재귀는이 대수의 초기 형태 일 뿐이며 , 때로는 혼동을 일으키는 사람들에 의해 대변인 이라고 불린다 . 이 형태는 초기 대수의 구성에 의해 존재합니다.

paramorphism는 제가 위에서 설명한 단지 특정 변종이다.


나는 이것이 나를 넘어 다소 두려워합니다. 왜 우리가 얻기를 바랐습니까?아르 자형이자형영형:(영형영형)영형영형형식 서명으로? 이것이 자동적으로 원시 재귀를 나타내는 것을 의미합니까? (함수 유형에서만 읽을 수있는 방법을 상상하는 데 어려움을 겪고 있습니다.) 나는 Haskell에서 프로그래밍 할 수있는 정도까지 유형 이론에 익숙하지만 나는 형식주의에 익숙하지 않습니다. 다시 사용하십시오. 당신이 쓴 것을 이해하기에 충분한 배경을 어디에서 읽을 수 있습니까?
Nathaniel

의 유형은 위의 일반적인 스키마를 따릅니다. 이는 동작 시맨틱이 PR 함수의 정의에서 재귀 연산을 나타 내기 때문에 원시 재귀를 나타냅니다. 나는 작동 의미론을 설명하지 않았으므로 주석을 확장 할 것입니다. 아르 자형이자형
코디

기초적인 참고 자료는 없지만, 슬라이드는 훌륭하고 부드러운 소개를 제공한다고 생각 합니다. Ralph Mattes 논문의 3 장에서는 "1 차"유도 형이 아닌 유형을 허용하지만 기술적 인 세부 사항에 대해 자세히 설명합니다.
코디

2

나는 최근에 바로이 질문을하고 있었고, 몇 가지 흥미로운 기사를 발견했다.

초기 유도 적으로 제시된 논리 : (a) 특정 요구 사항을 충족하는 모든 데이터 유형에 대한 원시 재귀에 대한 일반적인 개념을 제공하는 논리를 정의합니다. (b)이 논리가 원시 재귀 산술의 보수적 인 확장임을 증명합니다.

루프 프로그램의 복잡성 : 루프 프로그램 의 개념이 원시 재귀 함수와 동등 함을 증명합니다.

원시 재귀 집합을위한 논리 프로그램 : 논리 프로그램 클래스가 원시 재귀 함수와 동등 함을 증명합니다.

원시 재귀 집합 함수의 증명 이론적 특성화 : 주어진 집합에 대한 모든 원시 재귀 기능이 매우 약한 집합 이론에서 정의 가능한 기능임을 증명합니다.


0

아마도 당신은 기형 의 개념을 생각하고 있습니까?

에서 바나나, 렌즈, 봉투 및 철조망과 기능 프로그래밍 :

자연수의 경우, 기형은 함수입니다 h=(,) 형태의

h0=h(+1)=(h)

예를 들어 계승 함수는 =1미디엄=(+1)×미디엄.

목록의 경우, 기형은 함수일 것입니다 h 형태의

h=h(단점)=(,h)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.