İşlevsel diller neden Turing tamamlandı?


22

Belki de konuyla ilgili sınırlı bir anlayışım yanlıştır, ancak şu ana kadar anladığım şey bu:

  • İşlevsel programlama, Alonzo Church tarafından formüle edilen Lambda Calculus'a dayanmaktadır.

  • Zorunlu programlama, Church'un öğrencisi Alan Turing tarafından yapılan Turing makine modeline dayanmaktadır.

  • Lambda hesabı, Turing Makinası gibi güçlü ve muktedir olduğunu
    onlar hesaplama kapasitesiyle eşdeğerdir anlamına gelir.

Eğer işlevsel programlama Lambda Calculus'tan kaynaklanıyorsa ve Turing makinesine dayanmıyorsa, neden bazıları (veya tümü) Turing'in eksiksiz olduğunu ve Lambda'nın tamamının veya böyle bir şeyin olmadığını açıklar? "Turing eksiksizliği" terimi, Turing makinelerine özel mi, yoksa sadece bir kelime mi?

Son olarak, zorunlu diller Turing Makinesi'nden alınmışsa ve bilgisayarlar temel olarak Turing makineleri ise, sonsuz hafızası olmayan, bu, modern PC'lerimizde işlevsel programlama dillerinden daha iyi performans gösterdikleri anlamına mı geliyor?

Bu durumda, bir lambda hesap makinesinin eşdeğeri ne olurdu?

Bunun 3 ayrı soru gibi gözüktüğünü biliyorum, ama hepsi yakından ilişkili ve her biri başlangıçtaki geçerli bir soru olmasına bağlı.


6
Cevap değil, ama lambda hesabının tüm sürümlerinin Turing Complete olmadığından bahsettiniz. Simply Typed Lambda Calculus ve sonlandırma kontrolüne dayanan Coq ve Agda'nın daha güçlü sürümleri Turing Complete değil (çünkü kesin olarak durdurulabilir durma sorunları var). Haskell ve SML gibi kesin olarak yazılmış diller, türü ile bir terim olan bir fixpoint birleştirici ile keyfi özyinelemeye izin vererek bu sorunu çözüyor (a -> a) -> a.
jmite,

"Turing tamamlandı olarak tanımlandı" demek çok yanlış. Lütfen unvanı değiştirebilir miyiz?
Andrej Bauer

@AndrejBauer Başlık düzenleme için teşekkür ederiz, ancak neden ( Tornalama Tamamlandı olarak tanımlandı ) yanlış olduğunu neden merak ediyorum ? Bir sıfat olduğu için mi? Tarif, tanımlamaktan daha iyi bir kelime olabilir mi?
Abdul,

1
@Abdul Eh, problem "tanımlı" kelimesidir. "İşlevsel diller Turing tamamlandı" olarak tanımlanırsa, "işlevsel dil" tanımının ya da "Turing complete" tanımının işlevsel dillerin Turing tamamlandı olduğunu söylersiniz. Aslına bakarsanız, her iki tanım da bunu söylemez.
Tanner Swett

Yanıtlar:


20

Özetle :

Ne Turing makineleri kadar yakın ve PC'ler gibi olağan bilgisayarlara zorunlu programlama dilleri, (kendilerini daha yakın ziyade Turing makinesine daha rasgele erişim makineleri (RAM)) karakterize eden bir kavramıdır açık bellek deposuna değiştirilebilir (ara sonuçlar ). Hesaplamanın ilerledikçe değişebilen bir durum kavramı (hem sonlu durum kontrolü hem de hafıza içeriği içeren) içeren, otomatiğin otomat görüntüsüdür.

Diğer çoğu model daha soyut. Hesaplamayı, orijinal bir yapının dönüşüm adımlarının art arda geldiğini ifade etmelerine rağmen, bu dönüşüm bir tür intemporal matematiksel anlam evreninde uygulanır. Bu, matematiksel analizi daha basit hale getirebilecek referans şeffaflığı gibi özellikleri koruyabilir. Ancak, hafızanın düzenine dayanan doğal fiziksel modellerden daha uzaktadır.

Bu nedenle, yazılım gerçekten donanımdan ayrı olmadığından, aşağıda açıklandığı gibi daha büyük bir anlam dışında, doğal fonksiyonel makineler yoktur.

Hesaplanabilirliğin ölçütü olarak Turing'e atıfta bulunmak, muhtemelen modelinin Turing makinesinin bu fiziksel gerçekleştirilebilirlik kısıtına en yakın olması ve onu daha sezgisel bir hesaplama modeli yapmasından kaynaklanıyor.

Diğer hususlar :

Bir hesaplama kavramını mümkün olan en genel şekilde yakalamak için tasarlanmış birçok hesaplama modeli vardır. Turing makineleri, aslında birçok farklı tada sahipler, lamda matematiği (tadalar), yarı-Thue yeniden yazma sistemleri, kısmi özyinelemeli işlev, birleştirme mantığı.

Hepsi matematikçilerin hesaplamaları ifade etmek veya yürütmek için kullandıkları çeşitli tekniklerin bazı yönlerini yakalarlar. Ve çoğu, bir dereceye kadar bazı programlama dili tasarımının (örneğin , yeniden yazma sistemleri için Snobol , birleştiriciler için APL , lambda hesabı için Lisp / Scheme ) temel olarak kullanılmıştır ve modern programlama dillerinde çeşitli şekillerde birleştirilebilir.

Bunun önemli bir sonucu, tüm bu hesaplama modellerinin eşdeğer olduğu kanıtlanmıştır; bu, fiziksel olarak gerçekleştirilebilecek bir hesaplama modelinin, bu modellerin hiçbirinden daha fazlasını yapamayacağı olan Kilise-Turing tezine yol açmıştır. Bir hesaplama modelinin, bu modellerden birine eşdeğer olduğu kanıtlanırsa tamamlandığı söylenir , bu nedenle hepsine eşdeğerdir.

İsim farklı olabilirdi. Turing makinesinin (TM) referans olarak seçilmesi muhtemelen bu modellerin en basit olması, bir insanın hesaplama şeklini (basitçe olsa da) sınırlı bir şekilde taklit etmenin (sınırlı bir sonlu formda) oldukça kolay olmasından kaynaklanmaktadır. ) fiziksel bir cihaz olarak, Turing makinelerinin Lego setleri ile yapıldığı ölçüde . Temel fikir matematiksel karmaşıklık gerektirmez. Muhtemelen bu referans pozisyonunu veren modelin sadeliği ve gerçekleştirilebilirliğidir.

Alan Turing, bilgisayar cihazını yarattığı sırada, matematiğin temelleri için çok önemli bir mesele olan hesaplanabilirliğin resmi tanımı olarak hizmet etmek için diğer teklifler masadaydı (bkz. Entscheidungsproblem ). Turing önerisi, zaman uzmanları tarafından, hesaplanabilirliğin ne olduğu konusunda bilinen çalışmaları en ikna edici bir şekilde içeren kişi olarak kabul edildi (bakınız Hesaplanabilirlik ve Özyinleme, RI Soare, 1996, bkz. Bölüm 3.2). Çeşitli tekliflerin eşdeğer olduğu kanıtlandı, ancak Turing'in daha inandırıcı olduğu ortaya çıktı. [Yuval Filmus'un yorumlarından]

Donanım açısından bakıldığında, bilgisayarlarımızın Turing makineleri değil, aynı zamanda Turing olarak da adlandırılan Rasgele Erişim Makineleri (RAM) olarak adlandırıldığı belirtilmelidir.

Tamamen zorunlu olan dil (bu ne demekse), muhtemelen Turing makineleri veya bilgisayarların derleme kodunu atlayarak) gibi en temel modeller için kullanılan formalizmlerdir. Her ikisi de ünlü bir şekilde okunamıyor ve önemli programlar yazmak çok zor. Aslında, montaj dili bile, makinenin talimatlarının doğrudan kullanılmasına kıyasla, programlamayı biraz kolaylaştırmak için bazı üst düzey özelliklere sahiptir. Temel zorunluluk modelleri fiziksel dünyalara kapalı, ancak çok kullanışlı değil.

Bu, alt program ve işlev çağrıları, bellek konumunun isimlendirilmesi, adların kapsamı, nicelik belirleme ve kukla değişkenler gibi çeşitli hesaplama tekniklerini karıştırmaya başlayan daha yüksek seviyeli hesaplama modellerinin geliştirilmesine hızla yol açtı. matematikte ve mantıkta ve hatta yansıma gibi çok soyut kavramlar ( Lisp 1958).

Programlama dillerinin zorunlu, işlevsel, mantık, nesne yönelimli gibi programlama paradigmasına göre sınıflandırılması, bu tekniklerin bazılarının dilin tasarımındaki önceliklerinin ve programların bazı özelliklerini zorlayan bazı hesaplama özelliklerinin varlığının veya yokluğunun temeline dayanır. veya dilde yazılmış program parçaları.

Bazı modeller fiziksel makineler için uygundur. Bazıları, algoritmaların yüksek seviyeli açıklaması için daha uygundur, bu tanımlanacak algoritma türüne bağlı olabilir. Bazı teorisyenler bile algoritmaların deterministik olmayan özelliklerini kullanır ve hatta daha geleneksel programlama terimleriyle çevrilebilir. Ancak uyumsuzluk problemi yoktur, çünkü her bir modeli ihtiyaç duyulan bir diğerine dönüştürebilen karmaşık bir derleyici / tercüman teknolojisi geliştirdik (aynı zamanda Kilise-Turing tezinin de temeli).

Şimdi, bilgisayarınıza asla ham donanım olarak bakmamalısınız. Çok temel işlem yapan boolean devre içerir. Ancak bunların çoğu, asla tanımadığınız bilgisayarın içindeki mikro programlar tarafından yönlendirilir. Ardından, makinenizi donanımın yaptığından bile farklı kılan işletim sistemine sahip olursunuz. Bunun üzerine, bayt kodu yürüten sanal bir makineye, sonra da Pyva ve Jathon veya Haskell gibi üst düzey bir dile sahip olabilirsiniz. veya OCaml, bayt koduyla derlenebilir.

Her seviyede farklı bir hesaplama modelini görüyorsunuz. Donanım seviyesini yazılım seviyesinden ayırmak çok zor, bu yüzden bir makineye belirli bir hesaplama modeli atamak çok zor. Hepsi birbiriyle çevrilebilir olduklarından, nihai bir donanım hesaplama modeli fikri hemen hemen bir yanılsamadır.

Lambda matematiği makinesi var: lambda matematiği ifadelerini azaltabilen bir bilgisayar. Kolayca yapılan reklam.

Özel makine mimarileri hakkında

Aslında, Peter Taylor'ın cevabını tamamlayan ve donanım / yazılım iç içe geçmişliğini takip eden özel makineler belirli bir paradigmaya daha iyi adapte olacak şekilde üretildi ve temel yazılımlarını bu paradigmaya dayalı bir programlama dilinde yazdı.

Bunlar arasında

Temel olarak, bunlar aynı zamanda zorunlu donanım yapılarıdır, ancak amaçlanan paradigmaya daha iyi uyum sağlamak için özel donanım özellikleri veya mikro programlanmış tercümanlar ile hafifletilir.

Aslında, belirli paradigmalar için uzmanlaşmış donanım uzun vadede hiç başarılı görünmüyor. Bunun nedeni, vanilya donanımında herhangi bir paradigmayı uygulamak için derleme teknolojisinin gittikçe daha etkili hale gelmesiydi, böylece özel donanıma çok ihtiyaç duyulmadı. Ek olarak, harware performansı hızlı bir şekilde iyileşiyordu, ancak iyileştirme maliyeti (temel yazılımın evrimi dahil) vanilya donanımında uzmanlaşmış donanımdan daha kolay bir şekilde itfa edildi. Özel donanım uzun vadede rekabet edemedi.

Yine de, bu konuda kesin bir veriye sahip olmasam da, bu girişimlerin makinelerin, hatıraların ve komut dizileri mimarisinin gelişimini etkileyen bazı fikirler bıraktığından şüpheleniyorum.


Turing makinesinin seçimi, gerçekte yapıldığı ana kadar, çoğunlukla tarihsel olarak motive edilir: Turing, tatmin edici bir hesaplanabilirlik tanımına sahip olan ilk kişi oldu.
Yuval Filmus,

@YuvalFilmus Neden daha çok "hesaplanabilirliğin tatmin edici bir tanımı" ndı?
babou

Gödel'in düşündüğü buydu. Bob Soare'nin burada konu hakkında söyleyecek birkaç sözü var: cs.uchicago.edu/~soare/Publications/compute.ps .
Yuval Filmus,

@YuvalFilmus Bu 46 sayfa. Yani neden daha tatmin edici olması gerektiğine dair bazı sebepler veriyorum. Saf olabilirler. Başarıyı açıklayan daha zorlayıcı biri varsa, açıkça bahsetmek gerekir.
babou

Bölüm 3.2'ye bakınız. Daha önce hesaplanabilirlik tanımları vardı ancak ikna edici değildi. Turing's, en azından bazı kilit kişiler için ikna edici olan ilk kişiydi.
Yuval Filmus,

21

Turing-complete sadece bir isimdir. İsterseniz Abdul-complete diyebilirsiniz. İsimler tarihsel olarak kararlaştırılır ve sıklıkla "yanlış" insanlardan sonra adlandırılır. Belirsiz kriterleri olmayan sosyolojik bir süreç. İsmin resmi anlambiliminin ötesinde bir anlamı yoktur.

Zorunlu diller Turing makinelerine dayanmamaktadır. RAM makinelerine dayanırlar. Bilgisayarınız bir RAM makinesidir. Turing makineleri güzel bir teorik modeldir, ancak gerçek bilgisayarların çok iyi bir modeli değildir.

Alttaki CPU yerel olarak desteklemese de, diğer paradigmalara dayanarak programlama dilleri çok başarılı olabilir; örneğin, yazıcılar bir yığın dili çalıştırır. Makine kodundan daha fazla programlama var.


"Turing makineleri güzel bir teorik modeldir, ancak gerçek bilgisayarların çok iyi bir modeli değildir." Sonsuz hafıza eksikliği dışında, gerçek bilgisayarlar için iyi bir model olmasının başka nedenleri nelerdir? Ayrıca işlevsel dillerin lambda matematiğine dayandığını düşünmedim mi?
Abdül

5
λ

11
Zorunlu diller dizi erişimini sabit zamanda C cinsinden sağlar A[x]. Turing makineleri bunu sürekli olarak yapamaz. Teorik bilgisayar bilimlerinde bile, algoritmaların çalışma süresi, Turing makine modelinden ziyade RAM makine modelinde analiz edilir.
Yuval Filmus,

14
Aslında Turing Makineleri olan gerçek bilgisayarların iyi ... Turing gazetesini yazdığında, "bilgisayar" kalem ve kağıt ile çalışan bir insan için bir iş tanımı olduğunu hariç. Okuma / yazma kafası bir kalem modelidir, şerit sonsuz sayıda kağıt destesinin bir modelidir (sadece küçük şeritler halinde kesin ve bunları yapıştırın), alfabe bizim için bir alfabe modelidir. ve sonlu geçişler, birinin kafasında tutabileceği sınırlı kuralların bir modelidir.
Jörg W Mittag

3
Bu turing makinesinin neden Turing makinesini seçtiğine dair sahip olduğum en iyi fikirdi. Her zaman merak ettim "neden böyle berbat bir hesaplama modeli seçti". Her zaman düşündüm, hesaplama teorisini icat etmek bana bırakılmış olsaydı (Tanrı yardımcımız bize; çok uzak olmazdık) muhtemelen daha iyi bir hesaplama modeli seçerdim. Şimdi nereden geldiğini anladım ve bu çok daha mantıklı geliyor.
Jake,

10

Çünkü "Turing-complete" sadece "bir Turing makinesinin hesaplayabileceği her şeyi hesaplayabilir" anlamına gelir.


Turing-complete ayrıca, felsefi olarak tatmin edici ilk hesaplanabilirlik tanımına sahip olan Turing'in (kişinin) onuruna da adlandırılabilir; ya da Turing'in bu kavramı tanımladığı makalesinin onuruna adlandırılabilir.
Yuval Filmus,

1
@YuvalFilmus: o olabilir Alan Turing'in anne adını, ama burada iddia o ;-) olmadığıdır olmak
Steve Jessop

@ YuvalFilmus Olabilir (bildiğim kadarıyla olmasa da). Fakat terimin nereden geldiği ise sadece ikincil öneme sahip. Burada önemli olan, terimin ne anlama geldiğidir .
David Richerby

2
Bu kısa ve tatlı, ama belki biraz fazla kısa. Bir Turing makinesi ne işe yarar? "Yaptıkları" şeylerin arasında, lambda ifadelerinin yapmadığı bantları okumak ve yazmaktır; Better, "Turing-complete hesaplama modelleri, tüm hesaplanabilir fonksiyonların hesaplanmasına izin verir" olacaktır.
Theodore Norvell

@TheodoreNorvell Yorumunuzun düşündüğüm ile aynı olduğunu düşünüyorum. Lambda hesabının ve Turing makinesinin iktidara eşdeğer olduğunu, ancak mekanizma bakımından farklı olduklarını biliyordum (ve şimdi başkaları da olduğunu öğrendim); Sadece bir isim olsaydı.
Abdül

6

Sorularınızdan biri henüz yanıtlanmamış gibi görünüyor:

Bu durumda, bir lambda hesap makinesinin eşdeğeri ne olurdu?

Bir Lisp makinesi . Özellikle LISP hesaplama modeline uyacak şekilde tasarlanmış donanım. Wikipedia makalesi ticari ürünlerden bahsediyor, ancak üniversitedeki çalışma direktörüm ofisinde el yapımı bir ürün vardı.


0

Kilise tarafından icat edilen lambda matematiği şeklinde fonksiyonel dillerin Turing'in eksiksiz olduğu kanıtlanmıştır . bu, lambda matematiğini Turing makinelerinde yapılan işlemlere / hesaplamalara “düşürerek” yayımlanmış bilimsel makalelerde bulunabilecek gerçek bir matematiksel kanıttır. Turings bildirisinin 1936 ve sonrasında, farklı "kapsamlı" hesaplama modelleri önerildi / dağıtıldı. o oldu hemen fark değil tüm eşdeğer olduğunu söyledi. Eşdeğer oldukları ispatları kabaca 1930'ların sonlarında ve 1940'larda Turings gazetesinden sonra yayınlandı.

Turing makinesi kavramsal olarak (ancak işlevsel olarak değil) diğer modellerden daha basittir ve bu, Turing bütünlüğünün kendisinden sonra isimlendirilmesinin önemli bir parçasıdır. lambda matematiği gibi diğer fikirler daha soyuttır ve temel olarak matematik / mantık teorisinde ortaya çıkmıştır. Turing teorik bir makine önerdi . bir "makine" kelimenin tam anlamıyla "fiziksel bir cihazdır". Uygulamalı ve teorik olan iki farklı dünyayı birbirine bağlayan / birleştiren dikkate değer bir kavramsal nesne / yapı. “zaman ve mekan” gibi fiziksel varlıklara yeni soyut anlamlar kazandırır. matematikçilerin bazen “teknoloji”, “makineler” veya ispatların “cihazları” olarak adlandırmaları sadece bir tesadüf değildir. Turing, bütün bunları kavramsal buluşunda ustaca bir şekilde birleştirmeyi başardı. onun tanımı oldukça basit ama bunun analizi en olağanüstü bazılarını sergileyen acil davranışı hiç bilimsel / matematiksel düşünce tarihinde görülen. Turing, bu önem / güç / potansiyelin çoğunu kavrayan ilk bilim insanı / matematikçi idi.


Başka bir deyişle, Turing'in Turing bütünlüğü fenomeninin önemini tanımlayan / "tanıyan" ilk sırada olduğu ve buna karşılık CS'nin bu anıtsal başarı için onu terim kullanımı yoluyla tanıdığı söylenebilir.
vzn

X
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.