Falsch.
Korrektheitsbeweis für *beliebige* Programme (i.S.v.: "Hier ist ein Berg Programmcode, beweise, das er korrekt ist") ist in der Komplexität äquivalent zum Halteproblem und daher investiert keiner, der weiß was er tut, Arbeit in sowas.
Möglich ist jedoch die Übereinstimmung von Code und Spezifikation unter klar strukturierten und eingeschränkten Bedingungen zu beweisen. Dazu gehört u.a. das man dem Compiler wesentlich mehr Informationen mitgibt als üblich und u.a. Wertebereiche klar einschränkt, z.B. Solltemperatur- bereich einer Klimaanlage von 10 ... 30 Grad Celsius statt einfach nur "Integer".
Das macht z.B. SPARK Ada. Wenn der Code nicht zur (ebenfalls angegebenen) Spezifikation paßt, dann geht der Code nicht durch den Compiler. Natürlich schützt das nicht vor Fehlern in der Spezifikation, aber das _kann_ die Maschine nicht fangen - wer einem Computer Unfug erzählt, muß damit rechnen.
Das Problem ist schlicht und einfach, daß es in der Wirklichkeit eine Unmenge an Code gibt, der aufs übelste zusammengepfuscht wurde. Solange der Code augenscheinlich meistens das tut, was er soll, wird das oftmals leider auch so akzeptiert. Es gibt um Größenordnungen mehr miserable als gute Programmierer sowie jede Menge inkompetente Amateure.
Wirklich korrekten Code (z.B. mit SPARK Ada oder äquivalenten) Werkzeugen zu entwickeln verlangt u.a. erhebliche Disziplin bei allen Beteiligten, inklusive beim Kunden - der ist sich über seine Anforderungen nämlich selten genug im Voraus klar genug.
Ja, es ist langfristig viel billiger, mehr Arbeit und Disziplin in die Entwicklung zu stecken und dafür teilweise um _Größenordnungen_ niedrigere Folgekosten zu haben. Allerdings sind die Anreize dafür nur selten da: - Anschaffung und Langzeitwartung sind verschiedene Kostengruppen mit unterschiedlichen Verantwortungsträgern, - man kann mit der Reparatur der eigenen Fehler ordentlich Geld verdienen - die Produkthaftung bei Software ist i.A. ein schlechter Witz
Man liest sich, Alex.