タグ付けされた質問 「program-verification」

仕様を考えると、プログラムはそれを満たしますか?

4
契約と依存型付けとの関係
私は依存型とプログラミング契約に関するいくつかの記事を読んでいます。私が読んだことの大部分から、契約は動的にチェックされる制約であり、依存型は静的にチェックされるようです。 部分的に静的にチェックされる契約を持つことは可能だと私に思わせたいくつかの論文がありました: ハイブリッド型チェック(C.フラナガン-2006) ハイブリッドタイプと契約の統合(J.グロンスキー、C。フラナガン-2007) これにより、かなりの量の重複があるようで、契約と従属タイプの分類が消え始めます。 どちらの概念にも、私が見逃しているものがありますか?それとも、これらは、同じ基本概念を表すファジーカテゴリに過ぎませんか?

9
ミッションクリティカルなソフトウェアの作成方法
私は正式な方法を自習しています。ミッションクリティカルなソフトウェア(原子炉コントローラー、航空機飛行コントローラー、宇宙探査機コントローラーなど)を作成するために、正式な方法が使用される(そして通常のみ使用される)と聞きました。それが私がそれを学ぶことに興味がある理由です:p ただし、正式な方法(特にLTL、CTL、およびそれらの兄弟)を学習した後は、仕様の正確さ(安全性、活性、公平性など)を検証するためにのみ使用できると感じています。 しかし、ソフトウェア(仕様だけでなく)が実際に正しいことを確認する方法は? 免責事項:理論的なコンピューターサイエンスに関しては、私は90%のバカです。答えながら慈悲深くあってください。

1
証明に「高次推論手法」が必要かどうかを判断する方法は?
質問: 公理と目標からなる問題の仕様があると仮定します(つまり、関連する証明問題は、すべての公理が与えられた場合に目標が満たされるかどうかです)。また、問題には公理間の矛盾や矛盾は含まれないと仮定します。問題を証明するには「高次の推論」が必要であることを事前に(つまり、完全な証明を構築せずに)決定する方法はありますか? 「高次の推論」とは、高次のロジックを書き留める必要がある証明手順を適用することを意味します。「高次推論」の典型的な例は帰納法です。原則として帰納法を書き留めるには、高次論理を使用する必要があります。 例: 「2つの自然数の加算は可換ですか?」という証明問題を指定できます。一次論理を使用する(つまり、コンストラクターzero / succを使用して自然数を定義し、標準公理とともに、「プラス」関数を再帰的に定義する公理と一緒に定義する)。この問題を証明するには、 "plus"の最初の引数または2番目の引数の構造の帰納が必要です( "plus"の正確な定義に依存)。入力問題の性質を分析するなどして、証明しようとする前にこれを知っていましたか?(もちろん、これは説明のための単なる例です-実際には、これはプラスの可換性よりも難しい証明問題にとって興味深いでしょう。) もう少しコンテキスト: 私の研究では、Vampire、eproverなどの自動化された1次定理証明を適用して、証明問題(または証明問題の一部)を解決しようとすることがよくあります。多くの場合、証明者は証明を思いつくのにかなりの時間を必要とします(ただし、1次推論手法のみを必要とする証明がある場合)。もちろん、高次の推論を必要とする問題に一次定理証明器を適用しようとすると、通常はタイムアウトになります。 したがって、証明問題が高次の推論手法を必要とするかどうかを事前に伝えることができる方法/技術があるかどうか疑問に思っていました)少なくとも、特定の入力の問題のために。 私は自分の質問に対する答えを文献で探し、定理の分野の仲間の研究者にそれについて証明しましたが、今のところ、良い答えはありませんでした。私の期待は、インタラクティブな定理証明と自動化された定理証明(Coqコミュニティ?Isabelleコミュニティ(Sledgehammer)?)を組み合わせようとする人々からのこのトピックに関する研究があることです。 一般に、ここで概説した問題は決定できないと思います(そうですか?)。しかし、問題の洗練されたバージョンには良い答えがあるかもしれません...?

2
プログラム翻訳の完全な完全性と完全な抽象化
コンパイラー検証の努力は、多くの場合、コンパイラーが完全に抽象的であることを証明することに帰着します。つまり、(コンテキストの)同等性を保持および反映します。 代わり長谷川[により、いくつかの最近(カテゴリベース)コンパイラ検証作業を完全抽象プルーフを提供する1、2 ]とエッガーら。等 [ 3 ]さまざまなCPS翻訳の完全性を証明します。 質問: 完全な完全性と完全な抽象化の違いは何ですか? 私にとって、完全性は翻訳の等価性の反映のように見え、完全性は等価性の保存の結果であるように見えます。 注:Curien [ 7 ]とAbramsky [ 8 ]はともに、定義可能性、完全な抽象化、およびある程度完全な完全性の間の関係を調査します。これらのリソースには私の質問に対する答えがあるかもしれませんが、表面を読んだ後、私はまだそれを確認していません。 背景:「完全な完全性」という用語は、乗算線形論理のゲームセマンティックモデルの正確さを特徴付けるために、アブラムスキーとジャガディーサン[ 4 ] によって作られました。 Blute [ 5 ]は以下の定義を提供します: してみましょうFF\mathcal{F}無料カテゴリなります。私たちは、カテゴリモデルと言う MM\mathcal{M}あるため、完全に完全に FF\mathcal{F}または我々が持っていること の完全な完成度FF\mathcal{F}に関してMM\mathcal{M}の発電機のいくつかの解釈に関して、場合、ユニークな無料ファンクタ[[−]]:F→M[[−]]:F→M[\![ - ]\!] : \mathcal{F} \rightarrow \mathcal{M}がいっぱいです。 私の知る限り、[ 6 ]の長谷川は、完全な完全性を適用して、カテゴリーの意味モデルではなくプログラムの翻訳を記述する最初の人物です。この場合、ギラード変換は、単純に型指定されたラムダ計算から線形ラムダ計算になります。後に、[ 1 ]で、彼はCPS翻訳の完全性 definesを次のように定義しています(⋅)∘(⋅)∘(\cdot)^\circ。 もしで誘導線形ラムダ計算は、存在Γ ⊢ Mは:σように計算ラムダ計算におけるΓ ○は。∅ ⊢ M ∘ = N :(σ …

2
CoqのOCamlの形式的なセマンティクス
OCamllightと呼ばれるOCamlの大きなサブセットのセマンティクスは、数年前にOwensによってHOLで形式化されました。最近、OCamlのより小さなサブセットの型理論セマンティクスが、Kreitz 、Hayden、およびHickeyによってNuprlに実装されました。 Coqに同様の開発はありますか?

3
終了を部分的な正確さに減らすのはどれくらい難しいですか?
プログラムの検証に精通している場合は、背景の前に質問を読むことをお勧めします。プログラムの検証に慣れていない場合でも、この質問に答えることはできますが、背景を最初に読むことをお勧めします。 バックグラウンド 部分的な正確性の確認は決定できないとしばしば言われます。議論のために、フロイドのスタイルでこの声明を正確にする1つの非常に特定の方法を選んでみましょう-ホア。フローグラフは区別付き有向グラフである初期のノードのすべてのノードが到達可能であるから。プログラムは、そのノードでコマンドです流れ図です。コマンドには3つのタイプがあります(1)前提条件は q、(2)アサーションは qをアサート、(3)割り当てはv:= eです。ここで、qはfol(1次論理)式、eはfol項、vは変数です。 我々は、プログラムがあると言う部分正しい各ノード注釈を付ける方法がある場合、XとA前提条件A(X)と事後条件のB(x)のように、(1)は、最初のノードの前提条件が有効である、(2){ a(x) } x { b(x) }はすべてのコマンドxに適用され、(3)(b(x)はa(y)を意味します)はxからyまでのすべてのエッジに有効です。ここで、Hoareトリプルは次のように定義されます。 { p } assert q { r }は、(pが(q and r)を意味する)が有効であることを意味します { p } は、 q { r }が((pおよびq)がrを暗示する)が有効であることを意味すると仮定する { P } V:= E { R((つまり}手段PとEの代わりにVが)を意味し、Rは)有効です この部分的な正しさを確認することが決定できない理由について、手で波打った議論があります:a(x)とb(x)を入力したら、いくつかのfol式が有効であるかどうかを確認する必要があります。 部分的に正確に終了をエンコードする一般的な方法は、「前回実行されてから終了に向かって進行した」と本質的に言う特別なアサーションを追加することです。これらの進行アサーションは、フローグラフ上のすべての無限ウォーク(初期ノードから開始)に無限に多くの進行アサーションが含まれるように配置する必要があります。具体的には、進行アサーションの形式は 常にassert u < vで、ここでuとvは正の整数であり、割り当てu:= fが先行し、その後に割り当てv:= uが続くとしましょう。ここでfはバリアント関数、uは現在の値、vは以前の値です。ここで、「正の整数」について説明し、それらを比較するため、folよりも少し多く使用できることを確認する必要があります。Peano算術が使用可能であるとしましょう。(この選択については強く感じません。都合が良ければ無視してください。)もちろん、fはプログラムで言及されている他の関数や定数を使用するかもしれません。(プログラムの最初に仮定を追加することは、非論理公理を導入することと同等であることに注意してください。) これで、進行状況のアサーションがあるプログラムがまだ部分的に正しい場合、元のプログラムが終了することがわかります。 質問 終了プログラムを考えると、進行状況の表明のためのバリアント関数を思いつくのは難しいと感じています。しかし、どのくらい難しいですか?(上記の大きな背景があっても、見方によっては、この質問を未解決または未定義のままにしておくことを知っています。) 別の言い方をすれば、終了を部分的な正確さまで減らす問題を形式化し、その複雑さについて何かを述べているリファレンスを探しています。もちろん、これをすべて行う回答は歓迎されます。

6
ラベル付き遷移システムの実際に計算可能なプロパティとは何ですか?
ラベル付き遷移システムは、アプリケーションに適したモデルであることがわかりました。つまり、LTSを使用したユースケースのモデリングに関する論文があります。問題は、LTSについて簡単に証明できることです。既存のソリューションを再利用して、それらが私の用途に役立つかどうかを確認したいと思います。LTS(およびユースケース)のどのプロパティを簡単に自動的に証明できるかを知りたいので、ユースケースの問題に実際的な対応物があるかどうかを判断できます。

2
モナドクラスの最先端?
決定問題の単項クラスとしても知られる単項一次論理では、すべての述語が1つの引数を取ります。アッカーマンによって決定可能であることが示されており、NEXPTIME-completeです。 ただし、SATやSMTなどの問題には、理論的な限界にもかかわらず、それらを解決するための高速アルゴリズムがあります。 私は疑問に思っています、一次論理のSAT / SMTに類似した研究はありますか?この場合の「最先端」とは何ですか?また、最悪の場合に理論的な限界に達したにもかかわらず、実際には効率的なアルゴリズムはありますか?

1
タイプシステムは遅延関連のメモリリークを防ぎますか?
おそらく、Haskellのパフォーマンスの問題の主な原因は、プログラムが無制限の深さのサンクを誤って構築した場合です。これにより、評価時にメモリリークと潜在的なスタックオーバーフローの両方が発生します。古典的な例はsum = foldr (+) 0Haskell での定義です。 遅延言語を使用するプログラムでこのようなサンクの欠如を静的に強制する型システムはありますか? これは、タイプシステム拡張を使用して他の静的プログラムプロパティを証明するのと同じ難易度であると思われます。

1
プルーフキャリーコードでプルーフチェッカーが必要な理由
Neculaによる古典的なPLDI'98論文「認証コンパイラの設計と実装」では、高レベルの検証者は以下を使用しています。 検証条件を生成するVCGen(安全述語) 条件を証明する一次論理定理証明者 ステップ(2)からの証明をチェックするLF証明チェッカー 手順(3)で少し混乱しています。なぜそれが必要なのですか?(1)と(2)だけでは不十分でしょうか?定理の証明者によって生成された証明を信頼しないのはなぜですか?

1
量子サンプリング、シミュレーション、および拡張チャーチ-チューリング(ECT)テストにおける検証の適切な役割は何ですか?
回答がなかったため、この質問をコミュニティーWikiに変換することを要求するフラグが設定されています。 Aaron Sterling、Sasho Nikolov、およびVorのコメントは、コミュニティーWikiディスカッションに公開されている次の解決策に統合されました。 解決済み: 数値、サンプル、またはシミュレーションの軌跡を出力する従来のアルゴリズムに関して、厳密な数学的論理では、次の4つの命題すべてを受け入れるか、どれも受け入れないようにする必要があります。 乱数を生成するための多項式時間の古典的なアルゴリズムを除外できます。 [1] 「多項式階層が無限であるという唯一の仮定の下で、多項式時間の古典的アルゴリズムを除外して、量子コンピューターの出力分布をサンプリングできます。」 [2] 「[量子力学的軌道] を通常の方法でシミュレーションすることはできません。変数が多すぎます。」ψ(t)ψ(t)\psi(t) [3] 古典的なアルゴリズムでは乱数を生成できないという厳密な理由により、拡張されたChurch-Turing-Thesis(ECT)は除外されています。 [4] 議論を始めるために、ここでは肯定的および否定的な応答を示しますが、これらはそれぞれ防御可能ですが、意図的に誇張されています。強く肯定的な議論は次のようになるでしょう: 肯定: これらの4つのステートメントは、厳密さを尊重するために、乱数、ランダムサンプル、または量子シミュレーションを生成する従来のアルゴリズムについて話すのではなく、疑似乱数を生成する従来のアルゴリズムと(拡張)疑似ランダムサンプル、および疑似量子シミュレーション。 これは理解されており、4つのステートメントすべてが真実です。さらに、曖昧さを避け、混乱を防ぐために、数学者は科学者やエンジニアに、「ランダム」、「サンプル」、および「量子シミュレーション」のほとんどすべての使用法に接頭辞「疑似-」を付けるように奨励する必要があります。 強く否定的な引数は次のようになります。 否定: これらのステートメント(および関連する正式な定理)は、数学のラカトススタイルの「歓楽街」に案内する標識です。、擬似サンプリング、擬似シミュレーション…美味しく罪深い理由から楽しい数学の実践:彼らは、正式な論理では不可能であると言う数学的な効果を達成します。したがって、この結論よりも不思議で楽しいものは何ですか?決議の4つのステートメントはそれぞれ正式には真実ですが、実際には偽ですか? これは理解されており、4つのステートメントはすべて誤りです。さらに、「ランダム性」、「サンプリング」、および「量子シミュレーション」のほとんどの実際的な採用は、この魔法の環境で発生するため、コルモゴロフの複雑さと問題の評価に故意に見過ごされているため、使用法を変更する必要があるのは数学者です。 ただし、現実的には、複雑さの理論家は、ランダム性、サンプル、シミュレーションに関連する調査結果をどのように表現するべきでしょうか。他のSTEM分野との低ノイズ通信の維持に向けて 後者の目標は、暗号化、統計テスト、機械学習、量子シミュレーションなどの分野で実用的な機能が着実に増加するため、特に重要です。 肯定的であれ否定的であれ、合理的な理由のある解答を読むことは非常に役立ちます(そして楽しいことでもあります)。 尋ねられる質問は サンプリング、シミュレーション、拡張Church-Turing(ECT)論文のテストに関連する複雑さの理論的定義における検証の一般に受け入れられている役割は何ですか? 推奨される答えは、これらの問題を詳細に説明する記事、モノグラフ、またはテキストへの参照です。 この文献がまばらであるか、その他の点で不十分であることが判明した場合は、(2日後に)この質問をコミュニティーWikiに変換して質問します。 サンプリング、シミュレーション、および拡張チャーチチューリング(ECT)論文のテストに関連する複雑さの理論的な定義における検証の妥当で適切な役割は何ですか? バックグラウンド 質問は、最近のスレッド「Church-Turingの論文を否定することはどういう意味ですか?」、具体的にはGil KalaiとTimothy Chowによる(優れたIMHO)回答 尋ねられた質問では、「適切および/または受け入れられた複雑さの理論的定義」という語句は、アリスが以下のような信じられないような主張をするのを抑制するものと解釈されます。 アリス:これ は、私の(1光子)線形光ネットワークによって計算された真にランダムな2進数の実験サンプルです。ボブ:これ は、古典的なチューリングマシンによって計算された疑似ランダム数字のシミュレーションサンプルです。アリス: ボブさん、ごめんなさい...あなたのサンプルはアルゴリズム的に圧縮可能ですが、私のものはそうではありません。したがって、私の実験データは、ECTが誤っていることを示しています!」 検証とサンプリングの関連付けがない場合、アリスの推論は申し分のないものです。言い換えれば、複雑性理論家はECTをすでに数十年前に正式に反証されていると見なすべきですか? 実用的な観点から、多様な状態空間での量子軌道サンプリングに関連するシミュレーション手法は、科学と工学の多くの分野で広く使用されるようになっています。そのため、科学と工学における検証の中心的な役割(複製可能性と切り離せない)を尊重するサンプリングの複雑さの理論的な定義は、科学者やエンジニアの実践に非常に歓迎されます。特に、これらの定義に、検証済みのサンプリング。 追加編集: ジュネーブ大学と会社ID Quantiqueの間のコラボレーションのおかげで、実際にこの演習を完了することは完全に実現可能です。 以下は、アルゴリズム的に非圧縮性であるとid Quantiqueによって認定されている1024個のランダムビットです。 0110001000010111111100010111001000101110110001001100000010010110 0101000110100011101001110110000001010110011101111110101010110100 1001001110001110101000001110000101000110000001010001101001000000 …

2
オリジナルのHoare Logicターミネーションペーパー
Hoare(または私が推測する他の誰か)が終了(Total Correctness)について議論している元の論文を探しています。または、「バニラ」Hoareロジックの終了に関する他の初期の作業(私はCのようなおもちゃの言語のHLを意味していると思います)。 私はコンピュータープログラムの公理的根拠(PDF)(本質的に部分的正しさのフレーバーのHoareロジックのようです)と 、whileルールの証明に言及しているforルールに関するメモを見てきましたが、見えませんミッシングリンクを見つけるために; 終了/ whileルール/全体の正確性に関する論文。

1
カリー・ハワード通信に関連する証明技法
プログラムの正式な概念に関する情報源を探しています。これはCurry-Howardの対応と密接に関連しているようですが、これをUniversal Turing Machinesに追跡し、TMの説明と入力を読み取るその機能を利用することもできます。 カリーハワードのコレスポンデンスについて読むとき、UTM-sの原始性がプログラムの研究に害を及ぼす可能性があると感じます。高レベルの計算システムを定義して検討するという反対のアプローチはありますか?それについての良いリソースは何ですか?

2
チューリングマシン(またはより単純な形式言語)の差分計算の開発で行われた作業はありますか?
開発者が考案した概念的な理想的なチューリングマシン(たとえば、ソフトウェア開発者が意図するもの)とと呼ぶ、実際に設計されたソフトウェアを表すマシンとの差異計算の概念を開発しようとしています実装、言うMのαとMのβをそれぞれ、。M私M私M_IMαMαM_\alphaMβMβM_\beta 具体的には、理想的なマシンで処理される言語と、開発/実装されたマシンで処理される言語との間のソフトウェアプログラムのエラーの自動検出における制限(たとえば、ライスの定理による)を調べることに関心があります。 指定された2つのチューリングマシンの違いを探る、またはより低いレベルのフォーマル言語を除外するといういくつかの概念で機能する以前の作業への参照は、非常に役立ち、高く評価されます。書くより引用するほうがいいからです:-)。

2
すべてのまともなLTLからBuchiへの変換またはその他のLTL検証アルゴリズムの最も簡単な実装は何ですか?
私はおもちゃのモデルチェッカーを書いており、LTLからBuchiへのオートマトン変換を実装する段階にきました。 さまざまな明白な理由から、アルゴリズムは単純であることを望みます:)たとえば、コードをできるだけ長く、簡潔かつ簡潔にしておく必要があります。 私は複数のチュートリアルで説明されている「ローカルオートマタ+偶然性オートマトン」のアプローチを見てきましたが、実装/理解するのは簡単ではないようです(正確性の証明は非常に大きい)。だから私はそれを後悔しないと確信するまでそれを実装しません:) したがって、この翻訳の単純で効率的なアルゴリズム、またはおそらく単純で非効率的なアルゴリズムについて説明している論文への参照に感謝します。Buchiオートマトンの最小化に関する論文も歓迎します:) ...あるいは、LTL検証に興味深い代替アプローチはありますか? 参考までに、ここにLTLからBuchiへの変換アルゴリズムの系図を示しますhttp://spot.lip6.fr/wiki/LtlTranslationAlgorithms。誰もがこれらについて何か言うことができますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.