SORU
16 AĞUSTOS 2010, PAZARTESİ


Coq gibi olmayan turing tam bir dil pratik kısıtlamaları nelerdir?

Olarak var olmayan Turing tam bir dil ve belirli etmedim çalışma Comp Sci Üniversitesi. birisi, bir şeyi açıklamak bir Turing-eksik dil (Coq) olamaz mı?

Ya da gerçek bir bütünlüğü/eksiklik olurpratikfaiz mi yani pratikte pek fark yok ()?

EDİT- Çizgisinde bir cevap arıyorumyapamazsınız olmayan Turing tam bir dil X nedeniyle karma bir tablo oluşturmakya da onun gibi bir şey!

CEVAP
16 AĞUSTOS 2010, PAZARTESİ


İlk olarak, sanırım bunu çoktan duymuş olan Church-Turing thesis bildiren bir şey diyoruz “hesaplama” şey yapılabilir bir Turing makinesi (veya herhangi bir diğer birçok eşdeğer modeller). Yani Turing-complete bir dil olan herhangi bir hesaplama ifade edilebilir. Tersine, Turing-eksik bir dil içinde ifade edilemeyen bazı hesaplamalar var.

Tamam, bu çok bilgilendirici değildi. Bana bir örnek vereyim. Turing-eksik herhangi bir dilde yapamayacağın tek şey var: Turing makinası simülatörü (aksi simüle Turing makinesi üzerinde herhangi bir hesaplama kodlamak olabilir) yazamazsın.

Tamam, buhalaçok bilgilendirici değildi. asıl soru, ne oluryararlıolamaz Turing-eksik bir dilde yazılmış programı? Kimse” biri bir yerde faydalı bir amaç için yazmış ve Turing makinesi hesaplamaları. içermeyen tüm programları içeren “yararlı program bir tanımı ile geldi Bu yüzden tüm yararlı programları yazabilirsiniz Turing-eksik bir dil tasarımı hala uzun vadeli araştırma çok bir hedeftir.

Şimdi Turing-eksik dilleri çok farklı orada birkaç vardır, ve yapamazlar ne farklıdır. Ancak ortak bir tema var. Eğer bir dil tasarlıyorsanız, dil Turing-tam olmasını sağlamak için iki temel yolu vardır:

  • dili döngüler (while) ve dinamik bellek ayırma (malloc) keyfi gerektirir

  • dili keyfi özyinelemeli işlevleri desteklemesi gerekir

Hadi olmayan Turing bazı insanlar yine de programlama dilleri diyebilirsiniz tam bir dilde bir kaç örnek bak.

  • FORTRAN (dinamik hafıza ayırma yoktu. Ne kadar hesaplama ve ihtiyaç ayrılacak önceden anlamaya vardı. Buna rağmen, FORTRAN, bir zamanlar en çok kullanılan programlama dili.

    Bariz bir pratik sınırlama çalıştırmadan önce programın bellek gereksinimlerini tahmin etmelisiniz. Bu zor olabilir, ve eğer giriş verileri boyutunu önceden sınırlı ise imkansız olabilir. Zaman zaman kişi veri girişi besleme büyütülecek bir şey değildi bu yüzden sık sık program yazmış olan kişi. Ama bu programların çoğu bugün yazılı olarak doğru değil.

  • Coq bir dil proving theorems için tasarlanmıştır. Şimdi bir teoremi kanıtlamak gibi Coq program yazma proving theorems and running programs are very closely related,. Sezgisel olarak, teoremi bir kanıtı “A B ima” teoreminin bir kanıtını alır bir işlev Bir bağımsız değişken olarak ve teoremi bir kanıtı verir B

    Sistemin amacı teoremleri kanıtlamak için olduğundan, programcı keyfi fonksiyonlar yazmak izin veremezsin. Dil düşünün sadece kendisi denilen aptalca bir özyinelemeli fonksiyon yazmak için izin (en sevdiğiniz dil kullanan hat almak için):

    theorem_B boom (theorem_A a) { return boom(a); }
    let rec boom (a : theorem_A) : theorem_B = boom (a)
    def boom(a): boom(a)
    (define (boom a) (boom a))
    

    Böyle bir işlevi olması B anlaşılacağı sizi ikna etmesine izin veremezsin, ya da başka bir şey değil, sadece doğru teoremleri kanıtlamak için mümkün olacaktır! Yani Coq (ve benzer teoremi provers) korusun keyfi özyineleme. Özyinelemeli bir fonksiyon yazmak gerekirher zaman sona erdirir kanıtlamakbunu çalıştırmak zaman , böylece teoremi bir kanıtı Bir teorem B. bir kanıtı inşa edileceğini biliyorsun

    Coq acil pratik sınırlama keyfi özyinelemeli fonksiyonlar yazamaz. Çünkü sistem gerekmektedir reddetmek olmayan sonlandırıcı işlevler, kararsızlaşma olan halting problem (ya da daha genel Rice's theorem) garanti var sonlandırıcı işlevleri reddetti. Eklenen pratik bir zorluk sistemi fonksiyonunu sonlandırın kanıtlamak için yardım etmelisin.

    Orada pek çok devam eden araştırma yaparak kanıt sistemleri daha fazla programlama dili gibi taviz vermeden kendi garantisi varsa bir fonksiyonu A dan B, bu kadar iyi bir matematiksel kanıtı Bir ima B. Uzanan sistemine kabul daha sonlandırıcı işlevleri bir araştırma konuları. Başka bir uzantı yol gibi “gerçek dünya” olarak giriş/çıkış ve tutarlılık ile ilgilidir. başa çıkma vardır Başka bir meydan okuma bu sistemler ölümlüler (ya da belki de aslında onlar ölümlüler erişilebilir ikna) için erişilebilir hale getirmektir.

  • Synchronous programming languages diller programında daha az yanıt vermesi gereken yerde gerçek zamanlı, sistemleri programlama için tasarlanmıştırnsaat döngüsü. Esas kritik araç kontrolleri gibi sistemler için kullanılan ya da sinyal. Bu diller bir programı çalıştırmak için ne kadar süreceğini ve ne kadar tahsis edebilir güçlü bir garanti sunuyor.

    Tabii ki, böyle güçlü teminat mevkidaşı şimdiden kestirmek mümkün olmayan programlar yazabilirsiniz. Özellikle, giriş verileri bağlı olan herhangi bir program yazamazsın.

  • Hatta programlama dillerini olmaya çalışmayın, bu çok özel Dil ve eksiksiz Turing rahatça uzak kalabilir: düzenli ifadeler, veri dil, en işaretleme dilleri, ...

Özellikle bu arada, Douglas Hofstadter hesaplama hakkında çok ilginç popüler bilim kitapları birkaç yazdı, 12**. O açıkça Turing-eksiklik sınırlamaları anlatılmaktadır olup olmadığını hatırlamıyorum, ama onun kitap okumak kesinlikle daha teknik malzeme anlamanıza yardımcı olacak.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ThePointblank

    ThePointblan

    18 Aralık 2006
  • Troy Hunt

    Troy Hunt

    29 EYLÜL 2011
  • Truc Minh

    Truc Minh

    23 Ocak 2011