Funkcja obliczalna – podstawowy obiekt badań w teorii obliczalności. Zbiór funkcji obliczalnych jest tożsamy ze zbiorem funkcji obliczalnych w sensie Turinga oraz z klasą funkcji częściowo rekurencyjnych.
Intuicyjnie funkcją obliczalną nazywa się funkcję, dla której istnieje algorytm pozwalający obliczyć jej wartość dla dowolnego argumentu z dziedziny. Formalna definicja odwołuje się do konkretnego modelu obliczeń (np. maszyny Turinga lub maszyny von Neumanna[1]). Na mocy hipotezy Churcha–Turinga klasa funkcji obliczalnych jest jednak taka sama we wszystkich standardowych modelach obliczeń.
Początkowo matematycy posługiwali się nieformalnym pojęciem „funkcji efektywnie obliczalnej”. Po wprowadzeniu ścisłych definicji formalnych zaczęto utożsamiać funkcje efektywnie obliczalne z funkcjami obliczalnymi.
Dla niektórych funkcji można wykazać, że każdy algorytm obliczający ich wartości wymaga czasu rosnącego wykładniczo względem rozmiaru danych. Teoria obliczalności oraz teoria złożoności obliczeniowej badają odpowiednio zagadnienia obliczalności oraz złożoności obliczeń.
Zgodnie z hipotezą Churcha–Turinga funkcjami obliczalnymi są te funkcje, które mogą zostać obliczone przez urządzenie maszynowe dysponujące nieograniczonym czasem i pamięcią. Hipoteza ta zakłada, że każda funkcja dająca się wyrazić za pomocą algorytmu jest obliczalna.
Aksjomaty Bluma pozwalają zdefiniować teorię złożoności obliczeniowej na zbiorze funkcji obliczalnych. W jej ramach problem określenia złożoności funkcji obliczalnej rozpatruje się jako zagadnienie funkcji.
Definicja
edytujIstnieje wiele równoważnych sposobów określenia klasy funkcji obliczalnych. Są to częściowe funkcje na liczbach naturalnych, które można obliczyć za pomocą maszyny Turinga. Równoważne modele obliczalności, wyznaczające tę samą klasę funkcji, obejmują m.in.:
- funkcje μ-rekurencyjne,
- maszyny Turinga,
- maszyny von Neumanna,
- maszyny znakujące,
- rachunek lambda,
- programy GOTO,
- programy WHILE.
Każda obliczalna funkcja ma skończoną liczbę argumentów będących liczbami naturalnymi. Funkcje te mogą być częściowe, tzn. nie muszą być określone dla wszystkich argumentów. Jeżeli funkcja jest określona dla danego argumentu, jej wartością jest pojedyncza liczba naturalna. Funkcje takie nazywa się również funkcjami częściowo rekurencyjnymi. W teorii obliczalności dziedziną funkcji częściowej jest zbiór wszystkich argumentów, dla których jest ona określona.
Funkcję określoną dla wszystkich argumentów nazywa się funkcją zupełną. Jeżeli funkcja obliczalna jest zupełna, nazywa się ją zupełną funkcją obliczalną lub zupełną funkcją rekurencyjną.
Zapis oznacza, że funkcja częściowa jest określona dla argumentów , natomiast zapis oznacza, że jest ona określona dla tych argumentów i przyjmuje wartość .
Cechy funkcji obliczalnych
edytujPodstawową cechą funkcji obliczalnej jest istnienie skończonej procedury (algorytmu) określającej sposób jej obliczania. Poszczególne modele obliczalności różnią się interpretacją pojęcia procedury, jednak definiują równoważne klasy funkcji, ponieważ potrafią symulować się wzajemnie (podobnie jak kompilator może tłumaczyć program z jednego języka na inny).
W 1977 roku Herbert Enderton podał następującą charakterystykę procedury wyznaczającej funkcję obliczalną:[2]
- Muszą istnieć precyzyjne, skończone instrukcje (program) opisujące procedurę.
- Dla każdej krotki argumentów należącej do dziedziny funkcji procedura po skończonej liczbie kroków zwraca wartość .
- Dla argumentów nienależących do dziedziny funkcji procedura może nie zakończyć działania albo zakończyć się bez zwrócenia wartości.
Jeżeli procedura zwraca wartość , to musi ona być poprawna.
Enderton wskazuje ponadto, że:
- nie ma ograniczenia liczby argumentów funkcji,
- liczba kroków potrzebnych do uzyskania wyniku jest skończona, lecz nieograniczona z góry,
- nie zakłada się ograniczeń pamięci – w modelu dopuszcza się dowolnie dużą ilość zasobów.
Teoria złożoności bada funkcje obliczalne przy dodatkowych ograniczeniach dotyczących czasu lub pamięci.
Zbiory i relacje obliczalne
edytujPodzbiór zbioru liczb naturalnych nazywa się obliczalnym (rekurencyjnym, rozstrzygalnym), jeżeli istnieje funkcja obliczalna taka, że dla każdej liczby zachodzi:
- , gdy ,
- , gdy .
Zbiór jest obliczalnie przeliczalny (rekurencyjnie przeliczalny, półrozstrzygalny), jeżeli istnieje funkcja obliczalna taka, że jest określona wtedy i tylko wtedy, gdy . Innymi słowy, zbiór jest obliczalnie przeliczalny wtedy i tylko wtedy, gdy jest dziedziną pewnej funkcji obliczalnej.
Analogicznie definiuje się relacje obliczalne i relacje obliczalnie przeliczalne, utożsamiając relacje z odpowiednimi zbiorami skończonych ciągów liczb naturalnych.
Języki formalne
edytujW teorii obliczalności rozważa się również języki formalne. Alfabet to dowolny zbiór symboli. Słowo nad alfabetem to skończony ciąg symboli z tego alfabetu. Język to podzbiór zbioru wszystkich słów nad danym alfabetem.
Język jest obliczalny (rekurencyjny, rozstrzygalny), jeżeli istnieje funkcja obliczalna taka, że dla każdego słowa :
- , gdy należy do języka,
- , gdy nie należy do języka.
Język jest obliczalnie przeliczalny (rekurencyjnie przeliczalny, półrozstrzygalny), jeżeli istnieje funkcja obliczalna taka, że jest określona wtedy i tylko wtedy, gdy należy do języka.
Przykłady
edytujDo funkcji obliczalnych należą m.in.:
- każda funkcja o skończonej dziedzinie,
- każda funkcja stała,
- Dodawanie liczb naturalnych,
- funkcja wyznaczająca czynniki pierwsze liczby,
- Największy wspólny dzielnik,
- rozwiązania wynikające z tożsamości Bézouta oraz liniowe równania diofantyczne.
Jeżeli i są obliczalne, to obliczalne są również ich suma, iloczyn, złożenie (przy odpowiednich założeniach) oraz wiele innych operacji konstruowanych z użyciem operatora minimizacji.
Przykładem funkcji obliczalnej, dla której nie jest znany jawny algorytm, jest funkcja zależna od własności rozwinięcia dziesiętnego liczby (np. istnienia dowolnie długich bloków tej samej cyfry).
Skończone fragmenty wartości funkcji pracowitego bobra są obliczalne, choć sama funkcja nie jest obliczalna.
Hipoteza Churcha-Turinga
edytujTeza Churcha głosi, że każda funkcja obliczalna w intuicyjnym sensie efektywnej procedury jest obliczalna w sensie formalnym (np. przez maszynę Turinga). Ze względu na nieformalny charakter pojęcia „efektywnej procedury” tezy tej nie można ściśle udowodnić.
Na jej rzecz przemawia m.in. równoważność wielu niezależnie zaproponowanych modeli obliczeń oraz brak ogólnie akceptowanego silniejszego modelu odpowiadającego intuicyjnemu pojęciu obliczalności.
Funkcje nieobliczalne i zagadnienia nierozwiązywalne
edytujPonieważ każda funkcja obliczalna ma skończony opis, istnieje przeliczalnie wiele funkcji obliczalnych.
Z kolei zbiór wszystkich funkcji z liczb naturalnych w liczby naturalne jest nieprzeliczalny, a więc „większość” takich funkcji jest nieobliczalna.
Klasycznym przykładem problemu nierozstrzygalnego jest Problem stopu. Zagadnienie rozstrzygalności postawione przez Davida Hilberta doprowadziło do wykazania przez Turinga i Churcha, że nie istnieje ogólna efektywna procedura rozstrzygająca prawdziwość wszystkich zdań arytmetyki.
Rozszerzenia obliczalności
edytujPojęcie obliczalności można zrelatywizować względem zbioru (lub funkcji ) poprzez rozważanie maszyny Turinga z wyrocznią. Otrzymane w ten sposób funkcje nazywa się A-obliczalnymi (odpowiednio f-obliczalnymi).
Badania nad rozszerzeniami klasycznej obliczalności obejmują m.in. hiperobliczalność oraz uogólnione teorie rekurencji.
Zobacz też
edytujPrzypisy
edytuj- ↑ maszyna von Neumanna. encyklopedia.interia.pl. [dostęp 2023-09-15]. (pol.).
- ↑ Jon Barwise, H. Jerome Keisler: Handbook of Mathematical Logic (Studies in Logic and the Foundations of Mathematics). North-Holland, 1977, s. 528-529. ISBN 978-0720422856.