pub trait DoubleEndedIteratorSpec: DoubleEndedIterator + IteratorSpec {
// Required methods
fn produces_back(self, visited: Seq<Self::Item>, o: Self) -> bool;
fn completed_back(&mut self) -> bool;
fn produces_back_refl(self);
fn produces_back_trans(
a: Self,
ab: Seq<Self::Item>,
b: Self,
bc: Seq<Self::Item>,
c: Self,
);
fn size_hint_back_spec(&self, r: (usize, Option<usize>));
}Required Methods§
Sourcefn produces_back(self, visited: Seq<Self::Item>, o: Self) -> bool
fn produces_back(self, visited: Seq<Self::Item>, o: Self) -> bool
logic(prophetic) ⚠
Sourcefn completed_back(&mut self) -> bool
fn completed_back(&mut self) -> bool
logic(prophetic) ⚠
Sourcefn produces_back_refl(self)
fn produces_back_refl(self)
logic(law, prophetic) ⚠
ensures
self.produces_back(Seq::empty(), self)Sourcefn produces_back_trans(
a: Self,
ab: Seq<Self::Item>,
b: Self,
bc: Seq<Self::Item>,
c: Self,
)
fn produces_back_trans( a: Self, ab: Seq<Self::Item>, b: Self, bc: Seq<Self::Item>, c: Self, )
logic(law, prophetic) ⚠
requires
a.produces_back(ab, b)requires
b.produces_back(bc, c)ensures
a.produces_back(ab.concat(bc), c)Sourcefn size_hint_back_spec(&self, r: (usize, Option<usize>))
fn size_hint_back_spec(&self, r: (usize, Option<usize>))
logic(law) ⚠
requires
Self::size_hint.postcondition((self,), r)ensures
forall<s: Seq<Self::Item>, i: &mut Self> self.produces_back(s, *i) && i.completed_back() ==> r.0@ <= s.len()
ensures
match r.1 { Some(r) => { forall<s: Seq<Self::Item>, i: Self> self.produces_back(s, i) ==> s.len() <= r@ } None => true }
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementations on Foreign Types§
Source§impl<'a, T> DoubleEndedIteratorSpec for Iter<'a, T>
impl<'a, T> DoubleEndedIteratorSpec for Iter<'a, T>
Source§fn produces_back(self, visited: Seq<Self::Item>, o: Self) -> bool
fn produces_back(self, visited: Seq<Self::Item>, o: Self) -> bool
logic(open)
self@.to_ref_seq() == o@.to_ref_seq().concat(visited.reverse())Source§fn completed_back(&mut self) -> bool
fn completed_back(&mut self) -> bool
logic(open, prophetic)
self.completed()Source§fn produces_back_refl(self)
fn produces_back_refl(self)
logic(law) ⚠
ensures
self.produces_back(Seq::empty(), self)Source§fn produces_back_trans(
a: Self,
ab: Seq<Self::Item>,
b: Self,
bc: Seq<Self::Item>,
c: Self,
)
fn produces_back_trans( a: Self, ab: Seq<Self::Item>, b: Self, bc: Seq<Self::Item>, c: Self, )
logic(law) ⚠
requires
a.produces_back(ab, b)requires
b.produces_back(bc, c)ensures
a.produces_back(ab.concat(bc), c)Source§fn size_hint_back_spec(&self, r: (usize, Option<usize>))
fn size_hint_back_spec(&self, r: (usize, Option<usize>))
logic(law) ⚠
requires
Self::size_hint.postcondition((self,), r)ensures
forall<s: Seq<Self::Item>, i: &mut Self> self.produces_back(s, *i) && i.completed_back() ==> r.0@ <= s.len()
ensures
match r.1 { Some(r) => { forall<s: Seq<Self::Item>, i: Self> self.produces_back(s, i) ==> s.len() <= r@ } None => true }
Source§impl<'a, T> DoubleEndedIteratorSpec for Iter<'a, T>
impl<'a, T> DoubleEndedIteratorSpec for Iter<'a, T>
Source§fn produces_back(self, visited: Seq<Self::Item>, tl: Self) -> bool
fn produces_back(self, visited: Seq<Self::Item>, tl: Self) -> bool
logic(open)
self@ == tl@.concat(visited.reverse())Source§fn completed_back(&mut self) -> bool
fn completed_back(&mut self) -> bool
logic(open, prophetic)
self.completed()Source§fn produces_back_refl(self)
fn produces_back_refl(self)
logic(law) ⚠
ensures
self.produces_back(Seq::empty(), self)Source§fn produces_back_trans(
a: Self,
ab: Seq<Self::Item>,
b: Self,
bc: Seq<Self::Item>,
c: Self,
)
fn produces_back_trans( a: Self, ab: Seq<Self::Item>, b: Self, bc: Seq<Self::Item>, c: Self, )
logic(law) ⚠
requires
a.produces_back(ab, b)requires
b.produces_back(bc, c)ensures
a.produces_back(ab.concat(bc), c)Source§fn size_hint_back_spec(&self, r: (usize, Option<usize>))
fn size_hint_back_spec(&self, r: (usize, Option<usize>))
logic(law) ⚠
requires
Self::size_hint.postcondition((self,), r)ensures
forall<s: Seq<Self::Item>, i: &mut Self> self.produces_back(s, *i) && i.completed_back() ==> r.0@ <= s.len()
ensures
match r.1 { Some(r) => { forall<s: Seq<Self::Item>, i: Self> self.produces_back(s, i) ==> s.len() <= r@ } None => true }
Source§impl<'a, T> DoubleEndedIteratorSpec for IterMut<'a, T>
impl<'a, T> DoubleEndedIteratorSpec for IterMut<'a, T>
Source§fn produces_back(self, visited: Seq<Self::Item>, o: Self) -> bool
fn produces_back(self, visited: Seq<Self::Item>, o: Self) -> bool
logic(open)
self@.to_mut_seq() == o@.to_mut_seq().concat(visited.reverse())Source§fn completed_back(&mut self) -> bool
fn completed_back(&mut self) -> bool
logic(open, prophetic)
self.completed()Source§fn produces_back_refl(self)
fn produces_back_refl(self)
logic(law) ⚠
ensures
self.produces_back(Seq::empty(), self)Source§fn produces_back_trans(
a: Self,
ab: Seq<Self::Item>,
b: Self,
bc: Seq<Self::Item>,
c: Self,
)
fn produces_back_trans( a: Self, ab: Seq<Self::Item>, b: Self, bc: Seq<Self::Item>, c: Self, )
logic(law) ⚠
requires
a.produces_back(ab, b)requires
b.produces_back(bc, c)ensures
a.produces_back(ab.concat(bc), c)Source§fn size_hint_back_spec(&self, r: (usize, Option<usize>))
fn size_hint_back_spec(&self, r: (usize, Option<usize>))
logic(law) ⚠
requires
Self::size_hint.postcondition((self,), r)ensures
forall<s: Seq<Self::Item>, i: &mut Self> self.produces_back(s, *i) && i.completed_back() ==> r.0@ <= s.len()
ensures
match r.1 { Some(r) => { forall<s: Seq<Self::Item>, i: Self> self.produces_back(s, i) ==> s.len() <= r@ } None => true }
Source§impl<A: DoubleEndedIteratorSpec, B: DoubleEndedIteratorSpec<Item = A::Item>> DoubleEndedIteratorSpec for Chain<A, B>
impl<A: DoubleEndedIteratorSpec, B: DoubleEndedIteratorSpec<Item = A::Item>> DoubleEndedIteratorSpec for Chain<A, B>
Source§fn completed_back(&mut self) -> bool
fn completed_back(&mut self) -> bool
logic(open, prophetic)
/* Macro-generated */Source§fn produces_back(self, visited: Seq<Self::Item>, o: Self) -> bool
fn produces_back(self, visited: Seq<Self::Item>, o: Self) -> bool
logic(open, prophetic, inline)
exists<visited_a: Seq<A::Item>, visited_b: Seq<B::Item>> visited == visited_b.concat(visited_a) && chain_produces_inner_back(self, visited_a, visited_b, o)
Source§fn produces_back_refl(self)
fn produces_back_refl(self)
logic(law) ⚠
ensures
self.produces_back(Seq::empty(), self)Source§fn produces_back_trans(
x: Self,
xy: Seq<Self::Item>,
y: Self,
yz: Seq<Self::Item>,
z: Self,
)
fn produces_back_trans( x: Self, xy: Seq<Self::Item>, y: Self, yz: Seq<Self::Item>, z: Self, )
logic(law, prophetic) ⚠
requires
x.produces_back(xy, y)requires
y.produces_back(yz, z)ensures
x.produces_back(xy.concat(yz), z)Source§fn size_hint_back_spec(&self, r: (usize, Option<usize>))
fn size_hint_back_spec(&self, r: (usize, Option<usize>))
logic(law) ⚠
requires
Self::size_hint.postcondition((self,), r)ensures
forall<s: Seq<Self::Item>, i: &mut Self> self.produces_back(s, *i) && i.completed_back() ==> r.0@ <= s.len()
ensures
match r.1 { Some(r) => { forall<s: Seq<Self::Item>, i: Self> self.produces_back(s, i) ==> s.len() <= r@ } None => true }
Source§impl<I: DoubleEndedIteratorSpec> DoubleEndedIteratorSpec for Rev<I>
impl<I: DoubleEndedIteratorSpec> DoubleEndedIteratorSpec for Rev<I>
Source§fn completed_back(&mut self) -> bool
fn completed_back(&mut self) -> bool
logic(open, prophetic)
self.iter_mut().completed()Source§fn produces_back(self, visited: Seq<Self::Item>, o: Self) -> bool
fn produces_back(self, visited: Seq<Self::Item>, o: Self) -> bool
logic(open, prophetic)
self.iter().produces(visited, o.iter())Source§fn produces_back_refl(self)
fn produces_back_refl(self)
logic(law) ⚠
ensures
self.produces_back(Seq::empty(), self)Source§fn produces_back_trans(
a: Self,
ab: Seq<Self::Item>,
b: Self,
bc: Seq<Self::Item>,
c: Self,
)
fn produces_back_trans( a: Self, ab: Seq<Self::Item>, b: Self, bc: Seq<Self::Item>, c: Self, )
logic(law) ⚠
requires
a.produces_back(ab, b)requires
b.produces_back(bc, c)ensures
a.produces_back(ab.concat(bc), c)Source§fn size_hint_back_spec(&self, r: (usize, Option<usize>))
fn size_hint_back_spec(&self, r: (usize, Option<usize>))
logic(law) ⚠
requires
Self::size_hint.postcondition((self,), r)ensures
forall<s: Seq<Self::Item>, i: &mut Self> self.produces_back(s, *i) && i.completed_back() ==> r.0@ <= s.len()
ensures
match r.1 { Some(r) => { forall<s: Seq<Self::Item>, i: Self> self.produces_back(s, i) ==> s.len() <= r@ } None => true }
Source§impl<Idx: DeepModel<DeepModelTy = Int> + Step> DoubleEndedIteratorSpec for Range<Idx>
Available on crate feature nightly only.
impl<Idx: DeepModel<DeepModelTy = Int> + Step> DoubleEndedIteratorSpec for Range<Idx>
nightly only.Source§fn produces_back(self, visited: Seq<Self::Item>, o: Self) -> bool
fn produces_back(self, visited: Seq<Self::Item>, o: Self) -> bool
logic(open)
self.start == o.start && self.end.deep_model() >= o.end.deep_model() && (visited.len() > 0 ==> o.end.deep_model() >= o.start.deep_model()) && visited.len() == self.end.deep_model() - o.end.deep_model() && forall<i> 0 <= i && i < visited.len() ==> visited[i].deep_model() == self.end.deep_model() - i - 1
Source§fn completed_back(&mut self) -> bool
fn completed_back(&mut self) -> bool
logic(open, prophetic)
self.completed()Source§fn produces_back_refl(self)
fn produces_back_refl(self)
logic(law) ⚠
ensures
self.produces_back(Seq::empty(), self)Source§fn produces_back_trans(
a: Self,
ab: Seq<Self::Item>,
b: Self,
bc: Seq<Self::Item>,
c: Self,
)
fn produces_back_trans( a: Self, ab: Seq<Self::Item>, b: Self, bc: Seq<Self::Item>, c: Self, )
logic(law) ⚠
requires
a.produces_back(ab, b)requires
b.produces_back(bc, c)ensures
a.produces_back(ab.concat(bc), c)Source§fn size_hint_back_spec(&self, r: (usize, Option<usize>))
fn size_hint_back_spec(&self, r: (usize, Option<usize>))
logic(law) ⚠
requires
Self::size_hint.postcondition((self,), r)ensures
forall<s: Seq<Self::Item>, i: &mut Self> self.produces_back(s, *i) && i.completed_back() ==> r.0@ <= s.len()
ensures
match r.1 { Some(r) => { forall<s: Seq<Self::Item>, i: Self> self.produces_back(s, i) ==> s.len() <= r@ } None => true }
Source§impl<Idx: DeepModel<DeepModelTy = Int> + Step> DoubleEndedIteratorSpec for RangeInclusive<Idx>
Available on crate feature nightly only.
impl<Idx: DeepModel<DeepModelTy = Int> + Step> DoubleEndedIteratorSpec for RangeInclusive<Idx>
nightly only.Source§fn produces_back(self, visited: Seq<Self::Item>, o: Self) -> bool
fn produces_back(self, visited: Seq<Self::Item>, o: Self) -> bool
logic(open)
visited.len() == range_inclusive_len(self) - range_inclusive_len(o) && (self.is_empty_log() ==> o.is_empty_log()) && (o.is_empty_log() || self.start_log() == o.start_log()) && forall<i> 0 <= i && i < visited.len() ==> visited[i].deep_model() == self.end_log().deep_model() - i
Source§fn completed_back(&mut self) -> bool
fn completed_back(&mut self) -> bool
logic(open, prophetic)
self.completed()Source§fn produces_back_refl(self)
fn produces_back_refl(self)
logic(law) ⚠
ensures
self.produces_back(Seq::empty(), self)Source§fn produces_back_trans(
a: Self,
ab: Seq<Self::Item>,
b: Self,
bc: Seq<Self::Item>,
c: Self,
)
fn produces_back_trans( a: Self, ab: Seq<Self::Item>, b: Self, bc: Seq<Self::Item>, c: Self, )
logic(law) ⚠
requires
a.produces_back(ab, b)requires
b.produces_back(bc, c)ensures
a.produces_back(ab.concat(bc), c)Source§fn size_hint_back_spec(&self, r: (usize, Option<usize>))
fn size_hint_back_spec(&self, r: (usize, Option<usize>))
logic(law) ⚠
requires
Self::size_hint.postcondition((self,), r)ensures
forall<s: Seq<Self::Item>, i: &mut Self> self.produces_back(s, *i) && i.completed_back() ==> r.0@ <= s.len()
ensures
match r.1 { Some(r) => { forall<s: Seq<Self::Item>, i: Self> self.produces_back(s, i) ==> s.len() <= r@ } None => true }
Source§impl<T, A: Allocator> DoubleEndedIteratorSpec for IntoIter<T, A>
Available on crate feature nightly only.
impl<T, A: Allocator> DoubleEndedIteratorSpec for IntoIter<T, A>
nightly only.Source§fn produces_back(self, visited: Seq<T>, rhs: Self) -> bool
fn produces_back(self, visited: Seq<T>, rhs: Self) -> bool
logic(open)
self@ == rhs@.concat(visited.reverse())Source§fn completed_back(&mut self) -> bool
fn completed_back(&mut self) -> bool
logic(open, prophetic)
self.completed()Source§fn produces_back_refl(self)
fn produces_back_refl(self)
logic(law) ⚠
ensures
self.produces_back(Seq::empty(), self)Source§fn produces_back_trans(a: Self, ab: Seq<T>, b: Self, bc: Seq<T>, c: Self)
fn produces_back_trans(a: Self, ab: Seq<T>, b: Self, bc: Seq<T>, c: Self)
logic(law) ⚠
requires
a.produces_back(ab, b)requires
b.produces_back(bc, c)ensures
a.produces_back(ab.concat(bc), c)Source§fn size_hint_back_spec(&self, r: (usize, Option<usize>))
fn size_hint_back_spec(&self, r: (usize, Option<usize>))
logic(law) ⚠
requires
Self::size_hint.postcondition((self,), r)ensures
forall<s: Seq<Self::Item>, i: &mut Self> self.produces_back(s, *i) && i.completed_back() ==> r.0@ <= s.len()
ensures
match r.1 { Some(r) => { forall<s: Seq<Self::Item>, i: Self> self.produces_back(s, i) ==> s.len() <= r@ } None => true }
Source§impl<T, const N: usize> DoubleEndedIteratorSpec for IntoIter<T, N>
impl<T, const N: usize> DoubleEndedIteratorSpec for IntoIter<T, N>
Source§fn produces_back(self, visited: Seq<T>, o: Self) -> bool
fn produces_back(self, visited: Seq<T>, o: Self) -> bool
logic(open)
self@ == o@.concat(visited.reverse())Source§fn completed_back(&mut self) -> bool
fn completed_back(&mut self) -> bool
logic(open, prophetic)
self.completed()Source§fn produces_back_refl(self)
fn produces_back_refl(self)
logic(law) ⚠
ensures
self.produces_back(Seq::empty(), self)Source§fn produces_back_trans(a: Self, ab: Seq<T>, b: Self, bc: Seq<T>, c: Self)
fn produces_back_trans(a: Self, ab: Seq<T>, b: Self, bc: Seq<T>, c: Self)
logic(law) ⚠
requires
a.produces_back(ab, b)requires
b.produces_back(bc, c)ensures
a.produces_back(ab.concat(bc), c)Source§fn size_hint_back_spec(&self, r: (usize, Option<usize>))
fn size_hint_back_spec(&self, r: (usize, Option<usize>))
logic(law) ⚠
requires
Self::size_hint.postcondition((self,), r)ensures
forall<s: Seq<Self::Item>, i: &mut Self> self.produces_back(s, *i) && i.completed_back() ==> r.0@ <= s.len()
ensures
match r.1 { Some(r) => { forall<s: Seq<Self::Item>, i: Self> self.produces_back(s, i) ==> s.len() <= r@ } None => true }