Zorunlu programlamanın teorik temeli nedir?


48

Fonksiyonel programlama, lambda matematiği ve birleştirme mantığında teorik bir temele sahiptir . İstatistiksel hesaplama yapan biri olarak, bu kavramları modelleme için çok faydalı buluyorum.

Zorunlu programlamanın eşdeğer bir matematiksel temeli var mı , yoksa sadece makine dilinde ve ardından FORTRAN'ın geliştirilmesinde pratik donanım uygulamasından çıktı mı?

Yanıtlar:


27

Genel olarak, matematik bazı X'leri incelemek için kullanıldığında , önce bir X modeline ihtiyaç duyulur ve sonra bir teori geliştirir, o modelle ilgili bir dizi sonuç çıkar. Sanırım bu teori X için "teorik bir temel" olarak söylenebilir . Şimdi X = hesaplama yapınız. Pek çok “devlet” içeren birçok hesaplama modeli vardır . Her modelin kendi "teorisi" vardır ve bazen modeller arasında "çeviri" yapmak mümkündür. Hangi modelin daha "temel" olduğunu söylemek zor olduğuna inanıyorum --- onlar sadece farklı hedefler göz önünde bulundurularak tasarlandı.

Turing makineleri neyin hesaplanabilir olduğunu tanımlamak için tasarlanmıştır . Bu nedenle, belirli bir problem için bir algoritma olup olmadığını umursanız iyi bir model oluştururlar. Bu model bazen algoritmaların etkinliğini veya problemlerin sertliğini araştırmak için kötüye kullanılır , en azından sadece polinomlu / polinom olmayanları önemsiyorsanız, yeterince iyi olduğu bahanesiyle. RAM modeli gerçek bir bilgisayara daha yakındır ve bu nedenle bir algoritmanın kesin bir analizini istiyorsanız daha iyidir. Sorunların sertliğine daha düşük sınırlar koymak, bunu yapmamak daha iyidir.Bugünün bilgisayarlarına çok benzeyen bir model kullanın, çünkü geniş bir yelpazedeki olası bilgisayarları kapsayacak ve sadece polinom / polinom olmayanlardan daha hassastırsınız. Bu bağlamda, örneğin kullanılan hücre probu modelini gördüm.

Doğrulukla ilgileniyorsanız , yine de diğer modeller kullanışlıdır. Burada operasyonel anlambilim (durumsal hesaplamalar için lambda matematiğinin analogu olduğunu söyleyebilirim), aksiyomatik anlambilim (1969'da Floyd’un 1967’de Floyd’un Bilgisayar Programcılığı Sanatı’nın popülerliğini yapan 1967’deki endüktif iddialarına dayanarak geliştirilen , cilt 1) ve diğerleri.

Özetlemek gerekirse, ben düşünüyorum sen hesaplama modelleri peşinde. Zihinlerde çeşitli amaçlarla geliştirilen ve çoğu devletin olduğu bu tür modeller var, bu yüzden zorunlu programlamaya karşılık geliyorlar. Bir şeyin hesaplanıp hesaplanamayacağını bilmek istiyorsanız, Turing makinelerine bakın. Verimliliği önemsiyorsanız RAM modellerine bakın. Doğrulukla ilgileniyorsanız, operasyonel anlambilim gibi "anlambilim" ile biten modellere bakın.

Sonunda, çevrimiçi olarak yalnızca John Savage tarafından Hesaplanan Modeller hakkında büyük bir kitap olduğunu söyleyeyim. Çoğunlukla verimlilik ile ilgilidir. Doğruluk kısmı için Floyd (1967) , Hoare (1969) , Dijkstra (1975) ve Plotkin (1981) ' in klasik makaleleriyle başlamanızı tavsiye ederim . Hepsi çok iyi.


4
Operasyonel Anlambilimin gerçekten de posterin aradığı şey olduğunu düşünüyorum. Wikipedia hakkında biraz daha bilgi: en.wikipedia.org/wiki/Operational_semantics
sclv 23:10

22

Zorunlu bir programın en basit teorik modeli, turing makinesinin kendisidir. Zorunlu bir programın temel bileşenlerine sahiptir: sınırsız değiştirilebilir durum ve üzerinde çalışan bir durum makinesi.

Ayrıca, Haskell programlama dilinde olduğu gibi, programları küresel durumun değiştirilmiş versiyonlarını geçen ve geri gönderen monadik işlemlerin kompozisyonları olarak kabul ederek, zorunlu programlamayı fonksiyonel programlamaya da dahil edebilirsiniz.


2
Emir benzeri yapılar kurgulamak için tamamen işlevsel bir dilde (Haskell gibi) monad kullanmak zorunluluk programlamasının tüm gücünü size vermez. Özellikle, gerçekten değişken bir durum olmadan (örneğin, referansları olan birçok dilde olduğu gibi), tamamen işlevsel bir dilde etkin uygulaması bilinmeyen birçok veri yapısı vardır.
Joshua Grochow

@Joshua: Neden devlet monadlarının referansların anlamlarını ifade etmediğini düşünüyorsunuz? İtirazın ne olabileceğini anlamak için kayboldum.
Charles Stewart

Bir durum monad'ı, tümü ek bir argüman (durum) kabul eden ve ek bir çıktı (bir sonraki durum) çıkaran bir işlevler koleksiyonuna sahip olması için temel olarak sözdizimsel bir şekerdir. Ancak, tamamen işlevsel bir dilde, bir sonraki durumu elde etmek için devleti gerçekten değiştiremezsiniz, yine de kopyalamanız ve yeniden yapılandırmanız gerekir. Tamamen işlevsel bir dilde verimli bir şekilde uygulanamadıkları biliniyorsa belirli veri yapıları olup olmadığını bilmiyorum , ancak kesinlikle kesin kanıtlar var (örneğin Pippenger. Pure ve impure Lisp. 1997).
Joshua Grocho

6
Biri, mutasyonların semantiğini, monadlarla mükemmel bir şekilde yakalayabilir - örneğin Haskell'deki ST monadını görün. Burada anlambilimden bahsediyoruz, uygulamadan değil.
44'te sclv

20

Kısacası, zorunlu programlamanın makine dili ve programlama pratiğinden geliştiğini söyleyebilirim. Öte yandan, monad'ler , zorunlu programlama dili özelliklerinin anlamını tanımlamak için uygun bir anlamsal çerçeve sağlar. Moggi tarafından hesaplanan hesaplama ve monadlar makalesi resmi temelleri oluşturmuştur. Phil Wadler fikri popüler hale getirdi ve zorunlu özellikleri programlama dili Haskell'e dahil etmenin kilit yoluydu. Plotkin'in Son Çalışmaları ve Hesaplamanın Güç Kavramları Monad'ları Belirliyor (zorunlu) hesaplama nosyonlarının bazılarının hepsini, ancak hepsinin değil, gerçekte bir monad verdiğini belirten diğer yoldan gider, yani çok temel bir şekilde monadların zorunlu (ve diğer) hesaplama nosyonlarına tekabül ettiği anlamına gelir.


8
Monad'ler, tamamen işlevsel bir dünyada zorunlu programlamayı iptal etmek için kullanılabilir, ancak lambda matematiği ve birçok işlevsel dil arasındaki ilişkiye benzeyen zorunlu programlama için teorik bir temel oluşturduklarını iddia etme durumunu göremiyorum. Monad'lar, hesaplamayı hesaplama sınıfları üzerinde bir soyutlama oluşturacakları kadar modellemezler (örneğin, IO'yu içeren saf hesaplama veya hesaplama veya belirli bir değişebilir durum demetine dayanan hesaplama).
blucz

1
Monadlar, etkili diller için daha net bir tercüman anlambilim yazmanın bir yoludur, öyleyse neden olmasın?
nponeccop

15

Bir zorunlu programlama dilinin titiz bir matematiksel muamelesini arıyorsanız, Winskel'in "Programlama Dillerinin Biçimsel Anlam" (1993) adlı kitabı buna bir örnektir.

Kitapta IMP adında bir zorunlu programlama dili tanımlar ve bunun operasyonel, fahişe ve aksiyomatik anlamını sağlar.


14

Bu soruya geç geliyorum, ama bu büyüleyici bir soru. İşte benim görüşlerim.

Ben bir lisans öğrencisiyken, bize matematiğin tarihi ve gelişimi hakkında ders veren büyük bir matematik profesörümüz vardı. Ona göre, matematik “genişleme” ve “konsolidasyon” dalgalarında gelişmiştir. Bir genişleme aşamasında, daha önce bilinmeyen yeni fikirler düşünülmüş ve araştırılmıştır. Ardından, bir konsolidasyon aşamasında, yeni teoriler mevcut bilgi birikimine dahil edildi. Ancak, 20. yüzyılda, genişleme ve konsolidasyon paralel olarak devam ediyor dedi.

Zorunlu programlama şu anda matematik için bir genişleme etkinliğidir. Daha önce "bilinmiyor" idi. (Bu tamamen doğru olmayabilir. Hoare bize, Euclid'in Geometrisinde zorunlu programlama gibi bir şey yaptığını söyler . Ancak matematik, daha iyisi veya daha kötüsü için ilgisini kaybetti.) Matematikçiler hala zorunlu programlama ile ilgilenmiyor. Onlar için çok fazla kayıp. Fakat ben Bilgisayar Bilimi'ni soyut anlamda bir matematik dalı olarak görüyorum. Onu inceliyoruz, süreçteki matematiği genişletiyoruz.

Bu yüzden, özellikle zorunlu programlama için priori teorik bir temel olup olmadığını umursamıyorum . Eğer bir tane yoksa, bırakıp bulalım. Bildiklerimiz zaten bize zorunlu programlamanın fevkalade derin ve güzel olduğunu söylüyor. Fonksiyonel programlama paletleri karşılaştırıldığında. Ancak, tüm bu teoriyi insanlara ortaya çıkarmak için yapacak çok işimiz var.


Msgstr "İşlevsel programlama, kıyaslandığında paletler". Şimdi siz ve Bob Harper’ı bir savaş alanına sokabilseydim. Büyük bir emir bloğunu sallardın ve o sana yakınlaşmaya çalışırdı. (PS: çok iyi bir cevap, onu yendim.)
Andrej Bauer

Bir çeşit benden kaçıyor. Bunun bir anlamı var mı bilmiyorum :-)
Uday Reddy

11

Fonksiyonel programlamanın matematikte açık bir temeli vardır, çünkü işlevsel programlama dilleri, ilgili matematikle paralel olarak gelişti ve tasarımcıları genellikle matematiği yüksek tuttu. Güçlü ve anlaşılır bir ilişki, kendi kendine yeten bir kehanettir.

Zorunlu programlama, iş ve mühendislik problemlerine daha yakından bağlı olan ve tarihsel olarak, derleyicilerin performansıyla ve ürettikleri kodla matematiksel formalitelere saygı duymaktan çok daha fazla endişe duyuyordu.

Birçok kişi, zorunlu programlamayı (geleneksel olarak) fonksiyonel terimlerle açıklamaya çalışmıştır. Bu, aradığın şeye en yakın olan olabilir, ancak bu girişimler her zaman garip, sıkıcı ve adlidir. CLR için bir ilerleme / koruma kanıtı okumak yerine gözlerimi yüzümden ayırmayı tercih ederim.

Genellikle, iyi bir pl ders kitabı (örneğin, Pierce'in Türleri ve Programlama Dilleri) sonuna gelirseniz, zorunlu dil özelliklerinin resmi modelini görmeye başlarsınız. Bu senin için ilginç olabilir.


11

An Axiomatic Basis for Computer Programming CAR HOARE tarafından

Bu yazıda, bilgisayar programlamanın mantıksal temellerini ilk önce geometri çalışmasında uygulanan ve daha sonra diğer matematik dallarına genişleten teknikler kullanarak araştırmak için bir girişimde bulunulmuştur. Bu, bilgisayar programlarının özelliklerinin ispatlarında kullanılabilecek aksiyom kümelerinin ve çıkarım kurallarının açıklanmasını içerir. Bu tür aksiyom ve kurallardan örnekler verilmiştir ve basit bir teoremin resmi bir kanıtı görüntülenir. Son olarak, hem teorik hem de pratik açıdan önemli avantajların bu konuların peşinden gelebileceği tartışılmaktadır.

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.85.8553&rep=rep1&type=pdf


8

Ben Alexandre ne dedi, Turing makinesi zorunlu programlama için orijinal teorik temeli sağladı. Zorunlu programlama dillerinin organizasyonunun makine mimarisini yansıttığı ölçüde, John Von Neumann'ın çalışmalarının teorik temellerinin de önemli bir parçası olacağını düşünüyorum .


7

Zorunlu programlamanın eşdeğer bir matematiksel temeli var mı, yoksa sadece makine dilinde ve ardından FORTRAN'ın geliştirilmesinde pratik donanım uygulamasından çıktı mı?

Tarihsel anlamda "temel" demek istiyorsan, "eşdeğer matematiksel temel" olmadığını düşünüyorum. Bununla birlikte, zorunlu programlama pratik kaygılardan çıksa da, zorunlu programlama anlamını, Hoare mantığı gibi "modelleme için yararlı" bulabileceğiniz şekilde kapsamlı bir şekilde karakterize etmenin birkaç yolu vardır .


bu topluluğu wiki yapmak için gerçekten mi demek istediniz?
Suresh Venkat

Evet, topluluk wiki yapmak istemiştim.
jbapple

7

hoare mantığı ve ayırma mantığından bahseden yazılar bu konuda doğru olanlardır. Hoare mantığı, bir programın tüm yığın yapılandırmasının özelliklerini belirtmenize izin verir ve ayırma mantığı, hangi özelliklerin hangi özelliklere sahip olduğunu kod koduna önceden belirtip yayınlamanızı sağlayan bir "ayırma birleşimi" kullanmanızı sağlayan daha modern bir akrabadır. yığının kalan kısmının miktarını belirlerken programın işleyeceği yığının parçası.

Monad'larla ilgili cevap kesin olarak kesin değildir, çünkü haskell'de bir monad, yalnızca değerlendirme kısıtlama sırasının kodlanmasını ve "IO kullanabilir" özelliğinin açık bir şekilde izlenmesini sağlayan bir soyutlama olduğu için kullanılır.

Hem vurgun / ayırma mantığının monadlar olarak görülebildiğini hem de harvard'da bu konuları araştıran ynot projesi gibi bir takım çağdaş projeler olduğunu belirtmekte fayda var .

ayırma mantığındaki araştırmalar devam eden ve aktif bir alandır.


Bana göre Haskell'in, kategorik bir anlambilim hesabını yapılandırmak için monadları kullanan, örneğin Moggi'nin öne sürdüğü daha genel bir yaklaşımla bir monad (ve bir Monad tipi sınıf) nosyonunu kullandığı gerçeğini karıştırmak bir hata gibi görünüyor. Monadların programlamayı yapılandırmak için bir araç olarak benimsenmesi bizi kategorik anlambilimin programlama mantığını yapılandırmanın bir aracı olarak kullanmamıza engel olmamalıdır .
sclv

Çok iyi bir açıklama, her ne kadar çok sayıda insanın monad'ları monad transformatörleri aracılığıyla anlambilimi araştırmak için laadkell kullandıklarına inanıyorum. Özellikle, söz konusu transformatörlerin farklı bileşimlerinden kaynaklanan işlemler için farklı anlamlar (örneğin, durum / değişkenlik, süreklilik, dinamizmcilik vb.)
Carter Tazio Schonwald

5

Daha sonra bile bu soruya geliyorum, ama aynı şekilde ona hayran kaldım.

Zorunlu programlama teorisinin neden işlevsel programlamanınkinden daha az yerleşik olduğu düşünülüyor? Muhtemelen 1969'da Scott ve de Bakker'le basit bir zorunluluk dilinde özyinelemenin anlamını analiz etmeleriyle ciddileşmeye başladı [1]. Zorunlu dilin özellikleri kazandığı zaman, hikaye biraz daha karışık hale gelir ancak bu metale daha yakın olmak için ödediğiniz bedeldir. Daha kapsamlı çabalardan birini isimlendirmek için 1980'de de Bakker, de Bruin ve Zucker konuyla ilgili bir monografi yazdı. Diğerlerinden yukarıda bahsedilmiştir. Elbette ki bu tarih öncesi ayrılma mantığının referansları [2] yine de dizileri ve karşılıklı özyinelemeli prosedürleri ele alıyor.

[1]: 1969’da yayınlanmamış, ancak Jaco W. de Bakker ve Dana S. Scott olarak göründüler. Programlar Teorisi , sayfa 1-30. Klop ve diğ. JW de Bakker, 25 yaş semantiek. CWI, Amsterdam, 1989. Liber Amoricum.

[2]: Jacobus W. de Bakker, Arie de Bruin, Jeffrey Zucker: Matematiksel program doğruluğu teorisi. Prentice Salonu 1980.


1
Açıkça, zorunlu programlama son derece iyi anlaşılmıştır. İnsanların daha az yerleşmiş olduklarını söylediklerinde yapısal olarak, zorunlu programlamanın saf işlevsel programlamaya göre daha zengin olduğunu ve bu ya da zorunlu programlama biçiminde ortaya çıkan çok daha az matematiksel bir yapı bulunduğunu düşünüyorum. Örneğin, bazı zorunlu emir programları, ayırma mantığını iyi kullanmaktan kaynaklanabilir. Bu muhtemelen paylaşım biçimleriyle ilgilidir. Belki bu tür programların güzel, soyut bir matematiksel karakteristiği vardır?
Martin Berger

1
Şahsen, zorunlu dillerdeki modülerlik teorisinin çok net olmadığını kastediyorum. Modülerliğin işlevsel diller için ne anlama geldiğini biliyoruz: ilişkisel parametriklik. Zorunlu diller için, (a) açıkça işe yarayan ancak (b) iyi kanıtlama tekniklerinden yoksun olduğumuz birçok bilgi gizleyen deyim vardır. Burada derin bir teori olduğuna dair telaş verici ipuçları var: örneğin, sıralı zorunlu programların modüler kanıtlarını yaptığımda, eşzamanlılıktan gelen tekniklere ihtiyaç duyuyorum. Gayrı resmi olarak, takma eşzamanlılık eşzamanlılık gibidir, ancak bu fikrin nasıl resmileştirileceğini gerçekten bilmiyorum ...
Neel Krishnaswami

@Kai. Konuya hoş geldiniz! De Bakker'in çalışmasına baktığımdan bu yana uzun zaman geçti, ama bence temel sorun yaklaşımın ölçeklenmemesi. O zamandan beri zorunlu programlamadaki ilerlemenin kısa bir özeti için "Sözde anlambilginin anlamı nedir?" iplik bağlantısı .
Uday Reddy

@NeelKrishnaswami. Bu kanıtları görmeyi çok isterim. Web sayfanızda mı? Takma ad, eşzamanlılık gibidir, çünkü hem sofistike paylaşmayı hem de birleştirmeyi içerir. Eşzamanlılıkta serpiştirmeyi soyutlarsınız ve belirsizliğin (iyi olan) varsayılırsınız. Aliasing, kendinizi araya sokma ile başa çıkmak için zorlar. Oyun anlambilimi bu zorla harmanlamanın mükemmel bir örneği, bundan hoşlanmamamın nedeni de bu.
Uday Reddy

3

Sorunuzu sorduktan kısa bir süre sonra, McMaster Üniversitesi'nden Mark Bender bir tez yayınladı: Ödev Calculus: Saf bir Zihinsel Muhakeme Dili (2010 Eylül 8). Bu tez, lambda hesabına karşılık gelen basit, zorunlu bir dili açıklar.

Atama hesabı, yalnızca dört temel yapı, atama X:=t, sıralama t;u, prosedür oluşturma ¡tve prosedür başlatmadan oluşur !t. AC için üç yorum yapılır: işlemsel bir anlambilim, bir terimbilimsel anlambilim ve bir terim-yeniden yazma sistemi. Üç eşdeğer olduğu gösterilmiştir.

Mark Bender'ın tezi tembel değerlendirme, geri izleme, prosedür kompozisyonu ile genişletilmiş değişkenleri keşfetmeye devam ediyor. Bu küçük uzatmaların kullanılmasıyla lambda matematiğinin keşfedilmesine benzer.

Genel olarak, tez OP sorusuna nispeten doğrudan bir cevap sunmaktadır.


pdf bağlantısı koptu
Quinn Wilson
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.