Why isn't `Vector{<:Float64}` reduced to `Vector{Float64}`?

This is in the Julia FAQ. There are many discussions that try to help explain this. See e.g.

I guess you are asking specifically about Vector{<:Float64}. Realize that Vector{<:T} for any type T is a set of types: Vector types for any subtype of T. Now, I guess your point is that, since Float64 is concrete, it has exactly one subtype Float64, so Vector{<:Float64} is a set containing only one element, Vector{Float64}. Still, in mathematics we generally don’t equate a set of a single element with that element: \{x\} \ne x. As noted by @nsajko below, the bottom type Union{} is a subtype of Float64, so Vector{Union{}} <: Vector{<:Float64}.

3 Likes