Formalny opis rachunku lambda i nie tylko, kolejna wersja
Formalny opis rachunku lambda i nie tylko, kolejna wersja
Formalny opis rachunku lambda i nie tylko, kolejna wersja
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
10.6 Operacja minimum<br />
Operacją minimum nazywamy przyporządkowa<strong>nie</strong> funkcji naturalnej g : N n+1 →<br />
N funkcji f : N n → N oznaczanej wzorem<br />
f(k 1 , . . . , k n ) = µm(g(k 1 , . . . , k n , m) = 0)<br />
przyjmującą jako wartość f(k 1 , . . . , k n ) najm<strong>nie</strong>jszą liczbę m spełniającą warunek<br />
g(k 1 , . . . , k n , m) = 0.<br />
Definicja ta z kilku powodów może być <strong>nie</strong>jasna. Możemy ją stosować dla różnych<br />
rodzajów funkcji g. W najbardziej ogólnym przypadku, g może być dowolną<br />
naturalną funkcją częściową. Wtedy pojawiają się <strong>nie</strong>jasności związane z definicją<br />
wartości funkcji f. Jest jednak naturalny algorytm pozwalający na oblicza<strong>nie</strong><br />
wartości f. Algorytm ten przeszukuje kolejno liczby naturalne dopóty, dopóki <strong>nie</strong><br />
znajdzie wartości m spełniającej warunek g(k 1 , . . . , k n , m) = 0. Operacja minimum<br />
powinna być tak rozumiana, aby ten algorytm pozwalał na wylicza<strong>nie</strong> wartości<br />
funkcji definiowanych za pomocą tej operacji. Nietrudno zauważyć, że ten<br />
algorytm zawodzi w dwóch sytuacjach: jeżeli <strong>nie</strong> jest w sta<strong>nie</strong> obliczyć potrzebnej<br />
wartości funkcji g, (na przykład zawsze oblicza g(k 1 , . . . , k n , 0)), lub gdy funkcja g<br />
dla odpowiednich parametrów <strong>nie</strong> przyjmuje wartości 0. W tych dwóch przypadkach<br />
funkcja definiowana za pomocą operacji minimum <strong>nie</strong> jest określona.<br />
O operacji minimum mówimy, że jest efektywna, jeżeli stosujemy ją wyłącz<strong>nie</strong><br />
do całkowitych funkcji g takich, że<br />
∀k 1 , . . . , k n ∃m g(k 1 , . . . , k n , m) = 0.<br />
Będziemy też rozważać operację minimum ograniczoną do całkowitych funkcji<br />
g.<br />
10.7 Funkcje rekurencyjne<br />
Klasa całkowitych funkcji rekurencyjnych jest najm<strong>nie</strong>jszą klasą funkcji zawierającą<br />
Z, S oraz U n,k i zamkniętą ze na złoże<strong>nie</strong>, rekursję prostą i efektywną operację<br />
minimum.<br />
Klasa (częściowych) funkcji rekurencyjnych jest najm<strong>nie</strong>jszą klasą funkcji zawierającą<br />
Z, S oraz U n,k i zamkniętą ze na złoże<strong>nie</strong>, rekursję prostą i operację<br />
minimum.<br />
Definicja klasy funkcji rekurencyjnych wymaga wyjaś<strong>nie</strong>nia, co to jest złoże<strong>nie</strong><br />
funkcji częściowych i jak definiujemy przez rekursję prostą w przypadku takich<br />
funkcji. Te pojęcia można wyjaśnić podob<strong>nie</strong>, jak operację minimum, wskazując<br />
naturalne algorytmy, które powinny obliczać odpowied<strong>nie</strong> funkcje i żądając zgodności<br />
definicji i obliczeń za pomocą odpowied<strong>nie</strong>go algorytmu.<br />
Zgod<strong>nie</strong> z tezą Churcha, klasa częściowych funkcji rekurencyjnych jest klasą<br />
funkcji naturalnych, które są obliczalne w jakimkolwiek, intuicyjnym sensie.<br />
Klasę funkcji rekurencyjnych można definiować na wiele sposobów. Na przykład,<br />
można w definicji tej klasy <strong>nie</strong> wspominać o rekursji prostej. Rekursja prosta<br />
jest potrzebna do zdefiniowania trzech funkcji: dodawania, mnożenia i funkcji charakterystycznej<br />
relacji <strong>nie</strong>równości. Mając te trzy funkcje, możemy kodować ciągi<br />
liczb naturalnych za pomocą liczb naturalnych, a to z kolei pozwala rekursję prostą<br />
zastąpić operacją minimum.<br />
Można też ograniczać rolę operacji minimum. Można stosować ją wyłącz<strong>nie</strong> do<br />
funkcji całkowitych. Bardzo silny rezultat tego typu wyraża twierdze<strong>nie</strong> o postaci<br />
normalnej.<br />
29