MACHINE LeftTurnAssist REFINES ControlledSystem SEES LeftTurnAssistCtx VARIABLES t x_s ppov psv vsv vpov asv INVARIANTS inv1: ppov : RRealPlus --> RReal inv2: psv : RRealPlus --> RReal inv3: vsv : RRealPlus --> RReal inv4: vpov : Closed2Closed(uminus(Vmax),Rzero) inv5: asv : Closed2Closed(uminus(B),Amax) inv6: x_p = bind(bind(vsv,psv),ppov) EVENTS INITIALISATION WITH x_p': x_p' = bind(bind(vsv',psv'),ppov') THEN act1: t := Rzero act2: vsv,psv,ppov :| vsv' : RRealPlus --> RReal & psv' : RRealPlus --> RReal & ppov' : RRealPlus --> RReal & solutionOf( RRealPlus, bind(bind(vsv',psv'),ppov'), ode( f_stable(vpov_init), (Rzero |-> Rzero |-> ppov_init), Rzero ) ) act3: x_s := waiting act4: vpov := vpov_init act5: asv := Rzero END Progress REFINES Progress THEN act1: t :| t' : RRealPlus & (t |-> t' : lt) END Behave REFINES Behave ANY e v WHERE grd1: e : DE(S) grd2: Solvable(Closed2Infinity(t),e) grd3: v : Closed2Closed(Rzero,Vmax) WITH x_p': x_p' = bind(bind(vsv',psv'),ppov') THEN act1: vsv,psv,ppov :| vsv' : RRealPlus --> RReal & psv' : RRealPlus --> RReal & ppov' : RRealPlus --> RReal & AppendSolutionBAP( e, RRealPlus, Closed2Open(Rzero,t), Closed2Infinity(t), bind(bind(vsv,psv),ppov), bind(bind(vsv',psv'),ppov') ) act2: vpov := uminus(v) END Transition REFINES Transition ANY s WHERE grd1: s : POW1(STATES) THEN act1: x_s :: s END ctrl_transition_attempt_turn REFINES Transition WHERE grd1: x_s = waiting grd2: Tsv(Amin |-> vsv(t) |-> psv(t)) |-> Tpov(ppov(t)) : lt WITH s: s = {turning} THEN act1: x_s := turning END ctrl_sense_turn_end REFINES Sense WHERE grd1: psv(t) |-> q : geq WITH s: s = {passed} p: p = STATES*RReal*{ vsv_ |-> psv_ |-> ppov_ | vsv_ : RReal & psv_ |-> q : geq & ppov_ : RReal } THEN act1: x_s := passed END ctrl_actuate_waiting REFINES Actuate WHERE grd1: x_s = waiting WITH e: e = ode(f_stable(vpov),(vsv(t) |-> psv(t) |-> ppov(t)),t) s: s = {waiting} x_p': x_p' = bind(bind(vsv',psv'),ppov') THEN act1: vsv,psv,ppov :| vsv' : RRealPlus --> RReal & psv' : RRealPlus --> RReal & ppov' : RRealPlus --> RReal & AppendSolutionBAP( ode(f_stable(vpov),(vsv(t) |-> psv(t) |-> ppov(t)),t), RRealPlus, Closed2Open(Rzero,t), Closed2Infinity(t), bind(bind(vsv,psv),ppov), bind(bind(vsv',psv'),ppov') ) END ctrl_actuate_turning REFINES Actuate ANY a WHERE grd1: x_s = turning grd2: a : Closed2Closed(Amin,Amax) WITH e: e = ode(f_accelerate_min(a |-> vpov |-> vsv(t)),(vsv(t) |-> psv(t) |-> ppov(t)),t) s: s = {turning} x_p': x_p' = bind(bind(vsv',psv'),ppov') THEN act1: vsv,psv,ppov :| vsv' : RRealPlus --> RReal & psv' : RRealPlus --> RReal & ppov' : RRealPlus --> RReal & AppendSolutionBAP( ode(f_accelerate_min(a |-> vpov |-> vsv(t)),(vsv(t) |-> psv(t) |-> ppov(t)),t), RRealPlus, Closed2Open(Rzero,t), Closed2Infinity(t), bind(bind(vsv,psv),ppov), bind(bind(vsv',psv'),ppov') ) act2: asv := a END ctrl_actuate_passed_stable REFINES Actuate WHERE grd1: x_s = passed WITH e: e = ode(f_stable(vpov),(vsv(t) |-> psv(t) |-> ppov(t)),t) s: s = {passed} x_p': x_p' = bind(bind(vsv',psv'),ppov') THEN act1: vsv,psv,ppov :| vsv' : RRealPlus --> RReal & psv' : RRealPlus --> RReal & ppov' : RRealPlus --> RReal & AppendSolutionBAP( ode(f_stable(vpov),(vsv(t) |-> psv(t) |-> ppov(t)),t), RRealPlus, Closed2Open(Rzero,t), Closed2Infinity(t), bind(bind(vsv,psv),ppov), bind(bind(vsv',psv'),ppov') ) act2: asv := Rzero END ctrl_actuate_passed_accelerate REFINES Actuate ANY a WHERE grd1: x_s = passed grd2: a : Open2Closed(Rzero,Amax) WITH e: e = ode(f_accelerate(a |-> vpov |-> vsv(t)),(vsv(t) |-> psv(t) |-> ppov(t)),t) s: s = {passed} x_p': x_p' = bind(bind(vsv',psv'),ppov') THEN act1: vsv,psv,ppov :| vsv' : RRealPlus --> RReal & psv' : RRealPlus --> RReal & ppov' : RRealPlus --> RReal & AppendSolutionBAP( ode(f_accelerate(a |-> vpov |-> vsv(t)),(vsv(t) |-> psv(t) |-> ppov(t)),t), RRealPlus, Closed2Open(Rzero,t), Closed2Infinity(t), bind(bind(vsv,psv),ppov), bind(bind(vsv',psv'),ppov') ) act2: asv := a END ctrl_actuate_passed_decelerate REFINES Actuate ANY a WHERE grd1: x_s = passed grd2: a : Closed2Open(uminus(B),Rzero) WITH e: e = ode(f_decelerate(a |-> vpov |-> vsv(t)),(vsv(t) |-> psv(t) |-> ppov(t)),t) s: s = {passed} x_p': x_p' = bind(bind(vsv',psv'),ppov') THEN act1: vsv,psv,ppov :| vsv' : RRealPlus --> RReal & psv' : RRealPlus --> RReal & ppov' : RRealPlus --> RReal & AppendSolutionBAP( ode(f_decelerate(a |-> vpov |-> vsv(t)),(vsv(t) |-> psv(t) |-> ppov(t)),t), RRealPlus, Closed2Open(Rzero,t), Closed2Infinity(t), bind(bind(vsv,psv),ppov), bind(bind(vsv',psv'),ppov') ) act2: asv := a END END