Skip to main content

btree_map_get_mut_ensures

Function btree_map_get_mut_ensures 

Source
pub open spec fn btree_map_get_mut_ensures<Key: Borrow<Q> + Ord, Value, A: Allocator + Clone, Q: Ord + ?Sized>(
    old_m: &BTreeMap<Key, Value, A>,
    final_m: &BTreeMap<Key, Value, A>,
    k: &Q,
    result: Option<(Value, Value)>,
) -> bool
Expand description
{
    ({
        &&& obeys_cmp::<Key>()
        &&& obeys_cmp::<&Q>()
        &&& <Key as BorrowSpec<Q>>::obeys_borrow_spec()
        &&& btree_map_inv(old_m)

    })
        ==> {
            &&& btree_map_inv(final_m)
            &&& match result {
                Some((current_value, final_value)) => {
                    exists |stored_key: Key| {
                        &&& #[trigger] old_m@.contains_key(stored_key)
                        &&& k
                            .cmp_spec(
                                <Key as BorrowSpec<Q>>::borrow_spec(&stored_key),
                            ) is Equal
                        &&& old_m@[stored_key] == current_value
                        &&& final_m@ == old_m@.insert(stored_key, final_value)

                    }
                }
                None => (
                    &&& forall |stored_key: Key| (
                        #[trigger] old_m@.contains_key(stored_key)
                            ==> !(k
                                .cmp_spec(
                                    <Key as BorrowSpec<Q>>::borrow_spec(&stored_key),
                                ) is Equal)
                    )
                    &&& final_m@ == old_m@

                ),
            }

        }
}