아커만 함수

Ackermann function

계산가능성 이론에서 빌헬름 아커만 함수의 이름을 딴 아커만 함수는 원시적 재귀성아닌계산가능함수의 가장 단순하고[1] 가장 먼저 발견된 예 중 하나이다.모든 원시 재귀 함수는 총체적이고 계산 가능하지만, Ackermann 함수는 모든 총 계산 가능한 함수가 원시 재귀 함수는 아니라는 것을 보여준다.아커만이 자신의 기능을 출판한[2] 후(비음수 정수 인수가 세 개 있었던) 많은 저자들이 다양한 목적에 맞게 수정하여 오늘날 "아커만 함수"는 수많은 변형 중 어느 것도 본래의 함수를 지칭할 수 있도록 하였다.하나의 일반적인 버전인 두 개의 주장 Ackermann-Péter 함수는 음이 아닌 정수 mn에 대해 다음과 같이 정의된다.

그것의 가치는 작은 입력에도 불구하고 빠르게 증가한다.예를 들어 A(4, 2)는 소수점 19[3],729자리(2-365536 또는 2-3과2222 동일)의 정수다.

역사

1920년대 후반, 수학자 가브리엘 수단데이비드 힐버트의 학생 빌헬름 애커먼이 연산의 기초를 연구하고 있었다.수단과 아커만 모두 원시적 재귀가 아닌 총 계산 가능한 함수(일부 참조에서 단순히 "재귀적"이라고 칭함)를 발견한 것으로 인정받고[4] 있다.수단은 덜 알려진 수단 함수를 발표했고, 그 직후 그리고 독립적으로 1928년에 아커만은 그의 함수 varphi 을 발표하였다.Ackermann의 3개 인수 함수인 , , p) = , 에 대해 덧셈, 곱셈, 지수의 기본 연산을 다음과 같이 재현한다.

그리고 p > 2의 경우, 이러한 기본적 연산을 초작용으로 비교할 수 있는 방식으로 확장한다.

(총컴퓨팅은 가능하나 일차적인 리커시브 함수로서의 역사적 역할과는 달리, 아커만의 본래의 함수는 그 목적을 위해 특별히 설계된 아커만 함수의 변종(예: 굿스타인초동작렬)처럼 매끄럽게는 아니지만, 기본 산술 연산을 지수 이상으로 확장하는 것으로 보인다..)

인피니트([5]On the Infinite)에서 데이비드 힐버트는 아커만 함수가 원시적인 재귀적 기능이 아니라 힐버트의 개인 비서이자 전 학생인 애커만(Ackermann)이라고 가설을 세웠는데, 그는 실제로 그의 논문 '힐버트의 실제 숫자 구성'에서 그 가설을 증명했다.[2][6]

로자 페터[7] 라파엘 로빈슨[8] 후에 거의 모든 작가들이 선호하는 아커만 함수의 2변형 버전을 개발했다.

일반화된 초작동 시퀀스예: ( ,, )=[ 도 Ackermann 함수의 한 버전이다.[9]

1963년 R.C. Buck과작동 시퀀스에 직관적인 F 을(를) 기반으로 했다.[10][11]

대부분의 다른 버전에 비해 Buck의 함수는 본질적이지 않은 오프셋을 가지고 있지 않다.

Ackermann 함수의 다른 많은 버전이 조사되었다.[12]

정의

정의: m-ari 함수로써

Ackermann의 원래 3개 인수 함수 , , p) 은(는) 이 아닌 정수 m {\ 에 대해 다음과 같이 반복적으로 정의된다

다양한 두 가지 주장 버전 중, Péter와 Robinson(대부분 저자에 의해 "The" Ackermann 함수라고 불리는 것)이 개발한 것은 다음과 같이 비부정 m n 에 대해 정의된다.

Ackermann 함수는 또한 과작동 순서와 관련하여 다음과 같이 표현되었다.[13][14]

또는 Knuth의 위쪽 화살표 표기법(정수 지수 - -2에 확장):
또는 Buck의 함수 F:[10]

정의: 반복된 1ari 함수

를 f 의 n번째 반복으로 정의하십시오

반복은 스스로 일정한 횟수로 함수를 구성하는 과정이다.함수 구성연관 연산이기 때문에 n( )= ( )= ( x ) }(.

Ackermann 함수를 단항 함수의 시퀀스로 간주하여 A ( )= A ( , n) 를 설정할 수 있다

그런 다음 함수는 A 1, 2,. . . .반복에서 정의된 개의 단일[n 2] 함수:

연산

Ackermann 함수의 재귀적 정의는 자연스럽게 용어 재작성 시스템(TRS)으로 전환할 수 있다.

TRS, 2ari 함수에 기반

2-ari Ackermann 함수의 정의는 명확한 감소 규칙으로 이어진다.

계산 ( 1,) A

감소 순서는

가장 왼쪽(단계) 전략: 가장 왼쪽 내측(한 단계) 전략:

( , n) (를) 계산하려면 스택을 사용할 수 있으며, 이 스택에는 처음에는 {\ m} 요소가 포함되어 있다

그런 다음 반복적으로 두 개의 상위 요소를 규칙에[n 4] 따라 교체한다.

으로m ,n {\,nangle

WHY stackLength <> 1 { POP 2 요소, PUSH 1 또는 2 또는 3 요소, r1, r2, r3 규칙 적용 }

필적은 그로스만&자이트만(1988)에 발표된다.

예를 들어, 입력 에서 2,

스택 구성 감액을[n 5] 반영하다

언급

  • 로제타 코드의 225개 컴퓨터 언어로 가장 왼쪽 내부를 찌르는 전략이 실행된다.
  • 모든 , 대해 ( , n) 의 계산은()+ 1) 단계 이하가 걸린다.[17]
  • 그로스만&(1988)은 m ) {의 계산에서 스택의 최대 는 M> {\이고 최대 길이는 > 0 이라고 지적했다.
Their own algorithm, inherently iterative, computes within time and within space.

반복된 1ari 함수에 기반한 TRS

반복된 1ari Ackermann 함수의 정의는 다른 감소 규칙으로 이어진다.

함수 구성이 연관성이 있기 때문에 규칙 r6 대신 정의할 수 있다.

이전 섹션과 마찬가지로 A ( 의 연산을 스택으로 구현할 수 있다.

처음에 스택에는 세 가지 요소인 , 1이(가) 포함되어 있다

그런 다음 반복적으로 세 가지 상위 요소를 규칙에[n 4] 따라 교체한다.

,m, 1,부터 개략적으로 시작

WHY stackLength <> 1 { POP 3 요소, PUSH 1 또는 3 또는 5 요소, r4, r5, r6; } 규칙 적용

입력 ,, 1에서 연속 스택 구성은

그에 상응하는 동일성은 다음과 같다.

규칙 r6 대신 r7을 사용하면 스택의 교체가 뒤따를 것이다.

그런 다음 연속적인 스택 구성은

그에 상응하는 동일성은 다음과 같다.

언급

  • 주어진 입력에서 지금까지 제시된 TRS는 동일한 수의 단계로 수렴한다.또한 동일한 감소 규칙을 사용한다(이 비교에서 규칙 r1, r2, r3은 각각 규칙 r4, r5, r6/r7과 "동일한" 것으로 간주된다).예를 들어, ( ,의 감소는 6 × r1, 3 × r2, 5 × r3의 14 단계로 수렴된다. ( ) }(1감소는 동일한 14단계: 6 × r4, 3 × r5, 5 × r6/r7에서 수렴된다.TRS는 감소 규칙이 적용되는 순서에 따라 다르다.
  • When is computed following the rules {r4, r5, r6}, the maximum length of the stack stays below . When reduction rule r7 is used instead of rule r6, the maximum length of the stack is only .스택의 길이는 재귀 깊이를 반영한다.규칙 {r4, r5, r7}에 따른 감소는 최대 재귀 깊이가 작기 때문에 이 계산은 그런 점에서 더 효율적이다.[n 6]

TRS, 하이퍼 오퍼레이터 기반

Sundblad (1971) 또는 Porto & Matos (1980)가 분명히 보여주었듯이, Ackermann 함수는 초동작렬의 관점에서 표현될 수 있다.

또는 파라미터 목록에서 상수 2를 제거한 후, Buck의 기능 측면에서

Ackermann 함수의 변형인[10]Buck의 함수 , n)= 2[ 은(는) 다음과 같은 감소 규칙을 사용하여 계산할 수 있다.

규칙 b6 대신 규칙을 정의할 수 있다.

Ackermann 기능을 계산하려면 세 가지 감소 규칙을 추가하면 된다.

이 규칙은 베이스 케이스 A(0,n), 정렬(n+3) 및 퍼지(-3)를 처리한다.

계산 , ) 디스플레이 오른쪽

축소 규칙 사용[n 5]: 축소 규칙 사용[n 5]:

일치하는 동일성은

  • 감소 규칙 이(가) 있는 TRS가 적용되는 경우:
  • 감소 규칙 이(가) 있는 TRS가 적용되는 경우:

언급

  • 규칙 {b1 - b5, b6, r8 - r10}에 따른 () 의 계산은 매우 반복적이다.중첩된 최대 깊이는 A ,)+ 이다범인은 반복이 실행되는 순서다. n+ ()= F( ()) .첫 번째 은 전체 시퀀스를 펼친 후에만 사라진다.
  • 그런 점에서 규칙 {b1 - b5, b7, r8 - r10}에 따른 계산이 더 효율적이다.반복 + 1 ()= ( ( )) F은(는) 코드 블록에 대한 반복 루프를 시뮬레이션한다.[n 7]중첩은(+ ) 으)로 제한되며 반복 기능당 1회 반복 수준임.마이어 리치(1967)는 이런 서신을 보여주었다.
  • 이러한 고려사항은 재귀 깊이에만 관련된다.어떤 식으로든 반복하면 동일한 규칙(규칙 b6와 b7이 "동일한" 것으로 간주되는 경우)을 수반하는 동일한 수의 감축 단계로 이어진다.예를 들어 , ) )의 감소는 12 × b1, 4 × b2, 1 × b3, 4 × b5, 12 × b6/b7, 1 × r9, 1 × r10의 35 단계로 수렴된다.modus iterandi는 감소 규칙이 적용되는 순서에만 영향을 미친다.
  • 실행 시간의 진정한 이득은 하위 결과를 반복해서 재계산하지 않는 것만이 달성할 수 있다.메모화는 기능 호출의 결과를 캐시해 같은 입력이 다시 발생할 때 반환하는 최적화 기법이다.예를 들어 Ward(1993)를 참조하십시오.그로스만&제이트먼(1988)은 시간과 i시간 내에, 그리고 O(공간 내에서 (n를 계산하는 교활한 알고리즘을 발표했다.

엄청난 숫자

, ) A의 계산 결과가 여러 단계로 어떻게 나타나는지 시연하려면 다음과 같이 하십시오.[n 5]

값표

Ackermann 함수를 계산하는 것은 무한대의 표의 관점에서 재작성될 수 있다.먼저 맨 위 행을 따라 자연수를 배치한다.표에서 숫자를 결정하려면 번호를 즉시 왼쪽으로 이동하십시오.그런 다음 해당 번호와 한 행 위로 제공된 열에서 필요한 숫자를 찾으려면 이 번호를 사용하십시오.왼쪽에 숫자가 없으면 이전 행의 "1"로 표시된 열을 보십시오.다음은 표의 왼쪽 상단 부분:

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


65533


265536 − 3










5 65533

6
m

여기서 재귀적 지수화 또는 크누스 화살표로만 표현되는 숫자는 매우 크며, 너무 많은 공간을 차지하여 일반 소수 자릿수로 표기할 수 없다.

이 표의 초기 부분에서 큰 값이 발생함에도 불구하고, 크누스 화살표의 적은 숫자로 쓸 수 없는 그레이엄의 숫자와 같은 몇몇 더 큰 숫자가 정의되었다.이 숫자는 Ackermann 함수를 반복적으로 자신에게 적용하는 것과 유사한 기법으로 구성된다.

위 표의 반복이지만, 함수 정의의 관련 표현으로 대체된 값을 사용하여 패턴을 명확하게 보여준다.

A(m, n)의 값
n
m
0 1 2 3 4 n
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)
3 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, 655333)
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)

특성.

일반적 발언

  • ( , n의 평가가 항상 종료되는 것은 즉시 분명하지 않을 수 있다.그러나 각 재귀 에서 m (가) 감소하거나 m 이(가) 동일하게 유지되고 }이(가) 감소하기 때문에 재귀가 제한된다. 이(가) 에 도달할때마다m {\이(가) 감소하므로 {\도 결국 0에 도달한다.(더 기술적으로 표현하면 각 경우 쌍, ) 은 쌍에 대한 사전 순서가 감소하는데, 이는 의 순서와 같다.음이 아닌 단일 정수, 즉 연속적으로 무한히 여러 번 연속해서 내려갈 수 없다는 것을 의미한다.)그러나 (가) 감소하면 이(가) 얼마나 증가할 수 있는지에 대한 상한은 없으며 종종 크게 증가할 것이다.
  • m과 같은 작은 값의 경우, ackermann 함수는 n(최대 기하급수적으로)에 대해 상대적으로 느리게 성장한다.그러나 4의 경우 훨씬 더 빠르게 성장하며, 심지어 ( 2) 2)도 약 2×10이며19728, A (4, 3)의 십진 확장도 어떤 전형적인 척도로 보아도 매우 크다.
  • 흥미로운 점은 그것이 지금까지 사용한 유일한 산술 연산은 1을 더하는 것이라는 것이다.그것의 빠른 성장 동력은 단지 내포된 재귀에 기초한다.이것은 또한 그것의 가동 시간이 최소한 그것의 생산량에 비례한다는 것을 의미하며, 또한 매우 크다.실제로 대부분의 경우 실행 시간은 출력보다 훨씬 크다. 위 내용을 참조하십시오.
  • 단일 인수 버전 ) = n 지수함수, 요인함수, 다요소, 초요인 펑크와 같은 매우 빠르게 성장하는 함수를 포함하여 원시 재귀함수를 동시에 증가시킨다Tions, 그리고 Knuth의 위쪽 화살표 표기법을 사용하여 정의된 함수(인덱스된 위쪽 화살표를 사용하는 경우는 제외).급성장하는 계층 에서( ){\ f{\ 대략 비슷한 수준임을 알 수 있다. 극단적인 성장은 튜링 기계와 같은 무한한 메모리를 가진 시스템에서 계산이 가능하고 계산 가능한 함수인 f f이(가) 어떤 원시 재귀 함수보다 빠르게 성장하며 따라서 원시 재귀 함수가 아님을 보여주는 데 이용될 수 있다.

원시 재귀가 아님

아커만 함수는 어떤 원시 재귀함수보다 빨리 성장하므로 그 자체가 원시 재귀함수는 아니다.

구체적으로는 모든 원시 재귀 f ,… ,x ) 에 음이 아닌 정수 (가) 존재한다는 것을 보여준다 이러한 정수 t는 모든 정수 x 1,x 1 , x 에 대해 음을

이것이 성립되면 = = t 붙이면 모순 , )< A ))>. {\t, 자체는 원시적인 재귀가 아니라는 것을 따른다

증명은[18] 다음과 같이 진행된다: Ackermann 함수보다 느리게 증가하는 모든 함수의 A {\을(를) 정의하십시오.

A 에 모든 원시 재귀 함수가 포함되어 있음을 보여준다.후자는 이(가) 상수함수, 후계함수, 투영함수를 포함하고 있으며, 함수구성 및 원시 재귀의 연산에 따라 폐쇄됨을 보여줌으로써 달성된다.

반비례

위에서 고려함수 f(n) = A(n, n)가 매우 빠르게 성장하기 때문에 역 함수 f−1 매우 느리게 성장한다.Ackermann 함수 f−1 보통 α로 표시된다.실제로 A(4, 4)는 2 2 ^{16의 순서에 있기 때문에 α(n)는 어떤 실제 입력 크기 n에 대해서도 5보다 작다

역행은 최소 스패닝 트리에 대한 분리 집합 데이터 구조샤젤의 알고리즘과 같은 일부 알고리즘의 시간 복잡성에 나타난다.때로는 아커만의 원래 기능이나 다른 변형이 이 설정에 사용되기도 하지만 모두 비슷하게 높은 비율로 성장한다.특히 일부 수정된 함수는 -3 및 이와 유사한 용어를 제거하여 표현을 단순화한다.

역 Ackermann 함수의 2-모수 변동은 다음과 같이 정의할 수 있으며, 여기서 x\ 플로어 함수다.

이 함수는 위에서 언급한 알고리즘의 보다 정밀한 분석에서 발생하며, 보다 정교한 시간 범위를 제공한다.이산설정 데이터 구조에서 m은 연산의 개수를 나타내는 반면 n은 원소의 개수를 나타내는 반면, 최소 스패닝 트리 알고리즘에서는 m은 에지의 개수를, n은 정점의 개수를 나타낸다.α(m, n)에 대한 몇 가지 약간 다른 정의가 존재한다. 예를 들어, 로그2 nn으로 대체되는 경우도 있고, 바닥 기능은 천장으로 대체되는 경우도 있다.

다른 연구에서는 m이 상수로 설정된 경우 특정 행에 역 함수를 적용할 수 있는 역 함수를 정의할 수 있다.[19]

아커만 함수의 역행은 원시적인 재귀성이다.[20]

벤치마크로 사용

Ackermann 함수는 극히 깊은 재귀라는 관점에서 정의되기 때문에 컴파일러의 재귀 최적화 능력에 대한 벤치마크로 사용할 수 있다.아커만의 기능을 이런 식으로 처음 출판한 것은 1970년 드라고흐 바이다에[21] 의해, 그리고 1971년 거의 동시에 Yngve Sundblad에 의해서였다.[13]

선드블라드의 세미날 논문은 브라이언 비히만(Whtstone 벤치마크의 공동저자)이 1975년부터 1982년 사이에 쓴 3부작의 논문에서 차지했다.[22][23][24]

참고 항목

메모들

  1. ^ 매개변수 순서를 거꾸로 하여
  2. ^ '커티드'
  3. ^ 단계마다 밑줄이 그어진 리덱스가 다시 쓰여진다.
  4. ^ a b 여기: 가장 왼쪽에서 가장 왼쪽에서 가장 왼쪽에서 가장 가까운 전략!
  5. ^ a b c d 가독성을 높이기 위해
    S(0)는 1로 표기된다.
    S(0)는 2로 표기되어 있다.
    S(S(0))는 3으로 표기되어 있다.
    기타...
  6. ^ 최대 재귀 깊이는 절차의 가장 깊은 호출 중에 존재하는 절차의 활성화 수준 수를 의미한다.코넬리우스&커비(1975)
  7. ^ 루프 n+1 TIME DO F

참조

  1. ^ 모닌 & 힌치 2003, 페이지 61.
  2. ^ a b 애커만 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. ^ 힐버트 1926, 페이지 185.
  6. ^ 반 헤이제노르트 1977.
  7. ^ 페테르 1935.
  8. ^ 로빈슨 1948.
  9. ^ 리치 1965 페이지 1028.
  10. ^ a b c 벅 1963.
  11. ^ Meeussen & Zantema 1992, 페이지 6.
  12. ^ 무나포 1999a.
  13. ^ a b 선드블라드 1971.
  14. ^ 포르토 & 마토스 1980.
  15. ^ 그로스만 & 지트만 1988.
  16. ^ 폴슨 2021.
  17. ^ Cohen 1987, 페이지 56, 발의안 3.16 (증빙서 참조).
  18. ^ Woo, Chi (2009-12-17). "Ackermann function is not primitive recursive planetmath.org". planetmath.org. Archived from the original on 2013-05-09.
  19. ^ 페티 2002.
  20. ^ 마토스 2014.
  21. ^ 바이다 1970.
  22. ^ 비히만 1976년
  23. ^ 위크만 1977년
  24. ^ 비히만 1982년

참고 문헌 목록

  • Cohen, Daniel E. (January 1987). Computability and logic. Halsted Press. ISBN 9780745800349.
  • van Heijenoort, Jean (1977) [reprinted with corrections, first published in 1967]. From Frege to Gödel: A Source Book in Mathematical Logic, 1879–1931. Harvard University Press.
  • Sundblad, Yngve (March 1971). "The Ackermann function. A theoretical, computational, and formula manipulative study". BIT Numerical Mathematics. 11 (1): 107–119. doi:10.1007/BF01935330. S2CID 123416408.
  • Vaida, Dragoș (1970). "Compiler Validation for an Algol-like Language". Bulletin Mathématique de la Société des Sciences Mathématiques de la République Socialiste de Roumanie. Nouvelle série. 14 (62) (4): 487–502. JSTOR 43679758.
  • Wichmann, Brian A. (March 1976). "Ackermann's function: A study in the efficiency of calling procedures". BIT Numerical Mathematics. 16: 103–110. doi:10.1007/BF01940783. S2CID 16993343.

외부 링크