// ============================================================
// RAPx builtin contract definitions (compound macros)
//
// Each compound is defined as a `Name(params) { body }` block whose body is a
// boolean combination of the 21 primitive safety properties (see
// primitive-sp.md §2.2). Users can define new tags with the `pred!` macro in
// their own crate using the same syntax.
// ============================================================
// ── Compound safety properties (primitive-sp.md §2.2) ──
/// The pointer can be safely dereferenced: in-bounds and within a live allocation.
Deref
/// A valid pointer: vacuously true for ZSTs, otherwise Deref.
ValidPtr
/// A raw pointer meets all requirements for sound &/&mut conversion:
/// initialized, aligned, no aliasing conflict.
Ptr2Ref
/// The pointer matches the layout's size/alignment from a prior allocation.
Layout
/// `InBound` with ZST-aware element counting: `0` elements when `T` is a
/// zero-sized type (so the bounds check is vacuous and never divides by
/// `size_of(T)`), otherwise `(end_or_len - ptr) / size_of(T)` elements.
ZstAwareInBound