Pytania, które zadajesz, są zupełnie inne.
Nie jestem jednak pewien, w jakim stopniu dotyczy to rzeczywistego programu, takiego jak systemy operacyjne. Czy tego typu programy wymagają pełnej siły kompletności Turinga?
Kompletowanie modelu obliczeniowego Turinga zajmuje bardzo niewiele. Na przykład różne modele z licznikami mogą symulować maszyny Turinga. Jeśli uważasz, że twoje oprogramowanie wymaga więcej niż dwóch liczników, którymi możesz dowolnie manipulować, używasz kompletnego języka Turinga. Chociaż liczby całkowite maszyny są ograniczone apriori, struktury danych alokowane na stercie zwykle nie są. Jeśli twoje oprogramowanie potrzebuje list, drzew i innych dynamicznie przydzielanych danych, używasz kompletnego języka Turinga.
Czy istnieją prostsze modele obliczeń (takie jak PR), w których można pisać te aplikacje? Jeśli tak, to w jakim stopniu umożliwia to rozstrzygalność poprawności programu?
Należy pamiętać, że nie chcemy sprawdzać arbitralnych właściwości naszego oprogramowania. Sprawdzanie bardzo specyficznych, wąskich właściwości (brak przepełnienia bufora, brak dereferencji wskaźnika zerowego, brak nieskończonych pętli itp.) Znacznie poprawia jakość i użyteczność oprogramowania. Teoretycznie takie problemy są nadal nierozstrzygalne. W praktyce skupienie się na określonych właściwościach pozwala nam odkryć strukturę w naszych programach, którą często możemy wykorzystać do rozwiązania problemu.
W szczególności możesz zmodyfikować swoje pierwotne pytanie na
Czy istnieje abstrakcja mojego oprogramowania, którą mogę efektywnie analizować w modelu niekompletnym Turinga?
Abstrakcja to model, który obejmuje zachowanie oryginalnego oprogramowania i prawdopodobnie wiele dodatkowych zachowań. Istnieją modele, takie jak maszyny z jednym licznikiem lub systemy wypychające, które nie są kompletne w Turinga i które możemy analizować. Standardowym podejściem do weryfikacji programu za pomocą zautomatyzowanych narzędzi jest zbudowanie abstrakcji w takim modelu i sprawdzenie go algorytmicznie.
Istnieją aplikacje, w których ludzie dbają o wyrafinowane właściwości swojego sprzętu lub oprogramowania. Firmy sprzętowe chcą, aby ich układy poprawnie wdrażały algorytmy arytmetyczne, firmy motoryzacyjne i awioniczne chcą certyfikowanego oprogramowania. Jeśli to takie ważne, lepiej wykorzystać (wyszkolonego) człowieka.