Ackerman 함수에 대한 명시 적 mu-recursive 표현


15

표준 mu-recursive 연산자를 통해 Ackerman 함수 (실제로 Rózsa Péter와 Raphael Robinson이 제안한 버전에 관심이 있습니다)를 빌드하는 방법을 알려 주시겠습니까? 나는 Péter와 Robinson의 원본 논문을 사용해 보았지만 Péter의 논문은 영어와 Robinson의 논문 "Recursion and Double Recursion"및 "Primitive Recursive Functions"와 다른 언어를 사용합니다. 우선 도움이되지 않습니다. Ackerman 함수를 정의하기 위해 double recursion operator를 호출하므로이 경우 mu-recursive 용어로 연산자를 명시 적으로 정의해야합니다.

대답은 P. Smith가“고델의 정리에 대한 소개”(CUP, 2007) (29.4 Ackermann-Peter 함수는 μ-recursive)에서 가장 잘 답을 얻지 만 다음과 같이 결론을 내린다. 지루하지만 어렵지는 않습니다. 여기에 세부 사항을 입력하면 배울 것이 없습니다. "

또한 Rózsa Péter의 "재귀 기능"(1967, Academic press)을 시도했습니다. 주어진 재귀 연산자에는 많은 변형이 있습니다. 보통 하나는 다른 것으로 줄어 듭니다. Ackerman 함수의 정의와 단계의 순서에 맞는 재귀 연산자 유형이 원시 redursion 및 최소화 연산자로 줄어든다고 생각하지만 전체적으로 조사 할 수는 없습니다.


1
실제로 이것은 처음에 보이는 것만 큼 어렵지 않습니다. 트릭은 μ 연산자가 Ackerman 함수의 계산, 즉 입력까지의 값 테이블을 검색 한 다음 테이블이 함수의 정의를 따르는 지 확인하는 것입니다. 유한 시퀀스를 인코딩 / 디코딩하고 테이블을 확인하는 것이 필요합니다. 인코딩 / 디코딩은 많은 교과서에 명시 적으로 정의되어 있으며, 테이블의 항목들 사이의 간단한 관계에 대해 제한된 범용 정량 자에 의해 검사가 수행 될 수 있습니다. 경계 범용 정량
자는

재귀 에 대한 경계 곱셈의 명시 적 정의는 교과서에서도 찾을 수 있습니다. μ
Kaveh

@Kaveh 네, P. Smith의“고델의 정리에 대한 소개”에서 같은 아이디어가 구현되었습니다. 최소화 연산자의 인코딩 및 적용이 제공됩니다. 까다로운 부분은 이름을 지정할 때 "테이블"을 생성하는 방법입니다. 스미스는 그것을 건너 뛰었다. 따라서 여기서 해결책을 기다리는 대신 더 열심히 생각해야 할 것 같습니다.) 일반적인 접근 방식에 대한 귀하의 승인에 감사드립니다.
Artem Pelenitsyn

테이블은 유한 함수 순서에 따라 항목이 색인되는 유한 순서입니다. 여기서 R ( c , x , y) )μc:x<Len(c)y,z<x,x=<y,z>→c<y,z>=R(c,x,y)R(c,x,y) 에 대한 식의 rhs입니다 . Ack(x,y)
Kaveh

답변:


13

Ackermann 함수를 기본 연산자까지 완전히 분해하는 것은 실제로 꽤 오래 걸리지 만 여기 스케치가 있습니다.

계산할 때 유의 ( m , X ) 는 형식의 표현으로 취급되는 연산 중 어느 시점에서 재귀를 ( m 1 , ( m 2 , ... , ( m에서 K , Z ) ... ) . 주어 역함수 ( π 1 , π 2 ) 가 포함 된 이젝트 쌍 함수 p 에서는 이 상태를 p ( z , p ( kA(m,x)A(m1,A(m2,,A(mk,z))p(π1,π2) ( k = 0 인 경우 p ( z , 0 ) ). 그런 다음 상태에 따라 1 단계 평가 기능을 정의 할 수 있습니다.p(z,p(k,p(mk,,p(m2,m1))p(z,0)k=0

;e(p(z,0))=p(z,0)

;e(p(z,p(k,p(0,c))))=p(z+1,p(k1,c))

;e(p(0,p(k,p(m+1,c))))=p(1,p(k,p(m,c)))

.e(p(z+1,p(k,p(m+1,c))))=p(z,p(k+1,p(m+1,p(m,c))))

그런 다음 프리미티브 재귀를 사용하여 n 단계 평가 함수를 얻습니다.

E ( n + 1 , m , x ) = e ( E ( n , m , x ) ) .E(0,m,x)=p(x,p(1,m))E(n+1,m,x)=e(E(n,m,x))

최종적으로, 포장 주위 -recursion E를 우리는 폼의 상태를 얻는 점 찾을 ( Z , 0 ) - Z는 것이다 ( m , X ) .μEp(z,0)zA(m,x)


감사! 하나 더 많은 질문 (아마도 순진하고 미안합니다) : 패턴 일치와 같은 정의 (f (0) = ..., f (n + 1) = ...) 널리 사용되었지만 실제로는 mu-recursive 함수의 정의. 그들은?
Artem Pelenitsyn

이러한 종류의 대소 문자 구분 (예 : f ( 0 , y ) = g ( y )f ( x + 1 , y ) = h ( x , y )로 정의 하는 것은 특별한 경우입니다. 실제로 이전 값을 사용하지 않는 원시 재귀. A ( x , y ) 계산에서 보조 함수와 역 π를 추가로 사용합니다.f(x,y)f(0,y)=g(y)f(x+1,y)=h(x,y)A(x,y) 이걸 기본 연산 세트로 나누고 싶을 때 상당히 큽니다. π1,π2
Klaus Draeger

예를 들어, 정의 변환 수도 로서 E ( S ) =을 f를 1 ( π 1 ( S ) , π (2) ( S ) ) 여기서, F (1) ( Z , 0 ) = P ( Z , 0 )(F) (1) ( z , m + 1 ) = f 2 ( z , π 1ee(s)=f1(π1(s),π2(s))f1(z,0)=p(z,0)f1(z,m+1)=f2(z,π1(m+1),π2(m+1))f2

7

이것은 Kaveh가 게시 한 아이디어의 변형이지만 실제로 핸드 웨이브를하지 않고도 양탄자 아래에서 많은 불쾌한 세부 사항을 쓸 수 있기 때문에 게시하고 있습니다.

중요한 사실은 Ackermann 함수 의 그래프 가 원시 재귀라는 것입니다. 에서 매우 조잡한 원시 재귀 바운드 를 찾는 것은 어렵지 않습니다.B(m,n,w)A(m,n)=w. Don't try to get sharp bounds — the cruder the easier! Something like B(m,n,w)=2mww should be good enough, but that depends on your choice of coding scheme. Since the verification of the table values can be described by a bounded formula, it is primitive recursive.

Once you have a primitive recursive definition for the graph G(m,n,w) of the Ackermann function, simply define A(m,n)=μwG(m,n,w).

Sadly, this strategy doesn't work for all functions defined by double (or multiple) recursion. The reason it works for the Ackermann function — as you will see when trying to figure out a good B(m,n,w) — is that it grows very monotonically. For the general case, you must use Kaveh's idea and have μ look for the appropriate table of values. This is basically the same reason why the Kleene's Normal Form Theorem needs to do a projection after applying the μ operator.


1
Hi François. It's nice to see you on cstheory.
Kaveh

Hi Kaveh. Nice to finally get to answer something here!
François G. Dorais
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.