범용 재귀 함수 작성


9

보편적 재귀 함수 의 짧은 명시 적 구성이 있습니까? 내가 본 모든 정의에는 어떤 방식 으로든 튜링 머신의 번호가 매겨져 있지만, 파이썬, 하스켈 등과 같은 고급 프로그래밍 언어로 작성하는 것은 어렵고 관리하기 어려운 것처럼 보입니다.


질문은 원래 SO 에서 요청되었으며 여기에 더 적합한 것 같습니다.
sdcvvc

1
범용 재귀 함수의 기능은 재귀 함수 및 입력의 인덱스에서 결과를 계산할 수 있도록 몇 가지 재귀 함수 (또는 동등하게 튜링 머신)를 정확하게 제공하는 것입니다. 따라서“튜링 기계에 번호를 매기 지 않은 보편적 재귀 기능”은 나에게 그럴듯하게 들리지 않습니다.
Tsuyoshi Ito

3
연구 수준이 아닙니다. Turing-complete language에 대한 모든 통역사는 보편적 인 재귀 함수입니다.
Warren Schudy

답변:



13

확실한. Godel의 기본 재귀 함수 각각을 계산 하는 루틴을 작성하고 무제한 검색 연산자를위한 루틴을 작성하십시오. 이 방법으로 계산할 수있는 기능 세트는 튜링 기계가 계산할 수있는 기능 세트와 같습니다. 자세한 내용은 여기를 참조 하십시오 .

단점은 유니버설 프로그램에 대한 모든 입력을 간단한 작업 측면에서 프레임해야한다는 것입니다. 물론 컴파일러의 목적입니다.


10

튜링이 완료된 언어에 대한 통역은 보편적 인 재귀 함수입니다. C ++ 또는 Python과 같은 고급 언어에 대한 인터프리터가 있습니다.

고델 넘버링은 존재하지만 내재적으로 존재합니다. 예를 들어, 재귀 함수를 계산하는 C ++ 코드 에 대한 색인입니다 .


Turing Machines (또는 Register Machines 또는 재귀 함수)에 대한 인터프리터도 범용 재귀 함수이며이를 구현하는 것은 어렵지 않습니다. 몇 년 전에 C ++로 구현했으며 파이썬에서는 더 간단 할 것이라고 확신합니다. Google을 사용하면 인터넷에 많은 무료 시뮬레이터가 있으며 일부는 오픈 소스입니다.
Kaveh

8

범용 함수 u는 Haskell과 같은 언어 (부작용, 고차 함수 없음)로 매우 쉽게 작성할 수 있습니다.

u f x = f x

이 함수 u는 프로그램 f과 입력 테이프를 (설명) 받아들이고 x실행 결과를 알려 주기 때문에 보편적 f입니다 x.

이 답변이 완전히 심각하지는 않지만 Haskell과 같은 언어의 컴파일러 또는 인터프리터에는 이미 범용 함수에 필요한 모든 구성 요소가 포함되어 있음을 보여줍니다. 이야기의 교훈은 튜링 머신의 관점에서 범용 함수를 구현하는 것에 대해 걱정하는 것보다 컴파일러와 인터프리터의 작동 방식을 연구하는 데 시간이 더 걸린다는 것입니다.


그러나 u함수를 사용합니다-고차 함수라고 부릅니다. u정수 또는 일반 대수 데이터 유형을 사용 하고 싶습니다 . 인수 u가 유형 인 한 특정 계산 모델을 강요하지 않습니다. 예를 들어 문자열에서 / 문자열로 직렬화 할 수 있습니다.
sdcvvc

실제 머신에서 (코드가 컴파일되면) u바이트의 유한 시퀀스 인 클로저를 사용합니다. 일반적인 utm 정리 에서조차 정수 u는 함수를 나타냅니다.
Andrej Bauer

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