use vstd::prelude::*;
verus! {
pub open spec fn nonnegative(value: int) -> bool {
0 <= value
}
pub open spec fn positive(value: int) -> bool {
&&& nonnegative(value)
&&& value > 0
}
pub open spec fn increment(pre: int, post: int) -> bool {
post == pre + 1
}
pub proof fn stalled_increment_rejected(pre: int)
ensures !increment(pre, pre),
{
}
pub open spec fn stutter(pre: int, post: int) -> bool {
post == pre
}
pub open spec fn decrement_if(pre: int, post: int, selected: bool) -> bool {
post == pre - if selected { 1int } else { 0int }
}
pub open spec fn guarded_decrement_if(pre: int, post: int, selected: bool) -> bool {
&&& nonnegative(pre)
&&& decrement_if(pre, post, selected)
&&& nonnegative(post)
&&& (selected ==> 0 < pre)
}
}