However, I don't understand what justifies this "shortening" of the lifetime bound. I searched the Rust Reference for an applicable coercion rule, but I'm unable to find any. In particular:
It's not the unsized coercion: the unsized coercion coerces &mut T to &mut U only when T is a sized type.
It's not the subtyping rule: the mutable reference type &'a mut T is invariant in T so that part cannot change.
Thanks. I think I now understand that there is a specific rule for this kind of coercion (dyn upcasting) and why it's sound. Perhaps the reference should be updated to include the upcast case?