chalk represents dyn Trait using binders, so that for dyn Debug, you have a predicate like <T> T: Debug (here, the bound variable T represents the self type).
rustc uses ExistentialPredicate.
The chalk way seems superior. Better to not have an extra form of predicate.
The goal would be to refactor rustc to use a binder + predicate.