Have you tried like this?
trait A<'self_>: 'self_ {
type I;
}
trait AMut<'a>
where
Self: A<'a>,
<Self as A<'a>>::I: 'static,
{
fn mutate_self(&mut self);
}
fn foo<X>(x: &mut X)
where
X: 'static + for<'a> A<'a> + for<'a> AMut<'a>,
for<'a> <X as A<'a>>::I: 'static,
{
x.mutate_self();
}