# The system specification describes how the system is allowed to move # and what the system is required to do in response to an environmental # action. # sys_vars = {'X0', 'X1', 'X2', 'X3', 'X4', 'X5'} sys_init = {'X0'} sys_safe = { 'X0 -> X (X1 || X3)', 'X1 -> X (X0 || X4 || X2)', 'X2 -> X (X1 || X5)', 'X3 -> X (X0 || X4)', 'X4 -> X (X3 || X1 || X5)', 'X5 -> X (X4 || X2)', } sys_safe.add(synth.exactly_one({'X0', 'X1', 'X2', 'X3', 'X4', 'X5'})[0]) sys_prog = set() # empty set # # System specification # # The system specification is that the robot should repeatedly revisit # the upper right corner of the grid while at the same time responding # to the park signal by visiting the lower left corner. The LTL # specification is given by # # []<> X5 && [](park -> <>X0) # # Since this specification is not in GR(1) form, we introduce an # environment variable X0reach that is initialized to True and the
sys_vars = {'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8'} sys_init = {'a0'} sys_safe = { 'a0 -> X (a1 || a3)', 'a1 -> X (a0 || a4 || a2)', 'a2 -> X (a2)', 'a3 -> X (a0 || a4 || a6)', 'a4 -> X (a1 || a3 || a5 || a7)', 'a5 -> X (a4 || a2 || a8)', 'a6 -> X (a3 || a7)', 'a7 -> X (a4 || a6 || a8)', 'a8 -> X (a7 || a5)', } sys_safe.add(synth.exactly_one( {'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8'} )[0]) sys_prog = {'a2'} # Create the specification specs = spec.GRSpec(env_vars, sys_vars, env_init, sys_init, env_safe, sys_safe, env_prog, sys_prog) # Controller synthesis # # At this point we can synthesize the controller using one of the available # methods. # # @synthesize@ # Moore machines