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

edytuj

Istnieje 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.:

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

edytuj
Osobny artykuł: Algorytm.

Podstawową 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

edytuj

Podzbió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

edytuj
Osobny artykuł: Języki formalne.

W 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

edytuj

Do funkcji obliczalnych należą m.in.:

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

edytuj
Osobny artykuł: Hipoteza Churcha-Turinga.

Teza 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

edytuj

Ponieważ 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

edytuj

Poję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ż

edytuj

Przypisy

edytuj
  1. maszyna von Neumanna. encyklopedia.interia.pl. [dostęp 2023-09-15]. (pol.).
  2. 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.

📚 Artikel Terkait di Wikipedia

Wirtualna woda

handlu międzynarodowego, takich jak Global Trade Analysis Project (GTAP) Computable General Equilibrium Model.  Modele takie mogą być wykorzystywane w analizie