Ogólna funkcja rekurencyjna

W logice matematycznej i informatyce , ogólna funkcja rekurencyjna , częściowa funkcja rekurencyjna lub funkcja μ-rekurencyjna to funkcja częściowa od liczb naturalnych do liczb naturalnych, która jest „obliczalna” w sensie intuicyjnym - jak również formalnym . Jeśli funkcja jest całkowita, jest również nazywana całkowitą funkcją rekurencyjną (czasami skracaną do funkcji rekurencyjnej ). W teorii obliczalności , pokazano, że funkcje μ-rekurencyjne są dokładnie funkcjami, które mogą być obliczone przez maszyny Turinga (jest to jedno z twierdzeń wspierających tezę Churcha-Turinga ). Funkcje μ-rekurencyjne są blisko spokrewnione z prymitywnymi funkcjami rekurencyjnymi , a ich definicja indukcyjna (poniżej) opiera się na definicji prymitywnych funkcji rekurencyjnych. Jednak nie każda całkowita funkcja rekurencyjna jest prymitywną funkcją rekurencyjną — najbardziej znanym przykładem jest funkcja Ackermanna .

Innymi równoważnymi klasami funkcji są funkcje rachunku lambda i funkcje, które można obliczyć za pomocą algorytmów Markowa .

Podzbiór wszystkich całkowitych funkcji rekurencyjnych o wartościach w {0,1} jest znany w teorii złożoności obliczeniowej jako klasa złożoności R .

Definicja

Funkcje μ-rekurencyjne (lub ogólne funkcje rekurencyjne ) to funkcje częściowe, które pobierają skończone krotki liczb naturalnych i zwracają pojedynczą liczbę naturalną. Są najmniejszą klasą funkcji częściowych, która obejmuje funkcje początkowe i jest zamknięta w złożeniu, prymitywnej rekurencji i operatorze μ .

Najmniejszą klasą funkcji obejmującą funkcje początkowe i domknięte pod złożeniem oraz pierwotną rekurencję (tj. bez minimalizacji) jest klasa prymitywnych funkcji rekurencyjnych . Chociaż wszystkie prymitywne funkcje rekurencyjne są całkowite, nie dotyczy to częściowych funkcji rekurencyjnych; na przykład minimalizacja funkcji następcy jest niezdefiniowana. Prymitywne funkcje rekurencyjne są podzbiorem całkowitych funkcji rekurencyjnych, które są podzbiorem częściowych funkcji rekurencyjnych. Na przykład można udowodnić, funkcja Ackermanna jest całkowicie rekurencyjna i nie jest prymitywna.

Funkcje prymitywne lub „podstawowe”:

  1. Funkcje stałe do k n
    k
    : Dla każdej liczby naturalnej n i każdego do
    Alternatywne definicje używają zamiast funkcji zerowej jako funkcję pierwotną, która zawsze zwraca zero, i zbuduj funkcje stałe z funkcji zerowej, funkcji następcy i operatora kompozycji.
  2. Następnik funkcji S:
  3. Funkcja projekcji zwana także funkcją tożsamości wszystkich liczb naturalnych , że :

Operatory ( dziedziną funkcji zdefiniowaną przez operatora jest zbiór wartości argumentów takich, że każde zastosowanie funkcji, które musi być wykonane podczas obliczeń, daje dobrze zdefiniowany wynik):

  1. Operator kompozycji (nazywany także operatorem podstawienia ): Biorąc pod uwagę funkcję m-ary , i m k-funkcje :
    Oznacza to, że jest zdefiniowany tylko wtedy, gdy i są zdefiniowane.
  2. Prymitywny operator rekurencji ρ : Biorąc pod uwagę funkcję k -ary sol k + 2 - funkcja :
    Oznacza to, że jest zdefiniowany tylko wtedy, gdy i dla wszystkich
  3. Operator minimalizacji μ : Biorąc pod uwagę funkcję ar ( k + 1 ) , funkcja k -ary
    przez

Intuicyjnie, minimalizacja szuka — rozpoczynając wyszukiwanie od 0 i kontynuując w górę — najmniejszego argumentu, który powoduje, że funkcja zwraca zero; ma takiego argumentu lub jeśli napotka się argument, dla którego nie jest zdefiniowane, to wyszukiwanie nigdy się nie kończy i zdefiniowane dla argumentu

Podczas gdy niektóre podręczniki używają operatora μ zgodnie z definicją tutaj, inne wymagają, aby operator μ był stosowany tylko do funkcji całkowitych f . Chociaż ogranicza to operatora μ w porównaniu z podaną tutaj definicją, klasa funkcji μ-rekurencyjnych pozostaje taka sama, co wynika z twierdzenia o postaci normalnej Kleene'a (patrz poniżej ) . Jedyna różnica polega na tym, że staje się nierozstrzygalne, czy określona definicja funkcji definiuje funkcję μ-rekurencyjną, tak jak nierozstrzygalne jest, czy funkcja obliczalna (tj. μ-rekurencyjna) jest całkowita.

Operatora silnej równości do porównania częściowych funkcji μ-rekurencyjnych . Jest to zdefiniowane dla wszystkich funkcji cząstkowych f i g tak, że

obowiązuje wtedy i tylko wtedy, gdy dla dowolnego wyboru argumentów albo obie funkcje są zdefiniowane, a ich wartości są równe, albo obie funkcje są niezdefiniowane.

Przykłady

Przykłady nieobejmujące operatora minimalizacji można znaleźć w Primitive recursive function#Examples .

Poniższe przykłady mają na celu tylko zademonstrowanie użycia operatora minimalizacji; można je również zdefiniować bez niego, choć w bardziej skomplikowany sposób, ponieważ wszystkie są prymitywnie rekurencyjne.

  • Całkowity pierwiastek kwadratowy z x można zdefiniować jako najmniejszą z taką, że . Używając operatora minimalizacji, ogólną definicją rekurencyjną jest , gdzie Not , Gt i Mul to odpowiednio logiczna negacja , większa niż i mnożenie. Faktycznie, 0 jest wtedy i tylko wtedy, gdy trzyma. Stąd jest najmniejszą z taką, że posiada. Złącze negacji Not jest potrzebne, ponieważ Gt koduje prawdę przez 1 0 , podczas gdy μ szuka .

Poniższe przykłady definiują ogólne funkcje rekurencyjne, które nie są prymitywnymi funkcjami rekurencyjnymi; stąd nie mogą uniknąć użycia operatora minimalizacji.

Całkowita funkcja rekurencyjna

Ogólna funkcja rekurencyjna jest nazywana całkowitą funkcją rekurencyjną , jeśli jest zdefiniowana dla każdego wejścia lub, równoważnie, jeśli może być obliczona przez całkowitą maszynę Turinga . Nie ma możliwości obliczeniowego stwierdzenia, czy dana ogólna funkcja rekurencyjna jest całkowita — patrz problem z zatrzymaniem .

Równoważność z innymi modelami obliczalności

W równoważności modeli obliczalności rysuje się paralelę między maszynami Turinga , które nie kończą się dla pewnych danych wejściowych, a niezdefiniowanym wynikiem dla tego wejścia w odpowiedniej częściowej funkcji rekurencyjnej. Nieograniczonego operatora wyszukiwania nie można zdefiniować za pomocą reguł rekurencji pierwotnej, ponieważ nie zapewniają one mechanizmu „nieskończonych pętli” (niezdefiniowanych wartości).

Twierdzenie o postaci normalnej

Twierdzenie o postaci normalnej ze względu na Kleene mówi, że dla każdego prymitywne funkcje rekurencyjne y takie, że dla dowolnej funkcji μ-rekurencyjnej z k wolnymi zmiennymi istnieje e takie, że

.

Liczba e jest nazywana indeksem lub liczbą Gödla dla funkcji f . Konsekwencją tego wyniku jest to, że dowolną funkcję μ-rekurencyjną można zdefiniować za pomocą pojedynczego wystąpienia operatora μ zastosowanego do (całkowitej) pierwotnej funkcji rekurencyjnej.

Minsky zauważa, że ​​zdefiniowana powyżej jest w istocie μ-rekurencyjnym odpowiednikiem uniwersalnej maszyny Turinga :

Skonstruować U to zapisać definicję funkcji ogólnie rekurencyjnej U(n, x), która poprawnie interpretuje liczbę n i oblicza odpowiednią funkcję x. bezpośrednie zbudowanie U wymagałoby zasadniczo takiego samego wysiłku i zasadniczo tych samych pomysłów , ile zainwestowaliśmy w zbudowanie uniwersalnej maszyny Turinga

Symbolizm

W literaturze używa się wielu różnych symboli. Zaletą stosowania symboliki jest wyprowadzenie funkcji przez „zagnieżdżanie” operatorów jeden w drugim, co jest łatwiejsze do zapisania w zwartej formie. W dalszej części ciąg parametrów x 1 , ..., x n jest oznaczany skrótem x :

  • Funkcja stała : Kleene używa „C
    n q
    ( x ) = q ”, a Boolos-Burgess-Jeffrey (2002) (BBJ) używa skrótu „ const n ( x ) = n ”:
np. C
7 13
( r, s, t , u, v, w, x ) =
13 const 13 ( r, s, t, u, v, w, x ) = 13
  • Funkcja następnika : Kleene używa x' i S dla określenia „Następca”. Ponieważ „następca” jest uważany za prymitywny, większość tekstów używa apostrofu w następujący sposób:
S(a) = a +1 = def a', gdzie 1 = def 0', 2 = def 0 ' ', itd.
  • Funkcja tożsamości : Kleene (1952) używa „ U
    n i
    ” do wskazania funkcji tożsamości na zmiennych x i ; BBJ użyj funkcji tożsamości id
    n i
    nad zmiennymi od x 1 do x n :
U
n i
( x ) = id
n ja
( x ) = x i
np. U
7 3
= id
7 3
( r, s, t, u, v, w, x ) = t
  • Operator składu (substytucji) : Kleene używa pogrubionej litery S
    m n
    (nie mylić z jego S jak „następca” ! ). Indeks górny „m” odnosi się do m -tej funkcji „f m ”, podczas gdy indeks dolny „n” odnosi się do n-tej zmiennej „x n ”:
Jeśli mamy dane h( x )= g( f 1 ( x ) , ... , f m ( x ) )
h( x ) = S
n m
(g, f 1 , ... , f m )
W podobny sposób, ale bez indeksów dolnych i górnych, BBJ napisz:
h( x' )= Cn[g, f 1 ,..., f m ]( x )
  • Rekurencja pierwotna : Kleene używa symbolu „ R n (krok podstawowy, krok indukcyjny)”, gdzie n oznacza liczbę zmiennych, BBJ używa „ Pr(krok podstawowy, krok indukcyjny) ( x )”. Dany:
  • krok podstawowy: h( 0, x )= f( x ), oraz
  • krok indukcyjny: h( y+1, x ) = g( y, h(y, x ), x )
Przykład: prymitywna definicja rekurencji a + b:
  • krok podstawowy: f( 0, a ) = a = U
    1 1
    (a)
  • krok indukcyjny: f( b' , a ) = ( f ( b, a ) )' = g( b, f( b, a), a ) = g( b, c, a ) = c' = S(U
    3 2
    ( b, c, a ))
R 2 { U
1 1
(a), S [ (U
3 2
( b, do, za ) ] }
Pr { U
1 1
(a), S [ (U
3 2
( b, do, za ) ] }

Przykład : Kleene podaje przykład, jak wykonać rekurencyjne wyprowadzenie f(b, a) = b + a (zwróć uwagę na odwrócenie zmiennych aib). Zaczyna z 3 początkowymi funkcjami

  1. S(a) = a'
  2. U
    1 1
    (a) = za
  3. U
    3 2
    ( b, do, za ) = do
  4. g(b, c, a) = S(U
    3 2
    ( b, c, a )) = c'
  5. krok podstawowy: h( 0, a ) = U
    1 1
    (a)
krok indukcyjny: h( b', a ) = g( b, h( b, a ), a )

Przyjeżdża o:

a+b = R 2 [ U
1 1
, S
3 1
(S, U
3 2
) ]

Przykłady

Zobacz też

Na stronach 210-215 Minsky pokazuje, jak stworzyć operatora μ za pomocą modelu maszyny rejestrowej , demonstrując w ten sposób jego równoważność z ogólnymi funkcjami rekurencyjnymi.

Linki zewnętrzne