İki fonksiyonun genişlemenin eşit olup olmadığını hesaplamak mümkün müdür?


9

Farklı bir sıralama algoritması uygulayan iki işleviniz varsa, kaynak kodla her ikisinin de aynı harici özelliklere sahip olduğu sonucunu çıkarmak mümkün müdür? Her ikisinin de girişleri olarak sıralanmamış bir sıraya ve çıkışları olarak sıralı bir sıraya sahip olacağı anlamına mı geliyor? Bu harici özellikler ne şekilde kaynak kodu ile belirlenebilir? Ve bu harici özellikleri nasıl tarif edersiniz? Hangi gösterim kullanılacak?

Dış özellikler, örneğin bir tür sistem içinde açıkça tanımlanarak bilinir hale getirilebilir, ancak bunun örtülü olarak yapılıp yapılamayacağını merak ediyorum. Yoksa bu tür anlambilimi çıkarmak bir şekilde teorik olarak imkansız mı? Bunun sadece algoritmaları sıralamak için değil, işlevler gibi şeylerin her zaman durduğunu ve yan etkisi olmayacağını varsayarak, rastgele işlevler için mümkün olup olmadığıyla ilgileniyorum.

Anlamsal anlambilime bakmalı mıyım yoksa ilgisiz mi?

Bu alanda araştırma yapmak ve literatür araştırmamda yardımcı olabilecek konuyu tanımlamak için kullanılan farklı terimlerle ilgileniyorum.

Yanıtlar:


8

Evet. Aynı olduklarını doğrulayabilirseniz, bir bilgisayar da olabilir.

İşte Coq'da bir tamsayı sıralaması için hızlı bir özellik:

Inductive natlist : Type :=
| nil : natlist
| cons : nat → natlist → natlist.

Fixpoint is_sorted (l : natlist ) : bool :=
    match l with
    |  nil => true
    |  (cons x nil) => true
    |  (cons x (cons y r)) => if x <= y then is_sorted (cons y r) else false
    end.

...

Theorem sort_spec : forall l, is_sorted (sort_list l).

Bir spesifikasyon, bağımlı tipler kullanılarak doğrudan sıralama beyanına kodlanabilir.

Bu özel sorun için, John Darlington 70'lerde bir tür spesifikasyonun mekanik olarak bir uygulamaya dönüştürülmesiyle 6 sıralama algoritması ailesinin türetilebileceğini gösterdi; Bunun "anlambilim tabanlı program türetme" adı altında olduğuna inanıyorum.

Yazılım mühendisliği dünyasında, geniş ölçüde eşdeğer fonksiyonların bulunması "anlamsal klon tespiti" olarak bilinir.

Dave Clarke da CS StackExchange'te bu soruya iyi bir cevap verdi: /cs/2059/how-do-you-check-if-two-algorithms-return-the-same-result -için-bir giriş

Bütün bunlar resmi yöntemlerin ve programlama dillerinin şemsiyeleri altındadır . Anlamsal anlambilim, anlambilimi modellemek için kullanılan bir teknik sınıfıdır, ancak operasyonel anlambilimle karşılaştırıldığında kullanımı zor olduğu için gözden düşmüştür.


Cevap için teşekkürler! Tam da aradığım şey buydu.
Matthijs Steen

4
Anlamsal semantiklerin "iyilikten düştüğü" statüsüne kesinlikle katılmıyorum. Bu büyük ölçüde kime sorduğunuza bağlıdır.
Andrej Bauer

5

Tam programlama dillerini Turing'de genişletilmiş eşitlik genel olarak kararsızdır, ancak bu, herhangi iki özel işlevin geniş ölçüde eşit olduğunu doğrulamanızı veya tahrif etmenizi engellememelidir.

Doğrulama birçok şekilde devam edebilir, örneğin ZFC set-teorisinde işlemsel semantiği kullanarak neden olabilirsiniz. Ancak, bu acı verici olurdu. Eğer anlamsal anlambilim mevcutsa, bunlar da kullanılabilir, fakat iyi anlamsal anlambilim sadece birkaç dil için vardır. Genellikle , programların genişleme eşitliğini göstermek için Hoare mantığı gibi program mantığı kullanılır . Bunu yapabilmek için, fonksiyonlara sahip diller için Hoare mantıkları genellikle aşağıdakileri belirten bir aksiyom gerektirir:f=gxα.f(x)=g(x), varsayalım f ve g tip fonksiyonları αβ (aksiyomun detayları Hoare mantıklarına seçilen yaklaşımın detayları ile değişir).


Cevap için teşekkürler. Hoare mantığına bakacağım. Hoo mantığına kıyasla anlamsal semantikleri tanımlamak zor mu, yoksa çoğu dil için daha az uygun mu? Genişleme eşitliği Durma Sorunu nedeniyle genel olarak kararlaştırılamaz mı? Öyleyse, fonksiyonlar her zaman, tamamen işlevsel dillerde olduğu gibi, durmak olsaydı, genel olarak karar veremez mi? Yoksa genel olarak kararsız olmanın başka nedenleri var mı?
Matthijs Steen

@ Matthijs Steen: İlginç özelliklere sahip dilleri programlamak için iyi anlamsal semantikler gelmek zor görünüyor. Buna karşılık Hoare mantığı son on yılda çiçek açmıştır ve bunları hemen hemen her programlama dili için inşa edebiliriz. Genişlemeli eşitlik kararlaştırılamaz çünkü (biraz basitleştirmek) aksi halde keyfi bir program olup olmadığını kontrol edebilirsinizP bağlamsal olarak eşdeğerdir 0durma sorununun bir varyantı olan her zaman sonlanan program. Bir dilde yeterli sonluluk koşullarını atarsanız, sonunda ... (devam)
Martin Berger

... kararlaştırılabilir bir bağlamsal eşitliğe sahiptir. Ancak, R. Loader'ın finitary PCF'nin bile kararsız bir bağlamsal eşdeğeri olduğunu gösterdiğini unutmayın .
Martin Berger

-2

Hızlı bir cevap (Çok fazla zaman harcamadığımı itiraf ediyorum ...) Pirinç teoremi, önemsiz olmayan herhangi bir soru için, bir program tarafından hesaplanan işlevin özelliğe sahip olup olmayacağını söylemenin kararsız olduğunu söylüyor. Bu nedenle buradaki soru kararlaştırılamaz


1
"... Kısmi işlevlerin önemsiz olmayan herhangi bir özelliği için ..." olduğunu belirtmez mi, bu yüzden toplam işlevler için karar verilemez mi?
Matthijs Steen
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.