2

MLton のドキュメントによると:

標準 ML では、使用する前に型を定義する必要があります。【リンク

すべての実装がこの要件を強制するわけではありません (たとえば、SML/NJ は強制しません) が、上記のリンクのページは、健全性のために必要になる理由 (実装が値の制限をどのように処理するかによって異なります) の良い例です。定義のコメントの一部と一致します。

私たちの定義では想定されていませんが、すべてのコンテキストC = TUEがETという名前のプロパティを持つことが意図されています。したがって、 Tは大まかに、「生成された」すべての型名を含むと考えることができます。[…] もちろん、「生成された」ものについての発言は、意味規則に関して正確ではありません。しかし、次の正確な結果は簡単に実証できます。

S を文T , U , EAとし、 ETを tynamesとし、S' を S の証明に現れる文T ', U ', E ' ⊢A ' とする。次に、 E ' ⊆ T 'も tynames します。

[21ページ]

しかし、私はこれに二重に混乱しています。

まず、上記の定理は後ろ向きに見えます。「Sの証明で発生する」というフレーズを正しく理解すると、これは(対比によって)「ETという名前の意図に違反するコンテキストがあると、後続のすべてのコンテキストもその意図に違反する」ことを意味するようです。それが本当だとしても、逆を主張する方がはるかに有用で意味があるように思われます。 "。いいえ?

第二に、MLton のステートメントもDefinitionのステートメントも、実際には推論規則 (またはそれに続く「さらなる制限」) によってサポートされているようには見えません。いくつかの推論規則には、副条件として「tynames τT of C」または「tynames VET of C」がありますが、このプログラムにはこれらの規則は必要ありません (上記のリンクのドキュメントに記載されています)。

val r = ref NONE
datatype t = A | B
val () = r := SOME A

(具体的には、規則 (4) はlet、規則 (14) は=>、規則 (26) は と関係recがあります。このプログラムでは、これらのいずれも使用されていません。)

そして、別の方向から来ると、宣言をカバーするルール (17) は、生成された型名がCのTdatatypeないことだけを要求します。したがって、既存の値環境で使用される型名の生成を妨げません (ただし、VETCという名前が既に真である場合を除きます)。

ここにはかなり基本的なものが欠けているように感じますが、それが何であるかはわかりません!

4

1 に答える 1

3

あなたの最初の質問に関して、なぜその読書を提案するのかわかりません。結果は基本的に、コンテキストが条件を満たす派生S (ツリーと考えてください) がある場合、そのすべてのサブ派生 (サブツリーと考えてください) も条件を満たすコンテキストを持つことを示しています。つまり、すべてのルールが条件を維持します。条件は、コンテキストCの整形式要件と考えてください。

2 番目の質問については、シーケンス規則 (24) での ⊕ の使用に注意してください。これは、必要に応じて C の Tを拡張します。より具体的には、rに type が割り当てられた場合t option ref、最初の宣言は、対応するttynames E 1を持つ環境E 1を生成します。次に、順序付け規則 (24) に従って、2 番目の宣言は、セクション 4.3 でC + ( tynames E 1 , E 1 )として定義されているコンテキストC' = CE 1の下で詳述する必要があります。したがって、C' のt ∈ T、整形式であるために必要なため、ルール (17) は の表記と同じ t を選択することはできませt

于 2013-08-04T09:18:22.957 に答える