Programlama dilleri ve matematiğin temelleri arasında nasıl bir ilişki vardır?


30

Temel olarak matematiğin üç temelinin farkındayım

  1. Küme teorisi
  2. Tip teorisi
  3. Kategori teorisi

Peki programlama dilleri ve matematiğin temelleri hangi yollarla ilişkilidir?

DÜZENLE

Asıl soru "Matematiğin temellerini temel alan programlama dilleri" idi.

eklenen paragarph ile

Ve teori gerçeklenimcilerine
1. Tip teorisi Coq
2. Set teoride SETl
3. Kategori teorisi Haskell

Bir öneriye dayanarak, bu "programlama dilleri ve matematiğin temelleri nasıl ilişkilendirilir?" Olarak değiştirildi.

Bu sorulardan biri olduğu için ne sorduğum hakkında yeterince bilgim yoktu, ancak bir şeyler öğrenmek istedim, soruyu öğrenme ve diğerleri için daha değerli kılacak, ancak ayrıntıları açıklamamaya bırakarak değiştirdim. Andrej Bauer tarafından mevcut cevap konu dışı görünüyor.

Tüm yorumlarınız ve şu ana kadar cevaplarınız için teşekkür ederim, onlardan öğreniyorum.


1
Soruyu veya burada belirtilen varsayımları anladığımdan emin değilim. Coq anladığım kadarıyla bir programlama dili değil. Coq provalarından programlar çıkarılabilir ancak bu bir programlama dili yapmaz. Ayrıca kategori teorisi ve tip teorisi yakından ilişkilidir, bu yüzden bunları sizin kategorilerinize göre ayırabilir miyiz emin değilim. SETL hakkında bilmiyorum. Ayrıca Wikipedia'daki ispat asistanlarının listesine bakınız .
Kaveh

3
Haskell "kategori teorisinin bir uygulaması" değildir ve her durumda matematiğin temelleri programlama dillerinden farklı bir amaca hizmet eder. Bir çeşit karşılaştırma yapılabilse de, karşılaştırmayı resmi bir ilişkiye zorlamaya çalışmak o kadar iyi değildir.
Andrej Bauer


İlgi
Alanları

Yanıtlar:


29

[Not: bu paragraflar artık modası geçmiş.] Sorunuzun başlığı, programlama dillerinin "matematiğin temellerine dayandığı" anlamına gelen, garanti edilmeyen bir varsayım içeriyor. İki alanın önemli ilişkileri olmasına rağmen, genellikle durum böyle değildir. Daha kesin bir ifade, (bazı) programlama dillerinin temel teknikler kullanılarak tasarlandığıdır. Sorulması gereken daha iyi bir soru "programlama dilleri ve matematiğin temelleri arasında nasıl bir ilişki vardır?"

En genel bağlantı, birkaç şekilde çalışmak için yapılabilecek olan programlar olarak sloganlar şeklindedir. Curry-Howard yazışma en bariz biridir. Bununla bir kerede tip teori, mantık ve programlama ile ilgilidir. Ancak, Curry-Howard yazışmalarının, her genel amaçlı programlama dilinin desteklediği, genel özyinelemede (her türde yaşadığı için) varlığında çok iyi çalışmadığı vurgulanmalıdır.

Program olarak sloganı kanıt olarak çalışmanın daha ince bir yolu gerçekleştirilebilirliği kullanmaktır . Burada da provalar ve programlar arasında ilişki kuruyoruz, ancak şimdi yönlendirme provalardan programlara gidiyor: her prova bir program veriyor, ancak her program mutlaka bir prova değil.

Bir temele dayanan bir programlama dili ana örnektir Agda basitçe, bir bağımlı tip teorisinin bir uygulaması. Ancak, Agda genel amaçlı bir programlama dili değildir, çünkü genel özyinelemeyi desteklemez. Agda'daki her işlev toplamdır ve Agda'da uygulanamayan hesaplanabilir işlevler vardır. Uygulamada programcılar bunu farketmeyeceklerdir, ancak Agda'nın tanımsız değerlere, örneğin sonsuz döngülere izin vermediğini fark edeceklerdir.

Coq olduğu değil bir programlama dili değil, bir kanıt asistanı. Bununla birlikte, programların provalardan verebileceği çıkarma yeteneklerine de sahiptir. Prova asistanları ve programlama dilleri birbirleriyle karıştırılmamalıdır.

Prolog ve diğer mantık programlama dillerinin, hesaplamanın kanıt arama olduğu fikrinden ilham aldıklarını unutmamalıyız . Bu elbette onları mantıkla yakından ilgilidir.

Haskell, etki alanı teorisine dayanan genel amaçlı bir programlama dilidir . Bir başka deyişle, anlambilimi alan-teoriktir çünkü kısmi işlevleri ve özyinelemeyi hesaba katması gerekir. Haskell topluluğu, kategori teorisinden esinlenerek, monadlarının en iyi bilinen fakat monadlarla karıştırılmaması gereken birkaç teknik geliştirmiştir . Daha genel olarak, gelişmiş programlama özellikleri genellikle etki alanı teorisi ve kategori teorisinin bir kombinasyonu ile ele alınır, ancak bu, sokaktaki Haskell programlayıcısının usta olduğu bir şey değildir. Haskell tiplerinin "sözdizimsel kategori" olarak adlandırılan, Haskell ve kategori teorisinin birbiriyle nasıl birleştiğine dair sıradan bir insan görüşü.

Küme teorisi (klasik veya yapıcı) programlama dilinde fikirlere daha az ilham veriyor gibi görünmektedir. Elbette, yapıcı küme teorisi, yapıcı mantık ile programlama ile bağlantısına sahiptir. Sezgisel küme teorisinin programlama dillerine önemli bir uygulaması, onu yapay alan teorisi yapmak için kullanan Alex Simpson tarafından verildi. Ama bu oldukça gelişmiş şeyler, belki bu slaytları görüyoruz . Jean-Louis Krivine, klasik küme teorisi için çok ilginç bir gerçekleştirilebilirlik markası geliştirdi. Bu, klasik küme teorisi ve programlaması ile ilişki kurmanın iyi bir yoludur.

Özet olarak, programlama dilleri teorisi temel teknikleri kullanır. Hesaplamanın temel bir kavram olduğunu düşündüğümüz için bu şaşırtıcı değil. Ancak programlama dillerinin belirli bir temele "dayandığını" söylemek çok saf. Aslında, temellerin üçlemesi “küme teorisi - tip teorisi - kategori teorisi” yine sadece çeşitli şekillerde matematiksel olarak kesinleştirilebilecek kullanışlı bir üst düzey gözlemdir, ancak bunun için gerekli hiçbir şey yoktur. Bu tarihi bir kaza.


" hesaplamanın kanıt arama olduğu fikri ." Bu ifade ile kafam karıştı. Elbette, prova araştırması bir hesaplama şeklidir, ancak tüm hesaplamalar prova araştırması değildir? Bu soru bağlamında, aynı zamanda kontrol kanıtı da vardır. Daha genel olarak, sadece 5 + 3 eklenmesi. Bu ifadeyle ne demek istiyorsun?
user56834

6

bu çok karmaşık bir konudur ve konuyla ilgili birçok harika kitap vardır, sonuncusu Turings Katedrali, dijital evrenin kökenleri ve ayrıca mantık motorları, matematikçiler ve bilgisayarın kökenleri .

bilgisayar dilleri, onlarca yıldan beri gelişmiştir, ancak bunun matematik ve bilgisayar bilimlerinin iç içe geçmiş olduğunu gösteren iki orijinal programlama dili olduğuna veya inanmadığına inanıyoruz:

"programlama dilleri" ile matematik ve bilgisayar bilimi sınırlarını geçen iki önemli figür vardır:

  • Shannon'un öncülük ettiği bilgi teorisi , matematik ve bilgisayar bilimi arasındaki derin bağlantıları gösterir.

  • Matematik ve bilgisayar bilimleri arasında geçen bir diğer önemli figür ise Von Neumann'dır . von neumann'ın mimarlık programlarını bellekte saklaması için icat etti.

daha önceki "programlama dilleri":

  • İngilizce "bilgisayar" kelimesi aslında matematiksel işlemleri sayılar üzerinde kullanan ve hesap makinesi gibi bir şey ifade ediyordu ve anlamı büyük ölçüde günümüzün genel amaçlı programlama konseptine kayıyordu. bu nedenle programlama dilleri ile erken hesap makineleri arasında bir bağlantı vardır.
  • Dokuma tezgahlarında 19. yüzyılın sonlarından ve 20. yüzyılın başlarından beri kullanılan delikli kartlar , dokuma desenleri için bir "programlama dili" idi. Delikli kartların 1960'lı yıllarda ana bilgisayarların programlanmasında kullanıldığını unutmayın. Bunlar başlangıçta çok fazla genel olmayan, genel amaçlı olmayan bilgisayarlarda “hesaplama makineleri” (matematik kullanarak!) olarak görülüyordu.
  • Babbage ve Ada Lovelace "programlama dilleri" ilkel konseptlerini 1800'lerin ortalarında "hesaplama motorunda" geliştirdiler.
  • Boole cebri aslen Boole tarafından icat edilen tamamen matematiksel bir konsepttir.
  • matematiksel hesaplama için kullanılan eski (bin yıllık) abaküs , modern bilgisayarın öncüsü olarak görülmektedir. fakat onu manipüle etme operasyonlarının bir çeşit "programlama dili" olduğu söylenebilir (bunu insanlar takip eder).

bununla birlikte, soyutlama arttıkça ve ölçeklendikçe modern programlama dillerinde matematiğe açık, doğrudan bağlantı on yıllardır bir miktar azalmıştır, ancak her zaman oldukça içsel hale gelecektir ve bir şekilde, güçlendirilmiştir. Örneğin, Java gibi katı tipleriyle dilleri matematiğe bağlar ve ~ 1990'ların başlarında ana bilgisayar dilleri (örneğin c ++, Java, Ruby vb.), matematikte ilkel nesneler gibi birçok matematiksel üst düzey nesneyi açıkça uygulamaya başladı. kümeler, ağaçlar (örneğin, Btrees veya hashmaps), vb. diller

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.