Davranışsal alt tipleme neden kararsızdır?


13

Liskov'un bu alandaki çalışmaları, bu makalede tartışılan tip sistem güvenliğinin yanı sıra, alt tiplerin bazı sözleşmelerde üst tipler tarafından garanti edilen tüm değişmezleri korumasını gerektirdiği davranışsal alt tiplemeye odaklanmıştır. [3] Bu alt tip tanımı genellikle kararsızdır, bu nedenle bir tür denetleyicisi tarafından doğrulanamaz.

Gönderen: http://www.wikiwand.com/en/Subtyping#/Function_types

Yanıtlar:


24

Operasyonun sözleşme edelim oTürü Ttüm girişler için durur olduğunu olabilir. Şimdi oalt tipin çalışmasının S <: Tbu sözleşmeyi karşılayıp karşılamadığına karar verin : Durdurma Problemini yeni çözdünüz .

Daha genel olarak, sanki S::oaynı işlevi hesaplamalıdır . İki programın aynı işlevi hesaplayıp hesaplamayacağına karar vermek İşlev Sorunu olarak adlandırılır ve Durdurma Sorununu çözmeye eşdeğerdir.T::oS <: T

Genel olarak, önemsiz olmayan herhangi bir çalışma zamanı özelliğine statik olarak karar vermek neredeyse her zaman Durdurma Sorununa eşdeğerdir.


3
Bu son çizgi çiviyi kesiyor. Programın davranışsal bir ortamda ne yapabileceğine dair bir mülkü kanıtlamak istediğiniz an, imkansıza adım atıyorsunuz. Tür sistemleri ve statik analiz araçlarının çalışmasının nedeni , programın doğrudan nasıl çalıştığının özelliklerini değil , farklı bir dili (program türlerinin, programdaki değişkenlerin kapsamının vb.) Ele almalarıdır .
Benjamin Gruenbaum

5
@BenjaminGruenbaum Jorg'in cevabı ve yorumunuz doğru ancak açıklığa kavuşturmak istediğim bir incelik var. Belirli bir program hakkında bir mülkün kanıtlanması genellikle mümkündür . Sadece körü körüne takip edebileceğiniz ve tüm programlar için çalışacak bir algoritma yoktur . Java ile yazılmış bu yöntemi göz önünde bulundurun: BigInteger sum(int[] arr) { BigInteger sum = BigInteger.ZERO; for (int x: arr) sum = sum.add(BigInteger.valueOf(x)); return sum; }Belirli bir yöntemin her zaman bir tamsayı dizisinin öğelerinin toplamını döndürdüğünü ve başka bir şey yapmadığını kanıtlamak zor değildir (bağımsız değişken boş değilse).
Doval

1
Ve durma problemine eşdeğer olmadığında, genellikle daha da kötüdür . Çünkü imkansız zaten yeterince zor değildi.
user2357112 Monica

2
Neden Veya başka (künt) yolu Doval bakış açısını koymak için, bu tam da olmayan -Turing komple diller ilginç ve faydalıdır. Gerçek iş için genellikle Turing-bütünlüğüne (kesinlikle modül düzeyinde) ihtiyacınız yoktur.
Leushenko

@Doval: Çok iyi bir nokta. Rastgele bir programın sonlandığını ve / veya doğruluğunu kanıtlayan bir algoritmaya sahip olamayacağınız doğru olsa da, programları doğruluklarını kanıtlayabilecek şekilde yazmak mümkündür.
Giorgio

12

Çünkü programların davranışlarıyla ilgili hemen hemen her soru kararsızdır. By Rice'ın teoremi , formun herhangi bir karar sorun:

Bazı programlar bu özelliğe sahip işlevleri hesaplarken, diğer programlar bu özelliğe sahip olmayan işlevleri hesaplar. Bir P programı verildiğinde, P tarafından hesaplanan fonksiyon yukarıda belirtilen özelliğe sahip mi, değil mi?

kararsız. Yani, örneğin, bir girdinin karesini hesaplayan kodu her zaman olmayan koddan ayırt edemezsiniz. Basit durumlarda, genellikle bir fonksiyonun bunu yaptığını ya da yapmadığını kanıtlamak mümkün olsa da, tüm program için çalışan genel bir prosedür yoktur.

Hemen hemen tüm ilginç davranışsal değişmezler Rice teoremi altındadır, çünkü bu ifadeler nadiren (eğer varsa) yöntemin dahili olarak neye benzediğini, sadece geri döndüğünü ve belirli girdilere yanıt olarak hangi yan etkilere neden olduğunu konuşur.


3
Biraz açıklığa kavuşturabilirsiniz: Bu, ne kadar patolojik olursa olsun, tüm analizlere direnebilecek tek bir programın olmadığı, ancak herhangi bir analiz için, bununla doğru bir şekilde kategorize edilemeyen en az bir programın mevcut olduğu anlamına gelmez.
Nathan Tuggy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.