Saksi untuk perangkat lunak matematika

11

Saya, seperti banyak orang, adalah pengguna perangkat lunak matematika yang tajam seperti Mathematica dan Maple. Namun, saya menjadi semakin frustrasi dengan banyak kasus di mana perangkat lunak seperti itu hanya memberi Anda jawaban yang salah tanpa peringatan. Ini dapat terjadi ketika melakukan semua jenis operasi dari jumlah sederhana hingga optimasi di antara banyak contoh lainnya.

Saya bertanya-tanya apa yang bisa dilakukan dengan masalah serius ini. Apa yang dibutuhkan adalah beberapa cara untuk memungkinkan pengguna memverifikasi kebenaran dari jawaban yang diberikan sehingga mereka memiliki kepercayaan pada apa yang mereka katakan. Jika Anda mendapatkan solusi dari kolega matematika, dia mungkin akan duduk dan menunjukkan kepada Anda pekerjaan mereka. Namun ini tidak layak untuk dilakukan komputer dalam banyak kasus. Dapatkah komputer sebagai gantinya memberikan Anda kesaksian yang sederhana dan mudah diperiksa kebenaran jawaban mereka? Memeriksa mungkin harus dilakukan oleh komputer tetapi semoga memeriksa algoritma pemeriksaan akan jauh lebih mudah daripada memeriksa algoritma untuk menghasilkan saksi di tempat pertama. Kapan ini layak dan bagaimana tepatnya ini bisa diformalkan

Jadi secara ringkas, pertanyaan saya adalah sebagai berikut.

Mungkinkah setidaknya dalam teori untuk perangkat lunak matematika untuk memberikan bukti yang dapat diperiksa pendek bersama dengan jawaban yang Anda minta?

Kasus sepele di mana kita dapat melakukan ini dengan segera adalah untuk faktorisasi bilangan bulat tentu saja atau banyak masalah klasik NP-complete (misalnya sirkuit Hamiltonian dll.).

Komunitas
sumber
Bisakah Anda memberi contoh di mana jawaban yang dihasilkan salah? Tentu saja mungkin untuk menghasilkan bukti yang dapat diverifikasi kebenaran dari perhitungan, tetapi bukti seperti itu tidak perlu mudah diperiksa dengan tangan, hanya karena perangkat lunak biasanya menggunakan algoritma yang sangat non-sepele yang lebih efisien daripada yang paling intuitif.
Mahdi Cheraghchi
Saya memberikan dua contoh dalam pertanyaan tetapi warna tautannya mungkin tidak mudah dilihat. Klik pada "jumlah" atau "optimasi".
1
Seperti apa yang dilakukan Manuel Blum dan Sampath Kannan di dl.acm.org/citation.cfm?id=200880 ?
Andrej Bauer
Anda mungkin ingin melihat Algoritma Sertifikasi .
Pratik Deoghare
ya terlalu banyak sistem perangkat lunak simbolis diperlakukan sebagai "kotak hitam" dan ini juga merupakan strategi perusahaan untuk melindungi rahasia dagang. (1) coba alternatif open source (2) pertimbangkan rekayasa perangkat lunak "praktik terbaik" dari "pengujian unit". secara singkat idenya adalah untuk menciptakan "pemeriksaan kewarasan" dari hasil, misalnya dengan mengganti nilai-nilai yang diketahui, manipulasi lain, invers, dll. untuk pengujian yang dibangun dengan baik, tidak mungkin baik rumus dan tes akan gagal dengan cara yang akan memberikan a "false positive".
vzn

Jawaban:

5
  1. Konsep "saksi" atau "bukti yang dapat diperiksa" tidak sepenuhnya baru: seperti yang disebutkan dalam komentar, cari konsep "sertifikat". Tiga contoh muncul di benak, ada lebih banyak (di komentar dan di tempat lain):

    • Kurt Mehlhorn menggambarkan pada tahun 1999 masalah yang sama dalam algoritma geometri komputasi (misalnya kesalahan kecil dalam koordinat dapat menghasilkan kesalahan besar dalam hasil beberapa algoritma), diselesaikan dengan cara yang sama di perpustakaan Leda , dengan menegaskan bahwa setiap algoritma menghasilkan "sertifikat" dari jawabannya selain dari jawaban itu sendiri.

    • Demaine, Lopez-Ortiz dan Munro pada tahun 2000 menggunakan konsep sertifikat (mereka menyebutnya "bukti") untuk menunjukkan batas bawah adaptif pada perhitungan serikat dan persimpangan (dan perbedaan, tetapi ini sepele) dari set diurutkan. Jangan mengecualikan pekerjaan mereka karena mereka tidak menggunakan sertifikat untuk melindungi dari kesalahan komputasi: mereka menunjukkan bahwa meskipun sertifikat dapat linier dalam ukuran instance dalam kasus terburuk, sering kali lebih pendek, dan karenanya dapat "diperiksa "dalam waktu sublinear (diberikan akses acak ke input sebagai array yang diurutkan atau B-Tree), dan khususnya dalam waktu kurang dari yang diperlukan untuk menghitung sertifikat semacam itu.

    • Saya telah menggunakan konsep sertifikat pada berbagai masalah lain sejak melihat Ian Munro mempresentasikan implementasinya di Alenex 2001 , dan khususnya untuk permutasi (permintaan maaf untuk plug tak tahu malu, yang lain akan datang), di mana sertifikat lebih pendek dalam kasus terbaik daripada dalam kasus terburuk atau rata-rata, yang menghasilkan struktur data terkompresi untuk permutasi. Di sini sekali lagi, memeriksa sertifikat (yaitu pesanan) paling banyak memakan waktu linier, kurang dari menghitungnya (yaitu menyortir).

  2. Konsep ini tidak selalu berguna untuk pemeriksaan kesalahan: ada masalah di mana memeriksa sertifikat membutuhkan waktu sebanyak waktu untuk memproduksinya (atau hanya menghasilkan hasilnya). Dua contoh muncul dalam pikiran, satu sepele dan satu rumit, Blum dan Kannan (disebutkan dalam komentar) memberi yang lain.

    • nn
    • Sertifikat untuk convex hull dalam dua dan tiga dimensi, jika poinnya diberikan dalam urutan acak, membutuhkan bit untuk mengkodekan perbandingan untuk menghitung [FOCS 2009] (plug tak tahu malu lainnya).

Perpustakaan Leda adalah upaya paling umum (yang saya tahu) untuk membuat algoritma penentuan sertifikat deterministik menjadi norma dalam praktiknya. Makalah Blum dan Kannan adalah upaya terbaik yang saya lihat untuk menjadikannya norma dalam teori, tetapi mereka menunjukkan batas-batas pendekatan ini.

Semoga ini bisa membantu ...

Jeremy
sumber
Terima kasih itu sangat menarik. Sehubungan dengan poin Anda 2. Saya pikir saya berbicara tentang sesuatu yang sedikit berbeda. Masalahnya bukan bug dalam kode melainkan algoritma yang kita tahu mungkin memberikan jawaban yang salah. Juga, pada tingkat duniawi saya bahkan tidak tahu seperti apa sertifikat yang berguna untuk banyak fungsi matematika. Misalnya untuk jumlah tak terbatas atau, katakanlah, minimalisasi suatu fungsi.
Untuk menjadi sedikit lebih jelas. Tampaknya sangat sulit untuk merancang algoritma yang terbukti benar untuk banyak masalah matematika. Namun kami hidup dengan algoritme yang dapat membuat kesalahan tanpa memperingatkan kami (dan sebenarnya terbukti salah) karena alasan praktis. Harapan bahwa tidaklah sulit untuk merancang checker kebenaran yang benar untuk serangkaian masalah yang sama.
Saya semakin jauh dari keahlian saya, tetapi saya pikir kesalahan perhitungan umumnya disebabkan oleh kesalahan pembulatan dengan hasil antara (itu jelas dalam contoh memotivasi Leda) pada operasi dasar (perkalian, divisi, dll.) Daripada kesalahan dalam algoritma. Saya akan berpikir bahwa sistem aljabar seperti maple dan matlab menghindari mereka :(
Jeremy
Ini pertanyaan yang menarik dan mungkin seseorang di sini tahu pasti .. namun banyak dari jawaban yang salah yang saya bicarakan bukan untuk perhitungan numerik jadi ini menyiratkan setidaknya prima facie bahwa masalahnya lebih dari yang Anda gambarkan. Saya tidak tahu kerumitan batas komputasi / jumlah tak terbatas dll, tetapi saya berasumsi bahwa secara umum mereka tidak bisa diterapkan dalam kasus terburuk dan heuristik yang kadang-kadang memberikan jawaban yang salah diperlukan / berguna. mathatica.stackexchange.com/questions/tagged/bugs tidak mengecewakan untuk mendapatkan perasaan tentang hal-hal yang salah.
CS Teoritis memiliki konsep swa-uji, yang berlaku untuk banyak masalah dalam aljabar linier. Salah satu ide dasar adalah bahwa untuk banyak masalah, solusinya dapat diperiksa (mungkin dengan sedikit informasi tambahan) lebih mudah daripada yang dapat dihitung. Lihat misalnya https://doi.org/10.1016/0022-0000(93)90044-W .
Neal Young