Ackermann 함수 - Ackermann function

에서 계산 가능성 이론아커 만 함수 따서, 빌헬름 아커 만이 , 단순한 중 하나 인 [1] 과의 예는 초기 발견 계산 가능 함수 없는 프리미티브 재귀 . 모든 원시 재귀 함수는 전체적이고 계산 가능하지만 Ackermann 함수는 모든 계산 가능한 전체 함수가 원시 재귀가 아니라는 것을 보여줍니다. Ackermann의 출판 후 [2]그의 함수 (3 개의 음이 아닌 정수 인수를 가짐)의 많은 저자는이를 다양한 목적에 맞게 수정하여 오늘날 "Ackermann 함수"는 원래 함수의 수많은 변형을 나타낼 수 있습니다. 하나의 공통 버전 인 두 인수 Ackermann–Péter 함수 는 음이 아닌 정수 mn에 대해 다음과 같이 정의됩니다 .

그 가치는 작은 입력에도 빠르게 증가합니다. 예를 들어, A (4, 2) 는 19,729 개의 십진 자릿수 [3] 의 정수입니다 (2 65536 -3 또는 2 2 2 2 2 -3에 해당).

역사

1920 년대 후반 David Hilbert의 학생 인 수학자 Gabriel SudanWilhelm Ackermann 은 계산의 기초를 연구하고있었습니다. 수단, ACKERMANN은 모두 신용된다 [4] 발견과 계산 가능한 기능 하지 않습니다 (일부 참조 단순히 "재귀"라고합니다) 원시 재귀를 . 수단은 잘 알려지지 않은 수단 기능 을 발표 한 후 얼마 지나지 않아 독립적으로 1928 년에 Ackermann이 자신의 기능을 발표했습니다. (그리스 문자 phi ). Ackermann의 3 개 인수 함수,, p = 0, 1, 2에 대해 덧셈 , 곱셈지수 의 기본 연산을 다음 같이 재현하도록 정의 됩니다.

및에 대한 P > 2는이 비교 될 수있는 방식이 기본 연산 연장 하이퍼 연산을 :

(전체 계산 가능하지만 원시적이지 않은 재귀 함수로서의 역사적 역할을 제외하고, Ackermann의 원래 함수는 지수화를 넘어 기본 산술 연산을 확장하는 것으로 보입니다. 그 목적 -Goodstein 하이퍼 오퍼레이션 시퀀스 와 같은 .)

에서 무한에 , [5] 데이비드 힐버트 아커 만 함수가 원시적 인 재귀가 아니라는 것을 가정하지만 실제로 그의 논문에서 가설을 입증 ACKERMANN, 힐버트의 개인 비서이자 전 학생이었다 실제 숫자의 힐버트의 건설에 . [2] [6]

Rózsa Péter [7]Raphael Robinson [8]은 나중에 많은 저자들이 선호하는 Ackermann 함수의 2 변수 버전을 개발했습니다.

일반화 된 하이퍼 오퍼레이션 시퀀스 , 예 :, Ackermann 함수의 버전이기도합니다. [9]

1963 년 RC Buckhyperoperation sequence대한 직관적 인 2- 변수 변형 (F [10] )을 기반으로합니다 . [11]

.

대부분의 다른 버전에 비해 Buck의 함수에는 불필요한 오프셋이 없습니다.

정의 및 속성

Ackermann의 원래 3 개 인수 함수 음이 아닌 정수 m , np에 대해 다음과 같이 재귀 적 으로 정의 됩니다 .

다양한 2 인수 버전 중에서 Péter와 Robinson이 개발 한 버전 (일부 저자에 의해 "아커 만 함수"라고 함)은 다음과 같이 음이 아닌 정수 mn에 대해 정의 됩니다.

평가가 즉시 명확하지 않을 수 있습니다. 항상 종료됩니다. 그러나 재귀는 각 재귀 응용 프로그램에서 m이 감소하거나 m 이 동일하게 유지되고 n이 감소 하기 때문에 제한 됩니다. n 이 0에 도달 할 때마다 m이 감소하므로 m도 결국 0에 도달합니다. (좀 더 기술적으로 표현하면, 각 경우에 쌍 ( m , n ) 음이 아닌 단일 정수의 순서와 같이 정렬 된 쌍 사전 식 순서로 감소합니다 . 이것은 순서에서 내려갈 수 없음을 의미합니다. 연속적으로 무한히 여러 번.) 그러나 m감소 n얼마나 증가 할 수 있는지에 대한 상한선이 없으며 종종 크게 증가합니다.

Péter-Ackermann 함수는 Ackermann 함수의 다양한 다른 버전과 관련하여 표현할 수도 있습니다.

...에 대한
그 후
...에 대한 .
( n = 1n = 2논리적으로 추가 될 수 있는 A ( m , −2) = −1A ( m , −1) = 1 에 해당합니다.)

1, 2 또는 3과 같은 m 값이 작은 경우 Ackermann 함수는 n에 대해 상대적으로 느리게 증가합니다 (최대 지수 ). 들어 m ≥ 4 , 그러나, 그것은 훨씬 더 빠르게 성장; A (4, 2) 조차도 약 2 × 10 19 728 이고 A (4, 3) 의 소수 확장은 일반적인 측정 값으로 매우 큽니다.

(Péter-) Ackermann 함수의 흥미로운 점은 지금까지 사용하는 산술 연산은 1을 더하는 것뿐이라는 것입니다. 빠르게 성장하는 힘은 중첩 된 재귀만을 기반으로합니다. 이것은 또한 실행 시간이 적어도 출력에 비례한다는 것을 의미하므로 또한 매우 큽니다. 실제로 대부분의 경우 실행 시간은 출력보다 훨씬 큽니다. 아래를 참조하십시오.

mn 을 동시에 증가시키는 단일 인수 버전 f ( n ) = A ( n , n )지수 함수 , 팩토리얼 함수, 다중 함수와 같은 매우 빠르게 성장하는 함수를 포함하여 모든 원시 재귀 함수를 왜소하게 만듭니다. 수퍼 팩터 함수, Knuth의 위쪽 화살표 표기법을 사용하여 정의 된 함수 (인덱싱 된 위쪽 화살표가 사용되는 경우 제외). 빠르게 성장하는 계층 구조 에서 f ( n )은 f ω ( n ) 과 거의 비슷 하다는 것을 알 수 있습니다.. 이러한 극단적 인 성장이 있음을 나타 내기 위해 이용 될 수 F 등으로 무한대의 메모리를 가진 시스템에서 명백하게 계산 가능하다 튜링 기계 등 A는 계산 가능 함수가 빠르게 모든 프리미티브 재귀 함수보다 증가되므로 원시 순환 아니다.

지수가 있는 카테고리 에서 동형을 사용하여(컴퓨터 과학에서는이를 currying이라고합니다 ), Ackermann 함수는 다음과 같이 고차 함수에 대한 원시 재귀를 통해 정의 될 수 있습니다.

여기서 S ( n ) = n + 1 은 일반적인 후속 함수 이고 Iter 는 원시 재귀에 의해 정의 된 기능적 거듭 제곱 연산자를 나타냅니다 .

함수 이렇게 정의 된 것은 Ackermann 함수와 일치합니다. 위에 정의 : .

Ackerman이 반환되기 전 재귀 횟수 (3,3)


확장 예시

Ackermann 함수가 어떻게 빠르게 성장하는지 확인하려면 원래 정의의 규칙을 사용하여 몇 가지 간단한 표현을 확장하는 것이 도움이됩니다. 예를 들어, 하나는 완전히 평가할 수 있습니다. 다음과 같은 방식으로 :

방법을 보여주기 위해 의 계산 결과는 많은 단계와 많은 수를 초래합니다.

값 표

Ackermann 함수의 계산은 무한 테이블의 관점에서 다시 설명 할 수 있습니다. 먼저 자연수를 맨 윗줄에 배치합니다. 표에서 숫자를 결정하려면 바로 왼쪽에있는 숫자를 가져옵니다. 그런 다음 해당 번호를 사용하여 해당 번호와 한 행 위로 주어진 열에서 필요한 번호를 찾습니다. 왼쪽에 숫자가 없으면 이전 행에서 "1"이라는 제목의 열을보십시오. 다음은 표의 왼쪽 상단 부분입니다.

A의( m , n )
미디엄
0 1 2 4
0 1 2 4 5
1 2 4 5 6
2 5 7 9 11
5 13 29 61 125
4 13


65533


2 65536 − 3










5 65533

6
미디엄

재귀 지수 또는 Knuth 화살표 로만 표현되는 여기의 숫자 는 매우 커서 일반 십진수로 표기하기에는 너무 많은 공간을 차지합니다.

테이블의이 초기 섹션에서 큰 값이 발생 했음에도 불구하고 Graham 's number 와 같이 더 큰 숫자가 정의되었습니다. 예를 들어 적은 수의 Knuth 화살표로는 쓸 수 없습니다. 이 숫자는 Ackermann 함수를 자신에게 재귀 적으로 적용하는 것과 유사한 기술로 구성됩니다.

이것은 위의 표를 반복하지만 패턴을 명확하게 보여주기 위해 함수 정의의 관련 표현식으로 값을 대체했습니다.

A의( m , n )
미디엄
0 1 2 4
0 0 + 1 1 + 1 2 + 1 3 + 1 4 + 1 n + 1
1 A (0, 1) A (0, A (1, 0))
= A (0, 2)
A (0, A (1, 1))
= A (0, 3)
A (0, A (1, 2))
= A (0, 4)
A (0, A (1, 3))
= A (0, 5)
A (0, A (1, n -1))
2 A (1, 1) A (1, A (2, 0))
= A (1, 3)
A (1, A (2, 1))
= A (1, 5)
A (1, A (2, 2))
= A (1, 7)
A (1, A (2, 3))
= A (1, 9)
A (1, A (2, n -1))
A (2, 1) A (2, A (3, 0))
= A (2, 5)
A (2, A (3, 1))
= A (2, 13)
A (2, A (3, 2))
= A (2, 29)
A (2, A (3, 3))
= A (2, 61)
A (2, A (3, n -1))
4 A (3, 1) A (3, A (4, 0))
= A (3, 13)
A (3, A (4, 1))
= A (3, 65533)
A (3, A (4, 2)) A (3, A (4, 3)) A (3, A (4, n -1))
5 A (4, 1) A (4, A (5, 0)) A (4, A (5, 1)) A (4, A (5, 2)) A (4, A (5, 3)) A (4, A (5, n -1))
6 A (5, 1) A (5, A (6, 0)) A (5, A (6, 1)) A (5, A (6, 2)) A (5, A (6, 3)) A (5, A (6, n -1))

Ackermann 함수가 원시적 재귀 적이 지 않다는 증거

어떤 의미에서 Ackermann 함수는 기본 재귀 함수 보다 빠르게 성장 하므로 그 자체가 기본 재귀가 아닙니다.

특히 모든 기본 재귀 함수에 대해 음이 아닌 정수가 있습니다. 음이 아닌 모든 정수에 대해 ,

이것이 설정되면 다음과 같습니다. 그 자체는 원시 재귀 적이 지 않습니다. 모순으로 이어질 것입니다 .

증명 [12] 는 다음과 같이 진행됩니다 : 클래스 정의 Ackermann 함수보다 느리게 성장하는 모든 함수 중

그리고 그것을 보여 모든 기본 재귀 함수를 포함합니다. 후자는 다음을 보여줌으로써 달성됩니다. 상수 함수, 후속 함수, 프로젝션 함수를 포함하며 함수 구성 및 기본 재귀 작업으로 닫힙니다.

기능하기 때문에 F ( N ) = ( N , N ) 위의 고려는 매우 빠르게 성장 그 역 함수 , f를 -1 , 매우 느리게 성장한다. 역 Ackermann 함수 f −1 은 일반적으로 α 로 표시됩니다 . 실제로, α ( n를 ) 상관 실제 입력 크기보다 적은 5 N 때문에 (4, 4) 의 순서에 .

This inverse appears in the time complexity of some algorithms, such as the disjoint-set data structure and Chazelle's algorithm for minimum spanning trees. Sometimes Ackermann's original function or other variations are used in these settings, but they all grow at similarly high rates. In particular, some modified functions simplify the expression by eliminating the −3 and similar terms.

A two-parameter variation of the inverse Ackermann function can be defined as follows, where is the floor function:

This function arises in more precise analyses of the algorithms mentioned above, and gives a more refined time bound. In the disjoint-set data structure, m represents the number of operations while n represents the number of elements; in the minimum spanning tree algorithm, m represents the number of edges while n represents the number of vertices. Several slightly different definitions of α(m, n) exist; for example, log2 n is sometimes replaced by n, and the floor function is sometimes replaced by a ceiling.

Other studies might define an inverse function of one where m is set to a constant, such that the inverse applies to a particular row. [13]

The inverse of the Ackermann function is primitive recursive.[14]

Use as benchmark

The Ackermann function, due to its definition in terms of extremely deep recursion, can be used as a benchmark of a compiler's ability to optimize recursion. The first published use of Ackermann's function in this way was in 1970 by Dragoș Vaida[15] and, almost simultaneously, in 1971, by Yngve Sundblad.[16]

Sundblad's seminal paper was taken up by Brian Wichmann (co-author of the Whetstone benchmark) in a trilogy of papers written between 1975 and 1982.[17][18][19]

See also

References

  1. ^ Monin & Hinchey 2003, p. 61.
  2. ^ a b Ackermann 1928.
  3. ^ "Decimal expansion of A(4,2)". kosara.net. August 27, 2000. Archived from the original on January 20, 2010.
  4. ^ Calude, Marcus & Tevy 1979.
  5. ^ Hilbert 1926, p. 185.
  6. ^ van Heijenoort 1967.
  7. ^ Péter 1935.
  8. ^ Robinson 1948.
  9. ^ Ritchie 1965, p. 1028.
  10. ^ with parameter order reversed
  11. ^ Buck 1963.
  12. ^ Woo, Chi (2009-12-17). "Ackermann function is not primitive recursive | planetmath.org". planetmath.org. Archived from the original on 2013-05-09.
  13. ^ Pettie 2002.
  14. ^ Matos 2014.
  15. ^ Vaida 1970.
  16. ^ Sundblad 1971.
  17. ^ Wichmann 1976.
  18. ^ Wichmann 1977.
  19. ^ Wichmann 1982.

Bibliography

External links