Advertisement
Guest User

Untitled

a guest
Dec 11th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.82 KB | None | 0 0
  1. val N:ℕ;
  2. val M:ℕ;
  3. // ≤ ≥ ≠ ∨ ∧ ¬ ∃ ∀ ∈ ⇔ ⇒ ⇐
  4. type index = ℤ[-N,N];
  5. type elem = ℤ[-M,M];
  6. type array = Array[N,elem];
  7.  
  8. // preconditions
  9. pred preMax_lengthGTOne(n:index) ⇔ n ≥ 1;
  10.  
  11. // postconditions
  12. pred postMax_IndexMustBeValid(p:index, n:index) ⇔ 0 ≤ p ∧ p < n;
  13. pred postMax_ElemHasToBeMax(a:array, p:index, n:index) ⇔
  14. ∀k:index . 0 ≤ k ∧ k < n ⇒ a[p] ≥ a[k];
  15. pred postMax_condition(a:array, p:index, n:index) ⇔
  16. postMax_IndexMustBeValid(p, n) ∧ postMax_ElemHasToBeMax(a, p, n);
  17.  
  18. proc maximum(a:array, n:index): index
  19. requires preMax_lengthGTOne(n);
  20. ensures postMax_condition(a, result, n);
  21. {
  22. var p:index ≔ n-1;
  23. var m:elem ≔ a[p];
  24. var i:index ≔ p-1;
  25. while i ≥ 0 do
  26. invariant i < n;
  27. invariant 0 ≤ p ∧ p < n;
  28. invariant m = a[p];
  29. invariant ∀k:index . i < k ∧ k < n ⇒ a[k] ≤ m;
  30. decreases i+1;
  31. {
  32. if a[i] > m then
  33. {
  34. p ≔ i;
  35. m ≔ a[p];
  36. }
  37. i ≔ i-1;
  38. }
  39. return p;
  40. }
  41. // ≤ ≥ ≠ ∨ ∧ ¬ ∃ ∀ ∈ ⇔ ⇒ ⇐
  42.  
  43. // preconditions
  44. pred preSort_nGEQZero(n:index) ⇔ n ≥ 0;
  45. // postconditions
  46. pred postSort_isSorted(a:array, n:index) ⇔
  47. ∀k:index . 0 ≤ k ∧ k < n-1 ⇒ a[k] ≤ a[k+1];
  48.  
  49. proc sort(a:array, n:index): array
  50. requires preSort_nGEQZero(n);
  51. ensures postSort_isSorted(result, n);
  52. {
  53. var b:array ≔ a;
  54. var i:index ≔ n;
  55. while i > 1 do
  56. invariant i > 1 ⇒ i = n;
  57. //invariant ∀k:index . 0 ≤ k ∧ k < n-1 ⇒ a[k+1] ≥ b[k];
  58. invariant 0 < i ∧ i < n ⇒ ∀k:index . i ≤ k ∧ k < n-1 ⇒ b[k] ≤ b[k+1];
  59. decreases if i > 1 then i-1 else 0;
  60. {
  61. var j:index ≔ maximum(b, i);
  62. i ≔ i-1;
  63. if i ≠ j then
  64. {
  65. var e:elem ≔ b[i];
  66. b[i] ≔ b[j];
  67. b[j] ≔ e;
  68. }
  69. }
  70. return b;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement