Bilgisayar Programlarını teknik özelliklerinden yazan bir Sistem Aslında Yapılmış mı?


17

Hiç kimse bilgisayar programları üreten bir sistem (yazılım veya basit örnekler ile kağıt üzerinde ayrıntılı bir açıklama) yazdı mı? girdim ve küçük asal sayıları listeleyen bir program oluşturur. basitçe Profesörler yapabileceklerini söylüyor ancak kimse gerçek tam örnekler vermiyor.Prime(x)x<10Prime(x)

1<xAs.t.1<AA<xx=A×B, with A,BN

13
Genel amaçlı bir programlama dili için bir derleyici mi demek istediniz?
Sasho Nikolov

1
Merhaba - cstheory'ye hoş geldiniz! Maalesef sorunuz teorik bilgisayar biliminde araştırma düzeyinde bir soru değildir ve bu sitede konu dışıdır.

Aslında, bu, mevcut araştırmanın tepesinde ve çok umut verici olan iyi bir soru. Bununla birlikte, tam olarak ne istediğinizi belirtmek genellikle çok zordur. Bunu belirtmeyi başarırsanız, bunun mantıklı olduğunu, uygulanabilir olduğunu ve matematiksel bir kanıt gerektirecek bir sisteme ihtiyacınız vardır. Bu kanıttan bunu yapan bir program çıkartılabilir. Ancak, kanıtın ve program çıkarmanın otomatikleştirilmesi için araştırmalar, henüz iyi bir ilerleme kaydetmesine rağmen. Sen örneğin görünebilir Coq - cc @LevReyzin - wikipedia.- üzerinde
Babou

2
İşte sorunuza karşılık gelen bir kitap . Başkaları da var. Öyle değil anlamak için basit. Coq ve Isabelle (böyle bir başka sistem) kalabalığı, soru kapatılmazsa size daha fazla bilgi ve örnek verebilecek SE kullanıcılarını içerir. Web'de arama yaparak buldum: coq örnek program sentezi.
babou

2
Sorduğum şeyi yakalayan bilgisayar bilimi alanına program sentezi denir ve aktif bir araştırma alanıdır.
Huck Bennett

Yanıtlar:


11

Bu çok aktif bir araştırma konusudur, çok umut vericidir, ancak program üretiminin tam otomasyonu muhtemelen içsel sınırlamalara sahiptir (ancak insanlar daha iyi mi?). Ancak fikir, birçok adımı mekanize ederek ve program üretiminin doğruluğunu otomatik olarak kontrol ederek programların oluşturulmasına önemli ölçüde yardımcı olmak için hala çok yararlıdır.

Bu, bilgisayar programlarının ve matematiksel kanıtların çok benzer olduğunu gösteren , Curry-Howard uyumu (veya izomorfizm) adı verilen mantıktaki bir sonuçla güçlü bir şekilde ilişkilidir .

Buradaki fikir, sistemin kanıtlanması gereken bir teorem olarak program spesifikasyonunuzu alacağıdır. Örneğin, bu (gayri resmi) bir şey olacaktır: "10'dan küçük tüm asal sayılar kümesi var".

Daha sonra, bu teoremi kanıtlamaya çalışacaksınız ve mevcut sistemler kanıtı yapmanıza, bazı parçaları, muhtemelen tüm kanıtı otomatikleştirmenize ve asla hata yapmadığınızdan emin olmanıza yardımcı olacaktır.

Bu kanıttan sonra, başlangıçta belirtilen asal sayıların istenen listesini gerçekten hesaplayan bir program çıkarılabilir.

Geçmişte bu fikirleri açıklamak için çeşitli sistemler geliştirilmiştir. Daha iyi bilinenlerden biri, ML dilini bu amaç için yaratan Robin Milner tarafından LCF idi . Şu anda en gelişmiş sistemlerden biri Coq .

Tamamen çalışılmış örnekler var, bazıları oldukça karmaşık. Aşağıdaki makalede bazılarını bulabilirsiniz , ancak hiçbir şekilde basit bir okuma değildir ve ileri düzey Mantık bilgisi gerektirir.


9

Wag cevabı: Evet, ancak yazma sırasında, önemsiz çoğu program için, spesifikasyonlar yazmak ve programlarda hata ayıklamak kadar zor görünmektedir.

Daha ciddisi, babou'nun cevabı iyi, ama aynı zamanda bağımlı türlerin alanını kontrol etmeyi önereceğim. Orada Coq kullanarak oldukça iyi bir kitap (tam yasal uyarı: bir arkadaşım tarafından yazılmış), ancak özdeyişinin, Agda ve İdris de var. Isabelle / HOL de incelemeye değer.

Bunların hepsi inşaat hesaplarına dayanmaktadır. Teorik temeli bilmek istiyorsanız, Martin-Löf tipi teoriye bakınız. Bazı harika tanıtımlar var.


Spesifikasyonlar (ve ayrıca cevabınızın geri kalanı hakkında tamamen katılıyorum, ancak benden daha iyi biliyorsunuz). Herhangi bir gerçek programcı, bir programın ne yapması gerektiğini tam olarak belirtmenin ne kadar zor olduğunu bilir. Yazılım mühendisliğinde önemli bir konudur. Ve bu, burada ele alınan problemlerin genel olarak daha matematiksel olmasına rağmen de tercüme edilir. Bununla birlikte, çok cesaret kırıcı gelmek istemedim (özellikle ilk yorumun gösterdiği bu sorunun tarihi göz önüne alındığında).
babou

4

Burada teğet geçerek, program jeneratörleri (yani, belirli bir dilde bir şeyin üst düzey bir açıklamasını veren sistemler) sonsuza dek var olmuştur. Herhangi bir derleyici, birçok ayrıştırıcı üreticisinden herhangi biri gibi bunlardan biridir. Günümüzde, üst düzey bir açıklama ve mevcut verilerin bir kataloğu verilen tipik bir iş uygulamasının (çoğunlukla) kodunu oluşturan "üçüncü nesil diller" adı verilen sistemler popülerdi.


1

Mantıksal Programlama ve daha genel olarak, Bildirici Programlama tam olarak önerdiğiniz şeyi bir öncül olarak alır: yani, mantıksal bir spesifikasyondan, bu spesifikasyonu yerine getiren bir sonuç döndürün.

Verdiğiniz "10'dan az primer" örneğine özel olarak değinen bir alan , verdiğiniz gibi tamsayı kısıtlamaları da dahil olmak üzere belirli kısıtlamalarla ilgili sorunlara çözüm bulmaya çalışan Kısıt Programlamadır .

Böyle bir sistemin belirli (açık kaynak) bir uygulaması için ECLiPSe'yi denemek isteyebilirsiniz .


Mantık / kısıtlama paradigmasının, cevapları belirtmek, programları belirtmekten daha fazla olduğunu söylemek doğru olur mu? Tabii ki, eksik bir belirtimin bir program olduğunu söyleyebilirsiniz. Ama bir şekilde, program sentezi ile aynı oyun olduğundan emin değilim. Örneğe cevap verdiği doğru olsa da, örnek çok basitti. Kısıt programlamanın sadece basit problemler için olduğunu söylemek istemiyorum.
14'te babou
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.