Skip to main content

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

logic(prophetic)

Source

fn resolve_coherence(self)

logic(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

logic(open, prophetic, inline)

*self@ == ^self@

Source§

fn resolve_coherence(self)

logic(prophetic)

requires

structural_resolve(self)

ensures

self.resolve()

Source§

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

Source§

fn resolve(self) -> bool

logic(open)

true

Source§

fn resolve_coherence(self)

logic

ensures

self.resolve()

Source§

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

Source§

fn resolve(self) -> bool

logic(open)

true

Source§

fn resolve_coherence(self)

logic

ensures

self.resolve()

Source§

impl<I> Resolve for Cloned<I>

Source§

fn resolve(self) -> bool

logic(open, prophetic, inline)

resolve(self.iter())

Source§

fn resolve_coherence(self)

logic(prophetic)

requires

structural_resolve(self)

ensures

self.resolve()

Source§

impl<I> Resolve for Copied<I>

Source§

fn resolve(self) -> bool

logic(open, prophetic, inline)

resolve(self.iter())

Source§

fn resolve_coherence(self)

logic(prophetic)

requires

structural_resolve(self)

ensures

self.resolve()

Source§

impl<I> Resolve for Enumerate<I>

Source§

fn resolve(self) -> bool

logic(open, prophetic, inline)

resolve(self.iter())

Source§

fn resolve_coherence(self)

logic(prophetic)

requires

structural_resolve(self)

ensures

self.resolve()

Source§

impl<I> Resolve for Skip<I>

Source§

fn resolve(self) -> bool

logic(open, prophetic, inline)

resolve(self.iter())

Source§

fn resolve_coherence(self)

logic(prophetic)

requires

structural_resolve(self)

ensures

self.resolve()

Source§

impl<I> Resolve for Take<I>

Source§

fn resolve(self) -> bool

logic(open, prophetic, inline)

resolve(self.iter())

Source§

fn resolve_coherence(self)

logic(prophetic)

requires

structural_resolve(self)

ensures

self.resolve()

Source§

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

Source§

fn resolve(self) -> bool

logic(open, prophetic, inline)

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

Source§

fn resolve_coherence(self)

logic(prophetic)

requires

structural_resolve(self)

ensures

self.resolve()

Source§

impl<T> Resolve for [T]

Source§

fn resolve(self) -> bool

logic(open, prophetic, inline)

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

fn resolve_coherence(self)

logic(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

logic(open, prophetic, inline)

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

fn resolve_coherence(self)

logic(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

logic(open, prophetic, inline)

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

fn resolve_coherence(self)

logic(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

logic(open, prophetic, inline)

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

fn resolve_coherence(self)

logic(prophetic)

requires

structural_resolve(self)

ensures

self.resolve()

Source§

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

Source§

fn resolve(self) -> bool

logic(open, prophetic, inline)

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

fn resolve_coherence(self)

logic(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

logic(open, prophetic, inline)

true

Source§

fn resolve_coherence(self)

logic(prophetic)

requires

structural_resolve(self)

ensures

self.resolve()

Implementors§

Source§

impl<C: ?Sized + Container> Resolve for Perm<C>

Source§

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

Source§

impl<T> Resolve for Seq<T>

Source§

impl<T> Resolve for SeqIter<T>

Source§

impl<T> Resolve for FSet<T>

Source§

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