Advertisement
Guest User

Untitled

a guest
Oct 13th, 2015
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.65 KB | None | 0 0
  1. predicate sorted(a: array<int>, lo: int, hi: int)
  2. requires a != null;
  3. requires 0 <= lo <= hi <= a.Length;
  4. reads a;
  5. {forall j,k :: lo <= j < k < hi ==> a[j] <= a[k]}
  6.  
  7. method sort (a: array<int>)
  8. requires a != null
  9. ensures sorted(a, 0, a.Length)
  10. modifies a;
  11. {
  12. if a.Length <= 1 { return; }
  13. var i: int := 1;
  14. while i < a.Length
  15. decreases a.Length - i
  16. invariant 1 <= i <= a.Length && sorted(a, 0, i)
  17. {
  18. var j: int := i;
  19. while j > 0 && a[j] < a[j-1]
  20. decreases j
  21. invariant 0 <= j <= i && sorted(a, 0, j) && sorted(a,j,i+1) && (0 < j < i) ==> a[j-1] <= a[j+1]
  22. {
  23. a[j], a[j-1] := a[j-1], a[j];
  24. j := j-1;
  25. }
  26. i := i+1;
  27. }
  28. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement