def test_response(): s = gr1.response_to_gr1('p', 'q') assert isinstance(s, spec.GRSpec) assert 'p' in s.sys_vars assert 'q' in s.sys_vars # p && []!q s0 = spec.GRSpec(sys_vars={'p', 'q'}, sys_init={'p'}, sys_safety={'!q'}) assert not synth.is_realizable('gr1c', s | s0) # []!p && []!q s1 = spec.GRSpec(sys_vars={'p', 'q'}, sys_safety={'!p && !q'}) assert synth.is_realizable('gr1c', s | s1) # p && q s2 = spec.GRSpec( sys_vars={'p', 'q'}, sys_init={'p && q'}, ) assert synth.is_realizable('gr1c', s | s2) # alternating p, alternating q s3 = spec.GRSpec( sys_vars={'p', 'q'}, sys_safety={'p -> X !p', '!p -> X p', 'p -> X q', 'q -> X ! q'}) assert synth.is_realizable('gr1c', s | s3)
def test_response(): s = gr1.response_to_gr1('p', 'q') assert isinstance(s, spec.GRSpec) assert 'p' in s.sys_vars assert 'q' in s.sys_vars s.moore = False s.plus_one = False s.qinit = '\A \E' # p && []!q s0 = spec.GRSpec( sys_vars={'p', 'q'}, sys_init={'p'}, sys_safety={'!q'}, moore=False, plus_one=False, qinit='\A \E' ) assert not synth.is_realizable('omega', s | s0) # []!p && []!q s1 = spec.GRSpec( sys_vars={'p', 'q'}, sys_safety={'!p && !q'}, moore=False, plus_one=False, qinit='\A \E' ) assert synth.is_realizable('omega', s | s1) # p && q s2 = spec.GRSpec( sys_vars={'p', 'q'}, sys_init={'p && q'}, moore=False, plus_one=False, qinit='\A \E' ) assert synth.is_realizable('omega', s | s2) # alternating p, alternating q s3 = spec.GRSpec( sys_vars={'p', 'q'}, sys_safety={ 'p -> X !p', '!p -> X p', 'p -> X q', 'q -> X ! q'}, moore=False, plus_one=False, qinit='\A \E' ) assert synth.is_realizable('omega', s | s3)
def test_response(): s = gr1.response_to_gr1('p', 'q') assert isinstance(s, spec.GRSpec) assert 'p' in s.sys_vars assert 'q' in s.sys_vars s.moore = False s.plus_one = False s.qinit = '\A \E' # p && []!q s0 = spec.GRSpec( sys_vars={'p', 'q'}, sys_init={'p'}, sys_safety={'!q'}, moore=False, plus_one=False, qinit='\A \E' ) assert not synth.is_realizable(s | s0) # []!p && []!q s1 = spec.GRSpec( sys_vars={'p', 'q'}, sys_safety={'!p && !q'}, moore=False, plus_one=False, qinit='\A \E' ) assert synth.is_realizable(s | s1) # p && q s2 = spec.GRSpec( sys_vars={'p', 'q'}, sys_init={'p && q'}, moore=False, plus_one=False, qinit='\A \E' ) assert synth.is_realizable(s | s2) # alternating p, alternating q s3 = spec.GRSpec( sys_vars={'p', 'q'}, sys_safety={ 'p -> X !p', '!p -> X p', 'p -> X q', 'q -> X ! q'}, moore=False, plus_one=False, qinit='\A \E' ) assert synth.is_realizable(s | s3)
def test_response(): s = gr1.response_to_gr1('p', 'q') assert isinstance(s, spec.GRSpec) assert 'p' in s.sys_vars assert 'q' in s.sys_vars # p && []!q s0 = spec.GRSpec( sys_vars={'p', 'q'}, sys_init={'p'}, sys_safety={'!q'} ) assert not synth.is_realizable('gr1c', s | s0) # []!p && []!q s1 = spec.GRSpec( sys_vars={'p', 'q'}, sys_safety={'!p && !q'} ) assert synth.is_realizable('gr1c', s | s1) # p && q s2 = spec.GRSpec( sys_vars={'p', 'q'}, sys_init={'p && q'}, ) assert synth.is_realizable('gr1c', s | s2) # alternating p, alternating q s3 = spec.GRSpec( sys_vars={'p', 'q'}, sys_safety={ 'p -> X !p', '!p -> X p', 'p -> X q', 'q -> X ! q' } ) assert synth.is_realizable('gr1c', s | s3)
def pedestrianK(Ncar, Nped, xcar, vcar, Vlow, Vhigh, xped, xcross_start): sys_vars = {} sys_vars['xcar'] = (1, Ncar) sys_vars['vcar'] = (Vlow, Vhigh) env_vars = {} env_vars['xped'] = (0, Nped-xped) # Possible cells pedestrian can occupy sys_init = {'xcar='+str(xcar), 'vcar='+str(vcar)} env_init = {'xped='+str(xped)} # Test lines: sys_init = {'xcar='+str(xcar)} env_init = set() # ========================= # sys_prog = set() # For now, no need to have progress env_prog = set() xcar_jj = xcross_start + (xped-1) - 1 # eventual goal location for car #sys_prog = set({'xcar = '+str(xcar_jj)}) sys_safe = set() env_safe = set() # Environment safety specs: Static pedestrian for xi in range(0, Nped-xped+1): env_safe |= {'xped='+str(xi)+'-> X(xped='+str(xi)+')'} # system safety specs # for ii in range(Nped, 0, -1): # xcar_jj = ii+(xcross_start-1)-1 # assert xcar_jj > 0 # spec1_ii = {'(xcar='+str(xcar_jj)+') && (xped='+str(ii)+')-> (vcar=0)'} # sys_safe |= spec1_ii # spec2_ii = {'(xcar='+str(xcar_jj)+') && !(xped='+str(ii)+')-> (!(vcar=0))'} # sys_safe |= spec2_ii # System safety specs: for ii in range(1, xcross_start): spec2_ii = {'(xcar='+str(ii)+')-> (!(vcar=0))'} sys_safe |= spec2_ii # Adding system safety specifications: for ii in range(0, Nped-xped+1): xcar_jj = ii+xped+(xcross_start-1)-1 pii = '(xped='+str(ii)+')' qii = '(xcar='+str(xcar_jj)+') && (vcar=0)' spec1_pii = response_to_gr1(pii, qii) qii_2 = '!((xcar='+str(xcar_jj)+') && (vcar=0))' pii_2 = '!(xped='+str(ii)+')' spec2_pii = response_to_gr1(pii_2, qii_2) str_aux1 = "aux_"+str(2*ii) str_aux2 = "aux_"+str(2*ii+1) sys_vars[str_aux1] = 'boolean' str_safe = spec1_pii.sys_safety str_prog = spec1_pii.sys_prog sys_vars[str_aux2] = 'boolean' str_safe2 = spec2_pii.sys_safety str_prog2 = spec2_pii.sys_prog for si in str_safe: sii = si.replace("aux", str_aux1) sys_safe |= {sii} for si in str_prog: sii = si.replace("aux", str_aux1) sys_prog |= {sii} for si in str_safe2: sii = si.replace("aux", str_aux2) sys_safe |= {sii} for si in str_prog2: sii = si.replace("aux", str_aux2) sys_prog |= {sii} # Add system dynamics to safety specs: for ii in range(1, Ncar+1): for vi in range(Vlow, Vhigh+1): if vi==0: spec_ii = {'((xcar='+str(ii)+') && (vcar=0))-> X((vcar=0 || vcar=1) && xcar='+str(ii)+')'} sys_safe|=spec_ii elif vi == Vhigh: xf_ii = min(ii+vi, Ncar) spec_ii = {'((xcar='+str(ii)+') && (vcar='+str(vi)+'))-> X((vcar='+str(vi)+'|| vcar='+str(vi-1)+') && xcar='+str(xf_ii)+')'} sys_safe|=spec_ii else: xf_ii = min(ii+vi, Ncar) spec_ii = {'((xcar='+str(ii)+') && (vcar='+str(vi)+'))-> X((vcar='+str(vi)+'|| vcar='+str(vi-1)+'|| vcar='+str(vi+1)+') && xcar='+str(xf_ii)+')'} sys_safe|=spec_ii return env_vars, sys_vars, env_init, sys_init, env_safe, sys_safe, env_prog, sys_prog