pub trait DeepModel {
type DeepModelTy;
// Required method
fn deep_model(self) -> Self::DeepModelTy;
}Expand description
The deep model corresponds to the model used for specifying operations such as equality, hash function or ordering, which are computed deeply in a data structure. Typically, such a model recursively calls deep models of inner types.
Required Associated Types§
type DeepModelTy
Required Methods§
Sourcefn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic ⚠
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementations on Foreign Types§
Source§impl DeepModel for ()
impl DeepModel for ()
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
/* Macro-generated */type DeepModelTy = ()
Source§impl DeepModel for BigRational
Available on creusot and crate feature std only.
impl DeepModel for BigRational
creusot and crate feature std only.Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(opaque) ⚠
type DeepModelTy = Real
Source§impl DeepModel for Duration
impl DeepModel for Duration
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self.view()type DeepModelTy = Int
Source§impl DeepModel for Instant
Available on crate feature std only.
impl DeepModel for Instant
std only.Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self.view()type DeepModelTy = Int
Source§impl DeepModel for Ordering
impl DeepModel for Ordering
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
selftype DeepModelTy = Ordering
Source§impl DeepModel for String
Available on crate feature std only.
impl DeepModel for String
std only.Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic ⚠
type DeepModelTy = Seq<char>
Source§impl DeepModel for bool
impl DeepModel for bool
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
selftype DeepModelTy = bool
Source§impl DeepModel for char
impl DeepModel for char
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self@type DeepModelTy = Int
Source§impl DeepModel for i8
impl DeepModel for i8
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self@type DeepModelTy = Int
Source§impl DeepModel for i16
impl DeepModel for i16
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self@type DeepModelTy = Int
Source§impl DeepModel for i32
impl DeepModel for i32
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self@type DeepModelTy = Int
Source§impl DeepModel for i64
impl DeepModel for i64
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self@type DeepModelTy = Int
Source§impl DeepModel for i128
impl DeepModel for i128
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self@type DeepModelTy = Int
Source§impl DeepModel for isize
impl DeepModel for isize
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self@type DeepModelTy = Int
Source§impl DeepModel for str
impl DeepModel for str
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic ⚠
type DeepModelTy = Seq<char>
Source§impl DeepModel for u8
impl DeepModel for u8
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self@type DeepModelTy = Int
Source§impl DeepModel for u16
impl DeepModel for u16
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self@type DeepModelTy = Int
Source§impl DeepModel for u32
impl DeepModel for u32
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self@type DeepModelTy = Int
Source§impl DeepModel for u64
impl DeepModel for u64
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self@type DeepModelTy = Int
Source§impl DeepModel for u128
impl DeepModel for u128
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self@type DeepModelTy = Int
Source§impl DeepModel for usize
impl DeepModel for usize
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self@type DeepModelTy = Int
Source§impl<A: DeepModel, Z: DeepModel, Y: DeepModel, X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (A, Z, Y, X, W, V, U, T)
impl<A: DeepModel, Z: DeepModel, Y: DeepModel, X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (A, Z, Y, X, W, V, U, T)
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self.$idx.deep_model(),type DeepModelTy = (<A as DeepModel>::DeepModelTy, <Z as DeepModel>::DeepModelTy, <Y as DeepModel>::DeepModelTy, <X as DeepModel>::DeepModelTy, <W as DeepModel>::DeepModelTy, <V as DeepModel>::DeepModelTy, <U as DeepModel>::DeepModelTy, <T as DeepModel>::DeepModelTy)
Source§impl<B: DeepModel, A: DeepModel, Z: DeepModel, Y: DeepModel, X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (B, A, Z, Y, X, W, V, U, T)
impl<B: DeepModel, A: DeepModel, Z: DeepModel, Y: DeepModel, X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (B, A, Z, Y, X, W, V, U, T)
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self.$idx.deep_model(),type DeepModelTy = (<B as DeepModel>::DeepModelTy, <A as DeepModel>::DeepModelTy, <Z as DeepModel>::DeepModelTy, <Y as DeepModel>::DeepModelTy, <X as DeepModel>::DeepModelTy, <W as DeepModel>::DeepModelTy, <V as DeepModel>::DeepModelTy, <U as DeepModel>::DeepModelTy, <T as DeepModel>::DeepModelTy)
Source§impl<C: DeepModel, B: DeepModel, A: DeepModel, Z: DeepModel, Y: DeepModel, X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (C, B, A, Z, Y, X, W, V, U, T)
impl<C: DeepModel, B: DeepModel, A: DeepModel, Z: DeepModel, Y: DeepModel, X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (C, B, A, Z, Y, X, W, V, U, T)
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self.$idx.deep_model(),type DeepModelTy = (<C as DeepModel>::DeepModelTy, <B as DeepModel>::DeepModelTy, <A as DeepModel>::DeepModelTy, <Z as DeepModel>::DeepModelTy, <Y as DeepModel>::DeepModelTy, <X as DeepModel>::DeepModelTy, <W as DeepModel>::DeepModelTy, <V as DeepModel>::DeepModelTy, <U as DeepModel>::DeepModelTy, <T as DeepModel>::DeepModelTy)
Source§impl<D: DeepModel, C: DeepModel, B: DeepModel, A: DeepModel, Z: DeepModel, Y: DeepModel, X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (D, C, B, A, Z, Y, X, W, V, U, T)
impl<D: DeepModel, C: DeepModel, B: DeepModel, A: DeepModel, Z: DeepModel, Y: DeepModel, X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (D, C, B, A, Z, Y, X, W, V, U, T)
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self.$idx.deep_model(),type DeepModelTy = (<D as DeepModel>::DeepModelTy, <C as DeepModel>::DeepModelTy, <B as DeepModel>::DeepModelTy, <A as DeepModel>::DeepModelTy, <Z as DeepModel>::DeepModelTy, <Y as DeepModel>::DeepModelTy, <X as DeepModel>::DeepModelTy, <W as DeepModel>::DeepModelTy, <V as DeepModel>::DeepModelTy, <U as DeepModel>::DeepModelTy, <T as DeepModel>::DeepModelTy)
Source§impl<E: DeepModel, D: DeepModel, C: DeepModel, B: DeepModel, A: DeepModel, Z: DeepModel, Y: DeepModel, X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (E, D, C, B, A, Z, Y, X, W, V, U, T)
impl<E: DeepModel, D: DeepModel, C: DeepModel, B: DeepModel, A: DeepModel, Z: DeepModel, Y: DeepModel, X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (E, D, C, B, A, Z, Y, X, W, V, U, T)
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self.$idx.deep_model(),type DeepModelTy = (<E as DeepModel>::DeepModelTy, <D as DeepModel>::DeepModelTy, <C as DeepModel>::DeepModelTy, <B as DeepModel>::DeepModelTy, <A as DeepModel>::DeepModelTy, <Z as DeepModel>::DeepModelTy, <Y as DeepModel>::DeepModelTy, <X as DeepModel>::DeepModelTy, <W as DeepModel>::DeepModelTy, <V as DeepModel>::DeepModelTy, <U as DeepModel>::DeepModelTy, <T as DeepModel>::DeepModelTy)
Source§impl<T: ?Sized> DeepModel for *const T
impl<T: ?Sized> DeepModel for *const T
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(opaque) ⚠
ensures
result.addr == self.addr_logic()type DeepModelTy = PtrDeepModel
Source§impl<T: ?Sized> DeepModel for *mut T
impl<T: ?Sized> DeepModel for *mut T
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(opaque) ⚠
ensures
result.addr == self.addr_logic()type DeepModelTy = PtrDeepModel
Source§impl<T: ?Sized> DeepModel for NonNull<T>
impl<T: ?Sized> DeepModel for NonNull<T>
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self.view().deep_model()type DeepModelTy = <*mut T as DeepModel>::DeepModelTy
Source§impl<T: DeepModel + ?Sized, A: Allocator> DeepModel for Arc<T, A>
Available on crate feature nightly only.
impl<T: DeepModel + ?Sized, A: Allocator> DeepModel for Arc<T, A>
nightly only.Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
*self.view().deep_model()type DeepModelTy = <T as DeepModel>::DeepModelTy
Source§impl<T: DeepModel + ?Sized, A: Allocator> DeepModel for Box<T, A>
Available on crate feature nightly only.
impl<T: DeepModel + ?Sized, A: Allocator> DeepModel for Box<T, A>
nightly only.Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
Box::new((*self).deep_model())type DeepModelTy = Box<<T as DeepModel>::DeepModelTy>
Source§impl<T: DeepModel + ?Sized, A: Allocator> DeepModel for Rc<T, A>
Available on crate feature nightly only.
impl<T: DeepModel + ?Sized, A: Allocator> DeepModel for Rc<T, A>
nightly only.Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
*self.view().deep_model()type DeepModelTy = <T as DeepModel>::DeepModelTy
Source§impl<T: DeepModel + ?Sized> DeepModel for &T
impl<T: DeepModel + ?Sized> DeepModel for &T
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
(*self).deep_model()type DeepModelTy = <T as DeepModel>::DeepModelTy
Source§impl<T: DeepModel + ?Sized> DeepModel for &mut T
impl<T: DeepModel + ?Sized> DeepModel for &mut T
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
(*self).deep_model()type DeepModelTy = <T as DeepModel>::DeepModelTy
Source§impl<T: DeepModel, A: Allocator> DeepModel for Vec<T, A>
Available on crate feature nightly only.
impl<T: DeepModel, A: Allocator> DeepModel for Vec<T, A>
nightly only.Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(opaque) ⚠
ensures
self.view().len() == result.len()ensures
forall<i> 0 <= i && i < self.view().len() ==> result[i] == self[i].deep_model()
type DeepModelTy = Seq<<T as DeepModel>::DeepModelTy>
Source§impl<T: DeepModel, A: Allocator> DeepModel for VecDeque<T, A>
Available on crate feature nightly only.
impl<T: DeepModel, A: Allocator> DeepModel for VecDeque<T, A>
nightly only.Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(opaque) ⚠
ensures
self.view().len() == result.len()ensures
forall<i> 0 <= i && i < self.view().len() ==> result[i] == self[i].deep_model()
type DeepModelTy = Seq<<T as DeepModel>::DeepModelTy>
Source§impl<T: DeepModel, E: DeepModel> DeepModel for Result<T, E>
impl<T: DeepModel, E: DeepModel> DeepModel for Result<T, E>
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
match self { Ok(t) => Ok(t.deep_model()), Err(e) => Err(e.deep_model()), }
type DeepModelTy = Result<<T as DeepModel>::DeepModelTy, <E as DeepModel>::DeepModelTy>
Source§impl<T: DeepModel, const N: usize> DeepModel for [T; N]
impl<T: DeepModel, const N: usize> DeepModel for [T; N]
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(opaque) ⚠
ensures
self.view().len() == result.len()ensures
forall<i> 0 <= i && i < result.len() ==> result[i] == self[i].deep_model()
type DeepModelTy = Seq<<T as DeepModel>::DeepModelTy>
Source§impl<T: DeepModel> DeepModel for (T,)
impl<T: DeepModel> DeepModel for (T,)
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self.$idx.deep_model(),type DeepModelTy = (<T as DeepModel>::DeepModelTy,)
Source§impl<T: DeepModel> DeepModel for Bound<T>
impl<T: DeepModel> DeepModel for Bound<T>
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open)
match self { Bound::Included(b) => Bound::Included(b.deep_model()), Bound::Excluded(b) => Bound::Excluded(b.deep_model()), Bound::Unbounded => Bound::Unbounded, }
type DeepModelTy = Bound<<T as DeepModel>::DeepModelTy>
Source§impl<T: DeepModel> DeepModel for Option<T>
impl<T: DeepModel> DeepModel for Option<T>
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
match self { Some(t) => Some(t.deep_model()), None => None, }
type DeepModelTy = Option<<T as DeepModel>::DeepModelTy>
Source§impl<T: DeepModel> DeepModel for Reverse<T>
impl<T: DeepModel> DeepModel for Reverse<T>
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
Reverse(self.0.deep_model())type DeepModelTy = Reverse<<T as DeepModel>::DeepModelTy>
Source§impl<T: DeepModel> DeepModel for [T]
impl<T: DeepModel> DeepModel for [T]
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(opaque) ⚠
ensures
(&self)@.len() == result.len()ensures
forall<i> 0 <= i && i < result.len() ==> result[i] == (&self)[i].deep_model()
type DeepModelTy = Seq<<T as DeepModel>::DeepModelTy>
Source§impl<U: DeepModel, T: DeepModel> DeepModel for (U, T)
impl<U: DeepModel, T: DeepModel> DeepModel for (U, T)
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self.$idx.deep_model(),type DeepModelTy = (<U as DeepModel>::DeepModelTy, <T as DeepModel>::DeepModelTy)
Source§impl<V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (V, U, T)
impl<V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (V, U, T)
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self.$idx.deep_model(),type DeepModelTy = (<V as DeepModel>::DeepModelTy, <U as DeepModel>::DeepModelTy, <T as DeepModel>::DeepModelTy)
Source§impl<W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (W, V, U, T)
impl<W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (W, V, U, T)
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self.$idx.deep_model(),type DeepModelTy = (<W as DeepModel>::DeepModelTy, <V as DeepModel>::DeepModelTy, <U as DeepModel>::DeepModelTy, <T as DeepModel>::DeepModelTy)
Source§impl<X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (X, W, V, U, T)
impl<X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (X, W, V, U, T)
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self.$idx.deep_model(),type DeepModelTy = (<X as DeepModel>::DeepModelTy, <W as DeepModel>::DeepModelTy, <V as DeepModel>::DeepModelTy, <U as DeepModel>::DeepModelTy, <T as DeepModel>::DeepModelTy)
Source§impl<Y: DeepModel, X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (Y, X, W, V, U, T)
impl<Y: DeepModel, X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (Y, X, W, V, U, T)
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self.$idx.deep_model(),type DeepModelTy = (<Y as DeepModel>::DeepModelTy, <X as DeepModel>::DeepModelTy, <W as DeepModel>::DeepModelTy, <V as DeepModel>::DeepModelTy, <U as DeepModel>::DeepModelTy, <T as DeepModel>::DeepModelTy)
Source§impl<Z: DeepModel, Y: DeepModel, X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (Z, Y, X, W, V, U, T)
impl<Z: DeepModel, Y: DeepModel, X: DeepModel, W: DeepModel, V: DeepModel, U: DeepModel, T: DeepModel> DeepModel for (Z, Y, X, W, V, U, T)
Source§fn deep_model(self) -> Self::DeepModelTy
fn deep_model(self) -> Self::DeepModelTy
logic(open, inline)
self.$idx.deep_model(),