Liskovs Arbeit in diesem Bereich konzentrierte sich auf die Subtypisierung des Verhaltens, die neben der in diesem Artikel erörterten Sicherheit des Typsystems auch verlangt, dass die Subtypen alle Invarianten bewahren, die in einigen Verträgen durch die Supertypen garantiert werden. [3] Diese Definition der Untertypisierung ist im Allgemeinen nicht entscheidbar und kann daher nicht von einer Typprüfung überprüft werden.
quelle
BigInteger sum(int[] arr) { BigInteger sum = BigInteger.ZERO; for (int x: arr) sum = sum.add(BigInteger.valueOf(x)); return sum; }
Es ist nicht schwer zu beweisen, dass eine bestimmte Methode immer die Summe der Elemente eines Integer-Arrays zurückgibt und nichts anderes tut (vorausgesetzt, das Argument ist nicht null).Denn fast jede Frage zum Verhalten von Programmen ist unentscheidbar. Nach dem Satz von Rice ist jedes Entscheidungsproblem der Form:
ist unentscheidbar. So können Sie beispielsweise nicht immer Code, der das Quadrat einer Eingabe berechnet, von Code unterscheiden, der dies nicht tut. Obwohl es in einfachen Fällen oft möglich ist, zu beweisen, dass eine Funktion dies tut oder nicht, gibt es kein allgemeines Verfahren, das für alle Programme funktioniert.
Fast jede interessante Verhaltensinvariante fällt unter den Satz von Rice, da diese Aussagen selten (wenn überhaupt) darüber sprechen, wie die Methode intern aussieht, was sie zurückgibt und welche Nebenwirkungen sie als Reaktion auf bestimmte Eingaben verursacht.
quelle