Matematiksel Yazılım Tanıkları


11

Birçok insan gibi ben de Mathematica ve Maple gibi bir matematiksel yazılım kullanıcısıyım. Ancak, böyle bir yazılımın size uyarı vermeden yanlış yanıtı verdiği birçok durum yüzünden giderek daha fazla hayal kırıklığına uğradım. Basitten operasyonların her türlü gerçekleştirirken oluşabilir toplamlar için optimizasyon diğer birçok örnekler arasında.

Bu ciddi sorun hakkında neler yapılabileceğini merak ediyorum. İhtiyaç duyulan şey, kullanıcının verilen bir cevabın doğruluğunu doğrulamasına izin vermenin bir yoludur, böylece söylenenlere biraz güvenir. Eğer bir matematik meslektaşından bir çözüm alacak olsaydı, oturup oturup çalışmalarını gösterebilirdi. Ancak bu, bir bilgisayarın çoğu durumda yapması mümkün değildir. Bilgisayar bunun yerine size yanıtlarının doğruluğunun basit ve kolay kontrol edilebilir bir tanıkını verebilir mi? Kontrolün bilgisayar tarafından yapılması gerekebilir, ancak umarım kontrol algoritmasını kontrol etmek, tanığı üretmek için algoritmayı kontrol etmekten çok daha kolay olacaktır. Bu ne zaman yapılabilir ve bunun tam olarak nasıl resmileştirilebileceği

Özetle sorum şu.

En azından teorik olarak, matematiksel yazılım için, istediğiniz cevabın yanında kısa bir kontrol kanıtı sağlamak mümkün olabilir mi?

Bunu hemen yapabileceğimiz önemsiz bir durum, elbette tamsayıların veya klasik NP-tam problemlerinin çoğunun (örn. Hamilton devresi vb.) Çarpanlarına ayrılması içindir.


Üretilen cevabın yanlış olduğu bir örnek verebilir misiniz? Elbette hesaplamaların doğruluğuna dair doğrulanabilir bir kanıt oluşturmak mümkündür, ancak böyle bir kanıtın elle kontrol edilmesi kolay değildir, çünkü yazılım genellikle en sezgisel olanlardan daha verimli olan son derece önemsiz olmayan algoritmalar kullanır.
Mehdi Cheraghchi

Soruda iki örnek verdim, ancak bağlantı renklerini görmek kolay olmayabilir. "Toplamlar" veya "optimizasyon" u tıklayın.


Sertifika Algoritmalarına bir göz atmak isteyebilirsiniz .
Pratik Deoghare

evet çok fazla sembolik yazılım sistemi "kara kutular" olarak değerlendiriliyor ve bu aynı zamanda ticari sırları korumak için kurumsal bir stratejidir. (1) açık kaynak alternatiflerini deneyin (2) "birim testi" nin yazılım mühendisliğini "en iyi uygulaması" olarak düşünün. kısaca fikir, sonuçların "akıl sağlığı kontrolleri" oluşturmak olacaktır, örneğin iyi yapılandırılmış testler için bilinen değerleri, diğer manipülasyonları, tersleri vb. ikame ederek hem formülün hem de testin verilecek şekilde başarısız olması olası değildir. "yanlış pozitif".
vzn

Yanıtlar:


5
  1. "Tanıklar" veya "kontrol edilebilir kanıtlar" kavramı tamamen yeni değildir: yorumlarda belirtildiği gibi "sertifika" kavramını arayın. Üç örnek akla geldi, daha fazlası var (yorumlarda ve başka yerlerde):

    • Kurt Mehlhorn, 1999'da hesaplama algoritması algoritmalarında benzer bir problemi tanımladı (örneğin, koordinatlardaki küçük hatalar, bazı algoritmaların sonuçlarında büyük hatalar verebilir), her algoritmanın bir "sertifika" üretmesi konusunda ısrar ederek Leda kütüphanesinde benzer bir şekilde çözüldü. cevabın yanı sıra cevabın kendisi.

    • 2000 yılında Demaine, Lopez-Ortiz ve Munro , sıralı kümelerin birleşmesi ve (ve farkın (ve farkın, ama bu önemsiz) hesaplanması) uyarlanabilir alt sınırlarını göstermek için sertifika kavramlarını (onlara "kanıt" olarak adlandırıyorlar) kullandılar. Çalışma hatalarını korumak için sertifikaları kullanmadığı için çalışmalarını dışlamayın: Sertifikanın en kötü durumda örneğin boyutunda doğrusal olabilmesine rağmen, genellikle daha kısa ve dolayısıyla "denetlenebileceğini" gösterdiler "alt doğrusal zamanda (sıralı dizi veya B-Ağacı olarak girdiye rastgele erişim verilir) ve özellikle böyle bir sertifikayı hesaplamak için gerekenden daha kısa sürede.

    • Ian Munro'nun Alenex 2001'de uygulamalarını sunduğunu ve özellikle sertifikanın en iyi durumda daha kısa olduğu permütasyonlar (utanmaz fiş için özür diler) için çeşitli diğer problemler üzerinde sertifika kavramını kullanıyorum. permütasyonlar için sıkıştırılmış bir veri yapısı veren en kötü ya da ortalama durumda olduğundan. Burada da sertifikanın (yani siparişin) kontrol edilmesi, hesaplamadan (yani sıralama) daha az doğrusal zaman alır.

  2. Kavram, hata denetimi için her zaman yararlı değildir: sertifikanın kontrol edilmesinin, onu üretmek (veya yalnızca sonucu üretmek) kadar zaman aldığı sorunlar vardır. Akla gelen iki örnek, bir önemsiz ve bir karmaşık, Blum ve Kannan (yorumlarda belirtilmiştir) başkalarına verir.

    • Bir öğenin ayrılmamış n öğeden oluşan bir dizide olmadığını kanıtlama sertifikası ,nn
    • İki ve üç boyutlu dışbükey gövde sertifikası, eğer noktalar rastgele sırada verilmişse, hesaplamak için karşılaştırmalar kadar kodlamak kadar bit alır [FOCS 2009] 'u (diğer utanmaz fiş) .

Kütüphane Leda , uygulamada deterministik sertifika üreten algoritmaları norm haline getirmeye (bildiğim) en genel çabadır. Blum ve Kannan'ın makalesi, onu teoride norm haline getirmek için gördüğüm en iyi çabadır, ancak bu yaklaşımın sınırlarını göstermektedirler.

Umarım yardımcı olur...


Teşekkür ederim, bu çok ilginç. 2. noktanıza gelince, sanırım biraz farklı bir şeyden bahsediyorum. Sorun koddaki hatalar değil, bildiğimiz algoritmalar yanlış cevap verebilir. Ayrıca, sıradan bir seviyede, birçok matematiksel fonksiyon için yararlı bir sertifikanın nasıl görüneceğini bile bilmiyorum. Örneğin sonsuz bir toplam ya da örneğin bir fonksiyonun en aza indirilmesi için.

Biraz daha açık olmak. Birçok matematik problemi için kanıtlanabilir doğru algoritmalar tasarlamak çok zor görünüyor. Bununla birlikte, pratik nedenlerden dolayı bizi uyarmadan (ve aslında yanlıştır) hata yapabilen algoritmalarla yaşıyoruz. Aynı sorun kümesi için doğru doğruluk denetleyicilerini kanıtlamanın zor olmadığı umudu.

Uzmanlığımdan uzaklaşıyorum, ancak hesaplama hatalarının genellikle hatalardan ziyade temel işlemlerde (çarpma, bölme, vb.) Ara sonuçlarla (Leda'yı motive eden örneklerde açıkça görüldüğü gibi) yuvarlama hatalarından kaynaklandığını düşündüm. algoritmalarda. Akçaağaç ve matlab gibi cebirsel sistemlerin bunlardan kaçındığını düşünürdüm :(
Jeremy

Bu ilginç bir soru ve belki de burada birileri kesin olarak biliyor .. Ancak bahsettiğim yanlış cevapların çoğu sayısal hesaplamalar için değil, bu yüzden en azından prima facie, problemlerin sizin tanımladığınızdan daha fazla olduğunu ima ediyor. Hesaplama sınırları / sonsuz toplamlar vb. Karmaşıklığını bilmiyorum ama genel olarak en kötü durumda inatçı olduklarını ve bazen yanlış cevap veren buluşsal yöntemlerin gerekli / yararlı olduğunu varsayıyorum. mathematica.stackexchange.com/questions/tagged/bugs yanlış giden şeyler hakkında fikir edinmek için bilgilendirici değildir.

Teorik CS, doğrusal cebirdeki birçok problem için geçerli olan kendi kendini test etme kavramına sahiptir. Temel fikirlerden biri, birçok sorun için çözümün hesaplanabileceğinden daha kolay kontrol edilebilmesidir (belki biraz fazladan bilgi ile). Bkz. Örneğin https://doi.org/10.1016/0022-0000(93)90044-W .
Neal Young
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.