Skip to content

Commit 1847ab3

Browse files
authored
Make the postconditions on VerusForLoopWrapper::next more succinct. (#2608)
1 parent c00d4d4 commit 1847ab3

1 file changed

Lines changed: 2 additions & 16 deletions

File tree

source/vstd/std_specs/iter.rs

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -480,22 +480,8 @@ impl <'a, I: Iterator> VerusForLoopWrapper<'a, I> {
480480
// History updates always hold
481481
ret matches Some(i) ==> final(self).history@ == old(self).history@.push(i),
482482
ret is None ==> final(self).history@ == old(self).history@,
483-
// TODO: Uncomment this line to replace everything below, once general mutable refs are supported
484-
//call_ensures(I::next, (old(self).iter,), ret),
485-
final(self).iter.obeys_prophetic_iter_laws() == old(self).iter.obeys_prophetic_iter_laws(),
486-
final(self).iter.obeys_prophetic_iter_laws() ==> final(self).iter.will_return_none() == old(self).iter.will_return_none(),
487-
final(self).iter.obeys_prophetic_iter_laws() ==> (old(self).iter.decrease() is Some <==> final(self).iter.decrease() is Some),
488-
final(self).iter.obeys_prophetic_iter_laws() ==>
489-
({
490-
if old(self).iter.remaining().len() > 0 {
491-
&&& final(self).iter.remaining() == old(self).iter.remaining().drop_first()
492-
&&& ret == Some(old(self).iter.remaining()[0])
493-
} else {
494-
final(self).iter.remaining() == old(self).iter.remaining() && ret == None && final(self).iter.will_return_none()
495-
}
496-
}),
497-
final(self).iter.obeys_prophetic_iter_laws() && old(self).iter.remaining().len() > 0 && final(self).iter.decrease() is Some ==>
498-
decreases_to!(old(self).iter.decrease()->0 => final(self).iter.decrease()->0),
483+
// All of the standard Iterator::next guarantees still hold
484+
exists |m: &mut I| #![auto] call_ensures(I::next, (m,), ret) && *m == old(self).iter && *final(m) == final(self).iter,
499485
{
500486
let ghost old_history = self.history@;
501487
let ret = self.iter.next();

0 commit comments

Comments
 (0)