DoubleEndedIteratorSpec

Trait DoubleEndedIteratorSpec 

Source
pub trait DoubleEndedIteratorSpec: DoubleEndedIterator + IteratorSpec {
    // Required methods
    fn produces_back(self, visited: Seq<Self::Item>, o: 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,
    );
}

Required Methods§

Source

fn produces_back(self, visited: Seq<Self::Item>, o: Self) -> bool

(prophetic)

Source

fn produces_back_refl(self)

(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, )

(law)

requires

a.produces_back(ab, b)

requires

b.produces_back(bc, c)

ensures

a.produces_back(ab.concat(bc), c)

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl<Idx: DeepModel<DeepModelTy = Int> + Step> DoubleEndedIteratorSpec for Range<Idx>

Available on crate feature nightly only.
Source§

fn produces_back(self, visited: Seq<Self::Item>, o: Self) -> bool

(open)

pearlite! {
    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() == o.end.deep_model() - self.end.deep_model()
    && forall<i> 0 <= i && i < visited.len() ==>
        visited[i].deep_model() == self.end.deep_model() - i
}
Source§

fn produces_back_refl(self)

(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, )

(law)

requires

a.produces_back(ab, b)

requires

b.produces_back(bc, c)

ensures

a.produces_back(ab.concat(bc), c)

Source§

impl<Idx: DeepModel<DeepModelTy = Int> + Step> DoubleEndedIteratorSpec for RangeInclusive<Idx>

Available on crate feature nightly only.
Source§

fn produces_back(self, visited: Seq<Self::Item>, o: Self) -> bool

(open)

pearlite! {
    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 produces_back_refl(self)

(open, 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, )

(open, law)

{}

requires

a.produces_back(ab, b)

requires

b.produces_back(bc, c)

ensures

a.produces_back(ab.concat(bc), c)

Implementors§