F Sistemi hangi işlevleri hesaplayamaz?


28

In Turing Bütünlük bu wikipedia makalesinde bu belirtmektedir:

Yazılmamış lambda matematiği Turing tamamlandı, ancak Sistem F de dahil olmak üzere birçok tipte lambda matematiği yok. Yazılan sistemlerin değeri, daha fazla hata algılayarak en tipik bilgisayar programlarını temsil etme yeteneklerine dayanır.

F sistemi tarafından hesaplanamayan bir toplam hesaplanabilir fonksiyon örneği nedir ?

Ek olarak, hindley-milner:

Sistem F kısıtlaması

Bu gerçeği nedeniyle:

Açıkça yazım açıklamalarında bulunmayan, yani System F'nin Curry tarzı bir varyantı için tip kontrolü kararsızdır.

Bu, hindley-milner tipi sistemlerin altında yatan lambda matematiğinin de tam olarak tamamlanmadığı anlamına mı geliyor?

Çünkü bu, doğruysa haskell açıkça tam turing ve biz 's temeli lambda hesabı ve hindley-milner tipi sistem olduğunu biliyoruz ya o tam turing haskell yapmak için eklenen lambda calculus bulunmayan özellikleri?



Haskell'i turing yapan özelliklere örnek yerel kod arayüzüdür.
Trismegistos

@cody Yorumunuz için teşekkürler. T sistemine aşina değilim. Burada belirtilen T sistemi olduğunu varsaymakta haklı mıyım ? sistem T, sistem F ile nasıl karşılaştırılır ve karşılaştırılır?
Mike HR,

NOT, googling ile ilgili olarak burada yeniden ifade edilensystem T vs. system F son alt soruyu yanıtlayan bir şey buldum : haskell, Turing-eksiksizliğini Sistem F'ye nasıl ekledi
Mike HR

1
Sanırım @Trismegistos ilginç bir felsefi sorun yaratıyor: Haskell tam olarak nedir, sınırları nerede?
Martin Berger

Yanıtlar:


45

Sistem oldukça etkileyici olduğunu. Girard kanıtladığı üzere burada , tipi fonksiyonlar NN ( N olarak tanımlanır x . X ( X X ) X ) tam olarak tanımlanabilen işlevleri ( NN ikinci dereceden Heyting Aritmetik olarak) H , A 2 . Bunun Peano Aritmetik ikinci sırada tanımlanabilen fonksiyonlarla aynı olduğuna dikkat edin .FNNNX. X(XX)XNNHA2

Muhtemelen Provaları ve Türleri daha okunaklı bir referans olarak kontrol etmek isteyeceksiniz . Bunun , Ackermann fonksiyonundan Gödel T sistemi için tercümanlara kadar pek çok programın F sistemine yazılabileceği anlamına geldiğine dikkat edin . Herhangi bir toplam programlama diline gelince (bazı ılımlı koşullar altında) sistem F kendi kendine tercüman uygulayamaz , yani işlev E v a l : NN , sistem F terimi için bir t kodunu girdi olarak alır ve a) t için normal formTFeval:NNtFt. Kanıt, durma sorununun kararsızlığı için kullanılan köşegenleştirme hilesinin bir türevidir. Andrej burada çok güzel anlatıyor .

Diğer sorulara cevap için: Hindley'nin-Milner (HM) dillerinin altında yatan -calculus da tam Turing değildir. Aslında, F sisteminden çok daha zayıf , basitçe yazılan λ- calculus'a daha yakın .λF λ

Haskell gerçekten Turing tamamlandı. Bunu sağlayan en belirgin özellik (diğerleri olsa da) sınırsız özyinelemenin varlığıdır : herhangi bir programın (fonksiyonun) tanımı programın kendisine atıfta bulunabilir. Bu, basitçe yazılan ancak Y birleştiriciyle Turing'in bütünlüğünü koruyan PCF tanımında yapıldığı gibi bir birleştiricisinin eklenmesine benzer .YY

Not: Haskell Turing'i tamamlayan başka özellikler de vardır, ancak bunlar genellikle ana dilin bir parçası olarak alınmaz, örneğin işlevlere referanslar, sınırsız veri türleri vb.


1
Vay canına, bu inanılmaz bir cevap ve her şeye mükemmel cevap veriyor. Teşekkür ederim!
Mike HR,

“Toplam programlama dili için ...” Bu doğru değil. Sonu gelmeyen programları, yazılmamış olarak hariç tutarak, benim anladığım kadarıyla çalışan bazı dil tercümanları var. Bu makaleye
jmite

@jmite belirtildiği gibi benim iddiam doğru. Bu yazının bağlantılı tartışmasında bahsedilmiştir ve Andrej'in
cody

11

Haskell'in yazma sisteminin "hinley-milner tipi sistem" olduğunu söylemek biraz yanıltıcıdır. Haskell'in türleri, diğerlerinin yanı sıra, yüksek kalitedeki türler dahil, çok daha güçlüdür. Aslında, yazma sistemi o kadar güçlüdür ki, Turing-komple programlama dillerini yazma sistemine dahil edebilirsiniz, buraya bakınız . Haskell'in gücünün tek nedeni bu değil, Cody başkalarından bahsetti.


Teşekkürler. hindley-milner’a maruz kalmamın ana nedeni hashell oldu, sanırım daha yüksek türlerin bunun bir parçası olduğunu varsaymış olabilirim. Hindley-milner basitçe tip çıkarımına mı atıfta bulunuyor? ya da daha fazla bir şey mi? Lambda matematiğinde bunun matematiksel temelinin olduğunu anlıyorum, sadece güçlü haskell tipi sistem ile mantıksal sınırların nerede olduğunu ve bir "hindley-milner tipi sistem" in asgari bir uygulamasının ne olacağını anlamaya çalışıyorum.
Mike HR,

Not: Haskell tip sisteminin gücüyle ilgilenen biri varsa, Edward Kmett'in haskell tip sistemini kullanarak kategori teorisine dağıtan (derin) hask ile ilgili videosunu öneririm .
Mike HR,

1
MikeH-R 'Genellikle Hindley-Milner sınıflandırma sistemi anlamına ya da daha kesin bir ifadeyle, bir yazılı -calculus, oysa B algoritma Hindley-Milner sistemi için bir tür çıkarımı algoritmasıdır. Hindley-Milner sistemi ile ilgili dikkate değer olan şey, parametrik polimorfizmi, herhangi bir programın en genel türünü tür ek açıklamaları olmadan verebilme yeteneği ile birleştirmesidir. Wikipedia makalesi okunmaya değer olduğunu. λW
Martin Berger
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.