O que torna o ValueTuple covariante?

Isso é compilado corretamente no C # 7.3 (Framework 4.8): (string, string) s = ("a", "b"); (object, string) o = s; Eu sei que isso é açúcar sintático para o seguinte, que também compila corretamente: ValueTuple<string, string> s = new ValueTuple<string, string>("a",...