【问题标题】:define type before use使用前定义类型
【发布时间】:2013-08-05 01:14:26
【问题描述】:

根据 MLton 文档:

标准 ML 要求在使用类型之前对其进行定义。 [link]

并非所有实现都强制执行此要求(例如,SML/NJ 没有),但上面链接的页面很好地说明了为什么可能需要它来保证可靠性(取决于实现如何处理值限制) ,并且符合定义中的一些注释:

虽然在我们的定义中没有假设,但每个上下文 C = T, U, E 具有 tynames ET 的属性。因此,T 可以粗略地认为包含所有“已生成”的类型名称。 […] 当然,就语义规则而言,关于“已生成”的内容的评论并不精确。但是可以很容易地证明以下精确结果:

让 S 是一个句子 T, U, EphraseA em> 使得 tynames ET,令 S′ 为句子 T′,U′, E′ ⊢ 短语′ ⇒ A′ 出现在 S 的证明中;然后还有tynames E′ ⊆ T′。

[第 21 页]

但我对此感到双重困惑。

首先——上述定理似乎倒退了。如果我正确理解短语“发生在 S 的证明中”,那么这似乎意味着(通过反证法)“一旦你的上下文违反了 tynames ET,所有后续上下文也将违反该意图”。即使这是真的,似乎断言相反会更有用和更有意义,即“如果到目前为止所有上下文都符合 tynames ET em>,那么任何随后可推断的上下文也将符合该意图”。没有?

其次——MLton 的陈述和 定义 的陈述实际上似乎都不受推理规则(或遵循它们的“进一步限制”)的支持。一些推理规则有“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),它涵盖了 datatype 声明,只要求生成的类型名称不在 CT 中>;因此它不会阻止生成在现有值环境中使用的类型名称(除非 tynames VET of C)。

我觉得我可能在这里遗漏了一些非常基本的东西,但我不知道它可能是什么!

【问题讨论】:

    标签: sml type-inference value-restriction mlton


    【解决方案1】:

    关于你的第一个问题,我不确定你为什么建议阅读。结果基本上表明,如果您有一个派生S(将其视为一棵树),其上下文满足条件,那么它的所有子派生(认为子树)将具有也满足条件的上下文。换句话说,所有规则维护条件。将条件视为上下文C的格式良好要求。

    关于您的第二个问题,请注意在排序规则 (24) 中使用了 ⊕,它根据需要扩展了 T of C。更具体地说,如果 r 被分配类型 t option ref,那么第一个声明将产生一个环境 E1 和对应的 t &in ; tynames E1。然后,根据排序规则 (24),第二个声明必须在上下文 C' = CE1,定义为C + (tynames E1, E1) 在第 4.3 节中。因此,t ∈ T of C',根据格式良好的要求,因此,规则 (17) 将无法选择与 t 的表示相同的 t

    【讨论】:

    • 回复:第一个问题:好的,我想我明白了。由于证明由推理规则的应用组成,并且规则允许您根据其组成子短语的语义来推断短语的语义,因此“S' [...] occur[s] in a proof of S”实际上意味着大致“短语”是短语的组成部分。我有这个权利吗?因此,如果(核心)程序以符合此意图的上下文开始,则该定理指出程序中的每个声明都将具有(即详细说明)符合它的上下文? 100% 有道理,非常感谢!
    • Re:“关于你的第一个问题,我不确定你为什么建议阅读”:出于某种原因,我一直在采取“S' [...] of S” 大致表示“phrase*′ 在程序中出现的时间比 *phrase 更早”。我想我将证明的方向与程序文本的方向混淆了。 :-P
    • @ruakh,是的,没错。也就是说,定义中有个错误,请参阅mpi-sws.org/~rossberg/papers/sml-defects.pdf ;)。
    • 是的,我知道。每当我遇到这种我不明白的事情时,我总是先检查你的清单以确保。 :-P
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2021-11-18
    • 2013-12-15
    • 1970-01-01
    • 2013-07-09
    相关资源
    最近更新 更多