問題タブ [formal-methods]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - C用のJavaモデリング言語?
少し前に C の形式仕様言語について何かで読んだ記憶がありますが、今は必要なため見つけられません。
これは JML に触発されたもので、私が見た限りでは同じ構文を使用していました。
私が見つけた唯一の参照は論文ですが、私が話しているのはそれよりも洗練されたものです.
これがあなたに鐘を鳴らしたら...
誰もこれについて知らない場合は、C で正式な検証と自動テスト生成を行う方法についてお知らせいただければ幸いです。
前もって感謝します。
logic - ソフトウェア検証のロジック
自動ソフトウェア検証の要件を調べています。つまり、コード(CやJavaなどの言語で記述された通常の手続き型コード)を取り込むプログラムは、各ループを最終的に停止する必要があり、アサーションに違反しないという一連の定理を生成します。 、nullポインターなどの逆参照は決してありません。次に、それが実際に真であることを証明するために定理証明者に渡します(または、コードのバグを示す反例を見つけます)。
問題は、どのようなロジックを使用するかです。2つの主要な位置は次のようです。
一階述語論理は問題ありません。
一階述語論理は十分に表現力がありません。高階述語論理が必要です。
問題は、両方のポジションに多くのサポートがあるようだということです。では、どちらが正しいのでしょうか。それが2番目の場合、一階述語論理に基づくベリファイアで問題が発生する、実行したいことの利用可能な例はありますか?
formal-methods - Alloyで日付までにアイテムを取得する
私はこの正式な方法の宿題の問題で立ち往生しており、何が正しくないのかわかりません。
次のように定義されている Item と ToDo の 2 つの署名があります。
指定された日付とカテゴリの項目を ToDo のリスト セットに挿入する関数を定義する必要があります。秘訣は、リスト セットがアイテムの期日順に並べられることになっていることです。ステップと日付の両方に順序があります。
私の質問は次のとおりです。ToDo.list 内のアイテムのセットを特定の日付で取得するにはどうすればよいですか? 私は機能を持っています:
そして、次のコード(およびそのバリエーション)を使用してアイテムのセットを取得しようとしました:
t.due.st が一連の日付を残すため、これは機能しません。その理由は理解できます。しかし、その時点からの他の試みは私をそこに連れて行きません。括弧を使用して、t に到達する前に「due.st」と「d」の間の結合を評価しようとしましたが、それは機能せず、角括弧を使用して順序を変更しようとしましたが、動作しません。ここで何か間違ったことをしていることは知っていますが、何が原因なのかわかりません。
testing - Haskell 関数は、正しさのプロパティで証明/モデルチェック/検証できますか?
アイデアの続き:証明可能な実世界の言語はありますか?
あなたのことはわかりませんが、保証できないコードを書くことにうんざりしています。
上記の質問をして驚異的な回答を得た後 (ありがとうございました!) Haskellへの証明可能で実用的なアプローチの検索を絞り込むことにしました。私が Haskell を選んだのは、それが実際に有用であり (Haskell用に書かれた多くの Web フレームワークがあり、これは良いベンチマークのようです) 、機能的に十分に厳密であり、証明可能であるか、少なくとも不変条件のテストが可能であると考えたからです。
これが私が欲しいものです(そして見つけることができませんでした)
psudocode で記述された Haskell 関数 add を参照できるフレームワークが必要です。
- そして、特定の不変量がすべての実行状態を保持しているかどうかを確認します。正式な証明が欲しいのですが、モデルチェッカーのようなもので解決します。
この例では、値aとbを指定すると、戻り値は常に合計a+bになります。
これは簡単な例ですが、このようなフレームワークが存在することは不可能ではないと思います。テストできる関数の複雑さには確かに上限があります (関数への 10 個の文字列入力は確かに長い時間がかかります!) が、これは関数のより慎重な設計を促進し、他の形式を使用する場合と違いはありません。メソッド。Z または B を使用することを想像してみてください。変数/セットを定義するときは、変数に可能な限り小さい範囲を指定するようにしてください。INT が 100 を超えることがない場合は、そのように初期化してください。このような手法と適切な問題分解により、Haskell のような純粋関数型言語の十分なチェックが可能になるはずです。
私は正式なメソッドや Haskell の経験はまだありません。私のアイデアが正しいものなのか、それとも Haskell は適していないと思うのか教えてください 別の言語を提案する場合は、「has-a-web-framework」テストに合格することを確認し、元の質問を読んでください:-)
c++ - KDE などの大規模な分散 C++ プロジェクトをモデル チェックするためのツール?
KDE などの大規模で実世界のほとんどが C++ の分散システムのモデル チェックを処理できるツールはありますか?
(KDE は IPC を使用するという意味で分散システムですが、通常はすべてのプロセスが同じマシン上にあります。はい、ちなみに、これは「分散システム」の有効な使用法です - ウィキペディアを確認してください。)
このツールは、プロセス内イベントとプロセス間メッセージを処理できる必要があります。
(ツールが C++ をサポートしているが、moc などの KDE が使用する他のものをサポートしていない場合、何かをハックして回避できると仮定しましょう。)
実際のモデル チェッカーの代わりに、あまり一般的でないもの (特定のクラスのバグを見つけることに特化した静的アナライザーなど) またはより一般的な静的解析の代替手段を喜んで受け入れます。しかし、私が興味を持っているのは、KDE の規模と複雑さのプロジェクトを実際に処理できるツールだけです。
computer-science - coqでのすべての紹介?
私は(古典的に)証明しようとしています
Coqで。私がやろうとしていることは、それを反対に証明することです。
私の問題は(2)行と(5)行にあります。Uの任意の要素を選択し、それについて何かを証明し、すべてを結論付ける方法を理解することはできません。
何か提案はありますか(私は対偶を使用することを約束していません)?
coq - 再帰関数定義内でforallを使用する
関数を使用してメジャーを使用して再帰的定義を定義しようとしていますが、エラーが発生します:
ソースコード全体を一番下に投稿していますが、私の関数は
私は問題がforallsに起因することを知っています:それらをTrueに置き換えると、それは機能します。また、右側で含意(->)を使用すると、同じエラーが発生することもわかっています。Fixpointはforallsで機能しますが、メジャーを定義することはできません。
何かアドバイス?
約束通り、私の完全なコードは次のとおりです。
formal-methods - Alloy の述語の問題
したがって、Alloy には次のコードがあります。
しかし、これはキューを含むインスタンスを生成しません。なぜだろうか。ノードを持つインスタンスのみが表示されます。同等の述語を試しました
しかし、出力は同じです。
何か不足していますか?
java - Alloy インスタンスを使用して Java インスタンスを作成し、テストケースを自動的に生成する
自動化されたテストケース生成の研究プロジェクトに Alloy4 を使用したいと考えています。誰でもこれで私を助けてくれますか?Alloy で生成されたインスタンスを使用して Java インスタンス オブジェクトを作成するために Alloy を使用するにはどうすればよいですか?
loops - 「確実に終了するにはループを折りたたむ必要がある」とはどういう意味ですか?
形式手法に関する論文で「ループを折りたたんで終了させる必要がある」(正確には抽象解釈)に出くわしました。終了の意味はわかりますが、折り畳まれたループとは何か、ループで折り畳みを実行する方法もわかりません。
誰かが私に折り畳まれたループが何であるかを説明してもらえますか?そして、それが暗黙的ではない場合、または折り畳まれたループの定義にすぐに従わない場合、これはどのように終了を保証しますか?
ありがとう