Prace Liskova w tym obszarze koncentrowały się na podtypach behawioralnych, które oprócz bezpieczeństwa systemu typów omawianego w tym artykule wymagają również, aby podtypy zachowywały wszystkie niezmienniki gwarantowane przez nadtypy w niektórych kontraktach [3]. Ta definicja podtypu jest na ogół nierozstrzygalna, więc nie może być zweryfikowana przez moduł sprawdzania typu.
źródło
BigInteger sum(int[] arr) { BigInteger sum = BigInteger.ZERO; for (int x: arr) sum = sum.add(BigInteger.valueOf(x)); return sum; }
Nietrudno udowodnić, że konkretna metoda zawsze zwraca sumę elementów tablicy liczb całkowitych i nie robi nic więcej (pod warunkiem, że argument nie jest pusty).Ponieważ prawie każde pytanie dotyczące zachowania programów jest nierozstrzygalne. Według twierdzenia Rice'a każdy problem decyzyjny formy:
jest nierozstrzygalny. Na przykład nie zawsze można odróżnić kod, który oblicza kwadrat danych wejściowych od kodu, który tego nie robi. Chociaż w prostych przypadkach często można udowodnić, że funkcja to robi lub nie, nie ma ogólnej procedury, która działałaby dla wszystkich programów.
Prawie każdy interesujący niezmiennik behawioralny podlega twierdzeniu Rice'a, ponieważ te stwierdzenia rzadko (jeśli w ogóle) mówią o tym, jak ta metoda wygląda wewnętrznie, tylko o tym, co zwraca i jakie efekty uboczne wywołuje w odpowiedzi na pewne dane wejściowe.
źródło