AirportShuttleProject_AirportShuttle1 , 
, "  ", 
, " 
 \n ", 
, " ! techGuyInAction;
 \n ", 
, " !atEmgState;
 \n ", 
, " !technicianAck;
 \n ", 
, " (((atGivenStation(0) & shuttleTasks[0]=true) -> stopping) &
 \n ", 
, " (((atGivenStation(0) & stopping) -> shuttleTasks[0]=true) &
 \n ", 
, " ((atGivenStation(1) & shuttleTasks[1]=true) -> stopping) &
 \n ", 
, " ((atGivenStation(1) & stopping) -> shuttleTasks[1]=true) &
 \n ", 
, " ((atGivenStation(1)) -> !pressedStationTwo) &
 \n ", 
, " ((atGivenStation(2) & shuttleTasks[2]=true) -> stopping) &
 \n ", 
, " ((atGivenStation(2) & stopping) -> shuttleTasks[2]=true) &
 \n ", 
, " ((atGivenStation(2)) -> !pressedStationThree) &
 \n ", 
, " ((atGivenStation(3) & shuttleTasks[3]=true) -> stopping)); 
 \n ", 
, " ((atGivenStation(3) & stopping) -> shuttleTasks[3]=true));
 \n ", 
, " ((atGivenStation(3)) -> !pressedStationFour) ;
 \n ", 
, " ((d = GOING_FWD & (stationLast - s < 0)) | 
 \n ", 
, " ((d = GOING_FWD & (stationLast - s >= 0)) | 
 \n ", 
, " ((next(shuttleTasks[0]) = true) <-> 
 \n ", 
, " ((next(shuttleTasks[1]) = true) <-> 
 \n ", 
, " ((next(shuttleTasks[2]) = true) <-> 
 \n ", 
, " ((next(shuttleTasks[3]) = true) <-> 
 \n ", 
, " ((shuttleTasksFwd[0] | shuttleTasksBwd[0]) & index = 0) |
 \n ", 
, " ((shuttleTasksFwd[1] | shuttleTasksBwd[1]) & index = 1) |
 \n ", 
, " ((shuttleTasksFwd[2] | shuttleTasksBwd[2]) & index = 2) |
 \n ", 
, " ((shuttleTasksFwd[3] | shuttleTasksBwd[3]) & index = 3);
 \n ", 
, " (atGivenStation(1) & shuttleTasks[1]=true) |
 \n ", 
, " (atGivenStation(2) & shuttleTasks[2]=true) | 
 \n ", 
, " (atGivenStation(3) & shuttleTasks[3]=true)) -> stopping; 
 \n ", 
, " (d = GOING_BWD & (stationLast - s < 0)) );
 \n ", 
, " (d = GOING_BWD & (stationLast - s >= 0)) );
 \n ", 
, " (direction = 0 & (shuttleTasksBwd[stationIndex]=false)) | (direction = 1 & (shuttleTasksFwd[stationIndex]=false)); 
 \n ", 
, " (next(shuttleTasks[1]=false)& shuttleTasks[1]=true) |
 \n ", 
, " (next(shuttleTasks[2]=false)& shuttleTasks[2]=true) | 
 \n ", 
, " (next(shuttleTasks[3]=false)& shuttleTasks[3]=true)) -> stopping; 
 \n ", 
, " (pressedStationFour | (shuttleTasks[3]=true & !atGivenStation(3)))); 
 \n ", 
, " (pressedStationOne | (shuttleTasks[0]=true & !atGivenStation(0) & !stopping))) &
 \n ", 
, " (pressedStationThree | (shuttleTasks[2]=true & !atGivenStation(2)))) & 
 \n ", 
, " (pressedStationTwo | (shuttleTasks[1]=true & !atGivenStation(1)))) & 
 \n ", 
, " (station = 1 & shuttleTasks[1]=true) |
 \n ", 
, " (station = 2 & shuttleTasks[2]=true) |
 \n ", 
, " (station = 3 & shuttleTasks[3]=true)); 
 \n ", 
, " (stopAtNearestStation will be false after 1 cycle of open and close)
 \n ", 
, " */
 \n ", 
, " /**
 \n ", 
, " // Addition of task in shuttleTasksBwd (+ keep shuttleTasksFwd the same) 
 \n ", 
, " // Addition of task in shuttleTasksFwd (+ keep shuttleTasksBwd the same) 
 \n ", 
, " // At base station: stop and don't change tasks status
 \n ", 
, " // Change value of atEmgState at each press on emgButton
 \n ", 
, " // Go to base station
 \n ", 
, " // In station eventually
 \n ", 
, " // Initially no technician ack
 \n ", 
, " // Initially not atEmgState
 \n ", 
, " // Keeps shuttle direction
 \n ", 
, " // Leave station eventually
 \n ", 
, " // No strange technician acks
 \n ", 
, " // Not always stop at nearest station
 \n ", 
, " // Start technical job iff entering techGuyInAction state
 \n ", 
, " // Stop when techGuyInAction
 \n ", 
, " // if base station is bw and going bw -> will arrive to base station (or fw or stopping)
 \n ", 
, " // if base station is fw and going fw -> will arrive to base station (or bw or stopping)
 \n ", 
, " // updates tasks (bw or fw) array: indexOpenedDoor -> false, indexPressed -> true
 \n ", 
, " ///////////////////////////////////
 \n ", 
, " /////////////////////////////////////
 \n ", 
, " Add task
 \n ", 
, " Addition of task in shuttleTasksBwd (+ keep shuttleTasksFwd the same) 
 \n ", 
, " Addition of task in shuttleTasksFwd (+ keep shuttleTasksBwd the same) 
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra monitor atEmgState is true when emgButton is pressed 
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra until it is pressed again
 \n ", 
, " All Tasks Are Satisfied Eventually:
 \n ", 
, " Always go forward
 \n ", 
, " At base station: stop and don't change tasks status
 \n ", 
, " Backwarding cause station decrease 
 \n ", 
, " Beep iff entering station or ready to beep at station
 \n ", 
, " Beep iff: entering station at emergency state or already at station at emergency state and readyToEmgBeep ack has been received
 \n ", 
, " Beeper returns answer eventually
 \n ", 
, " Can't change direction without stopping 
 \n ", 
, " Can't driving backward in the first station 
 \n ", 
, " Can't driving forward in the last station 
 \n ", 
, " Can't stop while not in station
 \n ", 
, " Change value of maintenanceAtStationOne at each press on mPressedStationOne
 \n ", 
, " Change value of maintenanceAtStationThree at each press on mPressedStationThree
 \n ", 
, " Change value of maintenanceAtStationTwo at each press on mPressedStationTwo
 \n ", 
, " Change value of maintenanceAtStationZero at each press on mPressedStationZero
 \n ", 
, " Close door after open
 \n ", 
, " Count time since requests iff: there are no pressed stations and not at emergency state
 \n ", 
, " Current station isn't pressed while at current station 
 \n ", 
, " Current station not pressed while at station 
 \n ", 
, " Defines
 \n ", 
, " Defines shuttleTasks update 
 \n ", 
, " Don't change direction without stopping 
 \n ", 
, " Don't change door request when door is in process
 \n ", 
, " Don't change tasks status if not needed (needed = add task or satisfies task)
 \n ", 
, " Don't go backward when at station 0 
 \n ", 
, " Don't go backward when there are no tasks backward
 \n ", 
, " Don't go forward when at station 3 
 \n ", 
, " Don't go forward when there are no tasks forward
 \n ", 
, " Don't stop while not at station
 \n ", 
, " Done door process eventually
 \n ", 
, " Door returns answer eventually
 \n ", 
, " Else, Keep waitingForEmgBeeper status
 \n ", 
, " Else, change the value of atEmgState at each press on emgButton 
 \n ", 
, " Else, keep openDoorAtEmgState's status
 \n ", 
, " Else, keep waitingForDoor's status
 \n ", 
, " Environment Specification
 \n ", 
, " Forwarding cause station increase 
 \n ", 
, " G 
 \n ", 
, " G !forwarding & !backwarding & !(atBaseStation & noRequests & longTimeWithoutRequests) -> next(shuttleDirection) = shuttleDirection;
 \n ", 
, " G ( (!technicianAck & doorOperationsCounter != 10) -> techGuyInAction = next(techGuyInAction));
 \n ", 
, " G ( (doorOperationsCounter = 10 & !technicianAck) -> next(techGuyInAction));
 \n ", 
, " G ( (noRequests & atBaseStation) -> stopping & updateTasks(shuttleTasksFwd, 4, 4) & updateTasks(shuttleTasksBwd, 4, 4));
 \n ", 
, " G ( technicianAck -> next(!techGuyInAction));
 \n ", 
, " G (!atStation & next(atStationWithTask) -> next(stopping));
 \n ", 
, " G (!atStationWithTask & !noTasks & !atEmgState) -> (!stopping); 
 \n ", 
, " G (((atGivenStation(0) & shuttleTasks[0]=true) -> stopping) &
 \n ", 
, " G ((atGivenStation(0) & shuttleTasks[0]=true) |
 \n ", 
, " G ((atGivenStation(0)) -> !pressedStationOne) &
 \n ", 
, " G ((emgButton = PRESSED) <-> next(atEmgState)=!atEmgState);
 \n ", 
, " G ((next(shuttleTasks[0]=false)& shuttleTasks[0]=true) |
 \n ", 
, " G (PREV(!techGuyInAction) & techGuyInAction <-> startTechnicalJob );
 \n ", 
, " G (atStation & atEmgState) -> stopping;
 \n ", 
, " G (atStation -> stopButton=RELEASED);
 \n ", 
, " G (next(technicianAck) -> (techGuyInAction & !technicianAck));
 \n ", 
, " G (techGuyInAction -> stopping);
 \n ", 
, " G atBaseStation & noRequests & longTimeWithoutRequests & stopping -> next(shuttleDirection) = GOING_NONE;
 \n ", 
, " G backwarding -> next(shuttleDirection) = GOING_BWD;
 \n ", 
, " G enteringStation & noTasks -> stopping;
 \n ", 
, " G forwarding -> next(shuttleDirection) = GOING_FWD;
 \n ", 
, " G isTaskDirectionBwdOrNoTask(shuttleDirection, lastPassedStation, pressedStation) -> updateTasks(shuttleTasksBwd, pressedStation, pickUpStation) & updateTasks(shuttleTasksFwd, 4, 4);
 \n ", 
, " G isTaskDirectionFwdOrNoTask(shuttleDirection, lastPassedStation, pressedStation) -> updateTasks(shuttleTasksFwd, pressedStation, pickUpStation) & updateTasks(shuttleTasksBwd, 4, 4);
 \n ", 
, " G stopping -> atStation ;
 \n ", 
, " G stopping -> enteringStation ;
 \n ", 
, " GF !atEmgState; 
 \n ", 
, " GF !pressedStationFour; 
 \n ", 
, " GF !pressedStationOne; 
 \n ", 
, " GF !pressedStationThree; 
 \n ", 
, " GF !pressedStationTwo; 
 \n ", 
, " Go to base station
 \n ", 
, " Going backward causes station to decrease 
 \n ", 
, " Going bw -> no backward tasks
 \n ", 
, " Going forward causes station to increase 
 \n ", 
, " Going fw -> no fw tasks
 \n ", 
, " If
 \n ", 
, " If doorCounterIncreased - change stopAtNearestStation to false
 \n ", 
, " If no tasks stop when entering station
 \n ", 
, " If stopButton is pressed - change stopAtNearestStation to true
 \n ", 
, " In station eventually
 \n ", 
, " Initial state 
 \n ", 
, " Initial state of the environment
 \n ", 
, " Initial state of the system
 \n ", 
, " Initially door is closed
 \n ", 
, " Initially no technician ack
 \n ", 
, " Initially not
 \n ", 
, " Initially not atEmgState
 \n ", 
, " Initially not goToBaseStation
 \n ", 
, " Initially not maintenanceAtStationOne
 \n ", 
, " Initially not maintenanceAtStationThree
 \n ", 
, " Initially not maintenanceAtStationTwo
 \n ", 
, " Initially not maintenanceAtStationZero
 \n ", 
, " Initially not openDoorAtEmgState
 \n ", 
, " Initially not stopAtNearestStation
 \n ", 
, " Initially not taskAtStationOne
 \n ", 
, " Initially not taskAtStationThree
 \n ", 
, " Initially not taskAtStationTwo
 \n ", 
, " Initially not taskAtStationZero
 \n ", 
, " Initially not waiting
 \n ", 
, " Initially not waitingForDoor
 \n ", 
, " Initially not waitingForEmgBeeper
 \n ", 
, " Inputs
 \n ", 
, " Keep goToBaseStation's status 
 \n ", 
, " Keep task's status 
 \n ", 
, " Keeps shuttle direction
 \n ", 
, " Leave station eventually
 \n ", 
, " Liveness of system
 \n ", 
, " Monitors 
 \n ", 
, " Motors
 \n ", 
, " No one press on stopButton while atStation
 \n ", 
, " No strange door ack
 \n ", 
, " No strange door acks
 \n ", 
, " No strange doorStatus 1
 \n ", 
, " No strange doorStatus 2
 \n ", 
, " No strange ready to beep acks
 \n ", 
, " No strange technician acks
 \n ", 
, " No strange technicianAck
 \n ", 
, " Not always at emergency state
 \n ", 
, " Not always goToBaseStation
 \n ", 
, " Not always stop at nearest station
 \n ", 
, " Not waitingForDoor when doorAck is received
 \n ", 
, " Not waitingForEmgBeeper when readyToEmgBeep ack has been received
 \n ", 
, " Note: after open door immediately start to close door (process) because of closeDoorReq
 \n ", 
, " Open door iff stopping because of stop request and door is closed
 \n ", 
, " Open door iff stopping because of stop request or task and door is closed
 \n ", 
, " Open door iff: at station, door is close and there is a task or emergency state
 \n ", 
, " Outputs
 \n ", 
, " Predicates
 \n ", 
, " Presses
 \n ", 
, " Prevent unnecessary stopping 
 \n ", 
, " Prevent unnecessary stops 
 \n ", 
, " Preventing unnecessary driving backward
 \n ", 
, " Preventing unnecessary driving backward (when there is a task) 
 \n ", 
, " Preventing unnecessary driving forward
 \n ", 
, " Preventing unnecessary driving forward (when there is a task) 
 \n ", 
, " Prevention unnecessary stopping 
 \n ", 
, " Reset task
 \n ", 
, " Safety of the system
 \n ", 
, " Same waiting status when not readyToBeep and no startBeepTimer
 \n ", 
, " Satisfies task
 \n ", 
, " Satisfies task 
 \n ", 
, " Set goToBaseStation
 \n ", 
, " Start technical job iff entering techGuyInAction state
 \n ", 
, " Start technician job iff entering techGuyInAction state
 \n ", 
, " Station can not change while stopping
 \n ", 
, " Station can only decrease by going backwarding (and entering station)
 \n ", 
, " Station can only increase by going forwarding (and entering station)
 \n ", 
, " Station can't change while stopping
 \n ", 
, " Station changes only when entering station
 \n ", 
, " Station decreases by going backward and entering station
 \n ", 
, " Station does not change when stopping
 \n ", 
, " Station increases by going forward and entering station
 \n ", 
, " Station number can only change when entering station
 \n ", 
, " Stations
 \n ", 
, " Stations can only increase or decrease by one 
 \n ", 
, " Stations can only stay the same, increase by 1 or decrease by 1 
 \n ", 
, " Stop if at station and stopAtNearestStation is true 
 \n ", 
, " Stop only at station
 \n ", 
, " Stop waiting when readyToBeep (or start new timer)
 \n ", 
, " Stop when at base station and there are no tasks
 \n ", 
, " Stop when at emergency state and at station
 \n ", 
, " Stop when at station, there are no tasks, and there is no need to go to base station
 \n ", 
, " Stop when passing a station that was called
 \n ", 
, " Stop when techGuyInAction
 \n ", 
, " Stop when technician action is required 
 \n ", 
, " Stop while waiting for door 
 \n ", 
, " System Specification
 \n ", 
, " TODO: door in process only when asked to
 \n ", 
, " Task at station one is satisfied eventually
 \n ", 
, " Task at station three is satisfied eventually
 \n ", 
, " Task at station two is satisfied eventually
 \n ", 
, " Task at station zero is satisfied eventually
 \n ", 
, " Tasks
 \n ", 
, " Type definitions
 \n ", 
, " Update pickUpStation (for the application)
 \n ", 
, " Waiting for timer when startBeepTimer
 \n ", 
, " When atEmgState and not atStation, keep atEmgState status
 \n ", 
, " When passing station and this station was called stop at station.
 \n ", 
, " add task
 \n ", 
, " all Tasks Are Satisfied Eventually:
 \n ", 
, " assumption
 \n ", 
, " assumption currentStationNotPressedWhileAtStation:
 \n ", 
, " assumption doneTechnicianActionEventually:
 \n ", 
, " assumption inStationEventually:
 \n ", 
, " assumption initiallyNoTechnicianAck:
 \n ", 
, " assumption leaveStationEventually:
 \n ", 
, " assumption noStrangeTechnicianAcks:
 \n ", 
, " assumption notAlwaysAtEmgState:
 \n ", 
, " atBaseStation := station = baseStation;
 \n ", 
, " atStationWithTask := atStation & ((station = 0 & shuttleTasks[0]=true) |
 \n ", 
, " between open and close must be process 
 \n ", 
, " can't change direction without stopping 
 \n ", 
, " door in process only when asked to
 \n ", 
, " door must be in process when asked to
 \n ", 
, " else change value of atEmgState at each press on emgButton 
 \n ", 
, " env Button emgButton;
 \n ", 
, " env Int(0..4) baseStation; // need only 0-3
 \n ", 
, " env boolean longTimeWithoutRequests;
 \n ", 
, " env boolean readyToEmgBeep;
 \n ", 
, " env boolean technicianAck;
 \n ", 
, " for well-separated Environment (Causes unrealizable) 
 \n ", 
, " guarantee
 \n ", 
, " guarantee 
 \n ", 
, " guarantee mustStopInOrderToSatisfyTask:
 \n ", 
, " guarantee stopWhenTechGuyInAction:
 \n ", 
, " guarantee stoppingAtStationOnlyIfHasTask:
 \n ", 
, " if atEmgState keep atEmgState
 \n ", 
, " if base station is bw and going bw -> will arrive to base station
 \n ", 
, " if base station is bw and going bw -> will arrive to base station (or fw or stopping)
 \n ", 
, " if base station is fw and going fw -> will arrive to base station
 \n ", 
, " if base station is fw and going fw -> will arrive to base station (or bw or stopping)
 \n ", 
, " if no tasks stop when entering station
 \n ", 
, " if only tasks backward go backward
 \n ", 
, " if only tasks forward go forward
 \n ", 
, " isTaskDirectionBwdOrNoTask(d, stationLast, baseStation);
 \n ", 
, " isTaskDirectionFwdOrNoTask(d, stationLast, baseStation) | stationLast = 4;
 \n ", 
, " keep status 
 \n ", 
, " monitor Direction shuttleDirection{
 \n ", 
, " monitor boolean atEmgState {
 \n ", 
, " monitor boolean techGuyInAction {
 \n ", 
, " next(tasks[0]) = ((indexOpenedDoor != 0) & (tasks[0] | (indexPressed = 0))) &
 \n ", 
, " next(tasks[1]) = ((indexOpenedDoor != 1) & (tasks[1] | (indexPressed = 1))) &
 \n ", 
, " next(tasks[2]) = ((indexOpenedDoor != 2) & (tasks[2] | (indexPressed = 2))) &
 \n ", 
, " next(tasks[3]) = ((indexOpenedDoor != 3) & (tasks[3] | (indexPressed = 3)));
 \n ", 
, " openDoorAtEmgState becomes false when at emergency state and door request is sent
 \n ", 
, " openDoorAtEmgState becomes true when entering emergency state
 \n ", 
, " pHolds_afterQuntilR(backwarding, !atStation, stationWillDecrease); 
 \n ", 
, " pHolds_afterQuntilR(forwarding, !atStation, stationWillIncrease);
 \n ", 
, " pRespondsToS (!atStation & (forwarding | backwarding), atStation | stopping); 
 \n ", 
, " pRespondsToS (atStation & ((forwarding & station < 3) | (backwarding & station > 0)), !atStation | stopping);
 \n ", 
, " pRespondsToS (forwarding | backwarding, !atStation | stopping);
 \n ", 
, " pRespondsToS(isBaseStationBwd(shuttleDirection, lastPassedStation) & backwarding, atBaseStation | forwarding | stopping);
 \n ", 
, " pRespondsToS(isBaseStationFwd(shuttleDirection, lastPassedStation) & forwarding, atBaseStation | backwarding | stopping);
 \n ", 
, " pRespondsToS(noRequests & longTimeWithoutRequests, atBaseStation);
 \n ", 
, " pRespondsToS(techGuyInAction, technicianAck);
 \n ", 
, " predicate isBaseStationBwd(Direction d, Int(0..4) stationLast):
 \n ", 
, " predicate isBaseStationFwd(Direction d, Int(0..4) stationLast):
 \n ", 
, " predicate isTaskDirectionBwdOrNoTask(Direction d, Int(0..4) stationLast, Int(0..4) s):
 \n ", 
, " predicate isTaskDirectionFwdOrNoTask(Direction d, Int(0..4) stationLast, Int(0..4) s):
 \n ", 
, " predicate taskAtCurrentStation(Int(0..4) index):
 \n ", 
, " predicate taskIsSatisfaid(Int(0..1) direction, Int(0..3) stationIndex):
 \n ", 
, " predicate updateTasks(boolean[4] tasks ,Int(0..4) indexPressed, Int(0..4) indexOpenedDoor):
 \n ", 
, " reset goToBaseStation
 \n ", 
, " reset goToBaseStation task
 \n ", 
, " reset task
 \n ", 
, " satisfies task
 \n ", 
, " satisfies task 
 \n ", 
, " satisfiesTask
 \n ", 
, " shuttleDirection = GOING_NONE;
 \n ", 
, " station can only decrease by going backwarding (and entering station)
 \n ", 
, " station can only increase by going forwarding (and entering station)
 \n ", 
, " station number can only change when entering station
 \n ", 
, " stations can only increase or decrease by one 
 \n ", 
, " stopping
 \n ", 
, " sys boolean emgBeepReq;
 \n ", 
, " sys boolean startTechnicalJob;
 \n ", 
, " sys boolean[4] shuttleTasks;
 \n ", 
, " taskWillBeTrue := 
 \n ", 
, " tasks are complete only when stopping and opening door at the station
 \n ", 
, " technicianAck returns answer eventually 
 \n ", 
, " updates tasks (bw or fw) array: indexOpenedDoor -> false, indexPressed -> true
 \n ", 
, " waitingForDoor when door request is sent and door ack hasn't been received yet
 \n ", 
, " waitingForEmgBeeper when emgBeepProcessReq request is sent
 \n ", 
, " while not in station can't stop
 \n ", 
, " }
 \n ", 
, " } 
 \n ", 
, 
ConvoyCar_ConvoyCarSpec , 
, "  ", 
, " 
 \n ", 
, " DISTANCE CONTROL
 \n ", 
, " DRIVE STATE
 \n ", 
, " LANE "enum":
 \n ", 
, " LANE CONTROL
 \n ", 
, " assumption initDist:
 \n ", 
, " if car deviated to the left and keeps turning right - then eventually it will return to lane 
 \n ", 
, " if car deviated to the right and keeps turning left - then eventually it will return to lane 
 \n ", 
, " if car in wrong direction and keeps turning right - then eventually it will return to lane (which implies it's in right direction) 
 \n ", 
, " if car stops for long enough, eventually lane is clear
 \n ", 
, " lane setup:
 \n ", 
, " left side of lane should be WHITE
 \n ", 
, " move gradually between speeds:
 \n ", 
, " right side of lane should be BLACK
 \n ", 
, " sense >= minDist;
 \n ", 
, " ((d = GOING_FWD & (stationLast - s < 0)) | 
 \n ", 
, " ((d = GOING_FWD & (stationLast - s >= 0)) | 
 \n ", 
, " ((next(shuttleTasks[0]) = true) <-> 
 \n ", 
, " ((next(shuttleTasks[1]) = true) <-> 
 \n ", 
, " ((next(shuttleTasks[2]) = true) <-> 
 \n ", 
, " ((next(shuttleTasks[3]) = true) <-> 
 \n ", 
, " ((shuttleTasksFwd[0] | shuttleTasksBwd[0]) & index = 0) |
 \n ", 
, " ((shuttleTasksFwd[1] | shuttleTasksBwd[1]) & index = 1) |
 \n ", 
, " ((shuttleTasksFwd[2] | shuttleTasksBwd[2]) & index = 2) |
 \n ", 
, " ((shuttleTasksFwd[3] | shuttleTasksBwd[3]) & index = 3);
 \n ", 
, " (atGivenStation(1) & shuttleTasks[1]=true) |
 \n ", 
, " (atGivenStation(2) & shuttleTasks[2]=true) | 
 \n ", 
, " (atGivenStation(3) & shuttleTasks[3]=true)) -> stopping; 
 \n ", 
, " (d = GOING_BWD & (stationLast - s < 0)) );
 \n ", 
, " (d = GOING_BWD & (stationLast - s >= 0)) );
 \n ", 
, " (direction = 0 & (shuttleTasksBwd[stationIndex]=false)) | (direction = 1 & (shuttleTasksFwd[stationIndex]=false)); 
 \n ", 
, " (next(shuttleTasks[1]=false)& shuttleTasks[1]=true) |
 \n ", 
, " (next(shuttleTasks[2]=false)& shuttleTasks[2]=true) | 
 \n ", 
, " (next(shuttleTasks[3]=false)& shuttleTasks[3]=true)) -> stopping; 
 \n ", 
, " (pressedStationFour | (shuttleTasks[3]=true & !atGivenStation(3)))); 
 \n ", 
, " (pressedStationOne | (shuttleTasks[0]=true & !atGivenStation(0) & !stopping))) &
 \n ", 
, " (pressedStationThree | (shuttleTasks[2]=true & !atGivenStation(2)))) & 
 \n ", 
, " (pressedStationTwo | (shuttleTasks[1]=true & !atGivenStation(1)))) & 
 \n ", 
, " (station = 1 & shuttleTasks[1]=true) |
 \n ", 
, " (station = 2 & shuttleTasks[2]=true) |
 \n ", 
, " (station = 3 & shuttleTasks[3]=true)); 
 \n ", 
, " (stopAtNearestStation will be false after 1 cycle of open and close)
 \n ", 
, " */
 \n ", 
, " /**
 \n ", 
, " // Addition of task in shuttleTasksBwd (+ keep shuttleTasksFwd the same) 
 \n ", 
, " // Addition of task in shuttleTasksFwd (+ keep shuttleTasksBwd the same) 
 \n ", 
, " // At base station: stop and don't change tasks status
 \n ", 
, " // Change value of atEmgState at each press on emgButton
 \n ", 
, " // Go to base station
 \n ", 
, " // In station eventually
 \n ", 
, " // Initially no technician ack
 \n ", 
, " // Initially not atEmgState
 \n ", 
, " // Keeps shuttle direction
 \n ", 
, " // Leave station eventually
 \n ", 
, " // No strange technician acks
 \n ", 
, " // Not always stop at nearest station
 \n ", 
, " // Start technical job iff entering techGuyInAction state
 \n ", 
, " // Stop when techGuyInAction
 \n ", 
, " // if base station is bw and going bw -> will arrive to base station (or fw or stopping)
 \n ", 
, " // if base station is fw and going fw -> will arrive to base station (or bw or stopping)
 \n ", 
, " // updates tasks (bw or fw) array: indexOpenedDoor -> false, indexPressed -> true
 \n ", 
, " ///////////////////////////////////
 \n ", 
, " /////////////////////////////////////
 \n ", 
, " Add task
 \n ", 
, " Addition of task in shuttleTasksBwd (+ keep shuttleTasksFwd the same) 
 \n ", 
, " Addition of task in shuttleTasksFwd (+ keep shuttleTasksBwd the same) 
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra monitor atEmgState is true when emgButton is pressed 
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra until it is pressed again
 \n ", 
, " All Tasks Are Satisfied Eventually:
 \n ", 
, " Always go forward
 \n ", 
, " At base station: stop and don't change tasks status
 \n ", 
, " Backwarding cause station decrease 
 \n ", 
, " Beep iff entering station or ready to beep at station
 \n ", 
, " Beep iff: entering station at emergency state or already at station at emergency state and readyToEmgBeep ack has been received
 \n ", 
, " Beeper returns answer eventually
 \n ", 
, " Can't change direction without stopping 
 \n ", 
, " Can't driving backward in the first station 
 \n ", 
, " Can't driving forward in the last station 
 \n ", 
, " Can't stop while not in station
 \n ", 
, " Change value of maintenanceAtStationOne at each press on mPressedStationOne
 \n ", 
, " Change value of maintenanceAtStationThree at each press on mPressedStationThree
 \n ", 
, " Change value of maintenanceAtStationTwo at each press on mPressedStationTwo
 \n ", 
, " Change value of maintenanceAtStationZero at each press on mPressedStationZero
 \n ", 
, " Close door after open
 \n ", 
, " Count time since requests iff: there are no pressed stations and not at emergency state
 \n ", 
, " Current station isn't pressed while at current station 
 \n ", 
, " Current station not pressed while at station 
 \n ", 
, " Defines
 \n ", 
, " Defines shuttleTasks update 
 \n ", 
, " Don't change direction without stopping 
 \n ", 
, " Don't change door request when door is in process
 \n ", 
, " Don't change tasks status if not needed (needed = add task or satisfies task)
 \n ", 
, " Don't go backward when at station 0 
 \n ", 
, " Don't go backward when there are no tasks backward
 \n ", 
, " Don't go forward when at station 3 
 \n ", 
, " Don't go forward when there are no tasks forward
 \n ", 
, " Don't stop while not at station
 \n ", 
, " Done door process eventually
 \n ", 
, " Door returns answer eventually
 \n ", 
, " Else, Keep waitingForEmgBeeper status
 \n ", 
, " Else, change the value of atEmgState at each press on emgButton 
 \n ", 
, " Else, keep openDoorAtEmgState's status
 \n ", 
, " Else, keep waitingForDoor's status
 \n ", 
, " Environment Specification
 \n ", 
, " Forwarding cause station increase 
 \n ", 
, " G 
 \n ", 
, " G !forwarding & !backwarding & !(atBaseStation & noRequests & longTimeWithoutRequests) -> next(shuttleDirection) = shuttleDirection;
 \n ", 
, " G ( (!technicianAck & doorOperationsCounter != 10) -> techGuyInAction = next(techGuyInAction));
 \n ", 
, " G ( (doorOperationsCounter = 10 & !technicianAck) -> next(techGuyInAction));
 \n ", 
, " G ( (noRequests & atBaseStation) -> stopping & updateTasks(shuttleTasksFwd, 4, 4) & updateTasks(shuttleTasksBwd, 4, 4));
 \n ", 
, " G ( technicianAck -> next(!techGuyInAction));
 \n ", 
, " G (!atStation & next(atStationWithTask) -> next(stopping));
 \n ", 
, " G (!atStationWithTask & !noTasks & !atEmgState) -> (!stopping); 
 \n ", 
, " G (((atGivenStation(0) & shuttleTasks[0]=true) -> stopping) &
 \n ", 
, " G ((atGivenStation(0) & shuttleTasks[0]=true) |
 \n ", 
, " G ((atGivenStation(0)) -> !pressedStationOne) &
 \n ", 
, " G ((emgButton = PRESSED) <-> next(atEmgState)=!atEmgState);
 \n ", 
, " G ((next(shuttleTasks[0]=false)& shuttleTasks[0]=true) |
 \n ", 
, " G (PREV(!techGuyInAction) & techGuyInAction <-> startTechnicalJob );
 \n ", 
, " G (atStation & atEmgState) -> stopping;
 \n ", 
, " G (atStation -> stopButton=RELEASED);
 \n ", 
, " G (next(technicianAck) -> (techGuyInAction & !technicianAck));
 \n ", 
, " G (techGuyInAction -> stopping);
 \n ", 
, " G atBaseStation & noRequests & longTimeWithoutRequests & stopping -> next(shuttleDirection) = GOING_NONE;
 \n ", 
, " G backwarding -> next(shuttleDirection) = GOING_BWD;
 \n ", 
, " G enteringStation & noTasks -> stopping;
 \n ", 
, " G forwarding -> next(shuttleDirection) = GOING_FWD;
 \n ", 
, " G isTaskDirectionBwdOrNoTask(shuttleDirection, lastPassedStation, pressedStation) -> updateTasks(shuttleTasksBwd, pressedStation, pickUpStation) & updateTasks(shuttleTasksFwd, 4, 4);
 \n ", 
, " G isTaskDirectionFwdOrNoTask(shuttleDirection, lastPassedStation, pressedStation) -> updateTasks(shuttleTasksFwd, pressedStation, pickUpStation) & updateTasks(shuttleTasksBwd, 4, 4);
 \n ", 
, " G stopping -> atStation ;
 \n ", 
, " G stopping -> enteringStation ;
 \n ", 
, " GF !atEmgState; 
 \n ", 
, " GF !pressedStationFour; 
 \n ", 
, " GF !pressedStationOne; 
 \n ", 
, " GF !pressedStationThree; 
 \n ", 
, " GF !pressedStationTwo; 
 \n ", 
, " Go to base station
 \n ", 
, " Going backward causes station to decrease 
 \n ", 
, " Going bw -> no backward tasks
 \n ", 
, " Going forward causes station to increase 
 \n ", 
, " Going fw -> no fw tasks
 \n ", 
, " If
 \n ", 
, " If doorCounterIncreased - change stopAtNearestStation to false
 \n ", 
, " If no tasks stop when entering station
 \n ", 
, " If stopButton is pressed - change stopAtNearestStation to true
 \n ", 
, " In station eventually
 \n ", 
, " Initial state 
 \n ", 
, " Initial state of the environment
 \n ", 
, " Initial state of the system
 \n ", 
, " Initially door is closed
 \n ", 
, " Initially no technician ack
 \n ", 
, " Initially not
 \n ", 
, " Initially not atEmgState
 \n ", 
, " Initially not goToBaseStation
 \n ", 
, " Initially not maintenanceAtStationOne
 \n ", 
, " Initially not maintenanceAtStationThree
 \n ", 
, " Initially not maintenanceAtStationTwo
 \n ", 
, " Initially not maintenanceAtStationZero
 \n ", 
, " Initially not openDoorAtEmgState
 \n ", 
, " Initially not stopAtNearestStation
 \n ", 
, " Initially not taskAtStationOne
 \n ", 
, " Initially not taskAtStationThree
 \n ", 
, " Initially not taskAtStationTwo
 \n ", 
, " Initially not taskAtStationZero
 \n ", 
, " Initially not waiting
 \n ", 
, " Initially not waitingForDoor
 \n ", 
, " Initially not waitingForEmgBeeper
 \n ", 
, " Inputs
 \n ", 
, " Keep goToBaseStation's status 
 \n ", 
, " Keep task's status 
 \n ", 
, " Keeps shuttle direction
 \n ", 
, " Leave station eventually
 \n ", 
, " Liveness of system
 \n ", 
, " Monitors 
 \n ", 
, " Motors
 \n ", 
, " No one press on stopButton while atStation
 \n ", 
, " No strange door ack
 \n ", 
, " No strange door acks
 \n ", 
, " No strange doorStatus 1
 \n ", 
, " No strange doorStatus 2
 \n ", 
, " No strange ready to beep acks
 \n ", 
, " No strange technician acks
 \n ", 
, " No strange technicianAck
 \n ", 
, " Not always at emergency state
 \n ", 
, " Not always goToBaseStation
 \n ", 
, " Not always stop at nearest station
 \n ", 
, " Not waitingForDoor when doorAck is received
 \n ", 
, " Not waitingForEmgBeeper when readyToEmgBeep ack has been received
 \n ", 
, " Note: after open door immediately start to close door (process) because of closeDoorReq
 \n ", 
, " Open door iff stopping because of stop request and door is closed
 \n ", 
, " Open door iff stopping because of stop request or task and door is closed
 \n ", 
, " Open door iff: at station, door is close and there is a task or emergency state
 \n ", 
, " Outputs
 \n ", 
, " Predicates
 \n ", 
, " Presses
 \n ", 
, " Prevent unnecessary stopping 
 \n ", 
, " Prevent unnecessary stops 
 \n ", 
, " Preventing unnecessary driving backward
 \n ", 
, " Preventing unnecessary driving backward (when there is a task) 
 \n ", 
, " Preventing unnecessary driving forward
 \n ", 
, " Preventing unnecessary driving forward (when there is a task) 
 \n ", 
, " Prevention unnecessary stopping 
 \n ", 
, " Reset task
 \n ", 
, " Safety of the system
 \n ", 
, " Same waiting status when not readyToBeep and no startBeepTimer
 \n ", 
, " Satisfies task
 \n ", 
, " Satisfies task 
 \n ", 
, " Set goToBaseStation
 \n ", 
, " Start technical job iff entering techGuyInAction state
 \n ", 
, " Start technician job iff entering techGuyInAction state
 \n ", 
, " Station can not change while stopping
 \n ", 
, " Station can only decrease by going backwarding (and entering station)
 \n ", 
, " Station can only increase by going forwarding (and entering station)
 \n ", 
, " Station can't change while stopping
 \n ", 
, " Station changes only when entering station
 \n ", 
, " Station decreases by going backward and entering station
 \n ", 
, " Station does not change when stopping
 \n ", 
, " Station increases by going forward and entering station
 \n ", 
, " Station number can only change when entering station
 \n ", 
, " Stations
 \n ", 
, " Stations can only increase or decrease by one 
 \n ", 
, " Stations can only stay the same, increase by 1 or decrease by 1 
 \n ", 
, " Stop if at station and stopAtNearestStation is true 
 \n ", 
, " Stop only at station
 \n ", 
, " Stop waiting when readyToBeep (or start new timer)
 \n ", 
, " Stop when at base station and there are no tasks
 \n ", 
, " Stop when at emergency state and at station
 \n ", 
, " Stop when at station, there are no tasks, and there is no need to go to base station
 \n ", 
, " Stop when passing a station that was called
 \n ", 
, " Stop when techGuyInAction
 \n ", 
, " Stop when technician action is required 
 \n ", 
, " Stop while waiting for door 
 \n ", 
, " System Specification
 \n ", 
, " TODO: door in process only when asked to
 \n ", 
, " Task at station one is satisfied eventually
 \n ", 
, " Task at station three is satisfied eventually
 \n ", 
, " Task at station two is satisfied eventually
 \n ", 
, " Task at station zero is satisfied eventually
 \n ", 
, " Tasks
 \n ", 
, " Type definitions
 \n ", 
, " Update pickUpStation (for the application)
 \n ", 
, " Waiting for timer when startBeepTimer
 \n ", 
, " When atEmgState and not atStation, keep atEmgState status
 \n ", 
, " When passing station and this station was called stop at station.
 \n ", 
, " add task
 \n ", 
, " all Tasks Are Satisfied Eventually:
 \n ", 
, " assumption
 \n ", 
, " assumption currentStationNotPressedWhileAtStation:
 \n ", 
, " assumption doneTechnicianActionEventually:
 \n ", 
, " assumption inStationEventually:
 \n ", 
, " assumption initiallyNoTechnicianAck:
 \n ", 
, " assumption leaveStationEventually:
 \n ", 
, " assumption noStrangeTechnicianAcks:
 \n ", 
, " assumption notAlwaysAtEmgState:
 \n ", 
, " atBaseStation := station = baseStation;
 \n ", 
, " atStationWithTask := atStation & ((station = 0 & shuttleTasks[0]=true) |
 \n ", 
, " between open and close must be process 
 \n ", 
, " can't change direction without stopping 
 \n ", 
, " door in process only when asked to
 \n ", 
, " door must be in process when asked to
 \n ", 
, " else change value of atEmgState at each press on emgButton 
 \n ", 
, " env Button emgButton;
 \n ", 
, " env Int(0..4) baseStation; // need only 0-3
 \n ", 
, " env boolean longTimeWithoutRequests;
 \n ", 
, " env boolean readyToEmgBeep;
 \n ", 
, " env boolean technicianAck;
 \n ", 
, " for well-separated Environment (Causes unrealizable) 
 \n ", 
, " guarantee
 \n ", 
, " guarantee 
 \n ", 
, " guarantee mustStopInOrderToSatisfyTask:
 \n ", 
, " guarantee stopWhenTechGuyInAction:
 \n ", 
, " guarantee stoppingAtStationOnlyIfHasTask:
 \n ", 
, " if atEmgState keep atEmgState
 \n ", 
, " if base station is bw and going bw -> will arrive to base station
 \n ", 
, " if base station is bw and going bw -> will arrive to base station (or fw or stopping)
 \n ", 
, " if base station is fw and going fw -> will arrive to base station
 \n ", 
, " if base station is fw and going fw -> will arrive to base station (or bw or stopping)
 \n ", 
, " if no tasks stop when entering station
 \n ", 
, " if only tasks backward go backward
 \n ", 
, " if only tasks forward go forward
 \n ", 
, " isTaskDirectionBwdOrNoTask(d, stationLast, baseStation);
 \n ", 
, " isTaskDirectionFwdOrNoTask(d, stationLast, baseStation) | stationLast = 4;
 \n ", 
, " keep status 
 \n ", 
, " monitor Direction shuttleDirection{
 \n ", 
, " monitor boolean atEmgState {
 \n ", 
, " monitor boolean techGuyInAction {
 \n ", 
, " next(tasks[0]) = ((indexOpenedDoor != 0) & (tasks[0] | (indexPressed = 0))) &
 \n ", 
, " next(tasks[1]) = ((indexOpenedDoor != 1) & (tasks[1] | (indexPressed = 1))) &
 \n ", 
, " next(tasks[2]) = ((indexOpenedDoor != 2) & (tasks[2] | (indexPressed = 2))) &
 \n ", 
, " next(tasks[3]) = ((indexOpenedDoor != 3) & (tasks[3] | (indexPressed = 3)));
 \n ", 
, " openDoorAtEmgState becomes false when at emergency state and door request is sent
 \n ", 
, " openDoorAtEmgState becomes true when entering emergency state
 \n ", 
, " pHolds_afterQuntilR(backwarding, !atStation, stationWillDecrease); 
 \n ", 
, " pHolds_afterQuntilR(forwarding, !atStation, stationWillIncrease);
 \n ", 
, " pRespondsToS (!atStation & (forwarding | backwarding), atStation | stopping); 
 \n ", 
, " pRespondsToS (atStation & ((forwarding & station < 3) | (backwarding & station > 0)), !atStation | stopping);
 \n ", 
, " pRespondsToS (forwarding | backwarding, !atStation | stopping);
 \n ", 
, " pRespondsToS(isBaseStationBwd(shuttleDirection, lastPassedStation) & backwarding, atBaseStation | forwarding | stopping);
 \n ", 
, " pRespondsToS(isBaseStationFwd(shuttleDirection, lastPassedStation) & forwarding, atBaseStation | backwarding | stopping);
 \n ", 
, " pRespondsToS(noRequests & longTimeWithoutRequests, atBaseStation);
 \n ", 
, " pRespondsToS(techGuyInAction, technicianAck);
 \n ", 
, " predicate isBaseStationBwd(Direction d, Int(0..4) stationLast):
 \n ", 
, " predicate isBaseStationFwd(Direction d, Int(0..4) stationLast):
 \n ", 
, " predicate isTaskDirectionBwdOrNoTask(Direction d, Int(0..4) stationLast, Int(0..4) s):
 \n ", 
, " predicate isTaskDirectionFwdOrNoTask(Direction d, Int(0..4) stationLast, Int(0..4) s):
 \n ", 
, " predicate taskAtCurrentStation(Int(0..4) index):
 \n ", 
, " predicate taskIsSatisfaid(Int(0..1) direction, Int(0..3) stationIndex):
 \n ", 
, " predicate updateTasks(boolean[4] tasks ,Int(0..4) indexPressed, Int(0..4) indexOpenedDoor):
 \n ", 
, " reset goToBaseStation
 \n ", 
, " reset goToBaseStation task
 \n ", 
, " reset task
 \n ", 
, " satisfies task
 \n ", 
, " satisfies task 
 \n ", 
, " satisfiesTask
 \n ", 
, " shuttleDirection = GOING_NONE;
 \n ", 
, " station can only decrease by going backwarding (and entering station)
 \n ", 
, " station can only increase by going forwarding (and entering station)
 \n ", 
, " station number can only change when entering station
 \n ", 
, " stations can only increase or decrease by one 
 \n ", 
, " stopping
 \n ", 
, " sys boolean emgBeepReq;
 \n ", 
, " sys boolean startTechnicalJob;
 \n ", 
, " sys boolean[4] shuttleTasks;
 \n ", 
, " taskWillBeTrue := 
 \n ", 
, " tasks are complete only when stopping and opening door at the station
 \n ", 
, " technicianAck returns answer eventually 
 \n ", 
, " updates tasks (bw or fw) array: indexOpenedDoor -> false, indexPressed -> true
 \n ", 
, " waitingForDoor when door request is sent and door ack hasn't been received yet
 \n ", 
, " waitingForEmgBeeper when emgBeepProcessReq request is sent
 \n ", 
, " while not in station can't stop
 \n ", 
, " }
 \n ", 
, " } 
 \n ", 
, 
Elevator_cmp , 
, "  ", 
, " !lightIsOn;
 \n ", 
, " '1' for 3 seconds, '2' for 5 seconds, '3' for 10 seconds and '4' for 20 seconds.
 \n ", 
, " '1' for 3 seconds, '2' for 5 seconds, '3' for 20 seconds.
 \n ", 
, " (!takeCareOfFloor);
 \n ", 
, " ((dontGoDown & !currentFloorEqualsLockingFloor) -> next(!goingDown));
 \n ", 
, " ((dontGoDown & currentFloorEqualsLockingFloor) -> !dontGoDown);
 \n ", 
, " ((i=0)&arr[0]=true)|((i=1)&arr[1]=true)|((i=2)&arr[2]=true)|((i=3)&arr[3]=true);
 \n ", 
, " (floor2&(memCall0|memCall1)&!(memCall2|memCall3)); 
 \n ", 
, " (floor2&(memCall3)&!(memCall0|memCall1|memCall2)); 
 \n ", 
, " A var for memory - remember calls.
 \n ", 
, " CLOCK GUARANTEES AND ASSUMPTIONS
 \n ", 
, " DESIGNATED FLOOR GUARANTEES
 \n ", 
, " Doors Movement Gars
 \n ", 
, " EMERGENCY GUARANTEES AND ASSUMPIONS
 \n ", 
, " ENVIROMENT'S DESCRIPTION ASSUMPTIONS
 \n ", 
, " G !(calls_c[2]|calls_c[1]|calls_c[0]);
 \n ", 
, " G !countTime_c;
 \n ", 
, " G !emergency;
 \n ", 
, " G !stayInPlace -> (next(lightIsOn) = !lightIsOn);
 \n ", 
, " G (!atFloor&next(atEmergencyFloor)->next(stayInPlace));
 \n ", 
, " G (!countTime_c)->next(!lightIsOn);
 \n ", 
, " G (!floor0 & ((!anyCalls&seconds20) | returnTo0))<->next (returnTo0) ; 
 \n ", 
, " G (!seconds3)->(!seconds5);
 \n ", 
, " G (!seconds5)->(!seconds20);
 \n ", 
, " G ((dontGoUp & !currentFloorEqualsLockingFloor) -> next(!goingUp)) &
 \n ", 
, " G ((dontGoUp & currentFloorEqualsLockingFloor) -> !dontGoUp) &
 \n ", 
, " G (atDesignatedFloor&(!doorsAreFullyOpened)&PREV(openningDoors))->openningDoors;
 \n ", 
, " G (atFloor&stayInPlace&next(atEmergencyFloor))->next(stayInPlace);
 \n ", 
, " G (atFloorThatCalled&(!moving)&(!seconds3))->next(!moving);
 \n ", 
, " G (countTime_c)->next(lightIsOn);
 \n ", 
, " G (doorsM_c = STOP) -> (next(doors_c) = STOP);
 \n ", 
, " G (doorsM_c = STOP) -> (next(doors_c) = STOP); // NO ITS NOT, DOOR_C IS THE STATE OF THE DOORS - > OPEN,CLOSE AND FULLY OPEN
 \n ", 
, " G (goingUp -> next (!goingDown)) & (goingDown -> next (!goingUp));
 \n ", 
, " G (onlyDownCalls&PREV(stayInPlace))->(!goingUp);//(goingDown|atEmergencyFloor);
 \n ", 
, " G (onlyUpCalls&PREV(stayInPlace))->(!goingDown);//(goingUp|atEmergencyFloor);
 \n ", 
, " G (returnTo0&(!doorsAreClosed))->closingDoors;
 \n ", 
, " G (returnTo0&(!floor0))->goingDown;
 \n ", 
, " G (stayInPlace) -> (next(!lightIsOn));
 \n ", 
, " G (takeCareOfFloor&(!doorsAreClosed)&next(doorsAreClosed))<->(next(takeCareOfFloor)!=takeCareOfFloor);
 \n ", 
, " G atDesignatedFloor->(staying);
 \n ", 
, " G moving&atFloor->(next(floor_c)!=floor_c);
 \n ", 
, " G moving->(next(lightIsOn))
 \n ", 
, " G((!anyCalls)&(current_time_c-sampledTime<20)->(!moving));
 \n ", 
, " G(atFloorThatCalled->(!moving));
 \n ", 
, " G(fullyOpenedStateAtDesignatedFloor&(noSeconds|seconds3|seconds5)&!memEmergency&sabbathMode&PREV(keepDoorsState))->(keepDoorsState);
 \n ", 
, " G(fullyOpenedStateAtDesignatedFloor&(seconds5)&!memEmergency&!sabbathMode)->closingDoors;
 \n ", 
, " G(xImpNextY(goingUp,!goingDown)&xImpNextY(goingDown,!goingUp));
 \n ", 
, " GF floor1;
 \n ", 
, " GF(!countTime_c);
 \n ", 
, " I don't think this assumption is necessary
 \n ", 
, " I don't think this assumption is necessary ->ITS NECESSARY FOR THE AUTOMATON, I WANT THE SYSTEM TO KNOW THE ENV
 \n ", 
, " INIT ASSUMPTIONS
 \n ", 
, " INIT GUARANTEES
 \n ", 
, " LIGHT GUARANTEES
 \n ", 
, " Movement Gars
 \n ", 
, " Niv: firstMomentAtDesignatedFloor&seconds3
 \n ", 
, " Obviously this is a private scenario of a general decision which we should
 \n ", 
, " PENALTIES
 \n ", 
, " PROBLEM WITH THIS GAR - NO MORE SUCCESSORS FOR CURRENT INPUT
 \n ", 
, " REACH TO DESIGNATED FLOORS
 \n ", 
, " RETURN TO FLOOR0 GUARANTEES AND ASSUMPTIONS
 \n ", 
, " REWARD SHOULD BE BY THE NUMBER OF THE FLOOR
 \n ", 
, " REWARDS
 \n ", 
, " SABBATH MODE GUARANTEES AND ASSUMPIONS
 \n ", 
, " SOUND GUARANTEES
 \n ", 
, " Safety Guarantees
 \n ", 
, " Signal indicating that 3,5 and 20 seconds have passed (since the last
 \n ", 
, " Signal indicating that 3,5,10 and 20 seconds have passed (since the last
 \n ", 
, " Signals indicating that 3,5 and 20 seconds have passed (since the last
 \n ", 
, " Signals that tell the controller that 3,5 and 20 seconds have passed.
 \n ", 
, " System's motors and timer commands
 \n ", 
, " System's motors, lamp and timer commands
 \n ", 
, " The env "brings" to the controller the current floor the the door state.
 \n ", 
, " The system's motors commands, lamp and timer.
 \n ", 
, " Those env variables are being connected to the controller, reporting
 \n ", 
, " Used for 2 cases: 1.if standing in a floor and it calls. 2.if standing in a designated floor don't move.
 \n ", 
, " Used to make sure that an unfair user won't stuck the elevator at one floor
 \n ", 
, " a 'queue'.
 \n ", 
, " aboveTheGround/5, it'd look nicer than 4 different lines
 \n ", 
, " activateSabbathMode := (!sabbathMode & sabbath_c & !emergency_c & !memEmergency);
 \n ", 
, " activation of the boolean variable 'countTime_c')
 \n ", 
, " and two gar names were changed (at the end)
 \n ", 
, " are true at the same time. maybe 'first3SecondsAtDesignatedFloor'
 \n ", 
, " as it equals to:
 \n ", 
, " as it's confusing, that both 'firstMomentAtDesignatedFloor' and 'seconds3'
 \n ", 
, " asm
 \n ", 
, " asm countingTimeFirstMomentAtDesignatedFloorCount3Seconds: // Niv
 \n ", 
, " asm finishHandleFloorCauseClosingDoors:
 \n ", 
, " asm movingCauseChangeInFloor:
 \n ", 
, " asm movingDoorsChangeDoorsState:
 \n ", 
, " asm not20SecondsBefore5Seconds:
 \n ", 
, " asm not5SecondsBefore3Seconds:
 \n ", 
, " asm returnTo0WhenRequired:
 \n ", 
, " asm returnToOBringsUsToFloor0:
 \n ", 
, " assume that the timer works correctly, something is wrong lol.
 \n ", 
, " atEdgedFloor := (floor0 | floor3);
 \n ", 
, " atFloor := (floor0|floor1|floor2|floor3); 
 \n ", 
, " aux Int(0..21) sampled_time;
 \n ", 
, " aux boolean[4] memCalls;
 \n ", 
, " betweenFloors01 := (floor_c=1);
 \n ", 
, " betweenFloors12 := (floor_c=3);
 \n ", 
, " betweenFloors23 := (floor_c=5);
 \n ", 
, " but I don't have time to implement that till Monday :)
 \n ", 
, " cond1->next(cond2);
 \n ", 
, " condFloor->(!);
 \n ", 
, " current floor\door state.
 \n ", 
, " currentFloorEqualsLockingFloor := (!(currentFloor < lockingFloor | currentFloor > lockingFloor)) ;
 \n ", 
, " deActivateSabbathMode := (sabbathMode & (sabbath_c|emergency_c|memEmergency));
 \n ", 
, " doorsAreFullyOpened := (distanceBetweenDoors=15);
 \n ", 
, " emergency := false;
 \n ", 
, " emergency_c := false;
 \n ", 
, " env DoorsState doors_c;
 \n ", 
, " env TouchSensorCont lowerTS_c;
 \n ", 
, " env TouchSensorCont upperTS_c;
 \n ", 
, " env boolean seconds5;
 \n ", 
, " env boolean shabbatMode;
 \n ", 
, " env variables indicating calls (from floors).
 \n ", 
, " env variables that saying if there was a call from a floor.
 \n ", 
, " first in the queue. Maybe we should NOT let it go UP, during its journey to
 \n ", 
, " floor 0. What do you think?
 \n ", 
, " gar
 \n ", 
, " gar 
 \n ", 
, " gar AtDesignatedFloorInSabbathModeHoldTheDoorsFullyOpenedFor10Seconds:
 \n ", 
, " gar AtDesignatedFloorOpenDoors:
 \n ", 
, " gar atEmergencyFloorAndNotMovingThenDontMove:
 \n ", 
, " gar callFromOtherFloorCauseMoving:
 \n ", 
, " gar dontChangeDirectionTillLockingFloorIsBeingVisited:
 \n ", 
, " gar dontChangeDirectionWithoutStopping:
 \n ", 
, " gar dontGoDownWhenOnlyCallsFromUp:
 \n ", 
, " gar dontGoUpWhenOnlyCallsFromDown:
 \n ", 
, " gar doorsStayOpenedInDesignatedFloorFor5Sec:
 \n ", 
, " gar ifArrivedDesignatedFloorThanDoorsWillBeFullyOpened:
 \n ", 
, " gar ifAtDesignatedFloorDontMove:
 \n ", 
, " gar ifCallsFromFloor1GoTo1:
 \n ", 
, " gar ifCallsFromFloor2GoTo2:
 \n ", 
, " gar ifCallsFromFloor3GoTo3:
 \n ", 
, " gar ifEnteredToEmergencyFloorDontMove: 
 \n ", 
, " gar infinitelyOftenAtFloor1:
 \n ", 
, " gar init_light:
 \n ", 
, " gar lightBlinksWhileMoving: 
 \n ", 
, " gar lightIsOffWhileNotMoving:
 \n ", 
, " gar releaseDirectionLocks:
 \n ", 
, " gar returnTo0WhenRequired:
 \n ", 
, " gar stopFor20SecIfNoCalls:
 \n ", 
, " gar whenNeedToReturnTo0CloseDoors:
 \n ", 
, " general remark: I think we can remove the '_c' extension to every name :)
 \n ", 
, " handleFlor Defines:
 \n ", 
, " if 2 buttons are being pressed at the same time, it may cause a
 \n ", 
, " implies that we better have other name, instead of 'firstMomentAtDesignatedFloor'
 \n ", 
, " in that case the elevator will stop at floor0 no mater what because it can't change directions //from down to up at once without stopping (other guarantee). 
 \n ", 
, " indeed I think it's unnecessary and we can remove 'stayingSameHeigt'
 \n ", 
, " inputs
 \n ", 
, " justArrivedToDesignatedFloor := (!handleFloor) & atDesignatedFloor;
 \n ", 
, " justStoppedAtDesignatedFloor := justArrivedToDesignatedFloor & (!moving)&(!returnTo0);
 \n ", 
, " last edit on Dec 28 2016, 02:18 by Ori. Only // remarks we added
 \n ", 
, " make.
 \n ", 
, " monitor boolean returnTo0
 \n ", 
, " no further comments on the spec, as every gar and asm has a symbolic name.
 \n ", 
, " notFinishedWithDesignatedFloor := handleFloor&!doorsAreClosed;
 \n ", 
, " onlyDownCalls := (floor1&(memCall0)&!(memCall1|memCall2|memCall3))|
 \n ", 
, " onlyUpCalls := (floor1&(memCall2|memCall3)&!(memCall0|memCall1))|
 \n ", 
, " or 'notMoving'
 \n ", 
, " order to overcome this hassle. Actually I already have an idea
 \n ", 
, " pBecomesTrue_betweenQandR (floor0&doorsAreClosed, returnTo0, goingUp|!moving|openningDoors|(keepDoorsState&!moving)) ;
 \n ", 
, " pBecomesTrue_betweenQandR (seconds3, PREV(!handleFloor)&handleFloor,openningDoors);
 \n ", 
, " pBecomesTrue_betweenQandR(doorsAreFullyOpened, PREV(!handleFloor)&handleFloor,moving|closingDoors|(keepDoorsState&seconds3)) ;
 \n ", 
, " pHolds_afterQuntilR(!moving,atDesignatedFloor,!atDesignatedFloor);
 \n ", 
, " pHolds_afterQuntilR(doorsAreFullyOpened, doorsAreFullyOpened&handleFloor, seconds5) {
 \n ", 
, " pHolds_afterQuntilR(goingDown,returnTo0,!returnTo0);
 \n ", 
, " pHolds_afterQuntilR(goingDown,returnTo0,floor0)
 \n ", 
, " pHolds_afterQuntilR(goingDown,returnTo0,floor0);
 \n ", 
, " pHolds_afterQuntilR(keepDoorsState,firstStateAtDesignatedFloor,!noSeconds);
 \n ", 
, " pHolds_afterQuntilR(keepDoorsState,fullyOpenedStateAtDesignatedFloor,!(noSeconds|seconds3));
 \n ", 
, " pRespondsToS((closingDoors|o,doors_c!=next(doors_c));
 \n ", 
, " pRespondsToS(anyCalls&!atDesignatedFloor, moving);
 \n ", 
, " pRespondsToS(atDesignatedFloor&doorsAreClosed, openningDoors);
 \n ", 
, " pRespondsToS(atEmergencyFloor&!doorsWereFullyOpened,doorsAreFullyOpened);
 \n ", 
, " pRespondsToS(calls[2],floor2);
 \n ", 
, " pRespondsToS(calls[3],floor3);
 \n ", 
, " pRespondsToS(calls_c[1],floor1);
 \n ", 
, " pRespondsToS(firstMomentAtDesignatedFloor&countTime_c,seconds3);
 \n ", 
, " pRespondsToS(justStoppedAtDesignatedFloor, doorsAreFullyOpened);
 \n ", 
, " pRespondsToS(returnTo0,floor0);
 \n ", 
, " predicate boolArrayAti(boolean[4] arr,Int(0..3) i):
 \n ", 
, " predicate removeCallWhenArrived(boolean condFloor,boolean[4] calls,Int(0..3) floorNum):
 \n ", 
, " predicate xImpNextY(boolean cond1,boolean cond2):
 \n ", 
, " problem, so I know that we MAY change this monitor in future, in
 \n ", 
, " returnTo0 := false;
 \n ", 
, " sabbath_c := false;
 \n ", 
, " the 'queue order', normal elevator gives priority to the person how clicked
 \n ", 
, " the lock won't be unlocked.
 \n ", 
, " the shorter the better
 \n ", 
, " the system would have to violate this assumption as some point.
 \n ", 
, " this gar may be correct BUT we better check this as I'm not 100% sure.
 \n ", 
, " this is an *indirect* implementation of
 \n ", 
, " this should exist by the definition of the timer. if we have to
 \n ", 
, " type VelocityC= {ZERO, SLOW,FAST};
 \n ", 
, " type \n ", 
, " type definitions
 \n ", 
, " up and downs prior getting to floor 0, not so good as it may not guarantee
 \n ", 
, " we didn't put anymore comments on the spec, instead we gave names to every gar and asm in the spec.
 \n ", 
, " what if (anyCalls) & PREV(anyCalls))
 \n ", 
, " what if calls_c[0]==false, do we guarantee that memCalls[0]==false also?
 \n ", 
, " why not just make a monitor which updates currentFloor to be
 \n ", 
, " { !returnTo0;
 \n ", 
, " }
 \n ", 
, " Satisfies task 
 \n ", 
, " Set goToBaseStation
 \n ", 
, " Start technical job iff entering techGuyInAction state
 \n ", 
, " Start technician job iff entering techGuyInAction state
 \n ", 
, " Station can not change while stopping
 \n ", 
, " Station can only decrease by going backwarding (and entering station)
 \n ", 
, " Station can only increase by going forwarding (and entering station)
 \n ", 
, " Station can't change while stopping
 \n ", 
, " Station changes only when entering station
 \n ", 
, " Station decreases by going backward and entering station
 \n ", 
, " Station does not change when stopping
 \n ", 
, " Station increases by going forward and entering station
 \n ", 
, " Station number can only change when entering station
 \n ", 
, " Stations
 \n ", 
, " Stations can only increase or decrease by one 
 \n ", 
, " Stations can only stay the same, increase by 1 or decrease by 1 
 \n ", 
, " Stop if at station and stopAtNearestStation is true 
 \n ", 
, " Stop only at station
 \n ", 
, " Stop waiting when readyToBeep (or start new timer)
 \n ", 
, " Stop when at base station and there are no tasks
 \n ", 
, " Stop when at emergency state and at station
 \n ", 
, " Stop when at station, there are no tasks, and there is no need to go to base station
 \n ", 
, " Stop when passing a station that was called
 \n ", 
, " Stop when techGuyInAction
 \n ", 
, " Stop when technician action is required 
 \n ", 
, " Stop while waiting for door 
 \n ", 
, " System Specification
 \n ", 
, " TODO: door in process only when asked to
 \n ", 
, " Task at station one is satisfied eventually
 \n ", 
, " Task at station three is satisfied eventually
 \n ", 
, " Task at station two is satisfied eventually
 \n ", 
, " Task at station zero is satisfied eventually
 \n ", 
, " Tasks
 \n ", 
, " Type definitions
 \n ", 
, " Update pickUpStation (for the application)
 \n ", 
, " Waiting for timer when startBeepTimer
 \n ", 
, " When atEmgState and not atStation, keep atEmgState status
 \n ", 
, " When passing station and this station was called stop at station.
 \n ", 
, " add task
 \n ", 
, " all Tasks Are Satisfied Eventually:
 \n ", 
, " assumption
 \n ", 
, " assumption currentStationNotPressedWhileAtStation:
 \n ", 
, " assumption doneTechnicianActionEventually:
 \n ", 
, " assumption inStationEventually:
 \n ", 
, " assumption initiallyNoTechnicianAck:
 \n ", 
, " assumption leaveStationEventually:
 \n ", 
, " assumption noStrangeTechnicianAcks:
 \n ", 
, " assumption notAlwaysAtEmgState:
 \n ", 
, " atBaseStation := station = baseStation;
 \n ", 
, " atStationWithTask := atStation & ((station = 0 & shuttleTasks[0]=true) |
 \n ", 
, " between open and close must be process 
 \n ", 
, " can't change direction without stopping 
 \n ", 
, " door in process only when asked to
 \n ", 
, " door must be in process when asked to
 \n ", 
, " else change value of atEmgState at each press on emgButton 
 \n ", 
, " env Button emgButton;
 \n ", 
, " env Int(0..4) baseStation; // need only 0-3
 \n ", 
, " env boolean longTimeWithoutRequests;
 \n ", 
, " env boolean readyToEmgBeep;
 \n ", 
, " env boolean technicianAck;
 \n ", 
, " for well-separated Environment (Causes unrealizable) 
 \n ", 
, " guarantee
 \n ", 
, " guarantee 
 \n ", 
, " guarantee mustStopInOrderToSatisfyTask:
 \n ", 
, " guarantee stopWhenTechGuyInAction:
 \n ", 
, " guarantee stoppingAtStationOnlyIfHasTask:
 \n ", 
, " if atEmgState keep atEmgState
 \n ", 
, " if base station is bw and going bw -> will arrive to base station
 \n ", 
, " if base station is bw and going bw -> will arrive to base station (or fw or stopping)
 \n ", 
, " if base station is fw and going fw -> will arrive to base station
 \n ", 
, " if base station is fw and going fw -> will arrive to base station (or bw or stopping)
 \n ", 
, " if no tasks stop when entering station
 \n ", 
, " if only tasks backward go backward
 \n ", 
, " if only tasks forward go forward
 \n ", 
, " isTaskDirectionBwdOrNoTask(d, stationLast, baseStation);
 \n ", 
, " isTaskDirectionFwdOrNoTask(d, stationLast, baseStation) | stationLast = 4;
 \n ", 
, " keep status 
 \n ", 
, " monitor Direction shuttleDirection{
 \n ", 
, " monitor boolean atEmgState {
 \n ", 
, " monitor boolean techGuyInAction {
 \n ", 
, " next(tasks[0]) = ((indexOpenedDoor != 0) & (tasks[0] | (indexPressed = 0))) &
 \n ", 
, " next(tasks[1]) = ((indexOpenedDoor != 1) & (tasks[1] | (indexPressed = 1))) &
 \n ", 
, " next(tasks[2]) = ((indexOpenedDoor != 2) & (tasks[2] | (indexPressed = 2))) &
 \n ", 
, " next(tasks[3]) = ((indexOpenedDoor != 3) & (tasks[3] | (indexPressed = 3)));
 \n ", 
, " openDoorAtEmgState becomes false when at emergency state and door request is sent
 \n ", 
, " openDoorAtEmgState becomes true when entering emergency state
 \n ", 
, " pHolds_afterQuntilR(backwarding, !atStation, stationWillDecrease); 
 \n ", 
, " pHolds_afterQuntilR(forwarding, !atStation, stationWillIncrease);
 \n ", 
, " pRespondsToS (!atStation & (forwarding | backwarding), atStation | stopping); 
 \n ", 
, " pRespondsToS (atStation & ((forwarding & station < 3) | (backwarding & station > 0)), !atStation | stopping);
 \n ", 
, " pRespondsToS (forwarding | backwarding, !atStation | stopping);
 \n ", 
, " pRespondsToS(isBaseStationBwd(shuttleDirection, lastPassedStation) & backwarding, atBaseStation | forwarding | stopping);
 \n ", 
, " pRespondsToS(isBaseStationFwd(shuttleDirection, lastPassedStation) & forwarding, atBaseStation | backwarding | stopping);
 \n ", 
, " pRespondsToS(noRequests & longTimeWithoutRequests, atBaseStation);
 \n ", 
, " pRespondsToS(techGuyInAction, technicianAck);
 \n ", 
, " predicate isBaseStationBwd(Direction d, Int(0..4) stationLast):
 \n ", 
, " predicate isBaseStationFwd(Direction d, Int(0..4) stationLast):
 \n ", 
, " predicate isTaskDirectionBwdOrNoTask(Direction d, Int(0..4) stationLast, Int(0..4) s):
 \n ", 
, " predicate isTaskDirectionFwdOrNoTask(Direction d, Int(0..4) stationLast, Int(0..4) s):
 \n ", 
, " predicate taskAtCurrentStation(Int(0..4) index):
 \n ", 
, " predicate taskIsSatisfaid(Int(0..1) direction, Int(0..3) stationIndex):
 \n ", 
, " predicate updateTasks(boolean[4] tasks ,Int(0..4) indexPressed, Int(0..4) indexOpenedDoor):
 \n ", 
, " reset goToBaseStation
 \n ", 
, " reset goToBaseStation task
 \n ", 
, " reset task
 \n ", 
, " satisfies task
 \n ", 
, " satisfies task 
 \n ", 
, " satisfiesTask
 \n ", 
, " shuttleDirection = GOING_NONE;
 \n ", 
, " station can only decrease by going backwarding (and entering station)
 \n ", 
, " station can only increase by going forwarding (and entering station)
 \n ", 
, " station number can only change when entering station
 \n ", 
, " stations can only increase or decrease by one 
 \n ", 
, " stopping
 \n ", 
, " sys boolean emgBeepReq;
 \n ", 
, " sys boolean startTechnicalJob;
 \n ", 
, " sys boolean[4] shuttleTasks;
 \n ", 
, " taskWillBeTrue := 
 \n ", 
, " tasks are complete only when stopping and opening door at the station
 \n ", 
, " technicianAck returns answer eventually 
 \n ", 
, " updates tasks (bw or fw) array: indexOpenedDoor -> false, indexPressed -> true
 \n ", 
, " waitingForDoor when door request is sent and door ack hasn't been received yet
 \n ", 
, " waitingForEmgBeeper when emgBeepProcessReq request is sent
 \n ", 
, " while not in station can't stop
 \n ", 
, " }
 \n ", 
, " } 
 \n ", 
, 
ExitModule_ParkingSpec , 
, "  ", 
, " 
 \n ", 
, " (PREV(backSense > 0 & stopping) & PREV(PREV(senseMotor = BACK))));
 \n ", 
, " // beware when entering a parking spot or just going backwards
 \n ", 
, " Assume that there is a green parking spot
 \n ", 
, " Assumptions
 \n ", 
, " By driving backwards and to the right, eventauly we will get a new color.
 \n ", 
, " Enter the parking spot eventually
 \n ", 
, " For testing purposes, we assume we found a parallel parking spot and we are above a the road which means the color sensor returns black
 \n ", 
, " G (PREV(sideSense <= 1)) -> (!right);
 \n ", 
, " G (align = false) -> (done = false);
 \n ", 
, " G (done = true & !valid_parking_spot) -> next(mode = SEARCHING);
 \n ", 
, " G (left & forwarding) -> (next(sideSense) >= sideSense);
 \n ", 
, " G (left & reversing) -> (next(sideSense) >= sideSense);
 \n ", 
, " G (mode = PARKED) <-> (valid_parking_spot = true);
 \n ", 
, " G (right & forwarding) -> (next(sideSense) <= sideSense);
 \n ", 
, " G (right & reversing) -> (next(sideSense) <= sideSense);
 \n ", 
, " G driveMotor = STOP -> velocity = 0;
 \n ", 
, " G frontSense >= 1;
 \n ", 
, " G reversing -> next(frontSense) >= frontSense;
 \n ", 
, " G sideSense >= 1;
 \n ", 
, " G(driveMotor = BWD) -> ((PREV(senseMotor = SIDE)) & 
 \n ", 
, " GF ((reversing) & (right)) -> (color != BLACK); //Take 2
 \n ", 
, " Guarantees
 \n ", 
, " Initially we are not parked but starting a parking
 \n ", 
, " Not moving means the velocity decreases or remains the same
 \n ", 
, " Once a parking spot has been found it wont move. Hopefully.
 \n ", 
, " Once we are parked we should stop moving.
 \n ", 
, " TODO
 \n ", 
, " The car should never stop dead in its track if the velocity is not zero.
 \n ", 
, " When in parking mode we should keep at it until we are done
 \n ", 
, " asm
 \n ", 
, " define what mode = parked means
 \n ", 
, " exit from parallel parking
 \n ", 
, " exit from reverse parking
 \n ", 
, " gar
 \n ", 
, " gar dontCrashFront:
 \n ", 
, " gar dontCrashSide:
 \n ", 
, " guarantee dontCrashSide:
 \n ", 
, " the connection between the Parking module and Search & Scan module.
 \n ", 
, " G atDesignatedFloor->(staying);
 \n ", 
, " G moving&atFloor->(next(floor_c)!=floor_c);
 \n ", 
, " G moving->(next(lightIsOn))
 \n ", 
, " G((!anyCalls)&(current_time_c-sampledTime<20)->(!moving));
 \n ", 
, " G(atFloorThatCalled->(!moving));
 \n ", 
, " G(fullyOpenedStateAtDesignatedFloor&(noSeconds|seconds3|seconds5)&!memEmergency&sabbathMode&PREV(keepDoorsState))->(keepDoorsState);
 \n ", 
, " G(fullyOpenedStateAtDesignatedFloor&(seconds5)&!memEmergency&!sabbathMode)->closingDoors;
 \n ", 
, " G(xImpNextY(goingUp,!goingDown)&xImpNextY(goingDown,!goingUp));
 \n ", 
, " GF floor1;
 \n ", 
, " GF(!countTime_c);
 \n ", 
, " I don't think this assumption is necessary
 \n ", 
, " I don't think this assumption is necessary ->ITS NECESSARY FOR THE AUTOMATON, I WANT THE SYSTEM TO KNOW THE ENV
 \n ", 
, " INIT ASSUMPTIONS
 \n ", 
, " INIT GUARANTEES
 \n ", 
, " LIGHT GUARANTEES
 \n ", 
, " Movement Gars
 \n ", 
, " Niv: firstMomentAtDesignatedFloor&seconds3
 \n ", 
, " Obviously this is a private scenario of a general decision which we should
 \n ", 
, " PENALTIES
 \n ", 
, " PROBLEM WITH THIS GAR - NO MORE SUCCESSORS FOR CURRENT INPUT
 \n ", 
, " REACH TO DESIGNATED FLOORS
 \n ", 
, " RETURN TO FLOOR0 GUARANTEES AND ASSUMPTIONS
 \n ", 
, " REWARD SHOULD BE BY THE NUMBER OF THE FLOOR
 \n ", 
, " REWARDS
 \n ", 
, " SABBATH MODE GUARANTEES AND ASSUMPIONS
 \n ", 
, " SOUND GUARANTEES
 \n ", 
, " Safety Guarantees
 \n ", 
, " Signal indicating that 3,5 and 20 seconds have passed (since the last
 \n ", 
, " Signal indicating that 3,5,10 and 20 seconds have passed (since the last
 \n ", 
, " Signals indicating that 3,5 and 20 seconds have passed (since the last
 \n ", 
, " Signals that tell the controller that 3,5 and 20 seconds have passed.
 \n ", 
, " System's motors and timer commands
 \n ", 
, " System's motors, lamp and timer commands
 \n ", 
, " The env "brings" to the controller the current floor the the door state.
 \n ", 
, " The system's motors commands, lamp and timer.
 \n ", 
, " Those env variables are being connected to the controller, reporting
 \n ", 
, " Used for 2 cases: 1.if standing in a floor and it calls. 2.if standing in a designated floor don't move.
 \n ", 
, " Used to make sure that an unfair user won't stuck the elevator at one floor
 \n ", 
, " a 'queue'.
 \n ", 
, " aboveTheGround/5, it'd look nicer than 4 different lines
 \n ", 
, " activateSabbathMode := (!sabbathMode & sabbath_c & !emergency_c & !memEmergency);
 \n ", 
, " activation of the boolean variable 'countTime_c')
 \n ", 
, " and two gar names were changed (at the end)
 \n ", 
, " are true at the same time. maybe 'first3SecondsAtDesignatedFloor'
 \n ", 
, " as it equals to:
 \n ", 
, " as it's confusing, that both 'firstMomentAtDesignatedFloor' and 'seconds3'
 \n ", 
, " asm
 \n ", 
, " asm countingTimeFirstMomentAtDesignatedFloorCount3Seconds: // Niv
 \n ", 
, " asm finishHandleFloorCauseClosingDoors:
 \n ", 
, " asm movingCauseChangeInFloor:
 \n ", 
, " asm movingDoorsChangeDoorsState:
 \n ", 
, " asm not20SecondsBefore5Seconds:
 \n ", 
, " asm not5SecondsBefore3Seconds:
 \n ", 
, " asm returnTo0WhenRequired:
 \n ", 
, " asm returnToOBringsUsToFloor0:
 \n ", 
, " assume that the timer works correctly, something is wrong lol.
 \n ", 
, " atEdgedFloor := (floor0 | floor3);
 \n ", 
, " atFloor := (floor0|floor1|floor2|floor3); 
 \n ", 
, " aux Int(0..21) sampled_time;
 \n ", 
, " aux boolean[4] memCalls;
 \n ", 
, " betweenFloors01 := (floor_c=1);
 \n ", 
, " betweenFloors12 := (floor_c=3);
 \n ", 
, " betweenFloors23 := (floor_c=5);
 \n ", 
, " but I don't have time to implement that till Monday :)
 \n ", 
, " cond1->next(cond2);
 \n ", 
, " condFloor->(!);
 \n ", 
, " current floor\door state.
 \n ", 
, " currentFloorEqualsLockingFloor := (!(currentFloor < lockingFloor | currentFloor > lockingFloor)) ;
 \n ", 
, " deActivateSabbathMode := (sabbathMode & (sabbath_c|emergency_c|memEmergency));
 \n ", 
, " doorsAreFullyOpened := (distanceBetweenDoors=15);
 \n ", 
, " emergency := false;
 \n ", 
, " emergency_c := false;
 \n ", 
, " env DoorsState doors_c;
 \n ", 
, " env TouchSensorCont lowerTS_c;
 \n ", 
, " env TouchSensorCont upperTS_c;
 \n ", 
, " env boolean seconds5;
 \n ", 
, " env boolean shabbatMode;
 \n ", 
, " env variables indicating calls (from floors).
 \n ", 
, " env variables that saying if there was a call from a floor.
 \n ", 
, " first in the queue. Maybe we should NOT let it go UP, during its journey to
 \n ", 
, " floor 0. What do you think?
 \n ", 
, " gar
 \n ", 
, " gar 
 \n ", 
, " gar AtDesignatedFloorInSabbathModeHoldTheDoorsFullyOpenedFor10Seconds:
 \n ", 
, " gar AtDesignatedFloorOpenDoors:
 \n ", 
, " gar atEmergencyFloorAndNotMovingThenDontMove:
 \n ", 
, " gar callFromOtherFloorCauseMoving:
 \n ", 
, " gar dontChangeDirectionTillLockingFloorIsBeingVisited:
 \n ", 
, " gar dontChangeDirectionWithoutStopping:
 \n ", 
, " gar dontGoDownWhenOnlyCallsFromUp:
 \n ", 
, " gar dontGoUpWhenOnlyCallsFromDown:
 \n ", 
, " gar doorsStayOpenedInDesignatedFloorFor5Sec:
 \n ", 
, " gar ifArrivedDesignatedFloorThanDoorsWillBeFullyOpened:
 \n ", 
, " gar ifAtDesignatedFloorDontMove:
 \n ", 
, " gar ifCallsFromFloor1GoTo1:
 \n ", 
, " gar ifCallsFromFloor2GoTo2:
 \n ", 
, " gar ifCallsFromFloor3GoTo3:
 \n ", 
, " gar ifEnteredToEmergencyFloorDontMove: 
 \n ", 
, " gar infinitelyOftenAtFloor1:
 \n ", 
, " gar init_light:
 \n ", 
, " gar lightBlinksWhileMoving: 
 \n ", 
, " gar lightIsOffWhileNotMoving:
 \n ", 
, " gar releaseDirectionLocks:
 \n ", 
, " gar returnTo0WhenRequired:
 \n ", 
, " gar stopFor20SecIfNoCalls:
 \n ", 
, " gar whenNeedToReturnTo0CloseDoors:
 \n ", 
, " general remark: I think we can remove the '_c' extension to every name :)
 \n ", 
, " handleFlor Defines:
 \n ", 
, " if 2 buttons are being pressed at the same time, it may cause a
 \n ", 
, " implies that we better have other name, instead of 'firstMomentAtDesignatedFloor'
 \n ", 
, " in that case the elevator will stop at floor0 no mater what because it can't change directions //from down to up at once without stopping (other guarantee). 
 \n ", 
, " indeed I think it's unnecessary and we can remove 'stayingSameHeigt'
 \n ", 
, " inputs
 \n ", 
, " justArrivedToDesignatedFloor := (!handleFloor) & atDesignatedFloor;
 \n ", 
, " justStoppedAtDesignatedFloor := justArrivedToDesignatedFloor & (!moving)&(!returnTo0);
 \n ", 
, " last edit on Dec 28 2016, 02:18 by Ori. Only // remarks we added
 \n ", 
, " make.
 \n ", 
, " monitor boolean returnTo0
 \n ", 
, " no further comments on the spec, as every gar and asm has a symbolic name.
 \n ", 
, " notFinishedWithDesignatedFloor := handleFloor&!doorsAreClosed;
 \n ", 
, " onlyDownCalls := (floor1&(memCall0)&!(memCall1|memCall2|memCall3))|
 \n ", 
, " onlyUpCalls := (floor1&(memCall2|memCall3)&!(memCall0|memCall1))|
 \n ", 
, " or 'notMoving'
 \n ", 
, " order to overcome this hassle. Actually I already have an idea
 \n ", 
, " pBecomesTrue_betweenQandR (floor0&doorsAreClosed, returnTo0, goingUp|!moving|openningDoors|(keepDoorsState&!moving)) ;
 \n ", 
, " pBecomesTrue_betweenQandR (seconds3, PREV(!handleFloor)&handleFloor,openningDoors);
 \n ", 
, " pBecomesTrue_betweenQandR(doorsAreFullyOpened, PREV(!handleFloor)&handleFloor,moving|closingDoors|(keepDoorsState&seconds3)) ;
 \n ", 
, " pHolds_afterQuntilR(!moving,atDesignatedFloor,!atDesignatedFloor);
 \n ", 
, " pHolds_afterQuntilR(doorsAreFullyOpened, doorsAreFullyOpened&handleFloor, seconds5) {
 \n ", 
, " pHolds_afterQuntilR(goingDown,returnTo0,!returnTo0);
 \n ", 
, " pHolds_afterQuntilR(goingDown,returnTo0,floor0)
 \n ", 
, " pHolds_afterQuntilR(goingDown,returnTo0,floor0);
 \n ", 
, " pHolds_afterQuntilR(keepDoorsState,firstStateAtDesignatedFloor,!noSeconds);
 \n ", 
, " pHolds_afterQuntilR(keepDoorsState,fullyOpenedStateAtDesignatedFloor,!(noSeconds|seconds3));
 \n ", 
, " pRespondsToS((closingDoors|o,doors_c!=next(doors_c));
 \n ", 
, " pRespondsToS(anyCalls&!atDesignatedFloor, moving);
 \n ", 
, " pRespondsToS(atDesignatedFloor&doorsAreClosed, openningDoors);
 \n ", 
, " pRespondsToS(atEmergencyFloor&!doorsWereFullyOpened,doorsAreFullyOpened);
 \n ", 
, " pRespondsToS(calls[2],floor2);
 \n ", 
, " pRespondsToS(calls[3],floor3);
 \n ", 
, " pRespondsToS(calls_c[1],floor1);
 \n ", 
, " pRespondsToS(firstMomentAtDesignatedFloor&countTime_c,seconds3);
 \n ", 
, " pRespondsToS(justStoppedAtDesignatedFloor, doorsAreFullyOpened);
 \n ", 
, " pRespondsToS(returnTo0,floor0);
 \n ", 
, " predicate boolArrayAti(boolean[4] arr,Int(0..3) i):
 \n ", 
, " predicate removeCallWhenArrived(boolean condFloor,boolean[4] calls,Int(0..3) floorNum):
 \n ", 
, " predicate xImpNextY(boolean cond1,boolean cond2):
 \n ", 
, " problem, so I know that we MAY change this monitor in future, in
 \n ", 
, " returnTo0 := false;
 \n ", 
, " sabbath_c := false;
 \n ", 
, " the 'queue order', normal elevator gives priority to the person how clicked
 \n ", 
, " the lock won't be unlocked.
 \n ", 
, " the shorter the better
 \n ", 
, " the system would have to violate this assumption as some point.
 \n ", 
, " this gar may be correct BUT we better check this as I'm not 100% sure.
 \n ", 
, " this is an *indirect* implementation of
 \n ", 
, " this should exist by the definition of the timer. if we have to
 \n ", 
, " type VelocityC= {ZERO, SLOW,FAST};
 \n ", 
, " type \n ", 
, " type definitions
 \n ", 
, " up and downs prior getting to floor 0, not so good as it may not guarantee
 \n ", 
, " we didn't put anymore comments on the spec, instead we gave names to every gar and asm in the spec.
 \n ", 
, " what if (anyCalls) & PREV(anyCalls))
 \n ", 
, " what if calls_c[0]==false, do we guarantee that memCalls[0]==false also?
 \n ", 
, " why not just make a monitor which updates currentFloor to be
 \n ", 
, " { !returnTo0;
 \n ", 
, " }
 \n ", 
, " Satisfies task 
 \n ", 
, " Set goToBaseStation
 \n ", 
, " Start technical job iff entering techGuyInAction state
 \n ", 
, " Start technician job iff entering techGuyInAction state
 \n ", 
, " Station can not change while stopping
 \n ", 
, " Station can only decrease by going backwarding (and entering station)
 \n ", 
, " Station can only increase by going forwarding (and entering station)
 \n ", 
, " Station can't change while stopping
 \n ", 
, " Station changes only when entering station
 \n ", 
, " Station decreases by going backward and entering station
 \n ", 
, " Station does not change when stopping
 \n ", 
, " Station increases by going forward and entering station
 \n ", 
, " Station number can only change when entering station
 \n ", 
, " Stations
 \n ", 
, " Stations can only increase or decrease by one 
 \n ", 
, " Stations can only stay the same, increase by 1 or decrease by 1 
 \n ", 
, " Stop if at station and stopAtNearestStation is true 
 \n ", 
, " Stop only at station
 \n ", 
, " Stop waiting when readyToBeep (or start new timer)
 \n ", 
, " Stop when at base station and there are no tasks
 \n ", 
, " Stop when at emergency state and at station
 \n ", 
, " Stop when at station, there are no tasks, and there is no need to go to base station
 \n ", 
, " Stop when passing a station that was called
 \n ", 
, " Stop when techGuyInAction
 \n ", 
, " Stop when technician action is required 
 \n ", 
, " Stop while waiting for door 
 \n ", 
, " System Specification
 \n ", 
, " TODO: door in process only when asked to
 \n ", 
, " Task at station one is satisfied eventually
 \n ", 
, " Task at station three is satisfied eventually
 \n ", 
, " Task at station two is satisfied eventually
 \n ", 
, " Task at station zero is satisfied eventually
 \n ", 
, " Tasks
 \n ", 
, " Type definitions
 \n ", 
, " Update pickUpStation (for the application)
 \n ", 
, " Waiting for timer when startBeepTimer
 \n ", 
, " When atEmgState and not atStation, keep atEmgState status
 \n ", 
, " When passing station and this station was called stop at station.
 \n ", 
, " add task
 \n ", 
, " all Tasks Are Satisfied Eventually:
 \n ", 
, " assumption
 \n ", 
, " assumption currentStationNotPressedWhileAtStation:
 \n ", 
, " assumption doneTechnicianActionEventually:
 \n ", 
, " assumption inStationEventually:
 \n ", 
, " assumption initiallyNoTechnicianAck:
 \n ", 
, " assumption leaveStationEventually:
 \n ", 
, " assumption noStrangeTechnicianAcks:
 \n ", 
, " assumption notAlwaysAtEmgState:
 \n ", 
, " atBaseStation := station = baseStation;
 \n ", 
, " atStationWithTask := atStation & ((station = 0 & shuttleTasks[0]=true) |
 \n ", 
, " between open and close must be process 
 \n ", 
, " can't change direction without stopping 
 \n ", 
, " door in process only when asked to
 \n ", 
, " door must be in process when asked to
 \n ", 
, " else change value of atEmgState at each press on emgButton 
 \n ", 
, " env Button emgButton;
 \n ", 
, " env Int(0..4) baseStation; // need only 0-3
 \n ", 
, " env boolean longTimeWithoutRequests;
 \n ", 
, " env boolean readyToEmgBeep;
 \n ", 
, " env boolean technicianAck;
 \n ", 
, " for well-separated Environment (Causes unrealizable) 
 \n ", 
, " guarantee
 \n ", 
, " guarantee 
 \n ", 
, " guarantee mustStopInOrderToSatisfyTask:
 \n ", 
, " guarantee stopWhenTechGuyInAction:
 \n ", 
, " guarantee stoppingAtStationOnlyIfHasTask:
 \n ", 
, " if atEmgState keep atEmgState
 \n ", 
, " if base station is bw and going bw -> will arrive to base station
 \n ", 
, " if base station is bw and going bw -> will arrive to base station (or fw or stopping)
 \n ", 
, " if base station is fw and going fw -> will arrive to base station
 \n ", 
, " if base station is fw and going fw -> will arrive to base station (or bw or stopping)
 \n ", 
, " if no tasks stop when entering station
 \n ", 
, " if only tasks backward go backward
 \n ", 
, " if only tasks forward go forward
 \n ", 
, " isTaskDirectionBwdOrNoTask(d, stationLast, baseStation);
 \n ", 
, " isTaskDirectionFwdOrNoTask(d, stationLast, baseStation) | stationLast = 4;
 \n ", 
, " keep status 
 \n ", 
, " monitor Direction shuttleDirection{
 \n ", 
, " monitor boolean atEmgState {
 \n ", 
, " monitor boolean techGuyInAction {
 \n ", 
, " next(tasks[0]) = ((indexOpenedDoor != 0) & (tasks[0] | (indexPressed = 0))) &
 \n ", 
, " next(tasks[1]) = ((indexOpenedDoor != 1) & (tasks[1] | (indexPressed = 1))) &
 \n ", 
, " next(tasks[2]) = ((indexOpenedDoor != 2) & (tasks[2] | (indexPressed = 2))) &
 \n ", 
, " next(tasks[3]) = ((indexOpenedDoor != 3) & (tasks[3] | (indexPressed = 3)));
 \n ", 
, " openDoorAtEmgState becomes false when at emergency state and door request is sent
 \n ", 
, " openDoorAtEmgState becomes true when entering emergency state
 \n ", 
, " pHolds_afterQuntilR(backwarding, !atStation, stationWillDecrease); 
 \n ", 
, " pHolds_afterQuntilR(forwarding, !atStation, stationWillIncrease);
 \n ", 
, " pRespondsToS (!atStation & (forwarding | backwarding), atStation | stopping); 
 \n ", 
, " pRespondsToS (atStation & ((forwarding & station < 3) | (backwarding & station > 0)), !atStation | stopping);
 \n ", 
, " pRespondsToS (forwarding | backwarding, !atStation | stopping);
 \n ", 
, " pRespondsToS(isBaseStationBwd(shuttleDirection, lastPassedStation) & backwarding, atBaseStation | forwarding | stopping);
 \n ", 
, " pRespondsToS(isBaseStationFwd(shuttleDirection, lastPassedStation) & forwarding, atBaseStation | backwarding | stopping);
 \n ", 
, " pRespondsToS(noRequests & longTimeWithoutRequests, atBaseStation);
 \n ", 
, " pRespondsToS(techGuyInAction, technicianAck);
 \n ", 
, " predicate isBaseStationBwd(Direction d, Int(0..4) stationLast):
 \n ", 
, " predicate isBaseStationFwd(Direction d, Int(0..4) stationLast):
 \n ", 
, " predicate isTaskDirectionBwdOrNoTask(Direction d, Int(0..4) stationLast, Int(0..4) s):
 \n ", 
, " predicate isTaskDirectionFwdOrNoTask(Direction d, Int(0..4) stationLast, Int(0..4) s):
 \n ", 
, " predicate taskAtCurrentStation(Int(0..4) index):
 \n ", 
, " predicate taskIsSatisfaid(Int(0..1) direction, Int(0..3) stationIndex):
 \n ", 
, " predicate updateTasks(boolean[4] tasks ,Int(0..4) indexPressed, Int(0..4) indexOpenedDoor):
 \n ", 
, " reset goToBaseStation
 \n ", 
, " reset goToBaseStation task
 \n ", 
, " reset task
 \n ", 
, " satisfies task
 \n ", 
, " satisfies task 
 \n ", 
, " satisfiesTask
 \n ", 
, " shuttleDirection = GOING_NONE;
 \n ", 
, " station can only decrease by going backwarding (and entering station)
 \n ", 
, " station can only increase by going forwarding (and entering station)
 \n ", 
, " station number can only change when entering station
 \n ", 
, " stations can only increase or decrease by one 
 \n ", 
, " stopping
 \n ", 
, " sys boolean emgBeepReq;
 \n ", 
, " sys boolean startTechnicalJob;
 \n ", 
, " sys boolean[4] shuttleTasks;
 \n ", 
, " taskWillBeTrue := 
 \n ", 
, " tasks are complete only when stopping and opening door at the station
 \n ", 
, " technicianAck returns answer eventually 
 \n ", 
, " updates tasks (bw or fw) array: indexOpenedDoor -> false, indexPressed -> true
 \n ", 
, " waitingForDoor when door request is sent and door ack hasn't been received yet
 \n ", 
, " waitingForEmgBeeper when emgBeepProcessReq request is sent
 \n ", 
, " while not in station can't stop
 \n ", 
, " }
 \n ", 
, " } 
 \n ", 
, 
ParkingModule_ParkingSpec , 
, "  ", 
, " 
 \n ", 
, " (PREV(backSense > 0 & stopping) & PREV(PREV(senseMotor = BACK))));
 \n ", 
, " // beware when entering a parking spot or just going backwards
 \n ", 
, " Assume that there is a green parking spot
 \n ", 
, " Assumptions
 \n ", 
, " By driving backwards and to the right, eventauly we will get a new color.
 \n ", 
, " Enter the parking spot eventually
 \n ", 
, " For testing purposes, we assume we found a parallel parking spot and we are above a the road which means the color sensor returns black
 \n ", 
, " G (PREV(sideSense <= 1)) -> (!right);
 \n ", 
, " G (align = false) -> (done = false);
 \n ", 
, " G (done = true & !valid_parking_spot) -> next(mode = SEARCHING);
 \n ", 
, " G (left & reversing) -> (next(sideSense) >= sideSense);
 \n ", 
, " G (mode = PARKED) <-> (valid_parking_spot = true);
 \n ", 
, " G (right & reversing) -> (next(sideSense) <= sideSense);
 \n ", 
, " G driveMotor = STOP -> velocity = 0;
 \n ", 
, " G frontSense >= 1;
 \n ", 
, " G reversing -> next(frontSense) >= frontSense;
 \n ", 
, " G sideSense >= 1;
 \n ", 
, " G(driveMotor = BWD) -> ((PREV(senseMotor = SIDE)) & 
 \n ", 
, " GF ((reversing) & (right)) -> (color != BLACK); //Take 2
 \n ", 
, " Guarantees
 \n ", 
, " Initially we are not parked but starting a parking
 \n ", 
, " Not moving means the velocity decreases or remains the same
 \n ", 
, " Once a parking spot has been found it wont move. Hopefully.
 \n ", 
, " Once we are parked we should stop moving.
 \n ", 
, " TODO
 \n ", 
, " The car should never stop dead in its track if the velocity is not zero.
 \n ", 
, " When in parking mode we should keep at it until we are done
 \n ", 
, " asm
 \n ", 
, " continue parallel parking
 \n ", 
, " continue revers parking
 \n ", 
, " define what mode = parked means
 \n ", 
, " gar
 \n ", 
, " gar dontCrashFront:
 \n ", 
, " gar dontCrashSide:
 \n ", 
, " guarantee dontCrashSide:
 \n ", 
, " start enter 
 \n ", 
, " the connection between the Parking module and Search & Scan module.
 \n ", 
, " the connection between the Parking module and Search & Scan module.
 \n ", 
, " G atDesignatedFloor->(staying);
 \n ", 
, " G moving&atFloor->(next(floor_c)!=floor_c);
 \n ", 
, " G moving->(next(lightIsOn))
 \n ", 
, " G((!anyCalls)&(current_time_c-sampledTime<20)->(!moving));
 \n ", 
, " G(atFloorThatCalled->(!moving));
 \n ", 
, " G(fullyOpenedStateAtDesignatedFloor&(noSeconds|seconds3|seconds5)&!memEmergency&sabbathMode&PREV(keepDoorsState))->(keepDoorsState);
 \n ", 
, " G(fullyOpenedStateAtDesignatedFloor&(seconds5)&!memEmergency&!sabbathMode)->closingDoors;
 \n ", 
, " G(xImpNextY(goingUp,!goingDown)&xImpNextY(goingDown,!goingUp));
 \n ", 
, " GF floor1;
 \n ", 
, " GF(!countTime_c);
 \n ", 
, " I don't think this assumption is necessary
 \n ", 
, " I don't think this assumption is necessary ->ITS NECESSARY FOR THE AUTOMATON, I WANT THE SYSTEM TO KNOW THE ENV
 \n ", 
, " INIT ASSUMPTIONS
 \n ", 
, " INIT GUARANTEES
 \n ", 
, " LIGHT GUARANTEES
 \n ", 
, " Movement Gars
 \n ", 
, " Niv: firstMomentAtDesignatedFloor&seconds3
 \n ", 
, " Obviously this is a private scenario of a general decision which we should
 \n ", 
, " PENALTIES
 \n ", 
, " PROBLEM WITH THIS GAR - NO MORE SUCCESSORS FOR CURRENT INPUT
 \n ", 
, " REACH TO DESIGNATED FLOORS
 \n ", 
, " RETURN TO FLOOR0 GUARANTEES AND ASSUMPTIONS
 \n ", 
, " REWARD SHOULD BE BY THE NUMBER OF THE FLOOR
 \n ", 
, " REWARDS
 \n ", 
, " SABBATH MODE GUARANTEES AND ASSUMPIONS
 \n ", 
, " SOUND GUARANTEES
 \n ", 
, " Safety Guarantees
 \n ", 
, " Signal indicating that 3,5 and 20 seconds have passed (since the last
 \n ", 
, " Signal indicating that 3,5,10 and 20 seconds have passed (since the last
 \n ", 
, " Signals indicating that 3,5 and 20 seconds have passed (since the last
 \n ", 
, " Signals that tell the controller that 3,5 and 20 seconds have passed.
 \n ", 
, " System's motors and timer commands
 \n ", 
, " System's motors, lamp and timer commands
 \n ", 
, " The env "brings" to the controller the current floor the the door state.
 \n ", 
, " The system's motors commands, lamp and timer.
 \n ", 
, " Those env variables are being connected to the controller, reporting
 \n ", 
, " Used for 2 cases: 1.if standing in a floor and it calls. 2.if standing in a designated floor don't move.
 \n ", 
, " Used to make sure that an unfair user won't stuck the elevator at one floor
 \n ", 
, " a 'queue'.
 \n ", 
, " aboveTheGround/5, it'd look nicer than 4 different lines
 \n ", 
, " activateSabbathMode := (!sabbathMode & sabbath_c & !emergency_c & !memEmergency);
 \n ", 
, " activation of the boolean variable 'countTime_c')
 \n ", 
, " and two gar names were changed (at the end)
 \n ", 
, " are true at the same time. maybe 'first3SecondsAtDesignatedFloor'
 \n ", 
, " as it equals to:
 \n ", 
, " as it's confusing, that both 'firstMomentAtDesignatedFloor' and 'seconds3'
 \n ", 
, " asm
 \n ", 
, " asm countingTimeFirstMomentAtDesignatedFloorCount3Seconds: // Niv
 \n ", 
, " asm finishHandleFloorCauseClosingDoors:
 \n ", 
, " asm movingCauseChangeInFloor:
 \n ", 
, " asm movingDoorsChangeDoorsState:
 \n ", 
, " asm not20SecondsBefore5Seconds:
 \n ", 
, " asm not5SecondsBefore3Seconds:
 \n ", 
, " asm returnTo0WhenRequired:
 \n ", 
, " asm returnToOBringsUsToFloor0:
 \n ", 
, " assume that the timer works correctly, something is wrong lol.
 \n ", 
, " atEdgedFloor := (floor0 | floor3);
 \n ", 
, " atFloor := (floor0|floor1|floor2|floor3); 
 \n ", 
, " aux Int(0..21) sampled_time;
 \n ", 
, " aux boolean[4] memCalls;
 \n ", 
, " betweenFloors01 := (floor_c=1);
 \n ", 
, " betweenFloors12 := (floor_c=3);
 \n ", 
, " betweenFloors23 := (floor_c=5);
 \n ", 
, " but I don't have time to implement that till Monday :)
 \n ", 
, " cond1->next(cond2);
 \n ", 
, " condFloor->(!);
 \n ", 
, " current floor\door state.
 \n ", 
, " currentFloorEqualsLockingFloor := (!(currentFloor < lockingFloor | currentFloor > lockingFloor)) ;
 \n ", 
, " deActivateSabbathMode := (sabbathMode & (sabbath_c|emergency_c|memEmergency));
 \n ", 
, " doorsAreFullyOpened := (distanceBetweenDoors=15);
 \n ", 
, " emergency := false;
 \n ", 
, " emergency_c := false;
 \n ", 
, " env DoorsState doors_c;
 \n ", 
, " env TouchSensorCont lowerTS_c;
 \n ", 
, " env TouchSensorCont upperTS_c;
 \n ", 
, " env boolean seconds5;
 \n ", 
, " env boolean shabbatMode;
 \n ", 
, " env variables indicating calls (from floors).
 \n ", 
, " env variables that saying if there was a call from a floor.
 \n ", 
, " first in the queue. Maybe we should NOT let it go UP, during its journey to
 \n ", 
, " floor 0. What do you think?
 \n ", 
, " gar
 \n ", 
, " gar 
 \n ", 
, " gar AtDesignatedFloorInSabbathModeHoldTheDoorsFullyOpenedFor10Seconds:
 \n ", 
, " gar AtDesignatedFloorOpenDoors:
 \n ", 
, " gar atEmergencyFloorAndNotMovingThenDontMove:
 \n ", 
, " gar callFromOtherFloorCauseMoving:
 \n ", 
, " gar dontChangeDirectionTillLockingFloorIsBeingVisited:
 \n ", 
, " gar dontChangeDirectionWithoutStopping:
 \n ", 
, " gar dontGoDownWhenOnlyCallsFromUp:
 \n ", 
, " gar dontGoUpWhenOnlyCallsFromDown:
 \n ", 
, " gar doorsStayOpenedInDesignatedFloorFor5Sec:
 \n ", 
, " gar ifArrivedDesignatedFloorThanDoorsWillBeFullyOpened:
 \n ", 
, " gar ifAtDesignatedFloorDontMove:
 \n ", 
, " gar ifCallsFromFloor1GoTo1:
 \n ", 
, " gar ifCallsFromFloor2GoTo2:
 \n ", 
, " gar ifCallsFromFloor3GoTo3:
 \n ", 
, " gar ifEnteredToEmergencyFloorDontMove: 
 \n ", 
, " gar infinitelyOftenAtFloor1:
 \n ", 
, " gar init_light:
 \n ", 
, " gar lightBlinksWhileMoving: 
 \n ", 
, " gar lightIsOffWhileNotMoving:
 \n ", 
, " gar releaseDirectionLocks:
 \n ", 
, " gar returnTo0WhenRequired:
 \n ", 
, " gar stopFor20SecIfNoCalls:
 \n ", 
, " gar whenNeedToReturnTo0CloseDoors:
 \n ", 
, " general remark: I think we can remove the '_c' extension to every name :)
 \n ", 
, " handleFlor Defines:
 \n ", 
, " if 2 buttons are being pressed at the same time, it may cause a
 \n ", 
, " implies that we better have other name, instead of 'firstMomentAtDesignatedFloor'
 \n ", 
, " in that case the elevator will stop at floor0 no mater what because it can't change directions //from down to up at once without stopping (other guarantee). 
 \n ", 
, " indeed I think it's unnecessary and we can remove 'stayingSameHeigt'
 \n ", 
, " inputs
 \n ", 
, " justArrivedToDesignatedFloor := (!handleFloor) & atDesignatedFloor;
 \n ", 
, " justStoppedAtDesignatedFloor := justArrivedToDesignatedFloor & (!moving)&(!returnTo0);
 \n ", 
, " last edit on Dec 28 2016, 02:18 by Ori. Only // remarks we added
 \n ", 
, " make.
 \n ", 
, " monitor boolean returnTo0
 \n ", 
, " no further comments on the spec, as every gar and asm has a symbolic name.
 \n ", 
, " notFinishedWithDesignatedFloor := handleFloor&!doorsAreClosed;
 \n ", 
, " onlyDownCalls := (floor1&(memCall0)&!(memCall1|memCall2|memCall3))|
 \n ", 
, " onlyUpCalls := (floor1&(memCall2|memCall3)&!(memCall0|memCall1))|
 \n ", 
, " or 'notMoving'
 \n ", 
, " order to overcome this hassle. Actually I already have an idea
 \n ", 
, " pBecomesTrue_betweenQandR (floor0&doorsAreClosed, returnTo0, goingUp|!moving|openningDoors|(keepDoorsState&!moving)) ;
 \n ", 
, " pBecomesTrue_betweenQandR (seconds3, PREV(!handleFloor)&handleFloor,openningDoors);
 \n ", 
, " pBecomesTrue_betweenQandR(doorsAreFullyOpened, PREV(!handleFloor)&handleFloor,moving|closingDoors|(keepDoorsState&seconds3)) ;
 \n ", 
, " pHolds_afterQuntilR(!moving,atDesignatedFloor,!atDesignatedFloor);
 \n ", 
, " pHolds_afterQuntilR(doorsAreFullyOpened, doorsAreFullyOpened&handleFloor, seconds5) {
 \n ", 
, " pHolds_afterQuntilR(goingDown,returnTo0,!returnTo0);
 \n ", 
, " pHolds_afterQuntilR(goingDown,returnTo0,floor0)
 \n ", 
, " pHolds_afterQuntilR(goingDown,returnTo0,floor0);
 \n ", 
, " pHolds_afterQuntilR(keepDoorsState,firstStateAtDesignatedFloor,!noSeconds);
 \n ", 
, " pHolds_afterQuntilR(keepDoorsState,fullyOpenedStateAtDesignatedFloor,!(noSeconds|seconds3));
 \n ", 
, " pRespondsToS((closingDoors|o,doors_c!=next(doors_c));
 \n ", 
, " pRespondsToS(anyCalls&!atDesignatedFloor, moving);
 \n ", 
, " pRespondsToS(atDesignatedFloor&doorsAreClosed, openningDoors);
 \n ", 
, " pRespondsToS(atEmergencyFloor&!doorsWereFullyOpened,doorsAreFullyOpened);
 \n ", 
, " pRespondsToS(calls[2],floor2);
 \n ", 
, " pRespondsToS(calls[3],floor3);
 \n ", 
, " pRespondsToS(calls_c[1],floor1);
 \n ", 
, " pRespondsToS(firstMomentAtDesignatedFloor&countTime_c,seconds3);
 \n ", 
, " pRespondsToS(justStoppedAtDesignatedFloor, doorsAreFullyOpened);
 \n ", 
, " pRespondsToS(returnTo0,floor0);
 \n ", 
, " predicate boolArrayAti(boolean[4] arr,Int(0..3) i):
 \n ", 
, " predicate removeCallWhenArrived(boolean condFloor,boolean[4] calls,Int(0..3) floorNum):
 \n ", 
, " predicate xImpNextY(boolean cond1,boolean cond2):
 \n ", 
, " problem, so I know that we MAY change this monitor in future, in
 \n ", 
, " returnTo0 := false;
 \n ", 
, " sabbath_c := false;
 \n ", 
, " the 'queue order', normal elevator gives priority to the person how clicked
 \n ", 
, " the lock won't be unlocked.
 \n ", 
, " the shorter the better
 \n ", 
, " the system would have to violate this assumption as some point.
 \n ", 
, " this gar may be correct BUT we better check this as I'm not 100% sure.
 \n ", 
, " this is an *indirect* implementation of
 \n ", 
, " this should exist by the definition of the timer. if we have to
 \n ", 
, " type VelocityC= {ZERO, SLOW,FAST};
 \n ", 
, " type \n ", 
, " type definitions
 \n ", 
, " up and downs prior getting to floor 0, not so good as it may not guarantee
 \n ", 
, " we didn't put anymore comments on the spec, instead we gave names to every gar and asm in the spec.
 \n ", 
, " what if (anyCalls) & PREV(anyCalls))
 \n ", 
, " what if calls_c[0]==false, do we guarantee that memCalls[0]==false also?
 \n ", 
, " why not just make a monitor which updates currentFloor to be
 \n ", 
, " { !returnTo0;
 \n ", 
, " }
 \n ", 
, " Satisfies task 
 \n ", 
, " Set goToBaseStation
 \n ", 
, " Start technical job iff entering techGuyInAction state
 \n ", 
, " Start technician job iff entering techGuyInAction state
 \n ", 
, " Station can not change while stopping
 \n ", 
, " Station can only decrease by going backwarding (and entering station)
 \n ", 
, " Station can only increase by going forwarding (and entering station)
 \n ", 
, " Station can't change while stopping
 \n ", 
, " Station changes only when entering station
 \n ", 
, " Station decreases by going backward and entering station
 \n ", 
, " Station does not change when stopping
 \n ", 
, " Station increases by going forward and entering station
 \n ", 
, " Station number can only change when entering station
 \n ", 
, " Stations
 \n ", 
, " Stations can only increase or decrease by one 
 \n ", 
, " Stations can only stay the same, increase by 1 or decrease by 1 
 \n ", 
, " Stop if at station and stopAtNearestStation is true 
 \n ", 
, " Stop only at station
 \n ", 
, " Stop waiting when readyToBeep (or start new timer)
 \n ", 
, " Stop when at base station and there are no tasks
 \n ", 
, " Stop when at emergency state and at station
 \n ", 
, " Stop when at station, there are no tasks, and there is no need to go to base station
 \n ", 
, " Stop when passing a station that was called
 \n ", 
, " Stop when techGuyInAction
 \n ", 
, " Stop when technician action is required 
 \n ", 
, " Stop while waiting for door 
 \n ", 
, " System Specification
 \n ", 
, " TODO: door in process only when asked to
 \n ", 
, " Task at station one is satisfied eventually
 \n ", 
, " Task at station three is satisfied eventually
 \n ", 
, " Task at station two is satisfied eventually
 \n ", 
, " Task at station zero is satisfied eventually
 \n ", 
, " Tasks
 \n ", 
, " Type definitions
 \n ", 
, " Update pickUpStation (for the application)
 \n ", 
, " Waiting for timer when startBeepTimer
 \n ", 
, " When atEmgState and not atStation, keep atEmgState status
 \n ", 
, " When passing station and this station was called stop at station.
 \n ", 
, " add task
 \n ", 
, " all Tasks Are Satisfied Eventually:
 \n ", 
, " assumption
 \n ", 
, " assumption currentStationNotPressedWhileAtStation:
 \n ", 
, " assumption doneTechnicianActionEventually:
 \n ", 
, " assumption inStationEventually:
 \n ", 
, " assumption initiallyNoTechnicianAck:
 \n ", 
, " assumption leaveStationEventually:
 \n ", 
, " assumption noStrangeTechnicianAcks:
 \n ", 
, " assumption notAlwaysAtEmgState:
 \n ", 
, " atBaseStation := station = baseStation;
 \n ", 
, " atStationWithTask := atStation & ((station = 0 & shuttleTasks[0]=true) |
 \n ", 
, " between open and close must be process 
 \n ", 
, " can't change direction without stopping 
 \n ", 
, " door in process only when asked to
 \n ", 
, " door must be in process when asked to
 \n ", 
, " else change value of atEmgState at each press on emgButton 
 \n ", 
, " env Button emgButton;
 \n ", 
, " env Int(0..4) baseStation; // need only 0-3
 \n ", 
, " env boolean longTimeWithoutRequests;
 \n ", 
, " env boolean readyToEmgBeep;
 \n ", 
, " env boolean technicianAck;
 \n ", 
, " for well-separated Environment (Causes unrealizable) 
 \n ", 
, " guarantee
 \n ", 
, " guarantee 
 \n ", 
, " guarantee mustStopInOrderToSatisfyTask:
 \n ", 
, " guarantee stopWhenTechGuyInAction:
 \n ", 
, " guarantee stoppingAtStationOnlyIfHasTask:
 \n ", 
, " if atEmgState keep atEmgState
 \n ", 
, " if base station is bw and going bw -> will arrive to base station
 \n ", 
, " if base station is bw and going bw -> will arrive to base station (or fw or stopping)
 \n ", 
, " if base station is fw and going fw -> will arrive to base station
 \n ", 
, " if base station is fw and going fw -> will arrive to base station (or bw or stopping)
 \n ", 
, " if no tasks stop when entering station
 \n ", 
, " if only tasks backward go backward
 \n ", 
, " if only tasks forward go forward
 \n ", 
, " isTaskDirectionBwdOrNoTask(d, stationLast, baseStation);
 \n ", 
, " isTaskDirectionFwdOrNoTask(d, stationLast, baseStation) | stationLast = 4;
 \n ", 
, " keep status 
 \n ", 
, " monitor Direction shuttleDirection{
 \n ", 
, " monitor boolean atEmgState {
 \n ", 
, " monitor boolean techGuyInAction {
 \n ", 
, " next(tasks[0]) = ((indexOpenedDoor != 0) & (tasks[0] | (indexPressed = 0))) &
 \n ", 
, " next(tasks[1]) = ((indexOpenedDoor != 1) & (tasks[1] | (indexPressed = 1))) &
 \n ", 
, " next(tasks[2]) = ((indexOpenedDoor != 2) & (tasks[2] | (indexPressed = 2))) &
 \n ", 
, " next(tasks[3]) = ((indexOpenedDoor != 3) & (tasks[3] | (indexPressed = 3)));
 \n ", 
, " openDoorAtEmgState becomes false when at emergency state and door request is sent
 \n ", 
, " openDoorAtEmgState becomes true when entering emergency state
 \n ", 
, " pHolds_afterQuntilR(backwarding, !atStation, stationWillDecrease); 
 \n ", 
, " pHolds_afterQuntilR(forwarding, !atStation, stationWillIncrease);
 \n ", 
, " pRespondsToS (!atStation & (forwarding | backwarding), atStation | stopping); 
 \n ", 
, " pRespondsToS (atStation & ((forwarding & station < 3) | (backwarding & station > 0)), !atStation | stopping);
 \n ", 
, " pRespondsToS (forwarding | backwarding, !atStation | stopping);
 \n ", 
, " pRespondsToS(isBaseStationBwd(shuttleDirection, lastPassedStation) & backwarding, atBaseStation | forwarding | stopping);
 \n ", 
, " pRespondsToS(isBaseStationFwd(shuttleDirection, lastPassedStation) & forwarding, atBaseStation | backwarding | stopping);
 \n ", 
, " pRespondsToS(noRequests & longTimeWithoutRequests, atBaseStation);
 \n ", 
, " pRespondsToS(techGuyInAction, technicianAck);
 \n ", 
, " predicate isBaseStationBwd(Direction d, Int(0..4) stationLast):
 \n ", 
, " predicate isBaseStationFwd(Direction d, Int(0..4) stationLast):
 \n ", 
, " predicate isTaskDirectionBwdOrNoTask(Direction d, Int(0..4) stationLast, Int(0..4) s):
 \n ", 
, " predicate isTaskDirectionFwdOrNoTask(Direction d, Int(0..4) stationLast, Int(0..4) s):
 \n ", 
, " predicate taskAtCurrentStation(Int(0..4) index):
 \n ", 
, " predicate taskIsSatisfaid(Int(0..1) direction, Int(0..3) stationIndex):
 \n ", 
, " predicate updateTasks(boolean[4] tasks ,Int(0..4) indexPressed, Int(0..4) indexOpenedDoor):
 \n ", 
, " reset goToBaseStation
 \n ", 
, " reset goToBaseStation task
 \n ", 
, " reset task
 \n ", 
, " satisfies task
 \n ", 
, " satisfies task 
 \n ", 
, " satisfiesTask
 \n ", 
, " shuttleDirection = GOING_NONE;
 \n ", 
, " station can only decrease by going backwarding (and entering station)
 \n ", 
, " station can only increase by going forwarding (and entering station)
 \n ", 
, " station number can only change when entering station
 \n ", 
, " stations can only increase or decrease by one 
 \n ", 
, " stopping
 \n ", 
, " sys boolean emgBeepReq;
 \n ", 
, " sys boolean startTechnicalJob;
 \n ", 
, " sys boolean[4] shuttleTasks;
 \n ", 
, " taskWillBeTrue := 
 \n ", 
, " tasks are complete only when stopping and opening door at the station
 \n ", 
, " technicianAck returns answer eventually 
 \n ", 
, " updates tasks (bw or fw) array: indexOpenedDoor -> false, indexPressed -> true
 \n ", 
, " waitingForDoor when door request is sent and door ack hasn't been received yet
 \n ", 
, " waitingForEmgBeeper when emgBeepProcessReq request is sent
 \n ", 
, " while not in station can't stop
 \n ", 
, " }
 \n ", 
, " } 
 \n ", 
, 
SimpleVehicle_Vehicle , 
, "  ", 
, " 
 \n ", 
, " (i.e. status remains NONE) we swap to searching mode
 \n ", 
, " //Assume that a parking spot that is large enough to contain the car
 \n ", 
, " //Begin a parking in parallel 
 \n ", 
, " //Begin a parking in reverse
 \n ", 
, " //Eventually, the car will be parked
 \n ", 
, " //If we
 \n ", 
, " //If we are parking and stopped, we switch to PARKED mode,and vice versa.
 \n ", 
, " //The car is not initially parked
 \n ", 
, " //The car starts in a non-parking mode - it begins in a drive-ready and parking-spot searching mode 
 \n ", 
, " //when scanning or searching set the sensor to update the side sense reading
 \n ", 
, " Always find a parking spot and park in it
 \n ", 
, " Anti-silliness protection
 \n ", 
, " Anti-silliness protection.
 \n ", 
, " Assume that a large enough parking spot to contain the car exists
 \n ", 
, " Assume that a parking a large enough parking spot to contain the car exists
 \n ", 
, " Assume that a parking spot that is large enough to contain the car
 \n ", 
, " Assume that by moving backwards with or without turning will increase the front sensor's distance from a blocking obstacle
 \n ", 
, " Assume that by moving forwards with or without turning will increase the back sensor's distance from a blocking obstacle
 \n ", 
, " Assume that if the car starts parking it will finish
 \n ", 
, " Assume that some degree of movement exists in the environment 
 \n ", 
, " Assume that there exists some degree of movement in the environment
 \n ", 
, " Assume that there is a green parking spot
 \n ", 
, " Assume that there is a valid parking spot (or manual)
 \n ", 
, " Assume that while the first step of parking/exit did not end , the second step can not end.
 \n ", 
, " Assumptions
 \n ", 
, " Begin a parking in parallel 
 \n ", 
, " Begin a parking in reverse
 \n ", 
, " By driving backwards and to the right, eventauly we will get a new color.
 \n ", 
, " By driving backwards and to the right, eventually we will get a new color.
 \n ", 
, " Change the speed of the car according to its distance from an obstacle
 \n ", 
, " Continue exit from parallel parking
 \n ", 
, " Continue exit from reverse parking
 \n ", 
, " Continue parallel parking
 \n ", 
, " Continue reverse parking
 \n ", 
, " Continuousness of moving backwards
 \n ", 
, " Continuousness of moving forward
 \n ", 
, " Defines
 \n ", 
, " Don't drive backward without the main distance sensor positioned backward
 \n ", 
, " Don't drive forward without the main distance sensor positioned backward
 \n ", 
, " Don't drive forward without the main distance sensor positioned forward
 \n ", 
, " Driving backwards and turning left will make our sideSense change (downwards) or remain the same
 \n ", 
, " Enter a valid parking spot eventually
 \n ", 
, " Enter and exit the parking spot eventually
 \n ", 
, " Enter the parking spot eventually
 \n ", 
, " Enter to a valid parking spot eventually , or switch to manual mode
 \n ", 
, " Eventually, the car will be parked
 \n ", 
, " Eventually, the car will move forward, drive somewhere
 \n ", 
, " Exit Parking \n ", 
, " Exit parking
 \n ", 
, " Fulfill manual command.
 \n ", 
, " G ((mode = SEARCHING | mode = SCANNING) & senseMotor = SIDE) -> next(senseMotor = SIDE); 
 \n ", 
, " G (driveMotor = BWD & left ) -> (next(driveMotor) = BWD | next(sideSense) = sideSense - 1);
 \n ", 
, " G (driveMotor = BWD & left) -> getCloser;
 \n ", 
, " G (driveMotor = BWD & steeringMotor = STRAIGHT) -> (backSense > 0 & PREV(senseMotor = BACK));
 \n ", 
, " G (driveMotor = FWD & right) -> (next(driveMotor) = FWD | next(sideSense) = sideSense + 1);
 \n ", 
, " G (driveMotor = STOP & (frontSense != 0 | backSense !=0)) -> (sideSense = next(sideSense) & backSense = next(backSense) & frontSense = next(frontSense));
 \n ", 
, " G (mode = PARKING & status = PARALLEL & backSense <= 1) -> (PREV(senseMotor = BACK) & driveMotor = STOP & next(mode) = PARKED & steeringMotor = STRAIGHT);
 \n ", 
, " G (mode = PARKING & status = PARALLEL & backSense <= 2 & backSense > 1) -> (PREV(senseMotor = BACK) & driveMotor = BWD & next(mode) = PARKING & steeringMotor = HARD_LEFT);
 \n ", 
, " G (mode = PARKING & status = PARALLEL & backSense > 2) -> (PREV(senseMotor = BACK) & driveMotor = BWD & next(mode) = PARKING & steeringMotor = HARD_RIGHT);
 \n ", 
, " G (mode = PARKING) -> (next(mode) = PARKING | next(mode) = PARKED);
 \n ", 
, " G (mode = SCANNING & sideSense <= 2 & status = NONE) -> (next(mode) = SEARCHING);
 \n ", 
, " G (mode = SEARCHING | mode = SCANNING) -> (senseMotor = SIDE); 
 \n ", 
, " G (stopping & senseMotor = DRIVE) -> 
 \n ", 
, " G (stopping -> ((sideSense = next(sideSense)) & (backSense = next(backSense)) & (frontSense = next(frontSense))));
 \n ", 
, " G driveMotor = STOP -> (next(backSense) = backSense & next(frontSense) = frontSense); 
 \n ", 
, " G forwarding -> next(backSense > 0);
 \n ", 
, " G frontSense <= 2 & (mode = SCANNING | mode = SEARCHING) & status = NONE -> next(mode) = SEARCHING & next(driveMotor) = FWD & next(steeringMotor) = HARD_LEFT;
 \n ", 
, " G frontSense = 0 & backSense =0 -> driveMotor = STOP ;
 \n ", 
, " G mode = SCANNING & sideSense <= 2 -> next(mode) = SEARCHING;
 \n ", 
, " G mode = SEARCHING & PREV(senseMotor = SIDE) & sideSense > 2 & status = NONE & frontSense > 2-> next(mode) = SCANNING & senseMotor = SIDE; 
 \n ", 
, " G reversing -> next(frontSense > 0);
 \n ", 
, " G scanning -> forwarding; //If scanning has begun, keep it up
 \n ", 
, " G status != NONE -> next(mode) = PARKING;
 \n ", 
, " G(stopping -> (sideSense = next(sideSense) & backSense = next(backSense) & frontSense = next(frontSense)));
 \n ", 
, " GF ((reversing) & (right)) -> (color != BLACK); //Take 2
 \n ", 
, " GF (senseMotor = DRIVE & sense != BLOCKED); 
 \n ", 
, " GF (senseMotor = REVERSE & sense != BLOCKED);
 \n ", 
, " GF forwarding & steeringMotor = STRAIGHT ;
 \n ", 
, " GF forwarding & steeringMotor = STRAIGHT;//!stopping;
 \n ", 
, " GF forwarding | reversing;
 \n ", 
, " GF frontSense != BLOCKED -> forwarding;
 \n ", 
, " GF parkingTypeFound = REVERSED | parkingTypeFound = PARALLEL;
 \n ", 
, " GF reverseParking | parallelParking; 
 \n ", 
, " GF senseMotor = SCANNING;
 \n ", 
, " General Assumptions
 \n ", 
, " General Guarantees
 \n ", 
, " Guarantees
 \n ", 
, " If While scanning there is no enough place to park , start searching again 
 \n ", 
, " If our current mode is PARKING then our next mode can only be PARKING which means we are still
 \n ", 
, " If scanning has begun, keep it up until we get note from the environment that the spot is large enoguh
 \n ", 
, " If side sensor is enough for parallel parking, keep scanning until status is parallel.
 \n ", 
, " If we
 \n ", 
, " If we are trying to park and we got ourselves sufficiently close to the wall we can swith to PARKED mode
 \n ", 
, " If we don't have enough space to exit, stop until frontSense is clear enough
 \n ", 
, " Initial assumption
 \n ", 
, " Initially we are not parked but start searching
 \n ", 
, " Initially we are not parked but starting a parking
 \n ", 
, " Inputs
 \n ", 
, " Keep scanning while the front sensor is sufficiently clear
 \n ", 
, " Make s ure we don't crash while moving backward
 \n ", 
, " Make sure we don't crash while moving (straight) backward
 \n ", 
, " Make sure we don't crash while moving backward
 \n ", 
, " Make sure we don't crash while moving forward 
 \n ", 
, " Make sure we don't crash while moving forward regardless of manual control command.
 \n ", 
, " Make sure we don't crash while moving forward.
 \n ", 
, " Manual Mode Assumptions
 \n ", 
, " Manual Mode Guarantees
 \n ", 
, " Next mode should be MANUAL iff the manual flag was given.
 \n ", 
, " Once a REVERSE parking spot has been found and mode is PARKING, it wont move.
 \n ", 
, " Once a REVERSE parking spot has been found and we are scanning it wont move or switch status to parallel (if sideStatus is parallel).
 \n ", 
, " Once a parallel parking spot has been found it wont move. Hopefully.
 \n ", 
, " Once a parking spot has been found it wont move. Hopefully.
 \n ", 
, " Once the status changes to PARALLEL and we were scanning, we switch to parking mode to begin parking
 \n ", 
, " Once the status changes to PARALLEL or REVERSE and we were scanning, stop
 \n ", 
, " Once we are parked we should stop moving.
 \n ", 
, " Outputs
 \n ", 
, " Parked mode can come only after parking mode or manual mode
 \n ", 
, " Parking
 \n ", 
, " Parking and parking
 \n ", 
, " Searching & Scanning
 \n ", 
, " Searching and scanning 
 \n ", 
, " Standing still doesn't change a thing 
 \n ", 
, " Start Parking
 \n ", 
, " Start enter to the parking spot
 \n ", 
, " Start exit from parallel parking
 \n ", 
, " Start exit from reverse parking
 \n ", 
, " Start exit if it's disabled parking
 \n ", 
, " Start scanning if the sideStatus is sufficiently clear
 \n ", 
, " Start searching again after exit
 \n ", 
, " Switch to parked mode if we parked in a valid parking spot
 \n ", 
, " TODO - add that these only apply to when searching and scanning(?)
 \n ", 
, " TODO - add wall alignment while searching to optimize scanning
 \n ", 
, " TODO - ask Or why the stopping is needed
 \n ", 
, " TODO - is this search-only?
 \n ", 
, " TODO - should these to be limited to searching and scanning?
 \n ", 
, " TODO \n ", 
, " TODO do I really need this?
 \n ", 
, " The car is not initially parked
 \n ", 
, " The car should never stop dead in its track if the velocity is not zero.
 \n ", 
, " The car starts in a non-parking mode - it begins in a drive-ready and parking-spot searching mode 
 \n ", 
, " There is no enough place to park , start searching again
 \n ", 
, " Type definitions 
 \n ", 
, " We are not going to stay in the parking spot forever
 \n ", 
, " When in parked mode and the button is not pressed , the car should stay in place
 \n ", 
, " When in parked mode and the button is pressed , start exit (or switch to manual mode)
 \n ", 
, " When in parking mode we should keep at it until we are done
 \n ", 
, " While SCANING we will find enough place to park eventually
 \n ", 
, " While SEARCHING if the sideSense reading is clear enough, keep heading straight and forward
 \n ", 
, " While moving backward always do so in a slow and controlled manner
 \n ", 
, " While moving backward always do so in a slow and controlled manner.
 \n ", 
, " While moving backward or scanning/parking/exit, always do so in a slow and controlled manner.
 \n ", 
, " While scanning if the sideSense gets too blocked and we haven't found a parking spot 
 \n ", 
, " While scanning if the sideSense reading is clear enough, keep scanning and keep heading straight and forward
 \n ", 
, " While scanning if the sideSense reading is clear enough, keep scanning.
 \n ", 
, " While scanning if the sideStatus reading is clear enough, keep scanning.
 \n ", 
, " While scanning if we are not parking and the frontSense reading is clear enough , keep heading straight and forward
 \n ", 
, " While searching, if there is no opening on the side we keep searching for an opening
 \n ", 
, " asm
 \n ", 
, " asm 
 \n ", 
, " assumption
 \n ", 
, " assumption 
 \n ", 
, " assumption aParkingSpotExists:
 \n ", 
, " assumption ableToStartSearching:
 \n ", 
, " assumption backClear:
 \n ", 
, " assumption backOrFrontClear:
 \n ", 
, " assumption canGetClear:
 \n ", 
, " assumption needToScanToFindAParkingSpot:
 \n ", 
, " assumption notParkedInitially:
 \n ", 
, " assumption theWorldRemainsStillWhileStopping:
 \n ", 
, " continue parallel parking
 \n ", 
, " continue reverse parking
 \n ", 
, " continuousness of moving backwards
 \n ", 
, " continuousness of moving backwards and straight when the senseMotor = back
 \n ", 
, " continuousness of moving backwards and straight when the senseMotor = side
 \n ", 
, " continuousness of moving forward
 \n ", 
, " continuousness of moving forward and straight when the senseMotor = back
 \n ", 
, " continuousness of moving forward and straight when the senseMotor = side
 \n ", 
, " end of invalid parking
 \n ", 
, " enter the parking spot
 \n ", 
, " env ParkingSpotStatus status; 
 \n ", 
, " env ParkingType parkingTypeFound; 
 \n ", 
, " env boolean manual;
 \n ", 
, " exit from parallel parking
 \n ", 
, " exit from reverse parking
 \n ", 
, " exiting the parking spot
 \n ", 
, " foundAParallelSpot := (parkingTypeFound = PARALLEL & status = FINISHED_SCANNING);
 \n ", 
, " foundAReverseSpot := (parkingTypeFound = REVERSED & status = FINISHED_SCANNING);
 \n ", 
, " gar
 \n ", 
, " gar 
 \n ", 
, " gar (((mode != PARKED & mode != MANUAL) & button) -> (driveMotor = STOP & velocity = 0));
 \n ", 
, " gar G (mode = EXIT & done = true & align = true & PREV(mode = PARKING)) -> (next(mode) = EXIT );
 \n ", 
, " gar dontCrashSide: G (sideSense < 1 & mode = SEARCHING) -> (steeringMotor = LIGHT_LEFT | steeringMotor = HARD_LEFT);
 \n ", 
, " gar ifFrontIsNotBlockedDrive:
 \n ", 
, " gar parallelParkingPart2:
 \n ", 
, " gar parallelParkingPart3:
 \n ", 
, " guarantee 
 \n ", 
, " guarantee BothSidesBlocked:
 \n ", 
, " guarantee dontCrashFront:
 \n ", 
, " guarantee dontCrashStraightBack: 
 \n ", 
, " guarantee finishedParking:
 \n ", 
, " guarantee getOutOfParking:
 \n ", 
, " guarantee goIfClear:
 \n ", 
, " guarantee initalNotParking:
 \n ", 
, " guarantee initialDirection:
 \n ", 
, " guarantee keepMovingForward:
 \n ", 
, " guarantee keepScanning:
 \n ", 
, " guarantee moveForward:
 \n ", 
, " guarantee parallelParkingPart1:
 \n ", 
, " guarantee scannOften:
 \n ", 
, " guarantee startParkingInParallel:
 \n ", 
, " guarantee startParkingInReverse:
 \n ", 
, " if While scanning there is no enough place to park
 \n ", 
, " if manual is false the manual commands does not change
 \n ", 
, " if side sensor is enough for parallel parking, keep scanning until status is parallel.
 \n ", 
, " if we don't have enough space to exit, stop until frontSense is clear enough
 \n ", 
, " mode should be MANUAL iff the manual flag was given.
 \n ", 
, " pRespondsToS((hard_left_fwd), frontSense > 0);
 \n ", 
, " pRespondsToS(PREV(mode = SCANNING) & mode = PARKING & driveMotor = BWD, sideSense <= 1); 
 \n ", 
, " pRespondsToS(forwarding, backSense > 0);
 \n ", 
, " pRespondsToS(forwarding, senseMotor = REVERSE & sense != BLOCKED);
 \n ", 
, " pRespondsToS(foundAParallelSpot, parallelParking);
 \n ", 
, " pRespondsToS(foundAReverseSpot, reverseParking);
 \n ", 
, " pRespondsToS(mode = SEARCHING & !stopping, frontSense > 2 & sideSense > 2);
 \n ", 
, " pRespondsToS(parkingMode = PARALLEL | parkingMode = REVERSED, parkingMode = NONE);
 \n ", 
, " pRespondsToS(reversing | (next(steeringMotor) != steeringMotor & reversing), frontSense != 0);
 \n ", 
, " pRespondsToS(scanning, parked);
 \n ", 
, " pRespondsToS(sideways, frontSense != BLOCKED & backSense != BLOCKED);
 \n ", 
, " pRespondsToS(sideways, frontSense != BLOCKED & backSense > 0);
 \n ", 
, " parallelParking := parking = BLOCKED -> (driveMotor = STOP & steeringMotor = 45);
 \n ", 
, " parkingMode = NONE;
 \n ", 
, " parkingTypeFound = NONE & status = NONE;
 \n ", 
, " reverseParking := (senseMotor = REVERSE & sense = CLOSE & parking = BLOCKED) -> (driveMotor = STOP & steeringMotor = 45);
 \n ", 
, " rotate the sense motor (reverse) when moving backward
 \n ", 
, " scanning := status = STARTED_SCANNING & sense != BLOCKED;
 \n ", 
, " senseMotor = DRIVE;
 \n ", 
, " start enter
 \n ", 
, " start exit
 \n ", 
, " start scanning if the front sensor is sufficiently clear
 \n ", 
, " start scanning if the sideStatus is sufficiently clear
 \n ", 
, " start searching again after exit
 \n ", 
, " sys ParkingType parkingMode;
 \n ", 
, " there is no enough place to park
 \n ", 
, " there is no enough place to park , start SEARCHING again
 \n ", 
, " trying to park or PARKED which means we finished parking
 \n ", 
, " while SCANING we will find enough place to park eventually
 \n ", 
, " while parking, we can't switch to searching mode or scanning mode until we are done.
 \n ", 
, " while parking/parked , status is parallel
 \n ", 
, " while stopping the velocity is 0, and vice versa
 \n ", 
, " assumption inStationEventually:
 \n ", 
, " assumption initiallyNoTechnicianAck:
 \n ", 
, " assumption leaveStationEventually:
 \n ", 
, " assumption noStrangeTechnicianAcks:
 \n ", 
, " assumption notAlwaysAtEmgState:
 \n ", 
, " atBaseStation := station = baseStation;
 \n ", 
, " atStationWithTask := atStation & ((station = 0 & shuttleTasks[0]=true) |
 \n ", 
, " between open and close must be process 
 \n ", 
, " can't change direction without stopping 
 \n ", 
, " door in process only when asked to
 \n ", 
, " door must be in process when asked to
 \n ", 
, " else change value of atEmgState at each press on emgButton 
 \n ", 
, " env Button emgButton;
 \n ", 
, " env Int(0..4) baseStation; // need only 0-3
 \n ", 
, " env boolean longTimeWithoutRequests;
 \n ", 
, " env boolean readyToEmgBeep;
 \n ", 
, " env boolean technicianAck;
 \n ", 
, " for well-separated Environment (Causes unrealizable) 
 \n ", 
, " guarantee
 \n ", 
, " guarantee 
 \n ", 
, " guarantee mustStopInOrderToSatisfyTask:
 \n ", 
, " guarantee stopWhenTechGuyInAction:
 \n ", 
, " guarantee stoppingAtStationOnlyIfHasTask:
 \n ", 
, " if atEmgState keep atEmgState
 \n ", 
, " if base station is bw and going bw -> will arrive to base station
 \n ", 
, " if base station is bw and going bw -> will arrive to base station (or fw or stopping)
 \n ", 
, " if base station is fw and going fw -> will arrive to base station
 \n ", 
, " if base station is fw and going fw -> will arrive to base station (or bw or stopping)
 \n ", 
, " if no tasks stop when entering station
 \n ", 
, " if only tasks backward go backward
 \n ", 
, " if only tasks forward go forward
 \n ", 
, " isTaskDirectionBwdOrNoTask(d, stationLast, baseStation);
 \n ", 
, " isTaskDirectionFwdOrNoTask(d, stationLast, baseStation) | stationLast = 4;
 \n ", 
, " keep status 
 \n ", 
, " monitor Direction shuttleDirection{
 \n ", 
, " monitor boolean atEmgState {
 \n ", 
, " monitor boolean techGuyInAction {
 \n ", 
, " next(tasks[0]) = ((indexOpenedDoor != 0) & (tasks[0] | (indexPressed = 0))) &
 \n ", 
, " next(tasks[1]) = ((indexOpenedDoor != 1) & (tasks[1] | (indexPressed = 1))) &
 \n ", 
, " next(tasks[2]) = ((indexOpenedDoor != 2) & (tasks[2] | (indexPressed = 2))) &
 \n ", 
, " next(tasks[3]) = ((indexOpenedDoor != 3) & (tasks[3] | (indexPressed = 3)));
 \n ", 
, " openDoorAtEmgState becomes false when at emergency state and door request is sent
 \n ", 
, " openDoorAtEmgState becomes true when entering emergency state
 \n ", 
, " pHolds_afterQuntilR(backwarding, !atStation, stationWillDecrease); 
 \n ", 
, " pHolds_afterQuntilR(forwarding, !atStation, stationWillIncrease);
 \n ", 
, " pRespondsToS (!atStation & (forwarding | backwarding), atStation | stopping); 
 \n ", 
, " pRespondsToS (atStation & ((forwarding & station < 3) | (backwarding & station > 0)), !atStation | stopping);
 \n ", 
, " pRespondsToS (forwarding | backwarding, !atStation | stopping);
 \n ", 
, " pRespondsToS(isBaseStationBwd(shuttleDirection, lastPassedStation) & backwarding, atBaseStation | forwarding | stopping);
 \n ", 
, " pRespondsToS(isBaseStationFwd(shuttleDirection, lastPassedStation) & forwarding, atBaseStation | backwarding | stopping);
 \n ", 
, " pRespondsToS(noRequests & longTimeWithoutRequests, atBaseStation);
 \n ", 
, " pRespondsToS(techGuyInAction, technicianAck);
 \n ", 
, " predicate isBaseStationBwd(Direction d, Int(0..4) stationLast):
 \n ", 
, " predicate isBaseStationFwd(Direction d, Int(0..4) stationLast):
 \n ", 
, " predicate isTaskDirectionBwdOrNoTask(Direction d, Int(0..4) stationLast, Int(0..4) s):
 \n ", 
, " predicate isTaskDirectionFwdOrNoTask(Direction d, Int(0..4) stationLast, Int(0..4) s):
 \n ", 
, " predicate taskAtCurrentStation(Int(0..4) index):
 \n ", 
, " predicate taskIsSatisfaid(Int(0..1) direction, Int(0..3) stationIndex):
 \n ", 
, " predicate updateTasks(boolean[4] tasks ,Int(0..4) indexPressed, Int(0..4) indexOpenedDoor):
 \n ", 
, " reset goToBaseStation
 \n ", 
, " reset goToBaseStation task
 \n ", 
, " reset task
 \n ", 
, " satisfies task
 \n ", 
, " satisfies task 
 \n ", 
, " satisfiesTask
 \n ", 
, " shuttleDirection = GOING_NONE;
 \n ", 
, " station can only decrease by going backwarding (and entering station)
 \n ", 
, " station can only increase by going forwarding (and entering station)
 \n ", 
, " station number can only change when entering station
 \n ", 
, " stations can only increase or decrease by one 
 \n ", 
, " stopping
 \n ", 
, " sys boolean emgBeepReq;
 \n ", 
, " sys boolean startTechnicalJob;
 \n ", 
, " sys boolean[4] shuttleTasks;
 \n ", 
, " taskWillBeTrue := 
 \n ", 
, " tasks are complete only when stopping and opening door at the station
 \n ", 
, " technicianAck returns answer eventually 
 \n ", 
, " updates tasks (bw or fw) array: indexOpenedDoor -> false, indexPressed -> true
 \n ", 
, " waitingForDoor when door request is sent and door ack hasn't been received yet
 \n ", 
, " waitingForEmgBeeper when emgBeepProcessReq request is sent
 \n ", 
, " while not in station can't stop
 \n ", 
, " }
 \n ", 
, " } 
 \n ", 
, 
ConvoyCar_ConvoyCarSpec , 
, "  ", 
, " 
 \n ", 
, " DISTANCE CONTROL
 \n ", 
, " DRIVE STATE
 \n ", 
, " LANE "enum":
 \n ", 
, " LANE CONTROL
 \n ", 
, " assumption initDist:
 \n ", 
, " if car deviated to the left and keeps turning right - then eventually it will return to lane 
 \n ", 
, " if car deviated to the right and keeps turning left - then eventually it will return to lane 
 \n ", 
, " if car in wrong direction and keeps turning right - then eventually it will return to lane (which implies it's in right direction) 
 \n ", 
, " if car stops for long enough, eventually lane is clear
 \n ", 
, " lane setup:
 \n ", 
, " left side of lane should be WHITE
 \n ", 
, " move gradually between speeds:
 \n ", 
, " right side of lane should be BLACK
 \n ", 
, " sense >= minDist;
 \n ", 
, " Assume that a parking a large enough parking spot to contain the car exists
 \n ", 
, " Assume that a parking spot that is large enough to contain the car
 \n ", 
, " Assume that by moving backwards with or without turning will increase the front sensor's distance from a blocking obstacle
 \n ", 
, " Assume that by moving forwards with or without turning will increase the back sensor's distance from a blocking obstacle
 \n ", 
, " Assume that if the car starts parking it will finish
 \n ", 
, " Assume that some degree of movement exists in the environment 
 \n ", 
, " Assume that there exists some degree of movement in the environment
 \n ", 
, " Assume that there is a green parking spot
 \n ", 
, " Assume that there is a valid parking spot (or manual)
 \n ", 
, " Assume that while the first step of parking/exit did not end , the second step can not end.
 \n ", 
, " Assumptions
 \n ", 
, " Begin a parking in parallel 
 \n ", 
, " Begin a parking in reverse
 \n ", 
, " By driving backwards and to the right, eventauly we will get a new color.
 \n ", 
, " By driving backwards and to the right, eventually we will get a new color.
 \n ", 
, " Change the speed of the car according to its distance from an obstacle
 \n ", 
, " Continue exit from parallel parking
 \n ", 
, " Continue exit from reverse parking
 \n ", 
, " Continue parallel parking
 \n ", 
, " Continue reverse parking
 \n ", 
, " Continuousness of moving backwards
 \n ", 
, " Continuousness of moving forward
 \n ", 
, " Defines
 \n ", 
, " Don't drive backward without the main distance sensor positioned backward
 \n ", 
, " Don't drive forward without the main distance sensor positioned backward
 \n ", 
, " Don't drive forward without the main distance sensor positioned forward
 \n ", 
, " Driving backwards and turning left will make our sideSense change (downwards) or remain the same
 \n ", 
, " Enter a valid parking spot eventually
 \n ", 
, " Enter and exit the parking spot eventually
 \n ", 
, " Enter the parking spot eventually
 \n ", 
, " Enter to a valid parking spot eventually , or switch to manual mode
 \n ", 
, " Eventually, the car will be parked
 \n ", 
, " Eventually, the car will move forward, drive somewhere
 \n ", 
, " Exit Parking \n ", 
, " Exit parking
 \n ", 
, " Fulfill manual command.
 \n ", 
, " G ((mode = SEARCHING | mode = SCANNING) & senseMotor = SIDE) -> next(senseMotor = SIDE); 
 \n ", 
, " G (driveMotor = BWD & left ) -> (next(driveMotor) = BWD | next(sideSense) = sideSense - 1);
 \n ", 
, " G (driveMotor = BWD & left) -> getCloser;
 \n ", 
, " G (driveMotor = BWD & steeringMotor = STRAIGHT) -> (backSense > 0 & PREV(senseMotor = BACK));
 \n ", 
, " G (driveMotor = FWD & right) -> (next(driveMotor) = FWD | next(sideSense) = sideSense + 1);
 \n ", 
, " G (driveMotor = STOP & (frontSense != 0 | backSense !=0)) -> (sideSense = next(sideSense) & backSense = next(backSense) & frontSense = next(frontSense));
 \n ", 
, " G (mode = PARKING & status = PARALLEL & backSense <= 1) -> (PREV(senseMotor = BACK) & driveMotor = STOP & next(mode) = PARKED & steeringMotor = STRAIGHT);
 \n ", 
, " G (mode = PARKING & status = PARALLEL & backSense <= 2 & backSense > 1) -> (PREV(senseMotor = BACK) & driveMotor = BWD & next(mode) = PARKING & steeringMotor = HARD_LEFT);
 \n ", 
, " G (mode = PARKING & status = PARALLEL & backSense > 2) -> (PREV(senseMotor = BACK) & driveMotor = BWD & next(mode) = PARKING & steeringMotor = HARD_RIGHT);
 \n ", 
, " G (mode = PARKING) -> (next(mode) = PARKING | next(mode) = PARKED);
 \n ", 
, " G (mode = SCANNING & sideSense <= 2 & status = NONE) -> (next(mode) = SEARCHING);
 \n ", 
, " G (mode = SEARCHING | mode = SCANNING) -> (senseMotor = SIDE); 
 \n ", 
, " G (stopping & senseMotor = DRIVE) -> 
 \n ", 
, " G (stopping -> ((sideSense = next(sideSense)) & (backSense = next(backSense)) & (frontSense = next(frontSense))));
 \n ", 
, " G driveMotor = STOP -> (next(backSense) = backSense & next(frontSense) = frontSense); 
 \n ", 
, " G forwarding -> next(backSense > 0);
 \n ", 
, " G frontSense <= 2 & (mode = SCANNING | mode = SEARCHING) & status = NONE -> next(mode) = SEARCHING & next(driveMotor) = FWD & next(steeringMotor) = HARD_LEFT;
 \n ", 
, " G frontSense = 0 & backSense =0 -> driveMotor = STOP ;
 \n ", 
, " G mode = SCANNING & sideSense <= 2 -> next(mode) = SEARCHING;
 \n ", 
, " G mode = SEARCHING & PREV(senseMotor = SIDE) & sideSense > 2 & status = NONE & frontSense > 2-> next(mode) = SCANNING & senseMotor = SIDE; 
 \n ", 
, " G reversing -> next(frontSense > 0);
 \n ", 
, " G scanning -> forwarding; //If scanning has begun, keep it up
 \n ", 
, " G status != NONE -> next(mode) = PARKING;
 \n ", 
, " G(stopping -> (sideSense = next(sideSense) & backSense = next(backSense) & frontSense = next(frontSense)));
 \n ", 
, " GF ((reversing) & (right)) -> (color != BLACK); //Take 2
 \n ", 
, " GF (senseMotor = DRIVE & sense != BLOCKED); 
 \n ", 
, " GF (senseMotor = REVERSE & sense != BLOCKED);
 \n ", 
, " GF forwarding & steeringMotor = STRAIGHT ;
 \n ", 
, " GF forwarding & steeringMotor = STRAIGHT;//!stopping;
 \n ", 
, " GF forwarding | reversing;
 \n ", 
, " GF frontSense != BLOCKED -> forwarding;
 \n ", 
, " GF parkingTypeFound = REVERSED | parkingTypeFound = PARALLEL;
 \n ", 
, " GF reverseParking | parallelParking; 
 \n ", 
, " GF senseMotor = SCANNING;
 \n ", 
, " General Assumptions
 \n ", 
, " General Guarantees
 \n ", 
, " Guarantees
 \n ", 
, " If While scanning there is no enough place to park , start searching again 
 \n ", 
, " If our current mode is PARKING then our next mode can only be PARKING which means we are still
 \n ", 
, " If scanning has begun, keep it up until we get note from the environment that the spot is large enoguh
 \n ", 
, " If side sensor is enough for parallel parking, keep scanning until status is parallel.
 \n ", 
, " If we
 \n ", 
, " If we are trying to park and we got ourselves sufficiently close to the wall we can swith to PARKED mode
 \n ", 
, " If we don't have enough space to exit, stop until frontSense is clear enough
 \n ", 
, " Initial assumption
 \n ", 
, " Initially we are not parked but start searching
 \n ", 
, " Initially we are not parked but starting a parking
 \n ", 
, " Inputs
 \n ", 
, " Keep scanning while the front sensor is sufficiently clear
 \n ", 
, " Make s ure we don't crash while moving backward
 \n ", 
, " Make sure we don't crash while moving (straight) backward
 \n ", 
, " Make sure we don't crash while moving backward
 \n ", 
, " Make sure we don't crash while moving forward 
 \n ", 
, " Make sure we don't crash while moving forward regardless of manual control command.
 \n ", 
, " Make sure we don't crash while moving forward.
 \n ", 
, " Manual Mode Assumptions
 \n ", 
, " Manual Mode Guarantees
 \n ", 
, " Next mode should be MANUAL iff the manual flag was given.
 \n ", 
, " Once a REVERSE parking spot has been found and mode is PARKING, it wont move.
 \n ", 
, " Once a REVERSE parking spot has been found and we are scanning it wont move or switch status to parallel (if sideStatus is parallel).
 \n ", 
, " Once a parallel parking spot has been found it wont move. Hopefully.
 \n ", 
, " Once a parking spot has been found it wont move. Hopefully.
 \n ", 
, " Once the status changes to PARALLEL and we were scanning, we switch to parking mode to begin parking
 \n ", 
, " Once the status changes to PARALLEL or REVERSE and we were scanning, stop
 \n ", 
, " Once we are parked we should stop moving.
 \n ", 
, " Outputs
 \n ", 
, " Parked mode can come only after parking mode or manual mode
 \n ", 
, " Parking
 \n ", 
, " Parking and parking
 \n ", 
, " Searching & Scanning
 \n ", 
, " Searching and scanning 
 \n ", 
, " Standing still doesn't change a thing 
 \n ", 
, " Start Parking
 \n ", 
, " Start enter to the parking spot
 \n ", 
, " Start exit from parallel parking
 \n ", 
, " Start exit from reverse parking
 \n ", 
, " Start exit if it's disabled parking
 \n ", 
, " Start scanning if the sideStatus is sufficiently clear
 \n ", 
, " Start searching again after exit
 \n ", 
, " Switch to parked mode if we parked in a valid parking spot
 \n ", 
, " TODO - add that these only apply to when searching and scanning(?)
 \n ", 
, " TODO - add wall alignment while searching to optimize scanning
 \n ", 
, " TODO - ask Or why the stopping is needed
 \n ", 
, " TODO - is this search-only?
 \n ", 
, " TODO - should these to be limited to searching and scanning?
 \n ", 
, " TODO \n ", 
, " TODO do I really need this?
 \n ", 
, " The car is not initially parked
 \n ", 
, " The car should never stop dead in its track if the velocity is not zero.
 \n ", 
, " The car starts in a non-parking mode - it begins in a drive-ready and parking-spot searching mode 
 \n ", 
, " There is no enough place to park , start searching again
 \n ", 
, " Type definitions 
 \n ", 
, " We are not going to stay in the parking spot forever
 \n ", 
, " When in parked mode and the button is not pressed , the car should stay in place
 \n ", 
, " When in parked mode and the button is pressed , start exit (or switch to manual mode)
 \n ", 
, " When in parking mode we should keep at it until we are done
 \n ", 
, " While SCANING we will find enough place to park eventually
 \n ", 
, " While SEARCHING if the sideSense reading is clear enough, keep heading straight and forward
 \n ", 
, " While moving backward always do so in a slow and controlled manner
 \n ", 
, " While moving backward always do so in a slow and controlled manner.
 \n ", 
, " While moving backward or scanning/parking/exit, always do so in a slow and controlled manner.
 \n ", 
, " While scanning if the sideSense gets too blocked and we haven't found a parking spot 
 \n ", 
, " While scanning if the sideSense reading is clear enough, keep scanning and keep heading straight and forward
 \n ", 
, " While scanning if the sideSense reading is clear enough, keep scanning.
 \n ", 
, " While scanning if the sideStatus reading is clear enough, keep scanning.
 \n ", 
, " While scanning if we are not parking and the frontSense reading is clear enough , keep heading straight and forward
 \n ", 
, " While searching, if there is no opening on the side we keep searching for an opening
 \n ", 
, " asm
 \n ", 
, " asm 
 \n ", 
, " assumption
 \n ", 
, " assumption 
 \n ", 
, " assumption aParkingSpotExists:
 \n ", 
, " assumption ableToStartSearching:
 \n ", 
, " assumption backClear:
 \n ", 
, " assumption backOrFrontClear:
 \n ", 
, " assumption canGetClear:
 \n ", 
, " assumption needToScanToFindAParkingSpot:
 \n ", 
, " assumption notParkedInitially:
 \n ", 
, " assumption theWorldRemainsStillWhileStopping:
 \n ", 
, " continue parallel parking
 \n ", 
, " continue reverse parking
 \n ", 
, " continuousness of moving backwards
 \n ", 
, " continuousness of moving backwards and straight when the senseMotor = back
 \n ", 
, " continuousness of moving backwards and straight when the senseMotor = side
 \n ", 
, " continuousness of moving forward
 \n ", 
, " continuousness of moving forward and straight when the senseMotor = back
 \n ", 
, " continuousness of moving forward and straight when the senseMotor = side
 \n ", 
, " end of invalid parking
 \n ", 
, " enter the parking spot
 \n ", 
, " env ParkingSpotStatus status; 
 \n ", 
, " env ParkingType parkingTypeFound; 
 \n ", 
, " env boolean manual;
 \n ", 
, " exit from parallel parking
 \n ", 
, " exit from reverse parking
 \n ", 
, " exiting the parking spot
 \n ", 
, " foundAParallelSpot := (parkingTypeFound = PARALLEL & status = FINISHED_SCANNING);
 \n ", 
, " foundAReverseSpot := (parkingTypeFound = REVERSED & status = FINISHED_SCANNING);
 \n ", 
, " gar
 \n ", 
, " gar 
 \n ", 
, " gar (((mode != PARKED & mode != MANUAL) & button) -> (driveMotor = STOP & velocity = 0));
 \n ", 
, " gar G (mode = EXIT & done = true & align = true & PREV(mode = PARKING)) -> (next(mode) = EXIT );
 \n ", 
, " gar dontCrashSide: G (sideSense < 1 & mode = SEARCHING) -> (steeringMotor = LIGHT_LEFT | steeringMotor = HARD_LEFT);
 \n ", 
, " gar ifFrontIsNotBlockedDrive:
 \n ", 
, " gar parallelParkingPart2:
 \n ", 
, " gar parallelParkingPart3:
 \n ", 
, " guarantee 
 \n ", 
, " guarantee BothSidesBlocked:
 \n ", 
, " guarantee dontCrashFront:
 \n ", 
, " guarantee dontCrashStraightBack: 
 \n ", 
, " guarantee finishedParking:
 \n ", 
, " guarantee getOutOfParking:
 \n ", 
, " guarantee goIfClear:
 \n ", 
, " guarantee initalNotParking:
 \n ", 
, " guarantee initialDirection:
 \n ", 
, " guarantee keepMovingForward:
 \n ", 
, " guarantee keepScanning:
 \n ", 
, " guarantee moveForward:
 \n ", 
, " guarantee parallelParkingPart1:
 \n ", 
, " guarantee scannOften:
 \n ", 
, " guarantee startParkingInParallel:
 \n ", 
, " guarantee startParkingInReverse:
 \n ", 
, " if While scanning there is no enough place to park
 \n ", 
, " if manual is false the manual commands does not change
 \n ", 
, " if side sensor is enough for parallel parking, keep scanning until status is parallel.
 \n ", 
, " if we don't have enough space to exit, stop until frontSense is clear enough
 \n ", 
, " mode should be MANUAL iff the manual flag was given.
 \n ", 
, " pRespondsToS((hard_left_fwd), frontSense > 0);
 \n ", 
, " pRespondsToS(PREV(mode = SCANNING) & mode = PARKING & driveMotor = BWD, sideSense <= 1); 
 \n ", 
, " pRespondsToS(forwarding, backSense > 0);
 \n ", 
, " pRespondsToS(forwarding, senseMotor = REVERSE & sense != BLOCKED);
 \n ", 
, " pRespondsToS(foundAParallelSpot, parallelParking);
 \n ", 
, " pRespondsToS(foundAReverseSpot, reverseParking);
 \n ", 
, " pRespondsToS(mode = SEARCHING & !stopping, frontSense > 2 & sideSense > 2);
 \n ", 
, " pRespondsToS(parkingMode = PARALLEL | parkingMode = REVERSED, parkingMode = NONE);
 \n ", 
, " pRespondsToS(reversing | (next(steeringMotor) != steeringMotor & reversing), frontSense != 0);
 \n ", 
, " pRespondsToS(scanning, parked);
 \n ", 
, " pRespondsToS(sideways, frontSense != BLOCKED & backSense != BLOCKED);
 \n ", 
, " pRespondsToS(sideways, frontSense != BLOCKED & backSense > 0);
 \n ", 
, " parallelParking := parking = BLOCKED -> (driveMotor = STOP & steeringMotor = 45);
 \n ", 
, " parkingMode = NONE;
 \n ", 
, " parkingTypeFound = NONE & status = NONE;
 \n ", 
, " reverseParking := (senseMotor = REVERSE & sense = CLOSE & parking = BLOCKED) -> (driveMotor = STOP & steeringMotor = 45);
 \n ", 
, " rotate the sense motor (reverse) when moving backward
 \n ", 
, " scanning := status = STARTED_SCANNING & sense != BLOCKED;
 \n ", 
, " senseMotor = DRIVE;
 \n ", 
, " start enter
 \n ", 
, " start exit
 \n ", 
, " start scanning if the front sensor is sufficiently clear
 \n ", 
, " start scanning if the sideStatus is sufficiently clear
 \n ", 
, " start searching again after exit
 \n ", 
, " sys ParkingType parkingMode;
 \n ", 
, " there is no enough place to park
 \n ", 
, " there is no enough place to park , start SEARCHING again
 \n ", 
, " trying to park or PARKED which means we finished parking
 \n ", 
, " while SCANING we will find enough place to park eventually
 \n ", 
, " while parking, we can't switch to searching mode or scanning mode until we are done.
 \n ", 
, " while parking/parked , status is parallel
 \n ", 
, " while stopping the velocity is 0, and vice versa
 \n ", 
, " assumption inStationEventually:
 \n ", 
, " assumption initiallyNoTechnicianAck:
 \n ", 
, " assumption leaveStationEventually:
 \n ", 
, " assumption noStrangeTechnicianAcks:
 \n ", 
, " assumption notAlwaysAtEmgState:
 \n ", 
, " atBaseStation := station = baseStation;
 \n ", 
, " atStationWithTask := atStation & ((station = 0 & shuttleTasks[0]=true) |
 \n ", 
, " between open and close must be process 
 \n ", 
, " can't change direction without stopping 
 \n ", 
, " door in process only when asked to
 \n ", 
, " door must be in process when asked to
 \n ", 
, " else change value of atEmgState at each press on emgButton 
 \n ", 
, " env Button emgButton;
 \n ", 
, " env Int(0..4) baseStation; // need only 0-3
 \n ", 
, " env boolean longTimeWithoutRequests;
 \n ", 
, " env boolean readyToEmgBeep;
 \n ", 
, " env boolean technicianAck;
 \n ", 
, " for well-separated Environment (Causes unrealizable) 
 \n ", 
, " guarantee
 \n ", 
, " guarantee 
 \n ", 
, " guarantee mustStopInOrderToSatisfyTask:
 \n ", 
, " guarantee stopWhenTechGuyInAction:
 \n ", 
, " guarantee stoppingAtStationOnlyIfHasTask:
 \n ", 
, " if atEmgState keep atEmgState
 \n ", 
, " if base station is bw and going bw -> will arrive to base station
 \n ", 
, " if base station is bw and going bw -> will arrive to base station (or fw or stopping)
 \n ", 
, " if base station is fw and going fw -> will arrive to base station
 \n ", 
, " if base station is fw and going fw -> will arrive to base station (or bw or stopping)
 \n ", 
, " if no tasks stop when entering station
 \n ", 
, " if only tasks backward go backward
 \n ", 
, " if only tasks forward go forward
 \n ", 
, " isTaskDirectionBwdOrNoTask(d, stationLast, baseStation);
 \n ", 
, " isTaskDirectionFwdOrNoTask(d, stationLast, baseStation) | stationLast = 4;
 \n ", 
, " keep status 
 \n ", 
, " monitor Direction shuttleDirection{
 \n ", 
, " monitor boolean atEmgState {
 \n ", 
, " monitor boolean techGuyInAction {
 \n ", 
, " next(tasks[0]) = ((indexOpenedDoor != 0) & (tasks[0] | (indexPressed = 0))) &
 \n ", 
, " next(tasks[1]) = ((indexOpenedDoor != 1) & (tasks[1] | (indexPressed = 1))) &
 \n ", 
, " next(tasks[2]) = ((indexOpenedDoor != 2) & (tasks[2] | (indexPressed = 2))) &
 \n ", 
, " next(tasks[3]) = ((indexOpenedDoor != 3) & (tasks[3] | (indexPressed = 3)));
 \n ", 
, " openDoorAtEmgState becomes false when at emergency state and door request is sent
 \n ", 
, " openDoorAtEmgState becomes true when entering emergency state
 \n ", 
, " pHolds_afterQuntilR(backwarding, !atStation, stationWillDecrease); 
 \n ", 
, " pHolds_afterQuntilR(forwarding, !atStation, stationWillIncrease);
 \n ", 
, " pRespondsToS (!atStation & (forwarding | backwarding), atStation | stopping); 
 \n ", 
, " pRespondsToS (atStation & ((forwarding & station < 3) | (backwarding & station > 0)), !atStation | stopping);
 \n ", 
, " pRespondsToS (forwarding | backwarding, !atStation | stopping);
 \n ", 
, " pRespondsToS(isBaseStationBwd(shuttleDirection, lastPassedStation) & backwarding, atBaseStation | forwarding | stopping);
 \n ", 
, " pRespondsToS(isBaseStationFwd(shuttleDirection, lastPassedStation) & forwarding, atBaseStation | backwarding | stopping);
 \n ", 
, " pRespondsToS(noRequests & longTimeWithoutRequests, atBaseStation);
 \n ", 
, " pRespondsToS(techGuyInAction, technicianAck);
 \n ", 
, " predicate isBaseStationBwd(Direction d, Int(0..4) stationLast):
 \n ", 
, " predicate isBaseStationFwd(Direction d, Int(0..4) stationLast):
 \n ", 
, " predicate isTaskDirectionBwdOrNoTask(Direction d, Int(0..4) stationLast, Int(0..4) s):
 \n ", 
, " predicate isTaskDirectionFwdOrNoTask(Direction d, Int(0..4) stationLast, Int(0..4) s):
 \n ", 
, " predicate taskAtCurrentStation(Int(0..4) index):
 \n ", 
, " predicate taskIsSatisfaid(Int(0..1) direction, Int(0..3) stationIndex):
 \n ", 
, " predicate updateTasks(boolean[4] tasks ,Int(0..4) indexPressed, Int(0..4) indexOpenedDoor):
 \n ", 
, " reset goToBaseStation
 \n ", 
, " reset goToBaseStation task
 \n ", 
, " reset task
 \n ", 
, " satisfies task
 \n ", 
, " satisfies task 
 \n ", 
, " satisfiesTask
 \n ", 
, " shuttleDirection = GOING_NONE;
 \n ", 
, " station can only decrease by going backwarding (and entering station)
 \n ", 
, " station can only increase by going forwarding (and entering station)
 \n ", 
, " station number can only change when entering station
 \n ", 
, " stations can only increase or decrease by one 
 \n ", 
, " stopping
 \n ", 
, " sys boolean emgBeepReq;
 \n ", 
, " sys boolean startTechnicalJob;
 \n ", 
, " sys boolean[4] shuttleTasks;
 \n ", 
, " taskWillBeTrue := 
 \n ", 
, " tasks are complete only when stopping and opening door at the station
 \n ", 
, " technicianAck returns answer eventually 
 \n ", 
, " updates tasks (bw or fw) array: indexOpenedDoor -> false, indexPressed -> true
 \n ", 
, " waitingForDoor when door request is sent and door ack hasn't been received yet
 \n ", 
, " waitingForEmgBeeper when emgBeepProcessReq request is sent
 \n ", 
, " while not in station can't stop
 \n ", 
, " }
 \n ", 
, " } 
 \n ", 
, 
moveAndScan_move , 
, "  ", 
, " 
 \n ", 
, " (PREV(backSense > 0 & stopping) & PREV(PREV(senseMotor = BACK))));
 \n ", 
, " (senseMotor = BACK | next(sideSense) = sideSense + 1 | next(sideSense) = sideSense)
 \n ", 
, " (senseMotor = BACK | next(sideSense) = sideSense - 1 | next(sideSense) = sideSense)
 \n ", 
, " (senseMotor = BACK | next(sideSense) = sideSense | next(sideSense) = sideSense)
 \n ", 
, " (senseMotor = SIDE | next(backSense) = backSense + 1 | next(backSense) = backSense)
 \n ", 
, " (senseMotor = SIDE | next(backSense) = backSense - 1 | next(backSense) = backSense)
 \n ", 
, " (senseMotor = SIDE | next(backSense) = backSense -1 | next(backSense) = backSense)
 \n ", 
, " (senseMotor = SIDE | next(backSense) = backSense+1 | next(backSense) = backSense)
 \n ", 
, " );
 \n ", 
, " Always find a parking spot
 \n ", 
, " Assume that a parking a large enough parking spot to contain the car exists
 \n ", 
, " Assume that by moving backwards with or without turning will increase the front sensor's distance from a blocking obstacle
 \n ", 
, " Assume that by moving forwards with or without turning will increase the back sensor's distance from a blocking obstacle
 \n ", 
, " Assume that there exists some degree of movement in the environment
 \n ", 
, " Change the speed of the car according to its distance from an obstacle
 \n ", 
, " Driving backwards and turning left will make our sideSense change (downwards) or remain the same
 \n ", 
, " G ((mode = PARKED & color = GREEN) ) -> ((next(sideSense) = sideSense) & (next(backSense) = backSense) & ( next(frontSense) =frontSense) );
 \n ", 
, " G (PREV(senseMotor = BACK) & backSense <= 1) -> (driveMotor != BWD);
 \n ", 
, " G (driveMotor = BWD & left ) -> (next(driveMotor) = BWD | next(sideSense) = sideSense - 1);
 \n ", 
, " G (driveMotor = BWD & left) -> getCloser;
 \n ", 
, " G (driveMotor = BWD & steeringMotor = STRAIGHT) -> (backSense > 0 & PREV(senseMotor = BACK));
 \n ", 
, " G (driveMotor = FWD & right) -> (next(driveMotor) = FWD | next(sideSense) = sideSense + 1);
 \n ", 
, " G (driveMotor = FWD) -> (PREV(senseMotor = SIDE));
 \n ", 
, " G (mode = SCANNING & sideStatus = NONE) -> (next(mode) = SEARCHING);
 \n ", 
, " G (mode = SCANNING &(status = PARALLEL & sideStatus = MIN_PARALLEL)) <-> (next(stopping) & (next(mode) = PARKING) & steeringMotor = STRAIGHT & next(steeringMotor) = STRAIGHT);
 \n ", 
, " G (stopping & frontSense > 2 & sideSense > 2) -> ((sideSense = next(sideSense)) & (backSense = next(backSense)) & (frontSense = next(frontSense)));
 \n ", 
, " G (stopping & mode = PARKING & status !=NONE ) -> (next(stopping)) ;
 \n ", 
, " G mode = SCANNING & sideSense <= 2 -> next(mode) = SEARCHING;
 \n ", 
, " G mode = SEARCHING & PREV(senseMotor = SIDE) & sideSense > 2 & status = NONE & frontSense > 2-> next(mode) = SCANNING & senseMotor = SIDE; 
 \n ", 
, " G((next(stopping) )-> (sideSense = next(sideSense) & backSense = next(backSense) & frontSense = next(frontSense)));
 \n ", 
, " G(driveMotor = BWD) -> ((PREV(senseMotor = SIDE)) & 
 \n ", 
, " GF ((frontSense > 2 & sideSense > 2));
 \n ", 
, " Make sure we don't crash while moving (straight) backward
 \n ", 
, " Make sure we don't crash while moving forward 
 \n ", 
, " Once a parking spot has been found it wont move. Hopefully.
 \n ", 
, " Once the status changes to PARALLEL or REVERSE and we were scanning, stop
 \n ", 
, " Standing still doesn't change a thing 
 \n ", 
, " TODO
 \n ", 
, " The car is not initially parked
 \n ", 
, " Wall Alignment
 \n ", 
, " While SEARCHING if the sideSense reading is clear enough, keep heading straight and forward
 \n ", 
, " While moving backward always do so in a slow and controlled manner
 \n ", 
, " While scanning if the sideSense gets too blocked and we haven't found a parking spot 
 \n ", 
, " While scanning if the sideStatus reading is clear enough, keep scanning.
 \n ", 
, " While scanning if we are not parking and the frontSense reading is clear enough , keep heading straight and forward
 \n ", 
, " asm
 \n ", 
, " asm 
 \n ", 
, " assumption
 \n ", 
, " assumption 
 \n ", 
, " assumption ableToScan:
 \n ", 
, " assumption ableToStartSearching:
 \n ", 
, " assumption theWorldRemainsStillWhileStopping:
 \n ", 
, " continuousness of moving backwards
 \n ", 
, " continuousness of moving backwards and straight when the senseMotor = back
 \n ", 
, " continuousness of moving backwards and straight when the senseMotor = side
 \n ", 
, " continuousness of moving forward
 \n ", 
, " continuousness of moving forward and straight when the senseMotor = back
 \n ", 
, " continuousness of moving forward and straight when the senseMotor = side
 \n ", 
, " drivMotor options
 \n ", 
, " env Int(0..5) backSense;
 \n ", 
, " env SideStatus sideStatus; 
 \n ", 
, " gar
 \n ", 
, " gar 
 \n ", 
, " gar \n ", 
, " gar parallelPlace:
 \n ", 
, " gar stayParking:
 \n ", 
, " guarantee dontCrashBack:
 \n ", 
, " guarantee dontCrashStraightBack: 
 \n ", 
, " guarantee lookBeforeGoingBackwards:// beware when entering a parking spot or just going backwards
 \n ", 
, " guarantee lookToTheSideBeforeForward: //require to look to the side before going forward 
 \n ", 
, " if While scanning there is no enough place to park 
 \n ", 
, " if side sensor is enough for parallel parking, keep scanning until status is parallel.
 \n ", 
, " pRespondsToS((driveMotor = BWD & left & senseMotor = BACK), 
 \n ", 
, " pRespondsToS((driveMotor = BWD & left & senseMotor = SIDE), 
 \n ", 
, " pRespondsToS((driveMotor = BWD & right & senseMotor = BACK), 
 \n ", 
, " pRespondsToS((driveMotor = BWD & right & senseMotor = SIDE), 
 \n ", 
, " pRespondsToS((driveMotor = BWD & steeringMotor = STRAIGHT & senseMotor = BACK), 
 \n ", 
, " pRespondsToS((driveMotor = BWD & steeringMotor = STRAIGHT & senseMotor = SIDE), 
 \n ", 
, " pRespondsToS((driveMotor = FWD & left & senseMotor = BACK),
 \n ", 
, " pRespondsToS((driveMotor = FWD & left & senseMotor = SIDE),
 \n ", 
, " pRespondsToS((driveMotor = FWD & right & senseMotor = BACK),
 \n ", 
, " pRespondsToS((driveMotor = FWD & right & senseMotor = SIDE),
 \n ", 
, " pRespondsToS((driveMotor = FWD & steeringMotor = STRAIGHT & senseMotor = BACK), 
 \n ", 
, " pRespondsToS((driveMotor = FWD & steeringMotor = STRAIGHT & senseMotor = SIDE), 
 \n ", 
, " pRespondsToS((hard_left_fwd), frontSense > 0);
 \n ", 
, " pRespondsToS(PREV(mode = SCANNING) & mode = PARKING & driveMotor = BWD, sideSense <= 1); 
 \n ", 
, " pRespondsToS(forwarding, backSense > 0);
 \n ", 
, " pRespondsToS(mode = SEARCHING & !stopping, frontSense > 2 & sideSense > 2);
 \n ", 
, " pRespondsToS(stopping, (next(sideSense) = sideSense) & (next(backSense) = backSense) & ( next(frontSense) =frontSense));
 \n ", 
, " start scanning if the sideStatus is sufficiently clear
 \n ", 
, " steeringMotor options 
 \n ", 
, " sys SenseMotorCmd senseMotor; 
 \n ", 
, " there is no enough place to park , start SEARCHING again
 \n ", 
, " there is not enough place to park , start SEARCHING again
 \n ", 
, " type SenseMotorCmd = {SIDE, BACK};
 \n ", 
, " while SCANING we will find enough place to park eventually
 \n ", 
, " while stopping the velocity is 0, and vice versa
 \n ", 
, " Inputs
 \n ", 
, " Keep scanning while the front sensor is sufficiently clear
 \n ", 
, " Make s ure we don't crash while moving backward
 \n ", 
, " Make sure we don't crash while moving (straight) backward
 \n ", 
, " Make sure we don't crash while moving backward
 \n ", 
, " Make sure we don't crash while moving forward 
 \n ", 
, " Make sure we don't crash while moving forward regardless of manual control command.
 \n ", 
, " Make sure we don't crash while moving forward.
 \n ", 
, " Manual Mode Assumptions
 \n ", 
, " Manual Mode Guarantees
 \n ", 
, " Next mode should be MANUAL iff the manual flag was given.
 \n ", 
, " Once a REVERSE parking spot has been found and mode is PARKING, it wont move.
 \n ", 
, " Once a REVERSE parking spot has been found and we are scanning it wont move or switch status to parallel (if sideStatus is parallel).
 \n ", 
, " Once a parallel parking spot has been found it wont move. Hopefully.
 \n ", 
, " Once a parking spot has been found it wont move. Hopefully.
 \n ", 
, " Once the status changes to PARALLEL and we were scanning, we switch to parking mode to begin parking
 \n ", 
, " Once the status changes to PARALLEL or REVERSE and we were scanning, stop
 \n ", 
, " Once we are parked we should stop moving.
 \n ", 
, " Outputs
 \n ", 
, " Parked mode can come only after parking mode or manual mode
 \n ", 
, " Parking
 \n ", 
, " Parking and parking
 \n ", 
, " Searching & Scanning
 \n ", 
, " Searching and scanning 
 \n ", 
, " Standing still doesn't change a thing 
 \n ", 
, " Start Parking
 \n ", 
, " Start enter to the parking spot
 \n ", 
, " Start exit from parallel parking
 \n ", 
, " Start exit from reverse parking
 \n ", 
, " Start exit if it's disabled parking
 \n ", 
, " Start scanning if the sideStatus is sufficiently clear
 \n ", 
, " Start searching again after exit
 \n ", 
, " Switch to parked mode if we parked in a valid parking spot
 \n ", 
, " TODO - add that these only apply to when searching and scanning(?)
 \n ", 
, " TODO - add wall alignment while searching to optimize scanning
 \n ", 
, " TODO - ask Or why the stopping is needed
 \n ", 
, " TODO - is this search-only?
 \n ", 
, " TODO - should these to be limited to searching and scanning?
 \n ", 
, " TODO \n ", 
, " TODO do I really need this?
 \n ", 
, " The car is not initially parked
 \n ", 
, " The car should never stop dead in its track if the velocity is not zero.
 \n ", 
, " The car starts in a non-parking mode - it begins in a drive-ready and parking-spot searching mode 
 \n ", 
, " There is no enough place to park , start searching again
 \n ", 
, " Type definitions 
 \n ", 
, " We are not going to stay in the parking spot forever
 \n ", 
, " When in parked mode and the button is not pressed , the car should stay in place
 \n ", 
, " When in parked mode and the button is pressed , start exit (or switch to manual mode)
 \n ", 
, " When in parking mode we should keep at it until we are done
 \n ", 
, " While SCANING we will find enough place to park eventually
 \n ", 
, " While SEARCHING if the sideSense reading is clear enough, keep heading straight and forward
 \n ", 
, " While moving backward always do so in a slow and controlled manner
 \n ", 
, " While moving backward always do so in a slow and controlled manner.
 \n ", 
, " While moving backward or scanning/parking/exit, always do so in a slow and controlled manner.
 \n ", 
, " While scanning if the sideSense gets too blocked and we haven't found a parking spot 
 \n ", 
, " While scanning if the sideSense reading is clear enough, keep scanning and keep heading straight and forward
 \n ", 
, " While scanning if the sideSense reading is clear enough, keep scanning.
 \n ", 
, " While scanning if the sideStatus reading is clear enough, keep scanning.
 \n ", 
, " While scanning if we are not parking and the frontSense reading is clear enough , keep heading straight and forward
 \n ", 
, " While searching, if there is no opening on the side we keep searching for an opening
 \n ", 
, " asm
 \n ", 
, " asm 
 \n ", 
, " assumption
 \n ", 
, " assumption 
 \n ", 
, " assumption aParkingSpotExists:
 \n ", 
, " assumption ableToStartSearching:
 \n ", 
, " assumption backClear:
 \n ", 
, " assumption backOrFrontClear:
 \n ", 
, " assumption canGetClear:
 \n ", 
, " assumption needToScanToFindAParkingSpot:
 \n ", 
, " assumption notParkedInitially:
 \n ", 
, " assumption theWorldRemainsStillWhileStopping:
 \n ", 
, " continue parallel parking
 \n ", 
, " continue reverse parking
 \n ", 
, " continuousness of moving backwards
 \n ", 
, " continuousness of moving backwards and straight when the senseMotor = back
 \n ", 
, " continuousness of moving backwards and straight when the senseMotor = side
 \n ", 
, " continuousness of moving forward
 \n ", 
, " continuousness of moving forward and straight when the senseMotor = back
 \n ", 
, " continuousness of moving forward and straight when the senseMotor = side
 \n ", 
, " end of invalid parking
 \n ", 
, " enter the parking spot
 \n ", 
, " env ParkingSpotStatus status; 
 \n ", 
, " env ParkingType parkingTypeFound; 
 \n ", 
, " env boolean manual;
 \n ", 
, " exit from parallel parking
 \n ", 
, " exit from reverse parking
 \n ", 
, " exiting the parking spot
 \n ", 
, " foundAParallelSpot := (parkingTypeFound = PARALLEL & status = FINISHED_SCANNING);
 \n ", 
, " foundAReverseSpot := (parkingTypeFound = REVERSED & status = FINISHED_SCANNING);
 \n ", 
, " gar
 \n ", 
, " gar 
 \n ", 
, " gar (((mode != PARKED & mode != MANUAL) & button) -> (driveMotor = STOP & velocity = 0));
 \n ", 
, " gar G (mode = EXIT & done = true & align = true & PREV(mode = PARKING)) -> (next(mode) = EXIT );
 \n ", 
, " gar dontCrashSide: G (sideSense < 1 & mode = SEARCHING) -> (steeringMotor = LIGHT_LEFT | steeringMotor = HARD_LEFT);
 \n ", 
, " gar ifFrontIsNotBlockedDrive:
 \n ", 
, " gar parallelParkingPart2:
 \n ", 
, " gar parallelParkingPart3:
 \n ", 
, " guarantee 
 \n ", 
, " guarantee BothSidesBlocked:
 \n ", 
, " guarantee dontCrashFront:
 \n ", 
, " guarantee dontCrashStraightBack: 
 \n ", 
, " guarantee finishedParking:
 \n ", 
, " guarantee getOutOfParking:
 \n ", 
, " guarantee goIfClear:
 \n ", 
, " guarantee initalNotParking:
 \n ", 
, " guarantee initialDirection:
 \n ", 
, " guarantee keepMovingForward:
 \n ", 
, " guarantee keepScanning:
 \n ", 
, " guarantee moveForward:
 \n ", 
, " guarantee parallelParkingPart1:
 \n ", 
, " guarantee scannOften:
 \n ", 
, " guarantee startParkingInParallel:
 \n ", 
, " guarantee startParkingInReverse:
 \n ", 
, " if While scanning there is no enough place to park
 \n ", 
, " if manual is false the manual commands does not change
 \n ", 
, " if side sensor is enough for parallel parking, keep scanning until status is parallel.
 \n ", 
, " if we don't have enough space to exit, stop until frontSense is clear enough
 \n ", 
, " mode should be MANUAL iff the manual flag was given.
 \n ", 
, " pRespondsToS((hard_left_fwd), frontSense > 0);
 \n ", 
, " pRespondsToS(PREV(mode = SCANNING) & mode = PARKING & driveMotor = BWD, sideSense <= 1); 
 \n ", 
, " pRespondsToS(forwarding, backSense > 0);
 \n ", 
, " pRespondsToS(forwarding, senseMotor = REVERSE & sense != BLOCKED);
 \n ", 
, " pRespondsToS(foundAParallelSpot, parallelParking);
 \n ", 
, " pRespondsToS(foundAReverseSpot, reverseParking);
 \n ", 
, " pRespondsToS(mode = SEARCHING & !stopping, frontSense > 2 & sideSense > 2);
 \n ", 
, " pRespondsToS(parkingMode = PARALLEL | parkingMode = REVERSED, parkingMode = NONE);
 \n ", 
, " pRespondsToS(reversing | (next(steeringMotor) != steeringMotor & reversing), frontSense != 0);
 \n ", 
, " pRespondsToS(scanning, parked);
 \n ", 
, " pRespondsToS(sideways, frontSense != BLOCKED & backSense != BLOCKED);
 \n ", 
, " pRespondsToS(sideways, frontSense != BLOCKED & backSense > 0);
 \n ", 
, " parallelParking := parking = BLOCKED -> (driveMotor = STOP & steeringMotor = 45);
 \n ", 
, " parkingMode = NONE;
 \n ", 
, " parkingTypeFound = NONE & status = NONE;
 \n ", 
, " reverseParking := (senseMotor = REVERSE & sense = CLOSE & parking = BLOCKED) -> (driveMotor = STOP & steeringMotor = 45);
 \n ", 
, " rotate the sense motor (reverse) when moving backward
 \n ", 
, " scanning := status = STARTED_SCANNING & sense != BLOCKED;
 \n ", 
, " senseMotor = DRIVE;
 \n ", 
, " start enter
 \n ", 
, " start exit
 \n ", 
, " start scanning if the front sensor is sufficiently clear
 \n ", 
, " start scanning if the sideStatus is sufficiently clear
 \n ", 
, " start searching again after exit
 \n ", 
, " sys ParkingType parkingMode;
 \n ", 
, " there is no enough place to park
 \n ", 
, " there is no enough place to park , start SEARCHING again
 \n ", 
, " trying to park or PARKED which means we finished parking
 \n ", 
, " while SCANING we will find enough place to park eventually
 \n ", 
, " while parking, we can't switch to searching mode or scanning mode until we are done.
 \n ", 
, " while parking/parked , status is parallel
 \n ", 
, " while stopping the velocity is 0, and vice versa
 \n ", 
, " assumption inStationEventually:
 \n ", 
, " assumption initiallyNoTechnicianAck:
 \n ", 
, " assumption leaveStationEventually:
 \n ", 
, " assumption noStrangeTechnicianAcks:
 \n ", 
, " assumption notAlwaysAtEmgState:
 \n ", 
, " atBaseStation := station = baseStation;
 \n ", 
, " atStationWithTask := atStation & ((station = 0 & shuttleTasks[0]=true) |
 \n ", 
, " between open and close must be process 
 \n ", 
, " can't change direction without stopping 
 \n ", 
, " door in process only when asked to
 \n ", 
, " door must be in process when asked to
 \n ", 
, " else change value of atEmgState at each press on emgButton 
 \n ", 
, " env Button emgButton;
 \n ", 
, " env Int(0..4) baseStation; // need only 0-3
 \n ", 
, " env boolean longTimeWithoutRequests;
 \n ", 
, " env boolean readyToEmgBeep;
 \n ", 
, " env boolean technicianAck;
 \n ", 
, " for well-separated Environment (Causes unrealizable) 
 \n ", 
, " guarantee
 \n ", 
, " guarantee 
 \n ", 
, " guarantee mustStopInOrderToSatisfyTask:
 \n ", 
, " guarantee stopWhenTechGuyInAction:
 \n ", 
, " guarantee stoppingAtStationOnlyIfHasTask:
 \n ", 
, " if atEmgState keep atEmgState
 \n ", 
, " if base station is bw and going bw -> will arrive to base station
 \n ", 
, " if base station is bw and going bw -> will arrive to base station (or fw or stopping)
 \n ", 
, " if base station is fw and going fw -> will arrive to base station
 \n ", 
, " if base station is fw and going fw -> will arrive to base station (or bw or stopping)
 \n ", 
, " if no tasks stop when entering station
 \n ", 
, " if only tasks backward go backward
 \n ", 
, " if only tasks forward go forward
 \n ", 
, " isTaskDirectionBwdOrNoTask(d, stationLast, baseStation);
 \n ", 
, " isTaskDirectionFwdOrNoTask(d, stationLast, baseStation) | stationLast = 4;
 \n ", 
, " keep status 
 \n ", 
, " monitor Direction shuttleDirection{
 \n ", 
, " monitor boolean atEmgState {
 \n ", 
, " monitor boolean techGuyInAction {
 \n ", 
, " next(tasks[0]) = ((indexOpenedDoor != 0) & (tasks[0] | (indexPressed = 0))) &
 \n ", 
, " next(tasks[1]) = ((indexOpenedDoor != 1) & (tasks[1] | (indexPressed = 1))) &
 \n ", 
, " next(tasks[2]) = ((indexOpenedDoor != 2) & (tasks[2] | (indexPressed = 2))) &
 \n ", 
, " next(tasks[3]) = ((indexOpenedDoor != 3) & (tasks[3] | (indexPressed = 3)));
 \n ", 
, " openDoorAtEmgState becomes false when at emergency state and door request is sent
 \n ", 
, " openDoorAtEmgState becomes true when entering emergency state
 \n ", 
, " pHolds_afterQuntilR(backwarding, !atStation, stationWillDecrease); 
 \n ", 
, " pHolds_afterQuntilR(forwarding, !atStation, stationWillIncrease);
 \n ", 
, " pRespondsToS (!atStation & (forwarding | backwarding), atStation | stopping); 
 \n ", 
, " pRespondsToS (atStation & ((forwarding & station < 3) | (backwarding & station > 0)), !atStation | stopping);
 \n ", 
, " pRespondsToS (forwarding | backwarding, !atStation | stopping);
 \n ", 
, " pRespondsToS(isBaseStationBwd(shuttleDirection, lastPassedStation) & backwarding, atBaseStation | forwarding | stopping);
 \n ", 
, " pRespondsToS(isBaseStationFwd(shuttleDirection, lastPassedStation) & forwarding, atBaseStation | backwarding | stopping);
 \n ", 
, " pRespondsToS(noRequests & longTimeWithoutRequests, atBaseStation);
 \n ", 
, " pRespondsToS(techGuyInAction, technicianAck);
 \n ", 
, " predicate isBaseStationBwd(Direction d, Int(0..4) stationLast):
 \n ", 
, " predicate isBaseStationFwd(Direction d, Int(0..4) stationLast):
 \n ", 
, " predicate isTaskDirectionBwdOrNoTask(Direction d, Int(0..4) stationLast, Int(0..4) s):
 \n ", 
, " predicate isTaskDirectionFwdOrNoTask(Direction d, Int(0..4) stationLast, Int(0..4) s):
 \n ", 
, " predicate taskAtCurrentStation(Int(0..4) index):
 \n ", 
, " predicate taskIsSatisfaid(Int(0..1) direction, Int(0..3) stationIndex):
 \n ", 
, " predicate updateTasks(boolean[4] tasks ,Int(0..4) indexPressed, Int(0..4) indexOpenedDoor):
 \n ", 
, " reset goToBaseStation
 \n ", 
, " reset goToBaseStation task
 \n ", 
, " reset task
 \n ", 
, " satisfies task
 \n ", 
, " satisfies task 
 \n ", 
, " satisfiesTask
 \n ", 
, " shuttleDirection = GOING_NONE;
 \n ", 
, " station can only decrease by going backwarding (and entering station)
 \n ", 
, " station can only increase by going forwarding (and entering station)
 \n ", 
, " station number can only change when entering station
 \n ", 
, " stations can only increase or decrease by one 
 \n ", 
, " stopping
 \n ", 
, " sys boolean emgBeepReq;
 \n ", 
, " sys boolean startTechnicalJob;
 \n ", 
, " sys boolean[4] shuttleTasks;
 \n ", 
, " taskWillBeTrue := 
 \n ", 
, " tasks are complete only when stopping and opening door at the station
 \n ", 
, " technicianAck returns answer eventually 
 \n ", 
, " updates tasks (bw or fw) array: indexOpenedDoor -> false, indexPressed -> true
 \n ", 
, " waitingForDoor when door request is sent and door ack hasn't been received yet
 \n ", 
, " waitingForEmgBeeper when emgBeepProcessReq request is sent
 \n ", 
, " while not in station can't stop
 \n ", 
, " }
 \n ", 
, " } 
 \n ", 
, 
roboticarm , 
, "  ", 
, " 
 \n ", 
, " !next(isMoving) | 
 \n ", 
, " 'from' never equals 'to'
 \n ", 
, " (
 \n ", 
, " ( ((from != 5) & exists(from+1)) -> next(from) = from+1) &
 \n ", 
, " (!((from != 5) & exists(from+1)) -> next(from) = 0) ;
 \n ", 
, " (!hanoiExists(BLUE) -> next(t2) = BLUE );
 \n ", 
, " (!hanoiExists(GREEN) -> next(t0) = GREEN) ;
 \n ", 
, " (!hanoiExists(RED) -> next(t1) = RED ) ;
 \n ", 
, " ((fromColor = RED -> next(fromColor) = BLUE) &
 \n ", 
, " ((index = 0 & s0 != EMPTY) -> (next(s0) > s0) & (next(s0) != NOT)) &
 \n ", 
, " ((index = 0 & t0 != EMPTY) -> (next(t0) > t0) & (next(t0) != NOT)) &
 \n ", 
, " ((index = 1 & s1 != EMPTY) -> (next(s1) > s1) & (next(s1) != NOT)) &
 \n ", 
, " ((index = 1 & t1 != EMPTY) -> (next(t1) > t1) & (next(t1) != NOT)) &
 \n ", 
, " ((index = 2 & s2 != EMPTY) -> (next(s2) > s2) & (next(s2) != NOT)) ;
 \n ", 
, " ((index = 2 & t2 != EMPTY) -> (next(t2) > t2) & (next(t2) != NOT)) ;
 \n ", 
, " ((index >= 1) -> (s0 != EMPTY)) &
 \n ", 
, " ((index >= 2) -> (s1 != EMPTY)) &
 \n ", 
, " ((index >= 3) -> (s2 != EMPTY)) &
 \n ", 
, " ((index >= 4) -> (s3 != EMPTY)) &
 \n ", 
, " ((index >= 5) -> (s4 != EMPTY)) ;
 \n ", 
, " ((s0 = RED) -> prevBallsNotEmpty(0)) &
 \n ", 
, " ((s1 = RED) -> (s0 = RED)) ;
 \n ", 
, " ((s1 = RED) -> prevBallsNotEmpty(1)) &
 \n ", 
, " ((s2 = RED) -> (s1 = RED)) &
 \n ", 
, " ((s2 = RED) -> prevBallsNotEmpty(2)) &
 \n ", 
, " ((s3 = RED) -> (s2 = RED)) &
 \n ", 
, " ((s3 = RED) -> prevBallsNotEmpty(3)) &
 \n ", 
, " ((s4 = RED) -> (s3 = RED)) &
 \n ", 
, " ((s4 = RED) -> prevBallsNotEmpty(4)) &
 \n ", 
, " ((s5 = RED) -> (s4 = RED)) &
 \n ", 
, " ((s5 = RED) -> prevBallsNotEmpty(5)) ;
 \n ", 
, " (essentially, tower is 3 stations. see the PowerPoint presentation for detailed explanation)
 \n ", 
, " (from <= 2) & //only 3 towers exist
 \n ", 
, " (fromColor = BLUE -> next(fromColor) = RED));
 \n ", 
, " (fromColor = next(toColor)) &
 \n ", 
, " (hanoiFrom <= 2) & //only 3 towers exist
 \n ", 
, " (hanoiIsMoving -> !hanoiSetColor(hanoiFrom, t0)) &
 \n ", 
, " (hanoio <= 2) & //only 3 towers exist
 \n ", 
, " (r0 > 1 -> next(t0) != EMPTY) &
 \n ", 
, " (r1 > 1 -> next(t1) != EMPTY) &
 \n ", 
, " (r2 > 1 -> next(t2) != EMPTY) 
 \n ", 
, " (s0 = BLUE | s0 = RED) &
 \n ", 
, " (s0 = EMPTY) &
 \n ", 
, " (s1 = BLUE | s1 = RED) &
 \n ", 
, " (s1 = EMPTY) &
 \n ", 
, " (s2 <= s3) &
 \n ", 
, " (s2 = BLUE | s2 = RED) &
 \n ", 
, " (s2 = EMPTY);
 \n ", 
, " (s3 <= s4) &
 \n ", 
, " (s3 = EMPTY) &
 \n ", 
, " (s4 <= s5) ;
 \n ", 
, " (s4 = NOT) &
 \n ", 
, " (s5 = NOT);
 \n ", 
, " (stations[0] = BLUE) &
 \n ", 
, " (stations[1] = GREEN) &
 \n ", 
, " (stations[2] = RED) &
 \n ", 
, " (stations[3] = BLUE) &
 \n ", 
, " (stations[4] = EMPTY) &
 \n ", 
, " (stations[5] = NOT_EXISTS) ;
 \n ", 
, " (t0 = BLUE) &
 \n ", 
, " (t1 = GREEN) &
 \n ", 
, " (t2 = RED);
 \n ", 
, " (task = HANOI -> next(task) = SCAN);
 \n ", 
, " (task = SCAN -> next(task) = SORT) &
 \n ", 
, " (task = SORT -> next(task) = HANOI) &
 \n ", 
, " (task = SORT -> next(task) = SCAN) ;
 \n ", 
, " (to <= 2) & //only 3 towers exist
 \n ", 
, " (toColor = next(fromColor)) ;
 \n ", 
, " (we expressed this in the code in a close but different way as the above is an asm about aux variables) 
 \n ", 
, " ); 
 \n ", 
, " */
 \n ", 
, " /*
 \n ", 
, " // (s1 = EMPTY) &
 \n ", 
, " // (s2 = EMPTY);
 \n ", 
, " // hanoiAsms :=
 \n ", 
, " // hanoiAsms := //initially, only the first tower is occupied 
 \n ", 
, " // s0 != NOT &
 \n ", 
, " // s1 != NOT &
 \n ", 
, " // s2 != NOT ;
 \n ", 
, " // swapping 'from' from red to blue and vice versa yields swapping the red and the blue again and again 
 \n ", 
, " //HANOI_MOVE,
 \n ", 
, " //MANUAL_MOVE, //move from 'from' to 'to'
 \n ", 
, " //MOVE_DOWN,
 \n ", 
, " //MOVE_LEFT,
 \n ", 
, " //MOVE_RIGHT,
 \n ", 
, " //MOVE_UP,
 \n ", 
, " //SHUT OFF,
 \n ", 
, " //STOP_MOVING,
 \n ", 
, " //and there will be two asms: G dec, GF strictDec
 \n ", 
, " //asm G (task = EXCHANGE & next(task) != EXCHANGE) -> from = 1;
 \n ", 
, " //asm G next(task) = SORT;
 \n ", 
, " //asm G second -> next(task) = task;
 \n ", 
, " //aux boolean second;
 \n ", 
, " //gar !second;
 \n ", 
, " //gar G next(second);
 \n ", 
, " //gathering the red balls to the start (if some ball is red, then so is its successor, and so on)
 \n ", 
, " //in future version there will be dec and strictDec predicates for strict and non-strict inequalities,
 \n ", 
, " //incrementColor(from);
 \n ", 
, " 3 Hanoi towers
 \n ", 
, " ??
 \n ", 
, " ?? to exchange between commented & uncommented 
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra missions.txt moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra pippo.txt requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra tmp.txt trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra 
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra missions.txt moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra pippo.txt requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra tmp.txt trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra --------- HANOI TASK -------------------
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra missions.txt moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra pippo.txt requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra tmp.txt trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra ----------- EXCHANGE TASK ---------------
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra missions.txt moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra pippo.txt requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra tmp.txt trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra ------------------- GATHER REDS TASK ------------------
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra missions.txt moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra pippo.txt requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra tmp.txt trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra ------------------- SWAP_RED_AND_BLUE TASK ----------------
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra missions.txt moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra pippo.txt requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra tmp.txt trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra ----------------------- MOVE_RED_LEFT TASK ----------------------
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra missions.txt moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra pippo.txt requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra tmp.txt trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra Notice also that we also may pass through from=EMPTY, or from=to
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra missions.txt moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra pippo.txt requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra tmp.txt trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra Notice that when !exists(from+1), then also !exists(from+2), etc.,
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra missions.txt moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra pippo.txt requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra tmp.txt trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra Recall that in Hanoi task moving from 'from' to 'to' gets another interpretation
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra missions.txt moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra pippo.txt requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra tmp.txt trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra We iterate over all existing values of 'from' in a cyclic manner
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra missions.txt moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra pippo.txt requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra tmp.txt trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra so we we're in the last existing value
 \n ", 
, " Boolean variable that indicates whether or not the robotic arm is moving the ball in station 'from' to the (presumably empty) station 'to'
 \n ", 
, " EXCHANGE
 \n ", 
, " EXCHANGE, //exchanges two different colored balls using mode = MOVE
 \n ", 
, " G
 \n ", 
, " G 
 \n ", 
, " G (mode = INIT) -> saveAll;
 \n ", 
, " G (task = GATHER_REDS & !gatherRedsDone) -> next(task) = GATHER_REDS;
 \n ", 
, " G (task = GATHER_REDS & gatherRedsDone) -> !isMoving;
 \n ", 
, " G (task = HANOI & !hanoiDone) -> next(task) = HANOI;
 \n ", 
, " G (task = HANOI & hanoiIsMoving & hanoiAsms & hanoiLegalMove) ->
 \n ", 
, " G (task = HANOI & isMoving & hanoiAsms & hanoiLegalMove) ->
 \n ", 
, " G (task = MOVE_RED_LEFT & !moveRedLeftDone) -> next(task) = MOVE_RED_LEFT;
 \n ", 
, " G (task = MOVE_RED_LEFT & moveRedLeftDone) -> !isMoving;
 \n ", 
, " G (task = SORT & !sortDone) -> next(task) = SORT; 
 \n ", 
, " G (task = SWAP_RED_AND_BLUE) ->
 \n ", 
, " G (task!=EXCHANGE & next(task)=HANOI & !next(isMoving)) -> next(from) = 1;
 \n ", 
, " G isMoving & task = HANOI -> onExchangeSave;
 \n ", 
, " G isMoving -> (onExchangeSave & swap);
 \n ", 
, " G next(task)!= EXCHANGE;
 \n ", 
, " G task = EXCHANGE -> (isMoving & incrementFrom);
 \n ", 
, " G task = HANOI & !hanoiDone -> hanoiIsMoving;
 \n ", 
, " G task = HANOI & hanoiDone -> !isMoving; 
 \n ", 
, " G task = HANOI & isMoving -> hanoiLegalMove;
 \n ", 
, " G task = SORT & !sortDone -> isMoving;
 \n ", 
, " G task = SORT & sortDone -> !isMoving;
 \n ", 
, " GATHER_REDS
 \n ", 
, " GATHER_REDS,
 \n ", 
, " GF (task = GATHER_REDS & gatherRedsAsms) -> gatherRedsDone;
 \n ", 
, " GF (task = HANOI & hanoiAsms) -> hanoiDone;
 \n ", 
, " GF (task = MOVE_RED_LEFT & moveRedLeftAsms) -> moveRedLeftDone;
 \n ", 
, " GF (task = SORT & sortAsms) -> sortDone;
 \n ", 
, " GF blueArray;
 \n ", 
, " GF sortingAssumptions ->!sorted;
 \n ", 
, " HANOI
 \n ", 
, " HANOI_MOVE,
 \n ", 
, " However, this time we move from tower to tower (rather than from station to station), and thus we have different gars and asms 
 \n ", 
, " INIT happens only ones
 \n ", 
, " Integers that indicate the "index" of the station from/to which the ball is moved 
 \n ", 
, " MANUAL_MOVE, //move from 'from' to 'to'
 \n ", 
, " MOVE_DOWN,
 \n ", 
, " MOVE_LEFT,
 \n ", 
, " MOVE_RED_LEFT
 \n ", 
, " MOVE_RED_LEFT,
 \n ", 
, " MOVE_RIGHT,
 \n ", 
, " MOVE_UP,
 \n ", 
, " SCAN
 \n ", 
, " SHUT OFF,
 \n ", 
, " SORT 
 \n ", 
, " STOP_MOVING,
 \n ", 
, " SWAP_RED_AND_BLUE
 \n ", 
, " SWAP_RED_AND_BLUE,
 \n ", 
, " Tasks that the user chooses
 \n ", 
, " The stations
 \n ", 
, " Their colors indicate the colors of the balls they contain
 \n ", 
, " These variables store the colors of the stations that 'from' and 'to' point to
 \n ", 
, " We didn't define it as an array ('env Color[4] s'), as it is not supported in the Java (Or told us to do it) 
 \n ", 
, " additional asms and gars
 \n ", 
, " all of the colors stay in their positions
 \n ", 
, " all of the stations (excluding empty and non-existing stations)
 \n ", 
, " all tasks
 \n ", 
, " all the colors stay in their positions
 \n ", 
, " all the towers stay the same
 \n ", 
, " also similar to above: these gars ensure that hanoiFromColor, hanoiToColor store the colors that hanoiFrom, hanoiTo point to
 \n ", 
, " also similar to fromColor, toColor
 \n ", 
, " always the first time we have task = HANOI, hanoiStrongAsms is satisfied 
 \n ", 
, " and 'from' and 'to' swaps their balls (the empty ball and the non-empty ball exchange their locations)
 \n ", 
, " and there will be two asms: G dec, GF strictDec
 \n ", 
, " and when its value is found, it swaps the values of 'from' and 'to'
 \n ", 
, " asm
 \n ", 
, " asm G !initDone & next(initDone) -> !blueArray;
 \n ", 
, " asm G (task = EXCHANGE & next(task) != EXCHANGE) -> from = 1;
 \n ", 
, " asm G (task = EXCHANGE & next(task) != EXCHANGE) -> from = 1; \n ", 
, " asm G (task = SORT & !sorted) -> next(task) = SORT;
 \n ", 
, " asm G firstStationsExist;
 \n ", 
, " asm G next(colorExists(EMPTY)) ; 
 \n ", 
, " asm G next(counter) = 0 -> next(correspondingR) = EMPTY
 \n ", 
, " asm G next(movingAsms);
 \n ", 
, " asm G next(someColorExists);
 \n ", 
, " asm G next(task) = SCAN;
 \n ", 
, " asm G next(task) = SCAN; \n ", 
, " asm G next(task) = SORT;
 \n ", 
, " asm G next(task) = task | nextTask;
 \n ", 
, " asm G second -> next(task) = task;
 \n ", 
, " asm G secondStep -> sortingAssumptions;
 \n ", 
, " asm G setColor(1, RED) & setColor(2, BLUE);
 \n ", 
, " asm G task != HANOI -> next(hanoiStrongAsms);
 \n ", 
, " asm G task = SCAN -> next(hanoiStrongAsms);
 \n ", 
, " asm G task = SCAN -> next(s1) = BLUE;
 \n ", 
, " asm G task = SCAN -> next(s1) = BLUE; \n ", 
, " asm G task = SCAN -> next(strongAsm);
 \n ", 
, " asm G task = SORT;
 \n ", 
, " asm GF blueArray;
 \n ", 
, " asm GF someIsEmpty;
 \n ", 
, " asm continueGatherUntilDone:
 \n ", 
, " asm continueHanoiUntilDone:
 \n ", 
, " asm continueMoveRedUntilDone:
 \n ", 
, " asm continueSortUntilDone:
 \n ", 
, " asm hanoiStrongAsms;
 \n ", 
, " asm movingAsms;
 \n ", 
, " asm myIff: 
 \n ", 
, " asm noBlue:
 \n ", 
, " asm saveOnInit:
 \n ", 
, " asm saveOnMoving:
 \n ", 
, " asm sortingAssumptions;
 \n ", 
, " asm strongAssumptions; 
 \n ", 
, " asm task = SCAN;
 \n ", 
, " asserts that s contains some ball with this color
 \n ", 
, " asserts that s[i]!=EMPTY forall i<=index
 \n ", 
, " asserts that s[index] != NOT
 \n ", 
, " asserts that the station in this index exists
 \n ", 
, " assign in all time-stamps but the first (that has been already assigned above)
 \n ", 
, " assign initially
 \n ", 
, " assigns color = s[index];
 \n ", 
, " assigns colorIndex = colors[index];
 \n ", 
, " assumedArray :=
 \n ", 
, " assumptions for the first step of Hanoi riddle task
 \n ", 
, " at the end, only the third tower is occupied
 \n ", 
, " aux boolean second;
 \n ", 
, " boolean variable that indicates whether or not the robotic arm is moving the ball in station 'from' to the (presumably empty) station 'to'
 \n ", 
, " but the above is not well-separated, so we chose this formulation
 \n ", 
, " color != EMPTY & color != NOT;
 \n ", 
, " contain balls are colored in 'color' (the input color) 
 \n ", 
, " counter remains unchanged if it points to a tower that is not involved in the current move
 \n ", 
, " counters that count how many disks each tower contain
 \n ", 
, " decrement the counter if it points to a tower from which a disk is being taken
 \n ", 
, " define
 \n ", 
, " define 
 \n ", 
, " define noNextColorClash := (aColor != bColor) -> (a != b);
 \n ", 
, " defined similarly to isMoving, from, to that defined above.
 \n ", 
, " defining next(fromColor)
 \n ", 
, " ensuring move legality
 \n ", 
, " ensuring move legality 
 \n ", 
, " equivalent to asm G hanoiAsms, and written this way for well-separation reasons, as explained above
 \n ", 
, " gar
 \n ", 
, " gar !second;
 \n ", 
, " gar G !sortDone -> next(isMoving);
 \n ", 
, " gar G !working -> next(mode != WAITING); \n ", 
, " gar G (mode != WAITING) -> next(mode = WAITING);
 \n ", 
, " gar G blueArray;
 \n ", 
, " gar G next(a) =1 & next(b) = 2;
 \n ", 
, " gar G next(noNextColorClash);
 \n ", 
, " gar G next(second);
 \n ", 
, " gar G noNextColorClash;
 \n ", 
, " gar G task = SCAN -> next(from = 1 & to = 0);
 \n ", 
, " gar G task = SCAN -> next(from) = 1 & next(to) = 0;
 \n ", 
, " gar G task = SCAN -> next(isMoving);
 \n ", 
, " gar GF !blueArray;
 \n ", 
, " gar GF mode = MOVE & from = 0 & to = 1;
 \n ", 
, " gar a = 1 & b = 2;
 \n ", 
, " gar a!=b; 
 \n ", 
, " gar aColor = RED & bColor = BLUE;
 \n ", 
, " gar noNextColorClash;
 \n ", 
, " gar that strictly defines the expected behavior of the counters
 \n ", 
, " gatherRedsAsms :=
 \n ", 
, " gatherRedsDone :=
 \n ", 
, " gathering the red balls to the start (if some ball is red, then so is its predecessor, and so on)
 \n ", 
, " gathering the red balls to the start (if some ball is red, then so is its successor, and so on)
 \n ", 
, " given that from = fromVal, it iterates over all possible values of 'to'
 \n ", 
, " hanoiAsms :=
 \n ", 
, " hanoiAsms := //initially, only the first tower is occupied 
 \n ", 
, " hanoiDone := //at the end, only the second tower is occupied
 \n ", 
, " hanoiFrom = 1 &
 \n ", 
, " hanoiIncrementColor(hanoiFrom);
 \n ", 
, " hanoiIsMoving &
 \n ", 
, " hanoiIsMoving should is not allowed in other tasks
 \n ", 
, " hanoiLegalMove :=
 \n ", 
, " hanoiStrongAsms :=
 \n ", 
, " hanoiTo = 0 ; 
 \n ", 
, " if !isMoving then all stations store the same balls 
 \n ", 
, " if counter is greater than one, then after taking from it, there will be >0 disks, and thus the color won't be EMPTY.
 \n ", 
, " if counter less than or equal to one, then after taking from it the current disk, it'll be 0 disks, and thus the color will be EMPTY
 \n ", 
, " if isMoving, then all stations but 'from' and 'to' store the same balls,
 \n ", 
, " in future version there will be dec and strictDec predicates for strict and non-strict inequalities,
 \n ", 
, " increment the counter if it points to a tower to which a disk is being given
 \n ", 
, " incrementColor(from);
 \n ", 
, " incrementColor(from); 
 \n ", 
, " incrementColor(hanoiFrom); 
 \n ", 
, " incrementFrom :=
 \n ", 
, " index in the enum. Thus, in our case, RED < GREEN < BLUE < EMPTY < NOT
 \n ", 
, " initialize the counters such that all of the three balls are in the first tower
 \n ", 
, " integers that indicate the "index" of the station from/to which the ball is moved 
 \n ", 
, " isColor(s0) &
 \n ", 
, " isColor(s1) &
 \n ", 
, " isColor(s2) &
 \n ", 
, " legal move is a move that moves (or, puts) non empty disk to (or, on) bigger disk (maybe the latter is empty)
 \n ", 
, " move requires 'from' to exist, and 'to' to be empty
 \n ", 
, " moveRedLeftAsms :=
 \n ", 
, " moveRedLeftDone :=
 \n ", 
, " next(color) >= color;
 \n ", 
, " next(t0) != BLUE &
 \n ", 
, " next(t1) != BLUE &
 \n ", 
, " next(t2) != BLUE ; \n ", 
, " nextTask :=
 \n ", 
, " no tower can be NOT
 \n ", 
, " notice that there's no asm of keepOnInit, as nothing to keep in the init
 \n ", 
, " notice that we really have both
 \n ", 
, " once the robotic arm finishes gathering the red balls, it stops moving
 \n ", 
, " once the robotic arm finishes moving as many red balls left as possible, it stops moving
 \n ", 
, " once the robotic arm finishes solving the Hanoi Tower riddle, it stops moving
 \n ", 
, " once the robotic arm finishes sorting the balls, it stops moving
 \n ", 
, " only when the working becomes false, and after mode was already INIT
 \n ", 
, " optimization for compressing the symbolic automaton
 \n ", 
, " otherwise, sorting were not possible, as sorting never moves non-existing stations, and in sorted array, the non-existing ones should be to the end
 \n ", 
, " predicate hanoiIncrementColor(Int (0..2) index):
 \n ", 
, " predicate incrementColor(Int (0..5) index):
 \n ", 
, " predicate prevBallsNotEmpty(Int(0..5) index):
 \n ", 
, " preventing the counters from changing their values when we don't move the disks 
 \n ", 
, " s0 != NOT &
 \n ", 
, " s0 = EMPTY &
 \n ", 
, " s1 != NOT &
 \n ", 
, " s1 = RED &
 \n ", 
, " s2 != NOT ;
 \n ", 
, " s2 = BLUE &
 \n ", 
, " set next(s[index]) = color
 \n ", 
, " set next(t[index]) = color
 \n ", 
, " set the next colors to aColor and bColor
 \n ", 
, " setColor(to, fromColor) ;
 \n ", 
, " similar to assign
 \n ", 
, " similar to colorExists that was defined above 
 \n ", 
, " somethingEmpty & firstStationsExist & somethingExists & !equal;
 \n ", 
, " somethingEmpty & firstStationsExist;
 \n ", 
, " store the current colors in aColor and bColor 
 \n ", 
, " swap :=
 \n ", 
, " swap assigns next(fromColor)=toColor & next(toColor)=fromColor
 \n ", 
, " swapping 'from' from red to blue and vice versa yields swapping the red and the blue again and again 
 \n ", 
, " swapping 'fromColor' from red to blue and vice versa yields swapping the red and the blue again and again 
 \n ", 
, " t0 = RED &
 \n ", 
, " t1 = EMPTY &
 \n ", 
, " t2 = EMPTY;
 \n ", 
, " task = HANOI & hanoiIsMoving ->
 \n ", 
, " tasks that the user chooses
 \n ", 
, " the colors are enums, and the Spectra defines a total order among them using their
 \n ", 
, " the following is equivalent to:
 \n ", 
, " the robotic arm eventually succeeds to gather the red balls
 \n ", 
, " the robotic arm eventually succeeds to move as many red balls left as possible
 \n ", 
, " the robotic arm eventually succeeds to solve the Hanoi Tower riddle
 \n ", 
, " the robotic arm eventually succeeds to sort the balls 
 \n ", 
, " the stations
 \n ", 
, " the task stays GATHER_REDS as long as we are not done
 \n ", 
, " the task stays HANOI as long as we are not done
 \n ", 
, " the task stays MOVE_RED_LEFT as long as we are not done
 \n ", 
, " the task stays SORT as long as we are not done
 \n ", 
, " the tower that is not involved in the move stays unchanged
 \n ", 
, " their colors indicate the colors of the balls they contain
 \n ", 
, " these \n ", 
, " these variables store the colors of the stations that 'from' and 'to' point to
 \n ", 
, " these vars store the colors of the balls that 'from' and 'to' point to
 \n ", 
, " this implies that in the first step of HANOI task, initCounters is done
 \n ", 
, " this is added to make the environment well-separated
 \n ", 
, " this is in contrast to hanoiAsms that are assumptions that we always assume (not only in the first step) 
 \n ", 
, " thus, it must be some color that is not on top of the towers (as we assume that all the 3 colors: RED, GREEN, BLUE appear in the task)
 \n ", 
, " to avoid just moving one ball back and forth, we have the incrementFrom 
 \n ", 
, " to unsort we must always move
 \n ", 
, " toColor <= fromColor;
 \n ", 
, " true;
 \n ", 
, " we decided for the sake of simplicity to assume that no NOT color exists
 \n ", 
, " we needed to write TWO gars for each assignment (rather than just 'gar G assign(from, fromColor)'), to get well-separated code (Jan told us to do it) 
 \n ", 
, " we start with scan
 \n ", 
, " we're done when there's no red ball with empty place to its left 
 \n ", 
, " when !hanoiIsMoving, everything's stays the same
 \n ", 
, " when we swap between 'from' and 'to' we need to save the values of all the places except 'from' and 'to' 
 \n ", 
, " which is equivalent to nextColor(fromColor, fromCount), where 'fromCount' is a synonym to the corresponding 'r'
 \n ", 
, " without EMPTY we can't move anything, so we need this assumption
 \n ", 
, 
trunk_spectraExperiments , 
, "  ", 
, " '1' for 3 seconds, '2' for 5 seconds, '3' for 10 seconds and '4' for 20 seconds.
 \n ", 
, " CLOCK GUARANTEES AND ASSUMPTIONS
 \n ", 
, " DESIGNATED FLOOR GUARANTEES
 \n ", 
, " Doors Movement Gars
 \n ", 
, " EMERGENCY GUARANTEES AND ASSUMPIONS
 \n ", 
, " ENVIROMENT'S DESCRIPTION ASSUMPTIONS
 \n ", 
, " G(fullyOpenedStateAtDesignatedFloor&(seconds5)&!memEmergency&!sabbathMode)->closingDoors;
 \n ", 
, " INIT ASSUMPTIONS
 \n ", 
, " INIT GUARANTEES
 \n ", 
, " Movement Gars
 \n ", 
, " REACH TO DESIGNATED FLOORS
 \n ", 
, " RETURN TO FLOOR0 GUARANTEES AND ASSUMPTIONS
 \n ", 
, " REWARD SHOULD BE BY THE NUMBER OF THE FLOOR
 \n ", 
, " SABBATH MODE GUARANTEES AND ASSUMPIONS
 \n ", 
, " SOUND GUARANTEES
 \n ", 
, " Safety Guarantees
 \n ", 
, " Signal indicating that 3,5,10 and 20 seconds have passed (since the last
 \n ", 
, " System's motors and timer commands
 \n ", 
, " Those env variables are being connected to the controller, reporting
 \n ", 
, " Used for 2 cases: 1.if standing in a floor and it calls. 2.if standing in a designated floor don't move.
 \n ", 
, " Used to make sure that an unfair user won't stuck the elevator at one floor
 \n ", 
, " activation of the boolean variable 'countTime_c')
 \n ", 
, " current floor\door state.
 \n ", 
, " env variables indicating calls (from floors).
 \n ", 
, " gar 
 \n ", 
, " inputs
 \n ", 
, " no further comments on the spec, as every gar and asm has a symbolic name.
 \n ", 
, " pRespondsToS(atEmergencyFloor&!doorsWereFullyOpened,doorsAreFullyOpened);
 \n ", 
, " type \n ", 
, " type definitions
 \n ", 
, " ((s5 = RED) -> (s4 = RED)) &
 \n ", 
, " ((s5 = RED) -> prevBallsNotEmpty(5)) ;
 \n ", 
, " (essentially, tower is 3 stations. see the PowerPoint presentation for detailed explanation)
 \n ", 
, " (from <= 2) & //only 3 towers exist
 \n ", 
, " (fromColor = BLUE -> next(fromColor) = RED));
 \n ", 
, " (fromColor = next(toColor)) &
 \n ", 
, " (hanoiFrom <= 2) & //only 3 towers exist
 \n ", 
, " (hanoiIsMoving -> !hanoiSetColor(hanoiFrom, t0)) &
 \n ", 
, " (hanoio <= 2) & //only 3 towers exist
 \n ", 
, " (r0 > 1 -> next(t0) != EMPTY) &
 \n ", 
, " (r1 > 1 -> next(t1) != EMPTY) &
 \n ", 
, " (r2 > 1 -> next(t2) != EMPTY) 
 \n ", 
, " (s0 = BLUE | s0 = RED) &
 \n ", 
, " (s0 = EMPTY) &
 \n ", 
, " (s1 = BLUE | s1 = RED) &
 \n ", 
, " (s1 = EMPTY) &
 \n ", 
, " (s2 <= s3) &
 \n ", 
, " (s2 = BLUE | s2 = RED) &
 \n ", 
, " (s2 = EMPTY);
 \n ", 
, " (s3 <= s4) &
 \n ", 
, " (s3 = EMPTY) &
 \n ", 
, " (s4 <= s5) ;
 \n ", 
, " (s4 = NOT) &
 \n ", 
, " (s5 = NOT);
 \n ", 
, " (stations[0] = BLUE) &
 \n ", 
, " (stations[1] = GREEN) &
 \n ", 
, " (stations[2] = RED) &
 \n ", 
, " (stations[3] = BLUE) &
 \n ", 
, " (stations[4] = EMPTY) &
 \n ", 
, " (stations[5] = NOT_EXISTS) ;
 \n ", 
, " (t0 = BLUE) &
 \n ", 
, " (t1 = GREEN) &
 \n ", 
, " (t2 = RED);
 \n ", 
, " (task = HANOI -> next(task) = SCAN);
 \n ", 
, " (task = SCAN -> next(task) = SORT) &
 \n ", 
, " (task = SORT -> next(task) = HANOI) &
 \n ", 
, " (task = SORT -> next(task) = SCAN) ;
 \n ", 
, " (to <= 2) & //only 3 towers exist
 \n ", 
, " (toColor = next(fromColor)) ;
 \n ", 
, " (we expressed this in the code in a close but different way as the above is an asm about aux variables) 
 \n ", 
, " ); 
 \n ", 
, " */
 \n ", 
, " /*
 \n ", 
, " // (s1 = EMPTY) &
 \n ", 
, " // (s2 = EMPTY);
 \n ", 
, " // hanoiAsms :=
 \n ", 
, " // hanoiAsms := //initially, only the first tower is occupied 
 \n ", 
, " // s0 != NOT &
 \n ", 
, " // s1 != NOT &
 \n ", 
, " // s2 != NOT ;
 \n ", 
, " // swapping 'from' from red to blue and vice versa yields swapping the red and the blue again and again 
 \n ", 
, " //HANOI_MOVE,
 \n ", 
, " //MANUAL_MOVE, //move from 'from' to 'to'
 \n ", 
, " //MOVE_DOWN,
 \n ", 
, " //MOVE_LEFT,
 \n ", 
, " //MOVE_RIGHT,
 \n ", 
, " //MOVE_UP,
 \n ", 
, " //SHUT OFF,
 \n ", 
, " //STOP_MOVING,
 \n ", 
, " //and there will be two asms: G dec, GF strictDec
 \n ", 
, " //asm G (task = EXCHANGE & next(task) != EXCHANGE) -> from = 1;
 \n ", 
, " //asm G next(task) = SORT;
 \n ", 
, " //asm G second -> next(task) = task;
 \n ", 
, " //aux boolean second;
 \n ", 
, " //gar !second;
 \n ", 
, " //gar G next(second);
 \n ", 
, " //gathering the red balls to the start (if some ball is red, then so is its successor, and so on)
 \n ", 
, " //in future version there will be dec and strictDec predicates for strict and non-strict inequalities,
 \n ", 
, " //incrementColor(from);
 \n ", 
, " 3 Hanoi towers
 \n ", 
, " ??
 \n ", 
, " ?? to exchange between commented & uncommented 
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra missions.txt moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra pippo.txt requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra tmp.txt trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra 
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra missions.txt moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra pippo.txt requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra tmp.txt trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra --------- HANOI TASK -------------------
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra missions.txt moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra pippo.txt requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra tmp.txt trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra ----------- EXCHANGE TASK ---------------
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra missions.txt moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra pippo.txt requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra tmp.txt trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra ------------------- GATHER REDS TASK ------------------
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra missions.txt moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra pippo.txt requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra tmp.txt trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra ------------------- SWAP_RED_AND_BLUE TASK ----------------
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra missions.txt moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra pippo.txt requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra tmp.txt trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra ----------------------- MOVE_RED_LEFT TASK ----------------------
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra missions.txt moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra pippo.txt requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra tmp.txt trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra Notice also that we also may pass through from=EMPTY, or from=to
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra missions.txt moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra pippo.txt requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra tmp.txt trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra Notice that when !exists(from+1), then also !exists(from+2), etc.,
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra missions.txt moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra pippo.txt requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra tmp.txt trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra Recall that in Hanoi task moving from 'from' to 'to' gets another interpretation
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra missions.txt moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra pippo.txt requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra tmp.txt trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra We iterate over all existing values of 'from' in a cyclic manner
 \n ", 
, " AirportShuttleProject_AirportShuttle1_AirportShuttleWithTechnicalJob_275.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_144.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_145.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_153.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_158.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_160.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_161.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_162.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_163.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_169.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_174.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_188.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_196.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_199.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_200.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_201.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_203.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_204.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_213.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_214.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_218.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_221.spectra AirportShuttleProject_AirportShuttle1_AirportShuttle_242.spectra AirportShuttle_AirportShuttle_49.spectra ConvoyCar_ConvoyCarSpec_121.spectra ConvoyCar_ConvoyCarSpec_255.spectra ConvoyCar_ConvoyCarSpec_285.spectra ConvoyCar_ConvoyCarSpec_288.spectra ConvoyCar_ConvoyCarSpec_290.spectra ConvoyCar_ConvoyCarSpec_303.spectra ConvoyCar_ConvoyCarSpec_307.spectra ConvoyCar_ConvoyCarSpec_311.spectra ConvoyCar_ConvoyCarSpec_85.spectra ConvoyCar_ConvoyCarSpec_86.spectra Elevator_cmp_Elevator_120.spectra Elevator_cmp_Elevator_156.spectra Elevator_cmp_Elevator_181.spectra Elevator_cmp_Elevator_318.spectra Elevator_cmp_Elevator_321.spectra Elevator_cmp_Elevator_42.spectra Elevator_cmp_Elevator_54.spectra Elevator_cmp_Elevator_55.spectra Elevator_cmp_Elevator_71.spectra Elevator_cmp_Elevator_80.spectra Elevator_cmp_Elevator_94.spectra Elevator_cmp_EqualFloorsNoGF_321.spectra Elevator_cmp_EqualFloorsWithGF_321.spectra Elevator_cmp_FavoriteFloor3NoGF_321.spectra Elevator_cmp_FavoriteFloor3WithGF_321.spectra Elevator_cmp_beckup_Elevator_118.spectra Elevator_cmp_beckup_Elevator_72.spectra Elevator_cmp_beckup_Elevator_88.spectra ExitModule_ParkingSpec_194.spectra ParkingModule_ParkingSpec_168.spectra ParkingModule_ParkingSpec_173.spectra ParkingModule_ParkingSpec_187.spectra ParkingModule_ParkingSpec_192.spectra SimpleVehicle2_VehicleSpec_103.spectra SimpleVehicle_VehicleSpecNoManualWithButtonRealizable_286.spectra SimpleVehicle_VehicleSpecNoManualWithOutButtonRealizable_286.spectra SimpleVehicle_VehicleSpec_101.spectra SimpleVehicle_VehicleSpec_125.spectra SimpleVehicle_VehicleSpec_131.spectra SimpleVehicle_VehicleSpec_148.spectra SimpleVehicle_VehicleSpec_151.spectra SimpleVehicle_VehicleSpec_197.spectra SimpleVehicle_VehicleSpec_202.spectra SimpleVehicle_VehicleSpec_209.spectra SimpleVehicle_VehicleSpec_21.spectra SimpleVehicle_VehicleSpec_210.spectra SimpleVehicle_VehicleSpec_211.spectra SimpleVehicle_VehicleSpec_212.spectra SimpleVehicle_VehicleSpec_22.spectra SimpleVehicle_VehicleSpec_24.spectra SimpleVehicle_VehicleSpec_248.spectra SimpleVehicle_VehicleSpec_254.spectra SimpleVehicle_VehicleSpec_257.spectra SimpleVehicle_VehicleSpec_272.spectra SimpleVehicle_VehicleSpec_33.spectra SimpleVehicle_VehicleSpec_39.spectra SimpleVehicle_VehicleSpec_52.spectra SimpleVehicle_VehicleSpec_56.spectra SimpleVehicle_VehicleSpec_6.spectra SimpleVehicle_VehicleSpec_63.spectra SimpleVehicle_VehicleSpec_70.spectra V0_ConvoyCar_ConvoyCarSpec_293.spectra V2_ConvoyCar_ConvoyCarSpec_296.spectra V4_ConvoyCar_ConvoyCarSpec_298.spectra V5_ConvoyCar_ConvoyCarSpec_299.spectra V6_ConvoyCar_ConvoyCarSpec_300.spectra V7_ConvoyCar_ConvoyCarSpec_301.spectra V8_ConvoyCar_ConvoyCarSpec_302.spectra missions.txt moveAndScan_moveAndScan_178.spectra moveAndScan_moveAndScan_184.spectra moveAndScan_moveAndScan_186.spectra pippo.txt requirementScript.sh roboticarm_Robot_122.spectra roboticarm_Robot_223.spectra roboticarm_Robot_225.spectra roboticarm_Robot_226.spectra roboticarm_Robot_227.spectra roboticarm_Robot_228.spectra roboticarm_Robot_229.spectra roboticarm_Robot_230.spectra roboticarm_Robot_231.spectra roboticarm_Robot_232.spectra roboticarm_Robot_233.spectra roboticarm_Robot_234.spectra roboticarm_Robot_235.spectra roboticarm_Robot_236.spectra roboticarm_Robot_237.spectra roboticarm_Robot_238.spectra roboticarm_Robot_241.spectra roboticarm_Robot_256.spectra roboticarm_Robot_289.spectra roboticarm_Robot_304.spectra roboticarm_Robot_313.spectra roboticarm_Robot_74.spectra roboticarm_Robot_76.spectra roboticarm_Robot_82.spectra roboticarm_Robot_87.spectra tmp.txt trunk_spectraExperiments_Elevator_cmp_Elevator_281.spectra trunk_spectraExperiments_Elevator_cmp_Elevator_314.spectra unrealizable v1_ConvoyCar_ConvoyCarSpec_294.spectra so we we're in the last existing value
 \n ", 
, " Boolean variable that indicates whether or not the robotic arm is moving the ball in station 'from' to the (presumably empty) station 'to'
 \n ", 
, " EXCHANGE
 \n ", 
, " EXCHANGE, //exchanges two different colored balls using mode = MOVE
 \n ", 
, " G
 \n ", 
, " G 
 \n ", 
, " G (mode = INIT) -> saveAll;
 \n ", 
, " G (task = GATHER_REDS & !gatherRedsDone) -> next(task) = GATHER_REDS;
 \n ", 
, " G (task = GATHER_REDS & gatherRedsDone) -> !isMoving;
 \n ", 
, " G (task = HANOI & !hanoiDone) -> next(task) = HANOI;
 \n ", 
, " G (task = HANOI & hanoiIsMoving & hanoiAsms & hanoiLegalMove) ->
 \n ", 
, " G (task = HANOI & isMoving & hanoiAsms & hanoiLegalMove) ->
 \n ", 
, " G (task = MOVE_RED_LEFT & !moveRedLeftDone) -> next(task) = MOVE_RED_LEFT;
 \n ", 
, " G (task = MOVE_RED_LEFT & moveRedLeftDone) -> !isMoving;
 \n ", 
, " G (task = SORT & !sortDone) -> next(task) = SORT; 
 \n ", 
, " G (task = SWAP_RED_AND_BLUE) ->
 \n ", 
, " G (task!=EXCHANGE & next(task)=HANOI & !next(isMoving)) -> next(from) = 1;
 \n ", 
, " G isMoving & task = HANOI -> onExchangeSave;
 \n ", 
, " G isMoving -> (onExchangeSave & swap);
 \n ", 
, " G next(task)!= EXCHANGE;
 \n ", 
, " G task = EXCHANGE -> (isMoving & incrementFrom);
 \n ", 
, " G task = HANOI & !hanoiDone -> hanoiIsMoving;
 \n ", 
, " G task = HANOI & hanoiDone -> !isMoving; 
 \n ", 
, " G task = HANOI & isMoving -> hanoiLegalMove;
 \n ", 
, " G task = SORT & !sortDone -> isMoving;
 \n ", 
, " G task = SORT & sortDone -> !isMoving;
 \n ", 
, " GATHER_REDS
 \n ", 
, " GATHER_REDS,
 \n ", 
, " GF (task = GATHER_REDS & gatherRedsAsms) -> gatherRedsDone;
 \n ", 
, " GF (task = HANOI & hanoiAsms) -> hanoiDone;
 \n ", 
, " GF (task = MOVE_RED_LEFT & moveRedLeftAsms) -> moveRedLeftDone;
 \n ", 
, " GF (task = SORT & sortAsms) -> sortDone;
 \n ", 
, " GF blueArray;
 \n ", 
, " GF sortingAssumptions ->!sorted;
 \n ", 
, " HANOI
 \n ", 
, " HANOI_MOVE,
 \n ", 
, " However, this time we move from tower to tower (rather than from station to station), and thus we have different gars and asms 
 \n ", 
, " INIT happens only ones
 \n ", 
, " Integers that indicate the "index" of the station from/to which the ball is moved 
 \n ", 
, " MANUAL_MOVE, //move from 'from' to 'to'
 \n ", 
, " MOVE_DOWN,
 \n ", 
, " MOVE_LEFT,
 \n ", 
, " MOVE_RED_LEFT
 \n ", 
, " MOVE_RED_LEFT,
 \n ", 
, " MOVE_RIGHT,
 \n ", 
, " MOVE_UP,
 \n ", 
, " SCAN
 \n ", 
, " SHUT OFF,
 \n ", 
, " SORT 
 \n ", 
, " STOP_MOVING,
 \n ", 
, " SWAP_RED_AND_BLUE
 \n ", 
, " SWAP_RED_AND_BLUE,
 \n ", 
, " Tasks that the user chooses
 \n ", 
, " The stations
 \n ", 
, " Their colors indicate the colors of the balls they contain
 \n ", 
, " These variables store the colors of the stations that 'from' and 'to' point to
 \n ", 
, " We didn't define it as an array ('env Color[4] s'), as it is not supported in the Java (Or told us to do it) 
 \n ", 
, " additional asms and gars
 \n ", 
, " all of the colors stay in their positions
 \n ", 
, " all of the stations (excluding empty and non-existing stations)
 \n ", 
, " all tasks
 \n ", 
, " all the colors stay in their positions
 \n ", 
, " all the towers stay the same
 \n ", 
, " also similar to above: these gars ensure that hanoiFromColor, hanoiToColor store the colors that hanoiFrom, hanoiTo point to
 \n ", 
, " also similar to fromColor, toColor
 \n ", 
, " always the first time we have task = HANOI, hanoiStrongAsms is satisfied 
 \n ", 
, " and 'from' and 'to' swaps their balls (the empty ball and the non-empty ball exchange their locations)
 \n ", 
, " and there will be two asms: G dec, GF strictDec
 \n ", 
, " and when its value is found, it swaps the values of 'from' and 'to'
 \n ", 
, " asm
 \n ", 
, " asm G !initDone & next(initDone) -> !blueArray;
 \n ", 
, " asm G (task = EXCHANGE & next(task) != EXCHANGE) -> from = 1;
 \n ", 
, " asm G (task = EXCHANGE & next(task) != EXCHANGE) -> from = 1; \n ", 
, " asm G (task = SORT & !sorted) -> next(task) = SORT;
 \n ", 
, " asm G firstStationsExist;
 \n ", 
, " asm G next(colorExists(EMPTY)) ; 
 \n ", 
, " asm G next(counter) = 0 -> next(correspondingR) = EMPTY
 \n ", 
, " asm G next(movingAsms);
 \n ", 
, " asm G next(someColorExists);
 \n ", 
, " asm G next(task) = SCAN;
 \n ", 
, " asm G next(task) = SCAN; \n ", 
, " asm G next(task) = SORT;
 \n ", 
, " asm G next(task) = task | nextTask;
 \n ", 
, " asm G second -> next(task) = task;
 \n ", 
, " asm G secondStep -> sortingAssumptions;
 \n ", 
, " asm G setColor(1, RED) & setColor(2, BLUE);
 \n ", 
, " asm G task != HANOI -> next(hanoiStrongAsms);
 \n ", 
, " asm G task = SCAN -> next(hanoiStrongAsms);
 \n ", 
, " asm G task = SCAN -> next(s1) = BLUE;
 \n ", 
, " asm G task = SCAN -> next(s1) = BLUE; \n ", 
, " asm G task = SCAN -> next(strongAsm);
 \n ", 
, " asm G task = SORT;
 \n ", 
, " asm GF blueArray;
 \n ", 
, " asm GF someIsEmpty;
 \n ", 
, " asm continueGatherUntilDone:
 \n ", 
, " asm continueHanoiUntilDone:
 \n ", 
, " asm continueMoveRedUntilDone:
 \n ", 
, " asm continueSortUntilDone:
 \n ", 
, " asm hanoiStrongAsms;
 \n ", 
, " asm movingAsms;
 \n ", 
, " asm myIff: 
 \n ", 
, " asm noBlue:
 \n ", 
, " asm saveOnInit:
 \n ", 
, " asm saveOnMoving:
 \n ", 
, " asm sortingAssumptions;
 \n ", 
, " asm strongAssumptions; 
 \n ", 
, " asm task = SCAN;
 \n ", 
, " asserts that s contains some ball with this color
 \n ", 
, " asserts that s[i]!=EMPTY forall i<=index
 \n ", 
, " asserts that s[index] != NOT
 \n ", 
, " asserts that the station in this index exists
 \n ", 
, " assign in all time-stamps but the first (that has been already assigned above)
 \n ", 
, " assign initially
 \n ", 
, " assigns color = s[index];
 \n ", 
, " assigns colorIndex = colors[index];
 \n ", 
, " assumedArray :=
 \n ", 
, " assumptions for the first step of Hanoi riddle task
 \n ", 
, " at the end, only the third tower is occupied
 \n ", 
, " aux boolean second;
 \n ", 
, " boolean variable that indicates whether or not the robotic arm is moving the ball in station 'from' to the (presumably empty) station 'to'
 \n ", 
, " but the above is not well-separated, so we chose this formulation
 \n ", 
, " color != EMPTY & color != NOT;
 \n ", 
, " contain balls are colored in 'color' (the input color) 
 \n ", 
, " counter remains unchanged if it points to a tower that is not involved in the current move
 \n ", 
, " counters that count how many disks each tower contain
 \n ", 
, " decrement the counter if it points to a tower from which a disk is being taken
 \n ", 
, " define
 \n ", 
, " define 
 \n ", 
, " define noNextColorClash := (aColor != bColor) -> (a != b);
 \n ", 
, " defined similarly to isMoving, from, to that defined above.
 \n ", 
, " defining next(fromColor)
 \n ", 
, " ensuring move legality
 \n ", 
, " ensuring move legality 
 \n ", 
, " equivalent to asm G hanoiAsms, and written this way for well-separation reasons, as explained above
 \n ", 
, " gar
 \n ", 
, " gar !second;
 \n ", 
, " gar G !sortDone -> next(isMoving);
 \n ", 
, " gar G !working -> next(mode != WAITING); \n ", 
, " gar G (mode != WAITING) -> next(mode = WAITING);
 \n ", 
, " gar G blueArray;
 \n ", 
, " gar G next(a) =1 & next(b) = 2;
 \n ", 
, " gar G next(noNextColorClash);
 \n ", 
, " gar G next(second);
 \n ", 
, " gar G noNextColorClash;
 \n ", 
, " gar G task = SCAN -> next(from = 1 & to = 0);
 \n ", 
, " gar G task = SCAN -> next(from) = 1 & next(to) = 0;
 \n ", 
, " gar G task = SCAN -> next(isMoving);
 \n ", 
, " gar GF !blueArray;
 \n ", 
, " gar GF mode = MOVE & from = 0 & to = 1;
 \n ", 
, " gar a = 1 & b = 2;
 \n ", 
, " gar a!=b; 
 \n ", 
, " gar aColor = RED & bColor = BLUE;
 \n ", 
, " gar noNextColorClash;
 \n ", 
, " gar that strictly defines the expected behavior of the counters
 \n ", 
, " gatherRedsAsms :=
 \n ", 
, " gatherRedsDone :=
 \n ", 
, " gathering the red balls to the start (if some ball is red, then so is its predecessor, and so on)
 \n ", 
, " gathering the red balls to the start (if some ball is red, then so is its successor, and so on)
 \n ", 
, " given that from = fromVal, it iterates over all possible values of 'to'
 \n ", 
, " hanoiAsms :=
 \n ", 
, " hanoiAsms := //initially, only the first tower is occupied 
 \n ", 
, " hanoiDone := //at the end, only the second tower is occupied
 \n ", 
, " hanoiFrom = 1 &
 \n ", 
, " hanoiIncrementColor(hanoiFrom);
 \n ", 
, " hanoiIsMoving &
 \n ", 
, " hanoiIsMoving should is not allowed in other tasks
 \n ", 
, " hanoiLegalMove :=
 \n ", 
, " hanoiStrongAsms :=
 \n ", 
, " hanoiTo = 0 ; 
 \n ", 
, " if !isMoving then all stations store the same balls 
 \n ", 
, " if counter is greater than one, then after taking from it, there will be >0 disks, and thus the color won't be EMPTY.
 \n ", 
, " if counter less than or equal to one, then after taking from it the current disk, it'll be 0 disks, and thus the color will be EMPTY
 \n ", 
, " if isMoving, then all stations but 'from' and 'to' store the same balls,
 \n ", 
, " in future version there will be dec and strictDec predicates for strict and non-strict inequalities,
 \n ", 
, " increment the counter if it points to a tower to which a disk is being given
 \n ", 
, " incrementColor(from);
 \n ", 
, " incrementColor(from); 
 \n ", 
, " incrementColor(hanoiFrom); 
 \n ", 
, " incrementFrom :=
 \n ", 
, " index in the enum. Thus, in our case, RED < GREEN < BLUE < EMPTY < NOT
 \n ", 
, " initialize the counters such that all of the three balls are in the first tower
 \n ", 
, " integers that indicate the "index" of the station from/to which the ball is moved 
 \n ", 
, " isColor(s0) &
 \n ", 
, " isColor(s1) &
 \n ", 
, " isColor(s2) &
 \n ", 
, " legal move is a move that moves (or, puts) non empty disk to (or, on) bigger disk (maybe the latter is empty)
 \n ", 
, " move requires 'from' to exist, and 'to' to be empty
 \n ", 
, " moveRedLeftAsms :=
 \n ", 
, " moveRedLeftDone :=
 \n ", 
, " next(color) >= color;
 \n ", 
, " next(t0) != BLUE &
 \n ", 
, " next(t1) != BLUE &
 \n ", 
, " next(t2) != BLUE ; \n ", 
, " nextTask :=
 \n ", 
, " no tower can be NOT
 \n ", 
, " notice that there's no asm of keepOnInit, as nothing to keep in the init
 \n ", 
, " notice that we really have both
 \n ", 
, " once the robotic arm finishes gathering the red balls, it stops moving
 \n ", 
, " once the robotic arm finishes moving as many red balls left as possible, it stops moving
 \n ", 
, " once the robotic arm finishes solving the Hanoi Tower riddle, it stops moving
 \n ", 
, " once the robotic arm finishes sorting the balls, it stops moving
 \n ", 
, " only when the working becomes false, and after mode was already INIT
 \n ", 
, " optimization for compressing the symbolic automaton
 \n ", 
, " otherwise, sorting were not possible, as sorting never moves non-existing stations, and in sorted array, the non-existing ones should be to the end
 \n ", 
, " predicate hanoiIncrementColor(Int (0..2) index):
 \n ", 
, " predicate incrementColor(Int (0..5) index):
 \n ", 
, " predicate prevBallsNotEmpty(Int(0..5) index):
 \n ", 
, " preventing the counters from changing their values when we don't move the disks 
 \n ", 
, " s0 != NOT &
 \n ", 
, " s0 = EMPTY &
 \n ", 
, " s1 != NOT &
 \n ", 
, " s1 = RED &
 \n ", 
, " s2 != NOT ;
 \n ", 
, " s2 = BLUE &
 \n ", 
, " set next(s[index]) = color
 \n ", 
, " set next(t[index]) = color
 \n ", 
, " set the next colors to aColor and bColor
 \n ", 
, " setColor(to, fromColor) ;
 \n ", 
, " similar to assign
 \n ", 
, " similar to colorExists that was defined above 
 \n ", 
, " somethingEmpty & firstStationsExist & somethingExists & !equal;
 \n ", 
, " somethingEmpty & firstStationsExist;
 \n ", 
, " store the current colors in aColor and bColor 
 \n ", 
, " swap :=
 \n ", 
, " swap assigns next(fromColor)=toColor & next(toColor)=fromColor
 \n ", 
, " swapping 'from' from red to blue and vice versa yields swapping the red and the blue again and again 
 \n ", 
, " swapping 'fromColor' from red to blue and vice versa yields swapping the red and the blue again and again 
 \n ", 
, " t0 = RED &
 \n ", 
, " t1 = EMPTY &
 \n ", 
, " t2 = EMPTY;
 \n ", 
, " task = HANOI & hanoiIsMoving ->
 \n ", 
, " tasks that the user chooses
 \n ", 
, " the colors are enums, and the Spectra defines a total order among them using their
 \n ", 
, " the following is equivalent to:
 \n ", 
, " the robotic arm eventually succeeds to gather the red balls
 \n ", 
, " the robotic arm eventually succeeds to move as many red balls left as possible
 \n ", 
, " the robotic arm eventually succeeds to solve the Hanoi Tower riddle
 \n ", 
, " the robotic arm eventually succeeds to sort the balls 
 \n ", 
, " the stations
 \n ", 
, " the task stays GATHER_REDS as long as we are not done
 \n ", 
, " the task stays HANOI as long as we are not done
 \n ", 
, " the task stays MOVE_RED_LEFT as long as we are not done
 \n ", 
, " the task stays SORT as long as we are not done
 \n ", 
, " the tower that is not involved in the move stays unchanged
 \n ", 
, " their colors indicate the colors of the balls they contain
 \n ", 
, " these \n ", 
, " these variables store the colors of the stations that 'from' and 'to' point to
 \n ", 
, " these vars store the colors of the balls that 'from' and 'to' point to
 \n ", 
, " this implies that in the first step of HANOI task, initCounters is done
 \n ", 
, " this is added to make the environment well-separated
 \n ", 
, " this is in contrast to hanoiAsms that are assumptions that we always assume (not only in the first step) 
 \n ", 
, " thus, it must be some color that is not on top of the towers (as we assume that all the 3 colors: RED, GREEN, BLUE appear in the task)
 \n ", 
, " to avoid just moving one ball back and forth, we have the incrementFrom 
 \n ", 
, " to unsort we must always move
 \n ", 
, " toColor <= fromColor;
 \n ", 
, " true;
 \n ", 
, " we decided for the sake of simplicity to assume that no NOT color exists
 \n ", 
, " we needed to write TWO gars for each assignment (rather than just 'gar G assign(from, fromColor)'), to get well-separated code (Jan told us to do it) 
 \n ", 
, " we start with scan
 \n ", 
, " we're done when there's no red ball with empty place to its left 
 \n ", 
, " when !hanoiIsMoving, everything's stays the same
 \n ", 
, " when we swap between 'from' and 'to' we need to save the values of all the places except 'from' and 'to' 
 \n ", 
, " which is equivalent to nextColor(fromColor, fromCount), where 'fromCount' is a synonym to the corresponding 'r'
 \n ", 
, " without EMPTY we can't move anything, so we need this assumption
 \n ", 
, 
