Millions of developers also use functional programming, for decades now. Even bigger order of magnitude of developers use relational languages to build systems of various scale. Indirectly, even more millions of developers use constraint programming of various sorts (compilers, databases and user interfaces).
Given that, the definition of yours does not provide much to discern between paradigms.
But we can compare complexity of logic of different systems and I provided two examples of that. We can even discuss some ordering between different systems.
For example, contemporary type system that is powerful enough (not even dependently typed) can model class hierarchy, it is a no big deal [1] from, at least, 2005. So classes are, in some sense, less general than System F that is used above. They also more specific, whether it is good or not.
[1] https://www.cs.tufts.edu/comp/150FP/archive/oleg-kiselyov/ov...
But in System F in [1] you can have several parallel class hierarchies, without requiring anything else from the system.
The same goes to other things like "escape hatches".
System with dynamic types cannot prevent (runtime) errors that can be prevented by a system with static types. It is just not possible to have reasonable description of a system without certain kinds of (runtime) errors without reimplementing many things from system with static type checking. On the other side, in system with static types it is quite possible to have over-encompassing type that represents all dynamic values one needs.
So, systems with static type checking are, in some sense, more general than systems with dynamic type systems. And, of course, systems with dynamic types are more specific, whether it is good or not.