Resolve

Trait Resolve 

Source
pub trait Resolve {
    // Required methods
    fn resolve(self) -> bool;
    fn resolve_coherence(self);
}
Expand description

The trait Resolve makes it possible to expose to clients a custom resolve assertion for opaque types.

For example, if a library defines a notion of finite mapping, it does not exposes the internal representation of the finite mapping data structure. Hence, the resolve predicate above wil be completely opaque for clients. This library should implement the Resolve trait in order to provide to the client a definition it can use. E.g., Resolve::resolve states that any element of the mapping is resolved.

Required Methods§

Source

fn resolve(self) -> bool

(prophetic)

Source

fn resolve_coherence(self)

(prophetic)

requires

inv(self)

requires

structural_resolve(self)

ensures

self.resolve()

Implementations on Foreign Types§

Source§

impl<'a, T> Resolve for IterMut<'a, T>

Source§

fn resolve(self) -> bool

(open, prophetic, inline)

pearlite! { *self@ == ^self@ }

Source§

fn resolve_coherence(self)

(prophetic)

requires

structural_resolve(self)

ensures

self.resolve()

Source§

impl<'a, T: ?Sized> Resolve for &'a T

Source§

fn resolve(self) -> bool

(open)

true

Source§

fn resolve_coherence(self)

ensures

self.resolve()

Source§

impl<'a, T: ?Sized> Resolve for &'a mut T

Source§

fn resolve(self) -> bool

(open)

true

Source§

fn resolve_coherence(self)

ensures

self.resolve()

Source§

impl<I> Resolve for Cloned<I>

Source§

fn resolve(self) -> bool

(open, prophetic, inline)

resolve(self.iter())

Source§

fn resolve_coherence(self)

(prophetic)

requires

structural_resolve(self)

ensures

self.resolve()

Source§

impl<I> Resolve for Copied<I>

Source§

fn resolve(self) -> bool

(open, prophetic, inline)

resolve(self.iter())

Source§

fn resolve_coherence(self)

(prophetic)

requires

structural_resolve(self)

ensures

self.resolve()

Source§

impl<I> Resolve for Enumerate<I>

Source§

fn resolve(self) -> bool

(open, prophetic, inline)

resolve(self.iter())

Source§

fn resolve_coherence(self)

(prophetic)

requires

structural_resolve(self)

ensures

self.resolve()

Source§

impl<I> Resolve for Skip<I>

Source§

fn resolve(self) -> bool

(open, prophetic, inline)

resolve(self.iter())

Source§

fn resolve_coherence(self)

(prophetic)

requires

structural_resolve(self)

ensures

self.resolve()

Source§

impl<I> Resolve for Take<I>

Source§

fn resolve(self) -> bool

(open, prophetic, inline)

resolve(self.iter())

Source§

fn resolve_coherence(self)

(prophetic)

requires

structural_resolve(self)

ensures

self.resolve()

Source§

impl<I, F> Resolve for Map<I, F>

Source§

fn resolve(self) -> bool

(open, prophetic, inline)

resolve(self.iter()) && resolve(self.func())

Source§

fn resolve_coherence(self)

(prophetic)

requires

structural_resolve(self)

ensures

self.resolve()

Source§

impl<T> Resolve for [T]

Source§

fn resolve(self) -> bool

(open, prophetic, inline)

pearlite! { forall<i> 0 <= i && i < self@.len() ==> resolve(self[i]) }
Source§

fn resolve_coherence(self)

(prophetic)

requires

structural_resolve(self)

ensures

self.resolve()

Source§

impl<T, A: Allocator> Resolve for VecDeque<T, A>

Available on crate feature nightly only.
Source§

fn resolve(self) -> bool

(open, prophetic, inline)

pearlite! { forall<i> 0 <= i && i < self@.len() ==> resolve(self[i]) }
Source§

fn resolve_coherence(self)

(prophetic)

requires

structural_resolve(self)

ensures

self.resolve()

Source§

impl<T, A: Allocator> Resolve for IntoIter<T, A>

Available on crate feature nightly only.
Source§

fn resolve(self) -> bool

(open, prophetic, inline)

pearlite! { forall<i> 0 <= i && i < self@.len() ==> resolve(self@[i]) }
Source§

fn resolve_coherence(self)

(prophetic)

requires

structural_resolve(self)

ensures

self.resolve()

Source§

impl<T, A: Allocator> Resolve for Vec<T, A>

Available on crate feature nightly only.
Source§

fn resolve(self) -> bool

(open, prophetic, inline)

pearlite! { forall<i> 0 <= i && i < self@.len() ==> resolve(self[i]) }
Source§

fn resolve_coherence(self)

(prophetic)

requires

structural_resolve(self)

ensures

self.resolve()

Source§

impl<T, const N: usize> Resolve for [T; N]

Source§

fn resolve(self) -> bool

(open, prophetic, inline)

pearlite! { forall<i: Int> 0 <= i && i < N@ ==> resolve(self@[i]) }
Source§

fn resolve_coherence(self)

(prophetic)

requires

structural_resolve(self)

ensures

self.resolve()

Source§

impl<T: ?Sized, A: Allocator> Resolve for Box<T, A>

Available on crate feature nightly only.
Source§

fn resolve(self) -> bool

(open, prophetic, inline)

true

Source§

fn resolve_coherence(self)

(prophetic)

requires

structural_resolve(self)

ensures

self.resolve()

Implementors§

Source§

impl<K, V> Resolve for FMap<K, V>

Source§

impl<T> Resolve for FSet<T>

Source§

impl<T> Resolve for Seq<T>

Source§

impl<T> Resolve for SeqIter<T>

Source§

impl<T: InhabitedInvariant> Resolve for Subset<T>

Source§

impl<T: ?Sized> Resolve for PermCellOwn<T>