タグ付けされた質問 「operational-semantics」


2
この分数のような「離散数学」スタイルの表記法は、正式なルールに使用されますか?
「A Conflict-Free Replicated JSON Datatype」という論文で、「ルール」を正式に定義するためにこの表記法に出会いました。 この表記は何と呼ばれますか?どうやって読むの? 例えば: DOCルールは、「分子」には何も持っていません-なぜありませんか? EXECそしてGET規則はそれがどういう意味、ライン上記の二つの別々の用語を持っているように見えますか? VAR他の多くのルールがトップアップ(私は「意味」を意味するのにかかる)矢印のいくつかの並べ替えを使用しながら、この1つは、xのみが何かの要素であると言っているように見えるので、ルールは、同様に少し目立ちます。 Ap,「レプリカpの状態はAp、有限部分関数によって記述されている」とテキストで説明されているイニシャルがほとんどすべてにこだわっています。この表記法に精通した読者は、どの規則のその部分を「見る」傾向がありますか? このサイトは、小さなステップに関するこの質問の最初のルールとして、⟨B、s⟩->⟨B '、s'⟩の重要性についての質問について、いくつかの非常に類似した表記を持つ関連する質問を提案しましたセマンティクス?—これはOperational Semanticsとしてタグ付けされており、それが強力なリードと思われます。それは確かに私がこれらの図を解釈すべきフレームワークですか?これを「クラッシュコース」形式で簡単に要約してください。そうすれば、彼らの証明の正確性を検証できなくても、少なくともこのセクションで彼らが言っていることをもう少し理解できるでしょうか。

2
意味論的意味論では操作上の意味論ではできない質問に答えることができますか?
プログラミング言語を定義するための操作上のセマンティクス(小さなステップと大きなステップの両方)に精通しています。表記法のセマンティクスの学習にも興味がありますが、努力する価値があるかどうかはわかりません。異なる視点から同じ教材を学習しているだけでしょうか、それとも表示的意味論を理解することからしか得られない洞察はありますか?

3
微積分とプログラミング言語の違いは何ですか?
私は微積分学と呼ばれるものとプログラミング言語と呼ばれるものについてかなり混乱していると思います。 私は、微積分はプログラムの等価性について推論するための正式なシステムであると考える傾向があり、言われたかもしれません。プログラムには、マシンによって指定された操作上のセマンティクスがあります。このようにして、言語Lの(正しい)計算LLLは、プログラムの等価性の証明方法です。 これは私にとって合理的な分割のように思えますが、これは一般に受け入れられている意味ですか?それとも間違っているのでしょうか? 関連して、なぜいくつかの操作上のセマンティクスは非決定的です(コンフルエントであると仮定します)?戦略の選択を自由にしておくことから何が得られますか? これらについて明確に説明していただければ幸いです。さらに具体的なリファレンス!ありがとう!

1
絞り込みタイプの推測
職場では、動的言語に関する型情報を推論する必要があります。次のように、ステートメントのシーケンスをネストされたlet式に書き換えます。 return x; Z => x var x; Z => let x = undefined in Z x = y; Z => let x = y in Z if x then T else F; Z => if x then { T; Z } else { F; Z } 一般的なタイプ情報から始めて、より具体的なタイプを推測しようとしているので、自然な選択は絞り込みタイプです。たとえば、条件演算子は、trueブランチとfalseブランチの型の和集合を返します。単純なケースでは、非常にうまく機能します。 ただし、次のタイプを推測しようとしたときに、思わぬ障害に遭遇しました。 function …
11 programming-languages  logic  type-theory  type-inference  machine-learning  data-mining  clustering  order-theory  reference-request  information-theory  entropy  algorithms  algorithm-analysis  space-complexity  lower-bounds  formal-languages  computability  formal-grammars  context-free  parsing  complexity-theory  time-complexity  terminology  turing-machines  nondeterminism  programming-languages  semantics  operational-semantics  complexity-theory  time-complexity  complexity-theory  reference-request  turing-machines  machine-models  simulation  graphs  probability-theory  data-structures  terminology  distributed-systems  hash-tables  history  terminology  programming-languages  meta-programming  terminology  formal-grammars  compilers  algorithms  search-algorithms  formal-languages  regular-languages  complexity-theory  satisfiability  sat-solvers  factoring  algorithms  randomized-algorithms  streaming-algorithm  in-place  algorithms  numerical-analysis  regular-languages  automata  finite-automata  regular-expressions  algorithms  data-structures  efficiency  coding-theory  algorithms  graph-theory  reference-request  education  books  formal-languages  context-free  proof-techniques  algorithms  graph-theory  greedy-algorithms  matroids  complexity-theory  graph-theory  np-complete  intuition  complexity-theory  np-complete  traveling-salesman  algorithms  graphs  probabilistic-algorithms  weighted-graphs  data-structures  time-complexity  priority-queues  computability  turing-machines  automata  pushdown-automata  algorithms  graphs  binary-trees  algorithms  algorithm-analysis  spanning-trees  terminology  asymptotics  landau-notation  algorithms  graph-theory  network-flow  terminology  computability  undecidability  rice-theorem  algorithms  data-structures  computational-geometry 

3
whileループの小さなステップの操作セマンティクスで状態が変更されないのはなぜですか?
通常、whileループの構造的操作セマンティクス表現では、プログラムの状態は変化しません。 (whileBdoS,σ)→(ifBthenS;(whileBdoS)elseSKIP,σ)(whileBdoS,σ)→(ifBthenS;(whileBdoS)elseSKIP,σ)(while \> B \> do \>S, \sigma) \rightarrow (if \>B \> then \>S; (while \> B \> do \>S) \> else \> SKIP, \sigma) 私にとって、これは直感的ではありません。状態が変化しない場合(つまり、メモリのステータスが同じままである場合)、は引き続きtrueであり、プログラムは終了しません。BBB このルールで州が変わらない理由を誰か説明できますか?

1
現代の正規表現の表現力
私は最近、主に単語のグループを特別なプロパティと照合する正規表現の課題を提案するWebサイトについて友人と話し合いました。彼は||||||||、数|が素数であるような文字列に一致する正規表現を探していました。そのような言語は、通常であれば、補題をポンプの翻訳が素数のためにあるという事実与えますので、私はすぐにそれが今まで動作しません彼に言われた十分な大きさ、それが存在するのk ≤ pがあるようP + N kは、すべての主要ですN ≥ - 1、よく、これは全くケースしにくい(素数の配分、そのような未知の自明とプロパティを破砕、...)pppk≤pk≤pk \leq pp+nkp+nkp + nkn≥−1n≥−1n \geq -1 しかし、誰かが解決策に付属している:一致しない(||+?)\1+ キャプチャグループに一致するように、この表現しようとする(つまりすることができ||、|||、||||などの上の出現箇所)のn ≥ 2回。一致する場合、文字列で表される数はkで割り切れるので、素数ではありません。それ以外の場合です。k≥2k≥2k \geq 2|n≥2n≥2n \geq 2kkk そして、グループ化と後方参照により、正規表現が理論的な意味で...正規表現よりも実際にはるかに表現力豊かになることが明らかになったので、私は愚かに感じました。今では、実際の正規表現を実行するときに私が知らなかったルックアラウンドやその他の演算子も追加されました。 ウィキペディアによると、文脈自由文法によって生成された言語よりもさらに表現力があります。だからここに私の質問があります: 現代の正規表現エンジンを使用して、(文脈自由文法から生成された)代数言語を表現できますか より一般的な説明、または現代の正規表現で説明できる言語の種類の複雑さの少なくとも上限はありますか? より実用的には、その背後に深刻な理論がありますか、それとも有限オートマトンに基づく実際の正規表現の最初のブロックに実装可能と思われるたびに新しい機能を追加するだけですか? 「モダンな正規表現」は質問が具体的ではないことを知っていますが、少なくとも後方参照を使用することを意味します。もちろん、この「現代の正規表現」言語に対する特定の制限を想定している部分的な回答者がいる場合は、遠慮なく投稿してください。

2
Java(または一般的な命令型言語)の正式な実行モデル
いくつかの厳しい制限の下でJavaプログラムの実行に関するいくつかのステートメントを証明しようとしています(基本的に、2つのメソッドが特定の入力の一連の制約を満たす場合、それらは同等であると推測されます(つまり、戻り値と後の状態)実行は同じです)。これを証明するために、私はこれについて話すことができるある種の形式主義を探しています。 私は関数型言語の操作上のセマンティクスに精通しており、forループ/ whileループを再帰的な関数に変換できる可能性があります...これを行うのではなく、いくつかの機械を用意して命令型の土地に留まることができるとよいでしょう。 より具体的には、実行のk番目のステップでのメソッドの状態について推論したいと思います。これには、グローバルな状態が含まれます。 this.field = 2クラスの状態を更新するような呼び出し パラメータを変更する呼び出しは、メソッドの外部で状態を更新します。 myParam.setFoo(...) myParam.x = y 静的メソッドの呼び出し Blah.static_side_effects() これはすべて確定的であると想定しています。つまり、状態に対するこれらのグローバル更新のいずれかが2つのメソッドで発生し、その両方のグローバル実行状態とローカル実行状態が同じである場合、新しい状態も同じになるという仮定を正式化したいと思います-計算の各ステップが決定されるということです正確には、グローバル状態とローカル状態によって。これは明らかにRNGと並列処理を排除します(ただし、これは後で処理する可能性があります...)。 これにどのように取り組むことができるかについてのアイデアや情報源はありますか?私の唯一の考えは、メソッドをステートメントのリストとして扱い、ステートメントのセマンティクスを正式に記述しようとすることです。 できれば、JVMレベルではなく、Java言語レベルでこれを実行したいと思います。これは現実的ではないかもしれませんが、今の私の目標は、運用上のセマンティクスについていくつかの合理的な仮定を行い、そこからそれを取得することです。 ああ、最後のメモです。この質問をどのように改善できるかについての提案があれば、大歓迎です。私は質問をするのに適切な言語を見つけようとするのにちょっと気まぐれになっていて、用語を乱用しているかどうか(ローカル/グローバル実行状態など)は、これを修正したいです。

2
行列乗算プログラムの入れ子ループの不変式
Hoareロジックを使用して2つの行列を乗算するためのプログラムの正確性を証明することについて、卒業論文を作成しています。これを行うには、このプログラムの入れ子ループの不変式を生成する必要があります。 for i = 1:n for j = 1:n for k = 1:n C(i,j) = A(i,k)*B(k,j) + C(i,j); end end end 私は最初に内部ループの不変式を見つけようとしましたが、今までは本当のものを見つけることができません。上記のプログラムの不変式を見つけるのを手伝ってくれる人はいますか?
7 algorithms  loop-invariants  correctness-proof  formal-languages  regular-languages  pumping-lemma  logic  logic  programming-languages  lambda-calculus  term-rewriting  operational-semantics  complexity-theory  time-complexity  computability  proof-techniques  reductions  digital-preservation  distributed-systems  storage  algorithms  dynamic-programming  check-my-algorithm  reference-request  cryptography  quantum-computing  formal-languages  regular-languages  context-free  formal-grammars  algorithms  graphs  network-flow  algorithms  data-structures  randomized-algorithms  lists  computability  proof-techniques  undecidability  terminology  distributed-systems  parallel-computing  artificial-intelligence  heuristics  search-problem  algorithms  computational-geometry  algorithm-analysis  asymptotics  recurrence-relation  mathematical-analysis  master-theorem  algorithms  algorithm-analysis  runtime-analysis  computability  reductions  turing-machines  formal-languages  context-free 

1
IFの削減ルール?
私はSimon Peyton Jonesの「関数型プログラミング言語の実装」を通じて作業しており、20ページで次のように表示されます。 IF TRUE((λp.p)3)↔IF TRUE 3(β赤あたり)(1) ↔(λx.IFTRUE 3 x)(η赤あたり)(2) ↔(λx.3)(3) ステップ1から2は、η変換として説明されます。しかし、2から3までは、「最後のステップはIFの削減ルールである」と述べています。この削減ルールが何であるかわかりません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.