Supporting this in some form seems like a good idea.
Taking inspiration from {-# MINIMAL .. #-} and from our #[cfg(..)] construct, a sketch could be:
#[minimal(eq, ne)]
pub trait PartialEq<Rhs: ?Sized = Self> {
fn eq(&self, other: &Rhs) -> bool { !self.ne(other) }
fn ne(&self, other: &Rhs) -> bool { !self.eq(other) }
}
The list inside #[minimal(..)] constitutes a disjunction.
Like with #[cfg(..)], we can also use any(..) to embed a disjunction anywhere we want. all(..) can be used to require a conjunction of items. Optionally, not(..) could also be supported but that requires deeper thinking wrt. semantics when combined with specialization.