Add fuel synonym that allow Z3 to go from any fuel constants to LZ. This
includes:
-- defining a new Boogie-level un-interpreted function, named
"IsFuelBottom" from type Layer to Layer.
-- Add assume IsFuelBottom(BaseFuel_F) == BaseFuel_F.
-- And finally, for each fuelable function F, we'll add an axiom that says:
forall fuel_constant, x :: { F(IsFuelBottom(fuel_constant), x) }
F(fuel_constant, x) == F(LZ, x)
The trigger will keep Z3 from using this shortcut for fuels other than the
constants at the "bottom" of the fuel stack.
↧