% File 'spacecraft': "Describing Additive Fluents in C+", Section 7 :- sorts integer; axis; jet. :- objects -maxAdditive..maxAdditive :: integer; x,y,z :: axis; jet1,jet2 :: jet. :- variables Ax :: axis; J :: jet; F,V,V1,P :: integer. :- constants pos(axis) :: simpleFluent(integer); vel(axis) :: additiveFluent(integer); fire(jet) :: exogenousAction; force(jet,axis) :: attribute(integer) of fire(jet). fire(J) increments vel(Ax) by V // mass if force(J,Ax) = V. nonexecutable fire(J) if force(J,Ax) mod mass \= 0. caused pos(Ax) = P+((V+V1)//2) if vel(Ax) = V1 after vel(Ax) = V & pos(Ax) = P where (V+V1) mod 2 = 0, P+((V+V1)//2) >= -maxAdditive, P+((V+V1)//2) =< maxAdditive. nonexecutable fire(J) if abs(force(J,Ax)) > maxForce.