2017-05-03 35 views

回答

1

原因是Dafny只在構造證明時只願意展開函數有限次數。證明斷言需要展開applyMapSeq三次。

我建議添加一些後置條件來應用MapSeq,這將有助於Dafny與此和其他證明。這裏的簽名我心目中:

function applyMapSeq<U,V> (f: map<U,V>, xs:seq<U>): (ys:seq<V>) 
    requires (set x | x in xs) <= domain(f) 
    ensures |ys| == |xs| 
    ensures forall i :: 0 <= i < |xs| ==> ys[i] == f[xs[i]] 

您可以在http://rise4fun.com/Dafny/Vibu看到的是,這些額外的後置條件,Dafny可以驗證你的說法。

+0

好的,Dafny 2.0.0也會在沒有提示的情況下驗證(http://rise4fun.com/Dafny/8sl7)。 –