forall<T, U> { IsLocal(Box<T>) :- IsLocal(T) }
forall<T, U> { IsLocal(Box<T>) :- IsLocal(U) }
forall<T, U> { IsUpstream(Box<T, U>) :- IsUpstream(T), IsUpstream(U) }
forall<T, U> { DownstreamType(Box<T, U>) :- DownstreamType(T). }
forall<T, U> { DownstreamType(Box<T, U>) :- DownstreamType(U). }
See discussion here: https://rust-lang.zulipchat.com/#narrow/stream/144729-wg-traits/topic/meeting.202020-09-29/near/211676604
Needed for rust-lang/rust#77187
For fundamental types like
Box<T, U>, we should generate rules: