Turing tamamlandı mı?


32

Iota ve Jot hakkında okuyordum ve bu bölümü kafa karıştırıcı buldum:

Bir dizgenin sözdizimsel ağacının sola veya sağa dallayabildiği İota'nın aksine, Jot sözdizimi eşit biçimde sol dallanmadır. Sonuç olarak, Iota kesinlikle bağlam içermez, ancak Jot normal bir dildir.

Anladığım kadarıyla hem Iota hem de Jot Turing'in eksiksiz olduğu. Fakat görünüşe göre, biri bağlamsız, diğeri ise düzenli! Kesinlikle normal diller tam Turing olamaz?


3
Bir turing makinesini tanımlayan bir dilin normal bir dilde basit bir şekilde yazılabileceğini unutmayın; örneğin, i = {0,1, -1}, b = {girişin sonu} (i + bi + bi) + b (i +) boş olmayan bir kurallar dizisi ve ardından boş olmayan bir girdi. Ya da daha doğrusu, eğer bir tercüman varsa, bunun cevabını yazdığı gibi, dilin sınıfına ayrı bir kavram olduğunu yorumlayabilirsiniz.
Kübik

1
@Cubic: bu konuda, Turing makineleri, her sayının tam olarak bir makineyi temsil ettiği şekilde (yani sayılabilir) numaralandırılabilir ve bu sayılar unary notasyonu ile ifade edilebilir. Bu konuyu asla düzgün bir şekilde incelemedim, bu yüzden tanımların üzerinde çalışmalıyım, ama 1*0normal bir dil olduğunu düşünüyorum ;-) Programcı veya derleyici-yazar için kolay bir programlama dili olmasa da.
Steve Jessop,

Yanıtlar:


40

Kısacası, cevap evet.

Ancak “dil” teriminin birbiriyle tamamen ilişkili iki anlamını karıştırıyorsunuz (evet, bu kafa karıştırıcı):

  • Bir dizi dizgi. "Bağlamsız dil", "bağlamsız bir dilbilgisi kullanılarak algılanabilen bir dizi dize" anlamına gelir.
  • Bir hesaplama belirtmenin bir yolu. "Turing-complete language", "Turing makinesinin belirtilebileceği programları belirtmenin bir yolu" anlamına gelir.

"C ++ dili" hakkında, "dil" kelimesinin iki alakasız anlamını kullanarak, tamamen ilgisiz iki bakış açısından konuşabileceğinizi unutmayın:

  • C ++ dilbilgisine göre yasal olan bir dizi dize olarak C ++
  • C ++ programları belirtmenin bir yolu olarak.

Bu iki bakış açısından "C ++ dili" nin özellikleri arasında bir ilişki yoktur.

Bu kavramları ayırmanıza yardımcı olacak diğer örnekler:

  • "[Az] + @ [az]. [Az]" ifadesi, sonlu otomatlar tarafından tanınabilen bir dizi dizeyi, yani normal bir dili tanımlar. Ancak, sadece bu - bir dizi dizge: programları belirtmenin bir yolu değildir (bu dizelerin her birini bir program olarak yorumlamanın bir yolunu belirtmediğiniz sürece), bu yüzden Turing olup olmadığı hakkında konuşmanın anlamı yoktur. tamamlayınız.
  • Akış şemalarının dili, programları belirtmenin bir yoludur; Akış şemalarının özel lezzetine bağlı olarak Turing-tamamlanmış olabilir veya olmayabilir. Bununla birlikte, akış çizelgeleri karakter dizisi değildir, bu nedenle "dil dizisi kümesi" dili anlamında akış çizelgeleri hakkında konuşmanın hiçbir anlamı yoktur.

3
Bunun (([a-z][0-9]*)*[A-Z][0-9]*([a-z][0-9]*)*->([a-zA-Z][0-9]*)*)*, sınıf 0'dan herhangi bir dilin gramerini tanımlayabilen normal bir dil olduğunu
ekleyeceğim

2
{0,1}*

10

Jot'taki yasal programlar dizisi düzenliyken, Jot'un kendisi Turing-tamamlandı. Bu her hesaplanabilir fonksiyonun Jot ile ifade edilebileceği anlamına gelir. Tüm ikili dizgelerin yasal olduğu bir dil bile bulabiliriz, ancak dilin kendisi Turing tamamlandı (alıştırma). Sen sözdizimi ve anlambilimi karıştırıyorsun.

Bu arada, bağlamsız diller de (muhtemelen) NP-tamamlanmış değildir çünkü polinom zaman ayrıştırma algoritmalarına sahiptirler.


9

Modern programlama dillerinin tek başına sözdizimi (sözdizimi ağaçlarında kodlandığı gibi) yaptıkları her şeyden uzaktır. Aslında, tüm programların belirli bir dilde hatasız derleme dizisi ile tanımlanan biçimsel dilleri nadiren bağlamsızdır .

Statik ve dinamik anlambilim denklemini etkileyen faktör. Sözdizimi ağacında görünmezler ancak bir kod parçasının gerçekte bir program olup olmadığını ve ne hesapladığını belirlerler. Alt satırda, bağlamsız cevap. "sözdizimi" ile tanımlanan düzenli biçimsel dil , programlama dilinin genel bir ifadesini verir .

Şimdi sorunuzu cevaplamak için: evet, bu mümkün. Örneğin, herhangi bir Gödel Turing makinesini numaralandırmayı düşünün ; her biri bir TM'yi temsil eden tüm doğal sayıların "programlama dili" ni alırsınız. Kabul, programlamak için güzel bir dil değil, ama kesinlikle düzenli - önemsiz, hatta Turing-tamamlanmış bir dil.


3
  1. Bir programlama dili, Turing makineleri tarafından hesaplanabilen her işlevi belirtecek kadar açıksa , Turing tamamlanır . Burada tartıştığımız belirtilen dillere gücünü de programlama dilleri . Örneğin, Python'daki Turing makineleri için bir tercüman yazmak zor değildir, bu yüzden Python bir Turing tamamlanmış bir programlama dilidir.

  2. Bir programlama dilinin sözdizimi , yani programlama dilinde geçerli programlara karşılık gelen dizi dizisi kendisidir. Mümkün olan tüm Python programlarının kümesini düşünün. Bir programlama dilinin sözdizimi içeriğe duyarlı , içeriğe bağlı olmayan , düzenli olabilir vb. . Belirli bir dizginin programlama dilinde geçerli bir program olduğunu kontrol etmenin zorluğuyla ilgileniyoruz (bu derleyiciler / tercümanlar tarafından yapılır). Bir programlama dilinin sözdiziminin bağlamsız olduğunu söylediğimizde, sözdizimi için bağlam içermeyen bir dilbilgisi olduğu ve programların geçerliliğini kontrol etmek için aşağı açılan bir otomat olduğu anlamına gelir.

Bir programlama dilinin sözdiziminin sadeliğinin, bu programlama dillerinde belirtilen programların işlem gücü üzerindeki bir kısıtlama anlamına gelmediğine dikkat edin.


1

Cevap Evet. Kabul edilen cevabın belirttiği gibi bir gramer anlamından bağımsızdır. Chomsky'nin kendi sözleriyle:

Bir gramerin özerk ve anlamdan bağımsız olduğu sonucuna varmak zorunda olduğumuzu düşünüyorum.

Chomsky, Sözdizimsel Yapılar (1956)

Dilbilgisi, hesaplanabilecek her şeyi tanımlamak için yeterli cümleler üretebiliyorsa, o zaman rasgele olarak kendi hesaplamalarına anlamsal anlamlar atayabiliriz - hesaplanabilecek her şey için bir tane.

Gerçek bir somut örnekte, popüler dilin whitespacedüzenli bir gramer ve hatta belki de x86 assembly languages(doğrulanması gerekir) vardır.


Pasajın Go'nun gramerinin biçimsel anlamda normal bir dil olduğu anlamına geldiğini sanmıyorum; Bence sadece gramerin düzensiz olmadığı , yani tutarlı olmadığı anlamına geliyor . Go'nin sözdizimi Chomsky hiyerarşisinde normal bir dil olsaydı, örneğin dengeli, iç içe parantez üretemezdi.
tsleyson

Evet, Go'nun gramerinde özyineleme var. Yayın güncelleniyor.
Eric
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.