私は、乗算を伴う整数の理論は一般的に決めることができないことを知っています。それにもかかわらず、特定の例では、Z3はモデルを返す。私はこれがどのように行われているのか知りたいと思っています。それは実数に対する非線形算術の新しい決定手続きと関係がありますか?特定のインスタンス(例:有限モジュラスなどの整数)が認識されていますが、Z3はそれを乗算クエリのモデルとして返します。どんな助けでも大歓迎です。Z3はどのように非線形整数計算を処理しますか?
答えて
はい、非線形整数計算の決定の問題は決めることができません。 チューリングマシンのHalting問題を非線形整数計算でエンコードすることができます。 この問題に関心を持つ人には、美しい本Hilbert's tenth problemを強くお勧めします。
数式に解がある場合は、常にブルートフォースで見つけることができます。つまり、可能なすべての割り当てを列挙し、それらが式を満たすかどうかをテストします。これは、プログラムを実行するだけでHaltingの問題を解決し、与えられたステップ数の後に終了するかどうかを確認することとは異なることではありません。
Z3は素朴な列挙を実行しません。数字k
が与えられると、k
ビットを使用してすべての整数変数を符号化し、すべてを命題論理に還元する。次に、SATソルバーを使用して解を見つける。解が見つかった場合は、それを元の公式の整数解に変換し直します。命題形式の解がない場合は、k
を増やそうとするか、別の戦略に切り替える。命題論理へのこの減少は、本質的にモデル/解探索法である。問題が解決策を持たないことを示すことはできません。実際には、すべての整数変数が下限と上限を持つ問題については、それを行うことができます。したがって、Z3は解決策がないことを示すために他の戦略を使用しなければなりません。
また、命題論理への縮小は、非常に小さな解(符号化するビット数が少ない解決策)がある場合にのみ機能します。
Z3は、非線形整数演算のための良いサポートを持っていない:私は次のポストにいることを議論します。上記のアプローチは非常に単純です。
http://reference.wolfram.com/legacy/v5_2/functions/AdvancedDocumentationDiophantinePolynomialSystems
最後に、非線形本当の算術(NLSat)ソルバーが非線形整数問題に対してデフォルトで使用されていません。私の意見では、Mathematicaは技術の最も包括的なポートフォリオを持っているようです。通常、整数問題には非常に効果がありません。 それにもかかわらず、整数問題にもZ3にNLSatを使用させることができます。
(check-sat)
(check-sat-using qfnra-nlsat)
では、このコマンドを使用すると、Z3は、現実の問題として問題を解決します:私達はちょうど交換する必要があります。実際の解が見つからない場合は、整数解が存在しないことがわかります。解が見つかった場合、Z3は解が整数変数に実際に整数値を割り当てるかどうかをチェックします。そうでない場合は、
unknown
を返して、問題の解決に失敗したことを示します。
- 1. Z3非線形算術によるパフォーマンス
- 2. SharePoint計算フィールドの数値が10進数か整数かをどのように計算しますか?
- 3. 整数型テストカバー用線形計画式?次のように
- 4. どのようにC#は非同期処理を処理しますか?
- 5. FortranとMPI_Reduceはどのように整数オーバーフローを処理しますか?
- 6. Z3:線形代数を表現する
- 7. 非線形整数演算が非線形整数演算ではないのに、非線形実演算可能と判定されるのはなぜですか?
- 8. 混合整数式線形計画のためのpyomoとcplex並列計算
- 9. pytorchは単純な線形回帰モデルの勾配をどのように計算しますか?
- 10. 混合整数演算 - Z3の証明
- 11. sess.runを実行するときのテンソルフローはどのように計算グラフを処理しますか?
- 12. どのように非線形二次システムをプロットしますか?
- 13. ルビはどのようにゼロ除算を処理しますか?
- 14. JQueryUIオートコンプリートはどのように非同期結果を処理しますか?
- 15. ファクタシアルを計算する際の長形式の処理
- 16. (整数)線形計画問題/解を持つデータベースはありますか?
- 17. Pythonで線形回帰モデルのAICを計算するにはどうすればよいですか?
- 18. tensorflow - 線形回帰は、計算グラフ
- 19. RESTはこの処理をどのように処理しますか?
- 20. 多角形の点をどのように反復処理しますか?
- 21. フィボナッチ数の計算にはRecursiveTaskはどのように機能しますか?
- 22. trec evalはどのようにMAPを計算しますか?
- 23. Luceneはマルチフィールドスコアをどのように計算しますか?
- 24. MATLABはimmseをどのように計算しますか?
- 25. 多変量線形回帰の係数を計算する
- 26. Z3で再帰関数を処理するには?
- 27. rは非数値データの標準偏差と分散をどのように計算しますか?
- 28. 非常に大きな整数を計算する
- 29. 線形近似テーブルの計算SBox
- 30. 非整数で二項係数を計算する方法
これは有効な質問です。投票しないで投票してください。ありがとう。 –