Skip to main content

VerusCommutativeProof

Struct VerusCommutativeProof 

Source
pub struct VerusCommutativeProof { /* private fields */ }
Expand description

A machine-checked proof of commutativity, verified by Verus.

Created by the verus_proof_commutative_fold!, verus_proof_commutative_map!, verus_proof_commutative_filter!, and verus_proof_commutative_effect! macros, one per closure shape, each generating the precise obligation that makes reordering unobservable for that shape (final accumulator, output multiset, retained multiset, or captured state, respectively). The obligation is generated by the macro directly from the actual closure body — it symbolically executes the body in both orders (x then y, and y then x) from equal initial states and requires the observable results to be equal — so users never write (and cannot weaken) the assertion. Users only declare the types involved and, optionally, provide a proof script to help the SMT solver, which is itself checked by Verus.

When the crate is verified with cargo verus verify, Verus checks the obligation (which also proves the closure body panic-free, e.g. no arithmetic overflow). Under normal compilation, the proof is erased and this type simply marks the property as proven. This type only implements CommutativeProof, so it cannot be used to fulfill a different property (e.g. idempotent = ...).

Trait Implementations§

Source§

impl<T, B: Boundedness> CommutativeProof<T, B> for VerusCommutativeProof

Source§

fn register_proof(&self, _expr: &Expr)

Registers the expression with the proof mechanism. Read more
Source§

fn take_hook(&mut self) -> Option<OrderingHook<T, B>>

Takes the simulator ordering hook attached to this proof, if any.
Source§

impl Default for VerusCommutativeProof

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

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.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToSinkBuild for T

Source§

fn iter_to_sink_build(self) -> SendIterBuild<Self>
where Self: Sized + Iterator,

Starts a SinkBuild adaptor chain to send all items from self as an Iterator.
Source§

fn stream_to_sink_build(self) -> SendStreamBuild<Self>
where Self: Sized + Stream,

Starts a SinkBuild adaptor chain to send all items from self as a [Stream].
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more