Ne zaman iki programın farklı olduğunu söyleyebiliriz?


15

S1. İki programın (C ++ gibi bazı programlama dillerinde yazılmış) farklı olduğunu ne zaman söyleyebiliriz?

İlk uç nokta, iki programın aynı olması durumunda eşdeğer olduğunu söylemektir. Diğer uç nokta, aynı işlevi hesaplayan (veya benzer ortamlarda aynı gözlemlenebilir davranışı gösteren) iki programın eşdeğer olduğunu söylemektir. Ancak bunlar iyi değildir: ilkeliği kontrol eden tüm programlar aynı değildir. Sonuç üzerinde hiçbir etkisi olmayan bir kod satırı ekleyebiliriz ve yine de aynı programı düşünürüz.

S2. Programlar ve algoritmalar aynı tür nesneler mi? Değilse, bir algoritmanın tanımı nedir ve bir programın tanımından farkı nedir? Ne zaman iki algoritmanın eşdeğer olduğunu söyleyebiliriz?


Program izomorfizm sorunu mu? "Bu program her zaman duran program için izomorfik mi?" Diye soramaz. Durma Sorunu nasıl giderilir? Kendimizi Sınırlı Durdurma Programı Sorunu ile kısıtlarsak, bu sadece grafik izomorfizmi değil mi?
user834

5
İki algoritma ne zaman aynıdır? arxiv.org/abs/0811.0811
sdcvvc

1
Tamamen bağlama bağlı değil miydi? Burada biraz felsefi olmak, ancak cıvatalı bir sandalye ve baş aşağı cıvatalı bir sandalye fiziksel olarak aynıdır, ancak bir sandalye fikri açısından aynı değildir .
Rei Miyasaka

Biraz konu dışı, ancak kanıtlar program olduğundan ... gowers.wordpress.com/2007/10/04/…
Radu GRIGDaha

1
Aşağıdaki makale çok ilgili. Sadece bir süre önce gözden geçirdim, ancak Blass ve Gurevic genellikle gerçekten iyi yazıyorlar (Dershowitz tarafından başka bir şey okumayı hatırlamıyorum, genellikle çok okunabilir olmadığını söyleyerek). Research.microsoft.com/tr-tr/um/people/gurevich/Opera/192.pdf AYNI AYNI ALGORİTMA NEDİR? ANDREAS BLASS, NACHUM DERSHOWITZ VE YURI GUREVICH
kasterma

Yanıtlar:


18

S1: Zaman, kaynak kullanımı, belirsizlik, sonlandırma gibi şeyleri hesaba katabilecek veya etmeyebilecek birçok program denkliği (eser denklik, bağlamsal eşdeğerlik, gözlemsel eşdeğerlik, iki benzerlik) kavramları vardır. Program eşdeğeri ile ilgili kullanılabilir kavramlar bulmak için birçok çalışma yapılmıştır. Örneğin: Operasyonel Tabanlı Program Eşitliği Teorileri Andy Pitts . Ancak bu, yüzeyi zar zor çizer. İki program eşdeğer olmadığında ilgileniyorsanız bile bu yararlı olacaktır. Hatta durmak bilmeyen programlar hakkında da düşünülebilir (bisimülasyon ve coinduction kullanarak).

S2: Bu sorunun bir kısmına olası bir cevap, etkileşimli programların algoritma olmadığıdır (bir kişinin tüm girdisini bir kerede alması için bir algoritmayı düşündüğü varsayılır, ancak bu dar tanım çevrimiçi algoritmaları hariç tutar). Bir program, çevreleriyle de etkileşen etkileşimli süreçlerin bir koleksiyonu olabilir. Bu kesinlikle Turing-machine / Recursion teorisi algoritması kavramı ile uyuşmuyor.


ES ve yan etkiler genel olarak klasik algoritma kavramları tarafından kapsanmamaktadır.
Raphael

15

Diğer uç nokta, aynı işlevi hesaplayan (veya benzer ortamlarda aynı gözlemlenebilir davranışı gösteren) iki programın eşdeğer olduğunu söylemektir. Ancak bunlar iyi değildir: ilkeliği kontrol eden tüm programlar aynı değildir. Sonuç üzerinde hiçbir etkisi olmayan bir kod satırı ekleyebiliriz ve yine de aynı programı düşünürüz.

Bu aşırı bir durum değildir: program denkliği gözlem kavramına göre tanımlanmalıdır .

PL araştırmasında en yaygın tanım bağlamsal eşdeğerliktir. Bağlamsal eşdeğerlikte fikir, programları daha büyük programların (bağlam) bileşenleri olarak kullanarak gözlemlememizdir. Dolayısıyla, iki program tüm bağlamlar için aynı son değeri hesaplarsa, eşit oldukları kanaatindedir. Bu tanım tüm olası program bağlamlarında nicelleştirildiğinden, doğrudan çalışmak zordur. Dolayısıyla PL'deki tipik bir araştırma programı, bağlamsal eşdeğerliği ima eden kompozisyonel muhakeme ilkelerini bulmaktır.

Ancak, bu tek olası gözlem nosyonu değildir. Örneğin, bir programın hafızasının, zamanının veya güç davranışının gözlemlenebilir olduğunu kolayca söyleyebiliriz. Bu durumda, daha az program eşdeğeri vardır, çünkü daha fazla programı ayırt edebiliyoruz (örneğin, mergesort artık çabuk sıralamadan ayırt edilebilir). Zamanlama kanalı saldırılarına karşı bağışık olmayan diller tasarlamak (veya söylemek) veya uzay sınırlı programlama dilleri tasarlamak istiyorsanız, bu yapmanız gereken bir şeydir.

Ayrıca, bir hesaplamanın bazı ara durumlarını gözlemlenebilir olarak yargılamayı seçebiliriz. Bu, her zaman eşzamanlı diller için, müdahale olasılığı nedeniyle olur. Ancak sıralı diller için bile bu görünümü almak isteyebilirsiniz --- örneğin, hiçbir hesaplamanın şifrelenmemiş verileri ana bellekte saklamamasını istiyorsanız, ana belleğe yazmayı gözlemlenebilir olarak kabul etmeniz gerekir.

Temel olarak, tek bir program denkliği kavramı yoktur; her zaman seçtiğiniz gözlem kavramına bağlıdır ve bu, aklınızdaki uygulamaya bağlıdır.


1
Örneğin, söz konusu programlama dili etkileşimli ise (yani bir değer vermezse), bağlamsal eşdeğerlik (veya bağlamsal uyum) kavramının benzersiz bir kavramının olmadığını belirtmek gerekir.
Martin Berger

α

1
αα

1
@ SamTobin-Hochstadt. Tamam, "olağan" ımızı verelim. Anladığım kadarıyla, Neel'in söylediği şeyi söylüyorsunuz, ki bu benim görüşüme göre oldukça iyi düşünülmüştü. Bana hâlâ belirsiz olan fikriniz, doğru gözlemleri ve doğru program bağlamlarını seçerek Neel'in çerçevesi içinde resmileştirilebilir.
Uday Reddy

1
λλx.xλy.y

2

S2: Her zamanki teorik tanımların algoritmalar ve programlar arasında gerçekten ayrım yapmadığını düşünüyorum, ancak yaygın olarak kullanılan "algoritma" bir program sınıfı gibi. Benim için bir algoritma, bazı alt programların tam olarak belirtilmemiş bırakıldığı bir program gibidir (yani istedikleri davranış tanımlanır, ancak uygulamaları değil). Örneğin, Gauss eleme algoritması tamsayı çarpımının nasıl yapılacağını gerçekten belirtmez.

Bu safsa özür dilerim. PL araştırması yapmıyorum.


Fikir muhtemelen bu altyordamlar için birden fazla uygulama olması ve şartnamenize göre çalıştığı sürece hangisinin seçildiğini umursamamanızdır .
Raphael
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.