Analiz ve programlama dili arasındaki fark nedir?


13

Sanırım matematik ve programlama dili olarak adlandırılan şeyler hakkında oldukça kafam karıştı.

Bir analizin, programların denkliği hakkında muhakeme için resmi bir sistem olduğunu düşünmeye eğilimliyim ve söylenmiş olabilirim. Programların, bir makine tarafından belirlenmiş, (bence?) Belirleyici olması gereken işlevsel bir semantiği vardır. Bu şekilde, dili için (doğru) bir hesap , program denkliği için bir kanıt yöntemidir.L

Bu benim için makul bir ayrım gibi görünüyor, ama bu yaygın olarak kabul edilen anlam mı? Ya da belki de yanlış?

İlgili, neden bazı operasyonel anlambilim belirsizdir (birleşik olduğunu varsayalım)? Strateji seçimini açık bırakmaktan ne kazanılır?

Bunlar hakkında bazı açıklamaları gerçekten takdir ediyorum; ve daha somut referanslar! Teşekkürler!


3
Aynı şeye farklı bakış açıları için farklı kelimelerdir.
Raphael

1
@ Raphael, soruya nasıl cevap veriyor? Felsefe yapılacak yer burası değil.
fade2black

4
Bazen her yerde küçük bir felsefe gerekir.
André Souza Lemos

Yanıtlar:


10

Kelimelerin anlamı sabit değildir, ama size yorumumu verebilirim.

Bir hesap o şeydir ile hesaplamak hokkabazlık denklemlerinin anlamında (Taylor serisi veya analizde integrallerin hesaplama manipülasyon düşünüyorum). Analiz bize manipülasyon kurallarının ne olduğunu söyler, ancak belirli bir durumda hangilerini kullanmamız gerektiğini söylemez.

Bir programlama dili bize nasıl hesaplayacağımızı söyleyen bir şeydir . Bize kuralları tam olarak nasıl kullanacağımızı anlatıyor. Bilgisayarın genellikle çok daha hızlı olduğu için kuralları kullanmasına izin veririz. Kurallar deterministik olmayabilir ve deterministik olmamaları için çok iyi nedenler olabilir. Analizin doğası gereği belirleyici değildir (eşzamanlı iletişim süreçlerini düşünün) veya belirli bir stratejiyi düzeltmek uygulama teknikleri ve optimizasyon için zararlı olabilir.

λλ

Buna karşılık, Standart ML bir programlama dilidir. İşlemsel anlambilim, yani hesaplama kuralları olarak verilir. Bunu bir tür analiz olarak düşünmek için kullanabileceğimiz türetilmiş eşitlik kavramları (bağlamsal eşdeğerlik, gözlemsel eşdeğerlik, vb.) Vardır .

Tabii ki, bir matematik ve bir programlama dili olarak tezahürü arasında genellikle yararlı bağlantılar vardır. Konfluent normalizasyon, hesaplamadan programlama diline geçmenin sadece bir yoludur (ne yazık ki bazı insanlar bunu bir tür dine dönüştürmüştür). Matematik ve programlama dilleri arasındaki etkileşim önemlidir: programlama dilleri aslında kullanılabilir, ancak matematik programların ne hakkında olduğunu açıklar .

Sadece insanları rahatsız etmek için, bir hesap ve onun operasyonel tezahürü arasında hiçbir fark olmadığını iddia etmenin, bazen programlama topluluğu içinde programlama ve mini dinlerin çarpık görüşlerine yol açtığını da söyleyeyim. Aklımda olan dili tahmin etmeye çalışabilirsiniz. (Çok güzel bir dil!)


Yani bir programlama dili, onunla uyumlu bir strateji / yeniden yazma sistemi ile donatılmış bir hesap makinesi mi?
xavierm02

ppp=p

π

Sadece program hakkında değil, aynı zamanda çevresi (durum veya geçişler) hakkında da konuşan denklemler sunabilirsiniz. Ama böyle bir şeyin bir hesap olduğunu söylemem. Aksine bu bir cebirsel model.
Andrej Bauer

Çok teşekkürler Andrej, bu bana mantıklı geliyor. Bunun kişiden kişiye değişebileceğinin farkındayım, ama bu cevabı (sanırım) en iyisi olarak kabul ediyorum.
Guido

2

Kalkülüsün amacı sadece program denkliklerini incelemek değil, aynı zamanda programları incelemek. Fantezi hesabı bir örneği, bu (çağrı değer-ile-ya da çağrı isme göre) stratejisi yerel olarak saptanır. Bir gün bir programlama dilinde uygulanabilir, ancak ilk önce bir matematik olarak incelenir. Aynı zamanda tür sistemlerini incelemek için kalkülüs kullanıyorsunuz (Martin-Löf tip teorisinde olduğu gibi bazı hesaplamalar da hesaplama türleri).


Temel fark, programlama dillerinin (nispeten) kullanımı kolayken, kalkülerin resmi olarak (nispeten) kolay öğrenilmesi gerektiğine inanıyorum. Bu aşağıdaki farklılıklara yol açar:

PL'ler artık istediğiniz gibi ifade etmeyi kolaylaştırmak için artıklık (zaten döngü varken döngü için, zaten varsa geçiş, ...) için fazlalık eğilimindedir.

Matematik semantiği tam olarak anlambilimine sahipken, PLs semantiği genellikle varsayılan bir yorumlayıcı / derleyici tarafından tanımlanır.


Bazı işlevsel semantikler deterministik değildir, çünkü şunları sağlar:

  • Tüm "subsemantics" hakkında bir şeyler kanıtlamak.
  • Uygulamanın bir şeyleri seçmesine ve dolayısıyla (belki de) hızlandırmasına izin vermek.
  • Çünkü bazen, bir "radnom ()" operasyonunuz olur ve olasılıkları umursamazsanız, ancak mümkün olanı önemsiyorsanız, determinizm bunu temsil etmenin iyi bir yoludur.

Call-by-value belirleyici olmadığına dikkat edin: Önce işlevi veya bağımsız değişkeni değerlendirmeyi seçebilirsiniz.


Hayır, bunun resmileştirme veya sofistike olma seviyesiyle ilgili olduğunu kabul etmiyorum.
Andrej Bauer

2

"Programlama dili" ve "matematik" polisemik terimlerdir, yani bağlama bağlı olarak farklı şeyler ifade ederler.

Bazı bağlamlarda, programlama dilleri ve hesaplamalar aynı kavramı, "mekanik olarak" uygulanabilecek bir dizi resmi kurala dayanan bir yeniden yazma sistemininkini ifade edecek şekilde birleşmiştir .

Bu yakınlaşmanın bazen bizim için esrarengiz olmasının (ancak çalışan yazılım geliştiricileri veya matematikçiler için değil) nedeni, işimizin somut programlama dillerini kalkülüsmüş gibi düşünmek ve somut programlama dillerinde fiziksel olarak somutlaştırmaktır.

Sorunuzu doğrudan cevaplamak için kalkülüs ve programlama dilleri arasındaki karışıklık (var olduğu ölçüde) bir kaza değil, bir projedir. Projemiz. Bilimsel bir disiplin olarak göreli başarımızın bir kanıtıdır.

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.