This is just the principle of a one-time binding of values (or the principle of a single assignment) - Once bound symbols cannot be rebound. For each new value a corresponding new building (to a new symbol) must be done.
Since in a functional language everything is a type-tagged value (including procedures and other expressions) the principle is uniform.
This notion is deeply related to Math, where each occurrence of the same symbol (like
3) which stands for the same Number is assumed to be a reference to exactly the same abstract entity (concept). Math is referentially transparent.
The consequence of this principle is that an expression could be substituted to a value it reduces into and vice versa.
Since any expression always evaluates to the same value, values can be cached indefinitely, so big expressions need not to be re-evaluated (the result will always be the same).
Because of this, the order of evaluation of compound expressions does not matter - each sub-expression will be reduced to exactly the same value no matter when it is called.
There is no notion of time.