Attribute Macro requires

#[requires]
Expand description

Add a logical precondition to a function. In the case of a function that has one or more &mut inputs, in the ensures clause, you can refer to such an &mut input x as x for its “past” value and future(x) for its “future” value.

You can use the (unqualified) macro fstar! (BACKEND! for any backend BACKEND) to inline F* (or Coq, ProVerif, etc.) code in the precondition, e.g. fstar!("true").

§Example

use hax_lib_macros::*;
#[requires(x.len() == y.len())]
pub fn div_pairwise(x: Vec<u64>, y: Vec<u64>) -> Vec<u64> {
    x.iter()
        .copied()
        .zip(y.iter().copied())
        .map(|(x, y)| x / y)
        .collect()
}