4 releases

0.2.0 Mar 5, 2025
0.1.0 Jan 20, 2025
0.1.0-rc.1 Dec 17, 2024
0.1.0-pre.1 Jun 18, 2024
0.1.0-alpha.1 Oct 7, 2024

#112 in Procedural macros

Download history 20/week @ 2024-12-26 328/week @ 2025-01-02 467/week @ 2025-01-09 585/week @ 2025-01-16 627/week @ 2025-01-23 724/week @ 2025-01-30 662/week @ 2025-02-06 415/week @ 2025-02-13 505/week @ 2025-02-20 832/week @ 2025-02-27 1768/week @ 2025-03-06 1475/week @ 2025-03-13 2149/week @ 2025-03-20 2013/week @ 2025-03-27 2611/week @ 2025-04-03 3534/week @ 2025-04-10

10,854 downloads per month
Used in 9 crates (4 directly)

Apache-2.0

28KB
612 lines

Hax-specific helpers for Rust programs. Those helpers are usually no-ops when compiled normally but meaningful when compiled under hax.

Example:

use hax_lib::*;
fn sum(x: Vec<u32>, y: Vec<u32>) -> Vec<u32> {
  hax_lib::assume!(x.len() == y.len());
  hax_lib::assert!(x.len() >= 0);
  hax_lib::assert_prop!(forall(|i: usize| implies(i < x.len(), x[i] < 4242)));
  hax_lib::debug_assert!(exists(|i: usize| implies(i < x.len(), x[i] > 123)));
  x.into_iter().zip(y.into_iter()).map(|(x, y)| x + y).collect()
}

hax library

This crate contains helpers that can be used when writing Rust code that is proven through the hax toolchain.

⚠️ The code in this crate has no effect when compiled without the --cfg hax.

Examples:

fn sum(x: Vec<u32>, y: Vec<u32>) -> Vec<u32> {
  hax_lib::assume!(x.len() == y.len());
  hax_lib::assert!(hax_lib::forall(|i: usize| hax_lib::implies(i < x.len(), || x[i] < 4242)));
  hax_lib::debug_assert!(hax_lib::exists(|i: usize| hax_lib::implies(i < x.len(), || x[i] > 123)));
  x.into_iter().zip(y.into_iter()).map(|(x, y)| x + y).collect()
}

Dependencies

~0–385KB