Verimli hesaplama için programlama dilleri


32

Tüm girişleri durduran ve hiçbiri olmayan tüm makinelere izin veren bir programlama dili yazmak mümkün değildir. Bununla birlikte, herhangi bir standart karmaşıklık sınıfı için böyle bir programlama dilini tanımlamak kolay görünmektedir. Özellikle, tüm verimli hesaplamaları ve sadece verimli hesaplamaları ifade edebileceğimiz bir dil tanımlayabiliriz.

Örneğin, gibi bir şey için : favori programlama dilinizi alın ve programınızı yazdıktan sonra (Turing Machine karşılık gelir ), başlığa üç değer ekleyin: tamsayı , tamsayı ve varsayılan çıktı . Program derlenmiştir, çıkış Turing makinesi giriş verilen büyüklüğü çalışır ile için adımları. Eğer önce durdurmak değil adımlar doldu, çıkış varsayılan çıkışM c k d M x n M x c n k M c n k dPMckdMxnMxcnkMcnkd. Ben yanlış sürece, bu programlama dilleri bize tüm hesaplamaları ifade sağlayacak ve başka bir şey. Ancak, bu önerilen dil doğası gereği ilginç değildir.P

Sorum şu: hesaplanabilir fonksiyonların alt kümelerini (tüm verimli hesaplanabilir fonksiyonlar gibi) önemsiz bir şekilde yakalayan programlama dilleri var mı? Eğer yoksa, bunun bir nedeni var mı?


7
Hesaplanabilir fonksiyonların alt kümelerini yakalayan bazı programlama dilleri örnekleri: düzenli ifadeler ve bağlamsız gramerler.
Jukka Suomela

2
Aslında, karmaşıklık sınıfını like (sınırlamalı özyinelemenin yerini alan ilkel özyinelemeli fonksiyonlara benzer şekilde tanımlanmıştır) yakalayan diller oldukça ilginçtir (en azından teorik bakış açısıyla). :)P VPPV
Kaveh

Doğrusal ve Tamsayılı Programlama, hesaplanabilir fonksiyonların ilginç alt kümelerini yakalar.
Diego de Estrada

Datalog sadece polinom zaman algoritmalarını ifade edebilir, fakat tüm polinom zaman algoritmalarını ifade edip edemediğini bilmiyorum.
Jules

İyi bilinen "Toplam İşlevsel Programlama" makalesi, kararsız bir durma problemi olmayan programlama dillerinin aslında pratik ve kullanışlı olduğu iddiasını ortaya koymaktadır. jucs.org/jucs_10_7/total_functional_programming
yok

Yanıtlar:


32

Sadece polinom zaman hesaplamaları ifade etmeye çalışan dillerden biri yumuşak lambda hesabıdır . Bu tip sistem lineer mantık içinde yer almaktadır. Son zamanlarda yapılan tez , polinom zaman hesaplarına dayanmakta ve bu yaklaşıma dayanan son gelişmelerin iyi bir özetini sunmaktadır. Martin Hofmann bir süredir bu konuda çalışıyor. İlgili makalelerin daha eski bir listesini burada bulabilirsiniz ; Makalelerinin çoğu bu yönde devam ediyor.

Diğer çalışmalar, Bağımlı Türler veya Yazılı Derleme Dili kullanarak, programın belirli miktarda kaynak kullandığını doğrulama yaklaşımını benimsemektedir .

Yine de diğer yaklaşımlar , ortam analizinin varyantları gibi kaynağa bağlı resmi hesaplamaları temel almaktadır .

Bu yaklaşımlar, iyi yazılmış programların önceden belirlenmiş bazı kaynak sınırlarını karşılama özelliğine sahiptir. Bağlanan kaynak zaman veya boşluk olabilir ve genellikle girdilerin boyutuna bağlı olabilir.

Bu alandaki erken çalışma, normalize edilmiş kalkülüsler üzerindedir, yani iyi yazılmış tüm programlar durur. Sistem F , yani polimorfik lambda hesabı, kuvvetle normalleşiyor. Sabit nokta operatörüne sahip değildir, ancak yine de oldukça etkileyicidir, ancak hangi karmaşıklık sınıfına tekabül ettiği bilinmemektedir. Tanım olarak, herhangi bir güçlü şekilde normalize edici hesap, bazı sonlandırma hesaplamaları sınıfını ifade eder.

Charity programlama dili , tüm girdileri durduran oldukça etkileyici bir işlevsel dildir. Hangi karmaşıklık sınıfını ifade edebileceğini bilmiyorum ama Ackermann işlevi Charity'ye yazılabilir.


Burada en azından ne demek istiyorsun?
nponeccop

'En azından' burada 'bazıları' anlamına geliyor. Cevabımı biraz daha kesinleştirmek için değiştireceğim.
Dave Clarke

F sisteminde tanımlanabilen fonksiyonların karmaşıklığının, girişin "2. derece aritmetik bazı kesin toplam fonksiyon" olarak sonlanan fonksiyonların sınıfı olduğundan eminim. Çok geleneksel bir karmaşıklık sınıfı değil, ama yine de ...
cody

cody: Wadler'in "ücretsiz teoremleri" ne göre, Sistem F "ikinci dereceden Peano aritmetiğinde toplamı kanıtlanabilen her özyinelemeli işlevi" ve "[[]] Ackermann'ın işlevini" ifade eder. Tanımladığın şeyin aynı olup olmadığından emin değilim. Charity'nin temel özelliği, koda desteği, Agda'nın sonlandırma kontrolünün, sonlandırmayı garanti ederken Coq ve System F'den daha fazla ifade olanağı sağladığını düşünüyorum.
Blaisorblade


8

Ayrıca, bir takım ilgili sorularda ortaya çıktığından, bu konuya yaklaşım olarak Kapalı Karmaşıklık Teorisinden de bahsetmek istiyorum. Neel Krishnaswami'nin bu cevabını alıntılamak için :

Temel teknik, karmaşıklık sınıflarını, mantıksal sistemin kesilmesinin, verilen karmaşıklık sınıfı için (örneğin, LOGSPACE, PTIME, vb.) Daha sonra Curry-Howard aracılığıyla verilen sınıftaki programların tam olarak anlaşılabilir olduğu bir programlama dili çıkarırsınız.


5

Hiç kimsenin ilkel özyinelemeden bahsetmediğine şaşırdım. Sınırlı döngülerle sınırlanarak (yani, her döngü için yinelemelerin sayısı döngü başlamadan önce hesaplanmalıdır), sonuçta elde edilen program ilkel özyinelemelidir ve dolayısıyla toplamdır. Douglas Hofstadter, sadece ve ilkel özyinelemeli işlevlere izin veren bir programlama dili olan BLOOP'u önerdi.


1
Tüm işlevlerin uygun bir alt sınıfıdır, ancak buna "verimli" işlevlerin bir sınıfı demesi biraz zor olabilir.
Raphael

PP

Diğerleri, bir anlamda sadece "ilkel özyinelemeyi" destekleyen "Sistem F" ve diğer güçlü normalleştirici dillerden bahsetti. Ancak, birinci sınıf işlevleri desteklediklerinden daha fazla program yazmaya izin verirler (Ackermann işlevi gibi).
Blaisorblade

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.