Skip to main content

FullBorrow

Struct FullBorrow 

Source
pub struct FullBorrow<T>(/* private fields */);
Expand description

A mutable borrow, with a synthetic lifetime.

Correct usage of this borrow (e.g. non-aliasing) is checked by respecting the contracts of the associated functions.

Objects of this type may only be constructed in ghost.

Implementations§

Source§

impl<T> FullBorrow<T>

Source

pub fn lft(self) -> Lifetime

The lifetime of this borrow

logic(opaque)

Source

pub fn cur(self) -> T

The current value of this borrow.

logic(opaque)

Source

pub fn fin(self) -> T

The final value of this borrow.

Also accessible with the final operator ^.

logic(open, prophetic)

^self

Source

pub fn new( x: Ghost<T>, lft: Snapshot<Lifetime>, ) -> (Ghost<Self>, Ghost<EndBorrow<T>>)

Create a new full borrow of the value x.

Note that it also gives back a value of type EndBorrow, that can be used to get back the original value once the lifetime of the borrow has ended.

§in Rustbelt

This is the ‘LftL-borrow’ rule.

terminates

ghost

ensures

result.0.cur() == *x

ensures

result.0.lft() == *lft && result.1.lft() == *lft

ensures

^result.0 == ^result.1

Source

pub fn borrow<'a>(&'a self, token: &'a LifetimeToken) -> &'a T

Get an immutable borrow to read the value.

The token object ensures that the lifetime of the FullBorrow has not expired yet.

terminates

ghost

requires

self.lft() == token.lft()

ensures

*result == self.cur()

Source

pub fn borrow_mut<'a>(&'a mut self, token: &'a LifetimeToken) -> &'a mut T

Get a mutable borrow to write into the value.

The token object ensures that the lifetime of the FullBorrow has not expired yet.

Functionally equivalent to a reborrow.

§In Rustbelt

This is the rule ‘LftL-bor-unnest’ (but mixed between syntactic and synthetic lifetimes).

terminates

ghost

requires

self.lft() == token.lft()

ensures

(^self).lft() == self.lft()

ensures

^^self == ^*self

ensures

(*self).cur() == *result && (^self).cur() == ^result

Source

pub fn map<U, F>(self, f: F, token: &LifetimeToken) -> FullBorrow<U>
where F: for<'a> FnOnce(&'a mut T) -> &'a mut U + FnGhost,

Change the type of a full borrow.

This is similar to std::cell::RefMut::map.

terminates

ghost

requires

self.lft() == token.lft()

requires

forall<b: &mut T> *b == self.cur() && ^b == ^self ==>
    f.precondition((b,))

ensures

exists<b: &mut T, res: &mut U>
    *b == self.cur() && ^b == ^self && *res == result.cur() && ^res == ^result &&
    f.postcondition_once((b,), res)

ensures

result.lft() == self.lft()

Source§

impl<T> FullBorrow<(T,)>

Source

pub fn split(self) -> (FullBorrow<T>,)

terminates

ghost

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).$idx

Source§

impl<T0> FullBorrow<T0>

Source

pub fn map_split_1<T, F>(self, f: F, token: &LifetimeToken) -> (FullBorrow<T>,)
where F: for<'a> FnOnce(&'a mut T0) -> (&'a mut T,) + FnGhost,

terminates

ghost

requires

self.lft() == token.lft()

requires

forall<b: &mut T0> *b == self.cur() && ^b == ^self ==>
    f.precondition((b,))

ensures

exists<b: &mut T0, res: ($(&mut $name,)+)>
    *b == self.cur() && ^b == ^self &&
    $(*res.$idx == result.$idx.cur() && ^res.$idx == ^result.$idx &&)+
    f.postcondition_once((b,), res)

ensures

result.$idx.lft() == self.lft()

Source§

impl<U, T> FullBorrow<(U, T)>

Source

pub fn split(self) -> (FullBorrow<U>, FullBorrow<T>)

terminates

ghost

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

Source§

impl<T0> FullBorrow<T0>

Source

pub fn map_split_2<U, T, F>( self, f: F, token: &LifetimeToken, ) -> (FullBorrow<U>, FullBorrow<T>)
where F: for<'a> FnOnce(&'a mut T0) -> (&'a mut U, &'a mut T) + FnGhost,

terminates

ghost

requires

self.lft() == token.lft()

requires

forall<b: &mut T0> *b == self.cur() && ^b == ^self ==>
    f.precondition((b,))

ensures

exists<b: &mut T0, res: ($(&mut $name,)+)>
    *b == self.cur() && ^b == ^self &&
    $(*res.$idx == result.$idx.cur() && ^res.$idx == ^result.$idx &&)+
    f.postcondition_once((b,), res)

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

Source§

impl<V, U, T> FullBorrow<(V, U, T)>

Source

pub fn split(self) -> (FullBorrow<V>, FullBorrow<U>, FullBorrow<T>)

terminates

ghost

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

Source§

impl<T0> FullBorrow<T0>

Source

pub fn map_split_3<V, U, T, F>( self, f: F, token: &LifetimeToken, ) -> (FullBorrow<V>, FullBorrow<U>, FullBorrow<T>)

terminates

ghost

requires

self.lft() == token.lft()

requires

forall<b: &mut T0> *b == self.cur() && ^b == ^self ==>
    f.precondition((b,))

ensures

exists<b: &mut T0, res: ($(&mut $name,)+)>
    *b == self.cur() && ^b == ^self &&
    $(*res.$idx == result.$idx.cur() && ^res.$idx == ^result.$idx &&)+
    f.postcondition_once((b,), res)

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

Source§

impl<W, V, U, T> FullBorrow<(W, V, U, T)>

Source

pub fn split( self, ) -> (FullBorrow<W>, FullBorrow<V>, FullBorrow<U>, FullBorrow<T>)

terminates

ghost

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

Source§

impl<T0> FullBorrow<T0>

Source

pub fn map_split_4<W, V, U, T, F>( self, f: F, token: &LifetimeToken, ) -> (FullBorrow<W>, FullBorrow<V>, FullBorrow<U>, FullBorrow<T>)

terminates

ghost

requires

self.lft() == token.lft()

requires

forall<b: &mut T0> *b == self.cur() && ^b == ^self ==>
    f.precondition((b,))

ensures

exists<b: &mut T0, res: ($(&mut $name,)+)>
    *b == self.cur() && ^b == ^self &&
    $(*res.$idx == result.$idx.cur() && ^res.$idx == ^result.$idx &&)+
    f.postcondition_once((b,), res)

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

Source§

impl<X, W, V, U, T> FullBorrow<(X, W, V, U, T)>

Source

pub fn split( self, ) -> (FullBorrow<X>, FullBorrow<W>, FullBorrow<V>, FullBorrow<U>, FullBorrow<T>)

terminates

ghost

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

Source§

impl<T0> FullBorrow<T0>

Source

pub fn map_split_5<X, W, V, U, T, F>( self, f: F, token: &LifetimeToken, ) -> (FullBorrow<X>, FullBorrow<W>, FullBorrow<V>, FullBorrow<U>, FullBorrow<T>)

terminates

ghost

requires

self.lft() == token.lft()

requires

forall<b: &mut T0> *b == self.cur() && ^b == ^self ==>
    f.precondition((b,))

ensures

exists<b: &mut T0, res: ($(&mut $name,)+)>
    *b == self.cur() && ^b == ^self &&
    $(*res.$idx == result.$idx.cur() && ^res.$idx == ^result.$idx &&)+
    f.postcondition_once((b,), res)

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

Source§

impl<Y, X, W, V, U, T> FullBorrow<(Y, X, W, V, U, T)>

Source

pub fn split( self, ) -> (FullBorrow<Y>, FullBorrow<X>, FullBorrow<W>, FullBorrow<V>, FullBorrow<U>, FullBorrow<T>)

terminates

ghost

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

Source§

impl<T0> FullBorrow<T0>

Source

pub fn map_split_6<Y, X, W, V, U, T, F>( self, f: F, token: &LifetimeToken, ) -> (FullBorrow<Y>, FullBorrow<X>, FullBorrow<W>, FullBorrow<V>, FullBorrow<U>, FullBorrow<T>)

terminates

ghost

requires

self.lft() == token.lft()

requires

forall<b: &mut T0> *b == self.cur() && ^b == ^self ==>
    f.precondition((b,))

ensures

exists<b: &mut T0, res: ($(&mut $name,)+)>
    *b == self.cur() && ^b == ^self &&
    $(*res.$idx == result.$idx.cur() && ^res.$idx == ^result.$idx &&)+
    f.postcondition_once((b,), res)

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

Source§

impl<Z, Y, X, W, V, U, T> FullBorrow<(Z, Y, X, W, V, U, T)>

Source

pub fn split( self, ) -> (FullBorrow<Z>, FullBorrow<Y>, FullBorrow<X>, FullBorrow<W>, FullBorrow<V>, FullBorrow<U>, FullBorrow<T>)

terminates

ghost

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

Source§

impl<T0> FullBorrow<T0>

Source

pub fn map_split_7<Z, Y, X, W, V, U, T, F>( self, f: F, token: &LifetimeToken, ) -> (FullBorrow<Z>, FullBorrow<Y>, FullBorrow<X>, FullBorrow<W>, FullBorrow<V>, FullBorrow<U>, FullBorrow<T>)

terminates

ghost

requires

self.lft() == token.lft()

requires

forall<b: &mut T0> *b == self.cur() && ^b == ^self ==>
    f.precondition((b,))

ensures

exists<b: &mut T0, res: ($(&mut $name,)+)>
    *b == self.cur() && ^b == ^self &&
    $(*res.$idx == result.$idx.cur() && ^res.$idx == ^result.$idx &&)+
    f.postcondition_once((b,), res)

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

Source§

impl<A, Z, Y, X, W, V, U, T> FullBorrow<(A, Z, Y, X, W, V, U, T)>

Source

pub fn split( self, ) -> (FullBorrow<A>, FullBorrow<Z>, FullBorrow<Y>, FullBorrow<X>, FullBorrow<W>, FullBorrow<V>, FullBorrow<U>, FullBorrow<T>)

terminates

ghost

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

Source§

impl<T0> FullBorrow<T0>

Source

pub fn map_split_8<A, Z, Y, X, W, V, U, T, F>( self, f: F, token: &LifetimeToken, ) -> (FullBorrow<A>, FullBorrow<Z>, FullBorrow<Y>, FullBorrow<X>, FullBorrow<W>, FullBorrow<V>, FullBorrow<U>, FullBorrow<T>)

terminates

ghost

requires

self.lft() == token.lft()

requires

forall<b: &mut T0> *b == self.cur() && ^b == ^self ==>
    f.precondition((b,))

ensures

exists<b: &mut T0, res: ($(&mut $name,)+)>
    *b == self.cur() && ^b == ^self &&
    $(*res.$idx == result.$idx.cur() && ^res.$idx == ^result.$idx &&)+
    f.postcondition_once((b,), res)

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

Source§

impl<B, A, Z, Y, X, W, V, U, T> FullBorrow<(B, A, Z, Y, X, W, V, U, T)>

Source

pub fn split( self, ) -> (FullBorrow<B>, FullBorrow<A>, FullBorrow<Z>, FullBorrow<Y>, FullBorrow<X>, FullBorrow<W>, FullBorrow<V>, FullBorrow<U>, FullBorrow<T>)

terminates

ghost

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

Source§

impl<T0> FullBorrow<T0>

Source

pub fn map_split_9<B, A, Z, Y, X, W, V, U, T, F>( self, f: F, token: &LifetimeToken, ) -> (FullBorrow<B>, FullBorrow<A>, FullBorrow<Z>, FullBorrow<Y>, FullBorrow<X>, FullBorrow<W>, FullBorrow<V>, FullBorrow<U>, FullBorrow<T>)

terminates

ghost

requires

self.lft() == token.lft()

requires

forall<b: &mut T0> *b == self.cur() && ^b == ^self ==>
    f.precondition((b,))

ensures

exists<b: &mut T0, res: ($(&mut $name,)+)>
    *b == self.cur() && ^b == ^self &&
    $(*res.$idx == result.$idx.cur() && ^res.$idx == ^result.$idx &&)+
    f.postcondition_once((b,), res)

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

Source§

impl<C, B, A, Z, Y, X, W, V, U, T> FullBorrow<(C, B, A, Z, Y, X, W, V, U, T)>

Source

pub fn split( self, ) -> (FullBorrow<C>, FullBorrow<B>, FullBorrow<A>, FullBorrow<Z>, FullBorrow<Y>, FullBorrow<X>, FullBorrow<W>, FullBorrow<V>, FullBorrow<U>, FullBorrow<T>)

terminates

ghost

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

Source§

impl<T0> FullBorrow<T0>

Source

pub fn map_split_10<C, B, A, Z, Y, X, W, V, U, T, F>( self, f: F, token: &LifetimeToken, ) -> (FullBorrow<C>, FullBorrow<B>, FullBorrow<A>, FullBorrow<Z>, FullBorrow<Y>, FullBorrow<X>, FullBorrow<W>, FullBorrow<V>, FullBorrow<U>, FullBorrow<T>)

terminates

ghost

requires

self.lft() == token.lft()

requires

forall<b: &mut T0> *b == self.cur() && ^b == ^self ==>
    f.precondition((b,))

ensures

exists<b: &mut T0, res: ($(&mut $name,)+)>
    *b == self.cur() && ^b == ^self &&
    $(*res.$idx == result.$idx.cur() && ^res.$idx == ^result.$idx &&)+
    f.postcondition_once((b,), res)

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

Source§

impl<D, C, B, A, Z, Y, X, W, V, U, T> FullBorrow<(D, C, B, A, Z, Y, X, W, V, U, T)>

Source

pub fn split( self, ) -> (FullBorrow<D>, FullBorrow<C>, FullBorrow<B>, FullBorrow<A>, FullBorrow<Z>, FullBorrow<Y>, FullBorrow<X>, FullBorrow<W>, FullBorrow<V>, FullBorrow<U>, FullBorrow<T>)

terminates

ghost

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

Source§

impl<T0> FullBorrow<T0>

Source

pub fn map_split_11<D, C, B, A, Z, Y, X, W, V, U, T, F>( self, f: F, token: &LifetimeToken, ) -> (FullBorrow<D>, FullBorrow<C>, FullBorrow<B>, FullBorrow<A>, FullBorrow<Z>, FullBorrow<Y>, FullBorrow<X>, FullBorrow<W>, FullBorrow<V>, FullBorrow<U>, FullBorrow<T>)

terminates

ghost

requires

self.lft() == token.lft()

requires

forall<b: &mut T0> *b == self.cur() && ^b == ^self ==>
    f.precondition((b,))

ensures

exists<b: &mut T0, res: ($(&mut $name,)+)>
    *b == self.cur() && ^b == ^self &&
    $(*res.$idx == result.$idx.cur() && ^res.$idx == ^result.$idx &&)+
    f.postcondition_once((b,), res)

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

Source§

impl<E, D, C, B, A, Z, Y, X, W, V, U, T> FullBorrow<(E, D, C, B, A, Z, Y, X, W, V, U, T)>

Source

pub fn split( self, ) -> (FullBorrow<E>, FullBorrow<D>, FullBorrow<C>, FullBorrow<B>, FullBorrow<A>, FullBorrow<Z>, FullBorrow<Y>, FullBorrow<X>, FullBorrow<W>, FullBorrow<V>, FullBorrow<U>, FullBorrow<T>)

terminates

ghost

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.cur() == self.cur().$idx && ^result.$idx == (^self).

Source§

impl<T0> FullBorrow<T0>

Source

pub fn map_split_12<E, D, C, B, A, Z, Y, X, W, V, U, T, F>( self, f: F, token: &LifetimeToken, ) -> (FullBorrow<E>, FullBorrow<D>, FullBorrow<C>, FullBorrow<B>, FullBorrow<A>, FullBorrow<Z>, FullBorrow<Y>, FullBorrow<X>, FullBorrow<W>, FullBorrow<V>, FullBorrow<U>, FullBorrow<T>)

terminates

ghost

requires

self.lft() == token.lft()

requires

forall<b: &mut T0> *b == self.cur() && ^b == ^self ==>
    f.precondition((b,))

ensures

exists<b: &mut T0, res: ($(&mut $name,)+)>
    *b == self.cur() && ^b == ^self &&
    $(*res.$idx == result.$idx.cur() && ^res.$idx == ^result.$idx &&)+
    f.postcondition_once((b,), res)

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

ensures

result.$idx.lft() == self.lft()

Trait Implementations§

Source§

impl<T> Fin for FullBorrow<T>

Source§

fn fin<'a>(self) -> &'a T

logic(opaque, prophetic)

Source§

type Target = T

Source§

impl<T> Invariant for FullBorrow<T>

Source§

fn invariant(self) -> bool

logic(open, prophetic, inline)

inv(self.cur()) && inv(^self)

Source§

impl<T> Resolve for FullBorrow<T>

Source§

fn resolve(self) -> bool

logic(open, prophetic)

self.cur() == ^self

Source§

fn resolve_coherence(self)

logic(prophetic)

requires

inv(self)

requires

structural_resolve(self)

ensures

self.resolve()

Source§

impl<T: Objective> Objective for FullBorrow<T>

Source§

impl<T: Send> Send for FullBorrow<T>

Source§

impl<T: Sync> Sync for FullBorrow<T>

Auto Trait Implementations§

§

impl<T> Freeze for FullBorrow<T>

§

impl<T> RefUnwindSafe for FullBorrow<T>
where T: RefUnwindSafe,

§

impl<T> Unpin for FullBorrow<T>

§

impl<T> UnsafeUnpin for FullBorrow<T>

§

impl<T> UnwindSafe for FullBorrow<T>
where T: RefUnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.