But subtypes should not override the defaults (or “fallbacks”) of their supertype “willy nilly”. There should be some kind of consistency with the fallback. e.g.:
julia> typeof(1:4)
UnitRange{Int64}
julia> typeof(1:4) <: AbstractArray
true
julia> (1:4) .+ 5
6:9
julia> collect(1:4) .+ 5
4-element Vector{Int64}:
6
7
8
9
julia> collect((1:4) .+ 5) == collect(1:4) .+ 5 # consistency
true
If broadcasted addition on UnitRange{Int64} were defined in such a way that the “# consistency” property did not hold, that would be bad for generic programming!
Does that badness apply in this CAS setting? What consistency should exist across rules that are defined on types that have a subtype relationship among them? I am not sure. That’s what the question is.