use vstd::prelude::*;
verus! {
pub open spec fn strictly_before(left: nat, right: nat) -> bool {
left < right
}
pub fn is_strictly_before(left: usize, right: usize) -> (ordered: bool)
ensures ordered == strictly_before(left as nat, right as nat),
{
left < right
}
pub open spec fn selects_first<T>(items: Seq<T>, selected: T) -> bool {
items.len() > 0 && items[0] == selected
}
pub proof fn non_head_rejected<T>(items: Seq<T>, selected: T)
requires
items.len() > 0,
items[0] != selected,
ensures !selects_first(items, selected),
{
}
pub open spec fn fifo_sequence_order(
entries: Seq<(u64, u64)>,
head: nat,
tail: nat,
) -> bool {
&&& head + entries.len() == tail
&&& forall|index: int| 0 <= index < entries.len() ==>
#[trigger] entries[index].0 as nat == head + index as nat
}
}