Hindley-Milner algoritması neden asla t1 -> t2 gibi bir tür vermez?


14

Ben okuyorum Hindley'nin-Milner yazarak algoritması bir uygulama yazma ve görüyoruz ederken, her zaman gibi argümanlar son tipini belirleyecek ya atom tiplerini veya türlerini, elde edersiniz boyunca her değişken bağlı olarak, t1 -> t1ya (t1 -> t2) -> (t1 -> t2)Burada t1ve t2tip değişkenleridir.

Ben böyle bir şey almak için bir yol düşünemiyorum t1 -> t2ya da basitçe t1, ben anlıyorum algoritmanın kırık anlamına gelir çünkü ifade gerçek türünü belirlemek için hiçbir yolu olmayacaktır. Her değişkenin bağlı olduğu sürece asla bu "kırık" gibi bir tür elde edemeyeceğinizi nasıl anlarsınız?

Algoritmanın değişkenler ile türler verdiğini biliyorum, ancak argümanları işleve geçtikten sonra bunlar her zaman çözülür, bu tür bir işlevde durum böyle olmaz t1 -> t2. Bu yüzden algoritmanın asla bu tür verimler veremeyeceğinden nasıl emin olduğumuzu bilmek istiyorum.

(Görünüşe göre ML'de bu "kırık" türleri alabilirsin , ama lambda hesabını soruyorum.)

Yanıtlar:


16

α,β.αβα.ααλx.x

α,β.αββββββ

Δ=λx.xx(α.α)(α.α)ΔΔ

A,B,ABα,β.αβ

YY(λx.x)α.αA,B,AB

Güçlü normalizasyon sağlayan tip sistemleri ile olmayan tip sistemler arasındaki ince çizgiyi bulmak zor ve ilginç bir sorundur. Bu önemli bir sorundur çünkü hangi mantıkların sağlam olduğunu, yani hangi programların teoremlerin kanıtlarını temsil ettiğini belirler. Sistem F'den çok daha ileri gidebilirsiniz, ancak kurallar daha karmaşık hale gelir. Örneğin , Coq geçirmez asistanın temeli olan endüktif konstrüksiyon hesabı güçlü bir şekilde normalleşmektedir, ancak bunlar üzerinde ortak endüktif veri yapılarını ve algoritmaları ve daha fazlasını tanımlayabilmektedir.

Gerçek programlama dillerine ulaşır ulaşmaz yazışma bozulur. Gerçek programlama dilleri, genel özyinelemeli işlevler (sonlandırılmayabilir), istisnalar (her zaman bir istisna oluşturan bir ifade asla bir değer döndürmez ve bu nedenle çoğu tür sistemde herhangi bir türe sahip olabilir), özyinelemeli türler (sonlandırmaya izin vermez) gizlice girmek) vb.


"Sistem F'nin güçlü bir şekilde normalleşmesinin bir sonucudur". HM'nin güçlü bir şekilde normalleştirildiğinin nasıl gösterileceği, Sistem F'nin güçlü bir şekilde normalleşmesinin bir sonucudur?
Rafael Castro

1
@RafaelCastro HM'de iyi yazılan her terim Sistem F'de iyi yazılmıştır. Sistem F'de iyi yazılan her terim SN'dir. Bu nedenle HM'de iyi yazılmış her terim SN'dir.
Gilles 'SO- kötü olmayı kes'
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.