タグ付けされた質問 「hoare-logic」

5
正当性の証拠がないアルゴリズムの例
Hoareのロジックがあります。なぜアルゴリズムは正しいのに、それでも正しいという証拠がないのでしょうか?アルゴリズムがCで表現されていると仮定します。その後、ステップごとに、想定されていることを実行していると主張できます。 だから私の質問は: 正しいが、正確性の証拠がないアルゴリズムの例を教えてください。 編集:少しの背景が私がどこに行くのかを明確にするのに役立つと思います。スコットアーロンソンを引用します。 1970年代以降、P ≠≠\ne NPは、ツェルメロフレンケル集合論などの数学の標準公理系から独立している(つまり、証明可能でも反証不可能でもない)可能性があるという推測がありました。明確にするために、これは次のいずれかを意味します NP完全問題の多項式時間アルゴリズムは存在しませんが、それを証明することはできません(少なくとも通常の形式システムではそうではありません)、または NP完全問題の多項式時間アルゴリズムは存在しますが、それが機能することを証明できないか、多項式時間で停止することを証明できません。 2番目の可能性について言及しています。アーロンソンはそれを可能性として自信を持ってリストできるので、タイプ2の既存の例があるに違いないと思います。だから私はこの質問をしています。しかし、迅速かつ明確な答えは見当たらないようです。

1
Dependent type、refinement typeおよびHoare Logicの違い
私はほとんど依存型理論を知っていません。ウィキペディアから: 依存型とは、定義が値に依存する型です。 そして、私のタイプ理論のコースから、依存型は次のとおりであることを思い出します: タイプによってインデックス付けされたタイプのファミリー。 しかし、私は依存型と絞り込み型とhoareロジックに関して混乱しています。 Depenedentとリファインメントタイプから、リファインメントタイプはHoareロジックのように見えるためです。満たさなければならない述語を述べることを許可する以外に、さらに多くの電力調整タイプが提供します(Hoare Logicとほぼ同じように見えます)。 依存型は、絞り込み型と比較してどのような追加物を提供しますか?依存型は、洗練型+飽和/制約ソルバーよりも強力です。 誰でも例で空気をきれいにすることができます。

2
Hoareスタイルの正当性の証明中に配列を処理する方法
この質問に関する議論の中で、Gillesは、配列を使用するアルゴリズムの正当性の証明には範囲外の配列アクセスがないことを証明する必要があることを正しく述べています。ランタイムモデルによっては、ランタイムエラーが発生したり、配列以外の要素にアクセスしたりします。 このような正当性の証明を実行する一般的な手法の1つは(少なくとも学部の研究では、おそらく自動検証で)、Hoareロジックを使用することです。標準のルールのセットに配列に関連するものが含まれていることは知りません。それらはモナド変数に制限されているようです。 形の公理を追加することを想像できます {0≤i<A.length∧P[A[i]/E]} A[i]:=E; {P}{0≤i<A.length∧P[A[i]/E]} A[i]:=E; {P}\qquad \displaystyle \frac{}{\{0 \leq i \lt A.\mathrm{length} \land {P[A[i]/E]} \}\ A[i] := E;\ \{P\}} ただし、右側の配列アクセスをどのように処理するか、つまり、あるステートメントx := Eの複雑な式一部である場合は、はっきりしません。EEEx:=Ex:=Ex := E 配列アクセスをHoareロジックでモデル化して、無効なアクセスがないことをプログラムの正確性を証明できるようにするにはどうすればよいですか? 答えが我々以外の文で使用される配列要素を許可しないと仮定することができるまたはいくつかの一環としてEにおけるX := Eこの表現を制限しないように。一時的な変数にいつでも必要な値を割り当てることができます。つまり、t := A [ i ]と書きます。i f(t > 0 )… i f(A [ i ] > 0 )の代わりに…A [ i ] …

1
Hoare-FloydロジックとScott–Stracheyセマンティクスの間の主要なブレークスルーは何でしたか?
ミルナーのマイクゴードンによる「厳密な証明を支援するための機械の使用」についての解説を読んでいます。このペーパーでは、Dana ScottとStracheyによる表示セマンティクスのアイデアからLCFがどのように生まれたかを説明します。 FCFを開発するにはFloyd-Hoareロジックでは不十分であるように見えますが、なぜこれが当てはまるのかはわかりません。最後に、Hoareロジックでは、いくつかの前提条件を満たし、関係を介していくつかの事後条件適合するプログラム状態を扱い、Iはこの式を提供できます。ウィキペディアは、意味論的意味論は次のように述べています:PPPrrrQQQ は、言語からの式の意味を説明する数学的オブジェクト(表記と呼ばれる)を作成することにより、プログラミング言語の意味を形式化するアプローチです。 Hoareロジックでは、再帰を扱った覚えがありませんでしたが、このアプローチでインスタンス再帰がいくつかの関係の固定点としてどのようにモデル化されるかに関するいくつかの直観に精通しています。それでも、両方のアプローチは、数学的関係を使用して入力と出力の間の関係を記述しようとするようです。 質問 それでは、Hoareロジックと表記セマンティクスの違いは何ですか?表示セマンティクスはプログラムのいくつかの複雑さをよりよく管理しますか?その場合は、例を挙げて説明してください。 たぶん、次のミルナーの表記意味論に関する引用は、あなたの答えを導くのに興味深いです: このロジックでプログラミング言語の構文を書き留め、ロジックでセマンティクスを記述することができました。

1
Hoareロジック-ループの正確性
次の形式のwhileループについて考えてみます。 while (C) {S}while (C) {S}\texttt{while (C) {S}} 条件とループの本体。CC\texttt{C}SS\texttt{S} ましょうと、それぞれ不変とこのループの変異体です。whileループの完全な正確さに関する規則は、私の教科書で次のように示されています。II\texttt{I}VV\texttt{V} もしI⇒V≥0I⇒V≥0\texttt{I} \Rightarrow \texttt{V} \geq 0 そして、[I∧C∧V=v0]S[I∧V&lt;v0][I∧C∧V=v0]S[I∧V&lt;v0][\texttt{I} \land \texttt{C} \land \texttt{V} = v_0] \,\texttt{S} \, [\texttt{I} \land \texttt{V} < v_0] 次に[I]while (C) {S}[I∧¬C][I]while (C) {S}[I∧¬C][\texttt{I}] \, \texttt{while (C) {S}} \, [\texttt{I} \land \neg \texttt{C}] 私が理解していると思うことから、ループが終了するためには、バリアントが厳密に減少しなければならず、それもゼロによって制限されている必要があります。しかし、それを数学的に翻訳すると、教科書とは異なる命題が得られます。 VV\texttt{V} [V≥0∧V=v0]S[V≥0∧V&lt;v0][V≥0∧V=v0]S[V≥0∧V&lt;v0][\texttt{V} \geq 0 \land \texttt{V} …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.