Hi, as you can read in https://www.gams.com/latest/docs/userguides/mccarl/fx.htm, when doing x1.fx=9 actually:
… GAMS sets the lower and upper bound to that value.
This means x1.fx=9 is exactly doing x1.lo=9 and x1.up=9 in one statement.
Additionaly, this kind of statements (setting variable attributes) are executed in order. So when you do x1.lo=8 afterwards, you are “overwriting” the previous set of the lower bound.
Best regards!
Claudio