Die Fragen, die Sie stellen, sind tatsächlich ganz anders.
Ich bin mir jedoch nicht sicher, inwieweit dies für reale Programme wie Betriebssysteme gilt. Benötigen diese Arten von Programmen die volle Stärke der Vollständigkeit von Turing?
Es dauert äußerst wenig, bis ein Berechnungsmodell vollständig ist. Beispielsweise können verschiedene Modelle mit Zählern Turingmaschinen simulieren. Wenn Sie der Meinung sind, dass Ihre Software mehr als zwei Zähler benötigt, die Sie beliebig manipulieren können, verwenden Sie eine vollständige Turing-Sprache. Obwohl Maschinen-Ganzzahlen apriori-begrenzt sind, sind dies bei Heap-zugewiesenen Datenstrukturen normalerweise nicht der Fall. Wenn Ihre Software Listen, Bäume und andere dynamisch zugewiesene Daten benötigt, verwenden Sie eine vollständige Turing-Sprache.
Gibt es einfachere Berechnungsmodelle (wie PR), in die diese Anwendungen geschrieben werden könnten? Wenn ja, inwieweit ermöglicht dies die Entscheidbarkeit der Programmkorrektheit?
Es ist wichtig zu wissen, dass wir keine willkürlichen Eigenschaften unserer Software überprüfen möchten. Das Überprüfen sehr spezifischer, enger Eigenschaften (keine Pufferüberläufe, keine Nullzeiger-Dereferenzen, keine Endlosschleifen usw.) verbessert die Qualität und Benutzerfreundlichkeit von Software erheblich. Theoretisch sind solche Probleme immer noch unentscheidbar. In der Praxis können wir durch die Konzentration auf bestimmte Eigenschaften Strukturen in unseren Programmen entdecken, die wir häufig zur Lösung des Problems nutzen können.
Insbesondere können Sie Ihre ursprüngliche Frage in ändern
Gibt es eine Abstraktion meiner Software, die ich in einem nicht Turing-vollständigen Modell effizient analysieren kann?
Eine Abstraktion ist ein Modell, das das Verhalten der ursprünglichen Software und möglicherweise viele zusätzliche Verhaltensweisen umfasst. Es gibt Modelle wie Einzählermaschinen oder Pushdown-Systeme, die nicht vollständig sind und die wir analysieren können. Der Standardansatz bei der Programmüberprüfung mit automatisierten Tools besteht darin, eine Abstraktion in einem solchen Modell zu erstellen und algorithmisch zu überprüfen.
Es gibt Anwendungen, bei denen sich Menschen für anspruchsvolle Eigenschaften ihrer Hardware oder Software interessieren. Hardware-Unternehmen möchten, dass ihre Chips arithmetische Algorithmen korrekt implementieren, Automobil- und Avionikunternehmen möchten zertifizierbar korrekte Software. Wenn es so wichtig ist, ist es besser, einen (geschulten) Menschen zu benutzen.