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

セマンティクスは、いくつかの構文の意味を正式に説明します。


5
lambda-反射を伴う計算
私は、リフレクションに関する推論、つまり実行中のプログラムのイントロスペクションと操作をサポートする簡単な計算を探しています。 型なしの -calculus拡張機能があり、これを使用して -termsを構文的に操作し、後で評価できる形式に変換できますか?λλλ\lambdaλλ\lambda 微積分には2つの主な追加用語があると思います。 r e f l e c t v reflect v\mathtt{reflect}\ v:を取り、構文操作に修正可能な表現を生成します。vvvvvvv e v a l v eval v\mathtt{eval}\ v:用語の構文表現を取り、それを評価します。 リフレクションをサポートするには、用語の構文表現が必要です。次のようになります。 (L A M R (e ))R (e )eλx.eλx.e\lambda x.e用語として表現される、 の反射バージョンであり、、(LAM R(e))(LAM R(e))(\mathsf{LAM}\ R(e))R(e)R(e)R(e)eee (A P P R (e )R (e ′))e e′e e′e\ e'用語として表現される、および(APP R(e) …

3
2つのシミュレーションがバイシミュレーションではない場合
ラベル付き遷移システム 与えられた(S,Λ,→)(S,Λ,→)(S,\Lambda,\to)場合、SSSは状態のセット、はラベルのセット、は三項関係です。いつものように、書き込みため→ ⊆ S × Λ × S P α → Q (P 、α 、Q )∈ →ΛΛ\Lambda→⊆S×Λ×S→⊆S×Λ×S\to\subseteq S\times\Lambda\times Sp→αqp→αqp \stackrel\alpha\rightarrow q(p,α,q)∈→(p,α,q)∈→(p,\alpha,q)\in\to。ラベルされた移行p→αqp→αqp\stackrel\alpha\to q状態でシステムという意味pppに状態が変化するqqqラベルとαα\alphaということを意味し、αα\alpha状態の変化を引き起こすいくつかの観察可能なアクションです。 今、関係R⊆S×SR⊆S×SR \subseteq S \times S呼び出されたシミュレーション IFF ∀(p,q)∈R, if p→αp′ then ∃q′,q→αq′ and (p′,q′)∈R.∀(p,q)∈R, if p→αp′ then ∃q′,q→αq′ and (p′,q′)∈R. \forall (p,q)\in R, \text{ if } p \stackrel\alpha\rightarrow p' …

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

3
機能しない設定でのクロージャーの実装の問題
プログラミング言語では、クロージャは人気があり、しばしば望まれる機能です。ウィキペディアによると(強調鉱山): コンピューターサイエンスでは、クロージャー(...)は、その関数の非ローカル変数の参照環境と一緒の関数です。クロージャを使用すると、関数は直接のレキシカルスコープ外の変数にアクセスできます。 そのため、クロージャーは本質的に(匿名?)関数値であり、それ自身のスコープ外の変数を使用できます。私の経験では、これは、定義ポイントでスコープ内にある変数にアクセスできることを意味します。 ただし、実際には、少なくとも関数型プログラミング以外では、概念は異なるようです。異なる言語は異なるセマンティクスを実装しており、意見の対立さえあるようです。多くのプログラマーは、クロージャーが何であるかを知らないようで、それらを匿名関数にすぎないと見なしています。 また、クロージャを実装するときに大きなハードルが存在するようです。最も注目すべきは、Java 7にはそれらが含まれているはずでしたが、この機能は将来のリリースにプッシュバックされたことです。 閉鎖がなぜ理解するのが難しいのか、理解するのが難しいのはなぜですか?これはあまりにも広範で曖昧な質問なので、これらの相互接続された質問にさらに焦点を当てましょう。 一般的なセマンティック形式(小さなステップ、大きなステップなど)でクロージャを表現する際に問題はありますか? 既存の型システムは閉鎖に適しておらず、簡単に拡張できませんか? クロージャを従来のスタックベースのプロシージャ変換に合わせるのは問題ですか? 質問は主に手続き型、オブジェクト指向、およびスクリプト言語全般に関連していることに注意してください。私の知る限り、関数型言語には問題はありません。

2
スコット連続関数:代替定義
私はこのプロパティに本当に苦労しています: ましょであり、コヒーレンススペースと単調関数です。は、が有向集合であるようなすべての場合にのみ連続です。X,YX,YX,Yf:Cl(X)→Cl(Y)f:Cl(X)→Cl(Y)f: Cl(X) \rightarrow Cl(Y)ffff(⋃x∈Dx)=⋃x∈Df(x)f(⋃x∈Dx)=⋃x∈Df(x)f(\bigcup_{x\in D} x)=\bigcup_{x \in D}f(x)D⊆Cl(X)D⊆Cl(X)D \subseteq Cl(X)DDD したがって、有向集合は次のように定義されます POSET は、などの有向集合でやです。はクリークを表します:コヒーレント。D⊆D⊆D \subseteq ∀x,x′∈D∀x,x′∈D \forall x, x' \in D ∃z∈D∃z∈D \exists z \in D x⊆zx⊆z x \subseteq zx′⊆zx′⊆zx' \subseteq z Cl(X)Cl(X)Cl(X) {x⊆|X|∣a,b∈x⇒a{x⊆|X|∣a,b∈x⇒a\{x \subseteq |X| \mid a,b \in x \Rightarrow ab}b}b \} 多くの本は、スコット連続関数の定義としてそれを与えていますが、残念ながら私の先生ではありません。彼はこの連続的な定義を与えました: f:Cl(X)→Cl(Y)f:Cl(X)→Cl(Y)f : Cl(X) \rightarrow Cl(Y)は、単調かつ場合、連続です。。 ここで、モノトーンは次のように定義されます …

4
プログラムが言語のセマンティクスを拡張できるほど十分に順応性があるか
プログラマーがクラス(Stringなどのクラスを含む)を定義した後、いつでもクラスを拡張/オーバーライドできるようにするruby(およびjavascript)などの言語の機能を参照して、プログラムを後で拡張できる言語を設計することは理論的に実行可能ですか?そのセマンティクス。 例:Rubyは多重継承を許可していませんが、デフォルトの言語動作を拡張/オーバーライドして多重継承の実装を許可できます。 これを許可する他の言語はありますか?これは実際に言語設計者の関心事ですか?Webアプリケーション開発用のRailsフレームワークを構築するためにrubyを使用する選択肢を見ると、このような言語は非常に強力で、さまざまなアプリケーションのフレームワーク(またはDSL)を設計できます。

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

2
シンプルな書き換えシステムの合流性証明
次の用語で構成される単純な言語があるとします。 truetrue\mathtt{true} falsefalse\mathtt{false} 場合用語では、次いで、そうでi ft1,t2,t3t1,t2,t3t_1,t_2,t_3ift1thent2elset3ift1thent2elset3\mathtt{if}\: t_1 \:\mathtt{then}\: t_2 \:\mathtt{else}\: t_3 ここで、次の論理評価ルールを想定します。 iftruethent2elset3→t2[E-IfTrue]iffalsethent2elset3→t3[E-IfFalse]t1→t′1ift1thent2elset3→ift′1thent2elset3[E-If]iftruethent2elset3→t2[E-IfTrue]iffalsethent2elset3→t3[E-IfFalse]t1→t1′ift1thent2elset3→ift1′thent2elset3[E-If] \begin{gather*} \dfrac{} {\mathtt{if}\: \mathtt{true} \:\mathtt{then}\: t_2 \:\mathtt{else}\: t_3 \to t_2} \text{[E-IfTrue]} \quad \dfrac{} {\mathtt{if}\: \mathtt{false} \:\mathtt{then}\: t_2 \:\mathtt{else}\: t_3 \to t_3} \text{[E-IfFalse]} \\ \dfrac{t_1 \to t_1'} {\mathtt{if}\: t_1 \:\mathtt{then}\: t_2 \:\mathtt{else}\: t_3 \to \mathtt{if}\: t_1' \:\mathtt{then}\: t_2 \:\mathtt{else}\: …

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

1
セマンティクスとは何ですか?
多くの一般的な言語があります。しかし、コンピューター科学者は、これらの言語でのプログラムの動作を明確かつ明確にプログラムの動作を論証する(たとえば、その身元を証明する)には、それらを別のよく理解された言語に翻訳する必要があると言います。彼らはそのような言語を「セマンティクス」と呼んでいます。著者は多くのセマンティクスの1つを提案します。彼らはその構造の意味と、あなたの言語をどのように翻訳できるかを説明します。そうすれば、誰もがあなたのプログラムを確実に理解するでしょう、と彼らは言います。 よさそうだ、まだ、私は何かを理解していません。彼らは最初の言語を理解するために別の言語を導入すると言っていますか?なぜ私たちは元のものよりもそれをよく理解するのですか?なぜこのセマンティクスがそれよりも優れているのでしょうか?Cのセマンティクスを記述するために、別の言語を発明するのではなく、Cのセマンティクスをすぐに学習しないのはなぜですか?同じことが構文にも当てはまります。構文に関して同じ質問をしないのはなぜですか? PSコメントでは、セマンティクスは別の言語やその意味への翻訳を意味しないと聞いています。しかし、VHDLのFormal Semanticsは、何かを1つの方法でしか理解できない場合、それを理解せず、別の(既知の)言語に翻訳するメカニズムを備えた言語に「意味」を指定できると述べています。つまり、「意味論は形式的なシステム間の関係」です。Semantics of Programming Languagesの Hennessyは、セマンティクスが BNFまたはシンタックスダイアグラムとして提供されている場合、セマンティクスによってプログラムの「意味」を正式に処理できると述べています。言語でない場合の正式なシステムとは何ですか? PS2ゲートの相互接続への特定のHDLプログラムのHW合成は、セマンティクス抽出のプロセスであると言えますか?その後、(高レベルの)説明を、理解できる(低レベルの)言語に翻訳します。

1
プログラミング言語セマンティクスプロトタイピングツール
プログラミング言語のセマンティクスと型システムのプロトタイプを作成するためのツールはありますか?また、これにより、型の健全性など、標準プロパティの何らかのモデルチェックが可能になりますか? Alloyについての本を読んでおり、リレーショナルロジックを使用して表現されたモデルに対して、私が望んでいる正確な機能を提供しているので、これを質問します。 私はOttを知っていますが、証明アシスタントシステム用のコードの生成に重点を置いているため、このような「モデルチェック」機能はありません。 そのようなツールの存在についての参照があればよいでしょう。

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 

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 ] …

3
プログラム分析の開始
プログラム分析を始めるためのリソースを探しています。 私がこのトピックについて見つけた唯一の本は、ニールソンとニールソンの本です。 それ以外には、「プログラム分析」が章か何かに沿った「コンパイラ」本だけがあるようです。 人々は他のリソースを知っていますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.