Skip to content

Commit 016cbac

Browse files
WeetHetparno
andcommitted
Make 034 verify without z3
Co-authored-by: Bryan Parno <[email protected]>
1 parent ce76290 commit 016cbac

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

tasks/human_eval_034.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ HumanEval/34
88
use vstd::calc;
99
use vstd::prelude::*;
1010
use vstd::seq_lib::lemma_multiset_commutative;
11+
use vstd::seq_lib::lemma_seq_contains_after_push;
1112

1213
verus! {
1314

@@ -142,15 +143,16 @@ fn unique_sorted(s: Vec<i32>) -> (result: Vec<i32>)
142143
if result.len() == 0 || result[result.len() - 1] != s[i] {
143144
assert(result.len() == 0 || result[result.len() - 1] < s[i as int]);
144145
result.push(s[i]);
146+
assert forall|m: int| #![trigger s[m]] 0 <= m < i implies result@.contains(s[m]) by {
147+
assert(pre@.contains(s@[m]));
148+
lemma_seq_contains_after_push(pre@, s@[i as int], s@[m]);
149+
};
145150
}
146151
assert(forall|m: int|
147152
#![trigger result@[m], pre@[m]]
148153
0 <= m < pre.len() ==> pre@.contains(result@[m]) ==> result@.contains(pre@[m])) by {
149154
assert(forall|m: int| 0 <= m < pre.len() ==> result@[m] == pre@[m]);
150155
}
151-
assert(forall|m: int|
152-
#![trigger s@[m]]
153-
0 <= m < i ==> pre@.contains(s[m]) && result@.contains(s[m]));
154156
assert(result@.contains(s[i as int])) by {
155157
assert(result[result.len() - 1] == s[i as int]);
156158
}

0 commit comments

Comments
 (0)