use vstd::prelude::*;
verus! {
pub open spec fn span_owns(
edit_start: int,
edit_old_end: int,
span_start: int,
body_end: int,
rendered_end: int,
) -> bool {
&&& edit_start >= span_start
&&& edit_start <= body_end
&&& edit_old_end <= rendered_end
&&& (edit_start < rendered_end || span_start == rendered_end)
}
pub fn span_owns_edit(
edit_start: usize,
edit_old_end: usize,
span_start: usize,
body_end: usize,
rendered_end: usize,
) -> (owned: bool)
ensures
owned == span_owns(
edit_start as int,
edit_old_end as int,
span_start as int,
body_end as int,
rendered_end as int,
),
{
edit_start >= span_start
&& edit_start <= body_end
&& edit_old_end <= rendered_end
&& (edit_start < rendered_end || span_start == rendered_end)
}
proof fn owned_edit_stays_in_span(
edit_start: int,
edit_old_end: int,
span_start: int,
body_end: int,
rendered_end: int,
)
requires
span_owns(edit_start, edit_old_end, span_start, body_end, rendered_end),
ensures
span_start <= edit_start <= body_end,
edit_old_end <= rendered_end,
{
}
}