What's a side-effect free expression in Timed Automata? I'm trying to get myself more familiar with Timed Automata theory. At some point I came across the expression "side-effect free" like in the following:


  A guard is a side-effect free expression that evaluates to a boolean.


But except for the following definition¹ I couldn't find any good source that explains what it actually means or gives examples with respect to Timed Automata:


  We call an expression side effect free if ([![e]!]) is the identity function.


EDIT:

babou pointed me to the global meaning of side-effect which is:

Wikipedia on Side effect (computer science)


  In computer science, a function or expression is said to have a side effect if, in addition to returning a value, it also modifies some state or has an observable interaction with calling functions or the outside world.


However, the trouble I've still got is how to interpret has no effect on states for side-effect free guards. After a guard has been evaluated it will have an effect on states if a transition is taken. In other words, the result of the guard does matter in respect to changing the state or not. But as it seems, the guard itself is called by a higher (side-effect having) instance which makes the state transition (or not).



¹ i.e. searching for the terms side-effect free Timed Automata
Well, I typed side-effect in Google, then I chose anser number 4: Side effect (computer science)

The first sentence states:


  In computer science, a function or expression is said to have a side effect if, in addition to returning a value, it also modifies some state or has an observable interaction with calling functions or the outside world.


From this definition, using elementary logic, I deduce that a "side-effect free expression" is an expression that modifies no state, and has no observable interaction with calling functions or the outside world.

In other words, its evaluation is not supposed to have any observable effect on the program. Then what the program does with the result of the evaluation is another matter and the rest of the program may have an observable behavior that depends on that result. But the effect is the same as if you had been given directly the result rather than evaluating the expression to get it.