Please try to describe the exact rules, based on which the program should or should not substitute a definition for a name.
In your example, you want F and v to be substituted, while a, m and t should stay as names. How would the program notice the difference?
You may argue that those latter are "simple numerical values" - but they are not, actually, they are all formulas consisting of a number multiplied by a unit (and a is even more complex). Think about complex numbers that may happen in a formula - they are represented as formulas, too. Think about rational numbers.
Think about deep-nested cases where you would like the expansion to stop at some intermediate level, or to avoid expanding one part of formula.
You have imagined your wanted result by your human brain, that is capable of abstractions, sees higher-level picture and skips irrelevant at wanted level of detail of this specific task. But program should operate by universal precise algorithms.
This is just to show that the problem is very difficult and depends on user's demands, so if you really need this, you should try to strictly define the development requirements - so that developer could understand the problem limits and possible implementation. This by itself doesn't guarantee the result yet, but it improves chances that this will be considered.