数学ソフトウェアの証人


11

私は、多くの人々と同様に、MathematicaやMapleなどの数学ソフトウェアの熱心なユーザーです。ただし、このようなソフトウェアが警告なしに間違った答えを返すだけの場合が多いことに、私はますます不満を感じています。これは、単純な合計から他の多くの例の中で最適化まで、あらゆる種類の操作を実行するときに発生する可能性があります。

私はこの深刻な問題について何ができるのだろうと思っていました。必要なのは、与えられた答えの正しさをユーザーが検証できるようにして、伝えられていることにある程度自信を持たせる方法です。あなたが数学の同僚から解決策を得る場合、彼女/彼はただ座って、彼らの仕事を見せてもよいでしょう。ただし、これはほとんどの場合、コンピューターで実行することはできません。その代わりに、コンピューターは、その答えの正しさをシンプルで簡単に確認できる証言をあなたに与えることができますか?確認はコンピューターで行う必要がありますが、最初に証人を作成するためにアルゴリズムを確認するよりも、チェックアルゴリズムを確認する方がはるかに簡単であることが望まれます。これはいつ実行可能になり、どのように正確に公式化できますか

要約すると、私の質問は次のとおりです。

少なくとも理論的には、数学的ソフトウェアが、あなたが求めた答えとともに、短いチェック可能な証明を提供することは可能でしょうか?

すぐにこれを行うことができる些細なケースは、もちろん整数の分解や古典的なNP完全問題の多く(ハミルトニアン回路など)です。


作成された答えが間違っている例を挙げていただけますか?もちろん、計算の正確さの検証可能な証明を生成することは可能ですが、そのような証明は、ソフトウェアが通常最も直感的なアルゴリズムよりも効率的な非常に自明でないアルゴリズムを使用するため、手で簡単に確認する必要はありません。
MCH

この質問では2つの例を挙げましたが、リンクの色は見にくいかもしれません。「合計」または「最適化」をクリックします。

1
ソートマヌエル・ブラムとサンパスKannanはで何をしたかのdl.acm.org/citation.cfm?id=200880
アンドレイバウアー


はい、あまりにも多くのシンボリックソフトウェアシステムが「ブラックボックス」として扱われ、これも企業秘密を保護する企業戦略です。(1)オープンソースの代替案を試してください(2)「単体テスト」のソフトウェア工学「ベストプラクティス」を検討してください。手短に考えれば、結果の「健全性チェック」を作成することです。たとえば、既知の値、他の操作、逆数などを適切に構築されたテストに置き換えることにより、式とテストの両方が失敗する可能性は低いです「誤検知」。
vzn

回答:


5
  1. 「証人」または「チェック可能な証拠」の概念はまったく新しいものではありません。コメントで述べたように、「証明書」の概念を探してください。3つの例が思い浮かびましたが、もっとあります(コメントなど)。

    • カート・メルホーンは、計算幾何学アルゴリズムで1999年に同様の問題を説明した(例えば、いくつかのアルゴリズムの結果に大きな誤差をもたらすことができる座標のマイナー・エラー)ライブラリーで同様の方法で解決、レダ各アルゴリズムは、「証明書」を作成することを主張することにより、答え自体に加えてその答えの。

    • 2000年にDemaine、Lopez-Ortiz、およびMunroは、証明書の概念(「証明」と呼ばれます)を使用して、ソートされたセットの和集合および交差(および違いですが、これは些細なこと)の計算の適応下限を示しました。コンピューティングエラーから保護するために証明書を使用していないため、作業を除外しないでください。最悪の場合、証明書はインスタンスのサイズに比例する可能性がありますが、多くの場合より短く、したがって「チェックできる」ことを示しました「準線形時間(ソートされた配列またはBツリーとして入力にランダムアクセスが与えられた場合)、特にそのような証明書を計算するのに必要な時間よりも短い時間。

    • Ian MunroがAlenex 2001で実装を提示して以来、特に他のさまざまな問題で証明書の概念を使用しており、特に順列(恥知らずのプラグの謝罪、もう1つが来る)で、最高の場合は証明書が短くなります最悪の場合や平均的な場合よりも、順列に対して圧縮されたデータ構造が生成されます。ここでも、証明書(つまり、順序)の確認には、計算(つまり、並べ替え)よりも線形時間しかかかりません。

  2. この概念は、エラーチェックには必ずしも有用ではありません。証明書のチェックに、証明書の作成(または単に結果の作成)と同じくらい時間がかかるという問題があります。二つの例は、頭に浮かぶ些細1と複雑なもの、ブラムとKannan(コメントで述べたが)他人を与えます。

    • 要素が要素の並べ替えられていない配列にないことを証明する証明書は、比較で取得され、同時にチェックされます。nnn
    • 2次元および3次元の凸包の証明書は、ポイントがランダムな順序で与えられる場合、[FOCS 2009](他の恥知らずなプラグ)を計算するための比較と同じくらいのビットをエンコードする必要があります。

ライブラリLedaは、決定論的な証明書生成アルゴリズムを実際に標準にするための最も一般的な努力です(私が知っている)。Blum and Kannanの論文は、理論上それを標準とするために見た最善の努力ですが、彼らはこのアプローチの限界を示しています。

それが役に立てば幸い...


とても興味深いです。あなたのポイント2に関して。私は少し違うことについて話していると思います。問題はコードのバグではなく、アルゴリズムが間違っているとわかっているアルゴリズムです。また、ありふれたレベルでは、多くの数学関数にとって有用な証明書がどのようになるかさえも知りません。たとえば、無限和や関数の最小化など。

少し明確にするため。多くの数学の問題に対して証明可能な正しいアルゴリズムを考案することは非常に難しいようです。しかし、実用的な理由で、警告なしに間違いを犯す可能性のあるアルゴリズム(実際には間違いなく間違っている)を使用しています。同じ問題のセットに対して証明可能な正確性チェッカーを考案することは難しくないという希望です。

私は専門知識からは程遠いですが、計算エラーは一般にエラーではなく基本的な操作(乗算、除算など)の中間結果(Ledaを動機付ける例では明らかにそうです)でエラーを丸めることが原因であると考えましたアルゴリズムで。mapleやmatlabなどの代数システムはそれらを避けていると思っていたでしょう:(
ジェレミー

それは興味深い質問であり、おそらくここの誰かが確かに知っているかもしれません..しかし、私が話している間違った答えの多くは数値計算のためのものではないので、これは少なくとも問題があなたが説明する以上のものであることを暗示しています。計算限界/無限合計などの複雑さはわかりませんが、一般的には最悪の場合には扱いにくいので、間違った答えを出すヒューリスティックが必要/有用であると思います。 mathematica.stackexchange.com/questions/tagged/bugsは、間違っていることを感じ取るのに有益ではありません。

理論的CSには自己テストの概念があり、これは線形代数の多くの問題に適用されます。基本的な考え方の1つは、多くの問題について、計算するよりも簡単に解決策を(おそらく少しの追加情報で)チェックできるということです。例えば参照https://doi.org/10.1016/0022-0000(93)90044-Wを
ニールヤング
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.