pub trait CountToken: Sized {
// Required methods
spec fn instance_id(&self) -> InstanceId;
spec fn count(&self) -> nat;
proof fn join(tracked &mut self, tracked other: Self);
proof fn split(tracked &mut self, count: nat) -> tracked token : Self;
proof fn weaken_shared(tracked &self, count: nat) -> tracked s : &Self;
proof fn arbitrary() -> tracked s : Self;
}Expand description
Interface for VerusSync tokens created for a field marked with the count strategy.
| VerusSync Strategy | Field type | Token trait |
|---|---|---|
count | nat | CountToken |
These tokens are “fungible” in the sense that they can be combined and split, numbers combining additively.
(For the persistent_count strategy, see MonotonicCountToken.)
Required Methods§
Sourcespec fn instance_id(&self) -> InstanceId
spec fn instance_id(&self) -> InstanceId
Sourceproof fn join(tracked &mut self, tracked other: Self)
proof fn join(tracked &mut self, tracked other: Self)
requires
old(self).instance_id() == other.instance_id(),ensuresself.instance_id() == old(self).instance_id(),self.count() == old(self).count() + other.count(),Sourceproof fn split(tracked &mut self, count: nat) -> tracked token : Self
proof fn split(tracked &mut self, count: nat) -> tracked token : Self
requires
count <= old(self).count(),ensuresself.instance_id() == old(self).instance_id(),self.count() == old(self).count() - count,token.instance_id() == old(self).instance_id(),token.count() == count,requires
count <= self.count(),ensuress.instance_id() == self.instance_id(),s.count() == count,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.