Changing the `impl Trait for .. { }` syntax

I think co-induction should not extend to supertraits, e.g. in the example from Cyclic traits allow arbitrary traits to be synthesized · Issue #29859 · rust-lang/rust · GitHub

trait Magic: Copy {}
impl<T: Magic> Magic for T {}

fn copy<T: Magic>(x: T) -> (T, T) { (x, x) }

supertraits should be treated separately for matching as if they were written as:

trait Magic: Copy {}
impl<T: Magic+Copy> Magic for T {}

Which would be sound again.