Bir fonksiyonun idempotent olduğunu kanıtlamak mümkün mü?


12

Bir fonksiyonun idempotent olduğunu kanıtlamak için statik veya bağımlı tipler kullanmak mümkün müdür?

Şanssız cevap için Google ve StackOverflow / StackExchange üzerinde çeşitli yerlerde aradım. Bulduğum en yakın şey Idris hakkındaki bu sohbetti: https://groups.google.com/forum/#!topic/idris-lang/yp7vrspChRg

Ne yazık ki, bu tartışma kafamın biraz üstünde.


3
Bunu cevap olarak göndermiyorum çünkü% 100 emin değilim, ama Rice'ın Teoremi nedeniyle bunun imkansız olduğuna inanıyorum .
gardenhead

4
Bu büyüleyici bir soru ve sezgim bunun kısıtlı, Turing-tam olmayan bir dilde mümkün olması gerektiğini gösteriyor. Bununla birlikte, Programcılar yazılım geliştirme yaşam döngüsü ile ilgili sorulara odaklanmaktadır ( ayrıntılar için yardım merkezine bakın), ancak bu bir bilgisayar bilimi sorusu gibi görünmektedir. Bilgisayar Bilimleri sitesi daha uygun olabilir ve daha iyi yanıtlara yol açabilir.
amon

2
@gardenhead Rice teoremi, bir programın davranışının sahip olabileceği herhangi bir özellik göz önüne alındığında, bazen bir programın bu özelliğe sahip olup olmadığını belirlemek imkansızdır. "Bu bazen imkansız" ve "bu imkansız" arasında büyük bir fark vardır.
Tanner Swett

2
Son yorumum oldukça belirsizdi. Her durumda, Rice teoreminin söylediği şey şudur: tüm fonksiyonları doğru olarak idempotent veya idempotent olarak sınıflandıran bir algoritma yoktur . Bununla birlikte, bazı işlevleri idempotent olarak veya değil olarak sınıflandıran hala kullanışlı algoritmalar vardır .
Tanner Swett

2
OP bir fonksiyonun idempotent olduğunu kanıtladı, bir algoritmanın fonksiyonları idemptotent olarak sınıflandırıp sınıflandırmadığını sordu. Temel fark, bir kanıtın bir kişi tarafından yazılabilmesidir. Turing tamlığına gelince, bu gerçekten bir sorun değil .
gallais

Yanıtlar:


3

Bazı fonksiyonlar için öyle. Özellikle ;-) işlevini bildiğinizde

Sorunuzla "rasgele bir işlevin idempotent olup olmadığına otomatik olarak karar verecek bir algoritma var mı" demek istiyorsanız, yorumlarda daha önce bahsedilen teoremler nedeniyle cevap hayırdır. Bununla birlikte, belirli fonksiyon sınıfları için, teoride, fonksiyonun idempotent olup olmadığına kolayca karar verilebilir. Örneğin, işlev safsa (herhangi bir yan etki olmadan) anlamına gelir ve herhangi bir giriş için her zaman sınırlı bir süre içinde bir değer döndürdüğünü biliyorsanız, o zaman f(f(x))=f(x)herhangi bir olası giriş için denemekle idempotence karar verilebilir. xişlevine. Bunun çok verimli olacağı değil, evrenin sonuna kadar devam edebilir.

Eğer aradığınız cevap bu değilse, daha iyi bir soru yazın, şu anda tam olarak ne aradığınız tam olarak bilinmemektedir.


Cevap için teşekkürler. "Otomatik karar verme" yeteneği tam da aradığım şeydi.
bmaddy

2
'Belirli işlevler için' ifadesini genişletmek için : İdempotency, yalnızca sınırlı sayıda girişi (tümünü deneyerek) veya yinelemeli olarak tanımlanmış bir tür girişi (doğal gibi) kabul eden herhangi bir işlev için kanıtlanabilir. sayılar veya bağlantılı listeler) anlamına gelir; bu, yalnızca idempotency'nin temel vaka (lar) ve özyinelemeli vaka (lar) için geçerli olduğunu kanıtlamanız gerektiği anlamına gelir.
Qqwy
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.