Pekerjaan Liskov di bidang ini berfokus pada subtyping perilaku, yang selain jenis keamanan sistem yang dibahas dalam artikel ini juga mensyaratkan bahwa subtipe mempertahankan semua invarian yang dijamin oleh supertipe dalam beberapa kontrak. [3] Definisi subtyping ini umumnya tidak dapat ditentukan, sehingga tidak dapat diverifikasi oleh pemeriksa tipe.
sumber
BigInteger sum(int[] arr) { BigInteger sum = BigInteger.ZERO; for (int x: arr) sum = sum.add(BigInteger.valueOf(x)); return sum; }
Tidak sulit untuk membuktikan bahwa metode tertentu selalu mengembalikan jumlah elemen array integer dan tidak melakukan hal lain (asalkan argumennya bukan nol).Karena hampir setiap pertanyaan tentang perilaku program tidak dapat diputuskan. Dengan teorema Rice , setiap masalah keputusan berupa:
tidak dapat ditentukan. Jadi, misalnya, Anda tidak selalu dapat membedakan kode yang menghitung kuadrat input dari kode yang tidak. Meskipun dalam kasus-kasus sederhana, seringkali dimungkinkan untuk membuktikan bahwa suatu fungsi tidak atau tidak melakukannya, tidak ada prosedur umum yang berfungsi untuk semua program.
Hampir semua invarian perilaku yang menarik berada di bawah teorema Rice, karena pernyataan-pernyataan itu jarang (jika pernah) berbicara tentang seperti apa metode tersebut secara internal, hanya apa yang dikembalikan dan efek samping apa yang diakibatkannya dalam menanggapi input tertentu.
sumber