Know Intuit, funcții recursive algoritmi de curs parțiale
Lema funcțiilor recursive
În această secțiune vom stabili primitiv (parțial) recursiveness unele clase importante de funcții - tabele și de numerotare, precum și capacitatea anumitor funcții folosind însumarea, produs, analiza cazurilor și recursivitate reciprocă.
Lema 8.1. funcții de tabelă Recursiveness. Să funcție definită peste tot f (x) la toate argumentele, dar un număr finit egal cu o constantă c (un tabel de apel de funcție). Apoi este recursiv primitiv.
Dovada: Fie funcția f a Lema. Dovada este prin inducție pe nf.
În cazul în care nf = 0, funcția f este constantă și deci recursive primitive (Exemplul 8.1).
Să presupunem că toate tabelul cu valoarea g ng <= k примитивно рекурсивны и пусть nf = k +1 и f(0)=a. Определим табличную функцию f ' (x) = f(x+1). Ясно, что nf' = k. и по предположению индукции f ' примитивно рекурсивна. Легко проверить, что тогда f задается следующей схемой:
și, prin urmare, de asemenea, recursiv primitiv.
Vom arăta o PRF clasă închisă (P.r.f.) în ceea ce privește operațiunile de sumare și produsul.
Lema 8.2. Însumare și produs. Să presupunem că funcția f (x1. Xn. Y) este parțial (primitiv) recursiv. Apoi, funcția F n + 1 și G n + 1. definit de următoarele ecuații
Este parțial (primitiv) recursiv.
Dovada Într-adevăr, aceste funcții sunt definite de următoarele scheme recursive primitive:
Exemple de utilizare a Lema 8.2.
Exemplul 8.10. max_deg_div (x, y) = gradul maxim de x. care este divizibil cu y.
Să exp (x, y) - funcție exponențială. exp (x, y) = x y. recursiveness primitiv ușor de instalat, cu ajutorul funcției de multiplicare (a se vedea. Sarcina 8.1 (a)). Apoi, este ușor pentru a verifica dacă funcția dorită este dată de
și, prin urmare, acesta este un recursiv primitiv.
Exemplul 8.11. minimizare limitată. Să o funcție primitivă g recursive (x, y), astfel încât pentru fiecare x există y <= x. для которого g(x,y) =0. Положим F(x) = mu y [g(x,y) = 0] .
Apoi, prin definiție, F (x) este funcția recursivă parțială. Noi arată că, de fapt, este recursiv primitiv. Într-adevăr, definim. Prin Lema 8.2, această funcție este recursivă primitiv. Să presupunem că pentru un anumit x. Apoi, pentru i
Lema 8.3. Sarcina sau analiza pe portiuni din cazuri. Să h1 (x1. Xn). hk (x1 xn.) - PRF arbitrară și peste tot PRF definite f1 (x1. xn). fk (x1. xn) cu privire la orice set de argumente (a1. o), unul și numai unul dintre aceste funcții este egală cu 0. Apoi, funcția g (x1. xn). definite de relațiile:
Este o parțial recursivă.
Dovada Într-adevăr, g n poate fi reprezentat ca suma de lucrări k:
Următoarea clasă de funcții pe care le interesează în - funcționează pentru a identifica în mod unic și perechile de n-tuple de numere întregi și să le întoarcă. Definiți pentru orice pereche de numere (x, y) numărul său c2 (x, y) = 2 x (2y + 1) - 1. De exemplu, c2 (0,0) = 0, c2 (1,0) = 1, c2 (0,1) = 2, c2 (1,1) = 5, c2 (2,1) = 19. Datorită unicității numerelor descompunerii în factori de prim, funcția c2. N2 -> N numere bijective perechile întregi. Este ușor de înțeles că dacă c2 (x, y) = z. apoi numărul binar (z + 1) este următoarea: (notația y binară) 10 x. Din acest punct de vedere, puteți extrage în mod unic valoarea lui x și y. Aceste valori sunt determinate de următoarele funcții inverse:
Din aceste definiții rezultă imediat că pentru orice z c2 egalitatea (c21 (z), C22 (z)) = z.
Acum definim prin inducție funcția de numerotare cn n-tuple de numere cu n> 2, și funcțiile lor inverse de coordonate ViCni (1 <= i <= n) :
Din aceste definiții, de asemenea, în mod direct, rezultă că pentru orice z au ecuația cn (CN1 (z), CN2 (z). Cnn (z)) = z. (Verificați acest lucru prin inductie de proprietate.)
Lema 8.4. Recursiveness numerotare funcții. Pentru orice n> = 2, și 1 <= i <= n все определенные выше функции cn и cni являются примитивно рекурсивными.
Dovada c2 primitiv recursive (x, y) este setată în mod direct (a se vedea. Problema 8.1 (a)). C21 (z) este dată de funcția C21 (z) = max_deg_div (2, z + 1) este recursivă primitivă (prezentată în Exemplul 8.10). Pentru C22 funcția (z) deține c22 definiția (z) = div (2, div (2 c21 (z)> z + 1) - 1) (aici folosim primitiv recursivitatea întreg funcția diviziune elementul div (x, y) a problemei 8.1 (e)). Funcții primitive recursivitatea rămase numerotare urmează prin inducție de la definițiile lor (vezi. Sarcina 8.10).
În Lema următoare generalizează operatorul recursivitatii primitiv.
Lema 8.5. (Co-recursivitate) Să presupunem că fynktsii și fynktsii pekypsivny primitiv. Apoi fynktsii f1 n + 1 (x1. Xn. Y). fk n + 1 (x1. xn. y). care este determinat din pekypsiey sledyyuschey comun
(1 <= i <= k) также являются пpимитивно pекypсивными.
Demonstrație Fie variabilele chepez nabop sunt x1. xn. Definim o sledyyuschey fynktsii pekypsivnye primitiv :, și a pus
Fynktsiya F n + 1 polychilos pekypsiey primitiv din fynktsy pekypsivnyh primitiv și deci pekypsivna primitiv în sine. sledyet Sppavedlivost Lema tepep din faptul că pentru fiecare.
Sarcina 8.1. Arătați că următoarele funcții fac parte din recursive (primitiv).
- exp (x, y) = x y;
- fapt (x) = x. ;
- min (x, y) = minimum x și y;
- max (x, y) = cea mai mare dintre x și y;
- div (x, y) = coeficientul lui y pe x (să div (0, y) = y).
predicatele egalitate și inegalitate:
Sarcina 8.3. operator de schimbare. Să g (x1 xn.) - partea (primitivă) funcție recursivă. a și b> 0 - numărul N. Apoi, funcția
Este parțial (primitiv) recursiv.
Sarcina 8.4. Arătați că următoarele funcții fac parte din recursive (primitiv).
- - th rădăcină de gradul n de x (partea întreagă).
- (Chiar și la 0 sau x = log (i, x) = 0).
- p (x) = 1. dacă x - un număr prim și p (x) = 0. dacă x este un compozit.
- pn (k) - k -lea număr prim într-o ordine crescătoare (pn (0) = 0, pn (1) = 2, pn (2) = 3, p n (3) = 5).
- t (x) = x număr Număr postseismic divizori (t (0) = 0).
- d (n, m, i) - i -lea semn în descompunerea m -ary n. și anume în cazul în care, în cazul în care 0 <= ai <= m-1. то d(n,m,i)=ai .
- nod (x, y) = cel mai mare divizor comun al numerelor x și y (lasa nod (0, y) = nod (x, 0) = 0).
Sarcina 8.5. Fie F (x) este definit de relațiile F (0) = 1, F (1) = 1, F (x + 2) = F (x) + F (x + 1) (elemente de secvență F (x), numite numere Fibonacci) . Arătați că funcția F (x) este recursiv primitiv.
(Notă:. Arată mai întâi că funcția g (x) = 2 F (x) 3 F (x + 1) recursiv primitiv)
Sarcina 8.6. Dovedește că dacă valoarea unei schimbări generale funcție recursivă f (x) în setul final, atunci funcția rezultată f „(x) este de asemenea recursiv.
Sarcina 8.7. Dovedi că funcția o (x) = 0, iar din selecția funcției Im n (x1. Xn) = xm via superpoziție și recursie primitivă nu poate primi funcția s (x) = x + 1 și d funcție (x) = 2 * x.
Sarcina 8.8. Să g (x1 xn, y.) - este recursivă primitiv. Demonstrați că funcția