My concern here is something different than Grigore's, although I agree with Grigore.

The problem with this solution is it creates a fragmented authority for determining whether a variable in a rule is ! or ?. I look at the freshVariable flag and I don't know if it tells me the correct information, because I could be looking at a variable whose flag was set incorrectly by one of the other constructors.

In my opinion, the variable class, outside the frontend, should have the following fields only:
```
String name; //name of variable, including ? or !
String declaredSort; //EXPLICIT sort of variable. set only if the variable should be runtime checked to be that sort
String sort; //inherited from Term, set by type inferencer to concrete syntactic sort of variable.
```