diff --git a/Beispiele/CAN_BUS_MC.json b/Beispiele/CAN_BUS_tlc.json similarity index 100% rename from Beispiele/CAN_BUS_MC.json rename to Beispiele/CAN_BUS_tlc.json diff --git a/Beispiele/CAN_BUS_tlc.mch b/Beispiele/CAN_BUS_tlc.mch new file mode 100644 index 0000000000000000000000000000000000000000..515fba702b65f99665dd020b4e93057b90c86fe2 --- /dev/null +++ b/Beispiele/CAN_BUS_tlc.mch @@ -0,0 +1,314 @@ +MACHINE CAN_BUS_tlc + +SETS + T1state={T1_EN,T1_CALC,T1_SEND,T1_WAIT}; + T2mode={T2MODE_SENSE,T2MODE_TRANSMIT,T2MODE_RELEASE}; + T2state={T2_EN,T2_RCV,T2_PROC,T2_CALC,T2_SEND,T2_WAIT,T2_RELEASE}; + T3state={T3_READY,T3_WRITE,T3_RELEASE,T3_READ,T3_PROC,T3_WAIT} +CONSTANTS + NATSET +PROPERTIES + NATSET = 0..5 +VARIABLES + BUSpriority, + BUSvalue, + BUSwrite, + T1_state, + T1_timer, + T1_writevalue, + T2_mode, + T2_readpriority, + T2_readvalue, + T2_state, + T2_timer, + T2_writevalue, + T2v, + T3_enabled, + T3_evaluated, + T3_readpriority, + T3_readvalue, + T3_state +INVARIANT + T2v : INTEGER & + T3_evaluated : BOOL & + T3_enabled : BOOL & + T1_state : T1state & + T2_state : T2state & + T3_state : T3state & + T1_writevalue : INTEGER & + T2_writevalue : INTEGER & + T2_readvalue : INTEGER & + T1_timer : NATURAL & + T2_timer : NATURAL & + T2_mode : T2mode & + BUSvalue : INTEGER & + BUSpriority : NATSET & + T3_readvalue : INTEGER & + T3_readpriority : NATSET & + T2_readpriority : NATSET & + BUSwrite : NATSET +-> INTEGER & + /*BUSwrite : FIN(NATSET*INTEGER) &*/ + BUSwrite /= {} & + 0 : dom(BUSwrite) +INITIALISATION + T2v := 0 + || + T3_evaluated := TRUE + || + T3_enabled := TRUE + || + T1_state := T1_EN + || + T2_state := T2_EN + || + T3_state := T3_READY + || + T1_writevalue := 0 + || + T2_writevalue := 0 + || + T2_readvalue := 0 + || + T2_readpriority := 0 + || + T3_readvalue := 0 + || + T3_readpriority := 0 + || + T1_timer := 2 + || + T2_timer := 3 + || + BUSwrite := {0 |-> 0} + || + BUSvalue := 0 + || + BUSpriority := 0 + || + T2_mode := T2MODE_SENSE +OPERATIONS + T1Evaluate = + PRE + /* @grd1 */ T1_timer = 0 + & /* @grd3 */ T1_state = T1_EN + THEN + T1_timer := 0 + || + T1_state := T1_CALC + END; + T1Calculate(p) = + PRE + p : -1..3 & + /* @grd2 */ T1_state = T1_CALC + THEN + T1_writevalue := p + || + T1_state := T1_SEND + END; + T1SendResult(ppriority,pv) = + PRE + /* @grd2 */ ppriority = 3 + & /* @grd1 */ pv = T1_writevalue + & /* @grd3 */ T1_state = T1_SEND + THEN + BUSwrite := BUSwrite <+ {ppriority |-> pv} + || + T1_state := T1_WAIT + END; + T1Wait(pt) = + PRE + /* @grd1 */ pt = 2 + & /* @grd2 */ T1_state = T1_WAIT + THEN + T1_timer := pt + || + T1_state := T1_EN + END; + T2Evaluate = + PRE + /* @grd1 */ T2_timer = 0 + & /* @grd3 */ T2_state = T2_EN + THEN + T2_timer := 0 + || + T2_state := T2_RCV + END; + T2ReadBus(ppriority,pv) = + PRE + /* @grd2 */ ppriority = BUSpriority + & /* @grd1 */ pv = BUSvalue + & /* @grd3 */ T2_state = T2_RCV + THEN + T2_readvalue := pv + || + T2_readpriority := ppriority + || + T2_state := T2_PROC + END; + T2Reset = + PRE + /* @grd1 */ T2_readpriority = 4 + & /* @grd2 */ T2_state = T2_PROC + THEN + T2_writevalue := T2v + || + T2v := 0 + || + T2_state := T2_SEND + || + T2_mode := T2MODE_TRANSMIT + END; + T2Complete = + PRE + /* @grd2 */ T2_state = T2_PROC + & /* @grd1 */ T2_readpriority = 5 + & /* @grd3 */ T2_mode = T2MODE_TRANSMIT + THEN + T2_state := T2_RELEASE + || + T2_mode := T2MODE_SENSE + END; + T2ReleaseBus(ppriority) = + PRE + /* @grd1 */ ppriority = T2_readpriority + & /* @grd3 */ ppriority : dom(BUSwrite) + & /* @grd4 */ T2_state = T2_RELEASE + THEN + BUSwrite := {ppriority} <<| BUSwrite + || + T2_state := T2_WAIT + END; + + T2Calculate = + PRE + /* @grd1 */ T2_readpriority = 3 + & /* @grd2 */ T2_state = T2_PROC + THEN + T2v := T2_readvalue + || + T2_state := T2_WAIT + END; + + T2WriteBus(ppriority,pv) = + PRE + /* @grd2 */ ppriority = 5 + & /* @grd1 */ pv = T2_writevalue + & /* @grd3 */ T2_state = T2_SEND + THEN + BUSwrite := BUSwrite <+ {ppriority |-> pv} + || + T2_state := T2_WAIT + END; + + T2Wait(pt) = + PRE + /* @grd1 */ pt = 3 + & /* @grd2 */ T2_state = T2_WAIT + THEN + T2_timer := pt + || + T2_state := T2_EN + END; + + T3Initiate = + PRE + /* @grd1 */ T3_state = T3_READY + & /* @grd2 */ T3_evaluated = FALSE + & /* @grd3 */ T3_enabled = TRUE + THEN + T3_state := T3_WRITE + || + T3_enabled := FALSE + END; + + T3Evaluate = + PRE + /* @grd1 */ T3_state = T3_READY + & /* @grd2 */ T3_evaluated = FALSE + & /* @grd3 */ T3_enabled = FALSE + THEN + T3_state := T3_READ + END; + + T3writebus(ppriority,pv) = + PRE + /* @grd2 */ ppriority = 4 + & /* @grd1 */ pv = 0 + & /* @grd3 */ T3_state = T3_WRITE + THEN + BUSwrite := BUSwrite <+ {ppriority |-> pv} + || + T3_state := T3_WAIT + END; + + T3Read(ppriority,pv) = + PRE + /* @grd2 */ ppriority = BUSpriority + & /* @grd1 */ pv = BUSvalue + & /* @grd4 */ T3_state = T3_READ + THEN + T3_readvalue := pv + || + T3_readpriority := ppriority + || + T3_state := T3_PROC + END; + + T3Poll = + PRE + /* @grd1 */ T3_readpriority < 5 + & /* @grd2 */ T3_state = T3_PROC + THEN + T3_state := T3_WAIT + END; + + T3ReleaseBus(ppriority) = + PRE + /* @grd1 */ ppriority = 4 + & /* @grd2 */ T3_readpriority = 5 + & /* @grd3 */ T3_state = T3_PROC + THEN + BUSwrite := {ppriority} <<| BUSwrite + || + T3_state := T3_RELEASE + END; + + T3Wait = + PRE + /* @grd1 */ T3_state = T3_WAIT + THEN + T3_state := T3_READY + || + T3_evaluated := TRUE + END; + + T3ReEnableWait = + PRE + /* @grd1 */ T3_state = T3_RELEASE + THEN + T3_state := T3_READY + || + T3_evaluated := TRUE + || + T3_enabled := TRUE + END; + + Update(pmax) = + PRE + /* @grd1 */ pmax = max(dom(BUSwrite)) + & /* @grd2 */ T1_timer > 0 + & /* @grd3 */ T2_timer > 0 + & (/* @grd4 */ T3_enabled = TRUE or T3_evaluated = TRUE) + THEN + BUSvalue := BUSwrite(pmax) + || + BUSpriority := pmax + || + T1_timer := T1_timer - 1 + || + T2_timer := T2_timer - 1 + || + T3_evaluated := FALSE + END + +END \ No newline at end of file diff --git a/Beispiele/Cruise_finite1_deterministic_MC.mch b/Beispiele/Cruise_finite1_deterministic_MC.mch new file mode 100644 index 0000000000000000000000000000000000000000..a68b981919f7ad927be02538878f38750870c4c9 --- /dev/null +++ b/Beispiele/Cruise_finite1_deterministic_MC.mch @@ -0,0 +1,593 @@ +/****************************************************************************** +VOLVO CRUISE CONTROLLER ABSTRACT MODEL +* +******************************************************************************/ + + MACHINE + Cruise_finite1_deterministic_MC + +SETS + RSset = {RSnone, RSpos, RSneg, RSequal}; + ODset = {ODnone, ODclose, ODveryclose} + +DEFINITIONS + /*(ObstacleStatusJustChanged = FALSE & CCInitialisationInProgress = FALSE & CruiseSpeedChangeInProgress = FALSE) == (ObstacleStatusJustChanged = FALSE & + CCInitialisationInProgress = FALSE & + CruiseSpeedChangeInProgress = FALSE);*/ + ASSERT_LTL == "G (e(SetCruiseSpeed) => e(CruiseBecomesNotAllowed))"; + ASSERT_LTL1 == "G (e(CruiseBecomesNotAllowed) => e(SetCruiseSpeed))"; + ASSERT_LTL2 == "G (e(CruiseBecomesNotAllowed) => e(ObstacleDisappears))" +/* LTL Formulas + G (e(SetCruiseSpeed) -> e(CruiseBecomesNotAllowed)) TRUE (2.62 seconds) + G (e(CruiseBecomesNotAllowed) -> e(SetCruiseSpeed)) TRUE + G (e(CruiseBecomesNotAllowed) -> e(ObstacleDisappears)) FALSE + G (e(CruiseBecomesAllowed) -> X e(SetCruiseSpeed)) FALSE (12.78 seconds) + G ([CruiseBecomesAllowed] -> X e(SetCruiseSpeed)) TRUE (14.11 seconds) + + G( e(CruiseOff) => Y O [SetCruiseSpeed]) TRUE 12.05 secs (10850 atoms) + +G( e(CruiseOff) => O [CruiseBecomesNotAllowed]) -> FALSE +*/ + VARIABLES + /* User level variables */ + CruiseAllowed, + CruiseActive, + VehicleAtCruiseSpeed, + VehicleCanKeepSpeed, + VehicleTryKeepSpeed, + SpeedAboveMax, + VehicleTryKeepTimeGap, + CruiseSpeedAtMax, + ObstaclePresent, + ObstacleDistance, + ObstacleRelativeSpeed, + ObstacleStatusJustChanged, + CCInitialisationInProgress, + CruiseSpeedChangeInProgress, + + /* Verification support variables */ + NumberOfSetCruise + + + INVARIANT + /* Typing */ + CruiseAllowed:BOOL & + CruiseActive:BOOL & + VehicleAtCruiseSpeed:BOOL & + VehicleCanKeepSpeed:BOOL & + VehicleTryKeepSpeed:BOOL & + SpeedAboveMax:BOOL & + VehicleTryKeepTimeGap:BOOL & + CruiseSpeedAtMax:BOOL & + NumberOfSetCruise:NATURAL & + NumberOfSetCruise:0..1 & /* added by mal */ + ObstaclePresent:BOOL & + ObstacleDistance:ODset & + ObstacleRelativeSpeed:RSset & + ObstacleStatusJustChanged:BOOL & + CCInitialisationInProgress:BOOL & + CruiseSpeedChangeInProgress:BOOL & + + /* Consistency */ + (CruiseActive = FALSE => VehicleAtCruiseSpeed = FALSE) & + (CruiseActive = FALSE => VehicleCanKeepSpeed = FALSE) & + (CruiseActive = FALSE => VehicleTryKeepSpeed = FALSE) & + ((NumberOfSetCruise = 0) <=> (CruiseActive = FALSE)) & + (CruiseActive = FALSE => VehicleTryKeepTimeGap = FALSE) & + (CruiseActive = FALSE => CruiseSpeedAtMax = FALSE) & + (CruiseActive = FALSE => ObstacleDistance = ODnone ) & + (CruiseActive = FALSE => ObstacleStatusJustChanged = FALSE) & + (CruiseActive = FALSE => CCInitialisationInProgress = FALSE) & + (CruiseActive = FALSE => CruiseSpeedChangeInProgress = FALSE) & + (ObstaclePresent = FALSE => VehicleTryKeepTimeGap = FALSE) & + (ObstaclePresent = FALSE => ObstacleDistance = ODnone) & + (ObstaclePresent = FALSE <=> (ObstacleRelativeSpeed = RSnone)) & + ((ObstacleRelativeSpeed = RSequal & ObstacleDistance = ODnone) + => VehicleTryKeepTimeGap = FALSE) & + ((ObstacleRelativeSpeed = RSneg & ObstacleDistance = ODnone) + => VehicleTryKeepTimeGap = FALSE) & + ((ObstacleRelativeSpeed = RSpos & ObstacleDistance /= ODveryclose) + => VehicleTryKeepTimeGap = FALSE) & + + /* Laws */ + (CruiseAllowed = FALSE => CruiseActive = FALSE) & + (SpeedAboveMax = TRUE => VehicleAtCruiseSpeed = FALSE) & + (CruiseActive = TRUE + => (VehicleTryKeepSpeed = TRUE + or VehicleTryKeepTimeGap = TRUE + or not((ObstacleStatusJustChanged = FALSE & CCInitialisationInProgress = FALSE & CruiseSpeedChangeInProgress = FALSE)))) & + (ObstacleDistance = ODnone & CruiseActive = TRUE & (ObstacleStatusJustChanged = FALSE & CCInitialisationInProgress = FALSE & CruiseSpeedChangeInProgress = FALSE) + => VehicleTryKeepSpeed = TRUE) & + (ObstacleDistance = ODclose & ObstacleRelativeSpeed /= RSpos & (ObstacleStatusJustChanged = FALSE & CCInitialisationInProgress = FALSE & CruiseSpeedChangeInProgress = FALSE) + => VehicleTryKeepTimeGap = TRUE) & + (ObstacleDistance = ODveryclose & (ObstacleStatusJustChanged = FALSE & CCInitialisationInProgress = FALSE & CruiseSpeedChangeInProgress = FALSE) + => VehicleTryKeepTimeGap = TRUE) & + (ObstacleRelativeSpeed = RSpos & ObstacleDistance /= ODveryclose & CruiseActive = TRUE & (ObstacleStatusJustChanged = FALSE & CCInitialisationInProgress = FALSE & CruiseSpeedChangeInProgress = FALSE) + => VehicleTryKeepSpeed = TRUE) + + + INITIALISATION + CruiseAllowed := TRUE || + CruiseActive := FALSE || + VehicleAtCruiseSpeed := FALSE || + VehicleCanKeepSpeed := FALSE || + VehicleTryKeepSpeed := FALSE || + SpeedAboveMax := FALSE || + VehicleTryKeepTimeGap := FALSE || + NumberOfSetCruise := 0 || + CruiseSpeedAtMax:= FALSE || + ObstacleDistance := ODnone || + ObstacleStatusJustChanged := FALSE || + CCInitialisationInProgress := FALSE || + CruiseSpeedChangeInProgress := FALSE || + ObstaclePresent := FALSE || + ObstacleRelativeSpeed := RSnone + + + OPERATIONS + + CruiseBecomesNotAllowed = + SELECT + CruiseAllowed = TRUE + THEN + CruiseAllowed := FALSE || + CruiseActive := FALSE || + VehicleCanKeepSpeed := FALSE || + VehicleTryKeepSpeed := FALSE || + VehicleAtCruiseSpeed := FALSE || + VehicleTryKeepTimeGap := FALSE || + CruiseSpeedAtMax := FALSE || + ObstacleDistance := ODnone || + NumberOfSetCruise := 0 || + ObstacleStatusJustChanged := FALSE || + CCInitialisationInProgress := FALSE || + CruiseSpeedChangeInProgress := FALSE + END; + + + CruiseBecomesAllowed = SELECT + CruiseAllowed = FALSE + THEN + CruiseAllowed := TRUE + END; + + + SetCruiseSpeed(vcks, csam) = + PRE vcks : BOOL & csam : BOOL & CruiseAllowed = TRUE THEN + + CruiseActive := TRUE || + VehicleCanKeepSpeed := vcks || + + IF SpeedAboveMax = FALSE THEN + VehicleAtCruiseSpeed := TRUE || + CruiseSpeedAtMax := csam + ELSE + CruiseSpeedAtMax:=TRUE + END || + ObstacleStatusJustChanged := TRUE || + IF CruiseActive = TRUE THEN + CruiseSpeedChangeInProgress := TRUE + ELSE + CCInitialisationInProgress := TRUE + END || + IF NumberOfSetCruise<1 THEN /* added my mal */ + NumberOfSetCruise := NumberOfSetCruise + 1 + END + + END; + + + CCInitialisationFinished(vtks, vtktg) = + PRE + (vtks : BOOL) & + (vtktg : BOOL) & + (vtks = TRUE + or vtktg = TRUE + or ObstacleStatusJustChanged = TRUE + or CruiseSpeedChangeInProgress = TRUE) & + (ObstaclePresent = FALSE => vtktg = FALSE) & + (ObstacleDistance = ODnone => vtks = TRUE) & + ((ObstacleDistance = ODclose & + ObstacleRelativeSpeed /= RSpos & + ObstacleStatusJustChanged = FALSE & + CruiseSpeedChangeInProgress = FALSE) + => vtktg = TRUE) & + ((ObstacleDistance = ODveryclose & + ObstacleStatusJustChanged = FALSE & + CruiseSpeedChangeInProgress = FALSE) + => vtktg = TRUE) & + ((ObstacleRelativeSpeed = RSpos & + ObstacleDistance /= ODveryclose& + ObstacleStatusJustChanged = FALSE & + CruiseSpeedChangeInProgress = FALSE) + => vtks = TRUE) & + ((ObstacleRelativeSpeed = RSequal & ObstacleDistance = ODnone) + => vtktg = FALSE) & + ((ObstacleRelativeSpeed = RSneg & ObstacleDistance = ODnone) + => vtktg = FALSE) & + ((ObstacleRelativeSpeed = RSpos & ObstacleDistance /= ODveryclose) + => vtktg = FALSE) & + CCInitialisationInProgress = TRUE + THEN + + VehicleTryKeepTimeGap := vtktg || + VehicleTryKeepSpeed := vtks + + END; + + + CCInitialisationDelayFinished = + SELECT + CCInitialisationInProgress = TRUE & + (VehicleTryKeepSpeed = TRUE + or VehicleTryKeepTimeGap = TRUE + or ObstacleStatusJustChanged = TRUE + or CruiseSpeedChangeInProgress = TRUE) & + (ObstacleDistance = ODnone => VehicleTryKeepSpeed = TRUE) & + ((ObstacleDistance = ODclose & + ObstacleRelativeSpeed /= RSpos & + ObstacleStatusJustChanged = FALSE & + CruiseSpeedChangeInProgress = FALSE ) + => (VehicleTryKeepTimeGap = TRUE)) & + ((ObstacleDistance = ODveryclose & + ObstacleStatusJustChanged = FALSE & + CruiseSpeedChangeInProgress = FALSE) + => VehicleTryKeepTimeGap = TRUE) & + ((ObstacleRelativeSpeed = RSpos & + ObstacleDistance /= ODveryclose & + ObstacleStatusJustChanged = FALSE & + CruiseSpeedChangeInProgress = FALSE) + => VehicleTryKeepSpeed = TRUE) + THEN + CCInitialisationInProgress := TRUE + END; + + + CruiseSpeedChangeFinished(vtks, vtktg) = + SELECT + (vtks : BOOL) & + (vtktg : BOOL) & + (vtks = TRUE + or vtktg = TRUE + or ObstacleStatusJustChanged = TRUE + or CCInitialisationInProgress = TRUE) & + (ObstaclePresent = FALSE => vtktg = FALSE) & + (ObstacleDistance = ODnone => vtks = TRUE) & + ((ObstacleDistance = ODclose & + ObstacleRelativeSpeed /= RSpos & + ObstacleStatusJustChanged = FALSE & + CCInitialisationInProgress = FALSE) + => vtktg = TRUE) & + ((ObstacleDistance = ODveryclose & + ObstacleStatusJustChanged = FALSE & + CCInitialisationInProgress = FALSE) + => vtktg = TRUE) & + ((ObstacleRelativeSpeed = RSpos & + ObstacleDistance /= ODveryclose& + ObstacleStatusJustChanged = FALSE & + CCInitialisationInProgress = FALSE) + => vtks = TRUE) & + ((ObstacleRelativeSpeed = RSequal & ObstacleDistance = ODnone) + => vtktg = FALSE) & + ((ObstacleRelativeSpeed = RSneg & ObstacleDistance = ODnone) + => vtktg = FALSE) & + ((ObstacleRelativeSpeed = RSpos & ObstacleDistance /= ODveryclose) + => vtktg = FALSE) & + CruiseSpeedChangeInProgress = TRUE + THEN + + VehicleTryKeepTimeGap := vtktg || + VehicleTryKeepSpeed := vtks + END; + + + CruiseSpeedChangeDelayFinished = + SELECT + CruiseSpeedChangeInProgress = TRUE & + (VehicleTryKeepSpeed = TRUE + or VehicleTryKeepTimeGap = TRUE + or ObstacleStatusJustChanged = TRUE + or CCInitialisationInProgress = TRUE) & + (ObstacleDistance = ODnone => VehicleTryKeepSpeed = TRUE) & + ((ObstacleDistance = ODclose & + ObstacleRelativeSpeed /= RSpos & + ObstacleStatusJustChanged = FALSE & + CCInitialisationInProgress = FALSE ) + => (VehicleTryKeepTimeGap = TRUE)) & + ((ObstacleDistance = ODveryclose & + ObstacleStatusJustChanged = FALSE & + CCInitialisationInProgress = FALSE) + => VehicleTryKeepTimeGap = TRUE) & + ((ObstacleRelativeSpeed = RSpos & + ObstacleDistance /= ODveryclose & + ObstacleStatusJustChanged = FALSE & + CCInitialisationInProgress = FALSE) + => VehicleTryKeepSpeed = TRUE) + THEN + CruiseSpeedChangeInProgress := TRUE + END; + + + CruiseOff = + SELECT + CruiseActive = TRUE + THEN + CruiseActive := FALSE || + VehicleCanKeepSpeed := FALSE || + VehicleTryKeepSpeed := FALSE || + VehicleAtCruiseSpeed := FALSE || + VehicleTryKeepTimeGap := FALSE || + CruiseSpeedAtMax := FALSE || + ObstacleDistance := ODnone || + NumberOfSetCruise := 0 || + ObstacleStatusJustChanged := FALSE || + CCInitialisationInProgress := FALSE || + CruiseSpeedChangeInProgress := FALSE + END; + + + ExternalForcesBecomesExtreme = SELECT + VehicleCanKeepSpeed = TRUE + THEN + VehicleCanKeepSpeed := FALSE + END; + + + ExternalForcesBecomesNormal = SELECT + CruiseActive = TRUE & + VehicleCanKeepSpeed = FALSE + THEN + VehicleCanKeepSpeed := TRUE + END; + + + VehicleLeavesCruiseSpeed = + SELECT + VehicleAtCruiseSpeed = TRUE & + (VehicleCanKeepSpeed = FALSE & VehicleTryKeepSpeed = TRUE) or + (VehicleTryKeepSpeed = FALSE) + THEN + VehicleAtCruiseSpeed := FALSE + END; + + + VehicleReachesCruiseSpeed = SELECT + CruiseActive = TRUE & + VehicleAtCruiseSpeed = FALSE & + SpeedAboveMax = FALSE + THEN + VehicleAtCruiseSpeed := TRUE + END; + + + VehicleExceedsMaxCruiseSpeed = SELECT + SpeedAboveMax = FALSE & + (CruiseActive = FALSE + or VehicleCanKeepSpeed = FALSE + or ((ObstacleStatusJustChanged = FALSE & CCInitialisationInProgress = FALSE & CruiseSpeedChangeInProgress = FALSE))) + THEN + SpeedAboveMax := TRUE || + VehicleAtCruiseSpeed := FALSE + END; + + + VehicleFallsBelowMaxCruiseSpeed = SELECT + SpeedAboveMax = TRUE + THEN + SpeedAboveMax := FALSE || + IF (CruiseActive=TRUE) & (CruiseSpeedAtMax = TRUE) THEN + VehicleAtCruiseSpeed := TRUE + END + END; + + ObstacleDistanceBecomesVeryClose = SELECT + ObstacleDistance = ODclose & + ObstacleRelativeSpeed = RSneg + THEN + ObstacleDistance := ODveryclose || + ObstacleStatusJustChanged := TRUE + END; + + ObstacleDistanceBecomesClose = SELECT + ObstaclePresent = TRUE & + CruiseActive = TRUE & + ((ObstacleDistance = ODveryclose & ObstacleRelativeSpeed = RSpos) + or (ObstacleDistance = ODnone & ObstacleRelativeSpeed = RSneg)) + THEN + ObstacleDistance := ODclose || + ObstacleStatusJustChanged := TRUE || + IF (ObstacleRelativeSpeed = RSpos) THEN + VehicleTryKeepTimeGap := FALSE + END + END; + + ObstacleDistanceBecomesBig = SELECT + ObstacleDistance = ODclose & + ObstacleRelativeSpeed = RSpos + THEN + ObstacleStatusJustChanged := TRUE || + ObstacleDistance := ODnone || + VehicleTryKeepTimeGap:= FALSE + END; + + + ObstacleStartsTravelFaster = SELECT + ObstaclePresent = TRUE & + ObstacleRelativeSpeed = RSequal + THEN + ObstacleRelativeSpeed := RSpos || + IF CruiseActive = TRUE THEN + ObstacleStatusJustChanged := TRUE + END || + IF (ObstacleDistance/=ODveryclose) THEN + VehicleTryKeepTimeGap:=FALSE + END + END; + + ObstacleStopsTravelFaster = SELECT + ObstacleRelativeSpeed = RSpos + THEN + ObstacleRelativeSpeed := RSequal || + IF CruiseActive = TRUE THEN + ObstacleStatusJustChanged := TRUE + END + END; + + + ObstacleStartsTravelSlower = SELECT + ObstacleRelativeSpeed = RSequal + THEN + ObstacleRelativeSpeed := RSneg || + IF CruiseActive = TRUE THEN + ObstacleStatusJustChanged := TRUE + END + END; + + + ObstacleStopsTravelSlower = SELECT + ObstacleRelativeSpeed = RSneg + THEN + ObstacleRelativeSpeed := RSequal || + IF CruiseActive = TRUE THEN + ObstacleStatusJustChanged := TRUE + END + END; + + + ObstacleAppearsWhenCruiseActive(ors, od) = + PRE ors : RSset - {RSnone} & od : ODset - {ODnone} & ObstaclePresent = FALSE & CruiseActive = TRUE THEN + ObstaclePresent := TRUE || + ObstacleStatusJustChanged := TRUE || + ObstacleRelativeSpeed := ors || + ObstacleDistance := od + END; + + + ObstacleAppearsWhenCruiseInactive(ors) = + PRE ors : RSset - {RSnone} & ObstaclePresent = FALSE & CruiseActive = FALSE THEN + ObstaclePresent := TRUE || + ObstacleRelativeSpeed := ors || + ObstacleDistance := ODnone + END; + + ObstacleDisappears = SELECT + ObstaclePresent = TRUE + THEN + ObstaclePresent := FALSE || + ObstacleRelativeSpeed := RSnone || + IF CruiseActive = TRUE THEN + ObstacleStatusJustChanged := TRUE + END || + ObstacleDistance := ODnone || + VehicleTryKeepTimeGap := FALSE + END; + + + VehicleManageObstacle(vtks, vtktg) = + SELECT + (vtks : BOOL) & + (vtktg : BOOL) & + (vtks = TRUE + or vtktg = TRUE + or CCInitialisationInProgress = TRUE + or CruiseSpeedChangeInProgress = TRUE) & + (ObstaclePresent = FALSE => vtktg = FALSE) & + (ObstacleDistance = ODnone => vtks = TRUE) & + ((ObstacleDistance = ODclose & + ObstacleRelativeSpeed /= RSpos & + CCInitialisationInProgress = FALSE & + CruiseSpeedChangeInProgress = FALSE) + => vtktg = TRUE) & + ((ObstacleDistance = ODveryclose & + CCInitialisationInProgress = FALSE & + CruiseSpeedChangeInProgress = FALSE) + => vtktg = TRUE) & + ((ObstacleRelativeSpeed = RSpos & + ObstacleDistance /= ODveryclose& + CCInitialisationInProgress = FALSE & + CruiseSpeedChangeInProgress = FALSE) + => vtks = TRUE) & + ((ObstacleRelativeSpeed = RSequal & ObstacleDistance = ODnone) + => vtktg = FALSE) & + ((ObstacleRelativeSpeed = RSneg & ObstacleDistance = ODnone) + => vtktg = FALSE) & + ((ObstacleRelativeSpeed = RSpos & ObstacleDistance /= ODveryclose) + => vtktg = FALSE) & + ObstacleStatusJustChanged = TRUE + + THEN + VehicleTryKeepTimeGap := vtktg || + VehicleTryKeepSpeed := vtks + + END; + + + ObstacleBecomesOld = + SELECT + ObstacleStatusJustChanged = TRUE & + (VehicleTryKeepSpeed = TRUE + or VehicleTryKeepTimeGap = TRUE + or CCInitialisationInProgress = TRUE + or CruiseSpeedChangeInProgress = TRUE) & + (ObstacleDistance = ODnone => VehicleTryKeepSpeed = TRUE) & + ((ObstacleDistance = ODclose & + ObstacleRelativeSpeed /= RSpos & + CCInitialisationInProgress = FALSE & + CruiseSpeedChangeInProgress = FALSE ) + => (VehicleTryKeepTimeGap = TRUE)) & + ((ObstacleDistance = ODveryclose & + CCInitialisationInProgress = FALSE & + CruiseSpeedChangeInProgress = FALSE) + => VehicleTryKeepTimeGap = TRUE) & + ((ObstacleRelativeSpeed = RSpos & + ObstacleDistance /= ODveryclose & + CCInitialisationInProgress = FALSE & + CruiseSpeedChangeInProgress = FALSE) + => VehicleTryKeepSpeed = TRUE) + THEN + ObstacleStatusJustChanged:= FALSE + END + +END +/* +CTL: + e(b(\'SetCruiseSpeed\'/0)) + ef(and(e(b(\'SetCruiseSpeed\'/0)),not(e(b(\'CruiseBecomesNotAllowed\'/0))))) + +ProB: has explored all states (1360 states) +No invariant violation or deadlock found + +Coverage: +COVERED_OPERATIONS +initialise_machine:4 +ObstacleAppearsWhenCruiseInactive:12 +CruiseBecomesAllowed:8 +ObstacleAppearsWhenCruiseActive:432 +ObstacleDistanceBecomesBig:96 +VehicleManageObstacle:2208 +ObstacleBecomesOld:624 +ObstacleDistanceBecomesClose:264 +CruiseSpeedChangeFinished:2160 +CruiseSpeedChangeDelayFinished:624 +VehicleLeavesCruiseSpeed:760 +ObstacleStartsTravelFaster:460 +ObstacleStartsTravelSlower:460 +ExternalForcesBecomesNormal:672 +VehicleFallsBelowMaxCruiseSpeed:456 +ObstacleDistanceBecomesVeryClose:192 +ObstacleStopsTravelSlower:460 +CruiseBecomesNotAllowed:1352 +SetCruiseSpeed:4504 +CCInitialisationFinished:3816 +CCInitialisationDelayFinished:1116 +CruiseOff:1344 +ExternalForcesBecomesExtreme:672 +VehicleReachesCruiseSpeed:448 +VehicleExceedsMaxCruiseSpeed:904 +ObstacleStopsTravelFaster:364 +ObstacleDisappears:1284 +UNCOVERED_OPERATIONS +-none- + + +*/ \ No newline at end of file diff --git a/Beispiele/LandingGear_R6.java b/Beispiele/LandingGear_R6.java new file mode 100644 index 0000000000000000000000000000000000000000..720a831b66eb536eefcc2ec40c16c06fc0f89f38 --- /dev/null +++ b/Beispiele/LandingGear_R6.java @@ -0,0 +1,832 @@ +import de.hhu.stups.btypes.BRelation; +import de.hhu.stups.btypes.BTuple; +import de.hhu.stups.btypes.BSet; +import de.hhu.stups.btypes.BObject; +import de.hhu.stups.btypes.BBoolean; +import java.util.Objects; +import java.util.Arrays; +import de.hhu.stups.btypes.BUtils; + + +public class LandingGear_R6 { + + public enum DOOR_STATE implements BObject { + open, + closed, + door_moving; + + public BBoolean equal(DOOR_STATE o) { + return new BBoolean(this == o); + } + + public BBoolean unequal(DOOR_STATE o) { + return new BBoolean(this != o); + } + } + + public enum GEAR_STATE implements BObject { + retracted, + extended, + gear_moving; + + public BBoolean equal(GEAR_STATE o) { + return new BBoolean(this == o); + } + + public BBoolean unequal(GEAR_STATE o) { + return new BBoolean(this != o); + } + } + + public enum HANDLE_STATE implements BObject { + up, + down; + + public BBoolean equal(HANDLE_STATE o) { + return new BBoolean(this == o); + } + + public BBoolean unequal(HANDLE_STATE o) { + return new BBoolean(this != o); + } + } + + public enum POSITION implements BObject { + fr, + lt, + rt; + + public BBoolean equal(POSITION o) { + return new BBoolean(this == o); + } + + public BBoolean unequal(POSITION o) { + return new BBoolean(this != o); + } + } + + public enum SWITCH_STATE implements BObject { + switch_open, + switch_closed; + + public BBoolean equal(SWITCH_STATE o) { + return new BBoolean(this == o); + } + + public BBoolean unequal(SWITCH_STATE o) { + return new BBoolean(this != o); + } + } + + public enum PLANE_STATE implements BObject { + ground, + flight; + + public BBoolean equal(PLANE_STATE o) { + return new BBoolean(this == o); + } + + public BBoolean unequal(PLANE_STATE o) { + return new BBoolean(this != o); + } + } + + public enum VALVE_STATE implements BObject { + valve_open, + valve_closed; + + public BBoolean equal(VALVE_STATE o) { + return new BBoolean(this == o); + } + + public BBoolean unequal(VALVE_STATE o) { + return new BBoolean(this != o); + } + } + + private static BSet<DOOR_STATE> _DOOR_STATE = new BSet<DOOR_STATE>(DOOR_STATE.open, DOOR_STATE.closed, DOOR_STATE.door_moving); + private static BSet<GEAR_STATE> _GEAR_STATE = new BSet<GEAR_STATE>(GEAR_STATE.retracted, GEAR_STATE.extended, GEAR_STATE.gear_moving); + private static BSet<HANDLE_STATE> _HANDLE_STATE = new BSet<HANDLE_STATE>(HANDLE_STATE.up, HANDLE_STATE.down); + private static BSet<POSITION> _POSITION = new BSet<POSITION>(POSITION.fr, POSITION.lt, POSITION.rt); + private static BSet<SWITCH_STATE> _SWITCH_STATE = new BSet<SWITCH_STATE>(SWITCH_STATE.switch_open, SWITCH_STATE.switch_closed); + private static BSet<PLANE_STATE> _PLANE_STATE = new BSet<PLANE_STATE>(PLANE_STATE.ground, PLANE_STATE.flight); + private static BSet<VALVE_STATE> _VALVE_STATE = new BSet<VALVE_STATE>(VALVE_STATE.valve_open, VALVE_STATE.valve_closed); + + private SWITCH_STATE analogical_switch; + private BBoolean general_EV; + private VALVE_STATE general_valve; + private BBoolean handle_move; + private BBoolean close_EV; + private BBoolean extend_EV; + private BBoolean open_EV; + private BBoolean retract_EV; + private PLANE_STATE shock_absorber; + private VALVE_STATE valve_close_door; + private VALVE_STATE valve_extend_gear; + private VALVE_STATE valve_open_door; + private VALVE_STATE valve_retract_gear; + private BRelation<POSITION, DOOR_STATE> doors; + private BRelation<POSITION, GEAR_STATE> gears; + private HANDLE_STATE handle; + private DOOR_STATE door; + private GEAR_STATE gear; + + public LandingGear_R6() { + gears = BRelation.cartesianProduct(_POSITION, new BSet<GEAR_STATE>(GEAR_STATE.extended)); + doors = BRelation.cartesianProduct(_POSITION, new BSet<DOOR_STATE>(DOOR_STATE.closed)); + handle = HANDLE_STATE.down; + valve_extend_gear = VALVE_STATE.valve_closed; + valve_retract_gear = VALVE_STATE.valve_closed; + valve_open_door = VALVE_STATE.valve_closed; + valve_close_door = VALVE_STATE.valve_closed; + open_EV = new BBoolean(false); + close_EV = new BBoolean(false); + retract_EV = new BBoolean(false); + extend_EV = new BBoolean(false); + shock_absorber = PLANE_STATE.ground; + general_EV = new BBoolean(false); + general_valve = VALVE_STATE.valve_closed; + analogical_switch = SWITCH_STATE.switch_open; + handle_move = new BBoolean(false); + gear = GEAR_STATE.extended; + door = DOOR_STATE.closed; + } + + public LandingGear_R6(SWITCH_STATE analogical_switch, BBoolean general_EV, VALVE_STATE general_valve, BBoolean handle_move, BBoolean close_EV, BBoolean extend_EV, BBoolean open_EV, BBoolean retract_EV, PLANE_STATE shock_absorber, VALVE_STATE valve_close_door, VALVE_STATE valve_extend_gear, VALVE_STATE valve_open_door, VALVE_STATE valve_retract_gear, BRelation<POSITION, DOOR_STATE> doors, BRelation<POSITION, GEAR_STATE> gears, HANDLE_STATE handle, DOOR_STATE door, GEAR_STATE gear) { + this.analogical_switch = analogical_switch; + this.general_EV = general_EV; + this.general_valve = general_valve; + this.handle_move = handle_move; + this.close_EV = close_EV; + this.extend_EV = extend_EV; + this.open_EV = open_EV; + this.retract_EV = retract_EV; + this.shock_absorber = shock_absorber; + this.valve_close_door = valve_close_door; + this.valve_extend_gear = valve_extend_gear; + this.valve_open_door = valve_open_door; + this.valve_retract_gear = valve_retract_gear; + this.doors = doors; + this.gears = gears; + this.handle = handle; + this.door = door; + this.gear = gear; + } + + public void begin_flying() { + shock_absorber = PLANE_STATE.flight; + + } + + public void land_plane() { + shock_absorber = PLANE_STATE.ground; + + } + + public void open_valve_door_open() { + valve_open_door = VALVE_STATE.valve_open; + + } + + public void close_valve_door_open() { + valve_open_door = VALVE_STATE.valve_closed; + + } + + public void open_valve_door_close() { + valve_close_door = VALVE_STATE.valve_open; + + } + + public void close_valve_door_close() { + valve_close_door = VALVE_STATE.valve_closed; + + } + + public void open_valve_retract_gear() { + valve_retract_gear = VALVE_STATE.valve_open; + + } + + public void close_valve_retract_gear() { + valve_retract_gear = VALVE_STATE.valve_closed; + + } + + public void open_valve_extend_gear() { + valve_extend_gear = VALVE_STATE.valve_open; + + } + + public void close_valve_extend_gear() { + valve_extend_gear = VALVE_STATE.valve_closed; + + } + + public void con_stimulate_open_door_valve() { + open_EV = new BBoolean(true); + + } + + public void con_stop_stimulate_open_door_valve() { + open_EV = new BBoolean(false); + + } + + public void con_stimulate_close_door_valve() { + close_EV = new BBoolean(true); + + } + + public void con_stop_stimulate_close_door_valve() { + close_EV = new BBoolean(false); + + } + + public void con_stimulate_retract_gear_valve() { + retract_EV = new BBoolean(true); + + } + + public void con_stop_stimulate_retract_gear_valve() { + retract_EV = new BBoolean(false); + + } + + public void con_stimulate_extend_gear_valve() { + extend_EV = new BBoolean(true); + + } + + public void con_stop_stimulate_extend_gear_valve() { + extend_EV = new BBoolean(false); + + } + + public void env_start_retracting_first(POSITION gr) { + BRelation<POSITION, GEAR_STATE> _ld_gears = gears; + gears = _ld_gears.override(new BRelation<POSITION, GEAR_STATE>(new BTuple<>(gr, GEAR_STATE.gear_moving))); + gear = GEAR_STATE.gear_moving; + + } + + public void env_retract_gear_skip(POSITION gr) { + gears = gears.override(new BRelation<POSITION, GEAR_STATE>(new BTuple<>(gr, GEAR_STATE.retracted))); + + } + + public void env_retract_gear_last(POSITION gr) { + BRelation<POSITION, GEAR_STATE> _ld_gears = gears; + gears = _ld_gears.override(new BRelation<POSITION, GEAR_STATE>(new BTuple<>(gr, GEAR_STATE.retracted))); + gear = GEAR_STATE.retracted; + + } + + public void env_start_extending(POSITION gr) { + BRelation<POSITION, GEAR_STATE> _ld_gears = gears; + gears = _ld_gears.override(new BRelation<POSITION, GEAR_STATE>(new BTuple<>(gr, GEAR_STATE.gear_moving))); + gear = GEAR_STATE.gear_moving; + + } + + public void env_extend_gear_last(POSITION gr) { + BRelation<POSITION, GEAR_STATE> _ld_gears = gears; + gears = _ld_gears.override(new BRelation<POSITION, GEAR_STATE>(new BTuple<>(gr, GEAR_STATE.extended))); + gear = GEAR_STATE.extended; + + } + + public void env_extend_gear_skip(POSITION gr) { + gears = gears.override(new BRelation<POSITION, GEAR_STATE>(new BTuple<>(gr, GEAR_STATE.extended))); + + } + + public void env_start_open_door(POSITION gr) { + BRelation<POSITION, DOOR_STATE> _ld_doors = doors; + doors = _ld_doors.override(new BRelation<POSITION, DOOR_STATE>(new BTuple<>(gr, DOOR_STATE.door_moving))); + door = DOOR_STATE.door_moving; + + } + + public void env_open_door_last(POSITION gr) { + BRelation<POSITION, DOOR_STATE> _ld_doors = doors; + doors = _ld_doors.override(new BRelation<POSITION, DOOR_STATE>(new BTuple<>(gr, DOOR_STATE.open))); + door = DOOR_STATE.open; + + } + + public void env_open_door_skip(POSITION gr) { + doors = doors.override(new BRelation<POSITION, DOOR_STATE>(new BTuple<>(gr, DOOR_STATE.open))); + + } + + public void env_start_close_door(POSITION gr) { + BRelation<POSITION, DOOR_STATE> _ld_doors = doors; + doors = _ld_doors.override(new BRelation<POSITION, DOOR_STATE>(new BTuple<>(gr, DOOR_STATE.door_moving))); + door = DOOR_STATE.door_moving; + + } + + public void env_close_door(POSITION gr) { + BRelation<POSITION, DOOR_STATE> _ld_doors = doors; + doors = _ld_doors.override(new BRelation<POSITION, DOOR_STATE>(new BTuple<>(gr, DOOR_STATE.closed))); + door = DOOR_STATE.closed; + + } + + public void env_close_door_skip(POSITION gr) { + doors = doors.override(new BRelation<POSITION, DOOR_STATE>(new BTuple<>(gr, DOOR_STATE.closed))); + + } + + public void toggle_handle_up() { + handle = HANDLE_STATE.up; + handle_move = new BBoolean(true); + + } + + public void toggle_handle_down() { + handle = HANDLE_STATE.down; + handle_move = new BBoolean(true); + + } + + public void con_stimulate_general_valve() { + general_EV = new BBoolean(true); + + } + + public void con_stop_stimulate_general_valve() { + general_EV = new BBoolean(false); + handle_move = new BBoolean(false); + + } + + public void evn_open_general_valve() { + general_valve = VALVE_STATE.valve_open; + + } + + public void evn_close_general_valve() { + general_valve = VALVE_STATE.valve_closed; + + } + + public void env_close_analogical_switch() { + analogical_switch = SWITCH_STATE.switch_closed; + + } + + public void env_open_analogical_switch() { + analogical_switch = SWITCH_STATE.switch_open; + + } + + public SWITCH_STATE _get_analogical_switch() { + return analogical_switch; + } + + public BBoolean _get_general_EV() { + return general_EV; + } + + public VALVE_STATE _get_general_valve() { + return general_valve; + } + + public BBoolean _get_handle_move() { + return handle_move; + } + + public BBoolean _get_close_EV() { + return close_EV; + } + + public BBoolean _get_extend_EV() { + return extend_EV; + } + + public BBoolean _get_open_EV() { + return open_EV; + } + + public BBoolean _get_retract_EV() { + return retract_EV; + } + + public PLANE_STATE _get_shock_absorber() { + return shock_absorber; + } + + public VALVE_STATE _get_valve_close_door() { + return valve_close_door; + } + + public VALVE_STATE _get_valve_extend_gear() { + return valve_extend_gear; + } + + public VALVE_STATE _get_valve_open_door() { + return valve_open_door; + } + + public VALVE_STATE _get_valve_retract_gear() { + return valve_retract_gear; + } + + public BRelation<POSITION, DOOR_STATE> _get_doors() { + return doors; + } + + public BRelation<POSITION, GEAR_STATE> _get_gears() { + return gears; + } + + public HANDLE_STATE _get_handle() { + return handle; + } + + public DOOR_STATE _get_door() { + return door; + } + + public GEAR_STATE _get_gear() { + return gear; + } + + public BSet<DOOR_STATE> _get__DOOR_STATE() { + return _DOOR_STATE; + } + + public BSet<GEAR_STATE> _get__GEAR_STATE() { + return _GEAR_STATE; + } + + public BSet<HANDLE_STATE> _get__HANDLE_STATE() { + return _HANDLE_STATE; + } + + public BSet<POSITION> _get__POSITION() { + return _POSITION; + } + + public BSet<SWITCH_STATE> _get__SWITCH_STATE() { + return _SWITCH_STATE; + } + + public BSet<PLANE_STATE> _get__PLANE_STATE() { + return _PLANE_STATE; + } + + public BSet<VALVE_STATE> _get__VALVE_STATE() { + return _VALVE_STATE; + } + + + public boolean _tr_begin_flying() { + return shock_absorber.equal(PLANE_STATE.ground).booleanValue(); + } + + public boolean _tr_land_plane() { + return shock_absorber.equal(PLANE_STATE.flight).booleanValue(); + } + + public boolean _tr_open_valve_door_open() { + return new BBoolean(valve_open_door.equal(VALVE_STATE.valve_closed).booleanValue() && open_EV.equal(new BBoolean(true)).booleanValue()).booleanValue(); + } + + public boolean _tr_close_valve_door_open() { + return new BBoolean(valve_open_door.equal(VALVE_STATE.valve_open).booleanValue() && open_EV.equal(new BBoolean(false)).booleanValue()).booleanValue(); + } + + public boolean _tr_open_valve_door_close() { + return new BBoolean(valve_close_door.equal(VALVE_STATE.valve_closed).booleanValue() && close_EV.equal(new BBoolean(true)).booleanValue()).booleanValue(); + } + + public boolean _tr_close_valve_door_close() { + return new BBoolean(valve_close_door.equal(VALVE_STATE.valve_open).booleanValue() && close_EV.equal(new BBoolean(false)).booleanValue()).booleanValue(); + } + + public boolean _tr_open_valve_retract_gear() { + return new BBoolean(valve_retract_gear.equal(VALVE_STATE.valve_closed).booleanValue() && retract_EV.equal(new BBoolean(true)).booleanValue()).booleanValue(); + } + + public boolean _tr_close_valve_retract_gear() { + return new BBoolean(valve_retract_gear.equal(VALVE_STATE.valve_open).booleanValue() && retract_EV.equal(new BBoolean(false)).booleanValue()).booleanValue(); + } + + public boolean _tr_open_valve_extend_gear() { + return new BBoolean(valve_extend_gear.equal(VALVE_STATE.valve_closed).booleanValue() && extend_EV.equal(new BBoolean(true)).booleanValue()).booleanValue(); + } + + public boolean _tr_close_valve_extend_gear() { + return new BBoolean(valve_extend_gear.equal(VALVE_STATE.valve_open).booleanValue() && extend_EV.equal(new BBoolean(false)).booleanValue()).booleanValue(); + } + + public boolean _tr_con_stimulate_open_door_valve() { + return new BBoolean(new BBoolean(new BBoolean(open_EV.equal(new BBoolean(false)).booleanValue() && close_EV.equal(new BBoolean(false)).booleanValue()).booleanValue() && new BBoolean(new BBoolean(handle.equal(HANDLE_STATE.down).booleanValue() && gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.extended)).not().booleanValue()).booleanValue() || new BBoolean(new BBoolean(handle.equal(HANDLE_STATE.up).booleanValue() && gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.retracted)).not().booleanValue()).booleanValue() && new BBoolean(doors.range().equal(new BSet<DOOR_STATE>(DOOR_STATE.open)).booleanValue() && shock_absorber.equal(PLANE_STATE.ground).booleanValue()).not().booleanValue()).booleanValue()).booleanValue()).booleanValue() && general_EV.equal(new BBoolean(true)).booleanValue()).booleanValue(); + } + + public boolean _tr_con_stop_stimulate_open_door_valve() { + return new BBoolean(new BBoolean(new BBoolean(new BBoolean(open_EV.equal(new BBoolean(true)).booleanValue() && extend_EV.equal(new BBoolean(false)).booleanValue()).booleanValue() && retract_EV.equal(new BBoolean(false)).booleanValue()).booleanValue() && new BBoolean(new BBoolean(handle.equal(HANDLE_STATE.down).booleanValue() && gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.extended)).booleanValue()).booleanValue() || new BBoolean(new BBoolean(handle.equal(HANDLE_STATE.up).booleanValue() && new BBoolean(gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.retracted)).booleanValue() || shock_absorber.equal(PLANE_STATE.ground).booleanValue()).booleanValue()).booleanValue() && doors.range().equal(new BSet<DOOR_STATE>(DOOR_STATE.open)).booleanValue()).booleanValue()).booleanValue()).booleanValue() && general_EV.equal(new BBoolean(true)).booleanValue()).booleanValue(); + } + + public boolean _tr_con_stimulate_close_door_valve() { + return new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(close_EV.equal(new BBoolean(false)).booleanValue() && open_EV.equal(new BBoolean(false)).booleanValue()).booleanValue() && extend_EV.equal(new BBoolean(false)).booleanValue()).booleanValue() && retract_EV.equal(new BBoolean(false)).booleanValue()).booleanValue() && new BBoolean(new BBoolean(handle.equal(HANDLE_STATE.down).booleanValue() && gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.extended)).booleanValue()).booleanValue() || new BBoolean(handle.equal(HANDLE_STATE.up).booleanValue() && new BBoolean(gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.retracted)).booleanValue() || shock_absorber.equal(PLANE_STATE.ground).booleanValue()).booleanValue()).booleanValue()).booleanValue()).booleanValue() && doors.range().equal(new BSet<DOOR_STATE>(DOOR_STATE.closed)).not().booleanValue()).booleanValue() && general_EV.equal(new BBoolean(true)).booleanValue()).booleanValue(); + } + + public boolean _tr_con_stop_stimulate_close_door_valve() { + return new BBoolean(new BBoolean(close_EV.equal(new BBoolean(true)).booleanValue() && new BBoolean(new BBoolean(new BBoolean(handle.equal(HANDLE_STATE.down).booleanValue() && gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.extended)).booleanValue()).booleanValue() && doors.range().equal(new BSet<DOOR_STATE>(DOOR_STATE.closed)).booleanValue()).booleanValue() || new BBoolean(new BBoolean(handle.equal(HANDLE_STATE.up).booleanValue() && new BBoolean(gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.retracted)).booleanValue() || shock_absorber.equal(PLANE_STATE.ground).booleanValue()).booleanValue()).booleanValue() && doors.range().equal(new BSet<DOOR_STATE>(DOOR_STATE.closed)).booleanValue()).booleanValue()).booleanValue()).booleanValue() && general_EV.equal(new BBoolean(true)).booleanValue()).booleanValue(); + } + + public boolean _tr_con_stimulate_retract_gear_valve() { + return new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(retract_EV.equal(new BBoolean(false)).booleanValue() && extend_EV.equal(new BBoolean(false)).booleanValue()).booleanValue() && open_EV.equal(new BBoolean(true)).booleanValue()).booleanValue() && handle.equal(HANDLE_STATE.up).booleanValue()).booleanValue() && gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.retracted)).not().booleanValue()).booleanValue() && shock_absorber.equal(PLANE_STATE.flight).booleanValue()).booleanValue() && doors.range().equal(new BSet<DOOR_STATE>(DOOR_STATE.open)).booleanValue()).booleanValue() && general_EV.equal(new BBoolean(true)).booleanValue()).booleanValue(); + } + + public boolean _tr_con_stop_stimulate_retract_gear_valve() { + return new BBoolean(new BBoolean(retract_EV.equal(new BBoolean(true)).booleanValue() && new BBoolean(handle.equal(HANDLE_STATE.down).booleanValue() || gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.retracted)).booleanValue()).booleanValue()).booleanValue() && general_EV.equal(new BBoolean(true)).booleanValue()).booleanValue(); + } + + public boolean _tr_con_stimulate_extend_gear_valve() { + return new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(extend_EV.equal(new BBoolean(false)).booleanValue() && retract_EV.equal(new BBoolean(false)).booleanValue()).booleanValue() && open_EV.equal(new BBoolean(true)).booleanValue()).booleanValue() && handle.equal(HANDLE_STATE.down).booleanValue()).booleanValue() && gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.extended)).not().booleanValue()).booleanValue() && doors.range().equal(new BSet<DOOR_STATE>(DOOR_STATE.open)).booleanValue()).booleanValue() && general_EV.equal(new BBoolean(true)).booleanValue()).booleanValue(); + } + + public boolean _tr_con_stop_stimulate_extend_gear_valve() { + return new BBoolean(new BBoolean(extend_EV.equal(new BBoolean(true)).booleanValue() && new BBoolean(handle.equal(HANDLE_STATE.up).booleanValue() || gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.extended)).booleanValue()).booleanValue()).booleanValue() && general_EV.equal(new BBoolean(true)).booleanValue()).booleanValue(); + } + + public BSet<POSITION> _tr_env_start_retracting_first() { + BSet<POSITION> _ic_set_18 = new BSet<POSITION>(); + for(POSITION _ic_gr_1 : gears.domain()) { + if((new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(doors.range().equal(new BSet<DOOR_STATE>(DOOR_STATE.open)).booleanValue() && handle.equal(HANDLE_STATE.up).booleanValue()).booleanValue() && gears.functionCall(_ic_gr_1).equal(GEAR_STATE.extended).booleanValue()).booleanValue() && valve_retract_gear.equal(VALVE_STATE.valve_open).booleanValue()).booleanValue() && general_valve.equal(VALVE_STATE.valve_open).booleanValue()).booleanValue() && new BSet<GEAR_STATE>(GEAR_STATE.extended, GEAR_STATE.gear_moving).elementOf(gear).booleanValue()).booleanValue() && door.equal(DOOR_STATE.open).booleanValue())).booleanValue()) { + _ic_set_18 = _ic_set_18.union(new BSet<POSITION>(_ic_gr_1)); + } + + } + return _ic_set_18; + } + + public BSet<POSITION> _tr_env_retract_gear_skip() { + BSet<POSITION> _ic_set_19 = new BSet<POSITION>(); + for(POSITION _ic_gr_1 : gears.domain()) { + if((new BBoolean(new BBoolean(new BBoolean(new BBoolean(doors.range().equal(new BSet<DOOR_STATE>(DOOR_STATE.open)).booleanValue() && gears.relationImage(_POSITION.difference(new BSet<POSITION>(_ic_gr_1))).unequal(new BSet<GEAR_STATE>(GEAR_STATE.retracted)).booleanValue()).booleanValue() && handle.equal(HANDLE_STATE.up).booleanValue()).booleanValue() && gears.functionCall(_ic_gr_1).equal(GEAR_STATE.gear_moving).booleanValue()).booleanValue() && general_valve.equal(VALVE_STATE.valve_open).booleanValue())).booleanValue()) { + _ic_set_19 = _ic_set_19.union(new BSet<POSITION>(_ic_gr_1)); + } + + } + return _ic_set_19; + } + + public BSet<POSITION> _tr_env_retract_gear_last() { + BSet<POSITION> _ic_set_20 = new BSet<POSITION>(); + for(POSITION _ic_gr_1 : gears.domain()) { + if((new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(doors.range().equal(new BSet<DOOR_STATE>(DOOR_STATE.open)).booleanValue() && gears.relationImage(_POSITION.difference(new BSet<POSITION>(_ic_gr_1))).equal(new BSet<GEAR_STATE>(GEAR_STATE.retracted)).booleanValue()).booleanValue() && handle.equal(HANDLE_STATE.up).booleanValue()).booleanValue() && gears.functionCall(_ic_gr_1).equal(GEAR_STATE.gear_moving).booleanValue()).booleanValue() && general_valve.equal(VALVE_STATE.valve_open).booleanValue()).booleanValue() && gear.equal(GEAR_STATE.gear_moving).booleanValue()).booleanValue() && door.equal(DOOR_STATE.open).booleanValue())).booleanValue()) { + _ic_set_20 = _ic_set_20.union(new BSet<POSITION>(_ic_gr_1)); + } + + } + return _ic_set_20; + } + + public BSet<POSITION> _tr_env_start_extending() { + BSet<POSITION> _ic_set_21 = new BSet<POSITION>(); + for(POSITION _ic_gr_1 : gears.domain()) { + if((new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(doors.range().equal(new BSet<DOOR_STATE>(DOOR_STATE.open)).booleanValue() && handle.equal(HANDLE_STATE.down).booleanValue()).booleanValue() && gears.functionCall(_ic_gr_1).equal(GEAR_STATE.retracted).booleanValue()).booleanValue() && valve_extend_gear.equal(VALVE_STATE.valve_open).booleanValue()).booleanValue() && general_valve.equal(VALVE_STATE.valve_open).booleanValue()).booleanValue() && new BSet<GEAR_STATE>(GEAR_STATE.gear_moving, GEAR_STATE.retracted).elementOf(gear).booleanValue()).booleanValue() && door.equal(DOOR_STATE.open).booleanValue())).booleanValue()) { + _ic_set_21 = _ic_set_21.union(new BSet<POSITION>(_ic_gr_1)); + } + + } + return _ic_set_21; + } + + public BSet<POSITION> _tr_env_extend_gear_last() { + BSet<POSITION> _ic_set_22 = new BSet<POSITION>(); + for(POSITION _ic_gr_1 : gears.domain()) { + if((new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(doors.range().equal(new BSet<DOOR_STATE>(DOOR_STATE.open)).booleanValue() && handle.equal(HANDLE_STATE.down).booleanValue()).booleanValue() && gears.relationImage(_POSITION.difference(new BSet<POSITION>(_ic_gr_1))).equal(new BSet<GEAR_STATE>(GEAR_STATE.extended)).booleanValue()).booleanValue() && gears.functionCall(_ic_gr_1).equal(GEAR_STATE.gear_moving).booleanValue()).booleanValue() && general_valve.equal(VALVE_STATE.valve_open).booleanValue()).booleanValue() && gear.equal(GEAR_STATE.gear_moving).booleanValue()).booleanValue() && door.equal(DOOR_STATE.open).booleanValue())).booleanValue()) { + _ic_set_22 = _ic_set_22.union(new BSet<POSITION>(_ic_gr_1)); + } + + } + return _ic_set_22; + } + + public BSet<POSITION> _tr_env_extend_gear_skip() { + BSet<POSITION> _ic_set_23 = new BSet<POSITION>(); + for(POSITION _ic_gr_1 : gears.domain()) { + if((new BBoolean(new BBoolean(new BBoolean(new BBoolean(doors.range().equal(new BSet<DOOR_STATE>(DOOR_STATE.open)).booleanValue() && handle.equal(HANDLE_STATE.down).booleanValue()).booleanValue() && gears.relationImage(_POSITION.difference(new BSet<POSITION>(_ic_gr_1))).unequal(new BSet<GEAR_STATE>(GEAR_STATE.extended)).booleanValue()).booleanValue() && gears.functionCall(_ic_gr_1).equal(GEAR_STATE.gear_moving).booleanValue()).booleanValue() && general_valve.equal(VALVE_STATE.valve_open).booleanValue())).booleanValue()) { + _ic_set_23 = _ic_set_23.union(new BSet<POSITION>(_ic_gr_1)); + } + + } + return _ic_set_23; + } + + public BSet<POSITION> _tr_env_start_open_door() { + BSet<POSITION> _ic_set_24 = new BSet<POSITION>(); + for(POSITION _ic_gr_1 : gears.domain()) { + if((new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(doors.functionCall(_ic_gr_1).equal(DOOR_STATE.closed).booleanValue() && gears.functionCall(_ic_gr_1).unequal(GEAR_STATE.gear_moving).booleanValue()).booleanValue() && gears.range().notElementOf(GEAR_STATE.gear_moving).booleanValue()).booleanValue() && new BBoolean(new BBoolean(handle.equal(HANDLE_STATE.down).booleanValue() && gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.retracted)).booleanValue()).booleanValue() || new BBoolean(handle.equal(HANDLE_STATE.up).booleanValue() && gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.extended)).booleanValue()).booleanValue()).booleanValue()).booleanValue() && valve_open_door.equal(VALVE_STATE.valve_open).booleanValue()).booleanValue() && general_valve.equal(VALVE_STATE.valve_open).booleanValue()).booleanValue() && new BSet<DOOR_STATE>(DOOR_STATE.closed, DOOR_STATE.door_moving).elementOf(door).booleanValue()).booleanValue() && gear.unequal(GEAR_STATE.gear_moving).booleanValue()).booleanValue() && new BBoolean(new BBoolean(handle.equal(HANDLE_STATE.down).booleanValue() && gear.equal(GEAR_STATE.retracted).booleanValue()).booleanValue() || new BBoolean(handle.equal(HANDLE_STATE.up).booleanValue() && gear.equal(GEAR_STATE.extended).booleanValue()).booleanValue()).booleanValue())).booleanValue()) { + _ic_set_24 = _ic_set_24.union(new BSet<POSITION>(_ic_gr_1)); + } + + } + return _ic_set_24; + } + + public BSet<POSITION> _tr_env_open_door_last() { + BSet<POSITION> _ic_set_25 = new BSet<POSITION>(); + for(POSITION _ic_gr_1 : gears.domain()) { + if((new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(doors.functionCall(_ic_gr_1).equal(DOOR_STATE.door_moving).booleanValue() && gears.functionCall(_ic_gr_1).unequal(GEAR_STATE.gear_moving).booleanValue()).booleanValue() && gears.range().notElementOf(GEAR_STATE.gear_moving).booleanValue()).booleanValue() && doors.relationImage(_POSITION.difference(new BSet<POSITION>(_ic_gr_1))).equal(new BSet<DOOR_STATE>(DOOR_STATE.open)).booleanValue()).booleanValue() && new BBoolean(new BBoolean(handle.equal(HANDLE_STATE.down).booleanValue() && gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.retracted)).booleanValue()).booleanValue() || new BBoolean(handle.equal(HANDLE_STATE.up).booleanValue() && gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.extended)).booleanValue()).booleanValue()).booleanValue()).booleanValue() && valve_open_door.equal(VALVE_STATE.valve_open).booleanValue()).booleanValue() && general_valve.equal(VALVE_STATE.valve_open).booleanValue()).booleanValue() && door.equal(DOOR_STATE.door_moving).booleanValue()).booleanValue() && gear.unequal(GEAR_STATE.gear_moving).booleanValue()).booleanValue() && new BBoolean(new BBoolean(handle.equal(HANDLE_STATE.down).booleanValue() && gear.equal(GEAR_STATE.retracted).booleanValue()).booleanValue() || new BBoolean(handle.equal(HANDLE_STATE.up).booleanValue() && gear.equal(GEAR_STATE.extended).booleanValue()).booleanValue()).booleanValue())).booleanValue()) { + _ic_set_25 = _ic_set_25.union(new BSet<POSITION>(_ic_gr_1)); + } + + } + return _ic_set_25; + } + + public BSet<POSITION> _tr_env_open_door_skip() { + BSet<POSITION> _ic_set_26 = new BSet<POSITION>(); + for(POSITION _ic_gr_1 : gears.domain()) { + if((new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(doors.functionCall(_ic_gr_1).equal(DOOR_STATE.door_moving).booleanValue() && gears.functionCall(_ic_gr_1).unequal(GEAR_STATE.gear_moving).booleanValue()).booleanValue() && gears.range().notElementOf(GEAR_STATE.gear_moving).booleanValue()).booleanValue() && doors.relationImage(_POSITION.difference(new BSet<POSITION>(_ic_gr_1))).unequal(new BSet<DOOR_STATE>(DOOR_STATE.open)).booleanValue()).booleanValue() && new BBoolean(new BBoolean(handle.equal(HANDLE_STATE.down).booleanValue() && gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.retracted)).booleanValue()).booleanValue() || new BBoolean(handle.equal(HANDLE_STATE.up).booleanValue() && gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.extended)).booleanValue()).booleanValue()).booleanValue()).booleanValue() && valve_open_door.equal(VALVE_STATE.valve_open).booleanValue()).booleanValue() && general_valve.equal(VALVE_STATE.valve_open).booleanValue())).booleanValue()) { + _ic_set_26 = _ic_set_26.union(new BSet<POSITION>(_ic_gr_1)); + } + + } + return _ic_set_26; + } + + public BSet<POSITION> _tr_env_start_close_door() { + BSet<POSITION> _ic_set_27 = new BSet<POSITION>(); + for(POSITION _ic_gr_1 : gears.domain()) { + if((new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(doors.functionCall(_ic_gr_1).equal(DOOR_STATE.open).booleanValue() && gears.functionCall(_ic_gr_1).unequal(GEAR_STATE.gear_moving).booleanValue()).booleanValue() && new BBoolean(new BBoolean(handle.equal(HANDLE_STATE.up).booleanValue() && new BBoolean(gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.retracted)).booleanValue() || gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.extended)).booleanValue()).booleanValue()).booleanValue() || new BBoolean(handle.equal(HANDLE_STATE.down).booleanValue() && gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.extended)).booleanValue()).booleanValue()).booleanValue()).booleanValue() && valve_close_door.equal(VALVE_STATE.valve_open).booleanValue()).booleanValue() && general_valve.equal(VALVE_STATE.valve_open).booleanValue()).booleanValue() && new BSet<DOOR_STATE>(DOOR_STATE.door_moving, DOOR_STATE.open).elementOf(door).booleanValue()).booleanValue() && gear.unequal(GEAR_STATE.gear_moving).booleanValue()).booleanValue() && new BBoolean(new BBoolean(handle.equal(HANDLE_STATE.down).booleanValue() && gear.equal(GEAR_STATE.extended).booleanValue()).booleanValue() || new BBoolean(handle.equal(HANDLE_STATE.up).booleanValue() && new BSet<GEAR_STATE>(GEAR_STATE.extended, GEAR_STATE.retracted).elementOf(gear).booleanValue()).booleanValue()).booleanValue())).booleanValue()) { + _ic_set_27 = _ic_set_27.union(new BSet<POSITION>(_ic_gr_1)); + } + + } + return _ic_set_27; + } + + public BSet<POSITION> _tr_env_close_door() { + BSet<POSITION> _ic_set_28 = new BSet<POSITION>(); + for(POSITION _ic_gr_1 : gears.domain()) { + if((new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(doors.functionCall(_ic_gr_1).equal(DOOR_STATE.door_moving).booleanValue() && gears.functionCall(_ic_gr_1).unequal(GEAR_STATE.gear_moving).booleanValue()).booleanValue() && gears.range().notElementOf(GEAR_STATE.gear_moving).booleanValue()).booleanValue() && doors.relationImage(_POSITION.difference(new BSet<POSITION>(_ic_gr_1))).equal(new BSet<DOOR_STATE>(DOOR_STATE.closed)).booleanValue()).booleanValue() && new BBoolean(new BBoolean(handle.equal(HANDLE_STATE.up).booleanValue() && new BBoolean(gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.retracted)).booleanValue() || gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.extended)).booleanValue()).booleanValue()).booleanValue() || new BBoolean(handle.equal(HANDLE_STATE.down).booleanValue() && gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.extended)).booleanValue()).booleanValue()).booleanValue()).booleanValue() && valve_close_door.equal(VALVE_STATE.valve_open).booleanValue()).booleanValue() && new BBoolean(!new BBoolean(handle.equal(HANDLE_STATE.up).booleanValue() && gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.extended)).booleanValue()).booleanValue() || shock_absorber.equal(PLANE_STATE.ground).booleanValue()).booleanValue()).booleanValue() && general_valve.equal(VALVE_STATE.valve_open).booleanValue()).booleanValue() && door.equal(DOOR_STATE.door_moving).booleanValue()).booleanValue() && gear.unequal(GEAR_STATE.gear_moving).booleanValue()).booleanValue() && new BBoolean(new BBoolean(handle.equal(HANDLE_STATE.down).booleanValue() && gear.equal(GEAR_STATE.extended).booleanValue()).booleanValue() || new BBoolean(handle.equal(HANDLE_STATE.up).booleanValue() && new BSet<GEAR_STATE>(GEAR_STATE.extended, GEAR_STATE.retracted).elementOf(gear).booleanValue()).booleanValue()).booleanValue())).booleanValue()) { + _ic_set_28 = _ic_set_28.union(new BSet<POSITION>(_ic_gr_1)); + } + + } + return _ic_set_28; + } + + public BSet<POSITION> _tr_env_close_door_skip() { + BSet<POSITION> _ic_set_29 = new BSet<POSITION>(); + for(POSITION _ic_gr_1 : gears.domain()) { + if((new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(doors.functionCall(_ic_gr_1).equal(DOOR_STATE.door_moving).booleanValue() && gears.functionCall(_ic_gr_1).unequal(GEAR_STATE.gear_moving).booleanValue()).booleanValue() && gears.range().notElementOf(GEAR_STATE.gear_moving).booleanValue()).booleanValue() && doors.relationImage(_POSITION.difference(new BSet<POSITION>(_ic_gr_1))).unequal(new BSet<DOOR_STATE>(DOOR_STATE.closed)).booleanValue()).booleanValue() && new BBoolean(new BBoolean(handle.equal(HANDLE_STATE.up).booleanValue() && new BBoolean(gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.retracted)).booleanValue() || gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.extended)).booleanValue()).booleanValue()).booleanValue() || new BBoolean(handle.equal(HANDLE_STATE.down).booleanValue() && gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.extended)).booleanValue()).booleanValue()).booleanValue()).booleanValue() && valve_close_door.equal(VALVE_STATE.valve_open).booleanValue()).booleanValue() && new BBoolean(!new BBoolean(handle.equal(HANDLE_STATE.up).booleanValue() && gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.extended)).booleanValue()).booleanValue() || shock_absorber.equal(PLANE_STATE.ground).booleanValue()).booleanValue()).booleanValue() && general_valve.equal(VALVE_STATE.valve_open).booleanValue())).booleanValue()) { + _ic_set_29 = _ic_set_29.union(new BSet<POSITION>(_ic_gr_1)); + } + + } + return _ic_set_29; + } + + public boolean _tr_toggle_handle_up() { + return handle.equal(HANDLE_STATE.down).booleanValue(); + } + + public boolean _tr_toggle_handle_down() { + return handle.equal(HANDLE_STATE.up).booleanValue(); + } + + public boolean _tr_con_stimulate_general_valve() { + return new BBoolean(general_EV.equal(new BBoolean(false)).booleanValue() && handle_move.equal(new BBoolean(true)).booleanValue()).booleanValue(); + } + + public boolean _tr_con_stop_stimulate_general_valve() { + return new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(general_EV.equal(new BBoolean(true)).booleanValue() && open_EV.equal(new BBoolean(false)).booleanValue()).booleanValue() && close_EV.equal(new BBoolean(false)).booleanValue()).booleanValue() && retract_EV.equal(new BBoolean(false)).booleanValue()).booleanValue() && extend_EV.equal(new BBoolean(false)).booleanValue()).booleanValue() && close_EV.equal(new BBoolean(false)).booleanValue()).booleanValue() && new BBoolean(new BBoolean(new BBoolean(new BBoolean(new BBoolean(handle.equal(HANDLE_STATE.up).booleanValue() && gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.retracted)).booleanValue()).booleanValue() && doors.range().equal(new BSet<DOOR_STATE>(DOOR_STATE.closed)).booleanValue()).booleanValue() && open_EV.equal(new BBoolean(false)).booleanValue()).booleanValue() || new BBoolean(new BBoolean(new BBoolean(handle.equal(HANDLE_STATE.down).booleanValue() && gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.extended)).booleanValue()).booleanValue() && doors.range().equal(new BSet<DOOR_STATE>(DOOR_STATE.closed)).booleanValue()).booleanValue() && open_EV.equal(new BBoolean(false)).booleanValue()).booleanValue()).booleanValue() || new BBoolean(new BBoolean(new BBoolean(handle.equal(HANDLE_STATE.up).booleanValue() && gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.extended)).booleanValue()).booleanValue() && doors.range().equal(new BSet<DOOR_STATE>(DOOR_STATE.closed)).booleanValue()).booleanValue() && open_EV.equal(new BBoolean(false)).booleanValue()).booleanValue()).booleanValue()).booleanValue(); + } + + public boolean _tr_evn_open_general_valve() { + return new BBoolean(new BBoolean(general_EV.equal(new BBoolean(true)).booleanValue() && general_valve.equal(VALVE_STATE.valve_closed).booleanValue()).booleanValue() && analogical_switch.equal(SWITCH_STATE.switch_closed).booleanValue()).booleanValue(); + } + + public boolean _tr_evn_close_general_valve() { + return new BBoolean(new BBoolean(general_EV.equal(new BBoolean(false)).booleanValue() || analogical_switch.equal(SWITCH_STATE.switch_open).booleanValue()).booleanValue() && general_valve.equal(VALVE_STATE.valve_open).booleanValue()).booleanValue(); + } + + public boolean _tr_env_close_analogical_switch() { + return new BBoolean(analogical_switch.equal(SWITCH_STATE.switch_open).booleanValue() && handle_move.equal(new BBoolean(true)).booleanValue()).booleanValue(); + } + + public boolean _tr_env_open_analogical_switch() { + return analogical_switch.equal(SWITCH_STATE.switch_closed).booleanValue(); + } + + public boolean _check_inv_1() { + return _SWITCH_STATE.elementOf(analogical_switch).booleanValue(); + } + + public boolean _check_inv_2() { + return BUtils.BOOL.elementOf(general_EV).booleanValue(); + } + + public boolean _check_inv_3() { + return _VALVE_STATE.elementOf(general_valve).booleanValue(); + } + + public boolean _check_inv_4() { + return BUtils.BOOL.elementOf(handle_move).booleanValue(); + } + + public boolean _check_inv_5() { + return BUtils.BOOL.elementOf(close_EV).booleanValue(); + } + + public boolean _check_inv_6() { + return BUtils.BOOL.elementOf(extend_EV).booleanValue(); + } + + public boolean _check_inv_7() { + return BUtils.BOOL.elementOf(open_EV).booleanValue(); + } + + public boolean _check_inv_8() { + return BUtils.BOOL.elementOf(retract_EV).booleanValue(); + } + + public boolean _check_inv_9() { + return _PLANE_STATE.elementOf(shock_absorber).booleanValue(); + } + + public boolean _check_inv_10() { + return _VALVE_STATE.elementOf(valve_close_door).booleanValue(); + } + + public boolean _check_inv_11() { + return _VALVE_STATE.elementOf(valve_extend_gear).booleanValue(); + } + + public boolean _check_inv_12() { + return _VALVE_STATE.elementOf(valve_open_door).booleanValue(); + } + + public boolean _check_inv_13() { + return _VALVE_STATE.elementOf(valve_retract_gear).booleanValue(); + } + + public boolean _check_inv_14() { + return _HANDLE_STATE.elementOf(handle).booleanValue(); + } + + public boolean _check_inv_15() { + return _DOOR_STATE.elementOf(door).booleanValue(); + } + + public boolean _check_inv_16() { + return _GEAR_STATE.elementOf(gear).booleanValue(); + } + + public boolean _check_inv_17() { + return new BBoolean(!new BBoolean(new BBoolean(new BBoolean(open_EV.equal(new BBoolean(true)).booleanValue() || close_EV.equal(new BBoolean(true)).booleanValue()).booleanValue() || retract_EV.equal(new BBoolean(true)).booleanValue()).booleanValue() || extend_EV.equal(new BBoolean(true)).booleanValue()).booleanValue() || general_EV.equal(new BBoolean(true)).booleanValue()).booleanValue(); + } + + public boolean _check_inv_18() { + return new BBoolean(open_EV.equal(new BBoolean(true)).booleanValue() && close_EV.equal(new BBoolean(true)).booleanValue()).not().booleanValue(); + } + + public boolean _check_inv_19() { + return gears.checkDomain(_POSITION).and(gears.checkRange(_GEAR_STATE)).and(gears.isFunction()).and(gears.isTotal(_POSITION)).booleanValue(); + } + + public boolean _check_inv_20() { + return doors.checkDomain(_POSITION).and(doors.checkRange(_DOOR_STATE)).and(doors.isFunction()).and(doors.isTotal(_POSITION)).booleanValue(); + } + + public boolean _check_inv_21() { + return new BBoolean((!door.equal(DOOR_STATE.closed).booleanValue() || doors.range().equal(new BSet<DOOR_STATE>(DOOR_STATE.closed)).booleanValue()) && (!doors.range().equal(new BSet<DOOR_STATE>(DOOR_STATE.closed)).booleanValue() || door.equal(DOOR_STATE.closed).booleanValue())).booleanValue(); + } + + public boolean _check_inv_22() { + return new BBoolean((!door.equal(DOOR_STATE.open).booleanValue() || doors.range().equal(new BSet<DOOR_STATE>(DOOR_STATE.open)).booleanValue()) && (!doors.range().equal(new BSet<DOOR_STATE>(DOOR_STATE.open)).booleanValue() || door.equal(DOOR_STATE.open).booleanValue())).booleanValue(); + } + + public boolean _check_inv_23() { + return new BBoolean((!gear.equal(GEAR_STATE.extended).booleanValue() || gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.extended)).booleanValue()) && (!gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.extended)).booleanValue() || gear.equal(GEAR_STATE.extended).booleanValue())).booleanValue(); + } + + public boolean _check_inv_24() { + return new BBoolean((!gear.equal(GEAR_STATE.retracted).booleanValue() || gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.retracted)).booleanValue()) && (!gears.range().equal(new BSet<GEAR_STATE>(GEAR_STATE.retracted)).booleanValue() || gear.equal(GEAR_STATE.retracted).booleanValue())).booleanValue(); + } + + public boolean _check_inv_25() { + return new BBoolean(!gear.equal(GEAR_STATE.gear_moving).booleanValue() || door.equal(DOOR_STATE.open).booleanValue()).booleanValue(); + } + + public boolean _check_inv_() { + return !(!state._check_inv_1() || !state._check_inv_2() || !state._check_inv_3() || !state._check_inv_4() || !state._check_inv_5() || !state._check_inv_6() || !state._check_inv_7() || !state._check_inv_8() || !state._check_inv_9() || !state._check_inv_10() || !state._check_inv_11() || !state._check_inv_12() || !state._check_inv_13() || !state._check_inv_14() || !state._check_inv_15() || !state._check_inv_16() || !state._check_inv_17() || !state._check_inv_18() || !state._check_inv_19() || !state._check_inv_20() || !state._check_inv_21() || !state._check_inv_22() || !state._check_inv_23() || !state._check_inv_24() || !state._check_inv_25()); + } + + public LandingGear_R6 _copy() { + return new LandingGear_R6(analogical_switch, general_EV, general_valve, handle_move, close_EV, extend_EV, open_EV, retract_EV, shock_absorber, valve_close_door, valve_extend_gear, valve_open_door, valve_retract_gear, doors, gears, handle, door, gear); + } + + +} + diff --git a/Beispiele/LandingGear_R6.json b/Beispiele/LandingGear_R6.json new file mode 100644 index 0000000000000000000000000000000000000000..0f08a2819b821948825602f024e2308fbb6df292 --- /dev/null +++ b/Beispiele/LandingGear_R6.json @@ -0,0 +1,241 @@ +{ + "machineName": "LandingGear_R6", + "variables": [ + "_get_analogical_switch", + "_get_general_EV", + "_get_general_valve", + "_get_handle_move", + "_get_close_EV", + "_get_extend_EV", + "_get_open_EV", + "_get_retract_EV", + "_get_shock_absorber", + "_get_valve_close_door", + "_get_valve_extend_gear", + "_get_valve_open_door", + "_get_valve_retract_gear", + "_get_doors", + "_get_gears", + "_get_handle", + "_get_door", + "_get_gear" + ], + "operationFunctions": [ + { + "opName": "begin_flying", + "parameterTypes": [] + }, + { + "opName": "land_plane", + "parameterTypes": [] + }, + { + "opName": "open_valve_door_open", + "parameterTypes": [] + }, + { + "opName": "close_valve_door_open", + "parameterTypes": [] + }, + { + "opName": "open_valve_door_close", + "parameterTypes": [] + }, + { + "opName": "close_valve_door_close", + "parameterTypes": [] + }, + { + "opName": "open_valve_retract_gear", + "parameterTypes": [] + }, + { + "opName": "close_valve_retract_gear", + "parameterTypes": [] + }, + { + "opName": "open_valve_extend_gear", + "parameterTypes": [] + }, + { + "opName": "close_valve_extend_gear", + "parameterTypes": [] + }, + { + "opName": "con_stimulate_open_door_valve", + "parameterTypes": [] + }, + { + "opName": "con_stop_stimulate_open_door_valve", + "parameterTypes": [] + }, + { + "opName": "con_stimulate_close_door_valve", + "parameterTypes": [] + }, + { + "opName": "con_stop_stimulate_close_door_valve", + "parameterTypes": [] + }, + { + "opName": "con_stimulate_retract_gear_valve", + "parameterTypes": [] + }, + { + "opName": "con_stop_stimulate_retract_gear_valve", + "parameterTypes": [] + }, + { + "opName": "con_stimulate_extend_gear_valve", + "parameterTypes": [] + }, + { + "opName": "con_stop_stimulate_extend_gear_valve", + "parameterTypes": [] + }, + { + "opName": "env_start_retracting_first", + "parameterTypes": [ + "POSITION" + ] + }, + { + "opName": "env_retract_gear_skip", + "parameterTypes": [ + "POSITION" + ] + }, + { + "opName": "env_retract_gear_last", + "parameterTypes": [ + "POSITION" + ] + }, + { + "opName": "env_start_extending", + "parameterTypes": [ + "POSITION" + ] + }, + { + "opName": "env_extend_gear_last", + "parameterTypes": [ + "POSITION" + ] + }, + { + "opName": "env_extend_gear_skip", + "parameterTypes": [ + "POSITION" + ] + }, + { + "opName": "env_start_open_door", + "parameterTypes": [ + "POSITION" + ] + }, + { + "opName": "env_open_door_last", + "parameterTypes": [ + "POSITION" + ] + }, + { + "opName": "env_open_door_skip", + "parameterTypes": [ + "POSITION" + ] + }, + { + "opName": "env_start_close_door", + "parameterTypes": [ + "POSITION" + ] + }, + { + "opName": "env_close_door", + "parameterTypes": [ + "POSITION" + ] + }, + { + "opName": "env_close_door_skip", + "parameterTypes": [ + "POSITION" + ] + }, + { + "opName": "toggle_handle_up", + "parameterTypes": [] + }, + { + "opName": "toggle_handle_down", + "parameterTypes": [] + }, + { + "opName": "con_stimulate_general_valve", + "parameterTypes": [] + }, + { + "opName": "con_stop_stimulate_general_valve", + "parameterTypes": [] + }, + { + "opName": "evn_open_general_valve", + "parameterTypes": [] + }, + { + "opName": "evn_close_general_valve", + "parameterTypes": [] + }, + { + "opName": "env_close_analogical_switch", + "parameterTypes": [] + }, + { + "opName": "env_open_analogical_switch", + "parameterTypes": [] + } + ], + "transitionEvaluationFunctions": { + "close_valve_door_close": "_tr_close_valve_door_close", + "close_valve_retract_gear": "_tr_close_valve_retract_gear", + "con_stimulate_open_door_valve": "_tr_con_stimulate_open_door_valve", + "env_close_door": "_tr_env_close_door", + "env_start_close_door": "_tr_env_start_close_door", + "toggle_handle_up": "_tr_toggle_handle_up", + "toggle_handle_down": "_tr_toggle_handle_down", + "open_valve_door_open": "_tr_open_valve_door_open", + "env_retract_gear_last": "_tr_env_retract_gear_last", + "env_open_door_last": "_tr_env_open_door_last", + "con_stop_stimulate_retract_gear_valve": "_tr_con_stop_stimulate_retract_gear_valve", + "env_close_door_skip": "_tr_env_close_door_skip", + "con_stop_stimulate_close_door_valve": "_tr_con_stop_stimulate_close_door_valve", + "env_open_analogical_switch": "_tr_env_open_analogical_switch", + "con_stop_stimulate_general_valve": "_tr_con_stop_stimulate_general_valve", + "env_extend_gear_last": "_tr_env_extend_gear_last", + "evn_open_general_valve": "_tr_evn_open_general_valve", + "land_plane": "_tr_land_plane", + "con_stimulate_retract_gear_valve": "_tr_con_stimulate_retract_gear_valve", + "con_stimulate_general_valve": "_tr_con_stimulate_general_valve", + "env_start_retracting_first": "_tr_env_start_retracting_first", + "env_retract_gear_skip": "_tr_env_retract_gear_skip", + "open_valve_extend_gear": "_tr_open_valve_extend_gear", + "begin_flying": "_tr_begin_flying", + "open_valve_retract_gear": "_tr_open_valve_retract_gear", + "env_close_analogical_switch": "_tr_env_close_analogical_switch", + "env_start_extending": "_tr_env_start_extending", + "open_valve_door_close": "_tr_open_valve_door_close", + "con_stop_stimulate_open_door_valve": "_tr_con_stop_stimulate_open_door_valve", + "con_stop_stimulate_extend_gear_valve": "_tr_con_stop_stimulate_extend_gear_valve", + "evn_close_general_valve": "_tr_evn_close_general_valve", + "close_valve_extend_gear": "_tr_close_valve_extend_gear", + "con_stimulate_extend_gear_valve": "_tr_con_stimulate_extend_gear_valve", + "close_valve_door_open": "_tr_close_valve_door_open", + "con_stimulate_close_door_valve": "_tr_con_stimulate_close_door_valve", + "env_extend_gear_skip": "_tr_env_extend_gear_skip", + "env_open_door_skip": "_tr_env_open_door_skip", + "env_start_open_door": "_tr_env_start_open_door" + } +} diff --git a/Beispiele/LandingGear_R6.mch b/Beispiele/LandingGear_R6.mch new file mode 100644 index 0000000000000000000000000000000000000000..72bd1819e166f1370614ab88f8b30a4c1927338b --- /dev/null +++ b/Beispiele/LandingGear_R6.mch @@ -0,0 +1,532 @@ +MACHINE LandingGear_R6 +SETS /* enumerated */ + DOOR_STATE={open,closed,door_moving}; + GEAR_STATE={retracted,extended,gear_moving}; + HANDLE_STATE={up,down}; + POSITION={fr,lt,rt}; + SWITCH_STATE={switch_open,switch_closed}; + PLANE_STATE={ground,flight}; + VALVE_STATE={valve_open,valve_closed} + +VARIABLES + analogical_switch, + general_EV, + general_valve, + handle_move, + close_EV, + extend_EV, + open_EV, + retract_EV, + shock_absorber, + valve_close_door, + valve_extend_gear, + valve_open_door, + valve_retract_gear, + doors, + gears, + handle, + door, + gear + +/* PROMOTED OPERATIONS + begin_flying, + land_plane, + open_valve_door_open, + close_valve_door_open, + open_valve_door_close, + close_valve_door_close, + open_valve_retract_gear, + close_valve_retract_gear, + open_valve_extend_gear, + close_valve_extend_gear, + con_stimulate_open_door_valve, + con_stop_stimulate_open_door_valve, + con_stimulate_close_door_valve, + con_stop_stimulate_close_door_valve, + con_stimulate_retract_gear_valve, + con_stop_stimulate_retract_gear_valve, + con_stimulate_extend_gear_valve, + con_stop_stimulate_extend_gear_valve, + env_start_retracting_first, + env_retract_gear_skip, + env_retract_gear_last, + env_start_extending, + env_extend_gear_last, + env_extend_gear_skip, + env_start_open_door, + env_open_door_last, + env_open_door_skip, + env_start_close_door, + env_close_door, + env_close_door_skip, + toggle_handle_up, + toggle_handle_down, + con_stimulate_general_valve, + con_stop_stimulate_general_valve, + evn_open_general_valve, + evn_close_general_valve, + env_close_analogical_switch, + env_open_analogical_switch */ +INVARIANT +analogical_switch : SWITCH_STATE +& general_EV : BOOL +& general_valve : VALVE_STATE +& handle_move : BOOL +& close_EV : BOOL +& extend_EV : BOOL +& open_EV : BOOL +& retract_EV : BOOL +& shock_absorber : PLANE_STATE +& valve_close_door : VALVE_STATE +& valve_extend_gear : VALVE_STATE +& valve_open_door : VALVE_STATE +& valve_retract_gear : VALVE_STATE +& handle : HANDLE_STATE +& door : DOOR_STATE +& gear : GEAR_STATE +& /* @R6GearsDoorsHandleValvesControllerSwitch:r51 */ ((open_EV = TRUE or close_EV = TRUE or retract_EV = TRUE or extend_EV = TRUE) => general_EV = TRUE) +& /* @R5GearsDoorsHandleValvesController:R41 */ not(open_EV = TRUE & close_EV = TRUE) +& /* @R3GearsDoorsHandle:inv1 */ gears : POSITION --> GEAR_STATE +& /* @R3GearsDoorsHandle:inv2 */ doors : POSITION --> DOOR_STATE +& /* @R3GearsDoorsHandle:glued1 */ (door = closed <=> ran(doors) = {closed}) +& /* @R3GearsDoorsHandle:glued2 */ (door = open <=> ran(doors) = {open}) +& /* @R3GearsDoorsHandle:glueg1 */ (gear = extended <=> ran(gears) = {extended}) +& /* @R3GearsDoorsHandle:glueg2 */ (gear = retracted <=> ran(gears) = {retracted}) +& /* @R1GearDoor:safety_inv1 */ (gear = gear_moving => door = open) + + +INITIALISATION + gears := POSITION * {extended} || + doors := POSITION * {closed} || + handle := down || + valve_extend_gear := valve_closed || + valve_retract_gear := valve_closed || + valve_open_door := valve_closed || + valve_close_door := valve_closed || + open_EV := FALSE || + close_EV := FALSE || + retract_EV := FALSE || + extend_EV := FALSE || + shock_absorber := ground || + general_EV := FALSE || + general_valve := valve_closed || + analogical_switch := switch_open || + handle_move := FALSE || + gear := extended || + door := closed + +OPERATIONS + + begin_flying = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:onground */ shock_absorber = ground + THEN + shock_absorber := flight + END; + + land_plane = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:onground */ shock_absorber = flight + THEN + shock_absorber := ground + END; + + open_valve_door_open = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:valve_not_open */ valve_open_door = valve_closed + & /* @R6GearsDoorsHandleValvesControllerSwitch:grd3 */ open_EV = TRUE + THEN + valve_open_door := valve_open + END; + + close_valve_door_open = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:valve_not_closed */ valve_open_door = valve_open + & /* @R6GearsDoorsHandleValvesControllerSwitch:grd3 */ open_EV = FALSE + THEN + valve_open_door := valve_closed + END; + + open_valve_door_close = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:valve_not_open */ valve_close_door = valve_closed + & /* @R6GearsDoorsHandleValvesControllerSwitch:grd3 */ close_EV = TRUE + THEN + valve_close_door := valve_open + END; + + close_valve_door_close = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:valve_not_closed */ valve_close_door = valve_open + & /* @R6GearsDoorsHandleValvesControllerSwitch:grd2 */ close_EV = FALSE + THEN + valve_close_door := valve_closed + END; + + open_valve_retract_gear = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:valve_not_open */ valve_retract_gear = valve_closed + & /* @R6GearsDoorsHandleValvesControllerSwitch:grd3 */ retract_EV = TRUE + THEN + valve_retract_gear := valve_open + END; + + close_valve_retract_gear = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:valve_not_closed */ valve_retract_gear = valve_open + & /* @R6GearsDoorsHandleValvesControllerSwitch:grd3 */ retract_EV = FALSE + THEN + valve_retract_gear := valve_closed + END; + + open_valve_extend_gear = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:valve_not_open */ valve_extend_gear = valve_closed + & /* @R6GearsDoorsHandleValvesControllerSwitch:grd3 */ extend_EV = TRUE + THEN + valve_extend_gear := valve_open + END; + + close_valve_extend_gear = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:valve_not_closed */ valve_extend_gear = valve_open + & /* @R6GearsDoorsHandleValvesControllerSwitch:grd3 */ extend_EV = FALSE + THEN + valve_extend_gear := valve_closed + END; + + con_stimulate_open_door_valve = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:grd1 */ open_EV = FALSE + & /* @R6GearsDoorsHandleValvesControllerSwitch:grd2 */ close_EV = FALSE + & /* @R6GearsDoorsHandleValvesControllerSwitch:grdh1 */ ((handle = down & not(ran(gears) = {extended})) or (handle = up & not(ran(gears) = {retracted}) & not(ran(doors) = {open} & shock_absorber = ground))) + & /* @R6GearsDoorsHandleValvesControllerSwitch:general_ev */ general_EV = TRUE + THEN + open_EV := TRUE + END; + + con_stop_stimulate_open_door_valve = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:grd1 */ open_EV = TRUE + & /* @R6GearsDoorsHandleValvesControllerSwitch:grd11 */ extend_EV = FALSE + & /* @R6GearsDoorsHandleValvesControllerSwitch:grd12 */ retract_EV = FALSE + & /* @R6GearsDoorsHandleValvesControllerSwitch:grdh1 */ ((handle = down & ran(gears) = {extended}) or (handle = up & (ran(gears) = {retracted} or shock_absorber = ground) & ran(doors) = {open})) + & /* @R6GearsDoorsHandleValvesControllerSwitch:general_ev */ general_EV = TRUE + THEN + open_EV := FALSE + END; + + con_stimulate_close_door_valve = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:grd2 */ close_EV = FALSE + & /* @R6GearsDoorsHandleValvesControllerSwitch:grd1 */ open_EV = FALSE + & /* @R6GearsDoorsHandleValvesControllerSwitch:grd11 */ extend_EV = FALSE + & /* @R6GearsDoorsHandleValvesControllerSwitch:grd12 */ retract_EV = FALSE + & /* @R6GearsDoorsHandleValvesControllerSwitch:grdh1 */ ((handle = down & ran(gears) = {extended}) or (handle = up & (ran(gears) = {retracted} or shock_absorber = ground))) + & /* @R6GearsDoorsHandleValvesControllerSwitch:grddoors */ not(ran(doors) = {closed}) + & /* @R6GearsDoorsHandleValvesControllerSwitch:general_ev */ general_EV = TRUE + THEN + close_EV := TRUE + END; + + con_stop_stimulate_close_door_valve = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:grd1 */ close_EV = TRUE + & /* @R6GearsDoorsHandleValvesControllerSwitch:grdh1 */ ((handle = down & ran(gears) = {extended} & ran(doors) = {closed}) or (handle = up & (ran(gears) = {retracted} or shock_absorber = ground) & ran(doors) = {closed})) + & /* @R6GearsDoorsHandleValvesControllerSwitch:general_ev */ general_EV = TRUE + THEN + close_EV := FALSE + END; + + con_stimulate_retract_gear_valve = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:grd1 */ retract_EV = FALSE + & /* @R6GearsDoorsHandleValvesControllerSwitch:grd2 */ extend_EV = FALSE + & /* @R6GearsDoorsHandleValvesControllerSwitch:grd3 */ open_EV = TRUE + & handle = up + & not(ran(gears) = {retracted}) + & /* @R6GearsDoorsHandleValvesControllerSwitch:grdflight */ shock_absorber = flight + & /* @R6GearsDoorsHandleValvesControllerSwitch:grddoors */ ran(doors) = {open} + & /* @R6GearsDoorsHandleValvesControllerSwitch:general_ev */ general_EV = TRUE + THEN + retract_EV := TRUE + END; + + con_stop_stimulate_retract_gear_valve = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:grd1 */ retract_EV = TRUE + & /* @R6GearsDoorsHandleValvesControllerSwitch:grdh1 */ (handle = down or ran(gears) = {retracted}) + & /* @R6GearsDoorsHandleValvesControllerSwitch:general_ev */ general_EV = TRUE + THEN + retract_EV := FALSE + END; + + con_stimulate_extend_gear_valve = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:grd1 */ extend_EV = FALSE + & /* @R6GearsDoorsHandleValvesControllerSwitch:grd2 */ retract_EV = FALSE + & /* @R6GearsDoorsHandleValvesControllerSwitch:grd3 */ open_EV = TRUE + & handle = down + & not(ran(gears) = {extended}) + & /* @R6GearsDoorsHandleValvesControllerSwitch:grddoors */ ran(doors) = {open} + & /* @R6GearsDoorsHandleValvesControllerSwitch:general_ev */ general_EV = TRUE + THEN + extend_EV := TRUE + END; + + con_stop_stimulate_extend_gear_valve = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:grd2 */ extend_EV = TRUE + & /* @R6GearsDoorsHandleValvesControllerSwitch:grdh1 */ (handle = up or ran(gears) = {extended}) + & /* @R6GearsDoorsHandleValvesControllerSwitch:general_ev */ general_EV = TRUE + THEN + extend_EV := FALSE + END; + + env_start_retracting_first(/* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr) = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr : dom(gears) + & /* @R6GearsDoorsHandleValvesControllerSwitch:all_doors_open */ ran(doors) = {open} + & /* @R6GearsDoorsHandleValvesControllerSwitch:handle_up */ handle = up + & /* @R6GearsDoorsHandleValvesControllerSwitch:g1 */ gears(gr) = extended + & /* @R6GearsDoorsHandleValvesControllerSwitch:gv */ valve_retract_gear = valve_open + & /* @R6GearsDoorsHandleValvesControllerSwitch:general_valve */ general_valve = valve_open + & /* @R2GearDoorHandle:g1 */ gear : {extended,gear_moving} + & /* @R2GearDoorHandle:door_open */ door = open + THEN + gears := gears <+ {gr |-> gear_moving} || + gear := gear_moving + END; + + env_retract_gear_skip(/* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr) = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr : dom(gears) + & /* @R6GearsDoorsHandleValvesControllerSwitch:all_doors_open */ ran(doors) = {open} + & /* @R6GearsDoorsHandleValvesControllerSwitch:all_others */ gears[POSITION \ {gr}] /= {retracted} + & /* @R6GearsDoorsHandleValvesControllerSwitch:handle_up */ handle = up + & /* @R6GearsDoorsHandleValvesControllerSwitch:g1 */ gears(gr) = gear_moving + & /* @R6GearsDoorsHandleValvesControllerSwitch:general_valve */ general_valve = valve_open + THEN + gears := gears <+ {gr |-> retracted} + END; + + env_retract_gear_last(/* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr) = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr : dom(gears) + & /* @R6GearsDoorsHandleValvesControllerSwitch:all_doors_open */ ran(doors) = {open} + & /* @R6GearsDoorsHandleValvesControllerSwitch:all_others */ gears[POSITION \ {gr}] = {retracted} + & /* @R6GearsDoorsHandleValvesControllerSwitch:handle_up */ handle = up + & /* @R6GearsDoorsHandleValvesControllerSwitch:g1 */ gears(gr) = gear_moving + & /* @R6GearsDoorsHandleValvesControllerSwitch:general_valve */ general_valve = valve_open + & /* @R2GearDoorHandle:g1 */ gear = gear_moving + & /* @R2GearDoorHandle:door_open */ door = open + THEN + gears := gears <+ {gr |-> retracted} || + gear := retracted + END; + + env_start_extending(/* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr) = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr : dom(gears) + & /* @R6GearsDoorsHandleValvesControllerSwitch:all_doors_open */ ran(doors) = {open} + & /* @R6GearsDoorsHandleValvesControllerSwitch:handle_down */ handle = down + & /* @R6GearsDoorsHandleValvesControllerSwitch:g1 */ gears(gr) = retracted + & /* @R6GearsDoorsHandleValvesControllerSwitch:gv */ valve_extend_gear = valve_open + & /* @R6GearsDoorsHandleValvesControllerSwitch:general_valve */ general_valve = valve_open + & /* @R2GearDoorHandle:g1 */ gear : {gear_moving,retracted} + & /* @R2GearDoorHandle:door_open */ door = open + THEN + gears := gears <+ {gr |-> gear_moving} || + gear := gear_moving + END; + + env_extend_gear_last(/* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr) = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr : dom(gears) + & /* @R6GearsDoorsHandleValvesControllerSwitch:all_doors_open */ ran(doors) = {open} + & /* @R6GearsDoorsHandleValvesControllerSwitch:handle_down */ handle = down + & /* @R6GearsDoorsHandleValvesControllerSwitch:all_others */ gears[POSITION \ {gr}] = {extended} + & /* @R6GearsDoorsHandleValvesControllerSwitch:g1 */ gears(gr) = gear_moving + & /* @R6GearsDoorsHandleValvesControllerSwitch:general_valve */ general_valve = valve_open + & /* @R2GearDoorHandle:g1 */ gear = gear_moving + & /* @R2GearDoorHandle:door_open */ door = open + THEN + gears := gears <+ {gr |-> extended} || + gear := extended + END; + + env_extend_gear_skip(/* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr) = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr : dom(gears) + & /* @R6GearsDoorsHandleValvesControllerSwitch:all_doors_open */ ran(doors) = {open} + & /* @R6GearsDoorsHandleValvesControllerSwitch:handle_down */ handle = down + & /* @R6GearsDoorsHandleValvesControllerSwitch:all_others */ gears[POSITION \ {gr}] /= {extended} + & /* @R6GearsDoorsHandleValvesControllerSwitch:g1 */ gears(gr) = gear_moving + & /* @R6GearsDoorsHandleValvesControllerSwitch:general_valve */ general_valve = valve_open + THEN + gears := gears <+ {gr |-> extended} + END; + + env_start_open_door(/* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr) = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr : dom(gears) + & doors(gr) = closed + & gears(gr) /= gear_moving + & /* @R6GearsDoorsHandleValvesControllerSwitch:nomov */ gear_moving /: ran(gears) + & /* @R6GearsDoorsHandleValvesControllerSwitch:h */ ((handle = down & ran(gears) = {retracted}) or (handle = up & ran(gears) = {extended})) + & /* @R6GearsDoorsHandleValvesControllerSwitch:gv */ valve_open_door = valve_open + & /* @R6GearsDoorsHandleValvesControllerSwitch:general_valve */ general_valve = valve_open + & door : {closed,door_moving} + & gear /= gear_moving + & /* @R2GearDoorHandle:h */ ((handle = down & gear = retracted) or (handle = up & gear = extended)) + THEN + doors := doors <+ {gr |-> door_moving} || + door := door_moving + END; + + env_open_door_last(/* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr) = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr : dom(gears) + & doors(gr) = door_moving + & gears(gr) /= gear_moving + & /* @R6GearsDoorsHandleValvesControllerSwitch:nomov */ gear_moving /: ran(gears) + & /* @R6GearsDoorsHandleValvesControllerSwitch:all_others */ doors[POSITION \ {gr}] = {open} + & /* @R6GearsDoorsHandleValvesControllerSwitch:h */ ((handle = down & ran(gears) = {retracted}) or (handle = up & ran(gears) = {extended})) + & /* @R6GearsDoorsHandleValvesControllerSwitch:gv */ valve_open_door = valve_open + & /* @R6GearsDoorsHandleValvesControllerSwitch:general_valve */ general_valve = valve_open + & door = door_moving + & gear /= gear_moving + & /* @R2GearDoorHandle:h */ ((handle = down & gear = retracted) or (handle = up & gear = extended)) + THEN + doors := doors <+ {gr |-> open} || + door := open + END; + + env_open_door_skip(/* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr) = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr : dom(gears) + & doors(gr) = door_moving + & gears(gr) /= gear_moving + & /* @R6GearsDoorsHandleValvesControllerSwitch:nomov */ gear_moving /: ran(gears) + & /* @R6GearsDoorsHandleValvesControllerSwitch:all_others */ doors[POSITION \ {gr}] /= {open} + & /* @R6GearsDoorsHandleValvesControllerSwitch:h */ ((handle = down & ran(gears) = {retracted}) or (handle = up & ran(gears) = {extended})) + & /* @R6GearsDoorsHandleValvesControllerSwitch:gv */ valve_open_door = valve_open + & /* @R6GearsDoorsHandleValvesControllerSwitch:general_valve */ general_valve = valve_open + THEN + doors := doors <+ {gr |-> open} + END; + + env_start_close_door(/* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr) = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr : dom(gears) + & doors(gr) = open + & gears(gr) /= gear_moving + & /* @R6GearsDoorsHandleValvesControllerSwitch:h */ ((handle = up & (ran(gears) = {retracted} or ran(gears) = {extended})) or (handle = down & ran(gears) = {extended})) + & /* @R6GearsDoorsHandleValvesControllerSwitch:gv */ valve_close_door = valve_open + & /* @R6GearsDoorsHandleValvesControllerSwitch:general_valve */ general_valve = valve_open + & door : {door_moving,open} & gear /= gear_moving & /* @R2GearDoorHandle:h */ ((handle = down & gear = extended) or (handle = up & gear : {extended,retracted})) + THEN + doors := doors <+ {gr |-> door_moving} || + door := door_moving + END; + + env_close_door(/* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr) = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr : dom(gears) + & doors(gr) = door_moving & gears(gr) /= gear_moving & /* @R6GearsDoorsHandleValvesControllerSwitch:nomov */ gear_moving /: ran(gears) + & /* @R6GearsDoorsHandleValvesControllerSwitch:all_others */ doors[POSITION \ {gr}] = {closed} + & /* @R6GearsDoorsHandleValvesControllerSwitch:h */ ((handle = up & (ran(gears) = {retracted} or ran(gears) = {extended})) or (handle = down & ran(gears) = {extended})) + & /* @R6GearsDoorsHandleValvesControllerSwitch:gv */ valve_close_door = valve_open + & /* @R6GearsDoorsHandleValvesControllerSwitch:hground */ ((handle = up & ran(gears) = {extended}) => shock_absorber = ground) + & /* @R6GearsDoorsHandleValvesControllerSwitch:general_valve */ general_valve = valve_open & door = door_moving & gear /= gear_moving + & /* @R2GearDoorHandle:h */ ((handle = down & gear = extended) or (handle = up & gear : {extended,retracted})) + THEN + doors := doors <+ {gr |-> closed} || + door := closed + END; + + env_close_door_skip(/* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr) = + SELECT /* @R6GearsDoorsHandleValvesControllerSwitch:gr */ gr : dom(gears) + & doors(gr) = door_moving + & gears(gr) /= gear_moving + & /* @R6GearsDoorsHandleValvesControllerSwitch:nomov */ gear_moving /: ran(gears) + & /* @R6GearsDoorsHandleValvesControllerSwitch:all_others */ doors[POSITION \ {gr}] /= {closed} + & /* @R6GearsDoorsHandleValvesControllerSwitch:h */ ((handle = up & (ran(gears) = {retracted} or ran(gears) = {extended})) or (handle = down & ran(gears) = {extended})) + & /* @R6GearsDoorsHandleValvesControllerSwitch:gv */ valve_close_door = valve_open + & /* @R6GearsDoorsHandleValvesControllerSwitch:hground */ ((handle = up & ran(gears) = {extended}) => shock_absorber = ground) + & /* @R6GearsDoorsHandleValvesControllerSwitch:general_valve */ general_valve = valve_open + THEN + doors := doors <+ {gr |-> closed} + END; + + toggle_handle_up = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:h */ handle = down + THEN + handle := up || + handle_move := TRUE + END; + + toggle_handle_down = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:h */ handle = up + THEN + handle := down || + handle_move := TRUE + END; + + con_stimulate_general_valve = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:grd1 */ general_EV = FALSE + & /* @R6GearsDoorsHandleValvesControllerSwitch:grd2 */ handle_move = TRUE + THEN + general_EV := TRUE + END; + + con_stop_stimulate_general_valve = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:grd1 */ general_EV = TRUE + & open_EV = FALSE + & close_EV = FALSE + & retract_EV = FALSE + & extend_EV = FALSE + & close_EV = FALSE + & ((handle = up & ran(gears) = {retracted} & ran(doors) = {closed} & open_EV = FALSE) or (handle = down & ran(gears) = {extended} & ran(doors) = {closed} & open_EV = FALSE) or (handle = up & ran(gears) = {extended} & ran(doors) = {closed} & open_EV = FALSE)) + THEN + general_EV := FALSE || + handle_move := FALSE + END; + + evn_open_general_valve = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:grd1 */ general_EV = TRUE + & /* @R6GearsDoorsHandleValvesControllerSwitch:grd2 */ general_valve = valve_closed + & /* @R6GearsDoorsHandleValvesControllerSwitch:grd3 */ analogical_switch = switch_closed + THEN + general_valve := valve_open + END; + + evn_close_general_valve = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:grd1 */ (general_EV = FALSE or analogical_switch = switch_open ) + & /* @R6GearsDoorsHandleValvesControllerSwitch:grd2 */ general_valve = valve_open + THEN + general_valve := valve_closed + END; + + env_close_analogical_switch = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:grd1 */ analogical_switch = switch_open + & /* @R6GearsDoorsHandleValvesControllerSwitch:grd2 */ handle_move = TRUE + THEN + analogical_switch := switch_closed + END; + + env_open_analogical_switch = + SELECT + /* @R6GearsDoorsHandleValvesControllerSwitch:grd1 */ analogical_switch = switch_closed + THEN + analogical_switch := switch_open + END + +END diff --git a/Beispiele/Lift_MC.mch b/Beispiele/Lift_MC.mch new file mode 100644 index 0000000000000000000000000000000000000000..3cb38062a84c46c5a8269a50ce82683f944be665 --- /dev/null +++ b/Beispiele/Lift_MC.mch @@ -0,0 +1,14 @@ +MACHINE Lift_MC + +VARIABLES floor + +INVARIANT floor >= 0 & floor <= 100 + +INITIALISATION floor := 0 + +OPERATIONS + + inc = PRE floor<100 THEN floor := floor + 1 END ; + dec = PRE floor>0 THEN floor := floor - 1 END + +END \ No newline at end of file diff --git a/Beispiele/TrafficLight_MC.mch b/Beispiele/TrafficLight_MC.mch new file mode 100644 index 0000000000000000000000000000000000000000..a7005d06a23ce4837473fc15c0c7292d8005bfce --- /dev/null +++ b/Beispiele/TrafficLight_MC.mch @@ -0,0 +1,46 @@ +MACHINE TrafficLight_MC + +SETS colors = {red, redyellow, yellow, green} + +VARIABLES tl_cars, tl_peds + +INVARIANT tl_cars : colors & + tl_peds : {red, green} & + (tl_peds = red or + tl_cars = red) + +INITIALISATION tl_cars := red; tl_peds := red + +OPERATIONS + +cars_ry = + SELECT tl_cars = red & tl_peds = red THEN + tl_cars := redyellow + END; + +cars_y = + SELECT tl_cars = green & tl_peds = red THEN + tl_cars := yellow + END; + +cars_g = + SELECT tl_cars = redyellow & tl_peds = red THEN + tl_cars := green + END; + +cars_r = + SELECT tl_cars = yellow & tl_peds = red THEN + tl_cars := red + END; + +peds_r = + SELECT tl_peds = green & tl_cars = red THEN + tl_peds := red + END; + +peds_g = + SELECT tl_peds = red & tl_cars = red THEN + tl_peds := green + END + +END \ No newline at end of file diff --git a/Beispiele/Train_1_beebook_deterministic_MC_POR_v2.java b/Beispiele/Train_1_beebook_deterministic_MC_POR_v2.java new file mode 100644 index 0000000000000000000000000000000000000000..ba4d5bb43aacae90177ab5a064c6de73393e13f8 --- /dev/null +++ b/Beispiele/Train_1_beebook_deterministic_MC_POR_v2.java @@ -0,0 +1,465 @@ +import de.hhu.stups.btypes.BRelation; +import de.hhu.stups.btypes.BTuple; +import de.hhu.stups.btypes.BSet; +import de.hhu.stups.btypes.BObject; +import de.hhu.stups.btypes.BBoolean; +import java.util.Objects; +import java.util.Arrays; +import de.hhu.stups.btypes.BUtils; + + +public class Train_1_beebook_deterministic_MC_POR_v2 { + + + private static BRelation<ROUTES, BLOCKS> fst; + private static BRelation<ROUTES, BLOCKS> lst; + private static BRelation<ROUTES, BRelation<BLOCKS, BLOCKS>> nxt; + private static BRelation<BLOCKS, ROUTES> rtbl; + + + public enum BLOCKS implements BObject { + A, + B, + C, + D, + E, + F, + G, + H, + I, + J, + K, + L, + M, + N; + + public BBoolean equal(BLOCKS o) { + return new BBoolean(this == o); + } + + public BBoolean unequal(BLOCKS o) { + return new BBoolean(this != o); + } + } + + public enum ROUTES implements BObject { + R1, + R2, + R3, + R4, + R5, + R6, + R7, + R8, + R9, + R10; + + public BBoolean equal(ROUTES o) { + return new BBoolean(this == o); + } + + public BBoolean unequal(ROUTES o) { + return new BBoolean(this != o); + } + } + + private static BSet<BLOCKS> _BLOCKS = new BSet<BLOCKS>(BLOCKS.A, BLOCKS.B, BLOCKS.C, BLOCKS.D, BLOCKS.E, BLOCKS.F, BLOCKS.G, BLOCKS.H, BLOCKS.I, BLOCKS.J, BLOCKS.K, BLOCKS.L, BLOCKS.M, BLOCKS.N); + private static BSet<ROUTES> _ROUTES = new BSet<ROUTES>(ROUTES.R1, ROUTES.R2, ROUTES.R3, ROUTES.R4, ROUTES.R5, ROUTES.R6, ROUTES.R7, ROUTES.R8, ROUTES.R9, ROUTES.R10); + + private BSet<BLOCKS> LBT; + private BRelation<BLOCKS, BLOCKS> TRK; + private BSet<ROUTES> frm; + private BSet<BLOCKS> OCC; + private BSet<BLOCKS> resbl; + private BSet<ROUTES> resrt; + private BRelation<BLOCKS, ROUTES> rsrtbl; + + static { + fst = new BRelation<ROUTES, BLOCKS>(new BTuple<>(ROUTES.R1, BLOCKS.L), new BTuple<>(ROUTES.R2, BLOCKS.L), new BTuple<>(ROUTES.R3, BLOCKS.L), new BTuple<>(ROUTES.R4, BLOCKS.M), new BTuple<>(ROUTES.R5, BLOCKS.M), new BTuple<>(ROUTES.R6, BLOCKS.C), new BTuple<>(ROUTES.R7, BLOCKS.G), new BTuple<>(ROUTES.R8, BLOCKS.N), new BTuple<>(ROUTES.R9, BLOCKS.G), new BTuple<>(ROUTES.R10, BLOCKS.N)); + lst = new BRelation<ROUTES, BLOCKS>(new BTuple<>(ROUTES.R1, BLOCKS.C), new BTuple<>(ROUTES.R2, BLOCKS.G), new BTuple<>(ROUTES.R3, BLOCKS.N), new BTuple<>(ROUTES.R4, BLOCKS.G), new BTuple<>(ROUTES.R5, BLOCKS.N), new BTuple<>(ROUTES.R6, BLOCKS.L), new BTuple<>(ROUTES.R7, BLOCKS.L), new BTuple<>(ROUTES.R8, BLOCKS.L), new BTuple<>(ROUTES.R9, BLOCKS.M), new BTuple<>(ROUTES.R10, BLOCKS.M)); + nxt = new BRelation<ROUTES, BRelation<BLOCKS, BLOCKS>>(new BTuple<>(ROUTES.R1, new BRelation<BLOCKS, BLOCKS>(new BTuple<>(BLOCKS.L, BLOCKS.A), new BTuple<>(BLOCKS.A, BLOCKS.B), new BTuple<>(BLOCKS.B, BLOCKS.C))), new BTuple<>(ROUTES.R2, new BRelation<BLOCKS, BLOCKS>(new BTuple<>(BLOCKS.L, BLOCKS.A), new BTuple<>(BLOCKS.A, BLOCKS.B), new BTuple<>(BLOCKS.B, BLOCKS.D), new BTuple<>(BLOCKS.D, BLOCKS.E), new BTuple<>(BLOCKS.E, BLOCKS.F), new BTuple<>(BLOCKS.F, BLOCKS.G))), new BTuple<>(ROUTES.R3, new BRelation<BLOCKS, BLOCKS>(new BTuple<>(BLOCKS.L, BLOCKS.A), new BTuple<>(BLOCKS.A, BLOCKS.B), new BTuple<>(BLOCKS.B, BLOCKS.D), new BTuple<>(BLOCKS.D, BLOCKS.K), new BTuple<>(BLOCKS.K, BLOCKS.J), new BTuple<>(BLOCKS.J, BLOCKS.N))), new BTuple<>(ROUTES.R4, new BRelation<BLOCKS, BLOCKS>(new BTuple<>(BLOCKS.M, BLOCKS.H), new BTuple<>(BLOCKS.H, BLOCKS.I), new BTuple<>(BLOCKS.I, BLOCKS.K), new BTuple<>(BLOCKS.K, BLOCKS.F), new BTuple<>(BLOCKS.F, BLOCKS.G))), new BTuple<>(ROUTES.R5, new BRelation<BLOCKS, BLOCKS>(new BTuple<>(BLOCKS.M, BLOCKS.H), new BTuple<>(BLOCKS.H, BLOCKS.I), new BTuple<>(BLOCKS.I, BLOCKS.J), new BTuple<>(BLOCKS.J, BLOCKS.N))), new BTuple<>(ROUTES.R6, new BRelation<BLOCKS, BLOCKS>(new BTuple<>(BLOCKS.C, BLOCKS.B), new BTuple<>(BLOCKS.B, BLOCKS.A), new BTuple<>(BLOCKS.A, BLOCKS.L))), new BTuple<>(ROUTES.R7, new BRelation<BLOCKS, BLOCKS>(new BTuple<>(BLOCKS.G, BLOCKS.F), new BTuple<>(BLOCKS.F, BLOCKS.E), new BTuple<>(BLOCKS.E, BLOCKS.D), new BTuple<>(BLOCKS.D, BLOCKS.B), new BTuple<>(BLOCKS.B, BLOCKS.A), new BTuple<>(BLOCKS.A, BLOCKS.L))), new BTuple<>(ROUTES.R8, new BRelation<BLOCKS, BLOCKS>(new BTuple<>(BLOCKS.N, BLOCKS.J), new BTuple<>(BLOCKS.J, BLOCKS.K), new BTuple<>(BLOCKS.K, BLOCKS.D), new BTuple<>(BLOCKS.D, BLOCKS.B), new BTuple<>(BLOCKS.B, BLOCKS.A), new BTuple<>(BLOCKS.A, BLOCKS.L))), new BTuple<>(ROUTES.R9, new BRelation<BLOCKS, BLOCKS>(new BTuple<>(BLOCKS.G, BLOCKS.F), new BTuple<>(BLOCKS.F, BLOCKS.K), new BTuple<>(BLOCKS.K, BLOCKS.I), new BTuple<>(BLOCKS.I, BLOCKS.H), new BTuple<>(BLOCKS.H, BLOCKS.M))), new BTuple<>(ROUTES.R10, new BRelation<BLOCKS, BLOCKS>(new BTuple<>(BLOCKS.N, BLOCKS.J), new BTuple<>(BLOCKS.J, BLOCKS.I), new BTuple<>(BLOCKS.I, BLOCKS.H), new BTuple<>(BLOCKS.H, BLOCKS.M)))); + BRelation<BLOCKS, ROUTES> _ic_set_0 = new BRelation<BLOCKS, ROUTES>(); + for(BLOCKS _ic_b_1 : _BLOCKS) { + for(ROUTES _ic_r_1 : _ROUTES) { + if((new BBoolean(nxt.domain().elementOf(_ic_r_1).booleanValue() && new BBoolean(nxt.functionCall(_ic_r_1).domain().elementOf(_ic_b_1).booleanValue() || nxt.functionCall(_ic_r_1).range().elementOf(_ic_b_1).booleanValue()).booleanValue())).booleanValue()) { + _ic_set_0 = _ic_set_0.union(new BRelation<BLOCKS, ROUTES>(new BTuple<>(_ic_b_1, _ic_r_1))); + } + + } + } + + rtbl = _ic_set_0; + } + + public Train_1_beebook_deterministic_MC_POR_v2() { + resrt = new BSet<ROUTES>(); + resbl = new BSet<BLOCKS>(); + rsrtbl = new BRelation<BLOCKS, ROUTES>(); + OCC = new BSet<BLOCKS>(); + TRK = new BRelation<BLOCKS, BLOCKS>(); + frm = new BSet<ROUTES>(); + LBT = new BSet<BLOCKS>(); + } + + + public Train_1_beebook_deterministic_MC_POR_v2(BRelation<ROUTES, BLOCKS> fst, BRelation<ROUTES, BLOCKS> lst, BRelation<ROUTES, BRelation<BLOCKS, BLOCKS>> nxt, BRelation<BLOCKS, ROUTES> rtbl, BSet<BLOCKS> LBT, BRelation<BLOCKS, BLOCKS> TRK, BSet<ROUTES> frm, BSet<BLOCKS> OCC, BSet<BLOCKS> resbl, BSet<ROUTES> resrt, BRelation<BLOCKS, ROUTES> rsrtbl) { + this.fst = fst; + this.lst = lst; + this.nxt = nxt; + this.rtbl = rtbl; + this.LBT = LBT; + this.TRK = TRK; + this.frm = frm; + this.OCC = OCC; + this.resbl = resbl; + this.resrt = resrt; + this.rsrtbl = rsrtbl; + } + + + public void route_reservation(ROUTES r) { + BSet<ROUTES> _ld_resrt = resrt; + BRelation<BLOCKS, ROUTES> _ld_rsrtbl = rsrtbl; + BSet<BLOCKS> _ld_resbl = resbl; + resrt = _ld_resrt.union(new BSet<ROUTES>(r)); + rsrtbl = _ld_rsrtbl.union(rtbl.rangeRestriction(new BSet<ROUTES>(r))); + resbl = _ld_resbl.union(rtbl.inverse().relationImage(new BSet<ROUTES>(r))); + + } + + public void route_freeing(ROUTES r) { + BSet<ROUTES> _ld_resrt = resrt; + BSet<ROUTES> _ld_frm = frm; + resrt = _ld_resrt.difference(new BSet<ROUTES>(r)); + frm = _ld_frm.difference(new BSet<ROUTES>(r)); + + } + + public void FRONT_MOVE_1(ROUTES r) { + BSet<BLOCKS> _ld_OCC = OCC; + + BSet<BLOCKS> _ld_LBT = LBT; + OCC = _ld_OCC.union(new BSet<BLOCKS>(fst.functionCall(r))); + LBT = _ld_LBT.union(new BSet<BLOCKS>(fst.functionCall(r))); + + } + + public void FRONT_MOVE_2(BLOCKS b) { + OCC = OCC.union(new BSet<BLOCKS>(TRK.functionCall(b))); + + } + + public void BACK_MOVE_1(BLOCKS b) { + BSet<BLOCKS> _ld_OCC = OCC; + + BSet<BLOCKS> _ld_LBT = LBT; + BRelation<BLOCKS, ROUTES> _ld_rsrtbl = rsrtbl; + BSet<BLOCKS> _ld_resbl = resbl; + OCC = _ld_OCC.difference(new BSet<BLOCKS>(b)); + rsrtbl = _ld_rsrtbl.domainSubstraction(new BSet<BLOCKS>(b)); + resbl = _ld_resbl.difference(new BSet<BLOCKS>(b)); + LBT = _ld_LBT.difference(new BSet<BLOCKS>(b)); + + } + + public void BACK_MOVE_2(BLOCKS b) { + BSet<BLOCKS> _ld_OCC = OCC; + + BSet<BLOCKS> _ld_LBT = LBT; + BRelation<BLOCKS, ROUTES> _ld_rsrtbl = rsrtbl; + BSet<BLOCKS> _ld_resbl = resbl; + OCC = _ld_OCC.difference(new BSet<BLOCKS>(b)); + rsrtbl = _ld_rsrtbl.domainSubstraction(new BSet<BLOCKS>(b)); + resbl = _ld_resbl.difference(new BSet<BLOCKS>(b)); + LBT = _ld_LBT.difference(new BSet<BLOCKS>(b)).union(new BSet<BLOCKS>(TRK.functionCall(b))); + + } + + public void point_positionning(ROUTES r) { + TRK = TRK.domainSubstraction(nxt.functionCall(r).domain()).rangeSubstraction(nxt.functionCall(r).range()).union(nxt.functionCall(r)); + + } + + public void route_formation(ROUTES r) { + frm = frm.union(new BSet<ROUTES>(r)); + + } + + public BRelation<ROUTES, BLOCKS> _get_fst() { + return fst; + } + + public BRelation<ROUTES, BLOCKS> _get_lst() { + return lst; + } + + public BRelation<ROUTES, BRelation<BLOCKS, BLOCKS>> _get_nxt() { + return nxt; + } + + public BRelation<BLOCKS, ROUTES> _get_rtbl() { + return rtbl; + } + + public BSet<BLOCKS> _get_LBT() { + return LBT; + } + + public BRelation<BLOCKS, BLOCKS> _get_TRK() { + return TRK; + } + + public BSet<ROUTES> _get_frm() { + return frm; + } + + public BSet<BLOCKS> _get_OCC() { + return OCC; + } + + public BSet<BLOCKS> _get_resbl() { + return resbl; + } + + public BSet<ROUTES> _get_resrt() { + return resrt; + } + + public BRelation<BLOCKS, ROUTES> _get_rsrtbl() { + return rsrtbl; + } + + public BSet<BLOCKS> _get__BLOCKS() { + return _BLOCKS; + } + + public BSet<ROUTES> _get__ROUTES() { + return _ROUTES; + } + + + public BSet<ROUTES> _tr_route_reservation() { + BSet<ROUTES> _ic_set_1 = new BSet<ROUTES>(); + for(ROUTES _ic_r_1 : _ROUTES.difference(resrt)) { + if((new BBoolean(rtbl.inverse().relationImage(new BSet<ROUTES>(_ic_r_1)).intersect(resbl).equal(new BSet<BLOCKS>()).booleanValue() && new BSet<ROUTES>().equal(resrt.difference(rsrtbl.range())).booleanValue())).booleanValue()) { + _ic_set_1 = _ic_set_1.union(new BSet<ROUTES>(_ic_r_1)); + } + + } + return _ic_set_1; + } + + public BSet<ROUTES> _tr_route_freeing() { + BSet<ROUTES> _ic_set_2 = new BSet<ROUTES>(); + for(ROUTES _ic_r_1 : resrt.difference(rsrtbl.range())) { + _ic_set_2 = _ic_set_2.union(new BSet<ROUTES>(_ic_r_1)); + + } + return _ic_set_2; + } + + public BSet<ROUTES> _tr_FRONT_MOVE_1() { + BSet<ROUTES> _ic_set_3 = new BSet<ROUTES>(); + for(ROUTES _ic_r_1 : frm) { + if((new BBoolean(new BBoolean(resbl.difference(OCC).elementOf(fst.functionCall(_ic_r_1)).booleanValue() && _ic_r_1.equal(rsrtbl.functionCall(fst.functionCall(_ic_r_1))).booleanValue()).booleanValue() && new BSet<ROUTES>().equal(resrt.difference(rsrtbl.range())).booleanValue())).booleanValue()) { + _ic_set_3 = _ic_set_3.union(new BSet<ROUTES>(_ic_r_1)); + } + + } + return _ic_set_3; + } + + public BSet<BLOCKS> _tr_FRONT_MOVE_2() { + BSet<BLOCKS> _ic_set_4 = new BSet<BLOCKS>(); + for(BLOCKS _ic_b_1 : OCC.intersect(TRK.domain())) { + if((OCC.notElementOf(TRK.functionCall(_ic_b_1))).booleanValue()) { + _ic_set_4 = _ic_set_4.union(new BSet<BLOCKS>(_ic_b_1)); + } + + } + return _ic_set_4; + } + + public BSet<BLOCKS> _tr_BACK_MOVE_1() { + BSet<BLOCKS> _ic_set_5 = new BSet<BLOCKS>(); + for(BLOCKS _ic_b_1 : LBT.difference(TRK.domain())) { + if((new BSet<ROUTES>().equal(resrt.difference(rsrtbl.range()))).booleanValue()) { + _ic_set_5 = _ic_set_5.union(new BSet<BLOCKS>(_ic_b_1)); + } + + } + return _ic_set_5; + } + + public BSet<BLOCKS> _tr_BACK_MOVE_2() { + BSet<BLOCKS> _ic_set_6 = new BSet<BLOCKS>(); + for(BLOCKS _ic_b_1 : LBT.intersect(TRK.domain())) { + if((new BBoolean(OCC.elementOf(TRK.functionCall(_ic_b_1)).booleanValue() && new BSet<ROUTES>().equal(resrt.difference(rsrtbl.range())).booleanValue())).booleanValue()) { + _ic_set_6 = _ic_set_6.union(new BSet<BLOCKS>(_ic_b_1)); + } + + } + return _ic_set_6; + } + + public BSet<ROUTES> _tr_point_positionning() { + BSet<ROUTES> _ic_set_7 = new BSet<ROUTES>(); + for(ROUTES _ic_r_1 : resrt.difference(frm)) { + if((new BSet<ROUTES>().equal(resrt.difference(rsrtbl.range()))).booleanValue()) { + _ic_set_7 = _ic_set_7.union(new BSet<ROUTES>(_ic_r_1)); + } + + } + return _ic_set_7; + } + + public BSet<ROUTES> _tr_route_formation() { + BSet<ROUTES> _ic_set_8 = new BSet<ROUTES>(); + for(ROUTES _ic_r_1 : resrt.difference(frm)) { + if((new BBoolean(nxt.functionCall(_ic_r_1).domainRestriction(rsrtbl.inverse().relationImage(new BSet<ROUTES>(_ic_r_1))).equal(TRK.domainRestriction(rsrtbl.inverse().relationImage(new BSet<ROUTES>(_ic_r_1)))).booleanValue() && new BSet<ROUTES>().equal(resrt.difference(rsrtbl.range())).booleanValue())).booleanValue()) { + _ic_set_8 = _ic_set_8.union(new BSet<ROUTES>(_ic_r_1)); + } + + } + return _ic_set_8; + } + + public boolean _check_inv_1() { + return TRK.checkDomain(_BLOCKS).and(TRK.checkRange(_BLOCKS)).and(TRK.isFunction()).and(TRK.isPartial(_BLOCKS)).and(TRK.isInjection()).booleanValue(); + } + + public boolean _check_inv_2() { + BBoolean _ic_boolean_9 = new BBoolean(true); + for(ROUTES _ic_r_1 : resrt.difference(frm)) { + for(BSet<ROUTES> _ic_a_1 : Arrays.asList(new BSet<ROUTES>(_ic_r_1))) { + if(!(rtbl.rangeRestriction(_ic_a_1).equal(rsrtbl.rangeRestriction(_ic_a_1))).booleanValue()) { + _ic_boolean_9 = new BBoolean(false); + break; + } + + } + + } + + return _ic_boolean_9.booleanValue(); + } + + public boolean _check_inv_3() { + BBoolean _ic_boolean_11 = new BBoolean(true); + for(BLOCKS _ic_x_1 : TRK.domain()) { + for(BLOCKS _ic_y_1 : TRK.relationImage(new BSet<BLOCKS>(_ic_x_1))) { + BBoolean _ic_boolean_10 = new BBoolean(false); + for(ROUTES _ic_r_1 : _ROUTES) { + if((nxt.functionCall(_ic_r_1).elementOf(new BTuple<>(_ic_x_1, _ic_y_1))).booleanValue()) { + _ic_boolean_10 = new BBoolean(true); + break; + } + + } + + if(!(_ic_boolean_10).booleanValue()) { + _ic_boolean_11 = new BBoolean(false); + break; + } + + } + } + + return _ic_boolean_11.booleanValue(); + } + + public boolean _check_inv_4() { + BBoolean _ic_boolean_12 = new BBoolean(true); + for(ROUTES _ic_r_1 : frm) { + for(BSet<BLOCKS> _ic_a_1 : Arrays.asList(rsrtbl.inverse().relationImage(new BSet<ROUTES>(_ic_r_1)))) { + if(!(nxt.functionCall(_ic_r_1).domainRestriction(_ic_a_1).equal(TRK.domainRestriction(_ic_a_1))).booleanValue()) { + _ic_boolean_12 = new BBoolean(false); + break; + } + + } + + } + + return _ic_boolean_12.booleanValue(); + } + + public boolean _check_inv_5() { + return LBT.subset(OCC).booleanValue(); + } + + public boolean _check_inv_6() { + BBoolean _ic_boolean_13 = new BBoolean(true); + for(BLOCKS _ic_a_1 : rsrtbl.domain()) { + for(BLOCKS _ic_b_1 : LBT) { + for(ROUTES _ic_c_1 : Arrays.asList(rsrtbl.functionCall(_ic_b_1))) { + for(BRelation<BLOCKS, BLOCKS> _ic_d_1 : Arrays.asList(nxt.functionCall(_ic_c_1))) { + if(!(new BBoolean(!new BBoolean(_ic_d_1.range().elementOf(_ic_b_1).booleanValue() && _ic_a_1.equal(_ic_d_1.inverse().functionCall(_ic_b_1)).booleanValue()).booleanValue() || rsrtbl.functionCall(_ic_a_1).unequal(_ic_c_1).booleanValue())).booleanValue()) { + _ic_boolean_13 = new BBoolean(false); + break; + } + + } + + } + + } + } + + return _ic_boolean_13.booleanValue(); + } + + public boolean _check_inv_7() { + return rsrtbl.checkDomain(resbl).and(rsrtbl.checkRange(resrt)).and(rsrtbl.isFunction()).and(rsrtbl.isTotal(resbl)).booleanValue(); + } + + public boolean _check_inv_8() { + return rsrtbl.subset(rtbl).booleanValue(); + } + + public boolean _check_inv_9() { + return OCC.subset(resbl).booleanValue(); + } + + public boolean _check_inv_10() { + BBoolean _ic_boolean_14 = new BBoolean(true); + for(ROUTES _ic_r_1 : _ROUTES) { + for(BRelation<BLOCKS, BLOCKS> _ic_a_1 : Arrays.asList(nxt.functionCall(_ic_r_1))) { + for(BSet<BLOCKS> _ic_b_1 : Arrays.asList(rsrtbl.inverse().relationImage(new BSet<ROUTES>(_ic_r_1)))) { + for(BSet<BLOCKS> _ic_c_1 : Arrays.asList(_ic_b_1.difference(OCC))) { + if(!(new BBoolean(new BBoolean(_ic_a_1.relationImage(rtbl.inverse().relationImage(new BSet<ROUTES>(_ic_r_1)).difference(_ic_b_1)).intersect(_ic_c_1).equal(new BSet<BLOCKS>()).booleanValue() && _ic_a_1.relationImage(_ic_b_1).subset(_ic_b_1).booleanValue()).booleanValue() && _ic_a_1.relationImage(_ic_c_1).subset(_ic_c_1).booleanValue())).booleanValue()) { + _ic_boolean_14 = new BBoolean(false); + break; + } + + } + + } + + } + + } + + return _ic_boolean_14.booleanValue(); + } + + public boolean _check_inv_11() { + return frm.subset(resrt).booleanValue(); + } + + public boolean _check_inv_12() { + return rsrtbl.relationImage(OCC).subset(frm).booleanValue(); + } + + public boolean _check_inv_() { + return !(!state._check_inv_1() || !state._check_inv_2() || !state._check_inv_3() || !state._check_inv_4() || !state._check_inv_5() || !state._check_inv_6() || !state._check_inv_7() || !state._check_inv_8() || !state._check_inv_9() || !state._check_inv_10() || !state._check_inv_11() || !state._check_inv_12()); + } + + public Train_1_beebook_deterministic_MC_POR_v2 _copy() { + return new Train_1_beebook_deterministic_MC_POR_v2(fst, lst, nxt, rtbl, LBT, TRK, frm, OCC, resbl, resrt, rsrtbl); + } + + + + +} diff --git a/Beispiele/Train_1_beebook_deterministic_MC_POR_v2.json b/Beispiele/Train_1_beebook_deterministic_MC_POR_v2.json new file mode 100644 index 0000000000000000000000000000000000000000..e1eabf3eb28a551a7518130cab8541f3c16cccef --- /dev/null +++ b/Beispiele/Train_1_beebook_deterministic_MC_POR_v2.json @@ -0,0 +1,72 @@ +{ + "machineName": "Train_1_beebook_deterministic_MC_POR_v2", + "variables": [ + "_get_LBT", + "_get_TRK", + "_get_frm", + "_get_OCC", + "_get_resbl", + "_get_resrt", + "_get_rsrtbl" + ], + "operationFunctions": [ + { + "opName": "route_reservation", + "parameterTypes": [ + "Train_1_beebook_deterministic_MC_POR_v2$ROUTES" + ] + }, + { + "opName": "route_freeing", + "parameterTypes": [ + "Train_1_beebook_deterministic_MC_POR_v2$ROUTES" + ] + }, + { + "opName": "FRONT_MOVE_1", + "parameterTypes": [ + "Train_1_beebook_deterministic_MC_POR_v2$ROUTES" + ] + }, + { + "opName": "FRONT_MOVE_2", + "parameterTypes": [ + "Train_1_beebook_deterministic_MC_POR_v2$BLOCKS" + ] + }, + { + "opName": "BACK_MOVE_1", + "parameterTypes": [ + "Train_1_beebook_deterministic_MC_POR_v2$BLOCKS" + ] + }, + { + "opName": "BACK_MOVE_2", + "parameterTypes": [ + "Train_1_beebook_deterministic_MC_POR_v2$BLOCKS" + ] + }, + { + "opName": "point_positionning", + "parameterTypes": [ + "Train_1_beebook_deterministic_MC_POR_v2$ROUTES" + ] + }, + { + "opName": "route_formation", + "parameterTypes": [ + "Train_1_beebook_deterministic_MC_POR_v2$ROUTES" + ] + } + ], + "transitionEvaluationFunctions": { + "point_positionning": "_tr_point_positionning", + "route_reservation": "_tr_route_reservation", + "FRONT_MOVE_1": "_tr_FRONT_MOVE_1", + "BACK_MOVE_1": "_tr_BACK_MOVE_1", + "FRONT_MOVE_2": "_tr_FRONT_MOVE_2", + "route_formation": "_tr_route_formation", + "route_freeing": "_tr_route_freeing", + "BACK_MOVE_2": "_tr_BACK_MOVE_2" + } +} diff --git a/Beispiele/Train_1_beebook_deterministic_MC_POR_v2.mch b/Beispiele/Train_1_beebook_deterministic_MC_POR_v2.mch new file mode 100644 index 0000000000000000000000000000000000000000..40a4dc747dda7a17e0f51b6ae90f4940fdc25c82 --- /dev/null +++ b/Beispiele/Train_1_beebook_deterministic_MC_POR_v2.mch @@ -0,0 +1,173 @@ +MACHINE Train_1_beebook_deterministic_MC_POR_v2 +SETS /* enumerated */ + BLOCKS={A,B,C,D,E,F,G,H,I,J,K,L,M,N}; + ROUTES={R1,R2,R3,R4,R5,R6,R7,R8,R9,R10} +CONCRETE_CONSTANTS + fst, + lst, + nxt, + rtbl +ABSTRACT_VARIABLES + LBT, + TRK, + frm, + OCC, + resbl, + resrt, + rsrtbl +/* PROMOTED OPERATIONS + route_reservation, + route_freeing, + FRONT_MOVE_1, + FRONT_MOVE_2, + BACK_MOVE_1, + BACK_MOVE_2, + point_positionning, + route_formation */ +PROPERTIES + /* @axm2 */ dom(rtbl) = BLOCKS + & /* @axm3 */ ran(rtbl) = ROUTES + & /* @axm4 */ nxt : ROUTES --> (BLOCKS >+> BLOCKS) + & /* @axm5 */ fst : ROUTES --> BLOCKS + & /* @axm6 */ lst : ROUTES --> BLOCKS + & /* @axm7 */ fst~ <: rtbl + & /* @axm8 */ lst~ <: rtbl + & /* @axm11 */ !(r).(r : ROUTES => fst(r) /= lst(r)) + & /* @axm10 */ !(r).(r : ROUTES => !(S).(S <: ran(nxt(r)) & S <: nxt(r)[S] => S = {})) + & /* @axm9 */ !(r).(r : ROUTES => nxt(r) : (rtbl~)[{r}] \ {lst(r)} >->> (rtbl~)[{r}] \ {fst(r)}) + & /* @axm12 */ !(r,s).((r : ROUTES & s : ROUTES) & r /= s => fst(r) /: (rtbl~)[{s}] \ {fst(s),lst(s)}) + & /* @axm13 */ !(r,s).((r : ROUTES & s : ROUTES) & r /= s => lst(r) /: (rtbl~)[{s}] \ {fst(s),lst(s)}) + & /* @compute_rtbl_from_nxt */ rtbl = {b,r|b : BLOCKS & r : ROUTES & (r : dom(nxt) & (b : dom(nxt(r)) or b : ran(nxt(r))))} + & /* @axm40 */ nxt = {R1 |-> {L |-> A,A |-> B,B |-> C},R2 |-> {L |-> A,A |-> B,B |-> D,D |-> E,E |-> F,F |-> G},R3 |-> {L |-> A,A |-> B,B |-> D,D |-> K,K |-> J,J |-> N},R4 |-> {M |-> H,H |-> I,I |-> K,K |-> F,F |-> G},R5 |-> {M |-> H,H |-> I,I |-> J,J |-> N},R6 |-> {C |-> B,B |-> A,A |-> L},R7 |-> {G |-> F,F |-> E,E |-> D,D |-> B,B |-> A,A |-> L},R8 |-> {N |-> J,J |-> K,K |-> D,D |-> B,B |-> A,A |-> L},R9 |-> {G |-> F,F |-> K,K |-> I,I |-> H,H |-> M},R10 |-> {N |-> J,J |-> I,I |-> H,H |-> M}} + & /* @axm41 */ fst = {R1 |-> L,R2 |-> L,R3 |-> L,R4 |-> M,R5 |-> M,R6 |-> C,R7 |-> G,R8 |-> N,R9 |-> G,R10 |-> N} + & /* @axm42 */ lst = {R1 |-> C,R2 |-> G,R3 |-> N,R4 |-> G,R5 |-> N,R6 |-> L,R7 |-> L,R8 |-> L,R9 |-> M,R10 |-> M} +INVARIANT + /* @inv1 */ TRK : BLOCKS >+> BLOCKS + + & /* @inv4 */ !(r,a).(r : resrt \ frm & a = {r} => rtbl |> a = rsrtbl |> a) + & /* @inv5 */ !(x,y).(x : dom(TRK) & y : TRK[{x}] => #(r).(r : ROUTES & x |-> y : nxt(r))) + & /* @inv6 */ !(r,a).(r : frm & a = (rsrtbl~)[{r}] => a <| nxt(r) = a <| TRK) + & /* @inv7 */ LBT <: OCC + & /* @inv8 */ !(a,b,c,d).(a : dom(rsrtbl) & b : LBT & c = rsrtbl(b) & d = nxt(c) & + (b : ran(d) & (a = (d~)(b))) => rsrtbl(a) /= c) + & /* @inv9 */ rsrtbl : resbl --> resrt + & /* @inv10 */ rsrtbl <: rtbl + & /* @inv11 */ OCC <: resbl + & /* @inv12 */ !(r,a,b,c).(r : ROUTES & a = nxt(r) & b = (rsrtbl~)[{r}] & c = b \ OCC => + a[(rtbl~)[{r}] \ b] /\ c = {} & + a[b] <: b & + a[c] <: c) + & /* @inv2 */ frm <: resrt + & /* @inv3 */ rsrtbl[OCC] <: frm +ASSERTIONS + /* @thm1 */ !(b).(b : OCC & b : dom(TRK) => nxt(rsrtbl(b))(b) = TRK(b)); + /* @thm2 */ ran(lst) /\ dom(TRK) \ ran(fst) = {}; + /* @thm3 */ ran(fst) /\ ran(TRK) \ ran(lst) = {} +INITIALISATION + resrt := {} + || + resbl := {} + || + rsrtbl := {} + || + OCC := {} + || + TRK := {} + || + frm := {} + || + LBT := {} + +OPERATIONS + route_reservation(r) = + + PRE + /* @grd1 */ r : ROUTES \ resrt + & /* @grd2 */ (rtbl~)[{r}] /\ resbl = {} + & ({} = resrt \ ran(rsrtbl)) /* POR REDUCTION */ + THEN + resrt := resrt \/ {r} + || + rsrtbl := rsrtbl \/ (rtbl |> {r}) + || + resbl := resbl \/ (rtbl~)[{r}] + END; + + route_freeing(r) = + PRE + /* @grd1 */ r : resrt \ ran(rsrtbl) + THEN + resrt := resrt \ {r} + || + frm := frm \ {r} + END; + + FRONT_MOVE_1(r) = + PRE + /* @grd1 */ r : frm + & /* @grd3 */ fst(r) : resbl \ OCC + & /* @grd2 */ r = rsrtbl(fst(r)) + & ({} = resrt \ ran(rsrtbl)) /* POR REDUCTION */ + THEN + OCC := OCC \/ {fst(r)} + || + LBT := LBT \/ {fst(r)} + END; + + FRONT_MOVE_2(b) = + PRE + /* @grd1 */ b : OCC /\ dom(TRK) + & /* @grd2 */ TRK(b) /: OCC + THEN + OCC := OCC \/ {TRK(b)} + END; + + BACK_MOVE_1(b) = + PRE + /* @grd1 */ b : LBT \ dom(TRK) + & ({} = resrt \ ran(rsrtbl)) /* POR REDUCTION */ + THEN + OCC := OCC \ {b} + || + rsrtbl := {b} <<| rsrtbl + || + resbl := resbl \ {b} + || + LBT := LBT \ {b} + END; + + BACK_MOVE_2(b) = + PRE + /* @grd1 */ b : LBT /\ dom(TRK) + & /* @grd2 */ TRK(b) : OCC + & ({} = resrt \ ran(rsrtbl)) /* POR REDUCTION */ + THEN + OCC := OCC \ {b} + || + rsrtbl := {b} <<| rsrtbl + || + resbl := resbl \ {b} + || + LBT := LBT \ {b} \/ {TRK(b)} + + END; + + point_positionning(r) = + PRE + /* @grd1 */ r : resrt \ frm + & ({} = resrt \ ran(rsrtbl)) /* POR REDUCTION */ + THEN + TRK := ((dom(nxt(r)) <<| TRK) |>> ran(nxt(r))) \/ nxt(r) + END; + + route_formation(r) = + PRE + /* @grd1 */ r : resrt \ frm + & /* @grd2 */ (rsrtbl~)[{r}] <| nxt(r) = (rsrtbl~)[{r}] <| TRK + & ({} = resrt \ ran(rsrtbl)) /* POR REDUCTION */ + THEN + frm := frm \/ {r} + END + +END + diff --git a/Beispiele/scheduler_deterministic_MC.mch b/Beispiele/scheduler_deterministic_MC.mch new file mode 100644 index 0000000000000000000000000000000000000000..8447d8f18084c7c44f27d319d6c5626dafca7ff3 --- /dev/null +++ b/Beispiele/scheduler_deterministic_MC.mch @@ -0,0 +1,63 @@ +MACHINE scheduler_deterministic_MC + +SETS + PID = {process1,process2,process3} + +VARIABLES active, ready, waiting + +DEFINITIONS + ASSERT_LTL == "G([new]=> X e(del))"; /* This formula is true */ + +INVARIANT active : POW(PID) & ready : POW(PID) & waiting: POW(PID) & /* the types */ + /* and now the rest of the invariant */ + active <: PID & + ready <: PID & + waiting <: PID & + (ready /\ waiting) = {} & + active /\ (ready \/ waiting) = {} & + card(active) <= 1 + +INITIALISATION + active := {}; ready := {}; waiting := {} + +OPERATIONS + +new(pp) = + SELECT + pp : PID & + pp /: active & + pp /: (ready \/ waiting) + THEN + waiting := (waiting \/ { pp }) + END; + +del(pp) = + SELECT + pp : waiting + THEN + waiting := waiting - { pp } + END; + +ready(rr) = + SELECT + rr : waiting + THEN + waiting := (waiting - {rr}); + IF (active = {}) THEN + active := {rr} + ELSE + ready := ready \/ {rr} + END + END; + +swap(pp) = + PRE pp : PID & ((ready /= {}) => pp : ready) & active /= {} THEN + waiting := (waiting \/ active); + IF (ready = {}) THEN + active := {} + ELSE + active := {pp}; + ready := ready - {pp} + END + END +END \ No newline at end of file diff --git a/Beispiele/sort_m2_data100_MC.mch b/Beispiele/sort_m2_data100_MC.mch new file mode 100644 index 0000000000000000000000000000000000000000..46b44c6b47dbaddf6928f3d71f8a1ab1f803dd93 --- /dev/null +++ b/Beispiele/sort_m2_data100_MC.mch @@ -0,0 +1,82 @@ +MACHINE sort_m2_data1000_MC +// a version where some assertions and invariants are simplified/removed +// so that TLC4B can infer a function type for f and g +CONCRETE_CONSTANTS + n, + f +ABSTRACT_VARIABLES + j, + k, + l, + g +/* PROMOTED OPERATIONS + progress, + prog1, + prog2, + final_evt */ +PROPERTIES + n : INTEGER + & n = 100 + & /* @sort_c0:axm1 */ n > 0 + & /* @sort_c0:axm2 */ f : 1 .. n >-> NATURAL + & /* @sort_c0_data100:prob_f */ f = %i.(i : 1 .. n| 15000 - i) +INVARIANT + /* @sort_m2:inv1_m2 */ j >= k & j <= n + & /* @sort_m2:inv2_m2 */ l >= k & j <= j + & /* @sort_m2:inv3_m2 */ g(l) = min(g[k .. j]) + & /* @sort_m1:inv1_m1 */ g : 1 .. n >-> NATURAL + +INITIALISATION + BEGIN + g := f + || + k := 1 + || + l := 1 + || + j := 1 + END +OPERATIONS + progress = + SELECT + /* @sort_m2_data100:grd1 */ k /= n + & /* @sort_m2_data100:grd2 */ j = n + THEN + g := g <+ ({k |-> g(l)} <+ {l |-> g(k)}) + || + k := k + 1 + || + j := k + 1 + || + l := k + 1 + END; + + prog1 = + SELECT + /* @sort_m2_data100:grd1 */ k /= n + & /* @sort_m2_data100:grd2 */ j /= n + & /* @sort_m2_data100:grd3 */ g(l) <= g(j + 1) + THEN + l := l + || + j := j + 1 + END; + + prog2 = + SELECT + /* @sort_m2_data100:grd1 */ k /= n + & /* @sort_m2_data100:grd2 */ j /= n + & /* @sort_m2_data100:grd3 */ g(l) > g(j + 1) + THEN + j := j + 1 + || + l := j + 1 + END; + + final_evt = + SELECT + /* @sort_m2_data100:grd1 */ k = n + THEN + skip + END +END diff --git a/notes b/notes index ea2ee9c4c5c25f33ac8e3a97557f64b2ab02339d..6b3654a5c7cdbb2f505da85e9711c11b5d00558d 100644 --- a/notes +++ b/notes @@ -4,5 +4,7 @@ Scheduler: 35 states, 144 transitions Sorting Algorithm: 5050 states, 5050 transitions Cruise Controller: 1360 states, 26148 transitions CAN BUS: 132598 states, 340264 transitions +Landing Gear: 131328 states, 884369 transitions +Train: 672174 states, 2244486 transitions No Invariant Violations, No Deadlocks