Żeby było jasne, musimy rozróżnić funkcje matematyczne (nazywam je funkcjami i często jest ich niepoliczalnie wiele, więc w ogóle nie są one policzalne) i funkcje, które można napisać: wywołam je programami lub funkcjami obliczalnymi .
Podzbiór o zbiór przeliczalny nazywany jest obliczalny , czy istnieje program, który, biorąc pod uwagę element z odpowie „tak”, jeśli i „nie”, jeśli . (I zawsze musi coś odpowiedzieć). Zestaw jest wywoływany przez wyliczanie rekurencyjne, jeśli program jest upoważniony do nie odpowiadania zamiast powiedzieć „nie”. (równoważne jest wymaganie, aby program wydrukował wszystkie elementy w dowolnej kolejności)E x E x ∈ S x ∉ S SSExEx∈Sx∉SS
Zestaw wszystkich programów, które są sumą w zestawie skończonym, jest wymienny, ponieważ możesz napisać interpreter, który po prostu uruchamia program na wszystkich elementach zestawu skończonego i zwraca „tak”, jeśli wszystkie się zakończą. (Ale nie widzę, czy któryś z nich nie)
Twój profesor powiedział, że zestaw wszystkich programów, które są sumą w zestawie nieskończonym, nie jest wyliczalny, ponieważ nie możesz po prostu uruchomić programu na nieskończonej liczbie elementów.
Ale to nie znaczy, że to źle:
Na przykład zestaw, jeśli wszystkie programy, które są możliwe do udowodnienia, jest policzalny, ponieważ można wyliczyć wszystkie dowody i mechanicznie sprawdzić, czy dowodzą, że twój program jest sumą.
Nawet wymienny zestaw nie byłby praktyczny, ponieważ być może będziesz musiał czekać wiecznie, nie mając pewności, czy procedura zostanie zakończona pewnego dnia. Nie widzę, jak korzystać z programów, które wyliczają wszystkie funkcje ogółem ...
Istnieje kilka języków programowania, w których wszystko, co piszesz, z pewnością kończy się na pisaniu statycznym! Są nawet takie, które gwarantują ci wielomianowe ograniczenie. Na razie są w większości akademiccy, pisanie w nich prawdopodobnie sprawi, że poczujesz ograniczenia bardziej niż pisanie w Pythonie, ale wielu naukowców pracuje nad tym.
Aby odpowiedzieć na twoje pytanie: w pewnym sensie tak. Potencjalny brak zakończenia jest konieczny, aby być kompletnym Turinga (jak na razie najwyższa moc obliczeniowa). Ale nie uważam tego za bezpośrednio związane z faktem, że wszystkie funkcje są policzalne, czy nie. Nadal możesz pisać wszystkie programy!