Quantcast
Channel: Dafny: An Automatic Program Verifier for Functional Correctness
Viewing all articles
Browse latest Browse all 1106

New Post: An experiment with bubble sort

$
0
0
Here is a version which verifies

http://rise4fun.com/Dafny/ZNO7
lemma trans(a:seq<int>,a':seq<int>,a'':seq<int>, i:int)
  requires 0 <= i < |a|;
  requires |a| == |a'| == |a''|;
  requires perm(a[..i],a'[..i]);
  requires a[i..]==a'[i..];
  requires perm(a'[..i+1],a''[..i+1]);
  requires a'[i+1..]==a''[i+1..];
  ensures perm(a[..i+1],a''[..i+1]);
{
    assert a[i] == a'[i];
    assert multiset(a[..i]) == multiset(a'[..i]);
    assert multiset(a'[..i+1]) == multiset(a''[..i+1]);
    assert multiset(a[..i])+multiset{a[i]} == multiset(a'[..i])+multiset{a'[i]};
    
    MultiSetSequenceDist(a,i);
    MultiSetSequenceDist(a',i);
    assert multiset(a[..i+1]) == multiset(a'[..i+1]);
        
    assert multiset(a'[..i])+multiset{a'[i]} == multiset(a'[..i+1]) == multiset(a''[..i+1]);
    assert multiset(a[..i+1])==multiset(a''[..i+1]);
}

lemma MultiSetSequenceDist(a:seq<int>,i:int)
  requires 0 <= i < |a|;
  requires a != [];
  ensures multiset(a[..i])+multiset{a[i]} == multiset(a[..i+1])
{ 
  MultiSetSequenceDist'(a[..i],a[i]);
  assert multiset(a[..i])+multiset{a[i]} == multiset(a[..i]+[a[i]]);
  assert a[..i]+[a[i]] == a[..i+1];
}

lemma MultiSetSequenceDist'(a:seq<int>,i:int)
  ensures multiset(a)+multiset{i} == multiset(a+[i])
{ }

Viewing all articles
Browse latest Browse all 1106

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>