使用模块细化进行编译

时间:2017-07-13 21:10:30

标签: dafny

编译以下代码时:

module Interface {
    function addSome(n: nat): nat
        ensures addSome(n) > n
}

module Mod {
    import A : Interface
    method m() {
        assert 6 <= A.addSome(5);
        print "Test\n";
    }
}

module Implementation refines Interface {
    function addSome(n: nat): nat
        ensures addSome(n) == n + 1
    {
        n + 1
    }
}

module Mod2 refines Mod {
  import A = Implementation
}

method Main() {
    Mod2.m();
}

我得到了输出

Dafny program verifier finished with 5 verified, 0 errors
Compilation error: Function _0_Interface_Compile._default.addSome has no body

鉴于Implementation提升Interface,为什么编译器需要Interface.addSome来建立一个正文,特别是当addSome是幽灵的时候,所以不应该参与在汇编?

1 个答案:

答案 0 :(得分:1)

您需要将InterfaceMod标记为abstract。除此之外,这意味着它们不会被编译,因此您不会得到该错误。

在这两个小的更改之后,文件的其余部分会正确编译。